diff --git a/01_Code/physical_computing_interface/app.js b/01_Code/physical_computing_interface/app.js
index 69cacb3ee7e5e8e5a1a5e0fea29254aa9a2110f4..9ceb617219de8d741c45f0c1858ac9e3cd882870 100644
--- a/01_Code/physical_computing_interface/app.js
+++ b/01_Code/physical_computing_interface/app.js
@@ -29,7 +29,7 @@ assembler.run();
 var sim; //todo change location
 var setup=JSON.parse(JSON.stringify(setupEmpty));
 
-// var ex=gui.add(globalSetup, 'exageration', 0, 10e4).listen();
+// var ex=gui.add(globalSetup, 'exaggeration', 0, 10e4).listen();
 // var sp=gui.add(globalSetup, 'speed', 0, 5).listen();
 // var sp=gui.add(globalSetup, 'updateStress').listen();
 
@@ -38,7 +38,7 @@ var static=true;
 var latticeSize=10;
 var voxelSize=5;
 var globalSetup={
-    exageration:10e10,
+    exaggeration:10e10,
     speed:3.0,
     updateStress:false
 
@@ -118,7 +118,7 @@ rhino3dm().then(async m => {
 		stiffness:1000000
 	};
 
-    setup.hierarical=false;
+    setup.hierarchical=false;
     setup.voxelSize=voxelSize;
 
     const position=new THREE.Vector3(0,0,0);
@@ -163,7 +163,7 @@ rhino3dm().then(async m => {
     setup.viz.minStress=10e6;
     setup.viz.maxStress=-10e6;
 
-    setup.viz.exageration=globalSetup.exageration;
+    setup.viz.exaggeration=globalSetup.exaggeration;
     setup.solve=solveParallel;
     setup.numTimeSteps=100;
     // setup.supports=supports;
diff --git a/01_Code/physical_computing_interface/graph/control/CGP/field.js b/01_Code/physical_computing_interface/graph/control/CGP/field.js
new file mode 100644
index 0000000000000000000000000000000000000000..cddfa74c4d479d9b80f04a85481aa1ee55f65931
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/CGP/field.js
@@ -0,0 +1,177 @@
+// field.js
+// A representation of the whole node grid.
+var an = AddNode,
+    sn = SubNode,
+    sqrtn = SqrtNode,
+    mn = MulNode,
+    dn = DivNode,
+    pn = PowNode,
+    cn = ConstNode,
+    nn = NopNode,
+    max= MaxNode,
+    min= MinNode,
+    sin= SinNode,
+    cos=CosNode;
+
+var nodeTypes = [cn, an, sn, nn, mn, dn, pn, sqrtn, max, min, sin, cos];
+
+var Field = function(inputs, width, height) {
+    this.width = width;
+    this.height = height;
+    this.inputs = inputs;
+
+    this.nodes = inputs.concat(new Array(width * height));
+    this.genome=[];
+    this.unformattedGenome=[];
+};
+
+// Creates a random start field.
+Field.prototype.initialize = function() {
+    var len = this.nodes.length;
+    var inputLen = this.inputs.length;
+
+    for (var i = this.inputs.length; i < this.nodes.length; i++) {
+        var nodeIndex=Math.floor(Math.random() * nodeTypes.length);
+
+        var nodeType = nodeTypes[nodeIndex];
+        var tempN=new nodeType(0,0);
+        this.nodes[i] = tempN.randomNode(this.getMaxIndex(i));
+
+        this.genome.push([ nodeIndex, this.nodes[i].getEdges()]);
+        this.unformattedGenome.push(nodeIndex, this.nodes[i].getEdges()[0],this.nodes[i].getEdges()[1]);
+
+    }
+
+    var pos = Math.floor(Math.random() * len);
+    this.output = new nn(pos);
+
+    this.genome.push([pos]);
+    this.unformattedGenome.push(pos);
+};
+
+Field.prototype.getUnformattedGenome=function(){
+    return this.unformattedGenome;
+};
+
+// Creates a field from genome.
+Field.prototype.initializeWithGenome = function(genome) {
+    var len = this.nodes.length;
+    var inputLen = this.inputs.length;
+
+    for (var i = 0; i < this.nodes.length-this.inputs.length; i++) {
+        // console.log(genome[i]);
+        var nodeIndex=genome[i][0];
+        var nodeType = nodeTypes[nodeIndex];
+        this.nodes[i+this.inputs.length]=new nodeType(genome[i][1][0],genome[i][1][1]);
+    }
+
+    this.genome=genome;
+    var pos=genome[this.nodes.length-this.inputs.length][0];
+    this.output = new nn(pos);
+    
+};
+
+// Get the maximal source index for a given position.
+Field.prototype.getMaxIndex = function(pos) {
+    return Math.floor((pos - this.inputs.length) / this.height) *
+           this.height + this.inputs.length - 1;
+};
+
+Field.prototype.clone = function() {
+    var field = new Field(this.inputs, this.width, this.height);
+
+    for (var i = this.inputs.length; i < this.nodes.length; i++) {
+        field.nodes[i] = this.nodes[i].clone();
+    }
+
+    return field;
+};
+
+Field.prototype.mutate = function(factor) {
+    var len = this.nodes.length;
+    var inputLen = this.inputs.length;
+
+    for (var i = 0; i < (factor * len); i++) {
+        var pos = Math.floor(Math.random() * (len - inputLen + 1)) + inputLen;
+
+        if (pos === len) {
+            var outPos = Math.floor(Math.random() * len);
+            this.output = new nn(outPos);
+        } else {
+            var nodeType = nodeTypes[Math.floor(Math.random() * nodeTypes.length)];
+            var tempN=new nodeType(0,1);
+            this.nodes[pos] = tempN.randomNode(this.getMaxIndex(pos));
+        }
+    }
+};
+
+Field.prototype.rateFitness = function(insets, outset) {
+    // assume that len(insets[i]) === len(outset)
+
+    var fitness = 0.0;
+
+    for (var i = 0; i < insets.length; i++) {
+        for (var j = 0; j < insets[i].length; j++) {
+            this.nodes[j].setValue(insets[i][j]);
+        }
+
+        var val = this.output.calculate(this);
+        fitness += Math.abs((isNaN(val) ? Infinity : val) - outset[i]);
+    }
+
+    this.fitness = fitness;
+};
+// module.exports = Field;
+
+
+Field.prototype.printGenome= function() {
+    genome=" ";
+    for(var i=0;i<this.genome.length;++i){
+        m=19-i;
+        m=this.inputs.length+i;
+        genome+=m+": ";
+        for(var j=0;j<this.genome[i].length;++j){
+            if(this.genome[i][j].length>1){
+                for(var k=0;k<this.genome[i][j].length;++k){
+                    if(k+1<this.genome[i][j].length){
+                        genome+=this.genome[i][j][k]+"-";
+                    }else{
+                        genome+=this.genome[i][j][k]+" ";
+                    }
+                }
+            }else{
+                genome+=this.genome[i][j]+" ";
+            }
+        }
+        genome+="/ ";
+    }
+    // console.log(genome);
+};
+
+Field.prototype.printGenome1= function() {
+    genome="[";
+    for(var i=0;i<this.genome.length;++i){
+        genome+="[";
+        for(var j=0;j<this.genome[i].length;++j){
+            
+            if(this.genome[i][j].length>1){
+                genome+="[";
+                for(var k=0;k<this.genome[i][j].length;++k){
+                    if(k+1<this.genome[i][j].length){
+                        genome+=this.genome[i][j][k]+",";
+                    }else{
+                        genome+=this.genome[i][j][k]+"";
+                    }
+                }
+                genome+="]";
+            }else{
+                genome+=this.genome[i][j]+",";
+            }
+            
+            
+        }
+        genome+="],";
+    }
+    genome+="]";
+    // console.log(genome);
+};
diff --git a/01_Code/physical_computing_interface/graph/control/CGP/island.js b/01_Code/physical_computing_interface/graph/control/CGP/island.js
new file mode 100644
index 0000000000000000000000000000000000000000..ddd7d1f61ddf9dc20c529507947280e4ffa77d43
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/CGP/island.js
@@ -0,0 +1,29 @@
+// var Field = require('./field.js');
+
+var generations = function(start, nrOfGenerations, rateOfMutation, nrOfMutations, insets, outset) {
+    var best = start;
+
+    for (var i = 0; i < nrOfGenerations; i++) {
+        var gen = best.clone();
+
+        if (i % 1000 === 0) console.log("Generation: ", i);
+
+
+        for (var j = 0; j < nrOfMutations; j++) {
+            var current = gen.clone();
+            current.mutate(rateOfMutation);
+            current.rateFitness(insets, outset);
+
+            if (current.fitness <= best.fitness) {
+                best = current;
+                // console.log(best);
+                // console.log(best.output.toString(best));
+            }
+            
+        }
+    }
+
+    return best;
+};
+
+// module.exports.generations = generations;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/addNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/addNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d31e335a7a0ad75e4e13477c20140c99a1b356
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/addNode.js
@@ -0,0 +1,43 @@
+// addNode.js
+// A node that adds the result of two input nodes together.
+
+var AddNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+AddNode.prototype.calculate = function(field) {
+    return field.nodes[this.in1].calculate(field) +
+           field.nodes[this.in2].calculate(field);
+};
+
+AddNode.prototype.toString = function(field) {
+    return '(' + field.nodes[this.in1].toString(field) +  ' + ' +
+           field.nodes[this.in2].toString(field) + ')';
+};
+
+AddNode.prototype.clone = function() {
+    return new AddNode(this.in1, this.in2);
+};
+
+AddNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new AddNode(newIn1, newIn2);
+};
+
+AddNode.prototype.getName = function() {
+    return "+";
+};
+
+AddNode.prototype.getGroup = function() {
+    return 0;
+};
+
+AddNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+// module.exports.AddNode = AddNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/constNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/constNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9f69e981b11caef9990cf9da7366fe066b58e96
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/constNode.js
@@ -0,0 +1,37 @@
+// constNode.js
+// A node that holds a constant value.
+
+var ConstNode = function(val) {
+    this.value = val;
+};
+
+ConstNode.prototype.calculate = function(field) {
+    return this.value;
+};
+
+ConstNode.prototype.toString = function(field) {
+    return this.value.toString();
+};
+
+ConstNode.prototype.clone = function() {
+    return new ConstNode(this.value);
+};
+
+ConstNode.prototype.randomNode = function(newPos) {
+    return new ConstNode(Math.floor(Math.random() * 10) + 1);
+};
+
+ConstNode.prototype.getName = function() {
+    return ""+this.value;
+};
+
+ConstNode.prototype.getGroup = function() {
+    return 1;
+};
+
+ConstNode.prototype.getEdges = function() {
+    return [];
+};
+
+// module.exports.ConstNode = ConstNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/cosNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/cosNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..75e7660409c37790ff51df7cd914fed41c6db14e
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/cosNode.js
@@ -0,0 +1,39 @@
+// cosNode.js
+// A node that computes the cos of x.
+
+var CosNode = function(inNode) {
+    this.inNode = inNode;
+};
+
+CosNode.prototype.calculate = function(field) {
+    return Math.cos(field.nodes[this.inNode].calculate(field));
+};
+
+CosNode.prototype.toString = function(field) {
+    return "cos(" + field.nodes[this.inNode].toString(field) + ")";
+};
+
+CosNode.prototype.clone = function() {
+    return new CosNode(this.inNode);
+};
+
+CosNode.prototype.randomNode = function(newPos) {
+    var newIn = Math.floor(Math.random() * (newPos + 1));
+
+    return new CosNode(newIn);
+};
+
+CosNode.prototype.getName = function() {
+    return "cos";
+};
+
+CosNode.prototype.getGroup = function() {
+    return 12;
+};
+
+CosNode.prototype.getEdges = function() {
+    return [this.inNode];
+};
+
+// module.exports.CosNode = CosNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/divNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/divNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..66d7e7979d6c7d70bb77bc4005f792af76723767
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/divNode.js
@@ -0,0 +1,43 @@
+// divNode.js
+// A node that divides the result of two input nodes.
+
+var DivNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+DivNode.prototype.calculate = function(field) {
+    return field.nodes[this.in1].calculate(field) /
+           field.nodes[this.in2].calculate(field);
+};
+
+DivNode.prototype.toString = function(field) {
+    return '(' + field.nodes[this.in1].toString(field) +  ' / ' +
+           field.nodes[this.in2].toString(field) + ')';
+};
+
+DivNode.prototype.clone = function() {
+    return new DivNode(this.in1, this.in2);
+};
+
+DivNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new DivNode(newIn1, newIn2);
+};
+
+DivNode.prototype.getName = function() {
+    return "/";
+};
+
+DivNode.prototype.getGroup = function() {
+    return 2;
+};
+
+DivNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+// module.exports.DivNode = DivNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/maxNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/maxNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..9cc56fbc5da932ec8fb05d7036573db0b979c255
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/maxNode.js
@@ -0,0 +1,45 @@
+// maxNode.js
+// A node that computes the max of x to the y.
+
+var MaxNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+MaxNode.prototype.calculate = function(field) {
+    return Math.max(field.nodes[this.in1].calculate(field),
+                    field.nodes[this.in2].calculate(field));
+};
+
+MaxNode.prototype.toString = function(field) {
+    return "max(" + field.nodes[this.in1].toString(field) + ", " +
+           field.nodes[this.in2].toString(field) + ")";
+};
+
+MaxNode.prototype.clone = function() {
+    return new MaxNode(this.in1, this.in2);
+};
+
+MaxNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new MaxNode(newIn1, newIn2);
+};
+
+MaxNode.prototype.getName = function() {
+    return "max";
+};
+
+MaxNode.prototype.getGroup = function() {
+    return 9;
+};
+
+MaxNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+
+
+// module.exports.MaxNode = MaxNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/minNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/minNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a67144c512f0085c985739c4bcfe02c774b6ab1
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/minNode.js
@@ -0,0 +1,45 @@
+// minNode.js
+// A node that computes the min of x to the y.
+
+var MinNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+MinNode.prototype.calculate = function(field) {
+    return Math.min(field.nodes[this.in1].calculate(field),
+                    field.nodes[this.in2].calculate(field));
+};
+
+MinNode.prototype.toString = function(field) {
+    return "min(" + field.nodes[this.in1].toString(field) + ", " +
+           field.nodes[this.in2].toString(field) + ")";
+};
+
+MinNode.prototype.clone = function() {
+    return new MinNode(this.in1, this.in2);
+};
+
+MinNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new MinNode(newIn1, newIn2);
+};
+
+MinNode.prototype.getName = function() {
+    return "min";
+};
+
+MinNode.prototype.getGroup = function() {
+    return 10;
+};
+
+MinNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+
+
+// module.exports.MinNode = MinNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/mulNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/mulNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c504c41aba954ebc4f4401865effb4d868dafd0
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/mulNode.js
@@ -0,0 +1,43 @@
+// mulNode.js
+// A node that multiplies the result of two input nodes.
+
+var MulNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+MulNode.prototype.calculate = function(field) {
+    return field.nodes[this.in1].calculate(field) *
+           field.nodes[this.in2].calculate(field);
+};
+
+MulNode.prototype.toString = function(field) {
+    return '(' + field.nodes[this.in1].toString(field) +  ' * ' +
+           field.nodes[this.in2].toString(field) + ')';
+};
+
+MulNode.prototype.clone = function() {
+    return new MulNode(this.in1, this.in2);
+};
+
+MulNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new MulNode(newIn1, newIn2);
+};
+
+MulNode.prototype.getName = function() {
+    return "*";
+};
+
+MulNode.prototype.getGroup = function() {
+    return 3;
+};
+
+MulNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+// module.exports.MulNode = MulNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/nopNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/nopNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e7aad0c8cf104dd2e96e9e94f276e26561c9919
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/nopNode.js
@@ -0,0 +1,40 @@
+// nopNode.js
+// A node that just passes the input through.
+
+var NopNode = function(in1) {
+    this.in1 = in1;
+};
+
+NopNode.prototype.calculate = function(field) {
+    return field.nodes[this.in1].calculate(field);
+};
+
+NopNode.prototype.toString = function(field) {
+    return field.nodes[this.in1].toString(field);
+};
+
+NopNode.prototype.clone = function() {
+    return new NopNode(this.in1);
+};
+
+NopNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+
+    return new NopNode(newIn1);
+};
+
+
+NopNode.prototype.getName = function() {
+    return "=";
+};
+
+NopNode.prototype.getGroup = function() {
+    return 4;
+};
+
+NopNode.prototype.getEdges = function() {
+    return [this.in1];
+};
+
+// module.exports.NopNode = NopNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/powNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/powNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..566515677b29a288f907d07cafccc124c14854f7
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/powNode.js
@@ -0,0 +1,45 @@
+// powNode.js
+// A node that computes the power of x to the y.
+
+var PowNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+PowNode.prototype.calculate = function(field) {
+    return Math.pow(field.nodes[this.in1].calculate(field),
+                    field.nodes[this.in2].calculate(field));
+};
+
+PowNode.prototype.toString = function(field) {
+    return "pow(" + field.nodes[this.in1].toString(field) + ", " +
+           field.nodes[this.in2].toString(field) + ")";
+};
+
+PowNode.prototype.clone = function() {
+    return new PowNode(this.in1, this.in2);
+};
+
+PowNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new PowNode(newIn1, newIn2);
+};
+
+PowNode.prototype.getName = function() {
+    return "^";
+};
+
+PowNode.prototype.getGroup = function() {
+    return 5;
+};
+
+PowNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+
+
+// module.exports.PowNode = PowNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/sinNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/sinNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..e6dac7c4adc1f15ccbfa14343282c5597130dfb4
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/sinNode.js
@@ -0,0 +1,39 @@
+// sinNode.js
+// A node that computes the sin of x.
+
+var SinNode = function(inNode) {
+    this.inNode = inNode;
+};
+
+SinNode.prototype.calculate = function(field) {
+    return Math.sin(field.nodes[this.inNode].calculate(field));
+};
+
+SinNode.prototype.toString = function(field) {
+    return "sin(" + field.nodes[this.inNode].toString(field) + ")";
+};
+
+SinNode.prototype.clone = function() {
+    return new SinNode(this.inNode);
+};
+
+SinNode.prototype.randomNode = function(newPos) {
+    var newIn = Math.floor(Math.random() * (newPos + 1));
+
+    return new SinNode(newIn);
+};
+
+SinNode.prototype.getName = function() {
+    return "sin";
+};
+
+SinNode.prototype.getGroup = function() {
+    return 11;
+};
+
+SinNode.prototype.getEdges = function() {
+    return [this.inNode];
+};
+
+// module.exports.SinNode = SinNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/sqrtNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/sqrtNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c65678a7d50f678c8589b5fec6f56dba175edd2
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/sqrtNode.js
@@ -0,0 +1,39 @@
+// sqrtNode.js
+// A node that computes the sqrt of x.
+
+var SqrtNode = function(inNode) {
+    this.inNode = inNode;
+};
+
+SqrtNode.prototype.calculate = function(field) {
+    return Math.sqrt(field.nodes[this.inNode].calculate(field));
+};
+
+SqrtNode.prototype.toString = function(field) {
+    return "sqrt(" + field.nodes[this.inNode].toString(field) + ")";
+};
+
+SqrtNode.prototype.clone = function() {
+    return new SqrtNode(this.inNode);
+};
+
+SqrtNode.prototype.randomNode = function(newPos) {
+    var newIn = Math.floor(Math.random() * (newPos + 1));
+
+    return new SqrtNode(newIn);
+};
+
+SqrtNode.prototype.getName = function() {
+    return "√";
+};
+
+SqrtNode.prototype.getGroup = function() {
+    return 6;
+};
+
+SqrtNode.prototype.getEdges = function() {
+    return [this.inNode];
+};
+
+// module.exports.SqrtNode = SqrtNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/subNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/subNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4852dc6d758c5f54961d6a8d59518a843cf7fc1
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/subNode.js
@@ -0,0 +1,43 @@
+// subNode.js
+// A node that subtracts the result of two input nodes.
+
+var SubNode = function(in1, in2) {
+    this.in1 = in1;
+    this.in2 = in2;
+};
+
+SubNode.prototype.calculate = function(field) {
+    return field.nodes[this.in1].calculate(field) -
+           field.nodes[this.in2].calculate(field);
+};
+
+SubNode.prototype.toString = function(field) {
+    return '(' + field.nodes[this.in1].toString(field) +  ' - ' +
+           field.nodes[this.in2].toString(field) + ')';
+};
+
+SubNode.prototype.clone = function() {
+    return new SubNode(this.in1, this.in2);
+};
+
+SubNode.prototype.randomNode = function(newPos) {
+    var newIn1 = Math.floor(Math.random() * (newPos + 1));
+    var newIn2 = Math.floor(Math.random() * (newPos + 1));
+
+    return new SubNode(newIn1, newIn2);
+};
+
+SubNode.prototype.getName = function() {
+    return "-";
+};
+
+SubNode.prototype.getGroup = function() {
+    return 7;
+};
+
+SubNode.prototype.getEdges = function() {
+    return [this.in1, this.in2];
+};
+
+// module.exports.SubNode = SubNode;
+// module.exports.randomNode = randomNode;
diff --git a/01_Code/physical_computing_interface/graph/control/basicNodes/varNode.js b/01_Code/physical_computing_interface/graph/control/basicNodes/varNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..b23a42e134f2cad3d364845d8cfb448046d87bcb
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/basicNodes/varNode.js
@@ -0,0 +1,32 @@
+// varNode.js
+// A node that holds a variable that can be changed(mutable).
+
+var VarNode = function(name) {
+    this.name = name;
+};
+
+VarNode.prototype.calculate = function(field) {
+    return this.value;
+};
+
+VarNode.prototype.toString = function(field) {
+    return this.name;
+};
+
+VarNode.prototype.setValue = function(val) {
+    this.value = val;
+};
+
+VarNode.prototype.getName = function() {
+    return this.name;
+};
+
+VarNode.prototype.getGroup = function() {
+    return 8;
+};
+
+VarNode.prototype.getEdges = function() {
+    return [];
+};
+
+// module.exports.VarNode = VarNode;
diff --git a/01_Code/physical_computing_interface/graph/control/control.html b/01_Code/physical_computing_interface/graph/control/control.html
new file mode 100644
index 0000000000000000000000000000000000000000..a5131b07beacfad48ae646f59a5856a7062a4ea5
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/control.html
@@ -0,0 +1,70 @@
+<!doctype html>
+
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+
+        <title>CGP</title>
+        <meta name="description" content="Control">
+
+        <style>
+                body {
+                    color: #ffffff;
+                    font: 11pt helvetica;
+                    background-color: #020227;
+                }
+                #graph {
+                    color: #ffffff;
+                    font: 12pt helvetica;
+                    background-color: #020227;
+                }
+        
+                .mynetwork {
+                    width: 800px;
+                    height: 400px;
+                    background-color: #020227;
+                }
+        </style>
+        <script src="https://visjs.github.io/vis-network/standalone/umd/vis-network.min.js"></script>
+
+        <!-- <script type="text/javascript" src="./lib/vis/dist/vis.js"></script> -->
+        <link href="../../lib/vis/dist/vis-network.min.css" rel="stylesheet" type="text/css"/>
+        
+
+        <script src="https://unpkg.com/d3@3/d3.min.js"></script>
+        <script type="text/javascript" src="../../lib/function-plot.js"></script>
+        <!-- <script src="https://unpkg.com/function-plot@1/dist/function-plot.js"></script> -->
+        
+        <script src="./basicNodes/varNode.js"></script>
+        <script src="./basicNodes/mulNode.js"></script>
+        <script src="./basicNodes/nopNode.js"></script>
+        <script src="./basicNodes/powNode.js"></script>
+        <script src="./basicNodes/sqrtNode.js"></script>
+        <script src="./basicNodes/subNode.js"></script>
+        <script src="./basicNodes/divNode.js"></script>
+        <script src="./basicNodes/addNode.js"></script>
+        <script src="./basicNodes/constNode.js"></script>
+        <script src="./basicNodes/maxNode.js"></script>
+        <script src="./basicNodes/minNode.js"></script>
+        <script src="./basicNodes/sinNode.js"></script>
+        <script src="./basicNodes/cosNode.js"></script>
+
+        <script src="./CGP/field.js"></script>
+        <script src="./CGP/island.js"></script>
+        
+    </head>
+
+    <body>
+
+        <!-- <div id="graph"></div> -->
+        <div id="termX"> </div>
+        <div class="mynetwork" id="mynetworkX"></div>
+        <div id="termY"> </div>
+        <div class="mynetwork" id="mynetworkY"></div>
+        <div id="termZ"> </div>
+        <div class="mynetwork" id="mynetworkZ"></div>
+            
+    </body>
+</html>
+
+<script src="./control.js"></script>
diff --git a/01_Code/physical_computing_interface/graph/control/control.js b/01_Code/physical_computing_interface/graph/control/control.js
new file mode 100644
index 0000000000000000000000000000000000000000..e01a91c34b0bba41f5d91ed78e722561ed9170e9
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/control.js
@@ -0,0 +1,293 @@
+'use strict';
+var data = {};
+var CGP= {};
+var bestX,bestY,bestZ;
+var net= {};
+var netY= {};
+var netZ= {};
+var inputs;
+
+data.init= function() {
+    data.generations = 100.0;
+    data.mutations = 100.0;
+    data.rate = 10;
+    data.initNum = 1000;
+    data.height = 1;
+    data.width = 11;
+    data.inputs = [[1],[2],[3]];
+    data.outputs = [[1],[4],[9]];
+    // data.inputs = [[1],[4],[8]];
+    // data.outputs = [[-8],[-4],[15]];
+
+};
+
+
+
+// var nodeTypes = [
+//     ConstNode,//0 
+//     AddNode,  //1 
+//     SubNode,  //2 
+//     NopNode,  //3
+//     MulNode,  //4 
+//     DivNode,  //5
+//     PowNode,  //6
+//     SqrtNode, //7 
+//     MaxNode,  //8
+//     MinNode,  //9
+//     SinNode,  //10
+//     CosNode,  //11
+// ];
+
+// CGP.init= function()
+{
+    data.init();
+
+    var Field = Field,
+        vn =   VarNode;
+
+    //Old Optimization
+    // var fields = new Array(data.initNum);
+
+    // for (var i = 0; i < fields.length; i++) {
+    //     fields[i] = new Field([new vn('x')], data.width, data.height);
+    //     fields[i].initialize();
+    //     fields[i].rateFitness(data.inputs, data.outputs);
+    // }
+
+    // fields = fields.sort(function(a, b) {
+    //     return a.fitness - b.fitness;
+    // });
+
+    // best = generations(fields[0], data.generations,
+    //     data.mutations,
+    //     data.rate,
+    //     data.inputs, data.outputs);
+    ///////////////////////////////////////////
+
+    //get random genome
+    // best=new Field([new vn('x')], data.width, data.height);
+    // best.initialize();
+    // best.rateFitness(data.inputs, data.outputs);
+    // console.log(best.genome)
+    // best.printGenome1()
+    //////
+
+    //get from genome
+
+
+    // var genome=[
+    //     [0,[0,0]],//0
+    //     [1,[0,0]],//1
+    //     [2,[0,0]],//2
+    //     [3,[0,0]],//3
+    //     [4,[0,0]],//4
+    //     [5,[0,0]],//5
+    //     [6,[0,0]],//6
+    //     [7,[0,0]],//7
+    //     [8,[0,0]],//8
+    //     [9,[0,0]],//9
+    //     [0] //10 output
+    // ];
+
+    // var genome=[
+    //     [0,[0,1]],//0
+    //     [1,[0,1]],//1
+    //     [2,[0,1]],//2
+    //     [3,[0,1]],//3
+    //     [4,[0,1]],//4
+    //     [5,[0,1]],//5
+    //     [6,[0,1]],//6
+    //     [7,[0,1]],//7
+    //     [8,[0,1]],//8
+    //     [9,[0,1]],//9
+    //     [0] //10 output
+    // ];
+
+    inputs=[new vn('timeStep'),new vn('position'),new vn('id')];
+
+
+    var genomeX=[
+        [0,[3.14159265359]],//3 pi
+        [0,[0.1]],//4 a0 
+        [0,[5e-5]],//5 f
+        [0,[0.25]],//6 amp
+        [0,[0.0]],//7 2.0
+        [4,[3,7]],//8 pi*2.0
+        [4,[0,4]],//9 t*f
+        [1,[9,6]],//10 (t*f) + amp
+        [4,[10,8]],//11 (pi*2.0) * ((t*f) + amp)
+        [10,[11]],//12 sin(((pi*2.0) * ((t*f) + amp)))
+        [4,[12,4]],//13 a0*(sin(((pi*2.0) * ((t*f) + amp))))
+        [7] //14 output
+    ];
+
+    bestX=new Field(inputs, data.width, data.height);
+    bestX.initializeWithGenome(genomeX);
+    bestX.rateFitness(data.inputs, data.outputs);
+
+    var genomeY=[
+        [0,[3.14159265359]],//3 pi
+        [0,[0.1]],//4 a0 
+        [0,[5e-5]],//5 f
+        [0,[0.25]],//6 amp
+        [0,[2.0]],//7 2.0
+        [4,[3,7]],//8 pi*2.0
+        [4,[0,5]],//9 t*f
+        [1,[9,6]],//10 (t*f) + amp
+        [4,[10,8]],//11 (pi*2.0) * ((t*f) + amp)
+        [10,[11]],//12 sin(((pi*2.0) * ((t*f) + amp)))
+        [4,[12,4]],//13 a0*(sin(((pi*2.0) * ((t*f) + amp))))
+        [13] //14 output
+    ];
+    bestY=new Field(inputs, data.width, data.height);
+    bestY.initializeWithGenome(genomeY);
+    bestY.rateFitness(data.inputs, data.outputs);
+
+
+    var genomeZ=[
+        [0,[3.14159265359]],//3 pi
+        [0,[0.1]],//4 a0 
+        [0,[5e-5]],//5 f
+        [0,[0.25]],//6 amp
+        [0,[2.0]],//7 2.0
+        [4,[3,7]],//8 pi*2.0
+        [4,[0,5]],//9 t*f
+        [1,[9,6]],//10 (t*f) + amp
+        [4,[10,8]],//11 (pi*2.0) * ((t*f) + amp)
+        [11,[11]],//12 cos(((pi*2.0) * ((t*f) + amp)))
+        [4,[12,4]],//13 a0*(sin(((pi*2.0) * ((t*f) + amp))))
+        [13] //14 output
+    ];
+    bestZ=new Field(inputs, data.width, data.height);
+    bestZ.initializeWithGenome(genomeZ);
+    bestZ.rateFitness(data.inputs, data.outputs);
+
+    //////
+    var termX = bestX.output.toString(bestX);
+    var termY = bestY.output.toString(bestY);
+    var termZ = bestZ.output.toString(bestZ);
+    // var fitness = best.fitness;
+    console.log(bestX)
+    document.getElementById("termX").innerHTML=`Force X= ${termX}`;
+    document.getElementById("termY").innerHTML=`Force Y= ${termY}`;
+    document.getElementById("termZ").innerHTML=`Force Z= ${termZ}`;
+
+
+    // console.log(best);
+
+    functionPlot({
+        target: '#graph',
+        width: 1000,
+        height: 500,
+        text:[{color: 'white'}],
+        data: [{
+            fn: termX, color: '#56ffcc',
+            nSamples: 500,
+            graphType: 'polyline'
+
+        },
+        {
+            points: zip([data.inputs, data.outputs]),
+            fnType: 'points',
+            color: '#ff5c56',
+            graphType: 'scatter'
+        }]
+    });
+
+    function zip(arrays) {
+        return arrays[0].map(function(_,i){
+            return arrays.map(function(array){return array[i];});
+        });
+    }
+}
+
+net.init= function(best,containerName) {
+    
+    var nodes=[];
+    var edges=[];
+    var inputColor='#56ffcc', 
+        outputColor='#ff5c56',
+        activeColor='#d7dfea',
+        inactiveColor='#5e6060';
+
+    var checked=[];
+    var smoothOption="cubicBezier";//"cubicBezier";//"dynamic",//"curvedCCW"
+
+    for(var i=0; i<best.nodes.length;i++) {
+        checked.push(0);
+        nodes.push({id: i, label: best.nodes[i].getName(), color: inactiveColor});//, group: best.nodes[i].getGroup()});
+        var tempEdges= best.nodes[i].getEdges();
+        for(var j=0; j<tempEdges.length;j++) {
+            edges.push({from: i, to: best.nodes[i].getEdges()[j],smooth:smoothOption});
+        }
+    }
+
+    //output node
+    nodes.push({id: best.nodes.length, label: "output", color: outputColor});//, group: 9});
+    edges.push({from: best.nodes.length, to: best.output.getEdges()[0],smooth:smoothOption});
+
+    highlightActiveNodes( best.output.getEdges()[0]);
+    for(var i=0; i<inputs.length;i++) {
+        nodes[i].color=inputColor;
+    }
+    
+
+    // console.log(nodes);
+    // console.log(edges);
+
+
+    // create a network
+    var container = document.getElementById(containerName);
+    var data = {
+        nodes: nodes,
+        edges: edges
+    };
+    var options = {
+        nodes: {
+            shape: 'dot',
+            size: 12,
+            font: {
+                size: 24,
+                color: '#ffffff'
+            },
+            borderWidth: 0
+        },
+        edges: {
+            width: 2,
+            smooth:true
+        },
+        layout: {
+            hierarchical: {
+              direction: "RL",//"UD"
+              sortMethod:"directed",//"hubsize"
+              shakeTowards:"roots",//"leaves"
+            },
+          },
+    };
+    var network = new vis.Network(container, data, options);
+    ////////////////////////////////////////////////////////////////////////////////
+
+    function highlightActiveNodes(n) {
+        // console.log("check "+nodes[n].label);
+        nodes[n].color=activeColor; //light gray
+        
+        if(!checked[n])
+        {
+            checked[n]=1;
+
+            var tempEdges= best.nodes[n].getEdges();
+            for(var j=0; j<tempEdges.length;j++) {
+                highlightActiveNodes(tempEdges[j]);
+            }
+
+        }
+    }
+
+}
+
+
+// CGP.init();
+net.init(bestX,"mynetworkX");
+net.init(bestY,"mynetworkY");
+net.init(bestZ,"mynetworkZ");
+
diff --git a/01_Code/physical_computing_interface/graph/control/fit.html b/01_Code/physical_computing_interface/graph/control/fit.html
new file mode 100644
index 0000000000000000000000000000000000000000..e82b928a7d870ff998b366cd0e3ca713145d3cf8
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/fit.html
@@ -0,0 +1,63 @@
+<!doctype html>
+
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+
+        <title>CGP</title>
+        <meta name="description" content="CGP">
+
+        <style>
+                body {
+                    color: #ffffff;
+                    font: 12pt arial;
+                    background-color: #000000;
+                }
+                #graph {
+                    color: #ffffff;
+                    font: 12pt helvetica;
+                    background-color: #000000;
+                }
+        
+                #mynetwork {
+                    width: 800px;
+                    height: 800px;
+                    background-color: #000000;
+                }
+        </style>
+        <script src="https://visjs.github.io/vis-network/standalone/umd/vis-network.min.js"></script>
+
+        <!-- <script type="text/javascript" src="./lib/vis/dist/vis.js"></script> -->
+        <link href="../../lib/vis/dist/vis-network.min.css" rel="stylesheet" type="text/css"/>
+        
+
+        <script src="https://unpkg.com/d3@3/d3.min.js"></script>
+        <script type="text/javascript" src="../../lib/function-plot.js"></script>
+        <!-- <script src="https://unpkg.com/function-plot@1/dist/function-plot.js"></script> -->
+        
+        <script src="./basicNodes/varNode.js"></script>
+        <script src="./basicNodes/mulNode.js"></script>
+        <script src="./basicNodes/nopNode.js"></script>
+        <script src="./basicNodes/powNode.js"></script>
+        <script src="./basicNodes/sqrtNode.js"></script>
+        <script src="./basicNodes/subNode.js"></script>
+        <script src="./basicNodes/divNode.js"></script>
+        <script src="./basicNodes/addNode.js"></script>
+        <script src="./basicNodes/constNode.js"></script>
+
+        <script src="./CGP/field.js"></script>
+        <script src="./CGP/island.js"></script>
+        
+    </head>
+
+    <body>
+        <div id="term"> </div>
+
+        <div id="graph"></div>
+
+    <div id="mynetwork"></div>
+            
+    </body>
+</html>
+
+<script src="./fit.js"></script>
diff --git a/01_Code/physical_computing_interface/graph/control/fit.js b/01_Code/physical_computing_interface/graph/control/fit.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc63c4bf5f45ef004a677d0df74d899ef2e300d0
--- /dev/null
+++ b/01_Code/physical_computing_interface/graph/control/fit.js
@@ -0,0 +1,163 @@
+'use strict';
+var data = {};
+var CGP= {};
+var best;
+var net= {};
+
+data.init= function() {
+    data.generations = 100.0;
+    data.mutations = 100.0;
+    data.rate = 10;
+    data.initNum = 1000;
+    data.height = 1;
+    data.width = 10;
+    data.inputs = [[1],[2],[3]];
+    data.outputs = [[1],[4],[9]];
+    // data.inputs = [[1],[4],[8]];
+    // data.outputs = [[-8],[-4],[15]];
+
+};
+
+// CGP.init= function()
+{
+    data.init();
+
+    var Field = Field,
+        vn =   VarNode;
+
+    var fields = new Array(data.initNum);
+
+    for (var i = 0; i < fields.length; i++) {
+        fields[i] = new Field([new vn('x')], data.width, data.height);
+        fields[i].initialize();
+        fields[i].rateFitness(data.inputs, data.outputs);
+    }
+
+    fields = fields.sort(function(a, b) {
+        return a.fitness - b.fitness;
+    });
+
+
+
+    best = generations(fields[0], data.generations,
+        data.mutations,
+        data.rate,
+        data.inputs, data.outputs);
+  
+    var term = best.output.toString(best);
+    var fitness = best.fitness;
+
+    document.getElementById("term").innerHTML=`${term}, Fitness: ${fitness}`;
+    console.log(best);
+
+    functionPlot({
+        target: '#graph',
+        width: 1000,
+        height: 500,
+        text:[{color: 'white'}],
+        data: [{
+            fn: term, color: '#56ffcc',
+            nSamples: 500,
+            graphType: 'polyline'
+
+        },
+        {
+            points: zip([data.inputs, data.outputs]),
+            fnType: 'points',
+            color: '#ff5c56',
+            graphType: 'scatter'
+        }]
+    });
+
+    function zip(arrays) {
+        return arrays[0].map(function(_,i){
+            return arrays.map(function(array){return array[i];});
+        });
+    }
+}
+
+net.init= function() {
+    
+    var nodes=[];
+    var edges=[];
+    var inputColor='#56ffcc', 
+        outputColor='#ff5c56',
+        activeColor='#d7dfea',
+        inactiveColor='#5e6060';
+
+    var checked=[];
+    var smoothOption="cubicBezier";//"cubicBezier";//"dynamic",//"curvedCCW"
+
+    for(var i=0; i<best.nodes.length;i++) {
+        checked.push(0);
+        nodes.push({id: i, label: best.nodes[i].getName(), color: inactiveColor});//, group: best.nodes[i].getGroup()});
+        var tempEdges= best.nodes[i].getEdges();
+        for(var j=0; j<tempEdges.length;j++) {
+            edges.push({from: i, to: best.nodes[i].getEdges()[j],smooth:smoothOption});
+        }
+    }
+
+    //output node
+    nodes.push({id: best.nodes.length, label: "output", color: outputColor});//, group: 9});
+    edges.push({from: best.nodes.length, to: best.output.getEdges()[0],smooth:smoothOption});
+
+    highlightActiveNodes( best.output.getEdges()[0]);
+    nodes[0].color=inputColor;
+
+    console.log(nodes);
+    console.log(edges);
+
+
+    // create a network
+    var container = document.getElementById('mynetwork');
+    var data = {
+        nodes: nodes,
+        edges: edges
+    };
+    var options = {
+        nodes: {
+            shape: 'dot',
+            size: 12,
+            font: {
+                size: 24,
+                color: '#ffffff'
+            },
+            borderWidth: 0
+        },
+        edges: {
+            width: 2,
+            smooth:"true"
+        },
+        layout: {
+            hierarchical: {
+              direction: "RL",//"UD"
+              sortMethod:"directed",//"hubsize"
+              shakeTowards:"roots",//"leaves"
+            },
+          },
+    };
+    var network = new vis.Network(container, data, options);
+    ////////////////////////////////////////////////////////////////////////////////
+
+    function highlightActiveNodes(n) {
+        console.log("check "+nodes[n].label);
+        nodes[n].color=activeColor; //light gray
+        
+        if(!checked[n])
+        {
+            checked[n]=1;
+
+            var tempEdges= best.nodes[n].getEdges();
+            for(var j=0; j<tempEdges.length;j++) {
+                highlightActiveNodes(tempEdges[j]);
+            }
+
+        }
+    }
+
+}
+
+
+// CGP.init();
+net.init();
+
diff --git a/01_Code/physical_computing_interface/lib/function-plot.js b/01_Code/physical_computing_interface/lib/function-plot.js
new file mode 100644
index 0000000000000000000000000000000000000000..61c83fc1a08c2dec527f06aca32d9e49327d086e
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/function-plot.js
@@ -0,0 +1,11 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.functionPlot=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){module.exports=require("./lib/")},{"./lib/":14}],2:[function(require,module,exports){var isObject=require("is-object");module.exports=function(d){if(!isObject(d)){throw Error("datum is not an object")}if(!d.hasOwnProperty("graphType")){d.graphType="interval"}if(!d.hasOwnProperty("sampler")){d.sampler=d.graphType!=="interval"?"builtIn":"interval"}if(!d.hasOwnProperty("fnType")){d.fnType="linear"}return d}},{"is-object":52}],3:[function(require,module,exports){"use strict";var globals=require("./globals");var evalTypeFn={interval:require("./samplers/interval"),builtIn:require("./samplers/builtIn")};function computeEndpoints(chart,d){var range=d.range||[-Infinity,Infinity];var scale=chart.meta.xScale;var start=Math.max(scale.domain()[0],range[0]);var end=Math.min(scale.domain()[1],range[1]);return[start,end]}function evaluate(chart,d){var range=computeEndpoints(chart,d);var data;var evalFn=evalTypeFn[d.sampler];var nSamples=d.nSamples||Math.min(globals.MAX_ITERATIONS,globals.DEFAULT_ITERATIONS||chart.meta.width*2);data=evalFn(chart,d,range,nSamples);chart.emit("eval",data,d.index,d.isHelper);return data}module.exports=evaluate},{"./globals":4,"./samplers/builtIn":19,"./samplers/interval":20}],4:[function(require,module,exports){"use strict";var d3=window.d3;var Globals={COLORS:["steelblue","red","#05b378","orange","#4040e8","yellow","brown","magenta","cyan"].map(function(v){return d3.hsl(v)}),DEFAULT_WIDTH:550,DEFAULT_HEIGHT:350,TIP_X_EPS:1};Globals.DEFAULT_ITERATIONS=null;Globals.MAX_ITERATIONS=Globals.DEFAULT_WIDTH*4;module.exports=Globals},{}],5:[function(require,module,exports){"use strict";module.exports={polyline:require("./polyline"),interval:require("./interval"),scatter:require("./scatter")}},{"./interval":6,"./polyline":7,"./scatter":8}],6:[function(require,module,exports){"use strict";var d3=window.d3;var evaluate=require("../evaluate");var utils=require("../utils");module.exports=function(chart){var minWidthHeight;var xScale=chart.meta.xScale;var yScale=chart.meta.yScale;function clampRange(vLo,vHi,gLo,gHi){if(gLo>gHi){var t=gLo;gLo=gHi;gHi=t}var hi=Math.min(vHi,gHi);var lo=Math.max(vLo,gLo);if(lo>hi){return[-minWidthHeight,0]}return[lo,hi]}var line=function(points,closed){var path="";var range=yScale.range();var minY=Math.min.apply(Math,range);var maxY=Math.max.apply(Math,range);for(var i=0,length=points.length;i<length;i+=1){if(points[i]){var x=points[i][0];var y=points[i][1];var yLo=y.lo;var yHi=y.hi;if(closed){yLo=Math.min(yLo,0);yHi=Math.max(yHi,0)}var moveX=xScale(x.lo)+points.scaledDx/2;var viewportY=clampRange(minY,maxY,isFinite(yHi)?yScale(yHi):-Infinity,isFinite(yLo)?yScale(yLo):Infinity);var vLo=viewportY[0];var vHi=viewportY[1];path+=" M "+moveX+" "+vLo;path+=" v "+Math.max(vHi-vLo,minWidthHeight)}}return path};function plotLine(selection){selection.each(function(d){var el=plotLine.el=d3.select(this);var index=d.index;var closed=d.closed;var evaluatedData=evaluate(chart,d);var innerSelection=el.selectAll(":scope > path.line").data(evaluatedData);minWidthHeight=Math.max(evaluatedData[0].scaledDx,1);innerSelection.enter().append("path").attr("class","line line-"+index).attr("fill","none");innerSelection.attr("stroke-width",minWidthHeight).attr("stroke",utils.color(d,index)).attr("opacity",closed?.5:1).attr("d",function(d){return line(d,closed)}).attr(d.attr);innerSelection.exit().remove()})}return plotLine}},{"../evaluate":3,"../utils":22}],7:[function(require,module,exports){"use strict";var d3=window.d3;var evaluate=require("../evaluate");var utils=require("../utils");var clamp=require("clamp");module.exports=function(chart){var xScale=chart.meta.xScale;var yScale=chart.meta.yScale;function plotLine(selection){selection.each(function(d){var el=plotLine.el=d3.select(this);var index=d.index;var evaluatedData=evaluate(chart,d);var color=utils.color(d,index);var innerSelection=el.selectAll(":scope > path.line").data(evaluatedData);var yRange=yScale.range();var yMax=yRange[0]+1;var yMin=yRange[1]-1;if(d.skipBoundsCheck){yMax=Infinity;yMin=-Infinity}function y(d){return clamp(yScale(d[1]),yMin,yMax)}var line=d3.svg.line().interpolate("linear").x(function(d){return xScale(d[0])}).y(y);var area=d3.svg.area().x(function(d){return xScale(d[0])}).y0(yScale(0)).y1(y);
+
+innerSelection.enter().append("path").attr("class","line line-"+index).attr("stroke-width",2).attr("stroke-linecap","round");innerSelection.each(function(){var path=d3.select(this);
+    
+    var pathD;if(d.closed){path.attr("fill",color);path.attr("fill-opacity",.3);pathD=area}else{path.attr("fill","none");pathD=line}path.attr("stroke",color).attr("marker-end",function(){return d.fnType==="vector"?"url(#"+chart.markerId+")":null}).attr("d",pathD)}).attr(d.attr);innerSelection.exit().remove()})}return plotLine}},{"../evaluate":3,"../utils":22,clamp:29}],8:[function(require,module,exports){"use strict";var d3=window.d3;var evaluate=require("../evaluate");var utils=require("../utils");module.exports=function(chart){var xScale=chart.meta.xScale;var yScale=chart.meta.yScale;function scatter(selection){selection.each(function(d){var i,j;var index=d.index;var color=utils.color(d,index);var evaluatedData=evaluate(chart,d);var joined=[];for(i=0;i<evaluatedData.length;i+=1){for(j=0;j<evaluatedData[i].length;j+=1){joined.push(evaluatedData[i][j])}}var innerSelection=d3.select(this).selectAll(":scope > circle").data(joined);innerSelection.enter().append("circle");
+
+innerSelection.attr("fill",d3.hsl(color.toString())).attr("stroke",color).attr("opacity",1).attr("r",2).attr("cx",function(d){return xScale(d[0])}).attr("cy",function(d){return yScale(d[1])}).attr(d.attr);innerSelection.exit().remove()})}return scatter}},{"../evaluate":3,"../utils":22}],9:[function(require,module,exports){"use strict";var d3=window.d3;module.exports=function(options){var annotations;var xScale=options.owner.meta.xScale;var yScale=options.owner.meta.yScale;var line=d3.svg.line().x(function(d){return d[0]}).y(function(d){return d[1]});annotations=function(parentSelection){parentSelection.each(function(){var current=d3.select(this);var selection=current.selectAll("g.annotations").data(function(d){return d.annotations||[]});selection.enter().append("g").attr("class","annotations");var yRange=yScale.range();var xRange=xScale.range();var path=selection.selectAll("path").data(function(d){if(d.hasOwnProperty("x")){return[[[0,yRange[0]],[0,yRange[1]]]]}else{return[[[xRange[0],0],[xRange[1],0]]]}});path.enter().append("path").attr("stroke","#eee").attr("d",line);path.exit().remove();var text=selection.selectAll("text").data(function(d){return[{text:d.text||"",hasX:d.hasOwnProperty("x")}]});text.enter().append("text").attr("fill", "white").attr("y",function(d){return d.hasX?3:0}).attr("x",function(d){return d.hasX?0:3}).attr("dy",function(d){return d.hasX?5:-5}).attr("text-anchor",function(d){return d.hasX?"end":""}).attr("transform",function(d){return d.hasX?"rotate(-90)":""}).text(function(d){return d.text});text.exit().remove();selection.attr("transform",function(d){if(d.hasOwnProperty("x")){return"translate("+xScale(d.x)+", 0)"}else{return"translate(0, "+yScale(d.y)+")"}});selection.exit().remove()})};return annotations}},{}],10:[function(require,module,exports){"use strict";var d3=window.d3;var builtInEvaluator=require("./eval").builtIn;var polyline=require("../graph-types/polyline");var datumDefaults=require("../datum-defaults");module.exports=function(chart){var derivativeDatum=datumDefaults({isHelper:true,skipTip:true,skipBoundsCheck:true,nSamples:2,graphType:"polyline"});var derivative;function computeLine(d){if(!d.derivative){return[]}var x0=typeof d.derivative.x0==="number"?d.derivative.x0:Infinity;derivativeDatum.index=d.index;derivativeDatum.scope={m:builtInEvaluator(d.derivative,"fn",{x:x0}),x0:x0,y0:builtInEvaluator(d,"fn",{x:x0})};derivativeDatum.fn="m * (x - x0) + y0";return[derivativeDatum]}function checkAutoUpdate(d){var self=this;if(!d.derivative){return}if(d.derivative.updateOnMouseMove&&!d.derivative.$$mouseListener){d.derivative.$$mouseListener=function(x0){if(d.derivative){d.derivative.x0=x0}derivative(self)};chart.on("tip:update",d.derivative.$$mouseListener)}}derivative=function(selection){selection.each(function(d){var el=d3.select(this);var data=computeLine.call(selection,d);checkAutoUpdate.call(selection,d);var innerSelection=el.selectAll("g.derivative").data(data);innerSelection.enter().append("g").attr("class","derivative");innerSelection.call(polyline(chart));innerSelection.selectAll("path").attr("opacity",.5);innerSelection.exit().remove()})};return derivative}},{"../datum-defaults":2,"../graph-types/polyline":7,"./eval":11}],11:[function(require,module,exports){"use strict";var samplers={interval:require("interval-arithmetic-eval"),builtIn:require("built-in-math-eval")};var extend=require("extend");window.math&&(samplers.builtIn=window.math.compile);function generateEvaluator(samplerName){function doCompile(expression){if(typeof expression==="string"){var compile=samplers[samplerName];return compile(expression)}else if(typeof expression==="function"){return{eval:expression}}else{throw Error("expression must be a string or a function")}}function compileIfPossible(meta,property){var expression=meta[property];var hiddenProperty=samplerName+"_Expression_"+property;var hiddenCompiled=samplerName+"_Compiled_"+property;if(expression!==meta[hiddenProperty]){meta[hiddenProperty]=expression;meta[hiddenCompiled]=doCompile(expression)}}function getCompiledExpression(meta,property){return meta[samplerName+"_Compiled_"+property]}function evaluate(meta,property,variables){compileIfPossible(meta,property);return getCompiledExpression(meta,property).eval(extend({},meta.scope||{},variables))}return evaluate}module.exports.builtIn=generateEvaluator("builtIn");module.exports.interval=generateEvaluator("interval")},{"built-in-math-eval":26,extend:32,"interval-arithmetic-eval":36}],12:[function(require,module,exports){"use strict";var d3=window.d3;var derivative=require("./derivative");var secant=require("./secant");module.exports=function(chart){function helper(selection){selection.each(function(){var el=d3.select(this);el.call(derivative(chart));el.call(secant(chart))})}return helper}},{"./derivative":10,"./secant":13}],13:[function(require,module,exports){"use strict";var d3=window.d3;var extend=require("extend");var builtInEvaluator=require("./eval").builtIn;var datumDefaults=require("../datum-defaults");var polyline=require("../graph-types/polyline");module.exports=function(chart){var secantDefaults=datumDefaults({isHelper:true,skipTip:true,skipBoundsCheck:true,nSamples:2,graphType:"polyline"});var secant;function computeSlope(scope){scope.m=(scope.y1-scope.y0)/(scope.x1-scope.x0)}function updateLine(d,secant){if(!secant.hasOwnProperty("x0")){throw Error("secant must have the property `x0` defined")}secant.scope=secant.scope||{};var x0=secant.x0;var x1=typeof secant.x1==="number"?secant.x1:Infinity;extend(secant.scope,{x0:x0,x1:x1,y0:builtInEvaluator(d,"fn",{x:x0}),y1:builtInEvaluator(d,"fn",{x:x1})});computeSlope(secant.scope)}function setFn(d,secant){updateLine(d,secant);secant.fn="m * (x - x0) + y0"}function setMouseListener(d,secantObject){var self=this;if(secantObject.updateOnMouseMove&&!secantObject.$$mouseListener){secantObject.$$mouseListener=function(x1){secantObject.x1=x1;updateLine(d,secantObject);secant(self)};chart.on("tip:update",secantObject.$$mouseListener)}}function computeLines(d){var self=this;var data=[];d.secants=d.secants||[];for(var i=0;i<d.secants.length;i+=1){var secant=d.secants[i]=extend({},secantDefaults,d.secants[i]);secant.index=d.index;if(!secant.fn){setFn.call(self,d,secant);setMouseListener.call(self,d,secant)}data.push(secant)}return data}secant=function(selection){selection.each(function(d){var el=d3.select(this);var data=computeLines.call(selection,d);var innerSelection=el.selectAll("g.secant").data(data);innerSelection.enter().append("g").attr("class","secant");innerSelection.call(polyline(chart));innerSelection.selectAll("path").attr("opacity",.5);innerSelection.exit().remove()})};return secant}},{"../datum-defaults":2,"../graph-types/polyline":7,"./eval":11,extend:32}],14:[function(require,module,exports){"use strict";require("./polyfills");var d3=window.d3;var events=require("events");var extend=require("extend");var mousetip=require("./tip");var helpers=require("./helpers/");var annotations=require("./helpers/annotations");var datumDefaults=require("./datum-defaults");var globals;var graphTypes;var cache=[];module.exports=function(options){options=options||{};options.data=options.data||[];var width,height;var margin;var zoomBehavior;var xScale,yScale;var line=d3.svg.line().x(function(d){return xScale(d[0])}).y(function(d){return yScale(d[1])});function Chart(){var n=Math.random();var letter=String.fromCharCode(Math.floor(n*26)+97);this.id=options.id=letter+n.toString(16).substr(2);this.linkedGraphs=[this];this.options=options;cache[this.id]=this;this.setUpEventListeners()}Chart.prototype=Object.create(events.prototype);Chart.prototype.build=function(){this.internalVars();this.drawGraphWrapper();return this};Chart.prototype.initializeAxes=function(){var integerFormat=d3.format("s");var format=function(scale){return function(d){var decimalFormat=scale.tickFormat(10);var isInteger=d===+d&&d===(d|0);return isInteger?integerFormat(d):decimalFormat(d)}};function computeYScale(xScale){var xDiff=xScale[1]-xScale[0];return height*xDiff/width}options.xAxis=options.xAxis||{};options.xAxis.type=options.xAxis.type||"linear";options.yAxis=options.yAxis||{};options.yAxis.type=options.yAxis.type||"linear";var xDomain=this.meta.xDomain=function(axis){if(axis.domain){return axis.domain}if(axis.type==="linear"){var xLimit=12;return[-xLimit/2,xLimit/2]}else if(axis.type==="log"){return[1,10]}throw Error("axis type "+axis.type+" unsupported")}(options.xAxis);var yDomain=this.meta.yDomain=function(axis){if(axis.domain){return axis.domain}var yLimit=computeYScale(xDomain);if(axis.type==="linear"){return[-yLimit/2,yLimit/2]}else if(axis.type==="log"){return[1,10]}throw Error("axis type "+axis.type+" unsupported")}(options.yAxis);if(xDomain[0]>=xDomain[1]){throw Error("the pair defining the x-domain is inverted")}if(yDomain[0]>=yDomain[1]){throw Error("the pair defining the y-domain is inverted")}xScale=this.meta.xScale=d3.scale[options.xAxis.type]().domain(xDomain).range(options.xAxis.invert?[width,0]:[0,width]);yScale=this.meta.yScale=d3.scale[options.yAxis.type]().domain(yDomain).range(options.yAxis.invert?[0,height]:[height,0]);this.meta.xAxis=d3.svg.axis().scale(xScale).tickSize(options.grid?-height:0).tickFormat(format(xScale)).orient("bottom");this.meta.yAxis=d3.svg.axis().scale(yScale).tickSize(options.grid?-width:0).tickFormat(format(yScale)).orient("left")};Chart.prototype.internalVars=function(){this.meta={};margin=this.meta.margin={left:30,right:30,top:20,bottom:20};if(options.title){this.meta.margin.top=40}zoomBehavior=this.meta.zoomBehavior=d3.behavior.zoom();width=this.meta.width=(options.width||globals.DEFAULT_WIDTH)-margin.left-margin.right;height=this.meta.height=(options.height||globals.DEFAULT_HEIGHT)-margin.top-margin.bottom;this.initializeAxes()};Chart.prototype.drawGraphWrapper=function(){var root=this.root=d3.select(options.target).selectAll("svg").data([options]);this.root.enter=root.enter().append("svg").attr("class","function-plot").attr("font-size",this.getFontSize());root.attr("width",width+margin.left+margin.right).attr("height",height+margin.top+margin.bottom);this.buildTitle();this.buildLegend();this.buildCanvas();this.buildClip();this.buildAxis();this.buildAxisLabel();this.draw();var tip=this.tip=mousetip(extend(options.tip,{owner:this}));this.canvas.call(tip);this.buildZoomHelper();this.setUpPlugins()};Chart.prototype.buildTitle=function(){var selection=this.root.selectAll("text.title").data(function(d){return[d.title].filter(Boolean)});selection.enter().append("text").attr("class","title").attr("fill", "white").attr("y",margin.top/2).attr("x",margin.left+width/2).attr("font-size",25).attr("text-anchor","middle").attr("alignment-baseline","middle").text(options.title);selection.exit().remove()};Chart.prototype.buildLegend=function(){this.root.enter.append("text").attr("class","top-right-legend").attr("text-anchor","end");this.root.select(".top-right-legend").attr("fill", "white").attr("y",margin.top/2).attr("x",width+margin.left)};Chart.prototype.buildCanvas=function(){var self=this;this.meta.zoomBehavior.x(xScale).y(yScale).on("zoom",function onZoom(){self.emit("all:zoom",d3.event.translate,d3.event.scale)});var canvas=this.canvas=this.root.selectAll(".canvas").data(function(d){return[d]});this.canvas.enter=canvas.enter().append("g").attr("class","canvas")};Chart.prototype.buildClip=function(){var id=this.id;var defs=this.canvas.enter.append("defs");defs.append("clipPath").attr("id","function-plot-clip-"+id).append("rect").attr("class","clip static-clip");this.canvas.selectAll(".clip").attr("width",width).attr("height",height);this.markerId=this.id+"-marker";defs.append("clipPath").append("marker").attr("id",this.markerId).attr("viewBox","0 -5 10 10").attr("refX",10).attr("markerWidth",5).attr("markerHeight",5).attr("orient","auto").append("svg:path").attr("d","M0,-5L10,0L0,5L0,0").attr("stroke-width","0px").attr("fill-opacity",1).attr("fill","#777")};Chart.prototype.buildAxis=function(){var canvasEnter=this.canvas.enter;canvasEnter.append("g").attr("class","x axis");canvasEnter.append("g").attr("class","y axis");this.canvas.select(".x.axis").attr("transform","translate(0,"+height+")").call(this.meta.xAxis);this.canvas.select(".y.axis").call(this.meta.yAxis)};Chart.prototype.buildAxisLabel=function(){var xLabel,yLabel;var canvas=this.canvas;xLabel=canvas.selectAll("text.x.axis-label").data(function(d){return[d.xAxis.label].filter(Boolean)});xLabel.attr("fill", "white");xLabel.enter().append("text").attr("class","x axis-label").attr("fill", "white").attr("text-anchor","end");xLabel.attr("x",width).attr("y",height-6).text(function(d){return d});xLabel.exit().remove();yLabel=canvas.selectAll("text.y.axis-label").data(function(d){return[d.yAxis.label].filter(Boolean)});yLabel.enter().append("text").attr("fill", "white").attr("class","y axis-label").attr("y",6).attr("dy",".75em").attr("text-anchor","end").attr("fill", "white").attr("transform","rotate(-90)");yLabel.text(function(d){return d});yLabel.attr("fill", "white");yLabel.exit().remove()};Chart.prototype.buildContent=function(){var self=this;var canvas=this.canvas;canvas.attr("transform","translate("+margin.left+","+margin.top+")").call(zoomBehavior).each(function(){var el=d3.select(this);var listeners=["mousedown","touchstart","onwheel"in document?"wheel":"ononmousewheel"in document?"mousewheel":"MozMousePixelScroll"].map(function(d){return d+".zoom"});if(!el._zoomListenersCache){listeners.forEach(function(l){el["_"+l]=el.on(l)});el._zoomListenersCache=true}function setState(state){listeners.forEach(function(l){state?el.on(l,el["_"+l]):el.on(l,null)})}setState(!options.disableZoom)});var content=this.content=canvas.selectAll(":scope > g.content").data(function(d){return[d]});content.enter().append("g").attr("clip-path","url(#function-plot-clip-"+this.id+")").attr("class","content");if(options.xAxis.type==="linear"){var yOrigin=content.selectAll(":scope > path.y.origin").data([[[0,yScale.domain()[0]],[0,yScale.domain()[1]]]]);yOrigin.enter().append("path").attr("class","y origin").attr("stroke","white").attr("opacity",.2);yOrigin.attr("d",line)}if(options.yAxis.type==="linear"){var xOrigin=content.selectAll(":scope > path.x.origin").data([[[xScale.domain()[0],0],[xScale.domain()[1],0]]]);xOrigin.enter().append("path").attr("class","x origin").attr("stroke","white").attr("opacity",.2);xOrigin.attr("d",line)}content.call(annotations({owner:self}));var graphs=content.selectAll(":scope > g.graph").data(function(d){return d.data.map(datumDefaults)});graphs.enter().append("g").attr("class","graph");graphs.each(function(d,index){d.index=index;d3.select(this).call(graphTypes[d.graphType](self));d3.select(this).call(helpers(self))})};Chart.prototype.buildZoomHelper=function(){var self=this;this.draggable=this.canvas.enter.append("rect").attr("class","zoom-and-drag").style("fill","none").style("pointer-events","all");this.canvas.select(".zoom-and-drag").attr("width",width).attr("height",height).on("mouseover",function(){self.emit("all:mouseover")}).on("mouseout",function(){self.emit("all:mouseout")}).on("mousemove",function(){self.emit("all:mousemove")})};Chart.prototype.setUpPlugins=function(){var plugins=options.plugins||[];var self=this;plugins.forEach(function(plugin){plugin(self)})};Chart.prototype.addLink=function(){for(var i=0;i<arguments.length;i+=1){this.linkedGraphs.push(arguments[i])}};Chart.prototype.updateAxes=function(){var instance=this;var canvas=instance.canvas;canvas.select(".x.axis").call(instance.meta.xAxis);canvas.select(".y.axis").call(instance.meta.yAxis);canvas.selectAll(".axis path, .axis line").attr("fill","none").attr("stroke","white").attr("shape-rendering","crispedges").attr("opacity",.1)};Chart.prototype.syncOptions=function(){this.options.xAxis.domain=this.meta.xScale.domain();this.options.yAxis.domain=this.meta.yScale.domain()};Chart.prototype.programmaticZoom=function(xDomain,yDomain){var instance=this;d3.transition().duration(750).tween("zoom",function(){var ix=d3.interpolate(xScale.domain(),xDomain);var iy=d3.interpolate(yScale.domain(),yDomain);return function(t){zoomBehavior.x(xScale.domain(ix(t))).y(yScale.domain(iy(t)));instance.draw()}}).each("end",function(){instance.emit("programmatic-zoom")})};Chart.prototype.getFontSize=function(){return Math.max(Math.max(width,height)/50,8)};Chart.prototype.draw=function(){var instance=this;instance.emit("before:draw");instance.syncOptions();instance.updateAxes();instance.buildContent();instance.emit("after:draw")};Chart.prototype.setUpEventListeners=function(){var instance=this;var events={mousemove:function(coordinates){instance.tip.move(coordinates);d3.selectAll("text").attr("fill", "white");},mouseover:function(){instance.tip.show()},mouseout:function(){instance.tip.hide()},zoom:function(translate,scale){zoomBehavior.translate(translate).scale(scale)},"tip:update":function(x,y,index){var meta=instance.root.datum().data[index];var title=meta.title||"";var format=meta.renderer||function(x,y){return x.toFixed(3)+", "+y.toFixed(3)};var text=[];title&&text.push(title);text.push(format(x,y));instance.root.select(".top-right-legend").attr("fill",globals.COLORS[index]).text(text.join(" "))}};var all={mousemove:function(){var mouse=d3.mouse(instance.root.select("rect.zoom-and-drag").node());var coordinates={x:xScale.invert(mouse[0]),y:yScale.invert(mouse[1])};instance.linkedGraphs.forEach(function(graph){graph.emit("before:mousemove",coordinates);graph.emit("mousemove",coordinates)})},zoom:function(translate,scale){instance.linkedGraphs.forEach(function(graph,i){graph.emit("zoom",translate,scale);graph.draw()});instance.emit("all:mousemove")}};Object.keys(events).forEach(function(e){instance.on(e,events[e]);!all[e]&&instance.on("all:"+e,function(){var args=Array.prototype.slice.call(arguments);instance.linkedGraphs.forEach(function(graph){var localArgs=args.slice();localArgs.unshift(e);graph.emit.apply(graph,localArgs)})})});Object.keys(all).forEach(function(e){instance.on("all:"+e,all[e])})};var instance=cache[options.id];if(!instance){instance=new Chart}return instance.build()};globals=module.exports.globals=require("./globals");graphTypes=module.exports.graphTypes=require("./graph-types/");module.exports.plugins=require("./plugins/");module.exports.eval=require("./helpers/eval")},{"./datum-defaults":2,"./globals":4,"./graph-types/":5,"./helpers/":12,"./helpers/annotations":9,"./helpers/eval":11,"./plugins/":16,"./polyfills":18,"./tip":21,events:31,extend:32}],15:[function(require,module,exports){var d3=window.d3;var extend=require("extend");var pressed=require("key-pressed");var keydown=require("keydown");var integrateSimpson=require("integrate-adaptive-simpson");module.exports=function(options){options=extend({key:"<shift>",toggle:false},options);var brush=d3.svg.brush();var kd=keydown(options.key);var visible=false;var cachedInstance;function wrapper(datum){return function(x){var functionPlot=window.functionPlot;return functionPlot.eval.builtIn(datum,"fn",{x:x})}}function setBrushState(visible){var brushEl=cachedInstance.canvas.selectAll(".definite-integral");brushEl.style("display",visible?null:"none")}function inner(instance){cachedInstance=instance;var oldDisableZoom;brush.x(instance.meta.xScale).on("brushstart",function(){if(!d3.event.sourceEvent)return;oldDisableZoom=!!instance.options.disableZoom;instance.options.disableZoom=true;instance.emit("draw")}).on("brushend",function(){if(!d3.event.sourceEvent)return;instance.options.disableZoom=oldDisableZoom;if(!brush.empty()){var a=brush.extent()[0];var b=brush.extent()[1];instance.options.data.forEach(function(datum,i){var value=integrateSimpson(wrapper(datum),a,b,options.tol,options.maxdepth);instance.emit("definite-integral",datum,i,value,a,b)})}instance.draw()});var brushEl=instance.canvas.append("g").attr("class","brush definite-integral");brushEl.call(brush).call(brush.event);instance.canvas.selectAll(".brush .extent").attr("stroke","#fff").attr("fill-opacity",.125).attr("shape-rendering","crispEdges");brushEl.selectAll("rect").attr("height",instance.meta.height);instance.canvas.on("mousemove.definiteIntegral",function(){if(!options.toggle){inner.visible(pressed(options.key))}});kd.on("pressed",function(){inner.visible(options.toggle?!inner.visible():true)});inner.visible(false)}inner.visible=function(_){if(!arguments.length){return visible}visible=_;setBrushState(_);return inner};return inner}},{extend:32,"integrate-adaptive-simpson":35,"key-pressed":54,keydown:55}],16:[function(require,module,exports){module.exports={zoomBox:require("./zoom-box"),definiteIntegral:require("./definite-integral")}},{"./definite-integral":15,"./zoom-box":17}],17:[function(require,module,exports){var d3=window.d3;var extend=require("extend");var pressed=require("key-pressed");var keydown=require("keydown");module.exports=function(options){options=extend({key:"<shift>",toggle:false},options);var brush=d3.svg.brush();var kd=keydown(options.key);var cachedInstance;var visible=false;function setBrushState(visible){var brushEl=cachedInstance.canvas.selectAll(".zoom-box");brushEl.style("display",visible?null:"none")}function inner(instance){cachedInstance=instance;var oldDisableZoom;brush.x(instance.meta.xScale).y(instance.meta.yScale).on("brushstart",function(){if(!d3.event.sourceEvent)return;oldDisableZoom=!!instance.options.disableZoom;instance.options.disableZoom=true;instance.draw()}).on("brushend",function(){if(!d3.event.sourceEvent)return;instance.options.disableZoom=oldDisableZoom;if(!brush.empty()){var lo=brush.extent()[0];var hi=brush.extent()[1];var x=[lo[0],hi[0]];var y=[lo[1],hi[1]];instance.programmaticZoom(x,y)}d3.select(this).transition().duration(1).call(brush.clear()).call(brush.event)});var brushEl=instance.canvas.append("g").attr("class","brush zoom-box");brushEl.call(brush).call(brush.event);instance.canvas.selectAll(".brush .extent").attr("stroke","#fff").attr("fill-opacity",.125).attr("shape-rendering","crispEdges");instance.canvas.on("mousemove.zoombox",function(){if(!options.toggle){inner.visible(pressed(options.key))}});kd.on("pressed",function(){inner.visible(options.toggle?!inner.visible():true)});inner.visible(false)}inner.visible=function(_){if(!arguments.length){return visible}visible=_;setBrushState(_);return inner};return inner}},{extend:32,"key-pressed":54,keydown:55}],18:[function(require,module,exports){(function(doc,proto){try{doc.querySelector(":scope body")}catch(err){["querySelector","querySelectorAll"].forEach(function(method){var native=proto[method];proto[method]=function(selectors){if(/(^|,)\s*:scope/.test(selectors)){var id=this.id;this.id="ID_"+Date.now();selectors=selectors.replace(/((^|,)\s*):scope/g,"$1#"+this.id);var result=doc[method](selectors);this.id=id;return result}else{return native.call(this,selectors)}}})}})(window.document,Element.prototype)},{}],19:[function(require,module,exports){"use strict";var clamp=require("clamp");var linspace=require("linspace");var utils=require("../utils");var evaluate=require("../helpers/eval").builtIn;function checkAsymptote(d0,d1,meta,sign,level){if(!level){return{asymptote:true,d0:d0,d1:d1}}var i;var n=10;var x0=d0[0];var x1=d1[0];var samples=linspace(x0,x1,n);var oldY,oldX;for(i=0;i<n;i+=1){var x=samples[i];var y=evaluate(meta,"fn",{x:x});if(i){var deltaY=y-oldY;var newSign=utils.sgn(deltaY);if(newSign===sign){return checkAsymptote([oldX,oldY],[x,y],meta,sign,level-1)}}oldY=y;oldX=x}return{asymptote:false,d0:d0,d1:d1}}function split(chart,meta,data){var i,oldSign;var deltaX;var st=[];var sets=[];var domain=chart.meta.yScale.domain();var zoomScale=chart.meta.zoomBehavior.scale();var yMin=domain[0];var yMax=domain[1];if(data[0]){st.push(data[0]);deltaX=data[1][0]-data[0][0];oldSign=utils.sgn(data[1][1]-data[0][1])}function updateY(d){d[1]=Math.min(d[1],yMax);d[1]=Math.max(d[1],yMin);return d}i=1;while(i<data.length){var y0=data[i-1][1];var y1=data[i][1];var deltaY=y1-y0;var newSign=utils.sgn(deltaY);if(oldSign!==newSign&&Math.abs(deltaY/deltaX)>1/zoomScale){var check=checkAsymptote(data[i-1],data[i],meta,newSign,3);if(check.asymptote){st.push(updateY(check.d0));sets.push(st);st=[updateY(check.d1)]}}oldSign=newSign;st.push(data[i]);++i}if(st.length){sets.push(st)}return sets}function linear(chart,meta,range,n){var allX=utils.space(chart,range,n);var yDomain=chart.meta.yScale.domain();var yDomainMargin=yDomain[1]-yDomain[0];var yMin=yDomain[0]-yDomainMargin*1e5;var yMax=yDomain[1]+yDomainMargin*1e5;var data=[];var i;for(i=0;i<allX.length;i+=1){var x=allX[i];var y=evaluate(meta,"fn",{x:x});if(utils.isValidNumber(x)&&utils.isValidNumber(y)){data.push([x,clamp(y,yMin,yMax)])}}data=split(chart,meta,data);return data}function parametric(chart,meta,range,nSamples){var parametricRange=meta.range||[0,2*Math.PI];var tCoords=utils.space(chart,parametricRange,nSamples);var samples=[];for(var i=0;i<tCoords.length;i+=1){var t=tCoords[i];var x=evaluate(meta,"x",{t:t});var y=evaluate(meta,"y",{t:t});samples.push([x,y])}return[samples]}function polar(chart,meta,range,nSamples){var polarRange=meta.range||[-Math.PI,Math.PI];var thetaSamples=utils.space(chart,polarRange,nSamples);var samples=[];for(var i=0;i<thetaSamples.length;i+=1){var theta=thetaSamples[i];var r=evaluate(meta,"r",{theta:theta});var x=r*Math.cos(theta);var y=r*Math.sin(theta);samples.push([x,y])}return[samples]}function points(chart,meta,range,nSamples){return[meta.points]}function vector(chart,meta,range,nSamples){meta.offset=meta.offset||[0,0];return[[meta.offset,[meta.vector[0]+meta.offset[0],meta.vector[1]+meta.offset[1]]]]}var sampler=function(chart,d,range,nSamples){var fnTypes={parametric:parametric,polar:polar,points:points,vector:vector,linear:linear};if(!(d.fnType in fnTypes)){throw Error(d.fnType+" is not supported in the `builtIn` sampler")}return fnTypes[d.fnType].apply(null,arguments)};module.exports=sampler},{"../helpers/eval":11,"../utils":22,clamp:29,linspace:56}],20:[function(require,module,exports){
+"use strict";var intervalArithmeticEval=require("interval-arithmetic-eval");var Interval=intervalArithmeticEval.Interval;var evaluate=require("../helpers/eval").interval;var utils=require("../utils");intervalArithmeticEval.policies.disableRounding();function interval1d(chart,meta,range,nSamples){var xCoords=utils.space(chart,range,nSamples);var xScale=chart.meta.xScale;var yScale=chart.meta.yScale;var yMin=yScale.domain()[0];var yMax=yScale.domain()[1];var samples=[];var i;for(i=0;i<xCoords.length-1;i+=1){var x={lo:xCoords[i],hi:xCoords[i+1]};var y=evaluate(meta,"fn",{x:x});if(!Interval.isEmpty(y)&&!Interval.isWhole(y)){samples.push([x,y])}if(Interval.isWhole(y)){samples.push(null)}}for(i=1;i<samples.length-1;i+=1){if(!samples[i]){var prev=samples[i-1];var next=samples[i+1];if(prev&&next&&!Interval.intervalsOverlap(prev[1],next[1])){if(prev[1].lo>next[1].hi){prev[1].hi=Math.max(yMax,prev[1].hi);next[1].lo=Math.min(yMin,next[1].lo)}if(prev[1].hi<next[1].lo){prev[1].lo=Math.min(yMin,prev[1].lo);next[1].hi=Math.max(yMax,next[1].hi)}}}}samples.scaledDx=xScale(xCoords[1])-xScale(xCoords[0]);return[samples]}var rectEps;function smallRect(x,y){return Interval.width(x)<rectEps}function quadTree(x,y,meta){var sample=evaluate(meta,"fn",{x:x,y:y});var fulfills=Interval.zeroIn(sample);if(!fulfills){return this}if(smallRect(x,y)){this.push([x,y]);return this}var midX=x.lo+(x.hi-x.lo)/2;var midY=y.lo+(y.hi-y.lo)/2;var east={lo:midX,hi:x.hi};var west={lo:x.lo,hi:midX};var north={lo:midY,hi:y.hi};var south={lo:y.lo,hi:midY};quadTree.call(this,east,north,meta);quadTree.call(this,east,south,meta);quadTree.call(this,west,north,meta);quadTree.call(this,west,south,meta)}function interval2d(chart,meta){var xScale=chart.meta.xScale;var xDomain=chart.meta.xScale.domain();var yDomain=chart.meta.yScale.domain();var x={lo:xDomain[0],hi:xDomain[1]};var y={lo:yDomain[0],hi:yDomain[1]};var samples=[];rectEps=xScale.invert(1)-xScale.invert(0);quadTree.call(samples,x,y,meta);samples.scaledDx=1;return[samples]}var sampler=function(chart,d,range,nSamples){var fnTypes={implicit:interval2d,linear:interval1d};if(!fnTypes.hasOwnProperty(d.fnType)){throw Error(d.fnType+" is not supported in the `interval` sampler")}return fnTypes[d.fnType].apply(null,arguments)};module.exports=sampler},{"../helpers/eval":11,"../utils":22,"interval-arithmetic-eval":36}],21:[function(require,module,exports){"use strict";var d3=window.d3;var extend=require("extend");var utils=require("./utils");var clamp=require("clamp");var globals=require("./globals");var builtInEvaluator=require("./helpers/eval").builtIn;module.exports=function(config){config=extend({xLine:false,yLine:false,renderer:function(x,y,index){return"("+x.toFixed(3)+", "+y.toFixed(3)+")"},owner:null},config);var MARGIN=20;var line=d3.svg.line().x(function(d){return d[0]}).y(function(d){return d[1]});function lineGenerator(el,data){return el.append("path").datum(data).attr("stroke","grey").attr("stroke-dasharray","5,5").attr("opacity",.5).attr("d",line)}function tip(selection){var innerSelection=selection.selectAll("g.tip").data(function(d){return[d]});innerSelection.enter().append("g").attr("class","tip").attr("clip-path","url(#function-plot-clip-"+config.owner.id+")");tip.el=innerSelection.selectAll("g.inner-tip").data(function(d){return[d]});tip.el.enter().append("g").attr("class","inner-tip").style("display","none").each(function(){var el=d3.select(this);lineGenerator(el,[[0,-config.owner.meta.height-MARGIN],[0,config.owner.meta.height+MARGIN]]).attr("class","tip-x-line").style("display","none");lineGenerator(el,[[-config.owner.meta.width-MARGIN,0],[config.owner.meta.width+MARGIN,0]]).attr("class","tip-y-line").style("display","none");el.append("circle").attr("r",3);el.append("text").attr("transform","translate(5,-5)")});selection.selectAll(".tip-x-line").style("display",config.xLine?null:"none");selection.selectAll(".tip-y-line").style("display",config.yLine?null:"none")}tip.move=function(coordinates){var i;var minDist=Infinity;var closestIndex=-1;var x,y;var el=tip.el;var inf=1e8;var meta=config.owner.meta;var data=el.data()[0].data;var xScale=meta.xScale;var yScale=meta.yScale;var width=meta.width;var height=meta.height;var x0=coordinates.x;var y0=coordinates.y;for(i=0;i<data.length;i+=1){if(data[i].skipTip||data[i].fnType!=="linear"){continue}var range=data[i].range||[-inf,inf];if(x0>range[0]-globals.TIP_X_EPS&&x0<range[1]+globals.TIP_X_EPS){try{var candidateY=builtInEvaluator(data[i],"fn",{x:x0})}catch(e){}if(utils.isValidNumber(candidateY)){var tDist=Math.abs(candidateY-y0);if(tDist<minDist){minDist=tDist;closestIndex=i}}}}if(closestIndex!==-1){x=x0;if(data[closestIndex].range){x=Math.max(x,data[closestIndex].range[0]);x=Math.min(x,data[closestIndex].range[1])}y=builtInEvaluator(data[closestIndex],"fn",{x:x});tip.show();config.owner.emit("tip:update",x,y,closestIndex);var clampX=clamp(x,xScale.invert(-MARGIN),xScale.invert(width+MARGIN));var clampY=clamp(y,yScale.invert(height+MARGIN),yScale.invert(-MARGIN));var color=utils.color(data[closestIndex],closestIndex);el.attr("transform","translate("+xScale(clampX)+","+yScale(clampY)+")");el.select("circle").attr("fill",color);el.select("text").attr("fill",color).text(config.renderer(x,y,closestIndex))}else{tip.hide()}};tip.show=function(){this.el.style("display",null)};tip.hide=function(){this.el.style("display","none")};Object.keys(config).forEach(function(option){utils.getterSetter.call(tip,config,option)});return tip}},{"./globals":4,"./helpers/eval":11,"./utils":22,clamp:29,extend:32}],22:[function(require,module,exports){"use strict";var linspace=require("linspace");var logspace=require("logspace");var log10=require("log10");var globals=require("./globals");module.exports={isValidNumber:function(v){return typeof v==="number"&&!isNaN(v)},space:function(chart,range,n){var lo=range[0];var hi=range[1];if(chart.options.xAxis.type==="log"){return logspace(log10(lo),log10(hi),n)}return linspace(lo,hi,n)},getterSetter:function(config,option){var me=this;this[option]=function(value){if(!arguments.length){return config[option]}config[option]=value;return me}},sgn:function(v){if(v<0){return-1}if(v>0){return 1}return 0},color:function(data,index){return data.color||globals.COLORS[index]}}},{"./globals":4,linspace:56,log10:57,logspace:58}],23:[function(require,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i<len;++i){lookup[i]=code[i];revLookup[code.charCodeAt(i)]=i}revLookup["-".charCodeAt(0)]=62;revLookup["_".charCodeAt(0)]=63;function placeHoldersCount(b64){var len=b64.length;if(len%4>0){throw new Error("Invalid string. Length must be a multiple of 4")}return b64[len-2]==="="?2:b64[len-1]==="="?1:0}function byteLength(b64){return b64.length*3/4-placeHoldersCount(b64)}function toByteArray(b64){var i,j,l,tmp,placeHolders,arr;var len=b64.length;placeHolders=placeHoldersCount(b64);arr=new Arr(len*3/4-placeHolders);l=placeHolders>0?len-4:len;var L=0;for(i=0,j=0;i<l;i+=4,j+=3){tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)];arr[L++]=tmp>>16&255;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}if(placeHolders===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[L++]=tmp&255}else if(placeHolders===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;i<end;i+=3){tmp=(uint8[i]<<16)+(uint8[i+1]<<8)+uint8[i+2];output.push(tripletToBase64(tmp))}return output.join("")}function fromByteArray(uint8){var tmp;var len=uint8.length;var extraBytes=len%3;var output="";var parts=[];var maxChunkLength=16383;for(var i=0,len2=len-extraBytes;i<len2;i+=maxChunkLength){parts.push(encodeChunk(uint8,i,i+maxChunkLength>len2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];output+=lookup[tmp>>2];output+=lookup[tmp<<4&63];output+="=="}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];output+=lookup[tmp>>10];output+=lookup[tmp>>4&63];output+=lookup[tmp<<2&63];output+="="}parts.push(output);return parts.join("")}},{}],24:[function(require,module,exports){(function(global){"use strict";var base64=require("base64-js");var ieee754=require("ieee754");var isArray=require("isarray");exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;Buffer.TYPED_ARRAY_SUPPORT=global.TYPED_ARRAY_SUPPORT!==undefined?global.TYPED_ARRAY_SUPPORT:typedArraySupport();exports.kMaxLength=kMaxLength();function typedArraySupport(){try{var arr=new Uint8Array(1);arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}};return arr.foo()===42&&typeof arr.subarray==="function"&&arr.subarray(1,1).byteLength===0}catch(e){return false}}function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(that,length){if(kMaxLength()<length){throw new RangeError("Invalid typed array length")}if(Buffer.TYPED_ARRAY_SUPPORT){that=new Uint8Array(length);that.__proto__=Buffer.prototype}else{if(that===null){that=new Buffer(length)}that.length=length}return that}function Buffer(arg,encodingOrOffset,length){if(!Buffer.TYPED_ARRAY_SUPPORT&&!(this instanceof Buffer)){return new Buffer(arg,encodingOrOffset,length)}if(typeof arg==="number"){if(typeof encodingOrOffset==="string"){throw new Error("If encoding is specified then the first argument must be a string")}return allocUnsafe(this,arg)}return from(this,arg,encodingOrOffset,length)}Buffer.poolSize=8192;Buffer._augment=function(arr){arr.__proto__=Buffer.prototype;return arr};function from(that,value,encodingOrOffset,length){if(typeof value==="number"){throw new TypeError('"value" argument must not be a number')}if(typeof ArrayBuffer!=="undefined"&&value instanceof ArrayBuffer){return fromArrayBuffer(that,value,encodingOrOffset,length)}if(typeof value==="string"){return fromString(that,value,encodingOrOffset)}return fromObject(that,value)}Buffer.from=function(value,encodingOrOffset,length){return from(null,value,encodingOrOffset,length)};if(Buffer.TYPED_ARRAY_SUPPORT){Buffer.prototype.__proto__=Uint8Array.prototype;Buffer.__proto__=Uint8Array;if(typeof Symbol!=="undefined"&&Symbol.species&&Buffer[Symbol.species]===Buffer){Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:true})}}function assertSize(size){if(typeof size!=="number"){throw new TypeError('"size" argument must be a number')}else if(size<0){throw new RangeError('"size" argument must not be negative')}}function alloc(that,size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(that,size)}if(fill!==undefined){return typeof encoding==="string"?createBuffer(that,size).fill(fill,encoding):createBuffer(that,size).fill(fill)}return createBuffer(that,size)}Buffer.alloc=function(size,fill,encoding){return alloc(null,size,fill,encoding)};function allocUnsafe(that,size){assertSize(size);that=createBuffer(that,size<0?0:checked(size)|0);if(!Buffer.TYPED_ARRAY_SUPPORT){for(var i=0;i<size;++i){that[i]=0}}return that}Buffer.allocUnsafe=function(size){return allocUnsafe(null,size)};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(null,size)};function fromString(that,string,encoding){if(typeof encoding!=="string"||encoding===""){encoding="utf8"}if(!Buffer.isEncoding(encoding)){throw new TypeError('"encoding" must be a valid string encoding')}var length=byteLength(string,encoding)|0;that=createBuffer(that,length);var actual=that.write(string,encoding);if(actual!==length){that=that.slice(0,actual)}return that}function fromArrayLike(that,array){var length=array.length<0?0:checked(array.length)|0;that=createBuffer(that,length);for(var i=0;i<length;i+=1){that[i]=array[i]&255}return that}function fromArrayBuffer(that,array,byteOffset,length){array.byteLength;if(byteOffset<0||array.byteLength<byteOffset){throw new RangeError("'offset' is out of bounds")}if(array.byteLength<byteOffset+(length||0)){throw new RangeError("'length' is out of bounds")}if(byteOffset===undefined&&length===undefined){array=new Uint8Array(array)}else if(length===undefined){array=new Uint8Array(array,byteOffset)}else{array=new Uint8Array(array,byteOffset,length)}if(Buffer.TYPED_ARRAY_SUPPORT){that=array;that.__proto__=Buffer.prototype}else{that=fromArrayLike(that,array)}return that}function fromObject(that,obj){if(Buffer.isBuffer(obj)){var len=checked(obj.length)|0;that=createBuffer(that,len);if(that.length===0){return that}obj.copy(that,0,0,len);return that}if(obj){if(typeof ArrayBuffer!=="undefined"&&obj.buffer instanceof ArrayBuffer||"length"in obj){if(typeof obj.length!=="number"||isnan(obj.length)){return createBuffer(that,0)}return fromArrayLike(that,obj)}if(obj.type==="Buffer"&&isArray(obj.data)){return fromArrayLike(that,obj.data)}}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function checked(length){if(length>=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i<len;++i){if(a[i]!==b[i]){x=a[i];y=b[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return true;default:return false}};Buffer.concat=function concat(list,length){if(!isArray(list)){throw new TypeError('"list" argument must be an Array of Buffers')}if(list.length===0){return Buffer.alloc(0)}var i;if(length===undefined){length=0;for(i=0;i<list.length;++i){length+=list[i].length}}var buffer=Buffer.allocUnsafe(length);var pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers')}buf.copy(buffer,pos);pos+=buf.length}return buffer};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length}if(typeof ArrayBuffer!=="undefined"&&typeof ArrayBuffer.isView==="function"&&(ArrayBuffer.isView(string)||string instanceof ArrayBuffer)){return string.byteLength}if(typeof string!=="string"){string=""+string}var len=string.length;if(len===0)return 0;var loweredCase=false;for(;;){switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":case undefined:return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return len*2;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var i=0;i<len;i+=2){swap(this,i,i+1)}return this};Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!==0){throw new RangeError("Buffer size must be a multiple of 32-bits")}for(var i=0;i<len;i+=4){swap(this,i,i+3);swap(this,i+1,i+2)}return this};Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!==0){throw new RangeError("Buffer size must be a multiple of 64-bits")}for(var i=0;i<len;i+=8){swap(this,i,i+7);swap(this,i+1,i+6);swap(this,i+2,i+5);swap(this,i+3,i+4)}return this};Buffer.prototype.toString=function toString(){var length=this.length|0;if(length===0)return"";if(arguments.length===0)return utf8Slice(this,0,length);return slowToString.apply(this,arguments)};Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");if(this===b)return true;return Buffer.compare(this,b)===0};Buffer.prototype.inspect=function inspect(){var str="";var max=exports.INSPECT_MAX_BYTES;if(this.length>0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return"<Buffer "+str+">"};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target)){throw new TypeError("Argument must be a Buffer")}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i<len;++i){if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i];y=targetCopy[i];break}}if(x<y)return-1;if(y<x)return 1;return 0};function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(buffer.length===0)return-1;if(typeof byteOffset==="string"){encoding=byteOffset;byteOffset=0}else if(byteOffset>2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(isNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(Buffer.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++){if(read(arr,i)===read(val,foundIndex===-1?0:i-foundIndex)){if(foundIndex===-1)foundIndex=i;if(i-foundIndex+1===valLength)return foundIndex*indexSize}else{if(foundIndex!==-1)i-=i-foundIndex;foundIndex=-1}}}else{if(byteOffset+valLength>arrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;j<valLength;j++){if(read(arr,i+j)!==read(val,j)){found=false;break}}if(found)return i}}return-1}Buffer.prototype.includes=function includes(val,byteOffset,encoding){return this.indexOf(val,byteOffset,encoding)!==-1};Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,false)};function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;if(!length){length=remaining}else{length=Number(length);if(length>remaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new TypeError("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;i<length;++i){var parsed=parseInt(string.substr(i*2,2),16);if(isNaN(parsed))return i;buf[offset+i]=parsed}return i}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length)}function asciiWrite(buf,string,offset,length){return blitBuffer(asciiToBytes(string),buf,offset,length)}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length)}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length)}function ucs2Write(buf,string,offset,length){return blitBuffer(utf16leToBytes(string,buf.length-offset),buf,offset,length)}Buffer.prototype.write=function write(string,offset,length,encoding){if(offset===undefined){encoding="utf8";length=this.length;offset=0}else if(length===undefined&&typeof offset==="string"){encoding=offset;length=this.length;offset=0}else if(isFinite(offset)){offset=offset|0;if(isFinite(length)){length=length|0;if(encoding===undefined)encoding="utf8"}else{encoding=length;length=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}var remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i<end){var firstByte=buf[i];var codePoint=null;var bytesPerSequence=firstByte>239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(i<len){res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH))}return res}function asciiSlice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i]&127)}return ret}function latin1Slice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i){ret+=String.fromCharCode(buf[i])}return ret}function hexSlice(buf,start,end){var len=buf.length;if(!start||start<0)start=0;if(!end||end<0||end>len)end=len;var out="";for(var i=start;i<end;++i){out+=toHex(buf[i])}return out}function utf16leSlice(buf,start,end){var bytes=buf.slice(start,end);var res="";for(var i=0;i<bytes.length;i+=2){res+=String.fromCharCode(bytes[i]+bytes[i+1]*256)}return res}Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start;end=end===undefined?len:~~end;if(start<0){start+=len;if(start<0)start=0}else if(start>len){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(end<start)end=start;var newBuf;if(Buffer.TYPED_ARRAY_SUPPORT){newBuf=this.subarray(start,end);newBuf.__proto__=Buffer.prototype}else{var sliceLen=end-start;newBuf=new Buffer(sliceLen,undefined);for(var i=0;i<sliceLen;++i){newBuf[i]=this[i+start]}}return newBuf};function checkOffset(offset,ext,length){if(offset%1!==0||offset<0)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}return val};Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert){checkOffset(offset,byteLength,this.length)}var val=this[offset+--byteLength];var mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i<byteLength&&(mul*=256)){val+=this[offset+i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1;var i=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var i=byteLength-1;var mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value&255;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i<j;++i){buf[offset+i]=(value&255<<8*(littleEndian?i:1-i))>>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;
+if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i<j;++i){buf[offset+i]=value>>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=0;this[offset]=value&255;while(++i<byteLength&&(mul*=256)){if(value<0&&sub===0&&this[offset+i-1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end<start)end=start;if(end===start)return 0;if(target.length===0||this.length===0)return 0;if(targetStart<0){throw new RangeError("targetStart out of bounds")}if(start<0||start>=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart<end-start){end=target.length-targetStart+start}var len=end-start;var i;if(this===target&&start<targetStart&&targetStart<end){for(i=len-1;i>=0;--i){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i<len;++i){target[i+targetStart]=this[i+start]}}else{Uint8Array.prototype.set.call(target,this.subarray(start,start+len),targetStart)}return len};Buffer.prototype.fill=function fill(val,start,end,encoding){if(typeof val==="string"){if(typeof start==="string"){encoding=start;start=0;end=this.length}else if(typeof end==="string"){encoding=end;end=this.length}if(val.length===1){var code=val.charCodeAt(0);if(code<256){val=code}}if(encoding!==undefined&&typeof encoding!=="string"){throw new TypeError("encoding must be a string")}if(typeof encoding==="string"&&!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}}else if(typeof val==="number"){val=val&255}if(start<0||this.length<start||this.length<end){throw new RangeError("Out of range index")}if(end<=start){return this}start=start>>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==="number"){for(i=start;i<end;++i){this[i]=val}}else{var bytes=Buffer.isBuffer(val)?val:utf8ToBytes(new Buffer(val,encoding).toString());var len=bytes.length;for(i=0;i<end-start;++i){this[i+start]=bytes[i%len]}}return this};var INVALID_BASE64_RE=/[^+\/0-9A-Za-z-_]/g;function base64clean(str){str=stringtrim(str).replace(INVALID_BASE64_RE,"");if(str.length<2)return"";while(str.length%4!==0){str=str+"="}return str}function stringtrim(str){if(str.trim)return str.trim();return str.replace(/^\s+|\s+$/g,"")}function toHex(n){if(n<16)return"0"+n.toString(16);return n.toString(16)}function utf8ToBytes(string,units){units=units||Infinity;var codePoint;var length=string.length;var leadSurrogate=null;var bytes=[];for(var i=0;i<length;++i){codePoint=string.charCodeAt(i);if(codePoint>55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i<str.length;++i){byteArray.push(str.charCodeAt(i)&255)}return byteArray}function utf16leToBytes(str,units){var c,hi,lo;var byteArray=[];for(var i=0;i<str.length;++i){if((units-=2)<0)break;c=str.charCodeAt(i);hi=c>>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i<length;++i){if(i+offset>=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isnan(val){return val!==val}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":23,ieee754:33,isarray:25}],25:[function(require,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],26:[function(require,module,exports){"use strict";module.exports=require("./lib/eval")},{"./lib/eval":28}],27:[function(require,module,exports){"use strict";module.exports=function(){var math=Object.create(Math);math.factory=function(a){if(typeof a!=="number"){throw new TypeError("built-in math factory only accepts numbers")}return Number(a)};math.add=function(a,b){return a+b};math.sub=function(a,b){return a-b};math.mul=function(a,b){return a*b};math.div=function(a,b){return a/b};math.mod=function(a,b){return a%b};math.factorial=function(a){var res=1;for(var i=2;i<=a;i+=1){res*=i}return res};math.nthRoot=function(a,root){var inv=root<0;if(inv){root=-root}if(root===0){throw new Error("Root must be non-zero")}if(a<0&&Math.abs(root)%2!==1){throw new Error("Root must be odd when a is negative.")}if(a===0){return 0}if(!isFinite(a)){return inv?0:a}var x=Math.pow(Math.abs(a),1/root);x=a<0?-x:x;return inv?1/x:x};math.logicalOR=function(a,b){return a||b};math.logicalXOR=function(a,b){return a!=b};math.logicalAND=function(a,b){return a&&b};math.bitwiseOR=function(a,b){return a|b};math.bitwiseXOR=function(a,b){return a^b};math.bitwiseAND=function(a,b){return a&b};math.lessThan=function(a,b){return a<b};math.lessEqualThan=function(a,b){return a<=b};math.greaterThan=function(a,b){return a>b};math.greaterEqualThan=function(a,b){return a>=b};math.equal=function(a,b){return a==b};math.strictlyEqual=function(a,b){return a===b};math.notEqual=function(a,b){return a!=b};math.strictlyNotEqual=function(a,b){return a!==b};math.shiftRight=function(a,b){return a>>b};math.shiftLeft=function(a,b){return a<<b};math.unsignedRightShift=function(a,b){return a>>>b};math.negative=function(a){return-a};math.positive=function(a){return a};return math}},{}],28:[function(require,module,exports){"use strict";var CodeGenerator=require("math-codegen");var math=require("./adapter")();function processScope(scope){Object.keys(scope).forEach(function(k){var value=scope[k];scope[k]=math.factory(value)})}module.exports=function(expression){return(new CodeGenerator).setDefs({$$processScope:processScope}).parse(expression).compile(math)};module.exports.math=math},{"./adapter":27,"math-codegen":59}],29:[function(require,module,exports){module.exports=clamp;function clamp(value,min,max){return min<max?value<min?min:value>max?max:value:value<max?max:value>min?min:value}},{}],30:[function(require,module,exports){(function(Buffer){var hasTypedArrays=false;if(typeof Float64Array!=="undefined"){var DOUBLE_VIEW=new Float64Array(1),UINT_VIEW=new Uint32Array(DOUBLE_VIEW.buffer);DOUBLE_VIEW[0]=1;hasTypedArrays=true;if(UINT_VIEW[1]===1072693248){module.exports=function doubleBitsLE(n){DOUBLE_VIEW[0]=n;return[UINT_VIEW[0],UINT_VIEW[1]]};function toDoubleLE(lo,hi){UINT_VIEW[0]=lo;UINT_VIEW[1]=hi;return DOUBLE_VIEW[0]}module.exports.pack=toDoubleLE;function lowUintLE(n){DOUBLE_VIEW[0]=n;return UINT_VIEW[0]}module.exports.lo=lowUintLE;function highUintLE(n){DOUBLE_VIEW[0]=n;return UINT_VIEW[1]}module.exports.hi=highUintLE}else if(UINT_VIEW[0]===1072693248){module.exports=function doubleBitsBE(n){DOUBLE_VIEW[0]=n;return[UINT_VIEW[1],UINT_VIEW[0]]};function toDoubleBE(lo,hi){UINT_VIEW[1]=lo;UINT_VIEW[0]=hi;return DOUBLE_VIEW[0]}module.exports.pack=toDoubleBE;function lowUintBE(n){DOUBLE_VIEW[0]=n;return UINT_VIEW[1]}module.exports.lo=lowUintBE;function highUintBE(n){DOUBLE_VIEW[0]=n;return UINT_VIEW[0]}module.exports.hi=highUintBE}else{hasTypedArrays=false}}if(!hasTypedArrays){var buffer=new Buffer(8);module.exports=function doubleBits(n){buffer.writeDoubleLE(n,0,true);return[buffer.readUInt32LE(0,true),buffer.readUInt32LE(4,true)]};function toDouble(lo,hi){buffer.writeUInt32LE(lo,0,true);buffer.writeUInt32LE(hi,4,true);return buffer.readDoubleLE(0,true)}module.exports.pack=toDouble;function lowUint(n){buffer.writeDoubleLE(n,0,true);return buffer.readUInt32LE(0,true)}module.exports.lo=lowUint;function highUint(n){buffer.writeDoubleLE(n,0,true);return buffer.readUInt32LE(4,true)}module.exports.hi=highUint}module.exports.sign=function(n){return module.exports.hi(n)>>>31};module.exports.exponent=function(n){var b=module.exports.hi(n);return(b<<1>>>21)-1023};module.exports.fraction=function(n){var lo=module.exports.lo(n);var hi=module.exports.hi(n);var b=hi&(1<<20)-1;if(hi&2146435072){b+=1<<20}return[lo,b]};module.exports.denormalized=function(n){var hi=module.exports.hi(n);return!(hi&2146435072)}}).call(this,require("buffer").Buffer)},{buffer:24}],31:[function(require,module,exports){function EventEmitter(){this._events=this._events||{};this._maxListeners=this._maxListeners||undefined}module.exports=EventEmitter;EventEmitter.EventEmitter=EventEmitter;EventEmitter.prototype._events=undefined;EventEmitter.prototype._maxListeners=undefined;EventEmitter.defaultMaxListeners=10;EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");this._maxListeners=n;return this};EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(!this._events)this._events={};if(type==="error"){if(!this._events.error||isObject(this._events.error)&&!this._events.error.length){er=arguments[1];if(er instanceof Error){throw er}else{var err=new Error('Uncaught, unspecified "error" event. ('+er+")");err.context=er;throw err}}}handler=this._events[type];if(isUndefined(handler))return false;if(isFunction(handler)){switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1);handler.apply(this,args)}}else if(isObject(handler)){args=Array.prototype.slice.call(arguments,1);listeners=handler.slice();len=listeners.length;for(i=0;i<len;i++)listeners[i].apply(this,args)}return true};EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events)this._events={};if(this._events.newListener)this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener);if(!this._events[type])this._events[type]=listener;else if(isObject(this._events[type]))this._events[type].push(listener);else this._events[type]=[this._events[type],listener];if(isObject(this._events[type])&&!this._events[type].warned){if(!isUndefined(this._maxListeners)){m=this._maxListeners}else{m=EventEmitter.defaultMaxListeners}if(m&&m>0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-->0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],32:[function(require,module,exports){"use strict";var hasOwn=Object.prototype.hasOwnProperty;var toStr=Object.prototype.toString;var isArray=function isArray(arr){if(typeof Array.isArray==="function"){return Array.isArray(arr)}return toStr.call(arr)==="[object Array]"};var isPlainObject=function isPlainObject(obj){if(!obj||toStr.call(obj)!=="[object Object]"){return false}var hasOwnConstructor=hasOwn.call(obj,"constructor");var hasIsPrototypeOf=obj.constructor&&obj.constructor.prototype&&hasOwn.call(obj.constructor.prototype,"isPrototypeOf");if(obj.constructor&&!hasOwnConstructor&&!hasIsPrototypeOf){return false}var key;for(key in obj){}return typeof key==="undefined"||hasOwn.call(obj,key)};module.exports=function extend(){var options,name,src,copy,copyIsArray,clone,target=arguments[0],i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2}else if(typeof target!=="object"&&typeof target!=="function"||target==null){target={}}for(;i<length;++i){options=arguments[i];if(options!=null){for(name in options){src=target[name];copy=options[name];if(target!==copy){if(deep&&copy&&(isPlainObject(copy)||(copyIsArray=isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&isArray(src)?src:[]}else{clone=src&&isPlainObject(src)?src:{}}target[name]=extend(deep,clone,copy)}else if(typeof copy!=="undefined"){target[name]=copy}}}}}return target}},{}],33:[function(require,module,exports){exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<<eLen)-1;var eBias=eMax>>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<<mLen|m;eLen+=mLen;for(;eLen>0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],34:[function(require,module,exports){module.exports=function(){var from=0,to=0,every=1,output=[];switch(arguments.length){case 1:to=arguments[0];break;case 3:every=arguments[2];case 2:from=arguments[0];to=arguments[1];break}for(i=from;i<to;i+=every){output.push(i)}return output}},{}],35:[function(require,module,exports){"use strict";module.exports=integrate;function adsimp(f,a,b,fa,fm,fb,V0,tol,maxdepth,depth,state){if(state.nanEncountered){return NaN}var h,f1,f2,sl,sr,s2,m,V1,V2,err;h=b-a;f1=f(a+h*.25);f2=f(b-h*.25);if(isNaN(f1)){state.nanEncountered=true;return}if(isNaN(f2)){state.nanEncountered=true;return}sl=h*(fa+4*f1+fm)/12;sr=h*(fm+4*f2+fb)/12;s2=sl+sr;err=(s2-V0)/15;if(depth>maxdepth){state.maxDepthCount++;return s2+err}else if(Math.abs(err)<tol){return s2+err}else{m=a+h*.5;V1=adsimp(f,a,m,fa,f1,fm,sl,tol*.5,maxdepth,depth+1,state);if(isNaN(V1)){state.nanEncountered=true;return NaN}V2=adsimp(f,m,b,fm,f2,fb,sr,tol*.5,maxdepth,depth+1,state);if(isNaN(V2)){state.nanEncountered=true;return NaN}return V1+V2}}function integrate(f,a,b,tol,maxdepth){var state={maxDepthCount:0,nanEncountered:false};if(tol===undefined){tol=1e-8}if(maxdepth===undefined){maxdepth=20}var fa=f(a);var fm=f(.5*(a+b));var fb=f(b);var V0=(fa+4*fm+fb)*(b-a)/6;var result=adsimp(f,a,b,fa,fm,fb,V0,tol,maxdepth,1,state);if(state.maxDepthCount>0&&console&&console.warn){console.warn("integrate-adaptive-simpson: Warning: maximum recursion depth ("+maxdepth+") reached "+state.maxDepthCount+" times")}if(state.nanEncountered&&console&&console.warn){console.warn("integrate-adaptive-simpson: Warning: NaN encountered. Halting early.")}return result}},{}],36:[function(require,module,exports){"use strict";module.exports=require("./lib/eval")},{"./lib/eval":38}],37:[function(require,module,exports){"use strict";module.exports=function(ns){ns.mod=ns.fmod;ns.lessThan=ns.lt;ns.lessEqualThan=ns.leq;ns.greaterThan=ns.gt;ns.greaterEqualThan=ns.geq;ns.strictlyEqual=ns.equal;ns.strictlyNotEqual=ns.notEqual;ns.logicalAND=function(a,b){return a&&b};ns.logicalXOR=function(a,b){return a^b};ns.logicalOR=function(a,b){return a||b}}},{}],38:[function(require,module,exports){"use strict";var CodeGenerator=require("math-codegen");var Interval=require("interval-arithmetic");require("./adapter")(Interval);function processScope(scope){Object.keys(scope).forEach(function(k){var value=scope[k];if(typeof value==="number"||Array.isArray(value)){scope[k]=Interval.factory(value)}else if(typeof value==="object"&&"lo"in value&&"hi"in value){scope[k]=Interval.factory(value.lo,value.hi)}})}module.exports=function(expression){return(new CodeGenerator).setDefs({$$processScope:processScope}).parse(expression).compile(Interval)};module.exports.policies=require("./policies")(Interval);module.exports.Interval=Interval},{"./adapter":37,"./policies":39,"interval-arithmetic":40,"math-codegen":59}],39:[function(require,module,exports){"use strict";module.exports=function(Interval){return{disableRounding:function(){Interval.rmath.disable()},enableRounding:function(){Interval.rmath.enable()}}}},{}],40:[function(require,module,exports){"use strict";var extend=require("xtend/mutable");require("./lib/polyfill");module.exports=require("./lib/interval");module.exports.rmath=require("./lib/round-math");module.exports.round=require("./lib/round-math");extend(module.exports,require("./lib/constants"),require("./lib/operations/relational"),require("./lib/operations/arithmetic"),require("./lib/operations/algebra"),require("./lib/operations/trigonometric"),require("./lib/operations/misc"),require("./lib/operations/utils"))},{"./lib/constants":41,"./lib/interval":42,"./lib/operations/algebra":43,"./lib/operations/arithmetic":44,"./lib/operations/misc":46,"./lib/operations/relational":47,"./lib/operations/trigonometric":48,"./lib/operations/utils":49,"./lib/polyfill":50,"./lib/round-math":51,"xtend/mutable":91}],41:[function(require,module,exports){"use strict";var Interval=require("./interval");var mutate=require("xtend/mutable");var piLow=(3373259426+273688/(1<<21))/(1<<30);var piHigh=(3373259426+273689/(1<<21))/(1<<30);var constants={};mutate(constants,{PI_LOW:piLow,PI_HIGH:piHigh,PI_HALF_LOW:piLow/2,PI_HALF_HIGH:piHigh/2,PI_TWICE_LOW:piLow*2,PI_TWICE_HIGH:piHigh*2});function getter(property,fn){Object.defineProperty(constants,property,{get:function(){return fn()},enumerable:true})}getter("PI",function(){return Interval(piLow,piHigh)});getter("PI_HALF",function(){return Interval(constants.PI_HALF_LOW,constants.PI_HALF_HIGH)});getter("PI_TWICE",function(){return Interval(constants.PI_TWICE_LOW,constants.PI_TWICE_HIGH)});getter("ZERO",function(){return Interval(0)});getter("ONE",function(){return Interval(1)});getter("WHOLE",function(){return Interval().setWhole()});getter("EMPTY",function(){return Interval().setEmpty()});module.exports=constants},{"./interval":42,"xtend/mutable":91}],42:[function(require,module,exports){"use strict";var utils=require("./operations/utils");var round=require("./round-math");module.exports=Interval;function Interval(lo,hi){if(!(this instanceof Interval)){return new Interval(lo,hi)}if(typeof lo!=="undefined"&&typeof hi!=="undefined"){if(utils.isInterval(lo)){if(!utils.isSingleton(lo)){throw new TypeError("Interval: interval `lo` must be a singleton")}lo=lo.lo}if(utils.isInterval(hi)){if(!utils.isSingleton(hi)){throw TypeError("Interval: interval `hi` must be a singleton")}hi=hi.hi}}else if(typeof lo!=="undefined"){if(Array.isArray(lo)){return Interval(lo[0],lo[1])}return Interval(lo,lo)}else{lo=hi=0}this.lo=undefined;this.hi=undefined;this.assign(lo,hi)}Interval.factory=Interval;Interval.prototype.singleton=function(v){return this.set(v,v)};Interval.prototype.bounded=function(lo,hi){return this.set(round.prev(lo),round.next(hi))};Interval.prototype.boundedSingleton=function(v){return this.bounded(v,v)};Interval.prototype.set=function(lo,hi){this.lo=lo;this.hi=hi;return this};Interval.prototype.assign=function(lo,hi){if(typeof lo!=="number"||typeof hi!=="number"){throw TypeError("Interval#assign: arguments must be numbers")}if(isNaN(lo)||isNaN(hi)||lo>hi){return this.setEmpty()}return this.set(lo,hi)};Interval.prototype.setEmpty=function(){return this.set(Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY)};Interval.prototype.setWhole=function(){return this.set(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)};Interval.prototype.open=function(lo,hi){return this.assign(round.safeNext(lo),round.safePrev(hi))};Interval.prototype.halfOpenLeft=function(lo,hi){return this.assign(round.safeNext(lo),hi)};Interval.prototype.halfOpenRight=function(lo,hi){return this.assign(lo,round.safePrev(hi))};Interval.prototype.toArray=function(){return[this.lo,this.hi]};Interval.prototype.clone=function(){return Interval().set(this.lo,this.hi)}},{"./operations/utils":49,"./round-math":51}],43:[function(require,module,exports){"use strict";var isSafeInteger=require("is-safe-integer");var Interval=require("../interval");var rmath=require("../round-math");var utils=require("./utils");var arithmetic=require("./arithmetic");var constants=require("../constants");var algebra={};algebra.fmod=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return constants.EMPTY}var yb=x.lo<0?y.lo:y.hi;var n=rmath.intLo(rmath.divLo(x.lo,yb));return arithmetic.sub(x,arithmetic.mul(y,Interval(n)))};algebra.multiplicativeInverse=function(x){if(utils.isEmpty(x)){return constants.EMPTY}if(utils.zeroIn(x)){if(x.lo!==0){if(x.hi!==0){return constants.WHOLE}else{return Interval(Number.NEGATIVE_INFINITY,rmath.divHi(1,x.lo))}}else{if(x.hi!==0){return Interval(rmath.divLo(1,x.hi),Number.POSITIVE_INFINITY)}else{return constants.EMPTY}}}else{return Interval(rmath.divLo(1,x.hi),rmath.divHi(1,x.lo))}};algebra.pow=function(x,power){if(utils.isEmpty(x)){return constants.EMPTY}if(typeof power==="object"){if(!utils.isSingleton(power)){return constants.EMPTY}power=power.lo}if(power===0){if(x.lo===0&&x.hi===0){return constants.EMPTY}else{return constants.ONE}}else if(power<0){return algebra.multiplicativeInverse(algebra.pow(x,-power))}if(isSafeInteger(power)){if(x.hi<0){var yl=rmath.powLo(-x.hi,power);var yh=rmath.powHi(-x.lo,power);if(power&1){return Interval(-yh,-yl)}else{return Interval(yl,yh)}}else if(x.lo<0){if(power&1){return Interval(-rmath.powLo(-x.lo,power),rmath.powHi(x.hi,power))}else{return Interval(0,rmath.powHi(Math.max(-x.lo,x.hi),power))}}else{return Interval(rmath.powLo(x.lo,power),rmath.powHi(x.hi,power))}}else{console.warn("power is not an integer, you should use nth-root instead, returning an empty interval");return constants.EMPTY}};algebra.sqrt=function(x){return algebra.nthRoot(x,2)};algebra.nthRoot=function(x,n){if(utils.isEmpty(x)||n<0){return constants.EMPTY}if(typeof n==="object"){if(!utils.isSingleton(n)){return constants.EMPTY}n=n.lo}var power=1/n;if(x.hi<0){if(isSafeInteger(n)&(n&1)){var yl=rmath.powHi(-x.lo,power);var yh=rmath.powLo(-x.hi,power);return Interval(-yl,-yh)}return Interval.EMPTY}else if(x.lo<0){var yp=rmath.powHi(x.hi,power);if(isSafeInteger(n)&(n&1)){var yn=-rmath.powHi(-x.lo,power);return Interval(yn,yp)}return Interval(0,yp)}else{return Interval(rmath.powLo(x.lo,power),rmath.powHi(x.hi,power))}};module.exports=algebra},{"../constants":41,"../interval":42,"../round-math":51,"./arithmetic":44,"./utils":49,"is-safe-integer":53}],44:[function(require,module,exports){"use strict";var Interval=require("../interval");var rmath=require("../round-math");var utils=require("./utils");var constants=require("../constants");var division=require("./division");var arithmetic={};arithmetic.add=function(x,y){return Interval(rmath.addLo(x.lo,y.lo),rmath.addHi(x.hi,y.hi))};arithmetic.subtract=function(x,y){return Interval(rmath.subLo(x.lo,y.hi),rmath.subHi(x.hi,y.lo))};arithmetic.sub=arithmetic.subtract;arithmetic.multiply=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return constants.EMPTY}var xl=x.lo;var xh=x.hi;var yl=y.lo;var yh=y.hi;var out=Interval();if(xl<0){if(xh>0){if(yl<0){if(yh>0){out.lo=Math.min(rmath.mulLo(xl,yh),rmath.mulLo(xh,yl));out.hi=Math.max(rmath.mulHi(xl,yl),rmath.mulHi(xh,yh))}else{out.lo=rmath.mulLo(xh,yl);out.hi=rmath.mulHi(xl,yl)}}else{if(yh>0){out.lo=rmath.mulLo(xl,yh);out.hi=rmath.mulHi(xh,yh)}else{out.lo=0;out.hi=0}}}else{if(yl<0){if(yh>0){out.lo=rmath.mulLo(xl,yh);out.hi=rmath.mulHi(xl,yl)}else{out.lo=rmath.mulLo(xh,yh);out.hi=rmath.mulHi(xl,yl)}}else{if(yh>0){out.lo=rmath.mulLo(xl,yh);out.hi=rmath.mulHi(xh,yl)}else{out.lo=0;out.hi=0}}}}else{if(xh>0){if(yl<0){if(yh>0){out.lo=rmath.mulLo(xh,yl);out.hi=rmath.mulHi(xh,yh)}else{out.lo=rmath.mulLo(xh,yl);out.hi=rmath.mulHi(xl,yh)}}else{if(yh>0){out.lo=rmath.mulLo(xl,yl);out.hi=rmath.mulHi(xh,yh)}else{out.lo=0;out.hi=0}}}else{out.lo=0;out.hi=0}}return out};arithmetic.mul=arithmetic.multiply;arithmetic.divide=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return constants.EMPTY}if(utils.zeroIn(y)){if(y.lo!==0){if(y.hi!==0){
+return division.zero(x)}else{return division.negative(x,y.lo)}}else{if(y.hi!==0){return division.positive(x,y.hi)}else{return constants.EMPTY}}}else{return division.nonZero(x,y)}};arithmetic.div=arithmetic.divide;arithmetic.positive=function(x){return Interval(x.lo,x.hi)};arithmetic.negative=function(x){return Interval(-x.hi,-x.lo)};module.exports=arithmetic},{"../constants":41,"../interval":42,"../round-math":51,"./division":45,"./utils":49}],45:[function(require,module,exports){"use strict";var Interval=require("../interval");var rmath=require("../round-math");var utils=require("./utils");var constants=require("../constants");var division={nonZero:function(x,y){var xl=x.lo;var xh=x.hi;var yl=y.lo;var yh=y.hi;var out=Interval();if(xh<0){if(yh<0){out.lo=rmath.divLo(xh,yl);out.hi=rmath.divHi(xl,yh)}else{out.lo=rmath.divLo(xl,yl);out.hi=rmath.divHi(xh,yh)}}else if(xl<0){if(yh<0){out.lo=rmath.divLo(xh,yh);out.hi=rmath.divHi(xl,yh)}else{out.lo=rmath.divLo(xl,yl);out.hi=rmath.divHi(xh,yl)}}else{if(yh<0){out.lo=rmath.divLo(xh,yh);out.hi=rmath.divHi(xl,yl)}else{out.lo=rmath.divLo(xl,yh);out.hi=rmath.divHi(xh,yl)}}return out},positive:function(x,v){if(x.lo===0&&x.hi===0){return x}if(utils.zeroIn(x)){return constants.WHOLE}if(x.hi<0){return Interval(Number.NEGATIVE_INFINITY,rmath.divHi(x.hi,v))}else{return Interval(rmath.divLo(x.lo,v),Number.POSITIVE_INFINITY)}},negative:function(x,v){if(x.lo===0&&x.hi===0){return x}if(utils.zeroIn(x)){return constants.WHOLE}if(x.hi<0){return Interval(rmath.divLo(x.hi,v),Number.POSITIVE_INFINITY)}else{return Interval(Number.NEGATIVE_INFINITY,rmath.divHi(x.lo,v))}},zero:function(x){if(x.lo===0&&x.hi===0){return x}return constants.WHOLE}};module.exports=division},{"../constants":41,"../interval":42,"../round-math":51,"./utils":49}],46:[function(require,module,exports){"use strict";var constants=require("../constants");var Interval=require("../interval");var rmath=require("../round-math");var utils=require("./utils");var arithmetic=require("./arithmetic");var misc={};misc.exp=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return Interval(rmath.expLo(x.lo),rmath.expHi(x.hi))};misc.log=function(x){if(utils.isEmpty(x)){return constants.EMPTY}var l=x.lo<=0?Number.NEGATIVE_INFINITY:rmath.logLo(x.lo);return Interval(l,rmath.logHi(x.hi))};misc.ln=misc.log;misc.LOG_EXP_10=misc.log(Interval(10,10));misc.log10=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return arithmetic.div(misc.log(x),misc.LOG_EXP_10)};misc.LOG_EXP_2=misc.log(Interval(2,2));misc.log2=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return arithmetic.div(misc.log(x),misc.LOG_EXP_2)};misc.hull=function(x,y){var badX=utils.isEmpty(x);var badY=utils.isEmpty(y);if(badX&&badY){return constants.EMPTY}else if(badX){return y.clone()}else if(badY){return x.clone()}else{return Interval(Math.min(x.lo,y.lo),Math.max(x.hi,y.hi))}};misc.intersection=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return constants.EMPTY}var lo=Math.max(x.lo,y.lo);var hi=Math.min(x.hi,y.hi);if(lo<=hi){return Interval(lo,hi)}return constants.EMPTY};misc.union=function(x,y){if(!utils.intervalsOverlap(x,y)){throw Error("Interval#union: intervals do not overlap")}return Interval(Math.min(x.lo,y.lo),Math.max(x.hi,y.hi))};misc.difference=function(x,y){if(utils.isEmpty(x)||utils.isWhole(y)){return constants.EMPTY}if(utils.intervalsOverlap(x,y)){if(x.lo<y.lo&&y.hi<x.hi){throw Error("Interval.difference: difference creates multiple intervals")}if(y.lo<=x.lo&&y.hi===Infinity||y.hi>=x.hi&&y.lo===-Infinity){return constants.EMPTY}if(y.lo<=x.lo){return Interval().halfOpenLeft(y.hi,x.hi)}return Interval().halfOpenRight(x.lo,y.lo)}return Interval.clone(x)};misc.width=function(x){if(utils.isEmpty(x)){return 0}return rmath.subHi(x.hi,x.lo)};misc.wid=misc.width;misc.abs=function(x){if(utils.isEmpty(x)){return constants.EMPTY}if(x.lo>=0){return Interval.clone(x)}if(x.hi<=0){return arithmetic.negative(x)}return Interval(0,Math.max(-x.lo,x.hi))};misc.max=function(x,y){var badX=utils.isEmpty(x);var badY=utils.isEmpty(y);if(badX&&badY){return constants.EMPTY}else if(badX){return y.clone()}else if(badY){return x.clone()}else{return Interval(Math.max(x.lo,y.lo),Math.max(x.hi,y.hi))}};misc.min=function(x,y){var badX=utils.isEmpty(x);var badY=utils.isEmpty(y);if(badX&&badY){return constants.EMPTY}else if(badX){return y.clone()}else if(badY){return x.clone()}else{return Interval(Math.min(x.lo,y.lo),Math.min(x.hi,y.hi))}};misc.clone=function(x){return Interval().set(x.lo,x.hi)};module.exports=misc},{"../constants":41,"../interval":42,"../round-math":51,"./arithmetic":44,"./utils":49}],47:[function(require,module,exports){"use strict";var utils=require("./utils");var relational={};relational.equal=function(x,y){if(utils.isEmpty(x)){return utils.isEmpty(y)}return!utils.isEmpty(y)&&x.lo===y.lo&&x.hi===y.hi};relational.almostEqual=function(x,y){var EPS=1e-7;function assert(a,message){if(!a){throw new Error(message||"assertion failed")}}function assertEps(a,b){assert(Math.abs(a-b)<EPS,"expected "+a+" to be close to "+b)}x=Array.isArray(x)?x:x.toArray();y=Array.isArray(y)?y:y.toArray();assertEps(x[0],y[0]);assertEps(x[1],y[1]);assert(x[0]<=x[1],"interval must not be empty")};relational.notEqual=function(x,y){if(utils.isEmpty(x)){return!utils.isEmpty(y)}return utils.isEmpty(y)||x.hi<y.lo||x.lo>y.hi};relational.lessThan=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return false}return x.hi<y.lo};relational.lt=relational.lessThan;relational.greaterThan=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return false}return x.lo>y.hi};relational.gt=relational.greaterThan;relational.lessEqualThan=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return false}return x.hi<=y.lo};relational.leq=relational.lessEqualThan;relational.greaterEqualThan=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return false}return x.lo>=y.hi};relational.geq=relational.greaterEqualThan;module.exports=relational},{"./utils":49}],48:[function(require,module,exports){"use strict";var constants=require("../constants");var Interval=require("../interval");var rmath=require("../round-math");var utils=require("./utils");var misc=require("./misc");var algebra=require("./algebra");var arithmetic=require("./arithmetic");var trigonometric={};function onlyInfinity(x){return!isFinite(x.lo)&&x.lo===x.hi}function handleNegative(interval){if(interval.lo<0){if(interval.lo===-Infinity){interval.lo=0;interval.hi=Infinity}else{var n=Math.ceil(-interval.lo/constants.PI_TWICE_LOW);interval.lo+=constants.PI_TWICE_LOW*n;interval.hi+=constants.PI_TWICE_LOW*n}}return interval}trigonometric.cos=function(x){var rlo,rhi;if(utils.isEmpty(x)||onlyInfinity(x)){return constants.EMPTY}var cache=Interval();cache.set(x.lo,x.hi);handleNegative(cache);var pi2=constants.PI_TWICE;var t=algebra.fmod(cache,pi2);if(misc.width(t)>=pi2.lo){return Interval(-1,1)}if(t.lo>=constants.PI_HIGH){var cos=trigonometric.cos(arithmetic.sub(t,constants.PI));return arithmetic.negative(cos)}var lo=t.lo;var hi=t.hi;rlo=rmath.cosLo(hi);rhi=rmath.cosHi(lo);if(hi<=constants.PI_LOW){return Interval(rlo,rhi)}else if(hi<=pi2.lo){return Interval(-1,Math.max(rlo,rhi))}else{return Interval(-1,1)}};trigonometric.sin=function(x){if(utils.isEmpty(x)||onlyInfinity(x)){return constants.EMPTY}return trigonometric.cos(arithmetic.sub(x,constants.PI_HALF))};trigonometric.tan=function(x){if(utils.isEmpty(x)||onlyInfinity(x)){return constants.EMPTY}var cache=Interval();cache.set(x.lo,x.hi);handleNegative(cache);var pi=constants.PI;var t=algebra.fmod(cache,pi);if(t.lo>=constants.PI_HALF_LOW){t=arithmetic.sub(t,pi)}if(t.lo<=-constants.PI_HALF_LOW||t.hi>=constants.PI_HALF_LOW){return constants.WHOLE}return Interval(rmath.tanLo(t.lo),rmath.tanHi(t.hi))};trigonometric.asin=function(x){if(utils.isEmpty(x)||x.hi<-1||x.lo>1){return constants.EMPTY}var lo=x.lo<=-1?-constants.PI_HALF_HIGH:rmath.asinLo(x.lo);var hi=x.hi>=1?constants.PI_HALF_HIGH:rmath.asinHi(x.hi);return Interval(lo,hi)};trigonometric.acos=function(x){if(utils.isEmpty(x)||x.hi<-1||x.lo>1){return constants.EMPTY}var lo=x.hi>=1?0:rmath.acosLo(x.hi);var hi=x.lo<=-1?constants.PI_HIGH:rmath.acosHi(x.lo);return Interval(lo,hi)};trigonometric.atan=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return Interval(rmath.atanLo(x.lo),rmath.atanHi(x.hi))};trigonometric.sinh=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return Interval(rmath.sinhLo(x.lo),rmath.sinhHi(x.hi))};trigonometric.cosh=function(x){if(utils.isEmpty(x)){return constants.EMPTY}if(x.hi<0){return Interval(rmath.coshLo(x.hi),rmath.coshHi(x.lo))}else if(x.lo>=0){return Interval(rmath.coshLo(x.lo),rmath.coshHi(x.hi))}else{return Interval(1,rmath.coshHi(-x.lo>x.hi?x.lo:x.hi))}};trigonometric.tanh=function(x){if(utils.isEmpty(x)){return constants.EMPTY}return Interval(rmath.tanhLo(x.lo),rmath.tanhHi(x.hi))};module.exports=trigonometric},{"../constants":41,"../interval":42,"../round-math":51,"./algebra":43,"./arithmetic":44,"./misc":46,"./utils":49}],49:[function(require,module,exports){"use strict";var utils={};utils.isInterval=function(x){return typeof x==="object"&&typeof x.lo==="number"&&typeof x.hi==="number"};utils.isEmpty=function(x){return x.lo>x.hi};utils.isWhole=function(x){return x.lo===-Infinity&&x.hi===Infinity};utils.isSingleton=function(x){return x.lo===x.hi};utils.zeroIn=function(x){return utils.hasValue(x,0)};utils.hasValue=function(a,value){if(utils.isEmpty(a)){return false}return a.lo<=value&&value<=a.hi};utils.hasInterval=function(x,y){if(utils.isEmpty(x)){return true}return!utils.isEmpty(y)&&y.lo<=x.lo&&x.hi<=y.hi};utils.intervalsOverlap=function(x,y){if(utils.isEmpty(x)||utils.isEmpty(y)){return false}return x.lo<=y.lo&&y.lo<=x.hi||y.lo<=x.lo&&x.lo<=y.hi};module.exports=utils},{}],50:[function(require,module,exports){"use strict";Math.sinh=Math.sinh||function(x){var y=Math.exp(x);return(y-1/y)/2};Math.cosh=Math.cosh||function(x){var y=Math.exp(x);return(y+1/y)/2};Math.tanh=Math.tanh||function(x){if(x===Number.POSITIVE_INFINITY){return 1}else if(x===Number.NEGATIVE_INFINITY){return-1}else{var y=Math.exp(2*x);return(y-1)/(y+1)}}},{}],51:[function(require,module,exports){"use strict";var nextafter=require("nextafter");function identity(v){return v}function prev(v){if(v===Infinity){return v}return nextafter(v,-Infinity)}function next(v){if(v===-Infinity){return v}return nextafter(v,Infinity)}var round={safePrev:prev,safeNext:next,prev:prev,next:next};round.addLo=function(x,y){return this.prev(x+y)};round.addHi=function(x,y){return this.next(x+y)};round.subLo=function(x,y){return this.prev(x-y)};round.subHi=function(x,y){return this.next(x-y)};round.mulLo=function(x,y){return this.prev(x*y)};round.mulHi=function(x,y){return this.next(x*y)};round.divLo=function(x,y){return this.prev(x/y)};round.divHi=function(x,y){return this.next(x/y)};function toInteger(x){return x<0?Math.ceil(x):Math.floor(x)}round.intLo=function(x){return toInteger(this.prev(x))};round.intHi=function(x){return toInteger(this.next(x))};round.logLo=function(x){return this.prev(Math.log(x))};round.logHi=function(x){return this.next(Math.log(x))};round.expLo=function(x){return this.prev(Math.exp(x))};round.expHi=function(x){return this.next(Math.exp(x))};round.sinLo=function(x){return this.prev(Math.sin(x))};round.sinHi=function(x){return this.next(Math.sin(x))};round.cosLo=function(x){return this.prev(Math.cos(x))};round.cosHi=function(x){return this.next(Math.cos(x))};round.tanLo=function(x){return this.prev(Math.tan(x))};round.tanHi=function(x){return this.next(Math.tan(x))};round.asinLo=function(x){return this.prev(Math.asin(x))};round.asinHi=function(x){return this.next(Math.asin(x))};round.acosLo=function(x){return this.prev(Math.acos(x))};round.acosHi=function(x){return this.next(Math.acos(x))};round.atanLo=function(x){return this.prev(Math.atan(x))};round.atanHi=function(x){return this.next(Math.atan(x))};round.sinhLo=function(x){return this.prev(Math.sinh(x))};round.sinhHi=function(x){return this.next(Math.sinh(x))};round.coshLo=function(x){return this.prev(Math.cosh(x))};round.coshHi=function(x){return this.next(Math.cosh(x))};round.tanhLo=function(x){return this.prev(Math.tanh(x))};round.tanhHi=function(x){return this.next(Math.tanh(x))};round.powLo=function(x,power){if(power%1!==0){return this.prev(Math.pow(x,power))}var y=power&1?x:1;power>>=1;while(power>0){x=round.mulLo(x,x);if(power&1){y=round.mulLo(x,y)}power>>=1}return y};round.powHi=function(x,power){if(power%1!==0){return this.next(Math.pow(x,power))}var y=power&1?x:1;power>>=1;while(power>0){x=round.mulHi(x,x);if(power&1){y=round.mulHi(x,y)}power>>=1}return y};round.sqrtLo=function(x){return this.prev(Math.sqrt(x))};round.sqrtHi=function(x){return this.next(Math.sqrt(x))};round.disable=function(){this.next=this.prev=identity};round.enable=function(){this.next=next;this.prev=prev};module.exports=round},{nextafter:88}],52:[function(require,module,exports){"use strict";module.exports=function isObject(x){return typeof x==="object"&&x!==null}},{}],53:[function(require,module,exports){"use strict";var MAX_SAFE_INTEGER=require("max-safe-integer");module.exports=Number.isSafeInteger||function(val){return typeof val==="number"&&val===val&&val!==Infinity&&val!==-Infinity&&parseInt(val,10)===val&&Math.abs(val)<=MAX_SAFE_INTEGER}},{"max-safe-integer":72}],54:[function(require,module,exports){(function(process){var keys=require("vkey");var list=Object.keys(keys);var down={};reset();module.exports=pressed;if(process.browser){window.addEventListener("keydown",keydown,false);window.addEventListener("keyup",keyup,false);window.addEventListener("blur",reset,false)}function pressed(key){return key?down[key]:down}function reset(){list.forEach(function(code){down[keys[code]]=false})}function keyup(e){down[keys[e.keyCode]]=false}function keydown(e){down[keys[e.keyCode]]=true}}).call(this,require("_process"))},{_process:89,vkey:90}],55:[function(require,module,exports){var Emitter=require("events").EventEmitter;var vkey=require("vkey");module.exports=function(keys,el){if(typeof keys==="string")keys=[keys];if(!el)el=window;var emitter=new Emitter;emitter.pressed={};el.addEventListener("blur",clearPressed);el.addEventListener("focus",clearPressed);el.addEventListener("keydown",function(ev){var key=vkey[ev.keyCode];emitter.pressed[key]=true;var allPressed=true;keys.forEach(function(k){if(!emitter.pressed[k])allPressed=false});if(allPressed){emitter.emit("pressed",emitter.pressed);clearPressed()}});el.addEventListener("keyup",function(ev){delete emitter.pressed[vkey[ev.keyCode]]});function clearPressed(){emitter.pressed={}}return emitter}},{events:31,vkey:90}],56:[function(require,module,exports){var integers=require("integers");module.exports=function linspace(a,b,n){var every=(b-a)/(n-1),ranged=integers(a,b,every);return ranged.length==n?ranged:ranged.concat(b)}},{integers:34}],57:[function(require,module,exports){"use strict";module.exports=Math.log10||function(x){return Math.log(x)*Math.LOG10E}},{}],58:[function(require,module,exports){var linspace=require("linspace");module.exports=function logspace(a,b,n){return linspace(a,b,n).map(function(x){return Math.pow(10,x)})}},{linspace:56}],59:[function(require,module,exports){"use strict";module.exports=require("./lib/CodeGenerator")},{"./lib/CodeGenerator":60}],60:[function(require,module,exports){"use strict";var Parser=require("mr-parser").Parser;var Interpreter=require("./Interpreter");var extend=require("extend");function CodeGenerator(options,defs){this.statements=[];this.defs=defs||{};this.interpreter=new Interpreter(this,options)}CodeGenerator.prototype.setDefs=function(defs){this.defs=extend(this.defs,defs);return this};CodeGenerator.prototype.compile=function(namespace){if(!namespace||!(typeof namespace==="object"||typeof namespace==="function")){throw TypeError("namespace must be an object")}if(typeof namespace.factory!=="function"){throw TypeError("namespace.factory must be a function")}this.defs.ns=namespace;this.defs.$$mathCodegen={getProperty:function(symbol,scope,ns){if(symbol in scope){return scope[symbol]}if(symbol in ns){return ns[symbol]}throw SyntaxError('symbol "'+symbol+'" is undefined')},functionProxy:function(fn,name){if(typeof fn!=="function"){throw SyntaxError('symbol "'+name+'" must be a function')}return fn}};this.defs.$$processScope=this.defs.$$processScope||function(){};var defsCode=Object.keys(this.defs).map(function(name){return"var "+name+' = defs["'+name+'"]'});if(!this.statements.length){throw Error("there are no statements saved in this generator, make sure you parse an expression before compiling it")}this.statements[this.statements.length-1]="return "+this.statements[this.statements.length-1];var code=this.statements.join(";");var factoryCode=defsCode.join("\n")+"\n"+["return {","  eval: function (scope) {","    scope = scope || {}","    $$processScope(scope)","    "+code,"  },","  code: '"+code+"'","}"].join("\n");var factory=new Function("defs",factoryCode);return factory(this.defs)};CodeGenerator.prototype.parse=function(code){var self=this;var program=(new Parser).parse(code);this.statements=program.blocks.map(function(statement){return self.interpreter.next(statement)});return this};module.exports=CodeGenerator},{"./Interpreter":61,extend:32,"mr-parser":73}],61:[function(require,module,exports){"use strict";var extend=require("extend");var types={ArrayNode:require("./node/ArrayNode"),AssignmentNode:require("./node/AssignmentNode"),ConditionalNode:require("./node/ConditionalNode"),ConstantNode:require("./node/ConstantNode"),FunctionNode:require("./node/FunctionNode"),OperatorNode:require("./node/OperatorNode"),SymbolNode:require("./node/SymbolNode"),UnaryNode:require("./node/UnaryNode")};var Interpreter=function(owner,options){this.owner=owner;this.options=extend({factory:"ns.factory",raw:false,rawArrayExpressionElements:true,rawCallExpressionElements:false},options)};extend(Interpreter.prototype,types);Interpreter.prototype.next=function(node){if(!(node.type in this)){throw new TypeError("the node type "+node.type+" is not implemented")}return this[node.type](node)};Interpreter.prototype.rawify=function(test,fn){var oldRaw=this.options.raw;if(test){this.options.raw=true}fn();if(test){this.options.raw=oldRaw}};module.exports=Interpreter},{"./node/ArrayNode":64,"./node/AssignmentNode":65,"./node/ConditionalNode":66,"./node/ConstantNode":67,"./node/FunctionNode":68,"./node/OperatorNode":69,"./node/SymbolNode":70,"./node/UnaryNode":71,extend:32}],62:[function(require,module,exports){"use strict";module.exports={"+":"add","-":"sub","*":"mul","/":"div","^":"pow","%":"mod","!":"factorial","|":"bitwiseOR","^|":"bitwiseXOR","&":"bitwiseAND","||":"logicalOR",xor:"logicalXOR","&&":"logicalAND","<":"lessThan",">":"greaterThan","<=":"lessEqualThan",">=":"greaterEqualThan","===":"strictlyEqual","==":"equal","!==":"strictlyNotEqual","!=":"notEqual",">>":"shiftRight","<<":"shiftLeft",">>>":"unsignedRightShift"}},{}],63:[function(require,module,exports){"use strict";module.exports={"+":"positive","-":"negative","~":"oneComplement"}},{}],64:[function(require,module,exports){"use strict";module.exports=function(node){var self=this;var arr=[];this.rawify(this.options.rawArrayExpressionElements,function(){arr=node.nodes.map(function(el){return self.next(el)})});var arrString="["+arr.join(",")+"]";if(this.options.raw){return arrString}return this.options.factory+"("+arrString+")"}},{}],65:[function(require,module,exports){"use strict";module.exports=function(node){return'scope["'+node.name+'"] = '+this.next(node.expr)}},{}],66:[function(require,module,exports){"use strict";module.exports=function(node){var condition="!!("+this.next(node.condition)+")";var trueExpr=this.next(node.trueExpr);var falseExpr=this.next(node.falseExpr);return"("+condition+" ? ("+trueExpr+") : ("+falseExpr+") )"}},{}],67:[function(require,module,exports){"use strict";module.exports=function(node){if(this.options.raw){return node.value}return this.options.factory+"("+node.value+")"}},{}],68:[function(require,module,exports){"use strict";var SymbolNode=require("mr-parser").nodeTypes.SymbolNode;var functionProxy=function(node){return"$$mathCodegen.functionProxy("+this.next(new SymbolNode(node.name))+', "'+node.name+'")'};module.exports=function(node){var self=this;var method=functionProxy.call(this,node);var args=[];this.rawify(this.options.rawCallExpressionElements,function(){args=node.args.map(function(arg){return self.next(arg)})});return method+"("+args.join(", ")+")"};module.exports.functionProxy=functionProxy},{"mr-parser":73}],69:[function(require,module,exports){"use strict";var Operators=require("../misc/Operators");module.exports=function(node){if(this.options.raw){return["("+this.next(node.args[0]),node.op,this.next(node.args[1])+")"].join(" ")}var namedOperator=Operators[node.op];if(!namedOperator){throw TypeError("unidentified operator")}return this.FunctionNode({name:namedOperator,args:node.args})}},{"../misc/Operators":62}],70:[function(require,module,exports){"use strict";module.exports=function(node){var id=node.name;return'$$mathCodegen.getProperty("'+id+'", scope, ns)'}},{}],71:[function(require,module,exports){"use strict";var UnaryOperators=require("../misc/UnaryOperators");module.exports=function(node){if(this.options.raw){return node.op+this.next(node.argument)}if(!(node.op in UnaryOperators)){throw new SyntaxError(node.op+" not implemented")}var namedOperator=UnaryOperators[node.op];return this.FunctionNode({name:namedOperator,args:[node.argument]})}},{"../misc/UnaryOperators":63}],72:[function(require,module,exports){"use strict";module.exports=9007199254740991},{}],73:[function(require,module,exports){"use strict";module.exports.Lexer=require("./lib/Lexer");module.exports.Parser=require("./lib/Parser");module.exports.nodeTypes=require("./lib/node/")},{"./lib/Lexer":74,"./lib/Parser":75,"./lib/node/":86}],74:[function(require,module,exports){var tokenType=require("./token-type");var ESCAPES={n:"\n",f:"\f",r:"\r",t:"	",v:"","'":"'",'"':'"'};var DELIMITERS={",":true,"(":true,")":true,"[":true,"]":true,";":true,"~":true,"!":true,"+":true,"-":true,"*":true,"/":true,"%":true,"^":true,"**":true,"|":true,"&":true,"^|":true,"=":true,":":true,"?":true,"||":true,"&&":true,xor:true,"==":true,"!=":true,"===":true,"!==":true,"<":true,">":true,">=":true,"<=":true,">>>":true,"<<":true,">>":true};function isDigit(c){return c>="0"&&c<="9"}function isIdentifier(c){return c>="a"&&c<="z"||c>="A"&&c<="Z"||c==="$"||c==="_"}function isWhitespace(c){return c===" "||c==="\r"||c==="	"||c==="\n"||c===""||c===" "}function isDelimiter(str){return DELIMITERS[str]}function isQuote(c){return c==="'"||c==='"'}function Lexer(){}Lexer.prototype.throwError=function(message,index){index=typeof index==="undefined"?this.index:index;var error=new Error(message+" at index "+index);error.index=index;error.description=message;throw error};Lexer.prototype.lex=function(text){this.text=text;this.index=0;this.tokens=[];while(this.index<this.text.length){while(isWhitespace(this.peek())){this.consume()}var c=this.peek();var c2=c+this.peek(1);var c3=c2+this.peek(2);if(isDelimiter(c3)){this.tokens.push({type:tokenType.DELIMITER,value:c3});this.consume();this.consume();this.consume()}else if(isDelimiter(c2)){this.tokens.push({type:tokenType.DELIMITER,value:c2});this.consume();this.consume()}else if(isDelimiter(c)){this.tokens.push({type:tokenType.DELIMITER,value:c});this.consume()}else if(isDigit(c)||c==="."&&isDigit(this.peek(1))){this.tokens.push({type:tokenType.NUMBER,value:this.readNumber()})}else if(isQuote(c)){this.tokens.push({type:tokenType.STRING,value:this.readString()})}else if(isIdentifier(c)){this.tokens.push({type:tokenType.SYMBOL,value:this.readIdentifier()})}else{this.throwError("unexpected character "+c)}}this.tokens.push({type:tokenType.EOF});return this.tokens};Lexer.prototype.peek=function(nth){nth=nth||0;if(this.index+nth>=this.text.length){return}return this.text.charAt(this.index+nth)};Lexer.prototype.consume=function(){var current=this.peek();this.index+=1;return current};Lexer.prototype.readNumber=function(){var number="";if(this.peek()==="."){number+=this.consume();if(!isDigit(this.peek())){this.throwError("number expected")}}else{while(isDigit(this.peek())){number+=this.consume()}if(this.peek()==="."){number+=this.consume()}}while(isDigit(this.peek())){number+=this.consume()}if(this.peek()==="e"||this.peek()==="E"){number+=this.consume();if(!(isDigit(this.peek())||this.peek()==="+"||this.peek()==="-")){this.throwError()}if(this.peek()==="+"||this.peek()==="-"){number+=this.consume()}if(!isDigit(this.peek())){this.throwError("number expected")}while(isDigit(this.peek())){number+=this.consume()}}return number};Lexer.prototype.readIdentifier=function(){var text="";while(isIdentifier(this.peek())||isDigit(this.peek())){text+=this.consume()}return text};Lexer.prototype.readString=function(){var quote=this.consume();var string="";var escape;while(true){var c=this.consume();if(!c){this.throwError("string is not closed")}if(escape){if(c==="u"){var hex=this.text.substring(this.index+1,this.index+5);if(!hex.match(/[\da-f]{4}/i)){this.throwError("invalid unicode escape")}this.index+=4;string+=String.fromCharCode(parseInt(hex,16))}else{var replacement=ESCAPES[c];if(replacement){string+=replacement}else{string+=c}}escape=false}else if(c===quote){break}else if(c==="\\"){escape=true}else{string+=c}}return string};module.exports=Lexer},{"./token-type":87}],75:[function(require,module,exports){var tokenType=require("./token-type");var Lexer=require("./Lexer");var ConstantNode=require("./node/ConstantNode");var OperatorNode=require("./node/OperatorNode");var UnaryNode=require("./node/UnaryNode");var SymbolNode=require("./node/SymbolNode");var FunctionNode=require("./node/FunctionNode");var ArrayNode=require("./node/ArrayNode");var ConditionalNode=require("./node/ConditionalNode");var AssignmentNode=require("./node/AssignmentNode");var BlockNode=require("./node/BlockNode");function Parser(){this.lexer=new Lexer;this.tokens=null}Parser.prototype.current=function(){return this.tokens[0]};Parser.prototype.next=function(){return this.tokens[1]};Parser.prototype.peek=function(){if(this.tokens.length){var first=this.tokens[0];for(var i=0;i<arguments.length;i+=1){if(first.value===arguments[i]){return true}}}};Parser.prototype.consume=function(e){return this.tokens.shift()};Parser.prototype.expect=function(e){if(!this.peek(e)){throw Error("expected "+e)}return this.consume()};Parser.prototype.isEOF=function(){return this.current().type===tokenType.EOF};Parser.prototype.parse=function(text){this.tokens=this.lexer.lex(text);return this.program()};Parser.prototype.program=function(){var blocks=[];while(!this.isEOF()){blocks.push(this.assignment());if(this.peek(";")){this.consume()}}this.end();return new BlockNode(blocks)};Parser.prototype.assignment=function(){var left=this.ternary();if(left instanceof SymbolNode&&this.peek("=")){this.consume();return new AssignmentNode(left.name,this.assignment())}return left};Parser.prototype.ternary=function(){var predicate=this.logicalOR();if(this.peek("?")){this.consume();var truthy=this.ternary();this.expect(":");var falsy=this.ternary();return new ConditionalNode(predicate,truthy,falsy)}return predicate};Parser.prototype.logicalOR=function(){var left=this.logicalXOR();if(this.peek("||")){var op=this.consume();var right=this.logicalOR();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.logicalXOR=function(){var left=this.logicalAND();if(this.current().value==="xor"){var op=this.consume();var right=this.logicalXOR();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.logicalAND=function(){var left=this.bitwiseOR();if(this.peek("&&")){var op=this.consume();var right=this.logicalAND();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.bitwiseOR=function(){var left=this.bitwiseXOR();if(this.peek("|")){var op=this.consume();var right=this.bitwiseOR();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.bitwiseXOR=function(){var left=this.bitwiseAND();if(this.peek("^|")){var op=this.consume();var right=this.bitwiseXOR();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.bitwiseAND=function(){var left=this.relational();if(this.peek("&")){var op=this.consume();var right=this.bitwiseAND();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.relational=function(){var left=this.shift();if(this.peek("==","===","!=","!==",">=","<=",">","<")){var op=this.consume();var right=this.shift();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.shift=function(){var left=this.additive();if(this.peek(">>","<<",">>>")){var op=this.consume();var right=this.shift();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.additive=function(){var left=this.multiplicative();while(this.peek("+","-")){var op=this.consume();left=new OperatorNode(op.value,[left,this.multiplicative()])}return left};Parser.prototype.multiplicative=function(){var op,right;var left=this.unary();while(this.peek("*","/","%")){op=this.consume();left=new OperatorNode(op.value,[left,this.unary()])}if(this.current().type===tokenType.SYMBOL||this.peek("(")||!(left.type instanceof ConstantNode)&&this.current().type===tokenType.NUMBER){right=this.multiplicative();return new OperatorNode("*",[left,right])}return left};Parser.prototype.unary=function(){if(this.peek("-","+","~")){var op=this.consume();var right=this.unary();return new UnaryNode(op.value,right)}return this.pow()};Parser.prototype.pow=function(){var left=this.factorial();if(this.peek("^","**")){var op=this.consume();var right=this.unary();return new OperatorNode(op.value,[left,right])}return left};Parser.prototype.factorial=function(){var left=this.symbol();if(this.peek("!")){var op=this.consume();return new OperatorNode(op.value,[left])}return left};Parser.prototype.symbol=function(){var current=this.current();if(current.type===tokenType.SYMBOL){var symbol=this.consume();var node=this.functionCall(symbol);return node}return this.string()};Parser.prototype.functionCall=function(symbolToken){var name=symbolToken.value;if(this.peek("(")){this.consume();var params=[];while(!this.peek(")")&&!this.isEOF()){params.push(this.assignment());if(this.peek(",")){this.consume()}}this.expect(")");return new FunctionNode(name,params)}return new SymbolNode(name)};Parser.prototype.string=function(){if(this.current().type===tokenType.STRING){return new ConstantNode(this.consume().value,"string")}return this.array()};Parser.prototype.array=function(){if(this.peek("[")){this.consume();var params=[];while(!this.peek("]")&&!this.isEOF()){params.push(this.assignment());if(this.peek(",")){this.consume()}}this.expect("]");return new ArrayNode(params)}return this.number()};Parser.prototype.number=function(){var token=this.current();if(token.type===tokenType.NUMBER){return new ConstantNode(this.consume().value,"number")}return this.parentheses()};Parser.prototype.parentheses=function(){var token=this.current();if(token.value==="("){this.consume();var left=this.assignment();this.expect(")");return left}return this.end()};Parser.prototype.end=function(){var token=this.current();if(token.type!==tokenType.EOF){throw Error("unexpected end of expression")}};module.exports=Parser},{"./Lexer":74,"./node/ArrayNode":76,"./node/AssignmentNode":77,"./node/BlockNode":78,"./node/ConditionalNode":79,"./node/ConstantNode":80,"./node/FunctionNode":81,"./node/OperatorNode":83,"./node/SymbolNode":84,"./node/UnaryNode":85,"./token-type":87}],76:[function(require,module,exports){var Node=require("./Node");function ArrayNode(nodes){this.nodes=nodes}ArrayNode.prototype=Object.create(Node.prototype);ArrayNode.prototype.type="ArrayNode";module.exports=ArrayNode},{"./Node":82}],77:[function(require,module,exports){var Node=require("./Node");function AssignmentNode(name,expr){this.name=name;
+this.expr=expr}AssignmentNode.prototype=Object.create(Node.prototype);AssignmentNode.prototype.type="AssignmentNode";module.exports=AssignmentNode},{"./Node":82}],78:[function(require,module,exports){var Node=require("./Node");function BlockNode(blocks){this.blocks=blocks}BlockNode.prototype=Object.create(Node.prototype);BlockNode.prototype.type="BlockNode";module.exports=BlockNode},{"./Node":82}],79:[function(require,module,exports){var Node=require("./Node");function ConditionalNode(predicate,truthy,falsy){this.condition=predicate;this.trueExpr=truthy;this.falseExpr=falsy}ConditionalNode.prototype=Object.create(Node.prototype);ConditionalNode.prototype.type="ConditionalNode";module.exports=ConditionalNode},{"./Node":82}],80:[function(require,module,exports){var Node=require("./Node");var SUPPORTED_TYPES={number:true,string:true,"boolean":true,undefined:true,"null":true};function ConstantNode(value,type){if(!SUPPORTED_TYPES[type]){throw Error("unsupported type '"+type+"'")}this.value=value;this.valueType=type}ConstantNode.prototype=Object.create(Node.prototype);ConstantNode.prototype.type="ConstantNode";module.exports=ConstantNode},{"./Node":82}],81:[function(require,module,exports){var Node=require("./Node");function FunctionNode(name,args){this.name=name;this.args=args}FunctionNode.prototype=Object.create(Node.prototype);FunctionNode.prototype.type="FunctionNode";module.exports=FunctionNode},{"./Node":82}],82:[function(require,module,exports){function Node(){}Node.prototype.type="Node";module.exports=Node},{}],83:[function(require,module,exports){var Node=require("./Node");function OperatorNode(op,args){this.op=op;this.args=args||[]}OperatorNode.prototype=Object.create(Node.prototype);OperatorNode.prototype.type="OperatorNode";module.exports=OperatorNode},{"./Node":82}],84:[function(require,module,exports){var Node=require("./Node");function SymbolNode(name){this.name=name}SymbolNode.prototype=Object.create(Node.prototype);SymbolNode.prototype.type="SymbolNode";module.exports=SymbolNode},{"./Node":82}],85:[function(require,module,exports){var Node=require("./Node");function UnaryNode(op,argument){this.op=op;this.argument=argument}UnaryNode.prototype=Object.create(Node.prototype);UnaryNode.prototype.type="UnaryNode";module.exports=UnaryNode},{"./Node":82}],86:[function(require,module,exports){module.exports={ArrayNode:require("./ArrayNode"),AssignmentNode:require("./AssignmentNode"),BlockNode:require("./BlockNode"),ConditionalNode:require("./ConditionalNode"),ConstantNode:require("./ConstantNode"),FunctionNode:require("./FunctionNode"),Node:require("./Node"),OperatorNode:require("./OperatorNode"),SymbolNode:require("./SymbolNode"),UnaryNode:require("./UnaryNode")}},{"./ArrayNode":76,"./AssignmentNode":77,"./BlockNode":78,"./ConditionalNode":79,"./ConstantNode":80,"./FunctionNode":81,"./Node":82,"./OperatorNode":83,"./SymbolNode":84,"./UnaryNode":85}],87:[function(require,module,exports){module.exports={EOF:0,DELIMITER:1,NUMBER:2,STRING:3,SYMBOL:4}},{}],88:[function(require,module,exports){"use strict";var doubleBits=require("double-bits");var SMALLEST_DENORM=Math.pow(2,-1074);var UINT_MAX=-1>>>0;module.exports=nextafter;function nextafter(x,y){if(isNaN(x)||isNaN(y)){return NaN}if(x===y){return x}if(x===0){if(y<0){return-SMALLEST_DENORM}else{return SMALLEST_DENORM}}var hi=doubleBits.hi(x);var lo=doubleBits.lo(x);if(y>x===x>0){if(lo===UINT_MAX){hi+=1;lo=0}else{lo+=1}}else{if(lo===0){lo=UINT_MAX;hi-=1}else{lo-=1}}return doubleBits.pack(lo,hi)}},{"double-bits":30}],89:[function(require,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==="function"){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex<len){if(currentQueue){currentQueue[queueIndex].run()}}queueIndex=-1;len=queue.length}currentQueue=null;draining=false;runClearTimeout(timeout)}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1){for(var i=1;i<arguments.length;i++){args[i-1]=arguments[i]}}queue.push(new Item(fun,args));if(queue.length===1&&!draining){runTimeout(drainQueue)}};function Item(fun,array){this.fun=fun;this.array=array}Item.prototype.run=function(){this.fun.apply(null,this.array)};process.title="browser";process.browser=true;process.env={};process.argv=[];process.version="";process.versions={};function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")};process.umask=function(){return 0}},{}],90:[function(require,module,exports){var ua=typeof window!=="undefined"?window.navigator.userAgent:"",isOSX=/OS X/.test(ua),isOpera=/Opera/.test(ua),maybeFirefox=!/like Gecko/.test(ua)&&!isOpera;var i,output=module.exports={0:isOSX?"<menu>":"<UNK>",1:"<mouse 1>",2:"<mouse 2>",3:"<break>",4:"<mouse 3>",5:"<mouse 4>",6:"<mouse 5>",8:"<backspace>",9:"<tab>",12:"<clear>",13:"<enter>",16:"<shift>",17:"<control>",18:"<alt>",19:"<pause>",20:"<caps-lock>",21:"<ime-hangul>",23:"<ime-junja>",24:"<ime-final>",25:"<ime-kanji>",27:"<escape>",28:"<ime-convert>",29:"<ime-nonconvert>",30:"<ime-accept>",31:"<ime-mode-change>",27:"<escape>",32:"<space>",33:"<page-up>",34:"<page-down>",35:"<end>",36:"<home>",37:"<left>",38:"<up>",39:"<right>",40:"<down>",41:"<select>",42:"<print>",43:"<execute>",44:"<snapshot>",45:"<insert>",46:"<delete>",47:"<help>",91:"<meta>",92:"<meta>",93:isOSX?"<meta>":"<menu>",95:"<sleep>",106:"<num-*>",107:"<num-+>",108:"<num-enter>",109:"<num-->",110:"<num-.>",111:"<num-/>",144:"<num-lock>",145:"<scroll-lock>",160:"<shift-left>",161:"<shift-right>",162:"<control-left>",163:"<control-right>",164:"<alt-left>",165:"<alt-right>",166:"<browser-back>",167:"<browser-forward>",168:"<browser-refresh>",169:"<browser-stop>",170:"<browser-search>",171:"<browser-favorites>",172:"<browser-home>",173:isOSX&&maybeFirefox?"-":"<volume-mute>",174:"<volume-down>",175:"<volume-up>",176:"<next-track>",177:"<prev-track>",178:"<stop>",179:"<play-pause>",180:"<launch-mail>",181:"<launch-media-select>",182:"<launch-app 1>",183:"<launch-app 2>",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",223:"<meta>",224:"<meta>",226:"<alt-gr>",229:"<ime-process>",231:isOpera?"`":"<unicode>",246:"<attention>",247:"<crsel>",248:"<exsel>",249:"<erase-eof>",250:"<play>",251:"<zoom>",252:"<no-name>",253:"<pa-1>",254:"<clear>"};for(i=58;i<65;++i){output[i]=String.fromCharCode(i)}for(i=48;i<58;++i){output[i]=i-48+""}for(i=65;i<91;++i){output[i]=String.fromCharCode(i)}for(i=96;i<106;++i){output[i]="<num-"+(i-96)+">"}for(i=112;i<136;++i){output[i]="F"+(i-111)}},{}],91:[function(require,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target}},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/acceptDeleteIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/acceptDeleteIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..02a062852c2a8ea7610b64f5d6f79ce4953c3b42
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/acceptDeleteIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/addNodeIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/addNodeIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..6fa30613f9b3d97508534c69421eca60f1126746
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/addNodeIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/backIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/backIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2f99126e56a79d210027eafacd5b10e0d123d6f
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/backIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/connectIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/connectIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..4164da1f7a14d4c5e141e763d6cd17ec786ab210
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/connectIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross.png
new file mode 100644
index 0000000000000000000000000000000000000000..9cbd189ab6ae99ed5794c30a12ddc0480987f29f
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross2.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fc4b95c3eef8c283fbf63a75fd1d6003ff7ccc4
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/cross2.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/deleteIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/deleteIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..540256479106ed2f9263ec5df22fd7f0c75231e4
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/deleteIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/downArrow.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/downArrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..e77d5e6d4157b12a5b2fa08a9fc138f0ab9eb4e7
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/downArrow.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/editIcon.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/editIcon.png
new file mode 100644
index 0000000000000000000000000000000000000000..494d0f00c0717e7a970848fc0cb518e9e620077a
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/editIcon.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/leftArrow.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/leftArrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..3823536e38ef1cd96582a6072b70cc514ac27d05
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/leftArrow.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/minus.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..30698076b9ac59f0880752ddc13af3f6bf062403
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/minus.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/plus.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7ab2a334e566b6deb9657d7d8370f591bfb81bc
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/plus.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/rightArrow.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/rightArrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3a209d8b0a58355305aae03b5520a1e070d8eab
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/rightArrow.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/upArrow.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/upArrow.png
new file mode 100644
index 0000000000000000000000000000000000000000..8aedced7fd2f21fb240c26f5038ee15e10115c4f
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/upArrow.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/img/network/zoomExtends.png b/01_Code/physical_computing_interface/lib/vis/dist/img/network/zoomExtends.png
new file mode 100644
index 0000000000000000000000000000000000000000..74595c6358448fbdcfbd62629084841ca7e8b8a9
Binary files /dev/null and b/01_Code/physical_computing_interface/lib/vis/dist/img/network/zoomExtends.png differ
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis-graph3d.min.js b/01_Code/physical_computing_interface/lib/vis/dist/vis-graph3d.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c9bec8baa08489db0530ed5555685e46cc771d0
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis-graph3d.min.js
@@ -0,0 +1,30 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=56)}([function(t,e){var n=t.exports={version:"2.5.1"};"number"==typeof __e&&(__e=n)},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var i=n(28)("wks"),r=n(17),o=n(1).Symbol,s="function"==typeof o;(t.exports=function(t){return i[t]||(i[t]=s&&o[t]||(s?o:r)("Symbol."+t))}).store=i},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e,n,i){var r=!1;!0===i&&(r=null===e[n]&&void 0!==t[n]),r?delete t[n]:t[n]=e[n]}var o=n(57),s=i(o),a=n(75),u=i(a),h=n(18),l=i(h),c=n(19),d=i(c),f=n(46),p=n(97);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,n,i){if(e==t)return.5;var r=1/(e-t);return Math.max(0,(i-t)*r)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(m.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return p.v4()},e.assignAllKeys=function(t,e){for(var n in t)t.hasOwnProperty(n)&&"object"!==(0,d.default)(t[n])&&(t[n]=e)},e.fillIfDefined=function(t,n){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var o in t)void 0!==n[o]&&(null===n[o]||"object"!==(0,d.default)(n[o])?r(t,n,o,i):"object"===(0,d.default)(t[o])&&e.fillIfDefined(t[o],n[o],i))},e.extend=function(t,e){for(var n=1;n<arguments.length;n++){var i=arguments[n];for(var r in i)i.hasOwnProperty(r)&&(t[r]=i[r])}return t},e.selectiveExtend=function(t,e,n){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var i=2;i<arguments.length;i++)for(var r=arguments[i],o=0;o<t.length;o++){var s=t[o];r&&r.hasOwnProperty(s)&&(e[s]=r[s])}return e},e.selectiveDeepExtend=function(t,n,i){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var s=0;s<t.length;s++){var a=t[s];if(i.hasOwnProperty(a))if(i[a]&&i[a].constructor===Object)void 0===n[a]&&(n[a]={}),n[a].constructor===Object?e.deepExtend(n[a],i[a],!1,o):r(n,i,a,o);else{if(Array.isArray(i[a]))throw new TypeError("Arrays are not supported by deepExtend");r(n,i,a,o)}}return n},e.selectiveNotDeepExtend=function(t,n,i){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(i))throw new TypeError("Arrays are not supported by deepExtend");for(var s in i)if(i.hasOwnProperty(s)&&-1===t.indexOf(s))if(i[s]&&i[s].constructor===Object)void 0===n[s]&&(n[s]={}),n[s].constructor===Object?e.deepExtend(n[s],i[s]):r(n,i,s,o);else if(Array.isArray(i[s])){n[s]=[];for(var a=0;a<i[s].length;a++)n[s].push(i[s][a])}else r(n,i,s,o);return n},e.deepExtend=function(t,n){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var s in n)if(n.hasOwnProperty(s)||!0===i)if(n[s]&&n[s].constructor===Object)void 0===t[s]&&(t[s]={}),t[s].constructor===Object?e.deepExtend(t[s],n[s],i):r(t,n,s,o);else if(Array.isArray(n[s])){t[s]=[];for(var a=0;a<n[s].length;a++)t[s].push(n[s][a])}else r(t,n,s,o);return t},e.equalArray=function(t,e){if(t.length!=e.length)return!1;for(var n=0,i=t.length;n<i;n++)if(t[n]!=e[n])return!1;return!0},e.convert=function(t,n){var i;if(void 0!==t){if(null===t)return null;if(!n)return t;if("string"!=typeof n&&!(n instanceof String))throw new Error("Type must be a string");switch(n){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return e.isString(t)&&!isNaN(Date.parse(t))?f(t).valueOf():Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(f.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return i=m.exec(t),i?new Date(Number(i[1])):f(new Date(t)).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return f(t);if(t instanceof Date)return f(t.valueOf());if(f.isMoment(t))return f(t);if(e.isString(t))return i=m.exec(t),f(i?Number(i[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(f.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return i=m.exec(t),i?new Date(Number(i[1])).toISOString():f(t).format();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){i=m.exec(t);return"/Date("+(i?new Date(Number(i[1])).valueOf():new Date(t).valueOf())+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+n+'"')}}};var m=/^\/?Date\((\-?\d+)/i;e.getType=function(t){var e=void 0===t?"undefined":(0,d.default)(t);return"object"==e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var n=[],i=0;i<t.length;i++)n.push(t[i]);return n.push(e),n},e.copyArray=function(t){for(var e=[],n=0;n<t.length;n++)e.push(t[n]);return e},e.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left},e.getAbsoluteRight=function(t){return t.getBoundingClientRect().right},e.getAbsoluteTop=function(t){return t.getBoundingClientRect().top},e.addClassName=function(t,e){var n=t.className.split(" "),i=e.split(" ");n=n.concat(i.filter(function(t){return n.indexOf(t)<0})),t.className=n.join(" ")},e.removeClassName=function(t,e){var n=t.className.split(" "),i=e.split(" ");n=n.filter(function(t){return i.indexOf(t)<0}),t.className=n.join(" ")},e.forEach=function(t,e){var n,i;if(Array.isArray(t))for(n=0,i=t.length;n<i;n++)e(t[n],n,t);else for(n in t)t.hasOwnProperty(n)&&e(t[n],n,t)},e.toArray=function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e},e.updateProperty=function(t,e,n){return t[e]!==n&&(t[e]=n,!0)},e.throttle=function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame(function(){e=!1,t()}))}},e.addEventListener=function(t,e,n,i){t.addEventListener?(void 0===i&&(i=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,n,i)):t.attachEvent("on"+e,n)},e.removeEventListener=function(t,e,n,i){t.removeEventListener?(void 0===i&&(i=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,n,i)):t.detachEvent("on"+e,n)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,n){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":n||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,n,i){return e+e+n+n+i+i});var n=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return n?{r:parseInt(n[1],16),g:parseInt(n[2],16),b:parseInt(n[3],16)}:null},e.overrideOpacity=function(t,n){var i;return-1!=t.indexOf("rgba")?t:-1!=t.indexOf("rgb")?(i=t.substr(t.indexOf("(")+1).replace(")","").split(","),"rgba("+i[0]+","+i[1]+","+i[2]+","+n+")"):(i=e.hexToRGB(t),null==i?t:"rgba("+i.r+","+i.g+","+i.b+","+n+")")},e.RGBToHex=function(t,e,n){return"#"+((1<<24)+(t<<16)+(e<<8)+n).toString(16).slice(1)},e.parseColor=function(t){var n;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var i=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(i[0],i[1],i[2])}if(!0===e.isValidHex(t)){var r=e.hexToHSV(t),o={h:r.h,s:.8*r.s,v:Math.min(1,1.02*r.v)},s={h:r.h,s:Math.min(1,1.25*r.s),v:.8*r.v},a=e.HSVToHex(s.h,s.s,s.v),u=e.HSVToHex(o.h,o.s,o.v);n={background:t,border:a,highlight:{background:u,border:a},hover:{background:u,border:a}}}else n={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else n={},n.background=t.background||void 0,n.border=t.border||void 0,e.isString(t.highlight)?n.highlight={border:t.highlight,background:t.highlight}:(n.highlight={},n.highlight.background=t.highlight&&t.highlight.background||void 0,n.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?n.hover={border:t.hover,background:t.hover}:(n.hover={},n.hover.background=t.hover&&t.hover.background||void 0,n.hover.border=t.hover&&t.hover.border||void 0);return n},e.RGBToHSV=function(t,e,n){t/=255,e/=255,n/=255;var i=Math.min(t,Math.min(e,n)),r=Math.max(t,Math.max(e,n));if(i==r)return{h:0,s:0,v:i};var o=t==i?e-n:n==i?t-e:n-t;return{h:60*((t==i?3:n==i?1:5)-o/(r-i))/360,s:(r-i)/r,v:r}};var v={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var n=t.split(":"),i=n[0].trim(),r=n[1].trim();e[i]=r}}),e},join:function(t){return(0,l.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,n){var i=v.split(t.style.cssText),r=v.split(n),o=e.extend(i,r);t.style.cssText=v.join(o)},e.removeCssText=function(t,e){var n=v.split(t.style.cssText),i=v.split(e);for(var r in i)i.hasOwnProperty(r)&&delete n[r];t.style.cssText=v.join(n)},e.HSVToRGB=function(t,e,n){var i,r,o,s=Math.floor(6*t),a=6*t-s,u=n*(1-e),h=n*(1-a*e),l=n*(1-(1-a)*e);switch(s%6){case 0:i=n,r=l,o=u;break;case 1:i=h,r=n,o=u;break;case 2:i=u,r=n,o=l;break;case 3:i=u,r=h,o=n;break;case 4:i=l,r=u,o=n;break;case 5:i=n,r=u,o=h}return{r:Math.floor(255*i),g:Math.floor(255*r),b:Math.floor(255*o)}},e.HSVToHex=function(t,n,i){var r=e.HSVToRGB(t,n,i);return e.RGBToHex(r.r,r.g,r.b)},e.hexToHSV=function(t){var n=e.hexToRGB(t);return e.RGBToHSV(n.r,n.g,n.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,n){if(null!==n&&"object"===(void 0===n?"undefined":(0,d.default)(n))){for(var i=(0,u.default)(n),r=0;r<t.length;r++)n.hasOwnProperty(t[r])&&"object"==(0,d.default)(n[t[r]])&&(i[t[r]]=e.bridgeObject(n[t[r]]));return i}return null},e.bridgeObject=function(t){if(null!==t&&"object"===(void 0===t?"undefined":(0,d.default)(t))){var n=(0,u.default)(t);if(t instanceof Element)n=t;else{n=(0,u.default)(t);for(var i in t)t.hasOwnProperty(i)&&"object"==(0,d.default)(t[i])&&(n[i]=e.bridgeObject(t[i]))}return n}return null},e.insertSort=function(t,e){for(var n=0;n<t.length;n++){for(var i=t[n],r=n;r>0&&e(i,t[r-1])<0;r--)t[r]=t[r-1];t[r]=i}return t},e.mergeOptions=function(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=function(t){return null!==t&&void 0!==t},o=function(t){return null!==t&&"object"===(void 0===t?"undefined":(0,d.default)(t))};if(!o(t))throw new Error("Parameter mergeTarget must be an object");if(!o(e))throw new Error("Parameter options must be an object");if(!r(n))throw new Error("Parameter option must have a value");if(!o(i))throw new Error("Parameter globalOptions must be an object");var s=e[n],a=o(i)&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(i),h=a?i[n]:void 0,l=h?h.enabled:void 0;if(void 0!==s){if("boolean"==typeof s)return o(t[n])||(t[n]={}),void(t[n].enabled=s);if(null===s&&!o(t[n])){if(!r(h))return;t[n]=(0,u.default)(h)}if(o(s)){var c=!0;void 0!==s.enabled?c=s.enabled:void 0!==l&&(c=h.enabled),function(t,e,n){o(t[n])||(t[n]={});var i=e[n],r=t[n];for(var s in i)i.hasOwnProperty(s)&&(r[s]=i[s])}(t,e,n),t[n].enabled=c}}},e.binarySearchCustom=function(t,e,n,i){for(var r=0,o=0,s=t.length-1;o<=s&&r<1e4;){var a=Math.floor((o+s)/2),u=t[a],h=void 0===i?u[n]:u[n][i],l=e(h);if(0==l)return a;-1==l?o=a+1:s=a-1,r++}return-1},e.binarySearchValue=function(t,e,n,i,r){var o,s,a,u,h=0,l=0,c=t.length-1;for(r=void 0!=r?r:function(t,e){return t==e?0:t<e?-1:1};l<=c&&h<1e4;){if(u=Math.floor(.5*(c+l)),o=t[Math.max(0,u-1)][n],s=t[u][n],a=t[Math.min(t.length-1,u+1)][n],0==r(s,e))return u;if(r(o,e)<0&&r(s,e)>0)return"before"==i?Math.max(0,u-1):u;if(r(s,e)<0&&r(a,e)>0)return"before"==i?u:Math.min(t.length-1,u+1);r(s,e)<0?l=u+1:c=u-1,h++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var n=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;return n==i&&(i=e.clientWidth),document.body.removeChild(e),n-i},e.topMost=function(t,e){var n=void 0;Array.isArray(e)||(e=[e]);var i=!0,r=!1,o=void 0;try{for(var a,u=(0,s.default)(t);!(i=(a=u.next()).done);i=!0){var h=a.value;if(h){n=h[e[0]];for(var l=1;l<e.length;l++)n&&(n=n[e[l]]);if(void 0!==n)break}}}catch(t){r=!0,o=t}finally{try{!i&&u.return&&u.return()}finally{if(r)throw o}}return n}},function(t,e,n){var i=n(1),r=n(0),o=n(62),s=n(9),a=function(t,e,n){var u,h,l,c=t&a.F,d=t&a.G,f=t&a.S,p=t&a.P,m=t&a.B,v=t&a.W,y=d?r:r[e]||(r[e]={}),g=y.prototype,_=d?i:f?i[e]:(i[e]||{}).prototype;d&&(n=e);for(u in n)(h=!c&&_&&void 0!==_[u])&&u in y||(l=h?_[u]:n[u],y[u]=d&&"function"!=typeof _[u]?n[u]:m&&h?o(l,i):v&&_[u]==l?function(t){var e=function(e,n,i){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,i)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):p&&"function"==typeof l?o(Function.call,l):l,p&&((y.virtual||(y.virtual={}))[u]=l,t&a.R&&g&&!g[u]&&s(g,u,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e,n){var i=n(11),r=n(40),o=n(24),s=Object.defineProperty;e.f=n(6)?Object.defineProperty:function(t,e,n){if(i(t),e=o(e,!0),i(n),r)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){t.exports=!n(10)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var i=n(38),r=n(22);t.exports=function(t){return i(r(t))}},function(t,e,n){var i=n(5),r=n(16);t.exports=n(6)?function(t,e,n){return i.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var i=n(15);t.exports=function(t){if(!i(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){var i=n(43),r=n(29);t.exports=Object.keys||function(t){return i(t,r)}},function(t,e,n){function i(t,e,n){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==n?n:0}i.subtract=function(t,e){var n=new i;return n.x=t.x-e.x,n.y=t.y-e.y,n.z=t.z-e.z,n},i.add=function(t,e){var n=new i;return n.x=t.x+e.x,n.y=t.y+e.y,n.z=t.z+e.z,n},i.avg=function(t,e){return new i((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},i.crossProduct=function(t,e){var n=new i;return n.x=t.y*e.z-t.z*e.y,n.y=t.z*e.x-t.x*e.z,n.z=t.x*e.y-t.y*e.x,n},i.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=i},function(t,e){t.exports={}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,i=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+i).toString(36))}},function(t,e,n){t.exports={default:n(78),__esModule:!0}},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var r=n(81),o=i(r),s=n(83),a=i(s),u="function"==typeof a.default&&"symbol"==typeof o.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===u(o.default)?function(t){return void 0===t?"undefined":u(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":void 0===t?"undefined":u(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,e){t.exports=!0},function(t,e,n){var i=n(15);t.exports=function(t,e){if(!i(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!i(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!i(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var i=n(11),r=n(65),o=n(29),s=n(27)("IE_PROTO"),a=function(){},u=function(){var t,e=n(41)("iframe"),i=o.length;for(e.style.display="none",n(69).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),u=t.F;i--;)delete u.prototype[o[i]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(a.prototype=i(t),n=new a,a.prototype=null,n[s]=t):n=u(),void 0===e?n:r(n,e)}},function(t,e){var n=Math.ceil,i=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?i:n)(t)}},function(t,e,n){var i=n(28)("keys"),r=n(17);t.exports=function(t){return i[t]||(i[t]=r(t))}},function(t,e,n){var i=n(1),r=i["__core-js_shared__"]||(i["__core-js_shared__"]={});t.exports=function(t){return r[t]||(r[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var i=n(5).f,r=n(7),o=n(2)("toStringTag");t.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,o)&&i(t,o,{configurable:!0,value:e})}},function(t,e,n){var i=n(22);t.exports=function(t){return Object(i(t))}},function(t,e,n){e.f=n(2)},function(t,e,n){var i=n(1),r=n(0),o=n(23),s=n(32),a=n(5).f;t.exports=function(t){var e=r.Symbol||(r.Symbol=o?{}:i.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}function r(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var n=(0,l.default)(this._options.type),i=0,r=n.length;i<r;i++){var o=n[i],s=this._options.type[o];this._type[o]="Date"==s||"ISODate"==s||"ASPDate"==s?"Date":s}this._subscribers={},t&&this.add(t),this.setOptions(e)}var o=n(47),s=i(o),a=n(19),u=i(a),h=n(18),l=i(h),c=n(3),d=n(48);r.prototype.setOptions=function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=d.extend(this,{replace:["add","update","remove"]})),"object"===(0,u.default)(t.queue)&&this._queue.setOptions(t.queue)))},r.prototype.on=function(t,e){var n=this._subscribers[t];n||(n=[],this._subscribers[t]=n),n.push({callback:e})},r.prototype.off=function(t,e){var n=this._subscribers[t];n&&(this._subscribers[t]=n.filter(function(t){return t.callback!=e}))},r.prototype._trigger=function(t,e,n){if("*"==t)throw new Error("Cannot trigger event *");var i=[];t in this._subscribers&&(i=i.concat(this._subscribers[t])),"*"in this._subscribers&&(i=i.concat(this._subscribers["*"]));for(var r=0,o=i.length;r<o;r++){var s=i[r];s.callback&&s.callback(t,e,n||null)}},r.prototype.add=function(t,e){var n,i=[],r=this;if(Array.isArray(t))for(var o=0,s=t.length;o<s;o++)n=r._addItem(t[o]),i.push(n);else{if(!t||"object"!==(void 0===t?"undefined":(0,u.default)(t)))throw new Error("Unknown dataType");n=r._addItem(t),i.push(n)}return i.length&&this._trigger("add",{items:i},e),i},r.prototype.update=function(t,e){var n=[],i=[],r=[],o=[],s=this,a=s._fieldId,h=function(t){var e=t[a];if(s._data[e]){var u=c.extend({},s._data[e]);e=s._updateItem(t),i.push(e),o.push(t),r.push(u)}else e=s._addItem(t),n.push(e)};if(Array.isArray(t))for(var l=0,d=t.length;l<d;l++)t[l]&&"object"===(0,u.default)(t[l])?h(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!t||"object"!==(void 0===t?"undefined":(0,u.default)(t)))throw new Error("Unknown dataType");h(t)}if(n.length&&this._trigger("add",{items:n},e),i.length){var f={items:i,oldData:r,data:o};this._trigger("update",f,e)}return n.concat(i)},r.prototype.get=function(t){var e,n,i,r=this,o=c.getType(arguments[0]);"String"==o||"Number"==o?(e=arguments[0],i=arguments[1]):"Array"==o?(n=arguments[0],i=arguments[1]):i=arguments[0];var s;if(i&&i.returnType){s=-1==["Array","Object"].indexOf(i.returnType)?"Array":i.returnType}else s="Array";var a,u,h,d,f,p=i&&i.type||this._options.type,m=i&&i.filter,v=[];if(void 0!=e)(a=r._getItem(e,p))&&m&&!m(a)&&(a=null);else if(void 0!=n)for(d=0,f=n.length;d<f;d++)a=r._getItem(n[d],p),m&&!m(a)||v.push(a);else for(u=(0,l.default)(this._data),d=0,f=u.length;d<f;d++)h=u[d],a=r._getItem(h,p),m&&!m(a)||v.push(a);if(i&&i.order&&void 0==e&&this._sort(v,i.order),i&&i.fields){var y=i.fields;if(void 0!=e)a=this._filterFields(a,y);else for(d=0,f=v.length;d<f;d++)v[d]=this._filterFields(v[d],y)}if("Object"==s){var g,_={};for(d=0,f=v.length;d<f;d++)g=v[d],_[g.id]=g;return _}return void 0!=e?a:v},r.prototype.getIds=function(t){var e,n,i,r,o,s=this._data,a=t&&t.filter,u=t&&t.order,h=t&&t.type||this._options.type,c=(0,l.default)(s),d=[];if(a)if(u){for(o=[],e=0,n=c.length;e<n;e++)i=c[e],r=this._getItem(i,h),a(r)&&o.push(r);for(this._sort(o,u),e=0,n=o.length;e<n;e++)d.push(o[e][this._fieldId])}else for(e=0,n=c.length;e<n;e++)i=c[e],r=this._getItem(i,h),a(r)&&d.push(r[this._fieldId]);else if(u){for(o=[],e=0,n=c.length;e<n;e++)i=c[e],o.push(s[i]);for(this._sort(o,u),e=0,n=o.length;e<n;e++)d.push(o[e][this._fieldId])}else for(e=0,n=c.length;e<n;e++)i=c[e],r=s[i],d.push(r[this._fieldId]);return d},r.prototype.getDataSet=function(){return this},r.prototype.forEach=function(t,e){var n,i,r,o,s=e&&e.filter,a=e&&e.type||this._options.type,u=this._data,h=(0,l.default)(u);if(e&&e.order){var c=this.get(e);for(n=0,i=c.length;n<i;n++)r=c[n],o=r[this._fieldId],t(r,o)}else for(n=0,i=h.length;n<i;n++)o=h[n],r=this._getItem(o,a),s&&!s(r)||t(r,o)},r.prototype.map=function(t,e){var n,i,r,o,s=e&&e.filter,a=e&&e.type||this._options.type,u=[],h=this._data,c=(0,l.default)(h);for(n=0,i=c.length;n<i;n++)r=c[n],o=this._getItem(r,a),s&&!s(o)||u.push(t(o,r));return e&&e.order&&this._sort(u,e.order),u},r.prototype._filterFields=function(t,e){if(!t)return t;var n,i,r={},o=(0,l.default)(t),s=o.length;if(Array.isArray(e))for(n=0;n<s;n++)i=o[n],-1!=e.indexOf(i)&&(r[i]=t[i]);else for(n=0;n<s;n++)i=o[n],e.hasOwnProperty(i)&&(r[e[i]]=t[i]);return r},r.prototype._sort=function(t,e){if(c.isString(e)){var n=e;t.sort(function(t,e){var i=t[n],r=e[n];return i>r?1:i<r?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},r.prototype.remove=function(t,e){var n,i,r,o,s=[],a=[],u=[];for(u=Array.isArray(t)?t:[t],n=0,i=u.length;n<i;n++)(o=this._remove(u[n]))&&void 0!=(r=o[this._fieldId])&&(s.push(r),a.push(o));return s.length&&this._trigger("remove",{items:s,oldData:a},e),s},r.prototype._remove=function(t){var e,n;return c.isNumber(t)||c.isString(t)?n=t:t&&"object"===(void 0===t?"undefined":(0,u.default)(t))&&(n=t[this._fieldId]),void 0!==n&&this._data[n]?(e=this._data[n],delete this._data[n],this.length--,e):null},r.prototype.clear=function(t){var e,n,i=(0,l.default)(this._data),r=[];for(e=0,n=i.length;e<n;e++)r.push(this._data[i[e]]);return this._data={},this.length=0,this._trigger("remove",{items:i,oldData:r},t),i},r.prototype.max=function(t){var e,n,i=this._data,r=(0,l.default)(i),o=null,s=null;for(e=0,n=r.length;e<n;e++){var a=r[e],u=i[a],h=u[t];null!=h&&(!o||h>s)&&(o=u,s=h)}return o},r.prototype.min=function(t){var e,n,i=this._data,r=(0,l.default)(i),o=null,s=null;for(e=0,n=r.length;e<n;e++){var a=r[e],u=i[a],h=u[t];null!=h&&(!o||h<s)&&(o=u,s=h)}return o},r.prototype.distinct=function(t){var e,n,i,r=this._data,o=(0,l.default)(r),s=[],a=this._options.type&&this._options.type[t]||null,u=0;for(e=0,i=o.length;e<i;e++){var h=o[e],d=r[h],f=d[t],p=!1;for(n=0;n<u;n++)if(s[n]==f){p=!0;break}p||void 0===f||(s[u]=f,u++)}if(a)for(e=0,i=s.length;e<i;e++)s[e]=c.convert(s[e],a);return s},r.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=c.randomUUID(),t[this._fieldId]=e;var n,i,r={},o=(0,l.default)(t);for(n=0,i=o.length;n<i;n++){var s=o[n],a=this._type[s];r[s]=c.convert(t[s],a)}return this._data[e]=r,this.length++,e},r.prototype._getItem=function(t,e){var n,i,r,o,s=this._data[t];if(!s)return null;var a={},u=(0,l.default)(s);if(e)for(r=0,o=u.length;r<o;r++)n=u[r],i=s[n],a[n]=c.convert(i,e[n]);else for(r=0,o=u.length;r<o;r++)n=u[r],i=s[n],a[n]=i;return a[this._fieldId]||(a[this._fieldId]=s.id),a},r.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+(0,s.default)(t)+")");var n=this._data[e];if(!n)throw new Error("Cannot update item: no item with id "+e+" found");for(var i=(0,l.default)(t),r=0,o=i.length;r<o;r++){var a=i[r],u=this._type[a];n[a]=c.convert(t[a],u)}return e},t.exports=r},function(t,e,n){function i(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var n=this;this.listener=function(){n._onEvent.apply(n,arguments)},this.setData(t)}var r=n(18),o=function(t){return t&&t.__esModule?t:{default:t}}(r),s=n(3),a=n(35);i.prototype.setData=function(t){var e,n,i,r,o;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),o=[],i=0,r=e.length;i<r;i++)o.push(this._data._data[e[i]]);this._ids={},this.length=0,this._trigger("remove",{items:e,oldData:o})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),i=0,r=e.length;i<r;i++)n=e[i],this._ids[n]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},i.prototype.refresh=function(){var t,e,n,i=this._data.getIds({filter:this._options&&this._options.filter}),r=(0,o.default)(this._ids),s={},a=[],u=[],h=[];for(e=0,n=i.length;e<n;e++)t=i[e],s[t]=!0,this._ids[t]||(a.push(t),this._ids[t]=!0);for(e=0,n=r.length;e<n;e++)t=r[e],s[t]||(u.push(t),h.push(this._data._data[t]),delete this._ids[t]);this.length+=a.length-u.length,a.length&&this._trigger("add",{items:a}),u.length&&this._trigger("remove",{items:u,oldData:h})},i.prototype.get=function(t){var e,n,i,r=this,o=s.getType(arguments[0]);"String"==o||"Number"==o||"Array"==o?(e=arguments[0],n=arguments[1],i=arguments[2]):(n=arguments[0],i=arguments[1]);var a=s.extend({},this._options,n);this._options.filter&&n&&n.filter&&(a.filter=function(t){return r._options.filter(t)&&n.filter(t)});var u=[];return void 0!=e&&u.push(e),u.push(a),u.push(i),this._data&&this._data.get.apply(this._data,u)},i.prototype.getIds=function(t){var e;if(this._data){var n,i=this._options.filter;n=t&&t.filter?i?function(e){return i(e)&&t.filter(e)}:t.filter:i,e=this._data.getIds({filter:n,order:t&&t.order})}else e=[];return e},i.prototype.map=function(t,e){var n=[];if(this._data){var i,r=this._options.filter;i=e&&e.filter?r?function(t){return r(t)&&e.filter(t)}:e.filter:r,n=this._data.map(t,{filter:i,order:e&&e.order})}else n=[];return n},i.prototype.getDataSet=function(){for(var t=this;t instanceof i;)t=t._data;return t||null},i.prototype._onEvent=function(t,e,n){var i,r,o,s,a=e&&e.items,u=[],h=[],l=[],c=[],d=[],f=[];if(a&&this._data){switch(t){case"add":for(i=0,r=a.length;i<r;i++)o=a[i],(s=this.get(o))&&(this._ids[o]=!0,u.push(o));break;case"update":for(i=0,r=a.length;i<r;i++)o=a[i],s=this.get(o),s?this._ids[o]?(h.push(o),d.push(e.data[i]),c.push(e.oldData[i])):(this._ids[o]=!0,u.push(o)):this._ids[o]&&(delete this._ids[o],l.push(o),f.push(e.oldData[i]));break;case"remove":for(i=0,r=a.length;i<r;i++)o=a[i],this._ids[o]&&(delete this._ids[o],l.push(o),f.push(e.oldData[i]))}this.length+=u.length-l.length,u.length&&this._trigger("add",{items:u},n),h.length&&this._trigger("update",{items:h,oldData:c,data:d},n),l.length&&this._trigger("remove",{items:l,oldData:f},n)}},i.prototype.on=a.prototype.on,i.prototype.off=a.prototype.off,i.prototype._trigger=a.prototype._trigger,i.prototype.subscribe=i.prototype.on,i.prototype.unsubscribe=i.prototype.off,t.exports=i},function(t,e,n){n(59);for(var i=n(1),r=n(9),o=n(14),s=n(2)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),u=0;u<a.length;u++){var h=a[u],l=i[h],c=l&&l.prototype;c&&!c[s]&&r(c,s,h),o[h]=o.Array}},function(t,e,n){var i=n(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==i(t)?t.split(""):Object(t)}},function(t,e,n){var i=n(23),r=n(4),o=n(42),s=n(9),a=n(7),u=n(14),h=n(64),l=n(30),c=n(70),d=n(2)("iterator"),f=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,n,m,v,y,g){h(n,e,m);var _,w,b,x=function(t){if(!f&&t in D)return D[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",M="values"==v,T=!1,D=t.prototype,k=D[d]||D["@@iterator"]||v&&D[v],O=k||x(v),E=v?M?x("entries"):O:void 0,C="Array"==e?D.entries||k:k;if(C&&(b=c(C.call(new t)))!==Object.prototype&&b.next&&(l(b,S,!0),i||a(b,d)||s(b,d,p)),M&&k&&"values"!==k.name&&(T=!0,O=function(){return k.call(this)}),i&&!g||!f&&!T&&D[d]||s(D,d,O),u[e]=O,u[S]=p,v)if(_={values:M?O:x("values"),keys:y?O:x("keys"),entries:E},g)for(w in _)w in D||o(D,w,_[w]);else r(r.P+r.F*(f||T),e,_);return _}},function(t,e,n){t.exports=!n(6)&&!n(10)(function(){return 7!=Object.defineProperty(n(41)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var i=n(15),r=n(1).document,o=i(r)&&i(r.createElement);t.exports=function(t){return o?r.createElement(t):{}}},function(t,e,n){t.exports=n(9)},function(t,e,n){var i=n(7),r=n(8),o=n(66)(!1),s=n(27)("IE_PROTO");t.exports=function(t,e){var n,a=r(t),u=0,h=[];for(n in a)n!=s&&i(a,n)&&h.push(n);for(;e.length>u;)i(a,n=e[u++])&&(~o(h,n)||h.push(n));return h}},function(t,e,n){var i=n(71)(!0);n(39)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=i(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var i=n(43),r=n(29).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return i(t,r)}},function(t,e,n){t.exports="undefined"!=typeof window&&window.moment||n(94)},function(t,e,n){t.exports={default:n(100),__esModule:!0}},function(t,e,n){function i(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}i.prototype.setOptions=function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()},i.extend=function(t,e){var n=new i(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){n.flush()};var r=[{name:"flush",original:void 0}];if(e&&e.replace)for(var o=0;o<e.replace.length;o++){var s=e.replace[o];r.push({name:s,original:t[s]}),n.replace(t,s)}return n._extended={object:t,methods:r},n},i.prototype.destroy=function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,n=0;n<e.length;n++){var i=e[n];i.original?t[i.name]=i.original:delete t[i.name]}this._extended=null}},i.prototype.replace=function(t,e){var n=this,i=t[e];if(!i)throw new Error("Method "+e+" undefined");t[e]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];n.queue({args:t,fn:i,context:this})}},i.prototype.queue=function(t){"function"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()},i.prototype._flushIfNeeded=function(){if(this._queue.length>this.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},i.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=i},function(t,e,n){function i(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=i},function(t,e,n){function i(t,e){if(void 0===t)throw new Error("No container element defined");if(this.container=t,this.visible=!e||void 0==e.visible||e.visible,this.visible){this.frame=document.createElement("DIV"),this.frame.style.width="100%",this.frame.style.position="relative",this.container.appendChild(this.frame),this.frame.prev=document.createElement("INPUT"),this.frame.prev.type="BUTTON",this.frame.prev.value="Prev",this.frame.appendChild(this.frame.prev),this.frame.play=document.createElement("INPUT"),this.frame.play.type="BUTTON",this.frame.play.value="Play",this.frame.appendChild(this.frame.play),this.frame.next=document.createElement("INPUT"),this.frame.next.type="BUTTON",this.frame.next.value="Next",this.frame.appendChild(this.frame.next),this.frame.bar=document.createElement("INPUT"),this.frame.bar.type="BUTTON",this.frame.bar.style.position="absolute",this.frame.bar.style.border="1px solid red",this.frame.bar.style.width="100px",this.frame.bar.style.height="6px",this.frame.bar.style.borderRadius="2px",this.frame.bar.style.MozBorderRadius="2px",this.frame.bar.style.border="1px solid #7F7F7F",this.frame.bar.style.backgroundColor="#E5E5E5",this.frame.appendChild(this.frame.bar),this.frame.slide=document.createElement("INPUT"),this.frame.slide.type="BUTTON",this.frame.slide.style.margin="0px",this.frame.slide.value=" ",this.frame.slide.style.position="relative",this.frame.slide.style.left="-100px",this.frame.appendChild(this.frame.slide);var n=this;this.frame.slide.onmousedown=function(t){n._onMouseDown(t)},this.frame.prev.onclick=function(t){n.prev(t)},this.frame.play.onclick=function(t){n.togglePlay(t)},this.frame.next.onclick=function(t){n.next(t)}}this.onChangeCallback=void 0,this.values=[],this.index=void 0,this.playTimeout=void 0,this.playInterval=1e3,this.playLoop=!0}var r=n(3);i.prototype.prev=function(){var t=this.getIndex();t>0&&(t--,this.setIndex(t))},i.prototype.next=function(){var t=this.getIndex();t<this.values.length-1&&(t++,this.setIndex(t))},i.prototype.playNext=function(){var t=new Date,e=this.getIndex();e<this.values.length-1?(e++,this.setIndex(e)):this.playLoop&&(e=0,this.setIndex(e));var n=new Date,i=n-t,r=Math.max(this.playInterval-i,0),o=this;this.playTimeout=setTimeout(function(){o.playNext()},r)},i.prototype.togglePlay=function(){void 0===this.playTimeout?this.play():this.stop()},i.prototype.play=function(){this.playTimeout||(this.playNext(),this.frame&&(this.frame.play.value="Stop"))},i.prototype.stop=function(){clearInterval(this.playTimeout),this.playTimeout=void 0,this.frame&&(this.frame.play.value="Play")},i.prototype.setOnChangeCallback=function(t){this.onChangeCallback=t},i.prototype.setPlayInterval=function(t){this.playInterval=t},i.prototype.getPlayInterval=function(){return this.playInterval},i.prototype.setPlayLoop=function(t){this.playLoop=t},i.prototype.onChange=function(){void 0!==this.onChangeCallback&&this.onChangeCallback()},i.prototype.redraw=function(){if(this.frame){this.frame.bar.style.top=this.frame.clientHeight/2-this.frame.bar.offsetHeight/2+"px",this.frame.bar.style.width=this.frame.clientWidth-this.frame.prev.clientWidth-this.frame.play.clientWidth-this.frame.next.clientWidth-30+"px";var t=this.indexToLeft(this.index);this.frame.slide.style.left=t+"px"}},i.prototype.setValues=function(t){this.values=t,this.values.length>0?this.setIndex(0):this.index=void 0},i.prototype.setIndex=function(t){if(!(t<this.values.length))throw new Error("Index out of range");this.index=t,this.redraw(),this.onChange()},i.prototype.getIndex=function(){return this.index},i.prototype.get=function(){return this.values[this.index]},i.prototype._onMouseDown=function(t){if(t.which?1===t.which:1===t.button){this.startClientX=t.clientX,this.startSlideX=parseFloat(this.frame.slide.style.left),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},r.addEventListener(document,"mousemove",this.onmousemove),r.addEventListener(document,"mouseup",this.onmouseup),r.preventDefault(t)}},i.prototype.leftToIndex=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,n=t-3,i=Math.round(n/e*(this.values.length-1));return i<0&&(i=0),i>this.values.length-1&&(i=this.values.length-1),i},i.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10;return t/(this.values.length-1)*e+3},i.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,n=this.startSlideX+e,i=this.leftToIndex(n);this.setIndex(i),r.preventDefault()},i.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",r.removeEventListener(document,"mousemove",this.onmousemove),r.removeEventListener(document,"mouseup",this.onmouseup),r.preventDefault()},t.exports=i},function(t,e,n){function i(t,e,n,i){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,n,i)}i.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},i.prototype.setRange=function(t,e,n,i){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(n))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t||0,this._end=e||0,this.setStep(n,i)},i.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),!0===this.prettyStep?this._step=i.calculatePrettyStep(t):this._step=t)},i.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},n=Math.pow(10,Math.round(e(t))),i=2*Math.pow(10,Math.round(e(t/2))),r=5*Math.pow(10,Math.round(e(t/5))),o=n;return Math.abs(i-t)<=Math.abs(o-t)&&(o=i),Math.abs(r-t)<=Math.abs(o-t)&&(o=r),o<=0&&(o=1),o},i.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},i.prototype.getStep=function(){return this._step},i.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()<this._start&&this.next()},i.prototype.next=function(){this._current+=this._step},i.prototype.end=function(){return this._current>this._end},t.exports=i},function(t,e,n){function i(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function r(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function o(t,e){return void 0===t||""===t?e:t+r(e)}function s(t,e,n,i){for(var r,s,a=0;a<n.length;++a)r=n[a],s=o(i,r),e[s]=t[r]}function a(t,e,n,i){for(var r,s,a=0;a<n.length;++a)r=n[a],void 0!==t[r]&&(s=o(i,r),e[s]=t[r])}function u(t,e){if(void 0===t||i(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");k=t,s(t,e,T),s(t,e,D,"default"),l(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new x(0,0,-1)}function h(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===k||i(k))throw new Error("DEFAULTS not set for module Settings");a(t,e,T),a(t,e,D,"default"),l(t,e)}}function l(t,e){void 0!==t.backgroundColor&&m(t.backgroundColor,e),v(t.dataColor,e),p(t.style,e),c(t.showLegend,e),y(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&w.selectiveDeepExtend(["tooltipStyle"],e,t)}function c(t,e){if(void 0===t){if(void 0===k.showLegend){var n=e.style===S.DOTCOLOR||e.style===S.DOTSIZE;e.showLegend=n}}else e.showLegend=t}function d(t){var e=M[t];return void 0===e?-1:e}function f(t){var e=!1;for(var n in S)if(S[n]===t){e=!0;break}return e}function p(t,e){if(void 0!==t){var n;if("string"==typeof t){if(-1===(n=d(t)))throw new Error("Style '"+t+"' is invalid")}else{if(!f(t))throw new Error("Style '"+t+"' is invalid");n=t}e.style=n}}function m(t,e){var n="white",i="gray",r=1;if("string"==typeof t)n=t,i="none",r=0;else{if("object"!==(void 0===t?"undefined":(0,_.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(n=t.fill),void 0!==t.stroke&&(i=t.stroke),void 0!==t.strokeWidth&&(r=t.strokeWidth)}e.frame.style.backgroundColor=n,e.frame.style.borderColor=i,e.frame.style.borderWidth=r+"px",e.frame.style.borderStyle="solid"}function v(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function y(t,e){var n=t;void 0!==n&&(void 0===e.camera&&(e.camera=new b),e.camera.setArmRotation(n.horizontal,n.vertical),e.camera.setArmLength(n.distance))}var g=n(19),_=function(t){return t&&t.__esModule?t:{default:t}}(g),w=n(3),b=n(53),x=n(13),S={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},M={dot:S.DOT,"dot-line":S.DOTLINE,"dot-color":S.DOTCOLOR,"dot-size":S.DOTSIZE,line:S.LINE,grid:S.GRID,surface:S.SURFACE,bar:S.BAR,"bar-color":S.BARCOLOR,"bar-size":S.BARSIZE},T=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],D=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],k=void 0;t.exports.STYLE=S,t.exports.setDefaults=u,t.exports.setOptions=h,t.exports.setCameraPosition=y},function(t,e,n){function i(){this.armLocation=new s,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraOffset=new s,this.offsetMultiplier=.6,this.cameraLocation=new s,this.cameraRotation=new s(.5*Math.PI,0,0),this.calculateCameraOrientation()}var r=n(107),o=function(t){return t&&t.__esModule?t:{default:t}}(r),s=n(13);i.prototype.setOffset=function(t,e){var n=Math.abs,i=o.default,r=this.offsetMultiplier,s=this.armLength*r;n(t)>s&&(t=i(t)*s),n(e)>s&&(e=i(e)*s),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},i.prototype.getOffset=function(){return this.cameraOffset},i.prototype.setArmLocation=function(t,e,n){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=n,this.calculateCameraOrientation()},i.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),void 0===t&&void 0===e||this.calculateCameraOrientation()},i.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},i.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())},i.prototype.getArmLength=function(){return this.armLength},i.prototype.getCameraLocation=function(){return this.cameraLocation},i.prototype.getCameraRotation=function(){return this.cameraRotation},i.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal;var t=this.cameraRotation.x,e=this.cameraRotation.z,n=this.cameraOffset.x,i=this.cameraOffset.y,r=Math.sin,o=Math.cos;this.cameraLocation.x=this.cameraLocation.x+n*o(e)+i*-r(e)*o(t),this.cameraLocation.y=this.cameraLocation.y+n*r(e)+i*o(e)*o(t),this.cameraLocation.z=this.cameraLocation.z+i*r(t)},t.exports=i},function(t,e,n){function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var r=n(47),o=i(r),s=n(19),a=i(s),u=n(18),h=i(u),l=n(111),c=i(l),d=n(112),f=i(d),p=n(3),m=!1,v=void 0,y="background: #FFeeee; color: #dd0000",g=function(){function t(){(0,c.default)(this,t)}return(0,f.default)(t,null,[{key:"validate",value:function(e,n,i){m=!1,v=n;var r=n;return void 0!==i&&(r=n[i]),t.parse(e,r,[]),m}},{key:"parse",value:function(e,n,i){for(var r in e)e.hasOwnProperty(r)&&t.check(r,e,n,i)}},{key:"check",value:function(e,n,i,r){if(void 0===i[e]&&void 0===i.__any__)return void t.getSuggestion(e,i,r);var o=e,s=!0;void 0===i[e]&&void 0!==i.__any__&&(o="__any__",s="object"===t.getType(n[e]));var a=i[o];s&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,n,i,o,a,r)}},{key:"checkFields",value:function(e,n,i,r,o,s){var a=function(n){console.log("%c"+n+t.printLocation(s,e),y)},u=t.getType(n[e]),l=o[u];void 0!==l?"array"===t.getType(l)&&-1===l.indexOf(n[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(l)+' not "'+n[e]+'". '),m=!0):"object"===u&&"__any__"!==r&&(s=p.copyAndExtendArray(s,e),t.parse(n[e],i[r],s)):void 0===o.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print((0,h.default)(o))+". Received ["+u+'] "'+n[e]+'"'),m=!0)}},{key:"getType",value:function(t){var e=void 0===t?"undefined":(0,a.default)(t);return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,n,i){var r=t.findInOptions(e,n,i,!1),o=t.findInOptions(e,v,[],!0),s=void 0;s=void 0!==r.indexMatch?" in "+t.printLocation(r.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+r.indexMatch+'"?\n\n':o.distance<=4&&r.distance>o.distance?" in "+t.printLocation(r.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(o.path,o.closestMatch,""):r.distance<=8?'. Did you mean "'+r.closestMatch+'"?'+t.printLocation(r.path,e):". Did you mean one of these: "+t.print((0,h.default)(n))+t.printLocation(i,e),console.log('%cUnknown option detected: "'+e+'"'+s,y),m=!0}},{key:"findInOptions",value:function(e,n,i){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=1e9,s="",a=[],u=e.toLowerCase(),h=void 0;for(var l in n){var c=void 0;if(void 0!==n[l].__type__&&!0===r){var d=t.findInOptions(e,n[l],p.copyAndExtendArray(i,l));o>d.distance&&(s=d.closestMatch,a=d.path,o=d.distance,h=d.indexMatch)}else-1!==l.toLowerCase().indexOf(u)&&(h=l),c=t.levenshteinDistance(e,l),o>c&&(s=l,a=p.copyArray(i),o=c)}return{closestMatch:s,path:a,distance:o,indexMatch:h}}},{key:"printLocation",value:function(t,e){for(var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",i="\n\n"+n+"options = {\n",r=0;r<t.length;r++){for(var o=0;o<r+1;o++)i+="  ";i+=t[r]+": {\n"}for(var s=0;s<t.length+1;s++)i+="  ";i+=e+"\n";for(var a=0;a<t.length+1;a++){for(var u=0;u<t.length-a;u++)i+="  ";i+="}\n"}return i+"\n\n"}},{key:"print",value:function(t){return(0,o.default)(t).replace(/(\")|(\[)|(\])|(,"__type__")/g,"").replace(/(\,)/g,", ")}},{key:"levenshteinDistance",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var n,i=[];for(n=0;n<=e.length;n++)i[n]=[n];var r;for(r=0;r<=t.length;r++)i[0][r]=r;for(n=1;n<=e.length;n++)for(r=1;r<=t.length;r++)e.charAt(n-1)==t.charAt(r-1)?i[n][r]=i[n-1][r-1]:i[n][r]=Math.min(i[n-1][r-1]+1,Math.min(i[n][r-1]+1,i[n-1][r]+1));return i[e.length][t.length]}}]),t}();e.default=g,e.printStyle=y},function(t,e,n){function i(t,e,n){this.dataGroup=t,this.column=e,this.graph=n,this.index=void 0,this.value=void 0,this.values=t.getDistinctValues(this.column),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,n.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var r=n(36);i.prototype.isLoaded=function(){return this.loaded},i.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},i.prototype.getLabel=function(){return this.graph.filterLabel},i.prototype.getColumn=function(){return this.column},i.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},i.prototype.getValues=function(){return this.values},i.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},i.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var n={};n.column=this.column,n.value=this.values[t];var i=new r(this.dataGroup.getDataSet(),{filter:function(t){return t[n.column]==n.value}}).get();e=this.dataGroup._getDataPoints(i),this.dataPoints[t]=e}return e},i.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},i.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},i.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t<this.values.length){void 0===e.progress&&(e.progress=document.createElement("DIV"),e.progress.style.position="absolute",e.progress.style.color="gray",e.appendChild(e.progress));var n=this.getLoadedProgress();e.progress.innerHTML="Loading animation... "+n+"%",e.progress.style.bottom="60px",e.progress.style.left="10px";var i=this;setTimeout(function(){i.loadInBackground(t+1)},10),this.loaded=!1}else this.loaded=!0,void 0!==e.progress&&(e.removeChild(e.progress),e.progress=void 0),this.onLoadCallback&&this.onLoadCallback()},t.exports=i},function(t,e,n){e.util=n(3),e.DOMutil=n(99),e.DataSet=n(35),e.DataView=n(36),e.Queue=n(48),e.Graph3d=n(101),e.graph3d={Camera:n(53),Filter:n(55),Point2d:n(49),Point3d:n(13),Slider:n(50),StepNumber:n(51)},e.moment=n(46),e.Hammer=n(119),e.keycharm=n(122)},function(t,e,n){t.exports={default:n(58),__esModule:!0}},function(t,e,n){n(37),n(44),t.exports=n(72)},function(t,e,n){var i=n(60),r=n(61),o=n(14),s=n(8);t.exports=n(39)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var i=n(63);t.exports=function(t,e,n){if(i(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,i){return t.call(e,n,i)};case 3:return function(n,i,r){return t.call(e,n,i,r)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var i=n(25),r=n(16),o=n(30),s={};n(9)(s,n(2)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=i(s,{next:r(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var i=n(5),r=n(11),o=n(12);t.exports=n(6)?Object.defineProperties:function(t,e){r(t);for(var n,s=o(e),a=s.length,u=0;a>u;)i.f(t,n=s[u++],e[n]);return t}},function(t,e,n){var i=n(8),r=n(67),o=n(68);t.exports=function(t){return function(e,n,s){var a,u=i(e),h=r(u.length),l=o(s,h);if(t&&n!=n){for(;h>l;)if((a=u[l++])!=a)return!0}else for(;h>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var i=n(26),r=Math.min;t.exports=function(t){return t>0?r(i(t),9007199254740991):0}},function(t,e,n){var i=n(26),r=Math.max,o=Math.min;t.exports=function(t,e){return t=i(t),t<0?r(t+e,0):o(t,e)}},function(t,e,n){var i=n(1).document;t.exports=i&&i.documentElement},function(t,e,n){var i=n(7),r=n(31),o=n(27)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=r(t),i(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){var i=n(26),r=n(22);t.exports=function(t){return function(e,n){var o,s,a=String(r(e)),u=i(n),h=a.length;return u<0||u>=h?t?"":void 0:(o=a.charCodeAt(u),o<55296||o>56319||u+1===h||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536)}}},function(t,e,n){var i=n(11),r=n(73);t.exports=n(0).getIterator=function(t){var e=r(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return i(e.call(t))}},function(t,e,n){var i=n(74),r=n(2)("iterator"),o=n(14);t.exports=n(0).getIteratorMethod=function(t){if(void 0!=t)return t[r]||t["@@iterator"]||o[i(t)]}},function(t,e,n){var i=n(21),r=n(2)("toStringTag"),o="Arguments"==i(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),r))?n:o?i(e):"Object"==(a=i(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){t.exports={default:n(76),__esModule:!0}},function(t,e,n){n(77);var i=n(0).Object;t.exports=function(t,e){return i.create(t,e)}},function(t,e,n){var i=n(4);i(i.S,"Object",{create:n(25)})},function(t,e,n){n(79),t.exports=n(0).Object.keys},function(t,e,n){var i=n(31),r=n(12);n(80)("keys",function(){return function(t){return r(i(t))}})},function(t,e,n){var i=n(4),r=n(0),o=n(10);t.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],s={};s[t]=e(n),i(i.S+i.F*o(function(){n(1)}),"Object",s)}},function(t,e,n){t.exports={default:n(82),__esModule:!0}},function(t,e,n){n(44),n(37),t.exports=n(32).f("iterator")},function(t,e,n){t.exports={default:n(84),__esModule:!0}},function(t,e,n){n(85),n(91),n(92),n(93),t.exports=n(0).Symbol},function(t,e,n){var i=n(1),r=n(7),o=n(6),s=n(4),a=n(42),u=n(86).KEY,h=n(10),l=n(28),c=n(30),d=n(17),f=n(2),p=n(32),m=n(33),v=n(87),y=n(88),g=n(11),_=n(8),w=n(24),b=n(16),x=n(25),S=n(89),M=n(90),T=n(5),D=n(12),k=M.f,O=T.f,E=S.f,C=i.Symbol,P=i.JSON,L=P&&P.stringify,R=f("_hidden"),A=f("toPrimitive"),Y={}.propertyIsEnumerable,I=l("symbol-registry"),z=l("symbols"),N=l("op-symbols"),W=Object.prototype,j="function"==typeof C,F=i.QObject,V=!F||!F.prototype||!F.prototype.findChild,G=o&&h(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,n){var i=k(W,e);i&&delete W[e],O(t,e,n),i&&t!==W&&O(W,e,i)}:O,B=function(t){var e=z[t]=x(C.prototype);return e._k=t,e},U=j&&"symbol"==typeof C.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof C},H=function(t,e,n){return t===W&&H(N,e,n),g(t),e=w(e,!0),g(n),r(z,e)?(n.enumerable?(r(t,R)&&t[R][e]&&(t[R][e]=!1),n=x(n,{enumerable:b(0,!1)})):(r(t,R)||O(t,R,b(1,{})),t[R][e]=!0),G(t,e,n)):O(t,e,n)},X=function(t,e){g(t);for(var n,i=v(e=_(e)),r=0,o=i.length;o>r;)H(t,n=i[r++],e[n]);return t},Z=function(t,e){return void 0===e?x(t):X(x(t),e)},q=function(t){var e=Y.call(this,t=w(t,!0));return!(this===W&&r(z,t)&&!r(N,t))&&(!(e||!r(this,t)||!r(z,t)||r(this,R)&&this[R][t])||e)},$=function(t,e){if(t=_(t),e=w(e,!0),t!==W||!r(z,e)||r(N,e)){var n=k(t,e);return!n||!r(z,e)||r(t,R)&&t[R][e]||(n.enumerable=!0),n}},J=function(t){for(var e,n=E(_(t)),i=[],o=0;n.length>o;)r(z,e=n[o++])||e==R||e==u||i.push(e);return i},Q=function(t){for(var e,n=t===W,i=E(n?N:_(t)),o=[],s=0;i.length>s;)!r(z,e=i[s++])||n&&!r(W,e)||o.push(z[e]);return o};j||(C=function(){if(this instanceof C)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===W&&e.call(N,n),r(this,R)&&r(this[R],t)&&(this[R][t]=!1),G(this,t,b(1,n))};return o&&V&&G(W,t,{configurable:!0,set:e}),B(t)},a(C.prototype,"toString",function(){return this._k}),M.f=$,T.f=H,n(45).f=S.f=J,n(20).f=q,n(34).f=Q,o&&!n(23)&&a(W,"propertyIsEnumerable",q,!0),p.f=function(t){return B(f(t))}),s(s.G+s.W+s.F*!j,{Symbol:C});for(var K="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;K.length>tt;)f(K[tt++]);for(var et=D(f.store),nt=0;et.length>nt;)m(et[nt++]);s(s.S+s.F*!j,"Symbol",{for:function(t){return r(I,t+="")?I[t]:I[t]=C(t)},keyFor:function(t){if(!U(t))throw TypeError(t+" is not a symbol!");for(var e in I)if(I[e]===t)return e},useSetter:function(){V=!0},useSimple:function(){V=!1}}),s(s.S+s.F*!j,"Object",{create:Z,defineProperty:H,defineProperties:X,getOwnPropertyDescriptor:$,getOwnPropertyNames:J,getOwnPropertySymbols:Q}),P&&s(s.S+s.F*(!j||h(function(){var t=C();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!U(t)){for(var e,n,i=[t],r=1;arguments.length>r;)i.push(arguments[r++]);return e=i[1],"function"==typeof e&&(n=e),!n&&y(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!U(e))return e}),i[1]=e,L.apply(P,i)}}}),C.prototype[A]||n(9)(C.prototype,A,C.prototype.valueOf),c(C,"Symbol"),c(Math,"Math",!0),c(i.JSON,"JSON",!0)},function(t,e,n){var i=n(17)("meta"),r=n(15),o=n(7),s=n(5).f,a=0,u=Object.isExtensible||function(){return!0},h=!n(10)(function(){return u(Object.preventExtensions({}))}),l=function(t){s(t,i,{value:{i:"O"+ ++a,w:{}}})},c=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,i)){if(!u(t))return"F";if(!e)return"E";l(t)}return t[i].i},d=function(t,e){if(!o(t,i)){if(!u(t))return!0;if(!e)return!1;l(t)}return t[i].w},f=function(t){return h&&p.NEED&&u(t)&&!o(t,i)&&l(t),t},p=t.exports={KEY:i,NEED:!1,fastKey:c,getWeak:d,onFreeze:f}},function(t,e,n){var i=n(12),r=n(34),o=n(20);t.exports=function(t){var e=i(t),n=r.f;if(n)for(var s,a=n(t),u=o.f,h=0;a.length>h;)u.call(t,s=a[h++])&&e.push(s);return e}},function(t,e,n){var i=n(21);t.exports=Array.isArray||function(t){return"Array"==i(t)}},function(t,e,n){var i=n(8),r=n(45).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return r(t)}catch(t){return s.slice()}};t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?a(t):r(i(t))}},function(t,e,n){var i=n(20),r=n(16),o=n(8),s=n(24),a=n(7),u=n(40),h=Object.getOwnPropertyDescriptor;e.f=n(6)?h:function(t,e){if(t=o(t),e=s(e,!0),u)try{return h(t,e)}catch(t){}if(a(t,e))return r(!i.f.call(t,e),t[e])}},function(t,e){},function(t,e,n){n(33)("asyncIterator")},function(t,e,n){n(33)("observable")},function(t,e,n){(function(t){!function(e,n){t.exports=n()}(0,function(){function e(){return ki.apply(null,arguments)}function n(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function r(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}function o(t){return void 0===t}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));return i}function h(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function l(t,e){for(var n in e)h(e,n)&&(t[n]=e[n]);return h(e,"toString")&&(t.toString=e.toString),h(e,"valueOf")&&(t.valueOf=e.valueOf),t}function c(t,e,n,i){return Me(t,e,n,i,!0).utc()}function d(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(t){return null==t._pf&&(t._pf=d()),t._pf}function p(t){if(null==t._isValid){var e=f(t),n=Oi.call(e.parsedDateParts,function(t){return null!=t}),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function m(t){var e=c(NaN);return null!=t?l(f(e),t):f(e).userInvalidated=!0,e}function v(t,e){var n,i,r;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=f(e)),o(e._locale)||(t._locale=e._locale),Ei.length>0)for(n=0;n<Ei.length;n++)i=Ei[n],r=e[i],o(r)||(t[i]=r);return t}function y(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===Ci&&(Ci=!0,e.updateOffset(this),Ci=!1)}function g(t){return t instanceof y||null!=t&&null!=t._isAMomentObject}function _(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function w(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=_(e)),n}function b(t,e,n){var i,r=Math.min(t.length,e.length),o=Math.abs(t.length-e.length),s=0;for(i=0;i<r;i++)(n&&t[i]!==e[i]||!n&&w(t[i])!==w(e[i]))&&s++;return s+o}function x(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function S(t,n){var i=!0;return l(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),i){for(var r,o=[],s=0;s<arguments.length;s++){if(r="","object"==typeof arguments[s]){r+="\n["+s+"] ";for(var a in arguments[0])r+=a+": "+arguments[0][a]+", ";r=r.slice(0,-2)}else r=arguments[s];o.push(r)}x(t+"\nArguments: "+Array.prototype.slice.call(o).join("")+"\n"+(new Error).stack),i=!1}return n.apply(this,arguments)},n)}function M(t,n){null!=e.deprecationHandler&&e.deprecationHandler(t,n),Pi[t]||(x(n),Pi[t]=!0)}function T(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function D(t){var e,n;for(n in t)e=t[n],T(e)?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function k(t,e){var n,r=l({},t);for(n in e)h(e,n)&&(i(t[n])&&i(e[n])?(r[n]={},l(r[n],t[n]),l(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)h(t,n)&&!h(e,n)&&i(t[n])&&(r[n]=l({},r[n]));return r}function O(t){null!=t&&this.set(t)}function E(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return T(i)?i.call(e,n):i}function C(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function P(){return this._invalidDate}function L(t){return this._ordinal.replace("%d",t)}function R(t,e,n,i){var r=this._relativeTime[n];return T(r)?r(t,e,n,i):r.replace(/%d/i,t)}function A(t,e){var n=this._relativeTime[t>0?"future":"past"];return T(n)?n(e):n.replace(/%s/i,e)}function Y(t,e){var n=t.toLowerCase();zi[n]=zi[n+"s"]=zi[e]=t}function I(t){return"string"==typeof t?zi[t]||zi[t.toLowerCase()]:void 0}function z(t){var e,n,i={};for(n in t)h(t,n)&&(e=I(n))&&(i[e]=t[n]);return i}function N(t,e){Ni[t]=e}function W(t){var e=[];for(var n in t)e.push({unit:n,priority:Ni[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,e,n){var i=""+Math.abs(t),r=e-i.length;return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,r)).toString().substr(1)+i}function F(t,e,n,i){var r=i;"string"==typeof i&&(r=function(){return this[i]()}),t&&(Vi[t]=r),e&&(Vi[e[0]]=function(){return j(r.apply(this,arguments),e[1],e[2])}),n&&(Vi[n]=function(){return this.localeData().ordinal(r.apply(this,arguments),t)})}function V(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function G(t){var e,n,i=t.match(Wi);for(e=0,n=i.length;e<n;e++)Vi[i[e]]?i[e]=Vi[i[e]]:i[e]=V(i[e]);return function(e){var r,o="";for(r=0;r<n;r++)o+=T(i[r])?i[r].call(e,t):i[r];return o}}function B(t,e){return t.isValid()?(e=U(e,t.localeData()),Fi[e]=Fi[e]||G(e),Fi[e](t)):t.localeData().invalidDate()}function U(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(ji.lastIndex=0;i>=0&&ji.test(t);)t=t.replace(ji,n),ji.lastIndex=0,i-=1;return t}function H(t,e,n){sr[t]=T(e)?e:function(t,i){return t&&n?n:e}}function X(t,e){return h(sr,t)?sr[t](e._strict,e._locale):new RegExp(Z(t))}function Z(t){return q(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,r){return e||n||i||r}))}function q(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function $(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=function(t,n){n[e]=w(t)}),n=0;n<t.length;n++)ar[t[n]]=i}function J(t,e){$(t,function(t,n,i,r){i._w=i._w||{},e(t,i._w,i,r)})}function Q(t,e,n){null!=e&&h(ar,t)&&ar[t](e,n._a,n,t)}function K(t){return tt(t)?366:365}function tt(t){return t%4==0&&t%100!=0||t%400==0}function et(){return tt(this.year())}function nt(t,n){return function(i){return null!=i?(rt(this,t,i),e.updateOffset(this,n),this):it(this,t)}}function it(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function rt(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&tt(t.year())?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),ut(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function ot(t){return t=I(t),T(this[t])?this[t]():this}function st(t,e){if("object"==typeof t){t=z(t);for(var n=W(t),i=0;i<n.length;i++)this[n[i].unit](t[n[i].unit])}else if(t=I(t),T(this[t]))return this[t](e);return this}function at(t,e){return(t%e+e)%e}function ut(t,e){if(isNaN(t)||isNaN(e))return NaN;var n=at(e,12);return t+=(e-n)/12,1===n?tt(t)?29:28:31-n%7%2}function ht(t,e){return t?n(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||_r).test(e)?"format":"standalone"][t.month()]:n(this._months)?this._months:this._months.standalone}function lt(t,e){return t?n(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[_r.test(e)?"format":"standalone"][t.month()]:n(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ct(t,e,n){var i,r,o,s=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)o=c([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(o,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(o,"").toLocaleLowerCase();return n?"MMM"===e?(r=yr.call(this._shortMonthsParse,s),-1!==r?r:null):(r=yr.call(this._longMonthsParse,s),-1!==r?r:null):"MMM"===e?-1!==(r=yr.call(this._shortMonthsParse,s))?r:(r=yr.call(this._longMonthsParse,s),-1!==r?r:null):-1!==(r=yr.call(this._longMonthsParse,s))?r:(r=yr.call(this._shortMonthsParse,s),-1!==r?r:null)}function dt(t,e,n){var i,r,o;if(this._monthsParseExact)return ct.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(r=c([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(r,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(r,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(o="^"+this.months(r,"")+"|^"+this.monthsShort(r,""),this._monthsParse[i]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}function ft(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=w(e);else if(e=t.localeData().monthsParse(e),!s(e))return t;return n=Math.min(t.date(),ut(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function pt(t){return null!=t?(ft(this,t),e.updateOffset(this,!0),this):it(this,"Month")}function mt(){return ut(this.year(),this.month())}function vt(t){return this._monthsParseExact?(h(this,"_monthsRegex")||gt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=xr),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function yt(t){return this._monthsParseExact?(h(this,"_monthsRegex")||gt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Sr),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function gt(){function t(t,e){return e.length-t.length}var e,n,i=[],r=[],o=[];for(e=0;e<12;e++)n=c([2e3,e]),i.push(this.monthsShort(n,"")),r.push(this.months(n,"")),o.push(this.months(n,"")),o.push(this.monthsShort(n,""));for(i.sort(t),r.sort(t),o.sort(t),e=0;e<12;e++)i[e]=q(i[e]),r[e]=q(r[e]);for(e=0;e<24;e++)o[e]=q(o[e]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function _t(t,e,n,i,r,o,s){var a=new Date(t,e,n,i,r,o,s);return t<100&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function wt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function bt(t,e,n){var i=7+e-n;return-(7+wt(t,0,i).getUTCDay()-e)%7+i-1}function xt(t,e,n,i,r){var o,s,a=(7+n-i)%7,u=bt(t,i,r),h=1+7*(e-1)+a+u;return h<=0?(o=t-1,s=K(o)+h):h>K(t)?(o=t+1,s=h-K(t)):(o=t,s=h),{year:o,dayOfYear:s}}function St(t,e,n){var i,r,o=bt(t.year(),e,n),s=Math.floor((t.dayOfYear()-o-1)/7)+1;return s<1?(r=t.year()-1,i=s+Mt(r,e,n)):s>Mt(t.year(),e,n)?(i=s-Mt(t.year(),e,n),r=t.year()+1):(r=t.year(),i=s),{week:i,year:r}}function Mt(t,e,n){var i=bt(t,e,n),r=bt(t+1,e,n);return(K(t)-i+r)/7}function Tt(t){return St(t,this._week.dow,this._week.doy).week}function Dt(){return this._week.dow}function kt(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=St(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Ct(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Lt(t,e){return t?n(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:n(this._weekdays)?this._weekdays:this._weekdays.standalone}function Rt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function At(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Yt(t,e,n){var i,r,o,s=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)o=c([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===e?(r=yr.call(this._weekdaysParse,s),-1!==r?r:null):"ddd"===e?(r=yr.call(this._shortWeekdaysParse,s),-1!==r?r:null):(r=yr.call(this._minWeekdaysParse,s),-1!==r?r:null):"dddd"===e?-1!==(r=yr.call(this._weekdaysParse,s))?r:-1!==(r=yr.call(this._shortWeekdaysParse,s))?r:(r=yr.call(this._minWeekdaysParse,s),-1!==r?r:null):"ddd"===e?-1!==(r=yr.call(this._shortWeekdaysParse,s))?r:-1!==(r=yr.call(this._weekdaysParse,s))?r:(r=yr.call(this._minWeekdaysParse,s),-1!==r?r:null):-1!==(r=yr.call(this._minWeekdaysParse,s))?r:-1!==(r=yr.call(this._weekdaysParse,s))?r:(r=yr.call(this._shortWeekdaysParse,s),-1!==r?r:null)}function It(t,e,n){var i,r,o;if(this._weekdaysParseExact)return Yt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(r=c([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(r,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(r,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(r,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(o="^"+this.weekdays(r,"")+"|^"+this.weekdaysShort(r,"")+"|^"+this.weekdaysMin(r,""),this._weekdaysParse[i]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function zt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Ct(t,this.localeData()),this.add(t-e,"d")):e}function Nt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Wt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Or),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ft(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Er),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Vt(t){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Gt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Cr),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Gt(){function t(t,e){return e.length-t.length}var e,n,i,r,o,s=[],a=[],u=[],h=[];for(e=0;e<7;e++)n=c([2e3,1]).day(e),i=this.weekdaysMin(n,""),r=this.weekdaysShort(n,""),o=this.weekdays(n,""),s.push(i),a.push(r),u.push(o),h.push(i),h.push(r),h.push(o);for(s.sort(t),a.sort(t),u.sort(t),h.sort(t),e=0;e<7;e++)a[e]=q(a[e]),u[e]=q(u[e]),h[e]=q(h[e]);this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function Bt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function Ht(t,e){F(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Xt(t,e){return e._meridiemParse}function Zt(t){return"p"===(t+"").toLowerCase().charAt(0)}function qt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function $t(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,n,i,r,o=0;o<t.length;){for(r=$t(t[o]).split("-"),e=r.length,n=$t(t[o+1]),n=n?n.split("-"):null;e>0;){if(i=Qt(r.slice(0,e).join("-")))return i;if(n&&n.length>=e&&b(r,n,!0)>=e-1)break;e--}o++}return null}function Qt(e){var n=null;if(!Yr[e]&&void 0!==t&&t&&t.exports)try{n=Pr._abbr;!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Kt(n)}catch(t){}return Yr[e]}function Kt(t,e){var n;return t&&(n=o(e)?ne(t):te(t,e))&&(Pr=n),Pr._abbr}function te(t,e){if(null!==e){var n=Ar;if(e.abbr=t,null!=Yr[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Yr[t]._config;else if(null!=e.parentLocale){if(null==Yr[e.parentLocale])return Ir[e.parentLocale]||(Ir[e.parentLocale]=[]),Ir[e.parentLocale].push({name:t,config:e}),null;n=Yr[e.parentLocale]._config}return Yr[t]=new O(k(n,e)),Ir[t]&&Ir[t].forEach(function(t){te(t.name,t.config)}),Kt(t),Yr[t]}return delete Yr[t],null}function ee(t,e){if(null!=e){var n,i=Ar;null!=Yr[t]&&(i=Yr[t]._config),e=k(i,e),n=new O(e),n.parentLocale=Yr[t],Yr[t]=n,Kt(t)}else null!=Yr[t]&&(null!=Yr[t].parentLocale?Yr[t]=Yr[t].parentLocale:null!=Yr[t]&&delete Yr[t]);return Yr[t]}function ne(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Pr;if(!n(t)){if(e=Qt(t))return e;t=[t]}return Jt(t)}function ie(){return Li(Yr)}function re(t){var e,n=t._a;return n&&-2===f(t).overflow&&(e=n[hr]<0||n[hr]>11?hr:n[lr]<1||n[lr]>ut(n[ur],n[hr])?lr:n[cr]<0||n[cr]>24||24===n[cr]&&(0!==n[dr]||0!==n[fr]||0!==n[pr])?cr:n[dr]<0||n[dr]>59?dr:n[fr]<0||n[fr]>59?fr:n[pr]<0||n[pr]>999?pr:-1,f(t)._overflowDayOfYear&&(e<ur||e>lr)&&(e=lr),f(t)._overflowWeeks&&-1===e&&(e=mr),f(t)._overflowWeekday&&-1===e&&(e=vr),f(t).overflow=e),t}function oe(t,e,n){return null!=t?t:null!=e?e:n}function se(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function ae(t){var e,n,i,r,o=[];if(!t._d){for(i=se(t),t._w&&null==t._a[lr]&&null==t._a[hr]&&ue(t),null!=t._dayOfYear&&(r=oe(t._a[ur],i[ur]),(t._dayOfYear>K(r)||0===t._dayOfYear)&&(f(t)._overflowDayOfYear=!0),n=wt(r,0,t._dayOfYear),t._a[hr]=n.getUTCMonth(),t._a[lr]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=o[e]=i[e];for(;e<7;e++)t._a[e]=o[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[cr]&&0===t._a[dr]&&0===t._a[fr]&&0===t._a[pr]&&(t._nextDay=!0,t._a[cr]=0),t._d=(t._useUTC?wt:_t).apply(null,o),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[cr]=24),t._w&&void 0!==t._w.d&&t._w.d!==t._d.getDay()&&(f(t).weekdayMismatch=!0)}}function ue(t){var e,n,i,r,o,s,a,u;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)o=1,s=4,n=oe(e.GG,t._a[ur],St(Te(),1,4).year),i=oe(e.W,1),((r=oe(e.E,1))<1||r>7)&&(u=!0);else{o=t._locale._week.dow,s=t._locale._week.doy;var h=St(Te(),o,s);n=oe(e.gg,t._a[ur],h.year),i=oe(e.w,h.week),null!=e.d?((r=e.d)<0||r>6)&&(u=!0):null!=e.e?(r=e.e+o,(e.e<0||e.e>6)&&(u=!0)):r=o}i<1||i>Mt(n,o,s)?f(t)._overflowWeeks=!0:null!=u?f(t)._overflowWeekday=!0:(a=xt(n,i,r,o,s),t._a[ur]=a.year,t._dayOfYear=a.dayOfYear)}function he(t){var e,n,i,r,o,s,a=t._i,u=zr.exec(a)||Nr.exec(a);if(u){for(f(t).iso=!0,e=0,n=jr.length;e<n;e++)if(jr[e][1].exec(u[1])){r=jr[e][0],i=!1!==jr[e][2];break}if(null==r)return void(t._isValid=!1);if(u[3]){for(e=0,n=Fr.length;e<n;e++)if(Fr[e][1].exec(u[3])){o=(u[2]||" ")+Fr[e][0];break}if(null==o)return void(t._isValid=!1)}if(!i&&null!=o)return void(t._isValid=!1);if(u[4]){if(!Wr.exec(u[4]))return void(t._isValid=!1);s="Z"}t._f=r+(o||"")+(s||""),ye(t)}else t._isValid=!1}function le(t,e,n,i,r,o){var s=[ce(t),br.indexOf(e),parseInt(n,10),parseInt(i,10),parseInt(r,10)];return o&&s.push(parseInt(o,10)),s}function ce(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}function de(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function fe(t,e,n){if(t){if(Dr.indexOf(t)!==new Date(e[0],e[1],e[2]).getDay())return f(n).weekdayMismatch=!0,n._isValid=!1,!1}return!0}function pe(t,e,n){if(t)return Br[t];if(e)return 0;var i=parseInt(n,10),r=i%100;return(i-r)/100*60+r}function me(t){var e=Gr.exec(de(t._i));if(e){var n=le(e[4],e[3],e[2],e[5],e[6],e[7]);if(!fe(e[1],n,t))return;t._a=n,t._tzm=pe(e[8],e[9],e[10]),t._d=wt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),f(t).rfc2822=!0}else t._isValid=!1}function ve(t){var n=Vr.exec(t._i);if(null!==n)return void(t._d=new Date(+n[1]));he(t),!1===t._isValid&&(delete t._isValid,me(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function ye(t){if(t._f===e.ISO_8601)return void he(t);if(t._f===e.RFC_2822)return void me(t);t._a=[],f(t).empty=!0;var n,i,r,o,s,a=""+t._i,u=a.length,h=0;for(r=U(t._f,t._locale).match(Wi)||[],n=0;n<r.length;n++)o=r[n],i=(a.match(X(o,t))||[])[0],i&&(s=a.substr(0,a.indexOf(i)),s.length>0&&f(t).unusedInput.push(s),a=a.slice(a.indexOf(i)+i.length),h+=i.length),Vi[o]?(i?f(t).empty=!1:f(t).unusedTokens.push(o),Q(o,i,t)):t._strict&&!i&&f(t).unusedTokens.push(o);f(t).charsLeftOver=u-h,a.length>0&&f(t).unusedInput.push(a),t._a[cr]<=12&&!0===f(t).bigHour&&t._a[cr]>0&&(f(t).bigHour=void 0),f(t).parsedDateParts=t._a.slice(0),f(t).meridiem=t._meridiem,t._a[cr]=ge(t._locale,t._a[cr],t._meridiem),ae(t),re(t)}function ge(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function _e(t){var e,n,i,r,o;if(0===t._f.length)return f(t).invalidFormat=!0,void(t._d=new Date(NaN));for(r=0;r<t._f.length;r++)o=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[r],ye(e),p(e)&&(o+=f(e).charsLeftOver,o+=10*f(e).unusedTokens.length,f(e).score=o,(null==i||o<i)&&(i=o,n=e));l(t,n||e)}function we(t){if(!t._d){var e=z(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),ae(t)}}function be(t){var e=new y(re(xe(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function xe(t){var e=t._i,i=t._f;return t._locale=t._locale||ne(t._l),null===e||void 0===i&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),g(e)?new y(re(e)):(a(e)?t._d=e:n(i)?_e(t):i?ye(t):Se(t),p(t)||(t._d=null),t))}function Se(t){var r=t._i;o(r)?t._d=new Date(e.now()):a(r)?t._d=new Date(r.valueOf()):"string"==typeof r?ve(t):n(r)?(t._a=u(r.slice(0),function(t){return parseInt(t,10)}),ae(t)):i(r)?we(t):s(r)?t._d=new Date(r):e.createFromInputFallback(t)}function Me(t,e,o,s,a){var u={};return!0!==o&&!1!==o||(s=o,o=void 0),(i(t)&&r(t)||n(t)&&0===t.length)&&(t=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=a,u._l=o,u._i=t,u._f=e,u._strict=s,be(u)}function Te(t,e,n,i){return Me(t,e,n,i,!1)}function De(t,e){var i,r;if(1===e.length&&n(e[0])&&(e=e[0]),!e.length)return Te();for(i=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](i)||(i=e[r]);return i}function ke(){return De("isBefore",[].slice.call(arguments,0))}function Oe(){return De("isAfter",[].slice.call(arguments,0))}function Ee(t){for(var e in t)if(-1===yr.call(Zr,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,i=0;i<Zr.length;++i)if(t[Zr[i]]){if(n)return!1;parseFloat(t[Zr[i]])!==w(t[Zr[i]])&&(n=!0)}return!0}function Ce(){return this._isValid}function Pe(){return $e(NaN)}function Le(t){var e=z(t),n=e.year||0,i=e.quarter||0,r=e.month||0,o=e.week||0,s=e.day||0,a=e.hour||0,u=e.minute||0,h=e.second||0,l=e.millisecond||0;this._isValid=Ee(e),this._milliseconds=+l+1e3*h+6e4*u+1e3*a*60*60,this._days=+s+7*o,this._months=+r+3*i+12*n,this._data={},this._locale=ne(),this._bubble()}function Re(t){return t instanceof Le}function Ae(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ye(t,e){F(t,0,0,function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+j(~~(t/60),2)+e+j(~~t%60,2)})}function Ie(t,e){var n=(e||"").match(t);if(null===n)return null;var i=n[n.length-1]||[],r=(i+"").match(qr)||["-",0,0],o=60*r[1]+w(r[2]);return 0===o?0:"+"===r[0]?o:-o}function ze(t,n){var i,r;return n._isUTC?(i=n.clone(),r=(g(t)||a(t)?t.valueOf():Te(t).valueOf())-i.valueOf(),i._d.setTime(i._d.valueOf()+r),e.updateOffset(i,!1),i):Te(t).local()}function Ne(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function We(t,n,i){var r,o=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Ie(ir,t)))return this}else Math.abs(t)<16&&!i&&(t*=60);return!this._isUTC&&n&&(r=Ne(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),o!==t&&(!n||this._changeInProgress?en(this,$e(t-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?o:Ne(this)}function je(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Fe(t){return this.utcOffset(0,t)}function Ve(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ne(this),"m")),this}function Ge(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Ie(nr,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Be(t){return!!this.isValid()&&(t=t?Te(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function Ue(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function He(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=xe(t),t._a){var e=t._isUTC?c(t._a):Te(t._a);this._isDSTShifted=this.isValid()&&b(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Xe(){return!!this.isValid()&&!this._isUTC}function Ze(){return!!this.isValid()&&this._isUTC}function qe(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function $e(t,e){var n,i,r,o=t,a=null;return Re(t)?o={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(o={},e?o[e]=t:o.milliseconds=t):(a=$r.exec(t))?(n="-"===a[1]?-1:1,o={y:0,d:w(a[lr])*n,h:w(a[cr])*n,m:w(a[dr])*n,s:w(a[fr])*n,ms:w(Ae(1e3*a[pr]))*n}):(a=Jr.exec(t))?(n="-"===a[1]?-1:(a[1],1),o={y:Je(a[2],n),M:Je(a[3],n),w:Je(a[4],n),d:Je(a[5],n),h:Je(a[6],n),m:Je(a[7],n),s:Je(a[8],n)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(r=Ke(Te(o.from),Te(o.to)),o={},o.ms=r.milliseconds,o.M=r.months),i=new Le(o),Re(t)&&h(t,"_locale")&&(i._locale=t._locale),i}function Je(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Qe(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ke(t,e){var n;return t.isValid()&&e.isValid()?(e=ze(e,t),t.isBefore(e)?n=Qe(t,e):(n=Qe(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function tn(t,e){return function(n,i){var r,o;return null===i||isNaN(+i)||(M(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=n,n=i,i=o),n="string"==typeof n?+n:n,r=$e(n,i),en(this,r,t),this}}function en(t,n,i,r){var o=n._milliseconds,s=Ae(n._days),a=Ae(n._months);t.isValid()&&(r=null==r||r,a&&ft(t,it(t,"Month")+a*i),s&&rt(t,"Date",it(t,"Date")+s*i),o&&t._d.setTime(t._d.valueOf()+o*i),r&&e.updateOffset(t,s||a))}function nn(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function rn(t,n){var i=t||Te(),r=ze(i,this).startOf("day"),o=e.calendarFormat(this,r)||"sameElse",s=n&&(T(n[o])?n[o].call(this,i):n[o]);return this.format(s||this.localeData().calendar(o,this,Te(i)))}function on(){return new y(this)}function sn(t,e){var n=g(t)?t:Te(t);return!(!this.isValid()||!n.isValid())&&(e=I(o(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())}function an(t,e){var n=g(t)?t:Te(t);return!(!this.isValid()||!n.isValid())&&(e=I(o(e)?"millisecond":e),"millisecond"===e?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())}function un(t,e,n,i){return i=i||"()",("("===i[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===i[1]?this.isBefore(e,n):!this.isAfter(e,n))}function hn(t,e){var n,i=g(t)?t:Te(t);return!(!this.isValid()||!i.isValid())&&(e=I(e||"millisecond"),"millisecond"===e?this.valueOf()===i.valueOf():(n=i.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))}function ln(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function cn(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function dn(t,e,n){var i,r,o;if(!this.isValid())return NaN;if(i=ze(t,this),!i.isValid())return NaN;switch(r=6e4*(i.utcOffset()-this.utcOffset()),e=I(e)){case"year":o=fn(this,i)/12;break;case"month":o=fn(this,i);break;case"quarter":o=fn(this,i)/3;break;case"second":o=(this-i)/1e3;break;case"minute":o=(this-i)/6e4;break;case"hour":o=(this-i)/36e5;break;case"day":o=(this-i-r)/864e5;break;case"week":o=(this-i-r)/6048e5;break;default:o=this-i}return n?o:_(o)}function fn(t,e){var n,i,r=12*(e.year()-t.year())+(e.month()-t.month()),o=t.clone().add(r,"months");return e-o<0?(n=t.clone().add(r-1,"months"),i=(e-o)/(o-n)):(n=t.clone().add(r+1,"months"),i=(e-o)/(n-o)),-(r+i)||0}function pn(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function mn(){if(!this.isValid())return null;var t=this.clone().utc();return t.year()<0||t.year()>9999?B(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):T(Date.prototype.toISOString)?this.toDate().toISOString():B(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function vn(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",r=e+'[")]';return this.format(n+i+"-MM-DD[T]HH:mm:ss.SSS"+r)}function yn(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=B(this,t);return this.localeData().postformat(n)}function gn(t,e){return this.isValid()&&(g(t)&&t.isValid()||Te(t).isValid())?$e({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _n(t){return this.from(Te(),t)}function wn(t,e){return this.isValid()&&(g(t)&&t.isValid()||Te(t).isValid())?$e({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function bn(t){return this.to(Te(),t)}function xn(t){var e;return void 0===t?this._locale._abbr:(e=ne(t),null!=e&&(this._locale=e),this)}function Sn(){return this._locale}function Mn(t){switch(t=I(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Tn(t){return void 0===(t=I(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function Dn(){return this._d.valueOf()-6e4*(this._offset||0)}function kn(){return Math.floor(this.valueOf()/1e3)}function On(){return new Date(this.valueOf())}function En(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Cn(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Pn(){return this.isValid()?this.toISOString():null}function Ln(){return p(this)}function Rn(){return l({},f(this))}function An(){return f(this).overflow}function Yn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function In(t,e){F(0,[t,t.length],0,e)}function zn(t){return Fn.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Nn(t){return Fn.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Wn(){return Mt(this.year(),1,4)}function jn(){var t=this.localeData()._week;return Mt(this.year(),t.dow,t.doy)}function Fn(t,e,n,i,r){var o;return null==t?St(this,i,r).year:(o=Mt(t,i,r),e>o&&(e=o),Vn.call(this,t,e,n,i,r))}function Vn(t,e,n,i,r){var o=xt(t,e,n,i,r),s=wt(o.year,0,o.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}function Gn(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Bn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Un(t,e){e[pr]=w(1e3*("0."+t))}function Hn(){return this._isUTC?"UTC":""}function Xn(){return this._isUTC?"Coordinated Universal Time":""}function Zn(t){return Te(1e3*t)}function qn(){return Te.apply(null,arguments).parseZone()}function $n(t){return t}function Jn(t,e,n,i){var r=ne(),o=c().set(i,e);return r[n](o,t)}function Qn(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return Jn(t,e,n,"month");var i,r=[];for(i=0;i<12;i++)r[i]=Jn(t,i,n,"month");return r}function Kn(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var r=ne(),o=t?r._week.dow:0;if(null!=n)return Jn(e,(n+o)%7,i,"day");var a,u=[];for(a=0;a<7;a++)u[a]=Jn(e,(a+o)%7,i,"day");return u}function ti(t,e){return Qn(t,e,"months")}function ei(t,e){return Qn(t,e,"monthsShort")}function ni(t,e,n){return Kn(t,e,n,"weekdays")}function ii(t,e,n){return Kn(t,e,n,"weekdaysShort")}function ri(t,e,n){return Kn(t,e,n,"weekdaysMin")}function oi(){var t=this._data;return this._milliseconds=uo(this._milliseconds),this._days=uo(this._days),this._months=uo(this._months),t.milliseconds=uo(t.milliseconds),t.seconds=uo(t.seconds),t.minutes=uo(t.minutes),t.hours=uo(t.hours),t.months=uo(t.months),t.years=uo(t.years),this}function si(t,e,n,i){var r=$e(e,n);return t._milliseconds+=i*r._milliseconds,t._days+=i*r._days,t._months+=i*r._months,t._bubble()}function ai(t,e){return si(this,t,e,1)}function ui(t,e){return si(this,t,e,-1)}function hi(t){return t<0?Math.floor(t):Math.ceil(t)}function li(){var t,e,n,i,r,o=this._milliseconds,s=this._days,a=this._months,u=this._data;return o>=0&&s>=0&&a>=0||o<=0&&s<=0&&a<=0||(o+=864e5*hi(di(a)+s),s=0,a=0),u.milliseconds=o%1e3,t=_(o/1e3),u.seconds=t%60,e=_(t/60),u.minutes=e%60,n=_(e/60),u.hours=n%24,s+=_(n/24),r=_(ci(s)),a+=r,s-=hi(di(r)),i=_(a/12),a%=12,u.days=s,u.months=a,u.years=i,this}function ci(t){return 4800*t/146097}function di(t){return 146097*t/4800}function fi(t){if(!this.isValid())return NaN;var e,n,i=this._milliseconds;if("month"===(t=I(t))||"year"===t)return e=this._days+i/864e5,n=this._months+ci(e),"month"===t?n:n/12;switch(e=this._days+Math.round(di(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function pi(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12):NaN}function mi(t){return function(){return this.as(t)}}function vi(){return $e(this)}function yi(t){return t=I(t),this.isValid()?this[t+"s"]():NaN}function gi(t){return function(){return this.isValid()?this._data[t]:NaN}}function _i(){return _(this.days()/7)}function wi(t,e,n,i,r){return r.relativeTime(e||1,!!n,t,i)}function bi(t,e,n){var i=$e(t).abs(),r=To(i.as("s")),o=To(i.as("m")),s=To(i.as("h")),a=To(i.as("d")),u=To(i.as("M")),h=To(i.as("y")),l=r<=Do.ss&&["s",r]||r<Do.s&&["ss",r]||o<=1&&["m"]||o<Do.m&&["mm",o]||s<=1&&["h"]||s<Do.h&&["hh",s]||a<=1&&["d"]||a<Do.d&&["dd",a]||u<=1&&["M"]||u<Do.M&&["MM",u]||h<=1&&["y"]||["yy",h];return l[2]=e,l[3]=+t>0,l[4]=n,wi.apply(null,l)}function xi(t){return void 0===t?To:"function"==typeof t&&(To=t,!0)}function Si(t,e){return void 0!==Do[t]&&(void 0===e?Do[t]:(Do[t]=e,"s"===t&&(Do.ss=e-1),!0))}function Mi(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=bi(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function Ti(t){return(t>0)-(t<0)||+t}function Di(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,i=ko(this._milliseconds)/1e3,r=ko(this._days),o=ko(this._months);t=_(i/60),e=_(t/60),i%=60,t%=60,n=_(o/12),o%=12;var s=n,a=o,u=r,h=e,l=t,c=i?i.toFixed(3).replace(/\.?0+$/,""):"",d=this.asSeconds();if(!d)return"P0D";var f=d<0?"-":"",p=Ti(this._months)!==Ti(d)?"-":"",m=Ti(this._days)!==Ti(d)?"-":"",v=Ti(this._milliseconds)!==Ti(d)?"-":"";return f+"P"+(s?p+s+"Y":"")+(a?p+a+"M":"")+(u?m+u+"D":"")+(h||l||c?"T":"")+(h?v+h+"H":"")+(l?v+l+"M":"")+(c?v+c+"S":"")}var ki,Oi;Oi=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i<n;i++)if(i in e&&t.call(this,e[i],i,e))return!0;return!1};var Ei=e.momentProperties=[],Ci=!1,Pi={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var Li;Li=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)h(t,e)&&n.push(e);return n};var Ri={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ai={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Yi=/\d{1,2}/,Ii={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},zi={},Ni={},Wi=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,ji=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Fi={},Vi={},Gi=/\d/,Bi=/\d\d/,Ui=/\d{3}/,Hi=/\d{4}/,Xi=/[+-]?\d{6}/,Zi=/\d\d?/,qi=/\d\d\d\d?/,$i=/\d\d\d\d\d\d?/,Ji=/\d{1,3}/,Qi=/\d{1,4}/,Ki=/[+-]?\d{1,6}/,tr=/\d+/,er=/[+-]?\d+/,nr=/Z|[+-]\d\d:?\d\d/gi,ir=/Z|[+-]\d\d(?::?\d\d)?/gi,rr=/[+-]?\d+(\.\d{1,3})?/,or=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,sr={},ar={},ur=0,hr=1,lr=2,cr=3,dr=4,fr=5,pr=6,mr=7,vr=8;F("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),F(0,["YY",2],0,function(){return this.year()%100}),F(0,["YYYY",4],0,"year"),F(0,["YYYYY",5],0,"year"),F(0,["YYYYYY",6,!0],0,"year"),Y("year","y"),N("year",1),H("Y",er),H("YY",Zi,Bi),H("YYYY",Qi,Hi),H("YYYYY",Ki,Xi),H("YYYYYY",Ki,Xi),$(["YYYYY","YYYYYY"],ur),$("YYYY",function(t,n){n[ur]=2===t.length?e.parseTwoDigitYear(t):w(t)}),$("YY",function(t,n){n[ur]=e.parseTwoDigitYear(t)}),$("Y",function(t,e){e[ur]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return w(t)+(w(t)>68?1900:2e3)};var yr,gr=nt("FullYear",!0);yr=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},F("M",["MM",2],"Mo",function(){return this.month()+1}),F("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),F("MMMM",0,0,function(t){return this.localeData().months(this,t)}),Y("month","M"),N("month",8),H("M",Zi),H("MM",Zi,Bi),H("MMM",function(t,e){return e.monthsShortRegex(t)}),H("MMMM",function(t,e){return e.monthsRegex(t)}),$(["M","MM"],function(t,e){e[hr]=w(t)-1}),$(["MMM","MMMM"],function(t,e,n,i){var r=n._locale.monthsParse(t,i,n._strict);null!=r?e[hr]=r:f(n).invalidMonth=t});var _r=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,wr="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),br="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),xr=or,Sr=or;F("w",["ww",2],"wo","week"),F("W",["WW",2],"Wo","isoWeek"),Y("week","w"),Y("isoWeek","W"),N("week",5),N("isoWeek",5),H("w",Zi),H("ww",Zi,Bi),H("W",Zi),H("WW",Zi,Bi),J(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=w(t)});var Mr={dow:0,doy:6};F("d",0,"do","day"),F("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),F("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),F("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),F("e",0,0,"weekday"),F("E",0,0,"isoWeekday"),Y("day","d"),Y("weekday","e"),Y("isoWeekday","E"),N("day",11),N("weekday",11),N("isoWeekday",11),H("d",Zi),H("e",Zi),H("E",Zi),H("dd",function(t,e){return e.weekdaysMinRegex(t)}),H("ddd",function(t,e){return e.weekdaysShortRegex(t)}),H("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,n,i){var r=n._locale.weekdaysParse(t,i,n._strict);null!=r?e.d=r:f(n).invalidWeekday=t}),J(["d","e","E"],function(t,e,n,i){e[i]=w(t)});var Tr="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Dr="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),kr="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Or=or,Er=or,Cr=or;F("H",["HH",2],0,"hour"),F("h",["hh",2],0,Bt),F("k",["kk",2],0,Ut),F("hmm",0,0,function(){return""+Bt.apply(this)+j(this.minutes(),2)}),F("hmmss",0,0,function(){return""+Bt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)}),F("Hmm",0,0,function(){return""+this.hours()+j(this.minutes(),2)}),F("Hmmss",0,0,function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)}),Ht("a",!0),Ht("A",!1),Y("hour","h"),N("hour",13),H("a",Xt),H("A",Xt),H("H",Zi),H("h",Zi),H("k",Zi),H("HH",Zi,Bi),H("hh",Zi,Bi),H("kk",Zi,Bi),H("hmm",qi),H("hmmss",$i),H("Hmm",qi),H("Hmmss",$i),$(["H","HH"],cr),$(["k","kk"],function(t,e,n){var i=w(t);e[cr]=24===i?0:i}),$(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),$(["h","hh"],function(t,e,n){e[cr]=w(t),f(n).bigHour=!0}),$("hmm",function(t,e,n){var i=t.length-2;e[cr]=w(t.substr(0,i)),e[dr]=w(t.substr(i)),f(n).bigHour=!0}),$("hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[cr]=w(t.substr(0,i)),e[dr]=w(t.substr(i,2)),e[fr]=w(t.substr(r)),f(n).bigHour=!0}),$("Hmm",function(t,e,n){var i=t.length-2;e[cr]=w(t.substr(0,i)),e[dr]=w(t.substr(i))}),$("Hmmss",function(t,e,n){var i=t.length-4,r=t.length-2;e[cr]=w(t.substr(0,i)),e[dr]=w(t.substr(i,2)),e[fr]=w(t.substr(r))});var Pr,Lr=/[ap]\.?m?\.?/i,Rr=nt("Hours",!0),Ar={calendar:Ri,longDateFormat:Ai,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Yi,relativeTime:Ii,months:wr,monthsShort:br,week:Mr,weekdays:Tr,weekdaysMin:kr,weekdaysShort:Dr,meridiemParse:Lr},Yr={},Ir={},zr=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nr=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Wr=/Z|[+-]\d\d(?::?\d\d)?/,jr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Fr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Vr=/^\/?Date\((\-?\d+)/i,Gr=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Br={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=S("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Ur=S("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Te.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()}),Hr=S("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Te.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}),Xr=function(){return Date.now?Date.now():+new Date},Zr=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ye("Z",":"),Ye("ZZ",""),H("Z",ir),H("ZZ",ir),$(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Ie(ir,t)});var qr=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var $r=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Jr=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;$e.fn=Le.prototype,$e.invalid=Pe;var Qr=tn(1,"add"),Kr=tn(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var to=S("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});F(0,["gg",2],0,function(){return this.weekYear()%100}),F(0,["GG",2],0,function(){return this.isoWeekYear()%100}),In("gggg","weekYear"),In("ggggg","weekYear"),In("GGGG","isoWeekYear"),In("GGGGG","isoWeekYear"),Y("weekYear","gg"),Y("isoWeekYear","GG"),N("weekYear",1),N("isoWeekYear",1),H("G",er),H("g",er),H("GG",Zi,Bi),H("gg",Zi,Bi),H("GGGG",Qi,Hi),H("gggg",Qi,Hi),H("GGGGG",Ki,Xi),H("ggggg",Ki,Xi),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=w(t)}),J(["gg","GG"],function(t,n,i,r){n[r]=e.parseTwoDigitYear(t)}),F("Q",0,"Qo","quarter"),Y("quarter","Q"),N("quarter",7),H("Q",Gi),$("Q",function(t,e){e[hr]=3*(w(t)-1)}),F("D",["DD",2],"Do","date"),Y("date","D"),N("date",9),H("D",Zi),H("DD",Zi,Bi),H("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),$(["D","DD"],lr),$("Do",function(t,e){e[lr]=w(t.match(Zi)[0],10)});var eo=nt("Date",!0);F("DDD",["DDDD",3],"DDDo","dayOfYear"),Y("dayOfYear","DDD"),N("dayOfYear",4),H("DDD",Ji),H("DDDD",Ui),$(["DDD","DDDD"],function(t,e,n){n._dayOfYear=w(t)}),F("m",["mm",2],0,"minute"),Y("minute","m"),N("minute",14),H("m",Zi),H("mm",Zi,Bi),$(["m","mm"],dr);var no=nt("Minutes",!1);F("s",["ss",2],0,"second"),Y("second","s"),N("second",15),H("s",Zi),H("ss",Zi,Bi),$(["s","ss"],fr);var io=nt("Seconds",!1);F("S",0,0,function(){return~~(this.millisecond()/100)}),F(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),F(0,["SSS",3],0,"millisecond"),F(0,["SSSS",4],0,function(){return 10*this.millisecond()}),F(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),F(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),F(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),F(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),F(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),Y("millisecond","ms"),N("millisecond",16),H("S",Ji,Gi),H("SS",Ji,Bi),H("SSS",Ji,Ui);var ro;for(ro="SSSS";ro.length<=9;ro+="S")H(ro,tr);for(ro="S";ro.length<=9;ro+="S")$(ro,Un);var oo=nt("Milliseconds",!1);F("z",0,0,"zoneAbbr"),F("zz",0,0,"zoneName");var so=y.prototype;so.add=Qr,so.calendar=rn,so.clone=on,so.diff=dn,so.endOf=Tn,so.format=yn,so.from=gn,so.fromNow=_n,so.to=wn,so.toNow=bn,so.get=ot,so.invalidAt=An,so.isAfter=sn,so.isBefore=an,so.isBetween=un,so.isSame=hn,so.isSameOrAfter=ln,so.isSameOrBefore=cn,so.isValid=Ln,so.lang=to,so.locale=xn,so.localeData=Sn,so.max=Hr,so.min=Ur,so.parsingFlags=Rn,so.set=st,so.startOf=Mn,so.subtract=Kr,so.toArray=En,so.toObject=Cn,so.toDate=On,so.toISOString=mn,so.inspect=vn,so.toJSON=Pn,so.toString=pn,so.unix=kn,so.valueOf=Dn,so.creationData=Yn,so.year=gr,so.isLeapYear=et,so.weekYear=zn,so.isoWeekYear=Nn,so.quarter=so.quarters=Gn,so.month=pt,so.daysInMonth=mt,so.week=so.weeks=Ot,so.isoWeek=so.isoWeeks=Et,so.weeksInYear=jn,so.isoWeeksInYear=Wn,so.date=eo,so.day=so.days=zt,so.weekday=Nt,so.isoWeekday=Wt,so.dayOfYear=Bn,so.hour=so.hours=Rr,so.minute=so.minutes=no,so.second=so.seconds=io,so.millisecond=so.milliseconds=oo,so.utcOffset=We,so.utc=Fe,so.local=Ve,so.parseZone=Ge,so.hasAlignedHourOffset=Be,so.isDST=Ue,so.isLocal=Xe,so.isUtcOffset=Ze,so.isUtc=qe,so.isUTC=qe,so.zoneAbbr=Hn,so.zoneName=Xn,so.dates=S("dates accessor is deprecated. Use date instead.",eo),so.months=S("months accessor is deprecated. Use month instead",pt),so.years=S("years accessor is deprecated. Use year instead",gr),so.zone=S("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",je),so.isDSTShifted=S("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",He);var ao=O.prototype;ao.calendar=E,ao.longDateFormat=C,ao.invalidDate=P,ao.ordinal=L,ao.preparse=$n,ao.postformat=$n,ao.relativeTime=R,ao.pastFuture=A,ao.set=D,ao.months=ht,ao.monthsShort=lt,ao.monthsParse=dt,ao.monthsRegex=yt,ao.monthsShortRegex=vt,ao.week=Tt,ao.firstDayOfYear=kt,ao.firstDayOfWeek=Dt,ao.weekdays=Lt,ao.weekdaysMin=At,ao.weekdaysShort=Rt,ao.weekdaysParse=It,ao.weekdaysRegex=jt,ao.weekdaysShortRegex=Ft,ao.weekdaysMinRegex=Vt,ao.isPM=Zt,ao.meridiem=qt,Kt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===w(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=S("moment.lang is deprecated. Use moment.locale instead.",Kt),e.langData=S("moment.langData is deprecated. Use moment.localeData instead.",ne);var uo=Math.abs,ho=mi("ms"),lo=mi("s"),co=mi("m"),fo=mi("h"),po=mi("d"),mo=mi("w"),vo=mi("M"),yo=mi("y"),go=gi("milliseconds"),_o=gi("seconds"),wo=gi("minutes"),bo=gi("hours"),xo=gi("days"),So=gi("months"),Mo=gi("years"),To=Math.round,Do={ss:44,s:45,m:45,h:22,d:26,M:11},ko=Math.abs,Oo=Le.prototype;return Oo.isValid=Ce,Oo.abs=oi,Oo.add=ai,Oo.subtract=ui,Oo.as=fi,Oo.asMilliseconds=ho,Oo.asSeconds=lo,Oo.asMinutes=co,Oo.asHours=fo,Oo.asDays=po,Oo.asWeeks=mo,Oo.asMonths=vo,Oo.asYears=yo,Oo.valueOf=pi,Oo._bubble=li,Oo.clone=vi,Oo.get=yi,Oo.milliseconds=go,Oo.seconds=_o,Oo.minutes=wo,Oo.hours=bo,Oo.days=xo,Oo.weeks=_i,Oo.months=So,Oo.years=Mo,Oo.humanize=Mi,Oo.toISOString=Di,Oo.toString=Di,Oo.toJSON=Di,Oo.locale=xn,Oo.localeData=Sn,Oo.toIsoString=S("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Di),Oo.lang=to,F("X",0,0,"unix"),F("x",0,0,"valueOf"),H("x",er),H("X",rr),$("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),$("x",function(t,e,n){n._d=new Date(w(t))}),e.version="2.19.1",function(t){ki=t}(Te),e.fn=so,e.min=ke,e.max=Oe,e.now=Xr,e.utc=c,e.unix=Zn,e.months=ti,e.isDate=a,e.locale=Kt,e.invalid=m,e.duration=$e,e.isMoment=g,e.weekdays=ni,e.parseZone=qn,e.localeData=ne,e.isDuration=Re,e.monthsShort=ei,e.weekdaysMin=ri,e.defineLocale=te,e.updateLocale=ee,e.locales=ie,e.weekdaysShort=ii,e.normalizeUnits=I,e.relativeTimeRounding=xi,e.relativeTimeThreshold=Si,e.calendarFormat=nn,e.prototype=so,e})}).call(e,n(95)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function n(t){throw new Error("Cannot find module '"+t+"'.")}n.keys=function(){return[]},n.resolve=n,t.exports=n,n.id=96},function(t,e,n){(function(e){function n(t,e,n){var i=e&&n||0,r=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){r<16&&(e[i+r++]=c[t])});r<16;)e[i+r++]=0;return e}function i(t,e){var n=e||0,i=l;return i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+"-"+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]+i[t[n++]]}function r(t,e,n){var r=e&&n||0,o=e||[];t=t||{};var s=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),u=void 0!==t.nsecs?t.nsecs:y+1,h=a-v+(u-y)/1e4;if(h<0&&void 0===t.clockseq&&(s=s+1&16383),(h<0||a>v)&&void 0===t.nsecs&&(u=0),u>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=a,y=u,m=s,a+=122192928e5;var l=(1e4*(268435455&a)+u)%4294967296;o[r++]=l>>>24&255,o[r++]=l>>>16&255,o[r++]=l>>>8&255,o[r++]=255&l;var c=a/4294967296*1e4&268435455;o[r++]=c>>>8&255,o[r++]=255&c,o[r++]=c>>>24&15|16,o[r++]=c>>>16&255,o[r++]=s>>>8|128,o[r++]=255&s;for(var d=t.node||p,f=0;f<6;f++)o[r+f]=d[f];return e||i(o)}function o(t,e,n){var r=e&&n||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var o=t.random||(t.rng||s)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,e)for(var a=0;a<16;a++)e[r+a]=o[a];return e||i(o)}var s,a="undefined"!=typeof window?window:void 0!==e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var u=new Uint8Array(16);s=function(){return crypto.getRandomValues(u),u}}if(!s){var h=new Array(16);s=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),h[e]=t>>>((3&e)<<3)&255;return h}}for(var l=[],c={},d=0;d<256;d++)l[d]=(d+256).toString(16).substr(1),c[l[d]]=d;var f=s(),p=[1|f[0],f[1],f[2],f[3],f[4],f[5]],m=16383&(f[6]<<8|f[7]),v=0,y=0,g=o;g.v1=r,g.v4=o,g.parse=n,g.unparse=i,t.exports=g}).call(e,n(98))},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var n=0;n<t[e].redundant.length;n++)t[e].redundant[n].parentNode.removeChild(t[e].redundant[n]);t[e].redundant=[]}},e.resetElements=function(t){e.prepareElements(t),e.cleanupElements(t),e.prepareElements(t)},e.getSVGElement=function(t,e,n){var i;return e.hasOwnProperty(t)?e[t].redundant.length>0?(i=e[t].redundant[0],e[t].redundant.shift()):(i=document.createElementNS("http://www.w3.org/2000/svg",t),n.appendChild(i)):(i=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},n.appendChild(i)),e[t].used.push(i),i},e.getDOMElement=function(t,e,n,i){var r;return e.hasOwnProperty(t)?e[t].redundant.length>0?(r=e[t].redundant[0],e[t].redundant.shift()):(r=document.createElement(t),void 0!==i?n.insertBefore(r,i):n.appendChild(r)):(r=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==i?n.insertBefore(r,i):n.appendChild(r)),e[t].used.push(r),r},e.drawPoint=function(t,n,i,r,o,s){var a;if("circle"==i.style?(a=e.getSVGElement("circle",r,o),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",n),a.setAttributeNS(null,"r",.5*i.size)):(a=e.getSVGElement("rect",r,o),a.setAttributeNS(null,"x",t-.5*i.size),a.setAttributeNS(null,"y",n-.5*i.size),a.setAttributeNS(null,"width",i.size),a.setAttributeNS(null,"height",i.size)),void 0!==i.styles&&a.setAttributeNS(null,"style",i.styles),a.setAttributeNS(null,"class",i.className+" vis-point"),s){var u=e.getSVGElement("text",r,o);s.xOffset&&(t+=s.xOffset),s.yOffset&&(n+=s.yOffset),s.content&&(u.textContent=s.content),s.className&&u.setAttributeNS(null,"class",s.className+" vis-label"),u.setAttributeNS(null,"x",t),u.setAttributeNS(null,"y",n)}return a},e.drawBar=function(t,n,i,r,o,s,a,u){if(0!=r){r<0&&(r*=-1,n-=r);var h=e.getSVGElement("rect",s,a);h.setAttributeNS(null,"x",t-.5*i),h.setAttributeNS(null,"y",n),h.setAttributeNS(null,"width",i),h.setAttributeNS(null,"height",r),h.setAttributeNS(null,"class",o),u&&h.setAttributeNS(null,"style",u)}}},function(t,e,n){var i=n(0),r=i.JSON||(i.JSON={stringify:JSON.stringify});t.exports=function(t){return r.stringify.apply(r,arguments)}},function(t,e,n){function i(t,e,n){if(!(this instanceof i))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.dataGroup=new w,this.dataPoints=null,this.create(),p.setDefaults(i.DEFAULTS,this),this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.setOptions(n),this.setData(e)}function r(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function o(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var s=n(102),a=function(t){return t&&t.__esModule?t:{default:t}}(s),u=n(106),h=n(3),l=n(13),c=n(49),d=n(50),f=n(51),p=n(52),m=n(54).default,v=n(54),y=v.printStyle,g=n(116),_=g.allOptions,w=n(117);i.STYLE=p.STYLE;i.DEFAULTS={width:"400px",height:"400px",filterLabel:"time",legendLabel:"value",xLabel:"x",yLabel:"y",zLabel:"z",xValueLabel:function(t){return t},yValueLabel:function(t){return t},zValueLabel:function(t){return t},showXAxis:!0,showYAxis:!0,showZAxis:!0,showGrid:!0,showPerspective:!0,showShadow:!1,keepAspectRatio:!0,verticalRatio:.5,dotSizeRatio:.02,dotSizeMinFraction:.5,dotSizeMaxFraction:2.5,showAnimationControls:void 0,animationInterval:1e3,animationPreload:!1,animationAutoStart:void 0,axisColor:"#4D4D4D",gridColor:"#D3D3D3",xCenter:"55%",yCenter:"50%",style:i.STYLE.DOT,tooltip:!1,tooltipStyle:{content:{padding:"10px",border:"1px solid #4d4d4d",color:"#1a1a1a",background:"rgba(255,255,255,0.7)",borderRadius:"2px",boxShadow:"5px 5px 10px rgba(128,128,128,0.5)"},line:{height:"40px",width:"0",borderLeft:"1px solid #4d4d4d"},dot:{height:"0",width:"0",border:"5px solid #4d4d4d",borderRadius:"5px"}},dataColor:{fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},cameraPosition:{horizontal:1,vertical:.5,distance:1.7},showLegend:void 0,backgroundColor:void 0,xBarWidth:void 0,yBarWidth:void 0,valueMin:void 0,valueMax:void 0,xMin:void 0,xMax:void 0,xStep:void 0,yMin:void 0,yMax:void 0,yStep:void 0,zMin:void 0,zMax:void 0,zStep:void 0},u(i.prototype),i.prototype._setScale=function(){this.scale=new l(1/this.xRange.range(),1/this.yRange.range(),1/this.zRange.range()),this.keepAspectRatio&&(this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y),this.scale.z*=this.verticalRatio,void 0!==this.valueRange&&(this.scale.value=1/this.valueRange.range());var t=this.xRange.center()*this.scale.x,e=this.yRange.center()*this.scale.y,n=this.zRange.center()*this.scale.z;this.camera.setArmLocation(t,e,n)},i.prototype._convert3Dto2D=function(t){var e=this._convertPointToTranslation(t);return this._convertTranslationToScreen(e)},i.prototype._convertPointToTranslation=function(t){var e=this.camera.getCameraLocation(),n=this.camera.getCameraRotation(),i=t.x*this.scale.x,r=t.y*this.scale.y,o=t.z*this.scale.z,s=e.x,a=e.y,u=e.z,h=Math.sin(n.x),c=Math.cos(n.x),d=Math.sin(n.y),f=Math.cos(n.y),p=Math.sin(n.z),m=Math.cos(n.z);return new l(f*(p*(r-a)+m*(i-s))-d*(o-u),h*(f*(o-u)+d*(p*(r-a)+m*(i-s)))+c*(m*(r-a)-p*(i-s)),c*(f*(o-u)+d*(p*(r-a)+m*(i-s)))-h*(m*(r-a)-p*(i-s)))},i.prototype._convertTranslationToScreen=function(t){var e,n,i=this.eye.x,r=this.eye.y,o=this.eye.z,s=t.x,a=t.y,u=t.z;return this.showPerspective?(e=o/u*(s-i),n=o/u*(a-r)):(e=s*(-o/this.camera.getArmLength()),n=a*(-o/this.camera.getArmLength())),new c(this.currentXCenter+e*this.frame.canvas.clientWidth,this.currentYCenter-n*this.frame.canvas.clientWidth)},i.prototype._calcTranslations=function(t){for(var e=0;e<t.length;e++){var n=t[e];n.trans=this._convertPointToTranslation(n.point),n.screen=this._convertTranslationToScreen(n.trans);var i=this._convertPointToTranslation(n.bottom);n.dist=this.showPerspective?i.length():-i.z}var r=function(t,e){return e.dist-t.dist};t.sort(r)},i.prototype._initializeRanges=function(){var t=this.dataGroup;this.xRange=t.xRange,this.yRange=t.yRange,this.zRange=t.zRange,this.valueRange=t.valueRange,this.xStep=t.xStep,this.yStep=t.yStep,this.zStep=t.zStep,this.xBarWidth=t.xBarWidth,this.yBarWidth=t.yBarWidth,this.colX=t.colX,this.colY=t.colY,this.colZ=t.colZ,this.colValue=t.colValue,this._setScale()},i.prototype.getDataPoints=function(t){for(var e=[],n=0;n<t.length;n++){var i=new l;i.x=t[n][this.colX]||0,i.y=t[n][this.colY]||0,i.z=t[n][this.colZ]||0,i.data=t[n],void 0!==this.colValue&&(i.value=t[n][this.colValue]||0);var r={};r.point=i,r.bottom=new l(i.x,i.y,this.zRange.min),r.trans=void 0,r.screen=void 0,e.push(r)}return e},i.prototype._getDataPoints=function(t){var e,n,r,o,s=[];if(this.style===i.STYLE.GRID||this.style===i.STYLE.SURFACE){var a=this.dataGroup.getDistinctValues(this.colX,t),u=this.dataGroup.getDistinctValues(this.colY,t);s=this.getDataPoints(t);var h=[];for(r=0;r<s.length;r++){o=s[r];var l=a.indexOf(o.point.x),c=u.indexOf(o.point.y);void 0===h[l]&&(h[l]=[]),h[l][c]=o}for(e=0;e<h.length;e++)for(n=0;n<h[e].length;n++)h[e][n]&&(h[e][n].pointRight=e<h.length-1?h[e+1][n]:void 0,h[e][n].pointTop=n<h[e].length-1?h[e][n+1]:void 0,h[e][n].pointCross=e<h.length-1&&n<h[e].length-1?h[e+1][n+1]:void 0)}else if(this._checkValueField(t),s=this.getDataPoints(t),this.style===i.STYLE.LINE)for(r=0;r<s.length;r++)r>0&&(s[r-1].pointNext=s[r]);return s},i.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),this.frame.filter=document.createElement("div"),this.frame.filter.style.position="absolute",this.frame.filter.style.bottom="0px",this.frame.filter.style.left="0px",this.frame.filter.style.width="100%",this.frame.appendChild(this.frame.filter);var e=this,n=function(t){e._onMouseDown(t)},i=function(t){e._onTouchStart(t)},r=function(t){e._onWheel(t)},o=function(t){e._onTooltip(t)},s=function(t){e._onClick(t)};h.addEventListener(this.frame.canvas,"mousedown",n),h.addEventListener(this.frame.canvas,"touchstart",i),h.addEventListener(this.frame.canvas,"mousewheel",r),h.addEventListener(this.frame.canvas,"mousemove",o),h.addEventListener(this.frame.canvas,"click",s),this.containerElement.appendChild(this.frame)},i.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},i.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},i.prototype.animationStart=function(){if(this.animationAutoStart&&this.dataGroup.dataFilter){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()}},i.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},i.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},i.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},i.prototype._readData=function(t){this.dataPoints=this.dataGroup.initializeData(this,t,this.style),this._initializeRanges(),this._redrawFilter()},i.prototype.setData=function(t){void 0!==t&&null!==t&&(this._readData(t),this.redraw(),this.animationStart())},i.prototype.setOptions=function(t){if(void 0!==t){!0===m.validate(t,_)&&console.log("%cErrors have been found in the supplied options object.",y),this.animationStop(),p.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.setData(this.dataGroup.getDataTable()),this.animationStart()}},i.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case i.STYLE.BAR:t=i.prototype._redrawBarGraphPoint;break;case i.STYLE.BARCOLOR:t=i.prototype._redrawBarColorGraphPoint;break;case i.STYLE.BARSIZE:t=i.prototype._redrawBarSizeGraphPoint;break;case i.STYLE.DOT:t=i.prototype._redrawDotGraphPoint;break;case i.STYLE.DOTLINE:t=i.prototype._redrawDotLineGraphPoint;break;case i.STYLE.DOTCOLOR:t=i.prototype._redrawDotColorGraphPoint;break;case i.STYLE.DOTSIZE:t=i.prototype._redrawDotSizeGraphPoint;break;case i.STYLE.SURFACE:t=i.prototype._redrawSurfaceGraphPoint;break;case i.STYLE.GRID:t=i.prototype._redrawGridGraphPoint;break;case i.STYLE.LINE:t=i.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},i.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},i.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},i.prototype._redrawClear=function(){var t=this.frame.canvas;t.getContext("2d").clearRect(0,0,t.width,t.height)},i.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},i.prototype._getLegendWidth=function(){var t;if(this.style===i.STYLE.DOTSIZE){t=this._dotSize()*this.dotSizeMaxFraction}else t=this.style===i.STYLE.BARSIZE?this.xBarWidth:20;return t},i.prototype._redrawLegend=function(){if(!0===this.showLegend&&this.style!==i.STYLE.LINE&&this.style!==i.STYLE.BARSIZE){var t=this.style===i.STYLE.BARSIZE||this.style===i.STYLE.DOTSIZE,e=this.style===i.STYLE.DOTSIZE||this.style===i.STYLE.DOTCOLOR||this.style===i.STYLE.BARCOLOR,n=Math.max(.25*this.frame.clientHeight,100),r=this.margin,o=this._getLegendWidth(),s=this.frame.clientWidth-this.margin,a=s-o,u=r+n,h=this._getContext();if(h.lineWidth=1,h.font="14px arial",!1===t){var l,d=n;for(l=0;l<d;l++){var p=(l-0)/(d-0),m=240*p,v=this._hsv2rgb(m,1,1);h.strokeStyle=v,h.beginPath(),h.moveTo(a,r+l),h.lineTo(s,r+l),h.stroke()}h.strokeStyle=this.axisColor,h.strokeRect(a,r,o,n)}else{var y;this.style===i.STYLE.DOTSIZE?y=o*(this.dotSizeMinFraction/this.dotSizeMaxFraction):(this.style,i.STYLE.BARSIZE),h.strokeStyle=this.axisColor,h.fillStyle=this.dataColor.fill,h.beginPath(),h.moveTo(a,r),h.lineTo(s,r),h.lineTo(a+y,u),h.lineTo(a,u),h.closePath(),h.fill(),h.stroke()}var g=e?this.valueRange.min:this.zRange.min,_=e?this.valueRange.max:this.zRange.max,w=new f(g,_,(_-g)/5,!0);w.start(!0);for(var b,x;!w.end();)l=u-(w.getCurrent()-g)/(_-g)*n,b=new c(a-5,l),x=new c(a,l),this._line(h,b,x),h.textAlign="right",h.textBaseline="middle",h.fillStyle=this.axisColor,h.fillText(w.getCurrent(),a-10,l),w.next();h.textAlign="right",h.textBaseline="top";var S=this.legendLabel;h.fillText(S,s,u+this.margin)}},i.prototype._redrawFilter=function(){var t=this.dataGroup.dataFilter,e=this.frame.filter;if(e.innerHTML="",!t)return void(e.slider=void 0);var n={visible:this.showAnimationControls},i=new d(e,n);e.slider=i,e.style.padding="10px",i.setValues(t.values),i.setPlayInterval(this.animationInterval);var r=this,o=function(){var t=r.dataGroup.dataFilter,e=i.getIndex();t.selectValue(e),r.dataPoints=t._getDataPoints(),r.redraw()};i.setOnChangeCallback(o)},i.prototype._redrawSlider=function(){void 0!==this.frame.filter.slider&&this.frame.filter.slider.redraw()},i.prototype._redrawInfo=function(){var t=this.dataGroup.getInfo();if(void 0!==t){var e=this._getContext();e.font="14px arial",e.lineStyle="gray",e.fillStyle="gray",e.textAlign="left",e.textBaseline="top";var n=this.margin,i=this.margin;e.fillText(t,n,i)}},i.prototype._line=function(t,e,n,i){void 0!==i&&(t.strokeStyle=i),t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(n.x,n.y),t.stroke()},i.prototype.drawAxisLabelX=function(t,e,n,i,r){void 0===r&&(r=0);var o=this._convert3Dto2D(e);Math.cos(2*i)>0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},i.prototype.drawAxisLabelY=function(t,e,n,i,r){void 0===r&&(r=0);var o=this._convert3Dto2D(e);Math.cos(2*i)<0?(t.textAlign="center",t.textBaseline="top",o.y+=r):Math.sin(2*i)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(n,o.x,o.y)},i.prototype.drawAxisLabelZ=function(t,e,n,i){void 0===i&&(i=0);var r=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(n,r.x-i,r.y)},i.prototype._line3d=function(t,e,n,i){var r=this._convert3Dto2D(e),o=this._convert3Dto2D(n);this._line(t,r,o,i)},i.prototype._redrawAxis=function(){var t,e,n,i,r,o,s,a,u,h,d,p=this._getContext();p.font=24/this.camera.getArmLength()+"px arial";var m,v=.025/this.scale.x,y=.025/this.scale.y,g=5/this.camera.getArmLength(),_=this.camera.getArmRotation().horizontal,w=new c(Math.cos(_),Math.sin(_)),b=this.xRange,x=this.yRange,S=this.zRange;for(p.lineWidth=1,i=void 0===this.defaultXStep,n=new f(b.min,b.max,this.xStep,i),n.start(!0);!n.end();){var M=n.getCurrent();if(this.showGrid?(t=new l(M,x.min,S.min),e=new l(M,x.max,S.min),this._line3d(p,t,e,this.gridColor)):this.showXAxis&&(t=new l(M,x.min,S.min),e=new l(M,x.min+v,S.min),this._line3d(p,t,e,this.axisColor),t=new l(M,x.max,S.min),e=new l(M,x.max-v,S.min),this._line3d(p,t,e,this.axisColor)),this.showXAxis){s=w.x>0?x.min:x.max,m=new l(M,s,S.min);var T="  "+this.xValueLabel(M)+"  ";this.drawAxisLabelX(p,m,T,_,g)}n.next()}for(p.lineWidth=1,i=void 0===this.defaultYStep,n=new f(x.min,x.max,this.yStep,i),n.start(!0);!n.end();){var D=n.getCurrent();if(this.showGrid?(t=new l(b.min,D,S.min),e=new l(b.max,D,S.min),this._line3d(p,t,e,this.gridColor)):this.showYAxis&&(t=new l(b.min,D,S.min),e=new l(b.min+y,D,S.min),this._line3d(p,t,e,this.axisColor),t=new l(b.max,D,S.min),e=new l(b.max-y,D,S.min),this._line3d(p,t,e,this.axisColor)),this.showYAxis){o=w.y>0?b.min:b.max,m=new l(o,D,S.min);var k="  "+this.yValueLabel(D)+"  ";this.drawAxisLabelY(p,m,k,_,g)}n.next()}if(this.showZAxis){for(p.lineWidth=1,i=void 0===this.defaultZStep,n=new f(S.min,S.max,this.zStep,i),n.start(!0),o=w.x>0?b.min:b.max,s=w.y<0?x.min:x.max;!n.end();){var O=n.getCurrent(),E=new l(o,s,O),C=this._convert3Dto2D(E);e=new c(C.x-g,C.y),this._line(p,C,e,this.axisColor);var P=this.zValueLabel(O)+" ";this.drawAxisLabelZ(p,E,P,5),n.next()}p.lineWidth=1,t=new l(o,s,S.min),e=new l(o,s,S.max),this._line3d(p,t,e,this.axisColor)}if(this.showXAxis){var L,R;p.lineWidth=1,L=new l(b.min,x.min,S.min),R=new l(b.max,x.min,S.min),this._line3d(p,L,R,this.axisColor),L=new l(b.min,x.max,S.min),R=new l(b.max,x.max,S.min),this._line3d(p,L,R,this.axisColor)}this.showYAxis&&(p.lineWidth=1,t=new l(b.min,x.min,S.min),e=new l(b.min,x.max,S.min),this._line3d(p,t,e,this.axisColor),t=new l(b.max,x.min,S.min),e=new l(b.max,x.max,S.min),this._line3d(p,t,e,this.axisColor));var A=this.xLabel;A.length>0&&this.showXAxis&&(d=.1/this.scale.y,o=(b.max+3*b.min)/4,s=w.x>0?x.min-d:x.max+d,r=new l(o,s,S.min),this.drawAxisLabelX(p,r,A,_));var Y=this.yLabel;Y.length>0&&this.showYAxis&&(h=.1/this.scale.x,o=w.y>0?b.min-h:b.max+h,s=(x.max+3*x.min)/4,r=new l(o,s,S.min),this.drawAxisLabelY(p,r,Y,_));var I=this.zLabel;I.length>0&&this.showZAxis&&(u=30,o=w.x>0?b.min:b.max,s=w.y<0?x.min:x.max,a=(S.max+3*S.min)/4,r=new l(o,s,a),this.drawAxisLabelZ(p,r,I,u))},i.prototype._hsv2rgb=function(t,e,n){var i,r,o,s,a,u;switch(s=n*e,a=Math.floor(t/60),u=s*(1-Math.abs(t/60%2-1)),a){case 0:i=s,r=u,o=0;break;case 1:i=u,r=s,o=0;break;case 2:i=0,r=s,o=u;break;case 3:i=0,r=u,o=s;break;case 4:i=u,r=0,o=s;break;case 5:i=s,r=0,o=u;break;default:i=0,r=0,o=0}return"RGB("+parseInt(255*i)+","+parseInt(255*r)+","+parseInt(255*o)+")"},i.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-this.eye.z/this.camera.getArmLength()*this.dataColor.strokeWidth:this.dataColor.strokeWidth},i.prototype._redrawBar=function(t,e,n,i,r,o){var s,a=this,u=e.point,h=this.zRange.min,c=[{point:new l(u.x-n,u.y-i,u.z)},{point:new l(u.x+n,u.y-i,u.z)},{point:new l(u.x+n,u.y+i,u.z)},{point:new l(u.x-n,u.y+i,u.z)}],d=[{point:new l(u.x-n,u.y-i,h)},{point:new l(u.x+n,u.y-i,h)},{point:new l(u.x+n,u.y+i,h)},{point:new l(u.x-n,u.y+i,h)}];c.forEach(function(t){t.screen=a._convert3Dto2D(t.point)}),d.forEach(function(t){t.screen=a._convert3Dto2D(t.point)});var f=[{corners:c,center:l.avg(d[0].point,d[2].point)},{corners:[c[0],c[1],d[1],d[0]],center:l.avg(d[1].point,d[0].point)},{corners:[c[1],c[2],d[2],d[1]],center:l.avg(d[2].point,d[1].point)},{corners:[c[2],c[3],d[3],d[2]],center:l.avg(d[3].point,d[2].point)},{corners:[c[3],c[0],d[0],d[3]],center:l.avg(d[0].point,d[3].point)}];e.surfaces=f;for(var p=0;p<f.length;p++){s=f[p];var m=this._convertPointToTranslation(s.center);s.dist=this.showPerspective?m.length():-m.z}f.sort(function(t,e){var n=e.dist-t.dist;return n||(t.corners===c?1:e.corners===c?-1:0)}),t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=o,t.fillStyle=r;for(var v=2;v<f.length;v++)s=f[v],this._polygon(t,s.corners)},i.prototype._polygon=function(t,e,n,i){if(!(e.length<2)){void 0!==n&&(t.fillStyle=n),void 0!==i&&(t.strokeStyle=i),t.beginPath(),t.moveTo(e[0].screen.x,e[0].screen.y);for(var r=1;r<e.length;++r){var o=e[r];t.lineTo(o.screen.x,o.screen.y)}t.closePath(),t.fill(),t.stroke()}},i.prototype._drawCircle=function(t,e,n,i,r){var o=this._calcRadius(e,r);t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=i,t.fillStyle=n,t.beginPath(),t.arc(e.screen.x,e.screen.y,o,0,2*Math.PI,!0),t.fill(),t.stroke()},i.prototype._getColorsRegular=function(t){var e=240*(1-(t.point.z-this.zRange.min)*this.scale.z/this.verticalRatio);return{fill:this._hsv2rgb(e,1,1),border:this._hsv2rgb(e,1,.8)}},i.prototype._getColorsColor=function(t){var e,n;if("string"==typeof t.point.value)e=t.point.value,n=t.point.value;else{var i=240*(1-(t.point.value-this.valueRange.min)*this.scale.value);e=this._hsv2rgb(i,1,1),n=this._hsv2rgb(i,1,.8)}return{fill:e,border:n}},i.prototype._getColorsSize=function(){return{fill:this.dataColor.fill,border:this.dataColor.stroke}},i.prototype._calcRadius=function(t,e){void 0===e&&(e=this._dotSize());var n;return n=this.showPerspective?e/-t.trans.z:e*(-this.eye.z/this.camera.getArmLength()),n<0&&(n=0),n},i.prototype._redrawBarGraphPoint=function(t,e){var n=this.xBarWidth/2,i=this.yBarWidth/2,r=this._getColorsRegular(e);this._redrawBar(t,e,n,i,r.fill,r.border)},i.prototype._redrawBarColorGraphPoint=function(t,e){var n=this.xBarWidth/2,i=this.yBarWidth/2,r=this._getColorsColor(e);this._redrawBar(t,e,n,i,r.fill,r.border)},i.prototype._redrawBarSizeGraphPoint=function(t,e){var n=(e.point.value-this.valueRange.min)/this.valueRange.range(),i=this.xBarWidth/2*(.8*n+.2),r=this.yBarWidth/2*(.8*n+.2),o=this._getColorsSize();this._redrawBar(t,e,i,r,o.fill,o.border)},i.prototype._redrawDotGraphPoint=function(t,e){var n=this._getColorsRegular(e);this._drawCircle(t,e,n.fill,n.border)},i.prototype._redrawDotLineGraphPoint=function(t,e){var n=this._convert3Dto2D(e.bottom);t.lineWidth=1,this._line(t,n,e.screen,this.gridColor),this._redrawDotGraphPoint(t,e)},i.prototype._redrawDotColorGraphPoint=function(t,e){var n=this._getColorsColor(e);this._drawCircle(t,e,n.fill,n.border)},i.prototype._redrawDotSizeGraphPoint=function(t,e){var n=this._dotSize(),i=(e.point.value-this.valueRange.min)/this.valueRange.range(),r=n*this.dotSizeMinFraction,o=n*this.dotSizeMaxFraction-r,s=r+o*i,a=this._getColorsSize();this._drawCircle(t,e,a.fill,a.border,s)},i.prototype._redrawSurfaceGraphPoint=function(t,e){var n=e.pointRight,i=e.pointTop,r=e.pointCross;if(void 0!==e&&void 0!==n&&void 0!==i&&void 0!==r){var o,s,a=!0;if(this.showGrayBottom||this.showShadow){var u=l.subtract(r.trans,e.trans),h=l.subtract(i.trans,n.trans),c=l.crossProduct(u,h),d=c.length();a=c.z>0}if(a){var f,p=(e.point.z+n.point.z+i.point.z+r.point.z)/4,m=240*(1-(p-this.zRange.min)*this.scale.z/this.verticalRatio);this.showShadow?(f=Math.min(1+c.x/d/2,1),o=this._hsv2rgb(m,1,f),s=o):(f=1,o=this._hsv2rgb(m,1,f),s=this.axisColor)}else o="gray",s=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var v=[e,n,r,i];this._polygon(t,v,o,s)}},i.prototype._drawGridLine=function(t,e,n){if(void 0!==e&&void 0!==n){var i=(e.point.z+n.point.z)/2,r=240*(1-(i-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(r,1,1),this._line(t,e.screen,n.screen)}},i.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},i.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},i.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t<this.dataPoints.length;t++){var n=this.dataPoints[t];this._pointDrawingMethod.call(this,e,n)}},i.prototype._storeMousePosition=function(t){this.startMouseX=r(t),this.startMouseY=o(t),this._startCameraOffset=this.camera.getOffset()},i.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this._storeMousePosition(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},h.addEventListener(document,"mousemove",e.onmousemove),h.addEventListener(document,"mouseup",e.onmouseup),h.preventDefault(t)}},i.prototype._onMouseMove=function(t){this.moving=!0,t=t||window.event;var e=parseFloat(r(t))-this.startMouseX,n=parseFloat(o(t))-this.startMouseY;if(t&&!0===t.ctrlKey){var i=.5*this.frame.clientWidth,s=.5*this.frame.clientHeight,a=(this._startCameraOffset.x||0)-e/i*this.camera.armLength*.8,u=(this._startCameraOffset.y||0)+n/s*this.camera.armLength*.8;this.camera.setOffset(a,u),this._storeMousePosition(t)}else{var l=this.startArmRotation.horizontal+e/200,c=this.startArmRotation.vertical+n/200,d=Math.sin(4/360*2*Math.PI);Math.abs(Math.sin(l))<d&&(l=Math.round(l/Math.PI)*Math.PI-.001),Math.abs(Math.cos(l))<d&&(l=(Math.round(l/Math.PI-.5)+.5)*Math.PI-.001),Math.abs(Math.sin(c))<d&&(c=Math.round(c/Math.PI)*Math.PI),Math.abs(Math.cos(c))<d&&(c=(Math.round(c/Math.PI-.5)+.5)*Math.PI),this.camera.setArmRotation(l,c)}this.redraw();var f=this.getCameraPosition();this.emit("cameraPositionChange",f),h.preventDefault(t)},i.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",this.leftButtonDown=!1,h.removeEventListener(document,"mousemove",this.onmousemove),h.removeEventListener(document,"mouseup",this.onmouseup),h.preventDefault(t)},i.prototype._onClick=function(t){if(this.onclick_callback){if(this.moving)this.moving=!1;else{var e=this.frame.getBoundingClientRect(),n=r(t)-e.left,i=o(t)-e.top,s=this._dataPointFromXY(n,i);s&&this.onclick_callback(s.point.data)}h.preventDefault(t)}},i.prototype._onTooltip=function(t){var e=this.frame.getBoundingClientRect(),n=r(t)-e.left,i=o(t)-e.top;if(this.showTooltip){if(this.tooltipTimeout&&clearTimeout(this.tooltipTimeout),this.leftButtonDown)return void this._hideTooltip();if(this.tooltip&&this.tooltip.dataPoint){var s=this._dataPointFromXY(n,i);s!==this.tooltip.dataPoint&&(s?this._showTooltip(s):this._hideTooltip())}else{var a=this;this.tooltipTimeout=setTimeout(function(){a.tooltipTimeout=null;var t=a._dataPointFromXY(n,i);t&&a._showTooltip(t)},300)}}},i.prototype._onTouchStart=function(t){this.touchDown=!0;var e=this;this.ontouchmove=function(t){e._onTouchMove(t)},this.ontouchend=function(t){e._onTouchEnd(t)},h.addEventListener(document,"touchmove",e.ontouchmove),h.addEventListener(document,"touchend",e.ontouchend),this._onMouseDown(t)},i.prototype._onTouchMove=function(t){this._onMouseMove(t)},i.prototype._onTouchEnd=function(t){this.touchDown=!1,h.removeEventListener(document,"touchmove",this.ontouchmove),h.removeEventListener(document,"touchend",this.ontouchend),this._onMouseUp(t)},i.prototype._onWheel=function(t){t||(t=window.event);var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var n=this.camera.getArmLength(),i=n*(1-e/10);this.camera.setArmLength(i),this.redraw(),this._hideTooltip()}var r=this.getCameraPosition();this.emit("cameraPositionChange",r),h.preventDefault(t)},i.prototype._insideTriangle=function(t,e){function n(t){return t>0?1:t<0?-1:0}var i=e[0],r=e[1],o=e[2],s=n((r.x-i.x)*(t.y-i.y)-(r.y-i.y)*(t.x-i.x)),a=n((o.x-r.x)*(t.y-r.y)-(o.y-r.y)*(t.x-r.x)),u=n((i.x-o.x)*(t.y-o.y)-(i.y-o.y)*(t.x-o.x));return!(0!=s&&0!=a&&s!=a||0!=a&&0!=u&&a!=u||0!=s&&0!=u&&s!=u)},i.prototype._dataPointFromXY=function(t,e){var n,r=null,o=null,s=null,a=new c(t,e);if(this.style===i.STYLE.BAR||this.style===i.STYLE.BARCOLOR||this.style===i.STYLE.BARSIZE)for(n=this.dataPoints.length-1;n>=0;n--){r=this.dataPoints[n];var u=r.surfaces;if(u)for(var h=u.length-1;h>=0;h--){var l=u[h],d=l.corners,f=[d[0].screen,d[1].screen,d[2].screen],p=[d[2].screen,d[3].screen,d[0].screen];if(this._insideTriangle(a,f)||this._insideTriangle(a,p))return r}}else for(n=0;n<this.dataPoints.length;n++){r=this.dataPoints[n];var m=r.screen;if(m){var v=Math.abs(t-m.x),y=Math.abs(e-m.y),g=Math.sqrt(v*v+y*y);(null===s||g<s)&&g<100&&(s=g,o=r)}}return o},i.prototype.hasBars=function(t){return t==i.STYLE.BAR||t==i.STYLE.BARCOLOR||t==i.STYLE.BARSIZE},i.prototype._showTooltip=function(t){var e,n,i;this.tooltip?(e=this.tooltip.dom.content,n=this.tooltip.dom.line,i=this.tooltip.dom.dot):(e=document.createElement("div"),(0,a.default)(e.style,{},this.tooltipStyle.content),e.style.position="absolute",n=document.createElement("div"),(0,a.default)(n.style,{},this.tooltipStyle.line),n.style.position="absolute",i=document.createElement("div"),(0,a.default)(i.style,{},this.tooltipStyle.dot),i.style.position="absolute",this.tooltip={dataPoint:null,dom:{content:e,line:n,dot:i}}),this._hideTooltip(),this.tooltip.dataPoint=t,"function"==typeof this.showTooltip?e.innerHTML=this.showTooltip(t.point):e.innerHTML="<table><tr><td>"+this.xLabel+":</td><td>"+t.point.x+"</td></tr><tr><td>"+this.yLabel+":</td><td>"+t.point.y+"</td></tr><tr><td>"+this.zLabel+":</td><td>"+t.point.z+"</td></tr></table>",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(n),this.frame.appendChild(i);var r=e.offsetWidth,o=e.offsetHeight,s=n.offsetHeight,u=i.offsetWidth,h=i.offsetHeight,l=t.screen.x-r/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-r),n.style.left=t.screen.x+"px",n.style.top=t.screen.y-s+"px",e.style.left=l+"px",e.style.top=t.screen.y-s-o+"px",i.style.left=t.screen.x-u/2+"px",i.style.top=t.screen.y-h/2+"px"},i.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},i.prototype.setCameraPosition=function(t){p.setCameraPosition(t,this),this.redraw()},i.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=i},function(t,e,n){t.exports={default:n(103),__esModule:!0}},function(t,e,n){n(104),t.exports=n(0).Object.assign},function(t,e,n){var i=n(4);i(i.S+i.F,"Object",{assign:n(105)})},function(t,e,n){var i=n(12),r=n(34),o=n(20),s=n(31),a=n(38),u=Object.assign;t.exports=!u||n(10)(function(){var t={},e={},n=Symbol(),i="abcdefghijklmnopqrst";return t[n]=7,i.split("").forEach(function(t){e[t]=t}),7!=u({},t)[n]||Object.keys(u({},e)).join("")!=i})?function(t,e){for(var n=s(t),u=arguments.length,h=1,l=r.f,c=o.f;u>h;)for(var d,f=a(arguments[h++]),p=l?i(f).concat(l(f)):i(f),m=p.length,v=0;m>v;)c.call(f,d=p[v++])&&(n[d]=f[d]);return n}:u},function(t,e){function n(t){if(t)return i(t)}function i(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}t.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},n.prototype.once=function(t,e){function n(){i.off(t,n),e.apply(this,arguments)}var i=this;return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i,r=0;r<n.length;r++)if((i=n[r])===e||i.fn===e){n.splice(r,1);break}return this},n.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),n=this._callbacks[t];if(n){n=n.slice(0);for(var i=0,r=n.length;i<r;++i)n[i].apply(this,e)}return this},n.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},n.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,n){t.exports={default:n(108),__esModule:!0}},function(t,e,n){n(109),t.exports=n(0).Math.sign},function(t,e,n){var i=n(4);i(i.S,"Math",{sign:n(110)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,n){e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,n){e.__esModule=!0;var i=n(113),r=function(t){return t&&t.__esModule?t:{default:t}}(i);e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),(0,r.default)(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}()},function(t,e,n){t.exports={default:n(114),__esModule:!0}},function(t,e,n){n(115);var i=n(0).Object;t.exports=function(t,e,n){return i.defineProperty(t,e,n)}},function(t,e,n){var i=n(4);i(i.S+i.F*!n(6),"Object",{defineProperty:n(5).f})},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var i="string",r="boolean",o="number",s={fill:{string:i},stroke:{string:i},strokeWidth:{number:o},__type__:{string:i,object:"object",undefined:"undefined"}},a={animationAutoStart:{boolean:r,undefined:"undefined"},animationInterval:{number:o},animationPreload:{boolean:r},axisColor:{string:i},backgroundColor:s,xBarWidth:{number:o,undefined:"undefined"},yBarWidth:{number:o,undefined:"undefined"},cameraPosition:{distance:{number:o},horizontal:{number:o},vertical:{number:o},__type__:{object:"object"}},xCenter:{string:i},yCenter:{string:i},dataColor:s,dotSizeMinFraction:{number:o},dotSizeMaxFraction:{number:o},dotSizeRatio:{number:o},filterLabel:{string:i},gridColor:{string:i},onclick:{function:"function"},keepAspectRatio:{boolean:r},xLabel:{string:i},yLabel:{string:i},zLabel:{string:i},legendLabel:{string:i},xMin:{number:o,undefined:"undefined"},yMin:{number:o,undefined:"undefined"},zMin:{number:o,undefined:"undefined"},xMax:{number:o,undefined:"undefined"},yMax:{number:o,undefined:"undefined"},zMax:{number:o,undefined:"undefined"},showAnimationControls:{boolean:r,undefined:"undefined"},showGrid:{boolean:r},showLegend:{boolean:r,undefined:"undefined"},showPerspective:{boolean:r},showShadow:{boolean:r},showXAxis:{boolean:r},showYAxis:{boolean:r},showZAxis:{boolean:r},xStep:{number:o,undefined:"undefined"},yStep:{number:o,undefined:"undefined"},zStep:{number:o,undefined:"undefined"},style:{number:o,string:["bar","bar-color","bar-size","dot","dot-line","dot-color","dot-size","line","grid","surface"]},tooltip:{boolean:r,function:"function"},tooltipStyle:{content:{color:{string:i},background:{string:i},border:{string:i},borderRadius:{string:i},boxShadow:{string:i},padding:{string:i},__type__:{object:"object"}},line:{borderLeft:{string:i},height:{string:i},width:{string:i},__type__:{object:"object"}},dot:{border:{string:i},borderRadius:{string:i},height:{string:i},width:{string:i},__type__:{object:"object"}},__type__:{object:"object"}},xValueLabel:{function:"function"},yValueLabel:{function:"function"},zValueLabel:{function:"function"},valueMax:{number:o,undefined:"undefined"},valueMin:{number:o,undefined:"undefined"},verticalRatio:{number:o},height:{string:i},width:{string:i},__type__:{object:"object"}};e.allOptions=a},function(t,e,n){function i(){this.dataTable=null}var r=n(35),o=n(36),s=n(118),a=n(55),u=n(52),h=n(13);i.prototype.initializeData=function(t,e,n){if(void 0!==e){Array.isArray(e)&&(e=new r(e));var i;if(!(e instanceof r||e instanceof o))throw new Error("Array, DataSet, or DataView expected");if(i=e.get(),0!=i.length){this.style=n,this.dataSet&&this.dataSet.off("*",this._onChange),this.dataSet=e,this.dataTable=i;var s=this;this._onChange=function(){t.setData(s.dataSet)},this.dataSet.on("*",this._onChange),this.colX="x",this.colY="y",this.colZ="z";var u=t.hasBars(n);if(u&&(void 0!==t.defaultXBarWidth?this.xBarWidth=t.defaultXBarWidth:this.xBarWidth=this.getSmallestDifference(i,this.colX)||1,void 0!==t.defaultYBarWidth?this.yBarWidth=t.defaultYBarWidth:this.yBarWidth=this.getSmallestDifference(i,this.colY)||1),this._initializeRange(i,this.colX,t,u),this._initializeRange(i,this.colY,t,u),this._initializeRange(i,this.colZ,t,!1),i[0].hasOwnProperty("style")){this.colValue="style";var h=this.getColumnRange(i,this.colValue);this._setRangeDefaults(h,t.defaultValueMin,t.defaultValueMax),this.valueRange=h}this.getDataTable()[0].hasOwnProperty("filter")&&void 0===this.dataFilter&&(this.dataFilter=new a(this,"filter",t),this.dataFilter.setOnLoadCallback(function(){t.redraw()}));return this.dataFilter?this.dataFilter._getDataPoints():this._getDataPoints(this.getDataTable())}}},i.prototype._collectRangeSettings=function(t,e){if(-1==["x","y","z"].indexOf(t))throw new Error("Column '"+t+"' invalid");var n=t.toUpperCase();return{barWidth:this[t+"BarWidth"],min:e["default"+n+"Min"],max:e["default"+n+"Max"],step:e["default"+n+"Step"],range_label:t+"Range",step_label:t+"Step"}},i.prototype._initializeRange=function(t,e,n,i){var r=this._collectRangeSettings(e,n),o=this.getColumnRange(t,e);i&&"z"!=e&&o.expand(r.barWidth/2),this._setRangeDefaults(o,r.min,r.max),this[r.range_label]=o,this[r.step_label]=void 0!==r.step?r.step:o.range()/5},i.prototype.getDistinctValues=function(t,e){void 0===e&&(e=this.dataTable);for(var n=[],i=0;i<e.length;i++){var r=e[i][t]||0;-1===n.indexOf(r)&&n.push(r)}return n.sort(function(t,e){return t-e})},i.prototype.getSmallestDifference=function(t,e){for(var n=this.getDistinctValues(t,e),i=null,r=1;r<n.length;r++){var o=n[r]-n[r-1];(null==i||i>o)&&(i=o)}return i},i.prototype.getColumnRange=function(t,e){for(var n=new s,i=0;i<t.length;i++){var r=t[i][e];n.adjust(r)}return n},i.prototype.getNumberOfRows=function(){return this.dataTable.length},i.prototype._setRangeDefaults=function(t,e,n){void 0!==e&&(t.min=e),void 0!==n&&(t.max=n),t.max<=t.min&&(t.max=t.min+1)},i.prototype.getDataTable=function(){return this.dataTable},i.prototype.getDataSet=function(){return this.dataSet},i.prototype.getDataPoints=function(t){for(var e=[],n=0;n<t.length;n++){var i=new h;i.x=t[n][this.colX]||0,i.y=t[n][this.colY]||0,i.z=t[n][this.colZ]||0,i.data=t[n],void 0!==this.colValue&&(i.value=t[n][this.colValue]||0);var r={};r.point=i,r.bottom=new h(i.x,i.y,this.zRange.min),r.trans=void 0,r.screen=void 0,e.push(r)}return e},i.prototype.initDataAsMatrix=function(t){var e,n,i,r,o=this.getDistinctValues(this.colX,t),s=this.getDistinctValues(this.colY,t),a=this.getDataPoints(t),u=[];for(i=0;i<a.length;i++){r=a[i];var h=o.indexOf(r.point.x),l=s.indexOf(r.point.y);void 0===u[h]&&(u[h]=[]),u[h][l]=r}for(e=0;e<u.length;e++)for(n=0;n<u[e].length;n++)u[e][n]&&(u[e][n].pointRight=e<u.length-1?u[e+1][n]:void 0,u[e][n].pointTop=n<u[e].length-1?u[e][n+1]:void 0,u[e][n].pointCross=e<u.length-1&&n<u[e].length-1?u[e+1][n+1]:void 0);return a},i.prototype.getInfo=function(){var t=this.dataFilter;if(t)return t.getLabel()+": "+t.getSelectedValue()},i.prototype.reload=function(){this.dataTable&&this.setData(this.dataTable)},i.prototype._getDataPoints=function(t){var e=[];if(this.style===u.STYLE.GRID||this.style===u.STYLE.SURFACE)e=this.initDataAsMatrix(t);else if(this._checkValueField(t),e=this.getDataPoints(t),this.style===u.STYLE.LINE)for(var n=0;n<e.length;n++)n>0&&(e[n-1].pointNext=e[n]);return e},i.prototype._checkValueField=function(t){if(this.style===u.STYLE.BARCOLOR||this.style===u.STYLE.BARSIZE||this.style===u.STYLE.DOTCOLOR||this.style===u.STYLE.DOTSIZE){if(void 0===this.colValue)throw new Error("Expected data to have  field 'style'  for graph style '"+this.style+"'");if(void 0===t[0][this.colValue])throw new Error("Expected data to have  field '"+this.colValue+"'  for graph style '"+this.style+"'")}},t.exports=i},function(t,e,n){function i(){this.min=void 0,this.max=void 0}i.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.max<t)&&(this.max=t))},i.prototype.combine=function(t){this.add(t.min),this.add(t.max)},i.prototype.expand=function(t){if(void 0!==t){var e=this.min-t,n=this.max+t;if(e>n)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=n}},i.prototype.range=function(){return this.max-this.min},i.prototype.center=function(){return(this.min+this.max)/2},t.exports=i},function(t,e,n){function i(){var t=function(){};return{on:t,off:t,destroy:t,emit:t,get:function(e){return{set:t}}}}if("undefined"!=typeof window){var r=n(120),o=window.Hammer||n(121);t.exports=r(o,{preventDefault:"mouse"})}else t.exports=function(){return i()}},function(t,e,n){var i,r,o;!function(n){r=[],i=n,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(function(){var t=null;return function e(n,i){function r(t){return t.match(/[^ ]+/g)}function o(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var n=!1;e.stopPropagation=function(){n=!0};var i=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof i&&(e.srcEvent.stopPropagation=function(){i(),e.stopPropagation()}),e.firstTarget=t;for(var r=t;r&&!n;){var o=r.hammer;if(o)for(var s,a=0;a<o.length;a++)if(s=o[a]._handlers[e.type])for(var u=0;u<s.length&&!n;u++)s[u](e);r=r.parentNode}}var s=i||{preventDefault:!1};if(n.Manager){var a=n,u=function(t,n){var i=Object.create(s);return n&&a.assign(i,n),e(new a(t,i),i)};return a.assign(u,a),u.Manager=function(t,n){var i=Object.create(s);return n&&a.assign(i,n),e(new a.Manager(t,i),i)},u}var h=Object.create(n),l=n.element;return l.hammer||(l.hammer=[]),l.hammer.push(h),n.on("hammer.input",function(e){!0!==s.preventDefault&&s.preventDefault!==e.pointerType||e.preventDefault(),e.isFirst&&(t=e.target)}),h._handlers={},h.on=function(t,e){return r(t).forEach(function(t){var i=h._handlers[t];i||(h._handlers[t]=i=[],n.on(t,o)),i.push(e)}),h},h.off=function(t,e){return r(t).forEach(function(t){var i=h._handlers[t];i&&(i=e?i.filter(function(t){return t!==e}):[],i.length>0?h._handlers[t]=i:(n.off(t,o),delete h._handlers[t]))}),h},h.emit=function(e,i){t=i.target,n.emit(e,i)},h.destroy=function(){var t=n.element.hammer,e=t.indexOf(h);-1!==e&&t.splice(e,1),t.length||delete n.element.hammer,h._handlers={},n.destroy()},h}})},function(t,e,n){var i;/*! Hammer.JS - v2.0.7 - 2016-04-22
+ * http://hammerjs.github.io/
+ *
+ * Copyright (c) 2016 Jorik Tangelder;
+ * Licensed under the MIT license */
+!function(r,o,s,a){function u(t,e,n){return setTimeout(f(t,n),e)}function h(t,e,n){return!!Array.isArray(t)&&(l(t,n[e],n),!0)}function l(t,e,n){var i;if(t)if(t.forEach)t.forEach(e,n);else if(t.length!==a)for(i=0;i<t.length;)e.call(n,t[i],i,t),i++;else for(i in t)t.hasOwnProperty(i)&&e.call(n,t[i],i,t)}function c(t,e,n){var i="DEPRECATED METHOD: "+e+"\n"+n+" AT \n";return function(){var e=new Error("get-stack-trace"),n=e&&e.stack?e.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",o=r.console&&(r.console.warn||r.console.log);return o&&o.call(r.console,i,n),t.apply(this,arguments)}}function d(t,e,n){var i,r=e.prototype;i=t.prototype=Object.create(r),i.constructor=t,i._super=r,n&&pt(i,n)}function f(t,e){return function(){return t.apply(e,arguments)}}function p(t,e){return typeof t==yt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,n){l(w(e),function(e){t.addEventListener(e,n,!1)})}function y(t,e,n){l(w(e),function(e){t.removeEventListener(e,n,!1)})}function g(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function _(t,e){return t.indexOf(e)>-1}function w(t){return t.trim().split(/\s+/g)}function b(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;i<t.length;){if(n&&t[i][n]==e||!n&&t[i]===e)return i;i++}return-1}function x(t){return Array.prototype.slice.call(t,0)}function S(t,e,n){for(var i=[],r=[],o=0;o<t.length;){var s=e?t[o][e]:t[o];b(r,s)<0&&i.push(t[o]),r[o]=s,o++}return n&&(i=e?i.sort(function(t,n){return t[e]>n[e]}):i.sort()),i}function M(t,e){for(var n,i,r=e[0].toUpperCase()+e.slice(1),o=0;o<mt.length;){if(n=mt[o],(i=n?n+r:e)in t)return i;o++}return a}function T(){return St++}function D(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||r}function k(t,e){var n=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){p(t.options.enable,[t])&&n.handler(e)},this.init()}function O(t){var e=t.options.inputClass;return new(e||(Dt?V:kt?U:Tt?X:F))(t,E)}function E(t,e,n){var i=n.pointers.length,r=n.changedPointers.length,o=e&Et&&i-r==0,s=e&(Pt|Lt)&&i-r==0;n.isFirst=!!o,n.isFinal=!!s,o&&(t.session={}),n.eventType=e,C(t,n),t.emit("hammer.input",n),t.recognize(n),t.session.prevInput=n}function C(t,e){var n=t.session,i=e.pointers,r=i.length;n.firstInput||(n.firstInput=R(e)),r>1&&!n.firstMultiple?n.firstMultiple=R(e):1===r&&(n.firstMultiple=!1);var o=n.firstInput,s=n.firstMultiple,a=s?s.center:o.center,u=e.center=A(i);e.timeStamp=wt(),e.deltaTime=e.timeStamp-o.timeStamp,e.angle=N(a,u),e.distance=z(a,u),P(n,e),e.offsetDirection=I(e.deltaX,e.deltaY);var h=Y(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=h.x,e.overallVelocityY=h.y,e.overallVelocity=_t(h.x)>_t(h.y)?h.x:h.y,e.scale=s?j(s.pointers,i):1,e.rotation=s?W(s.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,L(n,e);var l=t.element;g(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var n=e.center,i=t.offsetDelta||{},r=t.prevDelta||{},o=t.prevInput||{};e.eventType!==Et&&o.eventType!==Pt||(r=t.prevDelta={x:o.deltaX||0,y:o.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y}),e.deltaX=r.x+(n.x-i.x),e.deltaY=r.y+(n.y-i.y)}function L(t,e){var n,i,r,o,s=t.lastInterval||e,u=e.timeStamp-s.timeStamp;if(e.eventType!=Lt&&(u>Ot||s.velocity===a)){var h=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,c=Y(u,h,l);i=c.x,r=c.y,n=_t(c.x)>_t(c.y)?c.x:c.y,o=I(h,l),t.lastInterval=e}else n=s.velocity,i=s.velocityX,r=s.velocityY,o=s.direction;e.velocity=n,e.velocityX=i,e.velocityY=r,e.direction=o}function R(t){for(var e=[],n=0;n<t.pointers.length;)e[n]={clientX:gt(t.pointers[n].clientX),clientY:gt(t.pointers[n].clientY)},n++;return{timeStamp:wt(),pointers:e,center:A(e),deltaX:t.deltaX,deltaY:t.deltaY}}function A(t){var e=t.length;if(1===e)return{x:gt(t[0].clientX),y:gt(t[0].clientY)};for(var n=0,i=0,r=0;r<e;)n+=t[r].clientX,i+=t[r].clientY,r++;return{x:gt(n/e),y:gt(i/e)}}function Y(t,e,n){return{x:e/t||0,y:n/t||0}}function I(t,e){return t===e?Rt:_t(t)>=_t(e)?t<0?At:Yt:e<0?It:zt}function z(t,e,n){n||(n=Ft);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return Math.sqrt(i*i+r*r)}function N(t,e,n){n||(n=Ft);var i=e[n[0]]-t[n[0]],r=e[n[1]]-t[n[1]];return 180*Math.atan2(r,i)/Math.PI}function W(t,e){return N(e[1],e[0],Vt)+N(t[1],t[0],Vt)}function j(t,e){return z(e[0],e[1],Vt)/z(t[0],t[1],Vt)}function F(){this.evEl=Bt,this.evWin=Ut,this.pressed=!1,k.apply(this,arguments)}function V(){this.evEl=Zt,this.evWin=qt,k.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function G(){this.evTarget=Jt,this.evWin=Qt,this.started=!1,k.apply(this,arguments)}function B(t,e){var n=x(t.touches),i=x(t.changedTouches);return e&(Pt|Lt)&&(n=S(n.concat(i),"identifier",!0)),[n,i]}function U(){this.evTarget=te,this.targetIds={},k.apply(this,arguments)}function H(t,e){var n=x(t.touches),i=this.targetIds;if(e&(Et|Ct)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var r,o,s=x(t.changedTouches),a=[],u=this.target;if(o=n.filter(function(t){return g(t.target,u)}),e===Et)for(r=0;r<o.length;)i[o[r].identifier]=!0,r++;for(r=0;r<s.length;)i[s[r].identifier]&&a.push(s[r]),e&(Pt|Lt)&&delete i[s[r].identifier],r++;return a.length?[S(o.concat(a),"identifier",!0),a]:void 0}function X(){k.apply(this,arguments);var t=f(this.handler,this);this.touch=new U(this.manager,t),this.mouse=new F(this.manager,t),this.primaryTouch=null,this.lastTouches=[]}function Z(t,e){t&Et?(this.primaryTouch=e.changedPointers[0].identifier,q.call(this,e)):t&(Pt|Lt)&&q.call(this,e)}function q(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var n={x:e.clientX,y:e.clientY};this.lastTouches.push(n);var i=this.lastTouches,r=function(){var t=i.indexOf(n);t>-1&&i.splice(t,1)};setTimeout(r,ee)}}function $(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i<this.lastTouches.length;i++){var r=this.lastTouches[i],o=Math.abs(e-r.x),s=Math.abs(n-r.y);if(o<=ne&&s<=ne)return!0}return!1}function J(t,e){this.manager=t,this.set(e)}function Q(t){if(_(t,ae))return ae;var e=_(t,ue),n=_(t,he);return e&&n?ae:e||n?e?ue:he:_(t,se)?se:oe}function K(t){this.options=pt({},this.defaults,t||{}),this.id=T(),this.manager=null,this.options.enable=m(this.options.enable,!0),this.state=ce,this.simultaneous={},this.requireFail=[]}function tt(t){return t&ve?"cancel":t&pe?"end":t&fe?"move":t&de?"start":""}function et(t){return t==zt?"down":t==It?"up":t==At?"left":t==Yt?"right":""}function nt(t,e){var n=e.manager;return n?n.get(t):t}function it(){K.apply(this,arguments)}function rt(){it.apply(this,arguments),this.pX=null,this.pY=null}function ot(){it.apply(this,arguments)}function st(){K.apply(this,arguments),this._timer=null,this._input=null}function at(){it.apply(this,arguments)}function ut(){it.apply(this,arguments)}function ht(){K.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function lt(t,e){return e=e||{},e.recognizers=m(e.recognizers,lt.defaults.preset),new ct(t,e)}function ct(t,e){this.options=pt({},lt.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=O(this),this.touchAction=new J(this,this.options.touchAction),dt(this,!0),l(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function dt(t,e){var n=t.element;if(n.style){var i;l(t.options.cssProps,function(r,o){i=M(n.style,o),e?(t.oldCssProps[i]=n.style[i],n.style[i]=r):n.style[i]=t.oldCssProps[i]||""}),e||(t.oldCssProps={})}}function ft(t,e){var n=o.createEvent("Event");n.initEvent(t,!0,!0),n.gesture=e,e.target.dispatchEvent(n)}var pt,mt=["","webkit","Moz","MS","ms","o"],vt=o.createElement("div"),yt="function",gt=Math.round,_t=Math.abs,wt=Date.now;pt="function"!=typeof Object.assign?function(t){if(t===a||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n<arguments.length;n++){var i=arguments[n];if(i!==a&&null!==i)for(var r in i)i.hasOwnProperty(r)&&(e[r]=i[r])}return e}:Object.assign;var bt=c(function(t,e,n){for(var i=Object.keys(e),r=0;r<i.length;)(!n||n&&t[i[r]]===a)&&(t[i[r]]=e[i[r]]),r++;return t},"extend","Use `assign`."),xt=c(function(t,e){return bt(t,e,!0)},"merge","Use `assign`."),St=1,Mt=/mobile|tablet|ip(ad|hone|od)|android/i,Tt="ontouchstart"in r,Dt=M(r,"PointerEvent")!==a,kt=Tt&&Mt.test(navigator.userAgent),Ot=25,Et=1,Ct=2,Pt=4,Lt=8,Rt=1,At=2,Yt=4,It=8,zt=16,Nt=At|Yt,Wt=It|zt,jt=Nt|Wt,Ft=["x","y"],Vt=["clientX","clientY"];k.prototype={handler:function(){},init:function(){this.evEl&&v(this.element,this.evEl,this.domHandler),this.evTarget&&v(this.target,this.evTarget,this.domHandler),this.evWin&&v(D(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&y(this.element,this.evEl,this.domHandler),this.evTarget&&y(this.target,this.evTarget,this.domHandler),this.evWin&&y(D(this.element),this.evWin,this.domHandler)}};var Gt={mousedown:Et,mousemove:Ct,mouseup:Pt},Bt="mousedown",Ut="mousemove mouseup";d(F,k,{handler:function(t){var e=Gt[t.type];e&Et&&0===t.button&&(this.pressed=!0),e&Ct&&1!==t.which&&(e=Pt),this.pressed&&(e&Pt&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var Ht={pointerdown:Et,pointermove:Ct,pointerup:Pt,pointercancel:Lt,pointerout:Lt},Xt={2:"touch",3:"pen",4:"mouse",5:"kinect"},Zt="pointerdown",qt="pointermove pointerup pointercancel";r.MSPointerEvent&&!r.PointerEvent&&(Zt="MSPointerDown",qt="MSPointerMove MSPointerUp MSPointerCancel"),d(V,k,{handler:function(t){var e=this.store,n=!1,i=t.type.toLowerCase().replace("ms",""),r=Ht[i],o=Xt[t.pointerType]||t.pointerType,s="touch"==o,a=b(e,t.pointerId,"pointerId");r&Et&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):r&(Pt|Lt)&&(n=!0),a<0||(e[a]=t,this.callback(this.manager,r,{pointers:e,changedPointers:[t],pointerType:o,srcEvent:t}),n&&e.splice(a,1))}});var $t={touchstart:Et,touchmove:Ct,touchend:Pt,touchcancel:Lt},Jt="touchstart",Qt="touchstart touchmove touchend touchcancel";d(G,k,{handler:function(t){var e=$t[t.type];if(e===Et&&(this.started=!0),this.started){var n=B.call(this,t,e);e&(Pt|Lt)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}}});var Kt={touchstart:Et,touchmove:Ct,touchend:Pt,touchcancel:Lt},te="touchstart touchmove touchend touchcancel";d(U,k,{handler:function(t){var e=Kt[t.type],n=H.call(this,t,e);n&&this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}});var ee=2500,ne=25;d(X,k,{handler:function(t,e,n){var i="touch"==n.pointerType,r="mouse"==n.pointerType;if(!(r&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(i)Z.call(this,e,n);else if(r&&$.call(this,n))return;this.callback(t,e,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var ie=M(vt.style,"touchAction"),re=ie!==a,oe="auto",se="manipulation",ae="none",ue="pan-x",he="pan-y",le=function(){if(!re)return!1;var t={},e=r.CSS&&r.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){t[n]=!e||r.CSS.supports("touch-action",n)}),t}();J.prototype={set:function(t){"compute"==t&&(t=this.compute()),re&&this.manager.element.style&&le[t]&&(this.manager.element.style[ie]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){p(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),Q(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,n=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var i=this.actions,r=_(i,ae)&&!le[ae],o=_(i,he)&&!le[he],s=_(i,ue)&&!le[ue];if(r){var a=1===t.pointers.length,u=t.distance<2,h=t.deltaTime<250;if(a&&u&&h)return}return s&&o?void 0:r||o&&n&Nt||s&&n&Wt?this.preventSrc(e):void 0},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var ce=1,de=2,fe=4,pe=8,me=pe,ve=16;K.prototype={defaults:{},set:function(t){return pt(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(h(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=nt(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return h(t,"dropRecognizeWith",this)?this:(t=nt(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(h(t,"requireFailure",this))return this;var e=this.requireFail;return t=nt(t,this),-1===b(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(h(t,"dropRequireFailure",this))return this;t=nt(t,this);var e=b(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){n.manager.emit(e,t)}var n=this,i=this.state;i<pe&&e(n.options.event+tt(i)),e(n.options.event),t.additionalEvent&&e(t.additionalEvent),i>=pe&&e(n.options.event+tt(i))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|ce)))return!1;t++}return!0},recognize:function(t){var e=pt({},t);if(!p(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(me|ve|32)&&(this.state=ce),this.state=this.process(e),this.state&(de|fe|pe|ve)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},d(it,K,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,n=t.eventType,i=e&(de|fe),r=this.attrTest(t);return i&&(n&Lt||!r)?e|ve:i||r?n&Pt?e|pe:e&de?e|fe:de:32}}),d(rt,it,{defaults:{event:"pan",threshold:10,pointers:1,direction:jt},getTouchAction:function(){var t=this.options.direction,e=[];return t&Nt&&e.push(he),t&Wt&&e.push(ue),e},directionTest:function(t){var e=this.options,n=!0,i=t.distance,r=t.direction,o=t.deltaX,s=t.deltaY;return r&e.direction||(e.direction&Nt?(r=0===o?Rt:o<0?At:Yt,n=o!=this.pX,i=Math.abs(t.deltaX)):(r=0===s?Rt:s<0?It:zt,n=s!=this.pY,i=Math.abs(t.deltaY))),t.direction=r,n&&i>e.threshold&&r&e.direction},attrTest:function(t){return it.prototype.attrTest.call(this,t)&&(this.state&de||!(this.state&de)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),d(ot,it,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&de)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),d(st,K,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[oe]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance<e.threshold,r=t.deltaTime>e.time;if(this._input=t,!i||!n||t.eventType&(Pt|Lt)&&!r)this.reset();else if(t.eventType&Et)this.reset(),this._timer=u(function(){this.state=me,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return me;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===me&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=wt(),this.manager.emit(this.options.event,this._input)))}}),d(at,it,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&de)}}),d(ut,it,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Nt|Wt,pointers:1},getTouchAction:function(){return rt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(Nt|Wt)?e=t.overallVelocity:n&Nt?e=t.overallVelocityX:n&Wt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&_t(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),d(ht,K,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[se]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance<e.threshold,r=t.deltaTime<e.time;if(this.reset(),t.eventType&Et&&0===this.count)return this.failTimeout();if(i&&r&&n){if(t.eventType!=Pt)return this.failTimeout();var o=!this.pTime||t.timeStamp-this.pTime<e.interval,s=!this.pCenter||z(this.pCenter,t.center)<e.posThreshold;this.pTime=t.timeStamp,this.pCenter=t.center,s&&o?this.count+=1:this.count=1,this._input=t;if(0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=u(function(){this.state=me,this.tryEmit()},e.interval,this),de):me}return 32},failTimeout:function(){return this._timer=u(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==me&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),lt.VERSION="2.0.7",lt.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[at,{enable:!1}],[ot,{enable:!1},["rotate"]],[ut,{direction:Nt}],[rt,{direction:Nt},["swipe"]],[ht],[ht,{event:"doubletap",taps:2},["tap"]],[st]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};ct.prototype={set:function(t){return pt(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){this.touchAction.preventDefaults(t);var n,i=this.recognizers,r=e.curRecognizer;(!r||r&&r.state&me)&&(r=e.curRecognizer=null);for(var o=0;o<i.length;)n=i[o],2===e.stopped||r&&n!=r&&!n.canRecognizeWith(r)?n.reset():n.recognize(t),!r&&n.state&(de|fe|pe)&&(r=e.curRecognizer=n),o++}},get:function(t){if(t instanceof K)return t;for(var e=this.recognizers,n=0;n<e.length;n++)if(e[n].options.event==t)return e[n];return null},add:function(t){if(h(t,"add",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(h(t,"remove",this))return this;if(t=this.get(t)){var e=this.recognizers,n=b(e,t);-1!==n&&(e.splice(n,1),this.touchAction.update())}return this},on:function(t,e){if(t!==a&&e!==a){var n=this.handlers;return l(w(t),function(t){n[t]=n[t]||[],n[t].push(e)}),this}},off:function(t,e){if(t!==a){var n=this.handlers;return l(w(t),function(t){e?n[t]&&n[t].splice(b(n[t],e),1):delete n[t]}),this}},emit:function(t,e){this.options.domEvents&&ft(t,e);var n=this.handlers[t]&&this.handlers[t].slice();if(n&&n.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var i=0;i<n.length;)n[i](e),i++}},destroy:function(){this.element&&dt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},pt(lt,{INPUT_START:Et,INPUT_MOVE:Ct,INPUT_END:Pt,INPUT_CANCEL:Lt,STATE_POSSIBLE:ce,STATE_BEGAN:de,STATE_CHANGED:fe,STATE_ENDED:pe,STATE_RECOGNIZED:me,STATE_CANCELLED:ve,STATE_FAILED:32,DIRECTION_NONE:Rt,DIRECTION_LEFT:At,DIRECTION_RIGHT:Yt,DIRECTION_UP:It,DIRECTION_DOWN:zt,DIRECTION_HORIZONTAL:Nt,DIRECTION_VERTICAL:Wt,DIRECTION_ALL:jt,Manager:ct,Input:k,TouchAction:J,TouchInput:U,MouseInput:F,PointerEventInput:V,TouchMouseInput:X,SingleTouchInput:G,Recognizer:K,AttrRecognizer:it,Tap:ht,Pan:rt,Swipe:ut,Pinch:ot,Rotate:at,Press:st,on:v,off:y,each:l,merge:xt,extend:bt,assign:pt,inherit:d,bindFn:f,prefixed:M}),(void 0!==r?r:"undefined"!=typeof self?self:{}).Hammer=lt,(i=function(){return lt}.call(e,n,e,t))!==a&&(t.exports=i)}(window,document)},function(t,e,n){var i,r,o;!function(n,s){r=[],i=s,void 0!==(o="function"==typeof i?i.apply(e,r):i)&&(t.exports=o)}(0,function(){function t(t){var e,n=t&&t.preventDefault||!1,i=t&&t.container||window,r={},o={keydown:{},keyup:{}},s={};for(e=97;e<=122;e++)s[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)s[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)s[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)s["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)s["num"+e]={code:96+e,shift:!1};s["num*"]={code:106,shift:!1},s["num+"]={code:107,shift:!1},s["num-"]={code:109,shift:!1},s["num/"]={code:111,shift:!1},s["num."]={code:110,shift:!1},s.left={code:37,shift:!1},s.up={code:38,shift:!1},s.right={code:39,shift:!1},s.down={code:40,shift:!1},s.space={code:32,shift:!1},s.enter={code:13,shift:!1},s.shift={code:16,shift:void 0},s.esc={code:27,shift:!1},s.backspace={code:8,shift:!1},s.tab={code:9,shift:!1},s.ctrl={code:17,shift:!1},s.alt={code:18,shift:!1},s.delete={code:46,shift:!1},s.pageup={code:33,shift:!1},s.pagedown={code:34,shift:!1},s["="]={code:187,shift:!1},s["-"]={code:189,shift:!1},s["]"]={code:221,shift:!1},s["["]={code:219,shift:!1};var a=function(t){h(t,"keydown")},u=function(t){h(t,"keyup")},h=function(t,e){if(void 0!==o[e][t.keyCode]){for(var i=o[e][t.keyCode],r=0;r<i.length;r++)void 0===i[r].shift?i[r].fn(t):1==i[r].shift&&1==t.shiftKey?i[r].fn(t):0==i[r].shift&&0==t.shiftKey&&i[r].fn(t);1==n&&t.preventDefault()}};return r.bind=function(t,e,n){if(void 0===n&&(n="keydown"),void 0===s[t])throw new Error("unsupported key: "+t);void 0===o[n][s[t].code]&&(o[n][s[t].code]=[]),o[n][s[t].code].push({fn:e,shift:s[t].shift})},r.bindAll=function(t,e){void 0===e&&(e="keydown");for(var n in s)s.hasOwnProperty(n)&&r.bind(n,t,e)},r.getKey=function(t){for(var e in s)if(s.hasOwnProperty(e)){if(1==t.shiftKey&&1==s[e].shift&&t.keyCode==s[e].code)return e;if(0==t.shiftKey&&0==s[e].shift&&t.keyCode==s[e].code)return e;if(t.keyCode==s[e].code&&"shift"==e)return e}return"unknown key, currently not supported"},r.unbind=function(t,e,n){if(void 0===n&&(n="keydown"),void 0===s[t])throw new Error("unsupported key: "+t);if(void 0!==e){var i=[],r=o[n][s[t].code];if(void 0!==r)for(var a=0;a<r.length;a++)r[a].fn==e&&r[a].shift==s[t].shift||i.push(o[n][s[t].code][a]);o[n][s[t].code]=i}else o[n][s[t].code]=[]},r.reset=function(){o={keydown:{},keyup:{}}},r.destroy=function(){o={keydown:{},keyup:{}},i.removeEventListener("keydown",a,!0),i.removeEventListener("keyup",u,!0)},i.addEventListener("keydown",a,!0),i.addEventListener("keyup",u,!0),r}return t})}])});
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.css b/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..ea487a481da5bca145acdba8f4bf31de050977ea
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.css
@@ -0,0 +1 @@
+.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%)}div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:159px;text-align:right;padding-right:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:10px;text-align:left;padding-left:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{box-sizing:content-box;border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;cursor:pointer;padding:0 8px 0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.js b/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7ae08b02baad2b01b5dfe2547d1ac3c3860a26b
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis-network.min.js
@@ -0,0 +1,30 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+"use strict";!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.vis=t():e.vis=t()}(this,function(){return function(e){function t(n){if(i[n])return i[n].exports;var o=i[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var i={};return t.m=e,t.c=i,t.d=function(e,i,n){t.o(e,i)||Object.defineProperty(e,i,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var i=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(i,"a",i),i},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=83)}([function(e,t,i){t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,i){t.__esModule=!0;var n=i(127),o=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}()},function(e,t,i){e.exports={default:i(143),__esModule:!0}},function(e,t,i){t.__esModule=!0;var n=i(7),o=function(e){return e&&e.__esModule?e:{default:e}}(n);t.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,o.default)(t))&&"function"!=typeof t?e:t}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=i(145),s=n(o),r=i(30),a=n(r),d=i(7),h=n(d);t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,h.default)(t)));e.prototype=(0,a.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(s.default?(0,s.default)(e,t):e.__proto__=t)}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t,i,n){var o=!1;!0===n&&(o=null===t[i]&&void 0!==e[i]),o?delete e[i]:e[i]=t[i]}var s=i(58),r=n(s),a=i(30),d=n(a),h=i(10),l=n(h),u=i(7),c=n(u),f=i(71),p=i(117);t.isNumber=function(e){return e instanceof Number||"number"==typeof e},t.recursiveDOMDelete=function(e){if(e)for(;!0===e.hasChildNodes();)t.recursiveDOMDelete(e.firstChild),e.removeChild(e.firstChild)},t.giveRange=function(e,t,i,n){if(t==e)return.5;var o=1/(t-e);return Math.max(0,(n-e)*o)},t.isString=function(e){return e instanceof String||"string"==typeof e},t.isDate=function(e){if(e instanceof Date)return!0;if(t.isString(e)){if(v.exec(e))return!0;if(!isNaN(Date.parse(e)))return!0}return!1},t.randomUUID=function(){return p.v4()},t.assignAllKeys=function(e,t){for(var i in e)e.hasOwnProperty(i)&&"object"!==(0,c.default)(e[i])&&(e[i]=t)},t.fillIfDefined=function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var s in e)void 0!==i[s]&&(null===i[s]||"object"!==(0,c.default)(i[s])?o(e,i,s,n):"object"===(0,c.default)(e[s])&&t.fillIfDefined(e[s],i[s],n))},t.extend=function(e,t){for(var i=1;i<arguments.length;i++){var n=arguments[i];for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])}return e},t.selectiveExtend=function(e,t,i){if(!Array.isArray(e))throw new Error("Array with property names expected as first argument");for(var n=2;n<arguments.length;n++)for(var o=arguments[n],s=0;s<e.length;s++){var r=e[s];o&&o.hasOwnProperty(r)&&(t[r]=o[r])}return t},t.selectiveDeepExtend=function(e,i,n){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(n))throw new TypeError("Arrays are not supported by deepExtend");for(var r=0;r<e.length;r++){var a=e[r];if(n.hasOwnProperty(a))if(n[a]&&n[a].constructor===Object)void 0===i[a]&&(i[a]={}),i[a].constructor===Object?t.deepExtend(i[a],n[a],!1,s):o(i,n,a,s);else{if(Array.isArray(n[a]))throw new TypeError("Arrays are not supported by deepExtend");o(i,n,a,s)}}return i},t.selectiveNotDeepExtend=function(e,i,n){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(n))throw new TypeError("Arrays are not supported by deepExtend");for(var r in n)if(n.hasOwnProperty(r)&&-1===e.indexOf(r))if(n[r]&&n[r].constructor===Object)void 0===i[r]&&(i[r]={}),i[r].constructor===Object?t.deepExtend(i[r],n[r]):o(i,n,r,s);else if(Array.isArray(n[r])){i[r]=[];for(var a=0;a<n[r].length;a++)i[r].push(n[r][a])}else o(i,n,r,s);return i},t.deepExtend=function(e,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var r in i)if(i.hasOwnProperty(r)||!0===n)if(i[r]&&i[r].constructor===Object)void 0===e[r]&&(e[r]={}),e[r].constructor===Object?t.deepExtend(e[r],i[r],n):o(e,i,r,s);else if(Array.isArray(i[r])){e[r]=[];for(var a=0;a<i[r].length;a++)e[r].push(i[r][a])}else o(e,i,r,s);return e},t.equalArray=function(e,t){if(e.length!=t.length)return!1;for(var i=0,n=e.length;i<n;i++)if(e[i]!=t[i])return!1;return!0},t.convert=function(e,i){var n;if(void 0!==e){if(null===e)return null;if(!i)return e;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){case"boolean":case"Boolean":return Boolean(e);case"number":case"Number":return t.isString(e)&&!isNaN(Date.parse(e))?f(e).valueOf():Number(e.valueOf());case"string":case"String":return String(e);case"Date":if(t.isNumber(e))return new Date(e);if(e instanceof Date)return new Date(e.valueOf());if(f.isMoment(e))return new Date(e.valueOf());if(t.isString(e))return n=v.exec(e),n?new Date(Number(n[1])):f(new Date(e)).toDate();throw new Error("Cannot convert object of type "+t.getType(e)+" to type Date");case"Moment":if(t.isNumber(e))return f(e);if(e instanceof Date)return f(e.valueOf());if(f.isMoment(e))return f(e);if(t.isString(e))return n=v.exec(e),f(n?Number(n[1]):e);throw new Error("Cannot convert object of type "+t.getType(e)+" to type Date");case"ISODate":if(t.isNumber(e))return new Date(e);if(e instanceof Date)return e.toISOString();if(f.isMoment(e))return e.toDate().toISOString();if(t.isString(e))return n=v.exec(e),n?new Date(Number(n[1])).toISOString():f(e).format();throw new Error("Cannot convert object of type "+t.getType(e)+" to type ISODate");case"ASPDate":if(t.isNumber(e))return"/Date("+e+")/";if(e instanceof Date)return"/Date("+e.valueOf()+")/";if(t.isString(e)){n=v.exec(e);return"/Date("+(n?new Date(Number(n[1])).valueOf():new Date(e).valueOf())+")/"}throw new Error("Cannot convert object of type "+t.getType(e)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var v=/^\/?Date\((\-?\d+)/i;t.getType=function(e){var t=void 0===e?"undefined":(0,c.default)(e);return"object"==t?null===e?"null":e instanceof Boolean?"Boolean":e instanceof Number?"Number":e instanceof String?"String":Array.isArray(e)?"Array":e instanceof Date?"Date":"Object":"number"==t?"Number":"boolean"==t?"Boolean":"string"==t?"String":void 0===t?"undefined":t},t.copyAndExtendArray=function(e,t){for(var i=[],n=0;n<e.length;n++)i.push(e[n]);return i.push(t),i},t.copyArray=function(e){for(var t=[],i=0;i<e.length;i++)t.push(e[i]);return t},t.getAbsoluteLeft=function(e){return e.getBoundingClientRect().left},t.getAbsoluteRight=function(e){return e.getBoundingClientRect().right},t.getAbsoluteTop=function(e){return e.getBoundingClientRect().top},t.addClassName=function(e,t){var i=e.className.split(" "),n=t.split(" ");i=i.concat(n.filter(function(e){return i.indexOf(e)<0})),e.className=i.join(" ")},t.removeClassName=function(e,t){var i=e.className.split(" "),n=t.split(" ");i=i.filter(function(e){return n.indexOf(e)<0}),e.className=i.join(" ")},t.forEach=function(e,t){var i,n;if(Array.isArray(e))for(i=0,n=e.length;i<n;i++)t(e[i],i,e);else for(i in e)e.hasOwnProperty(i)&&t(e[i],i,e)},t.toArray=function(e){var t=[];for(var i in e)e.hasOwnProperty(i)&&t.push(e[i]);return t},t.updateProperty=function(e,t,i){return e[t]!==i&&(e[t]=i,!0)},t.throttle=function(e){var t=!1;return function(){t||(t=!0,requestAnimationFrame(function(){t=!1,e()}))}},t.addEventListener=function(e,t,i,n){e.addEventListener?(void 0===n&&(n=!1),"mousewheel"===t&&navigator.userAgent.indexOf("Firefox")>=0&&(t="DOMMouseScroll"),e.addEventListener(t,i,n)):e.attachEvent("on"+t,i)},t.removeEventListener=function(e,t,i,n){e.removeEventListener?(void 0===n&&(n=!1),"mousewheel"===t&&navigator.userAgent.indexOf("Firefox")>=0&&(t="DOMMouseScroll"),e.removeEventListener(t,i,n)):e.detachEvent("on"+t,i)},t.preventDefault=function(e){e||(e=window.event),e.preventDefault?e.preventDefault():e.returnValue=!1},t.getTarget=function(e){e||(e=window.event);var t;return e.target?t=e.target:e.srcElement&&(t=e.srcElement),void 0!=t.nodeType&&3==t.nodeType&&(t=t.parentNode),t},t.hasParent=function(e,t){for(var i=e;i;){if(i===t)return!0;i=i.parentNode}return!1},t.option={},t.option.asBoolean=function(e,t){return"function"==typeof e&&(e=e()),null!=e?0!=e:t||null},t.option.asNumber=function(e,t){return"function"==typeof e&&(e=e()),null!=e?Number(e)||t||null:t||null},t.option.asString=function(e,t){return"function"==typeof e&&(e=e()),null!=e?String(e):t||null},t.option.asSize=function(e,i){return"function"==typeof e&&(e=e()),t.isString(e)?e:t.isNumber(e)?e+"px":i||null},t.option.asElement=function(e,t){return"function"==typeof e&&(e=e()),e||t||null},t.hexToRGB=function(e){var t=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;e=e.replace(t,function(e,t,i,n){return t+t+i+i+n+n});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},t.overrideOpacity=function(e,i){var n;return-1!=e.indexOf("rgba")?e:-1!=e.indexOf("rgb")?(n=e.substr(e.indexOf("(")+1).replace(")","").split(","),"rgba("+n[0]+","+n[1]+","+n[2]+","+i+")"):(n=t.hexToRGB(e),null==n?e:"rgba("+n.r+","+n.g+","+n.b+","+i+")")},t.RGBToHex=function(e,t,i){return"#"+((1<<24)+(e<<16)+(t<<8)+i).toString(16).slice(1)},t.parseColor=function(e){var i;if(!0===t.isString(e)){if(!0===t.isValidRGB(e)){var n=e.substr(4).substr(0,e.length-5).split(",").map(function(e){return parseInt(e)});e=t.RGBToHex(n[0],n[1],n[2])}if(!0===t.isValidHex(e)){var o=t.hexToHSV(e),s={h:o.h,s:.8*o.s,v:Math.min(1,1.02*o.v)},r={h:o.h,s:Math.min(1,1.25*o.s),v:.8*o.v},a=t.HSVToHex(r.h,r.s,r.v),d=t.HSVToHex(s.h,s.s,s.v);i={background:e,border:a,highlight:{background:d,border:a},hover:{background:d,border:a}}}else i={background:e,border:e,highlight:{background:e,border:e},hover:{background:e,border:e}}}else i={},i.background=e.background||void 0,i.border=e.border||void 0,t.isString(e.highlight)?i.highlight={border:e.highlight,background:e.highlight}:(i.highlight={},i.highlight.background=e.highlight&&e.highlight.background||void 0,i.highlight.border=e.highlight&&e.highlight.border||void 0),t.isString(e.hover)?i.hover={border:e.hover,background:e.hover}:(i.hover={},i.hover.background=e.hover&&e.hover.background||void 0,i.hover.border=e.hover&&e.hover.border||void 0);return i},t.RGBToHSV=function(e,t,i){e/=255,t/=255,i/=255;var n=Math.min(e,Math.min(t,i)),o=Math.max(e,Math.max(t,i));if(n==o)return{h:0,s:0,v:n};var s=e==n?t-i:i==n?e-t:i-e;return{h:60*((e==n?3:i==n?1:5)-s/(o-n))/360,s:(o-n)/o,v:o}};var g={split:function(e){var t={};return e.split(";").forEach(function(e){if(""!=e.trim()){var i=e.split(":"),n=i[0].trim(),o=i[1].trim();t[n]=o}}),t},join:function(e){return(0,l.default)(e).map(function(t){return t+": "+e[t]}).join("; ")}};t.addCssText=function(e,i){var n=g.split(e.style.cssText),o=g.split(i),s=t.extend(n,o);e.style.cssText=g.join(s)},t.removeCssText=function(e,t){var i=g.split(e.style.cssText),n=g.split(t);for(var o in n)n.hasOwnProperty(o)&&delete i[o];e.style.cssText=g.join(i)},t.HSVToRGB=function(e,t,i){var n,o,s,r=Math.floor(6*e),a=6*e-r,d=i*(1-t),h=i*(1-a*t),l=i*(1-(1-a)*t);switch(r%6){case 0:n=i,o=l,s=d;break;case 1:n=h,o=i,s=d;break;case 2:n=d,o=i,s=l;break;case 3:n=d,o=h,s=i;break;case 4:n=l,o=d,s=i;break;case 5:n=i,o=d,s=h}return{r:Math.floor(255*n),g:Math.floor(255*o),b:Math.floor(255*s)}},t.HSVToHex=function(e,i,n){var o=t.HSVToRGB(e,i,n);return t.RGBToHex(o.r,o.g,o.b)},t.hexToHSV=function(e){var i=t.hexToRGB(e);return t.RGBToHSV(i.r,i.g,i.b)},t.isValidHex=function(e){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e)},t.isValidRGB=function(e){return e=e.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(e)},t.isValidRGBA=function(e){return e=e.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(e)},t.selectiveBridgeObject=function(e,i){if(null!==i&&"object"===(void 0===i?"undefined":(0,c.default)(i))){for(var n=(0,d.default)(i),o=0;o<e.length;o++)i.hasOwnProperty(e[o])&&"object"==(0,c.default)(i[e[o]])&&(n[e[o]]=t.bridgeObject(i[e[o]]));return n}return null},t.bridgeObject=function(e){if(null!==e&&"object"===(void 0===e?"undefined":(0,c.default)(e))){var i=(0,d.default)(e);if(e instanceof Element)i=e;else{i=(0,d.default)(e);for(var n in e)e.hasOwnProperty(n)&&"object"==(0,c.default)(e[n])&&(i[n]=t.bridgeObject(e[n]))}return i}return null},t.insertSort=function(e,t){for(var i=0;i<e.length;i++){for(var n=e[i],o=i;o>0&&t(n,e[o-1])<0;o--)e[o]=e[o-1];e[o]=n}return e},t.mergeOptions=function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=function(e){return null!==e&&void 0!==e},s=function(e){return null!==e&&"object"===(void 0===e?"undefined":(0,c.default)(e))};if(!s(e))throw new Error("Parameter mergeTarget must be an object");if(!s(t))throw new Error("Parameter options must be an object");if(!o(i))throw new Error("Parameter option must have a value");if(!s(n))throw new Error("Parameter globalOptions must be an object");var r=t[i],a=s(n)&&!function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0}(n),h=a?n[i]:void 0,l=h?h.enabled:void 0;if(void 0!==r){if("boolean"==typeof r)return s(e[i])||(e[i]={}),void(e[i].enabled=r);if(null===r&&!s(e[i])){if(!o(h))return;e[i]=(0,d.default)(h)}if(s(r)){var u=!0;void 0!==r.enabled?u=r.enabled:void 0!==l&&(u=h.enabled),function(e,t,i){s(e[i])||(e[i]={});var n=t[i],o=e[i];for(var r in n)n.hasOwnProperty(r)&&(o[r]=n[r])}(e,t,i),e[i].enabled=u}}},t.binarySearchCustom=function(e,t,i,n){for(var o=0,s=0,r=e.length-1;s<=r&&o<1e4;){var a=Math.floor((s+r)/2),d=e[a],h=void 0===n?d[i]:d[i][n],l=t(h);if(0==l)return a;-1==l?s=a+1:r=a-1,o++}return-1},t.binarySearchValue=function(e,t,i,n,o){var s,r,a,d,h=0,l=0,u=e.length-1;for(o=void 0!=o?o:function(e,t){return e==t?0:e<t?-1:1};l<=u&&h<1e4;){if(d=Math.floor(.5*(u+l)),s=e[Math.max(0,d-1)][i],r=e[d][i],a=e[Math.min(e.length-1,d+1)][i],0==o(r,t))return d;if(o(s,t)<0&&o(r,t)>0)return"before"==n?Math.max(0,d-1):d;if(o(r,t)<0&&o(a,t)>0)return"before"==n?d:Math.min(e.length-1,d+1);o(r,t)<0?l=d+1:u=d-1,h++}return-1},t.easingFunctions={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return e*(2-e)},easeInOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return--e*e*e+1},easeInOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return 1- --e*e*e*e},easeInOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return 1+--e*e*e*e*e},easeInOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e}},t.getScrollBarWidth=function(){var e=document.createElement("p");e.style.width="100%",e.style.height="200px";var t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t);var i=e.offsetWidth;t.style.overflow="scroll";var n=e.offsetWidth;return i==n&&(n=t.clientWidth),document.body.removeChild(t),i-n},t.topMost=function(e,t){var i=void 0;Array.isArray(t)||(t=[t]);var n=!0,o=!1,s=void 0;try{for(var a,d=(0,r.default)(e);!(n=(a=d.next()).done);n=!0){var h=a.value;if(h){i=h[t[0]];for(var l=1;l<t.length;l++)i&&(i=i[t[l]]);if(void 0!==i)break}}}catch(e){o=!0,s=e}finally{try{!n&&d.return&&d.return()}finally{if(o)throw s}}return i}},function(e,t){var i=e.exports={version:"2.5.1"};"number"==typeof __e&&(__e=i)},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=i(102),s=n(o),r=i(104),a=n(r),d="function"==typeof a.default&&"symbol"==typeof s.default?function(e){return typeof e}:function(e){return e&&"function"==typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":typeof e};t.default="function"==typeof a.default&&"symbol"===d(s.default)?function(e){return void 0===e?"undefined":d(e)}:function(e){return e&&"function"==typeof a.default&&e.constructor===a.default&&e!==a.default.prototype?"symbol":void 0===e?"undefined":d(e)}},function(e,t,i){var n=i(44)("wks"),o=i(28),s=i(9).Symbol,r="function"==typeof s;(e.exports=function(e){return n[e]||(n[e]=r&&s[e]||(r?s:o)("Symbol."+e))}).store=n},function(e,t){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,t,i){e.exports={default:i(100),__esModule:!0}},function(e,t,i){var n=i(9),o=i(6),s=i(61),r=i(18),a=function(e,t,i){var d,h,l,u=e&a.F,c=e&a.G,f=e&a.S,p=e&a.P,v=e&a.B,g=e&a.W,y=c?o:o[t]||(o[t]={}),m=y.prototype,b=c?n:f?n[t]:(n[t]||{}).prototype;c&&(i=t);for(d in i)(h=!u&&b&&void 0!==b[d])&&d in y||(l=h?b[d]:i[d],y[d]=c&&"function"!=typeof b[d]?i[d]:v&&h?s(l,n):g&&b[d]==l?function(e){var t=function(t,i,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,i)}return new e(t,i,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(l):p&&"function"==typeof l?s(Function.call,l):l,p&&((y.virtual||(y.virtual={}))[d]=l,e&a.R&&m&&!m[d]&&r(m,d,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,e.exports=a},function(e,t,i){var n=i(19),o=i(62),s=i(40),r=Object.defineProperty;t.f=i(13)?Object.defineProperty:function(e,t,i){if(n(e),t=s(t,!0),n(i),o)try{return r(e,t,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[t]=i.value),e}},function(e,t,i){e.exports=!i(20)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){var i={}.hasOwnProperty;e.exports=function(e,t){return i.call(e,t)}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(7),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=function(){function e(t,i,n){(0,a.default)(this,e),this.body=i,this.labelModule=n,this.setOptions(t),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,h.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"_setMargins",value:function(e){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),e.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(e,t){var i=this.options.borderWidth;return this.resize(e),Math.min(Math.abs(this.width/2/Math.cos(t)),Math.abs(this.height/2/Math.sin(t)))+i}},{key:"enableShadow",value:function(e,t){t.shadow&&(e.shadowColor=t.shadowColor,e.shadowBlur=t.shadowSize,e.shadowOffsetX=t.shadowX,e.shadowOffsetY=t.shadowY)}},{key:"disableShadow",value:function(e,t){t.shadow&&(e.shadowColor="rgba(0,0,0,0)",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(e,t){if(!1!==t.borderDashes)if(void 0!==e.setLineDash){var i=t.borderDashes;!0===i&&(i=[5,15]),e.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,t.borderDashes=!1}},{key:"disableBorderDashes",value:function(e,t){!1!==t.borderDashes&&(void 0!==e.setLineDash?e.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,t.borderDashes=!1))}},{key:"needsRefresh",value:function(e,t){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(e,t)}},{key:"initContextForDraw",value:function(e,t){var i=t.borderWidth/this.body.view.scale;e.lineWidth=Math.min(this.width,i),e.strokeStyle=t.borderColor,e.fillStyle=t.color}},{key:"performStroke",value:function(e,t){var i=t.borderWidth/this.body.view.scale;e.save(),i>0&&(this.enableBorderDashes(e,t),e.stroke(),this.disableBorderDashes(e,t)),e.restore()}},{key:"performFill",value:function(e,t){this.enableShadow(e,t),e.fill(),this.disableShadow(e,t),this.performStroke(e,t)}},{key:"_addBoundingBoxMargin",value:function(e){this.boundingBox.left-=e,this.boundingBox.top-=e,this.boundingBox.bottom+=e,this.boundingBox.right+=e}},{key:"_updateBoundingBox",value:function(e,t,i,n,o){void 0!==i&&this.resize(i,n,o),this.left=e-this.width/2,this.top=t-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(e,t,i,n,o){this._updateBoundingBox(e,t,i,n,o)}},{key:"getDimensionsFromLabel",value:function(e,t,i){this.textSize=this.labelModule.getTextSize(e,t,i);var n=this.textSize.width,o=this.textSize.height;return 0===n&&(n=14,o=14),{width:n,height:o}}}]),e}();t.default=l},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(t,i)){this.labelModule.getTextSize(e,t,i);var o=2*n.size;this.width=o,this.height=o,this.radius=.5*this.width}}},{key:"_drawShape",value:function(e,t,i,n,o,s,r,a){if(this.resize(e,s,r,a),this.left=n-this.width/2,this.top=o-this.height/2,this.initContextForDraw(e,a),e[t](n,o,a.size),this.performFill(e,a),void 0!==this.options.label){this.labelModule.calculateLabelSize(e,s,r,n,o,"hanging");var d=o+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(e,n,d,s,r,"hanging")}this.updateBoundingBox(n,o)}},{key:"updateBoundingBox",value:function(e,t){this.boundingBox.top=t-this.options.size,this.boundingBox.left=e-this.options.size,this.boundingBox.right=e+this.options.size,this.boundingBox.bottom=t+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),t}(v.default);t.default=g},function(e,t,i){var n=i(59),o=i(38);e.exports=function(e){return n(o(e))}},function(e,t,i){var n=i(12),o=i(27);e.exports=i(13)?function(e,t,i){return n.f(e,t,o(1,i))}:function(e,t,i){return e[t]=i,e}},function(e,t,i){var n=i(25);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,i){e.exports={default:i(120),__esModule:!0}},function(e,t,i){function n(){var e=function(){};return{on:e,off:e,destroy:e,emit:e,get:function(t){return{set:e}}}}if("undefined"!=typeof window){var o=i(124),s=window.Hammer||i(125);e.exports=o(s,{preventDefault:"mouse"})}else e.exports=function(){return n()}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var o=i(133),s=n(o),r=i(58),a=n(r);t.default=function(){function e(e,t){var i=[],n=!0,o=!1,s=void 0;try{for(var r,d=(0,a.default)(e);!(n=(r=d.next()).done)&&(i.push(r.value),!t||i.length!==t);n=!0);}catch(e){o=!0,s=e}finally{try{!n&&d.return&&d.return()}finally{if(o)throw s}}return i}return function(t,i){if(Array.isArray(t))return t;if((0,s.default)(Object(t)))return e(t,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(e,t){e.exports={}},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,i){var n=i(65),o=i(45);e.exports=Object.keys||function(e){return n(e,o)}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t){var i=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+n).toString(36))}},function(e,t,i){var n=i(38);e.exports=function(e){return Object(n(e))}},function(e,t,i){e.exports={default:i(98),__esModule:!0}},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(e&&!Array.isArray(e)&&(t=e,e=null),this._options=t||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=(0,l.default)(this._options.type),n=0,o=i.length;n<o;n++){var s=i[n],r=this._options.type[s];this._type[s]="Date"==r||"ISODate"==r||"ASPDate"==r?"Date":r}this._subscribers={},e&&this.add(e),this.setOptions(t)}var s=i(21),r=n(s),a=i(7),d=n(a),h=i(10),l=n(h),u=i(5),c=i(72);o.prototype.setOptions=function(e){e&&void 0!==e.queue&&(!1===e.queue?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=c.extend(this,{replace:["add","update","remove"]})),"object"===(0,d.default)(e.queue)&&this._queue.setOptions(e.queue)))},o.prototype.on=function(e,t){var i=this._subscribers[e];i||(i=[],this._subscribers[e]=i),i.push({callback:t})},o.prototype.off=function(e,t){var i=this._subscribers[e];i&&(this._subscribers[e]=i.filter(function(e){return e.callback!=t}))},o.prototype._trigger=function(e,t,i){if("*"==e)throw new Error("Cannot trigger event *");var n=[];e in this._subscribers&&(n=n.concat(this._subscribers[e])),"*"in this._subscribers&&(n=n.concat(this._subscribers["*"]));for(var o=0,s=n.length;o<s;o++){var r=n[o];r.callback&&r.callback(e,t,i||null)}},o.prototype.add=function(e,t){var i,n=[],o=this;if(Array.isArray(e))for(var s=0,r=e.length;s<r;s++)i=o._addItem(e[s]),n.push(i);else{if(!e||"object"!==(void 0===e?"undefined":(0,d.default)(e)))throw new Error("Unknown dataType");i=o._addItem(e),n.push(i)}return n.length&&this._trigger("add",{items:n},t),n},o.prototype.update=function(e,t){var i=[],n=[],o=[],s=[],r=this,a=r._fieldId,h=function(e){var t=e[a];if(r._data[t]){var d=u.extend({},r._data[t]);t=r._updateItem(e),n.push(t),s.push(e),o.push(d)}else t=r._addItem(e),i.push(t)};if(Array.isArray(e))for(var l=0,c=e.length;l<c;l++)e[l]&&"object"===(0,d.default)(e[l])?h(e[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!e||"object"!==(void 0===e?"undefined":(0,d.default)(e)))throw new Error("Unknown dataType");h(e)}if(i.length&&this._trigger("add",{items:i},t),n.length){var f={items:n,oldData:o,data:s};this._trigger("update",f,t)}return i.concat(n)},o.prototype.get=function(e){var t,i,n,o=this,s=u.getType(arguments[0]);"String"==s||"Number"==s?(t=arguments[0],n=arguments[1]):"Array"==s?(i=arguments[0],n=arguments[1]):n=arguments[0];var r;if(n&&n.returnType){r=-1==["Array","Object"].indexOf(n.returnType)?"Array":n.returnType}else r="Array";var a,d,h,c,f,p=n&&n.type||this._options.type,v=n&&n.filter,g=[];if(void 0!=t)(a=o._getItem(t,p))&&v&&!v(a)&&(a=null);else if(void 0!=i)for(c=0,f=i.length;c<f;c++)a=o._getItem(i[c],p),v&&!v(a)||g.push(a);else for(d=(0,l.default)(this._data),c=0,f=d.length;c<f;c++)h=d[c],a=o._getItem(h,p),v&&!v(a)||g.push(a);if(n&&n.order&&void 0==t&&this._sort(g,n.order),n&&n.fields){var y=n.fields;if(void 0!=t)a=this._filterFields(a,y);else for(c=0,f=g.length;c<f;c++)g[c]=this._filterFields(g[c],y)}if("Object"==r){var m,b={};for(c=0,f=g.length;c<f;c++)m=g[c],b[m.id]=m;return b}return void 0!=t?a:g},o.prototype.getIds=function(e){var t,i,n,o,s,r=this._data,a=e&&e.filter,d=e&&e.order,h=e&&e.type||this._options.type,u=(0,l.default)(r),c=[];if(a)if(d){for(s=[],t=0,i=u.length;t<i;t++)n=u[t],o=this._getItem(n,h),a(o)&&s.push(o);for(this._sort(s,d),t=0,i=s.length;t<i;t++)c.push(s[t][this._fieldId])}else for(t=0,i=u.length;t<i;t++)n=u[t],o=this._getItem(n,h),a(o)&&c.push(o[this._fieldId]);else if(d){for(s=[],t=0,i=u.length;t<i;t++)n=u[t],s.push(r[n]);for(this._sort(s,d),t=0,i=s.length;t<i;t++)c.push(s[t][this._fieldId])}else for(t=0,i=u.length;t<i;t++)n=u[t],o=r[n],c.push(o[this._fieldId]);return c},o.prototype.getDataSet=function(){return this},o.prototype.forEach=function(e,t){var i,n,o,s,r=t&&t.filter,a=t&&t.type||this._options.type,d=this._data,h=(0,l.default)(d);if(t&&t.order){var u=this.get(t);for(i=0,n=u.length;i<n;i++)o=u[i],s=o[this._fieldId],e(o,s)}else for(i=0,n=h.length;i<n;i++)s=h[i],o=this._getItem(s,a),r&&!r(o)||e(o,s)},o.prototype.map=function(e,t){var i,n,o,s,r=t&&t.filter,a=t&&t.type||this._options.type,d=[],h=this._data,u=(0,l.default)(h);for(i=0,n=u.length;i<n;i++)o=u[i],s=this._getItem(o,a),r&&!r(s)||d.push(e(s,o));return t&&t.order&&this._sort(d,t.order),d},o.prototype._filterFields=function(e,t){if(!e)return e;var i,n,o={},s=(0,l.default)(e),r=s.length;if(Array.isArray(t))for(i=0;i<r;i++)n=s[i],-1!=t.indexOf(n)&&(o[n]=e[n]);else for(i=0;i<r;i++)n=s[i],t.hasOwnProperty(n)&&(o[t[n]]=e[n]);return o},o.prototype._sort=function(e,t){if(u.isString(t)){var i=t;e.sort(function(e,t){var n=e[i],o=t[i];return n>o?1:n<o?-1:0})}else{if("function"!=typeof t)throw new TypeError("Order must be a function or a string");e.sort(t)}},o.prototype.remove=function(e,t){var i,n,o,s,r=[],a=[],d=[];for(d=Array.isArray(e)?e:[e],i=0,n=d.length;i<n;i++)(s=this._remove(d[i]))&&void 0!=(o=s[this._fieldId])&&(r.push(o),a.push(s));return r.length&&this._trigger("remove",{items:r,oldData:a},t),r},o.prototype._remove=function(e){var t,i;return u.isNumber(e)||u.isString(e)?i=e:e&&"object"===(void 0===e?"undefined":(0,d.default)(e))&&(i=e[this._fieldId]),void 0!==i&&this._data[i]?(t=this._data[i],delete this._data[i],this.length--,t):null},o.prototype.clear=function(e){var t,i,n=(0,l.default)(this._data),o=[];for(t=0,i=n.length;t<i;t++)o.push(this._data[n[t]]);return this._data={},this.length=0,this._trigger("remove",{items:n,oldData:o},e),n},o.prototype.max=function(e){var t,i,n=this._data,o=(0,l.default)(n),s=null,r=null;for(t=0,i=o.length;t<i;t++){var a=o[t],d=n[a],h=d[e];null!=h&&(!s||h>r)&&(s=d,r=h)}return s},o.prototype.min=function(e){var t,i,n=this._data,o=(0,l.default)(n),s=null,r=null;for(t=0,i=o.length;t<i;t++){var a=o[t],d=n[a],h=d[e];null!=h&&(!s||h<r)&&(s=d,r=h)}return s},o.prototype.distinct=function(e){var t,i,n,o=this._data,s=(0,l.default)(o),r=[],a=this._options.type&&this._options.type[e]||null,d=0;for(t=0,n=s.length;t<n;t++){var h=s[t],c=o[h],f=c[e],p=!1;for(i=0;i<d;i++)if(r[i]==f){p=!0;break}p||void 0===f||(r[d]=f,d++)}if(a)for(t=0,n=r.length;t<n;t++)r[t]=u.convert(r[t],a);return r},o.prototype._addItem=function(e){var t=e[this._fieldId];if(void 0!=t){if(this._data[t])throw new Error("Cannot add item: item with id "+t+" already exists")}else t=u.randomUUID(),e[this._fieldId]=t;var i,n,o={},s=(0,l.default)(e);for(i=0,n=s.length;i<n;i++){var r=s[i],a=this._type[r];o[r]=u.convert(e[r],a)}return this._data[t]=o,this.length++,t},o.prototype._getItem=function(e,t){var i,n,o,s,r=this._data[e];if(!r)return null;var a={},d=(0,l.default)(r);if(t)for(o=0,s=d.length;o<s;o++)i=d[o],n=r[i],a[i]=u.convert(n,t[i]);else for(o=0,s=d.length;o<s;o++)i=d[o],n=r[i],a[i]=n;return a[this._fieldId]||(a[this._fieldId]=r.id),a},o.prototype._updateItem=function(e){var t=e[this._fieldId];if(void 0==t)throw new Error("Cannot update item: item has no id (item: "+(0,r.default)(e)+")");var i=this._data[t];if(!i)throw new Error("Cannot update item: no item with id "+t+" found");for(var n=(0,l.default)(e),o=0,s=n.length;o<s;o++){var a=n[o],d=this._type[a];i[a]=u.convert(e[a],d)}return t},e.exports=o},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=i(77).default,l=i(34).default,u=i(142).default,c=i(149).default,f=i(150).default,p=i(151).default,v=i(152).default,g=i(153).default,y=i(154).default,m=i(155).default,b=i(156).default,_=i(157).default,w=i(158).default,k=i(159).default,x=i(160).default,O=i(161).default,M=i(162).default,E=i(54),S=E.printStyle,D=function(){function e(t,i,n,o,r,a){(0,s.default)(this,e),this.options=d.bridgeObject(r),this.globalOptions=r,this.defaultOptions=a,this.body=i,this.edges=[],this.id=void 0,this.imagelist=n,this.grouplist=o,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new h(this.body,this.options,!1),this.setOptions(t)}return(0,a.default)(e,[{key:"attachEdge",value:function(e){-1===this.edges.indexOf(e)&&this.edges.push(e)}},{key:"detachEdge",value:function(e){var t=this.edges.indexOf(e);-1!=t&&this.edges.splice(t,1)}},{key:"setOptions",value:function(t){var i=this.options.shape;if(t){if(void 0!==t.id&&(this.id=t.id),void 0===this.id)throw new Error("Node must have an id");e.checkMass(t,this.id),void 0!==t.x&&(null===t.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=parseInt(t.x),this.predefinedPosition=!0)),void 0!==t.y&&(null===t.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=parseInt(t.y),this.predefinedPosition=!0)),void 0!==t.size&&(this.baseSize=t.size),void 0!==t.value&&(t.value=parseFloat(t.value)),e.parseOptions(this.options,t,!0,this.globalOptions,this.grouplist);var n=[t,this.options,this.defaultOptions];return this.chooser=l.choosify("node",n),this._load_images(),this.updateLabelModule(t),this.updateShape(i),void 0!==t.hidden||void 0!==t.physics}}},{key:"_load_images",value:function(){if("circularImage"===this.options.shape||"image"===this.options.shape){if(void 0===this.options.image)throw new Error("Option image must be defined for node type '"+this.options.shape+"'");if(void 0===this.imagelist)throw new Error("Internal Error: No images provided");if("string"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error("No unselected image provided");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:"getFormattingValues",value:function(){var e={color:this.options.color.background,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};return this.selected||this.hover?!0===this.chooser?this.selected?(e.borderWidth*=2,e.color=this.options.color.highlight.background,e.borderColor=this.options.color.highlight.border,e.shadow=this.options.shadow.enabled):this.hover&&(e.color=this.options.color.hover.background,e.borderColor=this.options.color.hover.border,e.shadow=this.options.shadow.enabled):"function"==typeof this.chooser&&(this.chooser(e,this.options.id,this.selected,this.hover),!1===e.shadow&&(e.shadowColor===this.options.shadow.color&&e.shadowSize===this.options.shadow.size&&e.shadowX===this.options.shadow.x&&e.shadowY===this.options.shadow.y||(e.shadow=!0))):e.shadow=this.options.shadow.enabled,e}},{key:"updateLabelModule",value:function(t){void 0!==this.options.label&&null!==this.options.label||(this.options.label=""),e.updateGroupOptions(this.options,t,this.grouplist);var i=this.grouplist.get(this.options.group,!1),n=[t,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,n),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateShape",value:function(e){if(e===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case"box":this.shape=new u(this.options,this.body,this.labelModule);break;case"circle":this.shape=new c(this.options,this.body,this.labelModule);break;case"circularImage":this.shape=new f(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"database":this.shape=new p(this.options,this.body,this.labelModule);break;case"diamond":this.shape=new v(this.options,this.body,this.labelModule);break;case"dot":this.shape=new g(this.options,this.body,this.labelModule);break;case"ellipse":this.shape=new y(this.options,this.body,this.labelModule);break;case"icon":this.shape=new m(this.options,this.body,this.labelModule);break;case"image":this.shape=new b(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"square":this.shape=new _(this.options,this.body,this.labelModule);break;case"hexagon":this.shape=new w(this.options,this.body,this.labelModule);break;case"star":this.shape=new k(this.options,this.body,this.labelModule);break;case"text":this.shape=new x(this.options,this.body,this.labelModule);break;case"triangle":this.shape=new O(this.options,this.body,this.labelModule);break;case"triangleDown":this.shape=new M(this.options,this.body,this.labelModule);break;default:this.shape=new y(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:"select",value:function(){this.selected=!0,this.needsRefresh()}},{key:"unselect",value:function(){this.selected=!1,this.needsRefresh()}},{key:"needsRefresh",value:function(){this.shape.refreshNeeded=!0}},{key:"getTitle",value:function(){return this.options.title}},{key:"distanceToBorder",value:function(e,t){return this.shape.distanceToBorder(e,t)}},{key:"isFixed",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"getLabelSize",value:function(){return this.labelModule.size()}},{key:"setValueRange",value:function(e,t,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(e,t,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*s}this.options.size=this.options.scaling.min+n*o}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:"draw",value:function(e){var t=this.getFormattingValues();this.shape.draw(e,this.x,this.y,this.selected,this.hover,t)}},{key:"updateBoundingBox",value:function(e){this.shape.updateBoundingBox(this.x,this.y,e)}},{key:"resize",value:function(e){var t=this.getFormattingValues();this.shape.resize(e,this.selected,this.hover,t)}},{key:"getItemsOnPoint",value:function(e){var t=[];return this.labelModule.visible()&&l.pointInRect(this.labelModule.getSize(),e)&&t.push({nodeId:this.id,labelId:0}),l.pointInRect(this.shape.boundingBox,e)&&t.push({nodeId:this.id}),t}},{key:"isOverlappingWith",value:function(e){return this.shape.left<e.right&&this.shape.left+this.shape.width>e.left&&this.shape.top<e.bottom&&this.shape.top+this.shape.height>e.top}},{key:"isBoundingBoxOverlappingWith",value:function(e){return this.shape.boundingBox.left<e.right&&this.shape.boundingBox.right>e.left&&this.shape.boundingBox.top<e.bottom&&this.shape.boundingBox.bottom>e.top}}],[{key:"updateGroupOptions",value:function(e,t,i){if(void 0!==i){var n=e.group;if(void 0!==t&&void 0!==t.group&&n!==t.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof n||"string"==typeof n&&""!=n){var o=i.get(n);d.selectiveNotDeepExtend(["font"],e,o),e.color=d.parseColor(e.color)}}}},{key:"parseOptions",value:function(t,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments[4],r=["color","fixed","shadow"];if(d.selectiveNotDeepExtend(r,t,i,n),e.checkMass(i),d.mergeOptions(t,i,"shadow",o),void 0!==i.color&&null!==i.color){var a=d.parseColor(i.color);d.fillIfDefined(t.color,a)}else!0===n&&null===i.color&&(t.color=d.bridgeObject(o.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(t.fixed.x=i.fixed,t.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(t.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(t.fixed.y=i.fixed.y))),!0===n&&null===i.font&&(t.font=d.bridgeObject(o.font)),e.updateGroupOptions(t,i,s),void 0!==i.scaling&&d.mergeOptions(t.scaling,i.scaling,"label",o.scaling)}},{key:"checkMass",value:function(e,t){if(void 0!==e.mass&&e.mass<=0){var i="";void 0!==t&&(i=" in node id: "+t),console.log("%cNegative or zero mass disallowed"+i+", setting mass to 1.",S),e.mass=1}}}]),e}();t.default=D},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(7),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(5),u=function(){function e(){(0,a.default)(this,e)}return(0,h.default)(e,null,[{key:"choosify",value:function(e,t){var i=["node","edge","label"],n=!0,o=l.topMost(t,"chosen");if("boolean"==typeof o)n=o;else if("object"===(void 0===o?"undefined":(0,s.default)(o))){if(-1===i.indexOf(e))throw new Error("choosify: subOption '"+e+"' should be one of '"+i.join("', '")+"'");var r=l.topMost(t,["chosen",e]);"boolean"!=typeof r&&"function"!=typeof r||(n=r)}return n}},{key:"pointInRect",value:function(e,t,i){if(e.width<=0||e.height<=0)return!1;if(void 0!==i){var n={x:t.x-i.x,y:t.y-i.y};if(0!==i.angle){var o=-i.angle;t={x:Math.cos(o)*n.x-Math.sin(o)*n.y,y:Math.sin(o)*n.x+Math.cos(o)*n.y}}else t=n}var s=e.x+e.width,r=e.y+e.width;return e.left<t.x&&s>t.x&&e.top<t.y&&r>t.y}},{key:"isValidLabel",value:function(e){return"string"==typeof e&&""!==e}}]),e}();t.default=u},function(e,t,i){t.onTouch=function(e,t){t.inputHandler=function(e){e.isFirst&&t(e)},e.on("hammer.input",t.inputHandler)},t.onRelease=function(e,t){return t.inputHandler=function(e){e.isFinal&&t(e)},e.on("hammer.input",t.inputHandler)},t.offTouch=function(e,t){e.off("hammer.input",t.inputHandler)},t.offRelease=t.offTouch,t.disablePreventDefaultVertically=function(e){return e.getTouchAction=function(){return["pan-y"]},e}},function(e,t,i){i(85);for(var n=i(9),o=i(18),s=i(24),r=i(8)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),d=0;d<a.length;d++){var h=a[d],l=n[h],u=l&&l.prototype;u&&!u[r]&&o(u,r,h),s[h]=s.Array}},function(e,t){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e}},function(e,t){e.exports=!0},function(e,t,i){var n=i(25);e.exports=function(e,t){if(!n(e))return e;var i,o;if(t&&"function"==typeof(i=e.toString)&&!n(o=i.call(e)))return o;if("function"==typeof(i=e.valueOf)&&!n(o=i.call(e)))return o;if(!t&&"function"==typeof(i=e.toString)&&!n(o=i.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t,i){var n=i(19),o=i(90),s=i(45),r=i(43)("IE_PROTO"),a=function(){},d=function(){var e,t=i(63)("iframe"),n=s.length;for(t.style.display="none",i(94).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("<script>document.F=Object<\/script>"),e.close(),d=e.F;n--;)delete d.prototype[s[n]];return d()};e.exports=Object.create||function(e,t){var i;return null!==e?(a.prototype=n(e),i=new a,a.prototype=null,i[r]=e):i=d(),void 0===t?i:o(i,t)}},function(e,t){var i=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:i)(e)}},function(e,t,i){var n=i(44)("keys"),o=i(28);e.exports=function(e){return n[e]||(n[e]=o(e))}},function(e,t,i){var n=i(9),o=n["__core-js_shared__"]||(n["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,i){var n=i(12).f,o=i(14),s=i(8)("toStringTag");e.exports=function(e,t,i){e&&!o(e=i?e:e.prototype,s)&&n(e,s,{configurable:!0,value:t})}},function(e,t,i){var n=i(95)(!0);i(60)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,i=this._i;return i>=t.length?{value:void 0,done:!0}:(e=n(t,i),this._i+=e.length,{value:e,done:!1})})},function(e,t,i){t.f=i(8)},function(e,t,i){var n=i(9),o=i(6),s=i(39),r=i(48),a=i(12).f;e.exports=function(e){var t=o.Symbol||(o.Symbol=s?{}:n.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:r.f(e)})}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t,i){function n(e,t){this._data=null,this._ids={},this.length=0,this._options=t||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(e)}var o=i(10),s=function(e){return e&&e.__esModule?e:{default:e}}(o),r=i(5),a=i(32);n.prototype.setData=function(e){var t,i,n,o,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),t=this._data.getIds({filter:this._options&&this._options.filter}),s=[],n=0,o=t.length;n<o;n++)s.push(this._data._data[t[n]]);this._ids={},this.length=0,this._trigger("remove",{items:t,oldData:s})}if(this._data=e,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",t=this._data.getIds({filter:this._options&&this._options.filter}),n=0,o=t.length;n<o;n++)i=t[n],this._ids[i]=!0;this.length=t.length,this._trigger("add",{items:t}),this._data.on&&this._data.on("*",this.listener)}},n.prototype.refresh=function(){var e,t,i,n=this._data.getIds({filter:this._options&&this._options.filter}),o=(0,s.default)(this._ids),r={},a=[],d=[],h=[];for(t=0,i=n.length;t<i;t++)e=n[t],r[e]=!0,this._ids[e]||(a.push(e),this._ids[e]=!0);for(t=0,i=o.length;t<i;t++)e=o[t],r[e]||(d.push(e),h.push(this._data._data[e]),delete this._ids[e]);this.length+=a.length-d.length,a.length&&this._trigger("add",{items:a}),d.length&&this._trigger("remove",{items:d,oldData:h})},n.prototype.get=function(e){var t,i,n,o=this,s=r.getType(arguments[0]);"String"==s||"Number"==s||"Array"==s?(t=arguments[0],i=arguments[1],n=arguments[2]):(i=arguments[0],n=arguments[1]);var a=r.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(e){return o._options.filter(e)&&i.filter(e)});var d=[];return void 0!=t&&d.push(t),d.push(a),d.push(n),this._data&&this._data.get.apply(this._data,d)},n.prototype.getIds=function(e){var t;if(this._data){var i,n=this._options.filter;i=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,t=this._data.getIds({filter:i,order:e&&e.order})}else t=[];return t},n.prototype.map=function(e,t){var i=[];if(this._data){var n,o=this._options.filter;n=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,i=this._data.map(e,{filter:n,order:t&&t.order})}else i=[];return i},n.prototype.getDataSet=function(){for(var e=this;e instanceof n;)e=e._data;return e||null},n.prototype._onEvent=function(e,t,i){var n,o,s,r,a=t&&t.items,d=[],h=[],l=[],u=[],c=[],f=[];if(a&&this._data){switch(e){case"add":for(n=0,o=a.length;n<o;n++)s=a[n],(r=this.get(s))&&(this._ids[s]=!0,d.push(s));break;case"update":for(n=0,o=a.length;n<o;n++)s=a[n],r=this.get(s),r?this._ids[s]?(h.push(s),c.push(t.data[n]),u.push(t.oldData[n])):(this._ids[s]=!0,d.push(s)):this._ids[s]&&(delete this._ids[s],l.push(s),f.push(t.oldData[n]));break;case"remove":for(n=0,o=a.length;n<o;n++)s=a[n],this._ids[s]&&(delete this._ids[s],l.push(s),f.push(t.oldData[n]))}this.length+=d.length-l.length,d.length&&this._trigger("add",{items:d},i),h.length&&this._trigger("update",{items:h,oldData:u,data:c},i),l.length&&this._trigger("remove",{items:l,oldData:f},i)}},n.prototype.on=a.prototype.on,n.prototype.off=a.prototype.off,n.prototype._trigger=a.prototype._trigger,n.prototype.subscribe=n.prototype.on,n.prototype.unsubscribe=n.prototype.off,e.exports=n},function(e,t,i){var n,o,s;!function(i,r){o=[],n=r,void 0!==(s="function"==typeof n?n.apply(t,o):n)&&(e.exports=s)}(0,function(){function e(e){var t,i=e&&e.preventDefault||!1,n=e&&e.container||window,o={},s={keydown:{},keyup:{}},r={};for(t=97;t<=122;t++)r[String.fromCharCode(t)]={code:t-97+65,shift:!1};for(t=65;t<=90;t++)r[String.fromCharCode(t)]={code:t,shift:!0};for(t=0;t<=9;t++)r[""+t]={code:48+t,shift:!1};for(t=1;t<=12;t++)r["F"+t]={code:111+t,shift:!1};for(t=0;t<=9;t++)r["num"+t]={code:96+t,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(e){h(e,"keydown")},d=function(e){h(e,"keyup")},h=function(e,t){if(void 0!==s[t][e.keyCode]){for(var n=s[t][e.keyCode],o=0;o<n.length;o++)void 0===n[o].shift?n[o].fn(e):1==n[o].shift&&1==e.shiftKey?n[o].fn(e):0==n[o].shift&&0==e.shiftKey&&n[o].fn(e);1==i&&e.preventDefault()}};return o.bind=function(e,t,i){if(void 0===i&&(i="keydown"),void 0===r[e])throw new Error("unsupported key: "+e);void 0===s[i][r[e].code]&&(s[i][r[e].code]=[]),s[i][r[e].code].push({fn:t,shift:r[e].shift})},o.bindAll=function(e,t){void 0===t&&(t="keydown");for(var i in r)r.hasOwnProperty(i)&&o.bind(i,e,t)},o.getKey=function(e){for(var t in r)if(r.hasOwnProperty(t)){if(1==e.shiftKey&&1==r[t].shift&&e.keyCode==r[t].code)return t;if(0==e.shiftKey&&0==r[t].shift&&e.keyCode==r[t].code)return t;if(e.keyCode==r[t].code&&"shift"==t)return t}return"unknown key, currently not supported"},o.unbind=function(e,t,i){if(void 0===i&&(i="keydown"),void 0===r[e])throw new Error("unsupported key: "+e);if(void 0!==t){var n=[],o=s[i][r[e].code];if(void 0!==o)for(var a=0;a<o.length;a++)o[a].fn==t&&o[a].shift==r[e].shift||n.push(s[i][r[e].code][a]);s[i][r[e].code]=n}else s[i][r[e].code]=[]},o.reset=function(){s={keydown:{},keyup:{}}},o.destroy=function(){s={keydown:{},keyup:{}},n.removeEventListener("keydown",a,!0),n.removeEventListener("keyup",d,!0)},n.addEventListener("keydown",a,!0),n.addEventListener("keyup",d,!0),o}return e})},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o.labelOffset=0,o.selected=!1,o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"setOptions",value:function(e,t,i){this.options=e,void 0===t&&void 0===i||this.setImages(t,i)}},{key:"setImages",value:function(e,t){t&&this.selected?(this.imageObj=t,this.imageObjAlt=e):(this.imageObj=e,this.imageObjAlt=t)}},{key:"switchImages",value:function(e){var t=e&&!this.selected||!e&&this.selected;if(this.selected=e,void 0!==this.imageObjAlt&&t){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_resizeImage",value:function(){var e,t;if(!1===this.options.shapeProperties.useImageSize){var i=1,n=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:n=this.imageObj.height/this.imageObj.width),e=2*this.options.size*i,t=2*this.options.size*n}else e=this.imageObj.width,t=this.imageObj.height;this.width=e,this.height=t,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(e,t,i,n){this.initContextForDraw(e,n),e.circle(t,i,n.size),this.performFill(e,n)}},{key:"_drawImageAtPosition",value:function(e,t){if(0!=this.imageObj.width){e.globalAlpha=1,this.enableShadow(e,t);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale),this.imageObj.drawImageAtPosition(e,i,this.left,this.top,this.width,this.height),this.disableShadow(e,t)}}},{key:"_drawImageLabel",value:function(e,t,i,n,o){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(e,n,o);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(e,t,s,n,o,"hanging")}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.printStyle=void 0;var o=i(21),s=n(o),r=i(7),a=n(r),d=i(10),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=i(5),v=!1,g=void 0,y="background: #FFeeee; color: #dd0000",m=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,null,[{key:"validate",value:function(t,i,n){v=!1,g=i;var o=i;return void 0!==n&&(o=i[n]),e.parse(t,o,[]),v}},{key:"parse",value:function(t,i,n){for(var o in t)t.hasOwnProperty(o)&&e.check(o,t,i,n)}},{key:"check",value:function(t,i,n,o){if(void 0===n[t]&&void 0===n.__any__)return void e.getSuggestion(t,n,o);var s=t,r=!0;void 0===n[t]&&void 0!==n.__any__&&(s="__any__",r="object"===e.getType(i[t]));var a=n[s];r&&void 0!==a.__type__&&(a=a.__type__),e.checkFields(t,i,n,s,a,o)}},{key:"checkFields",value:function(t,i,n,o,s,r){var a=function(i){console.log("%c"+i+e.printLocation(r,t),y)},d=e.getType(i[t]),l=s[d];void 0!==l?"array"===e.getType(l)&&-1===l.indexOf(i[t])?(a('Invalid option detected in "'+t+'". Allowed values are:'+e.print(l)+' not "'+i[t]+'". '),v=!0):"object"===d&&"__any__"!==o&&(r=p.copyAndExtendArray(r,t),e.parse(i[t],n[o],r)):void 0===s.any&&(a('Invalid type received for "'+t+'". Expected: '+e.print((0,h.default)(s))+". Received ["+d+'] "'+i[t]+'"'),v=!0)}},{key:"getType",value:function(e){var t=void 0===e?"undefined":(0,a.default)(e);return"object"===t?null===e?"null":e instanceof Boolean?"boolean":e instanceof Number?"number":e instanceof String?"string":Array.isArray(e)?"array":e instanceof Date?"date":void 0!==e.nodeType?"dom":!0===e._isAMomentObject?"moment":"object":"number"===t?"number":"boolean"===t?"boolean":"string"===t?"string":void 0===t?"undefined":t}},{key:"getSuggestion",value:function(t,i,n){var o=e.findInOptions(t,i,n,!1),s=e.findInOptions(t,g,[],!0),r=void 0;r=void 0!==o.indexMatch?" in "+e.printLocation(o.path,t,"")+'Perhaps it was incomplete? Did you mean: "'+o.indexMatch+'"?\n\n':s.distance<=4&&o.distance>s.distance?" in "+e.printLocation(o.path,t,"")+"Perhaps it was misplaced? Matching option found at: "+e.printLocation(s.path,s.closestMatch,""):o.distance<=8?'. Did you mean "'+o.closestMatch+'"?'+e.printLocation(o.path,t):". Did you mean one of these: "+e.print((0,h.default)(i))+e.printLocation(n,t),console.log('%cUnknown option detected: "'+t+'"'+r,y),v=!0}},{key:"findInOptions",value:function(t,i,n){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],d=t.toLowerCase(),h=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&!0===o){var c=e.findInOptions(t,i[l],p.copyAndExtendArray(n,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,h=c.indexMatch)}else-1!==l.toLowerCase().indexOf(d)&&(h=l),u=e.levenshteinDistance(t,l),s>u&&(r=l,a=p.copyArray(n),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:h}}},{key:"printLocation",value:function(e,t){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",n="\n\n"+i+"options = {\n",o=0;o<e.length;o++){for(var s=0;s<o+1;s++)n+="  ";n+=e[o]+": {\n"}for(var r=0;r<e.length+1;r++)n+="  ";n+=t+"\n";for(var a=0;a<e.length+1;a++){for(var d=0;d<e.length-a;d++)n+="  ";n+="}\n"}return n+"\n\n"}},{key:"print",value:function(e){return(0,s.default)(e).replace(/(\")|(\[)|(\])|(,"__type__")/g,"").replace(/(\,)/g,", ")}},{key:"levenshteinDistance",value:function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;var i,n=[];for(i=0;i<=t.length;i++)n[i]=[i];var o;for(o=0;o<=e.length;o++)n[0][o]=o;for(i=1;i<=t.length;i++)for(o=1;o<=e.length;o++)t.charAt(i-1)==e.charAt(o-1)?n[i][o]=n[i-1][o-1]:n[i][o]=Math.min(n[i-1][o-1]+1,Math.min(n[i][o-1]+1,n[i-1][o]+1));return n[t.length][e.length]}}]),e}();t.default=m,t.printStyle=y},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(21),s=n(o),r=i(7),a=n(r),d=i(30),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=i(5),v=i(77).default,g=i(34).default,y=i(164).default,m=i(166).default,b=i(167).default,_=i(168).default,w=function(){function e(t,i,n,o){if((0,u.default)(this,e),void 0===i)throw new Error("No body provided");this.options=p.bridgeObject(n),this.globalOptions=n,this.defaultOptions=o,this.body=i,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new v(this.body,this.options,!0),this.setOptions(t)}return(0,f.default)(e,[{key:"setOptions",value:function(t){if(t){e.parseOptions(this.options,t,!0,this.globalOptions),void 0!==t.id&&(this.id=t.id),void 0!==t.from&&(this.fromId=t.from),void 0!==t.to&&(this.toId=t.to),void 0!==t.title&&(this.title=t.title),void 0!==t.value&&(t.value=parseFloat(t.value));var i=[t,this.options,this.defaultOptions];this.chooser=g.choosify("edge",i),this.updateLabelModule(t);var n=this.updateEdgeType();return this._setInteractionWidths(),this.connect(),void 0===t.hidden&&void 0===t.physics||(n=!0),n}}},{key:"getFormattingValues",value:function(){var e=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,t=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,n=this.options.color.inherit,o={toArrow:e,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,fromArrow:t,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,arrowStrikethrough:this.options.arrowStrikethrough,color:n?void 0:this.options.color.color,inheritsColor:n,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var s=this.options.selectionWidth;"function"==typeof s?o.width=s(o.width):"number"==typeof s&&(o.width+=s),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.highlight,o.shadow=this.options.shadow.enabled}else if(this.hover){var r=this.options.hoverWidth;"function"==typeof r?o.width=r(o.width):"number"==typeof r&&(o.width+=r),o.width=Math.max(o.width,.3/this.body.view.scale),o.color=this.options.color.hover,o.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(o,this.options.id,this.selected,this.hover),void 0!==o.color&&(o.inheritsColor=!1),!1===o.shadow&&(o.shadowColor===this.options.shadow.color&&o.shadowSize===this.options.shadow.size&&o.shadowX===this.options.shadow.x&&o.shadowY===this.options.shadow.y||(o.shadow=!0)));else o.shadow=this.options.shadow.enabled,o.width=Math.max(o.width,.3/this.body.view.scale);return o}},{key:"updateLabelModule",value:function(e){var t=[e,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,t),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var e=this.options.smooth,t=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof m&&!0===e.enabled&&"dynamic"===e.type||this.edgeType instanceof y&&!0===e.enabled&&"cubicBezier"===e.type||this.edgeType instanceof b&&!0===e.enabled&&"dynamic"!==e.type&&"cubicBezier"!==e.type||this.edgeType instanceof _&&!1===e.type.enabled)&&(i=!1),!0===i&&(t=this.cleanup())),!0===i?!0===e.enabled?"dynamic"===e.type?(t=!0,this.edgeType=new m(this.options,this.body,this.labelModule)):"cubicBezier"===e.type?this.edgeType=new y(this.options,this.body,this.labelModule):this.edgeType=new b(this.options,this.body,this.labelModule):this.edgeType=new _(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),t}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(e,t,i){if(void 0!==this.options.value){var n=this.options.scaling.customScalingFunction(e,t,i,this.options.value),o=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+n*s}this.options.width=this.options.scaling.min+n*o}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(e){var t=this.getFormattingValues();if(!t.hidden){var i=this.edgeType.getViaNode(),n={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,t.fromArrow&&(n.from=this.edgeType.getArrowData(e,"from",i,this.selected,this.hover,t),!1===t.arrowStrikethrough&&(this.edgeType.fromPoint=n.from.core)),t.toArrow&&(n.to=this.edgeType.getArrowData(e,"to",i,this.selected,this.hover,t),!1===t.arrowStrikethrough&&(this.edgeType.toPoint=n.to.core)),t.middleArrow&&(n.middle=this.edgeType.getArrowData(e,"middle",i,this.selected,this.hover,t)),this.edgeType.drawLine(e,t,this.selected,this.hover,i),this.drawArrows(e,n,t),this.drawLabel(e,i)}}},{key:"drawArrows",value:function(e,t,i){i.fromArrow&&this.edgeType.drawArrowHead(e,i,this.selected,this.hover,t.from),i.middleArrow&&this.edgeType.drawArrowHead(e,i,this.selected,this.hover,t.middle),i.toArrow&&this.edgeType.drawArrowHead(e,i,this.selected,this.hover,t.to)}},{key:"drawLabel",value:function(e,t){if(void 0!==this.options.label){var i=this.from,n=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(e,this.selected,this.hover),i.id!=n.id){this.labelModule.pointToSelf=!1;var o=this.edgeType.getPoint(.5,t);e.save();var s=this._getRotation(e);0!=s.angle&&(e.translate(s.x,s.y),e.rotate(s.angle)),this.labelModule.draw(e,o.x,o.y,this.selected,this.hover),e.restore()}else{this.labelModule.pointToSelf=!0;var r,a,d=this.options.selfReferenceSize;i.shape.width>i.shape.height?(r=i.x+.5*i.shape.width,a=i.y-d):(r=i.x+d,a=i.y-.5*i.shape.height),o=this._pointOnCircle(r,a,d,.125),this.labelModule.draw(e,o.x,o.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(e){var t=[];if(this.labelModule.visible()){var i=this._getRotation();g.pointInRect(this.labelModule.getSize(),e,i)&&t.push({edgeId:this.id,labelId:0})}var n={left:e.x,top:e.y};return this.isOverlappingWith(n)&&t.push({edgeId:this.id}),t}},{key:"isOverlappingWith",value:function(e){if(this.connected){var t=this.from.x,i=this.from.y,n=this.to.x,o=this.to.y,s=e.left,r=e.top;return this.edgeType.getDistanceToEdge(t,i,n,o,s,r)<10}return!1}},{key:"_getRotation",value:function(e){var t=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,t);void 0!==e&&this.labelModule.calculateLabelSize(e,this.selected,this.hover,i.x,i.y);var n={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return n;if("horizontal"===this.options.font.align)return n;var o=this.from.y-this.to.y,s=this.from.x-this.to.x,r=Math.atan2(o,s);return(r<-1&&s<0||r>0&&s<0)&&(r+=Math.PI),n.angle=r,n}},{key:"_pointOnCircle",value:function(e,t,i,n){var o=2*n*Math.PI;return{x:e+i*Math.cos(o),y:t-i*Math.sin(o)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=["arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width","font","chosen","widthConstraint"];if(p.selectiveDeepExtend(r,e,t,i),g.isValidLabel(t.label)?e.label=t.label:e.label=void 0,p.mergeOptions(e,t,"smooth",n),p.mergeOptions(e,t,"shadow",n),void 0!==t.dashes&&null!==t.dashes?e.dashes=t.dashes:!0===i&&null===t.dashes&&(e.dashes=(0,h.default)(n.dashes)),void 0!==t.scaling&&null!==t.scaling?(void 0!==t.scaling.min&&(e.scaling.min=t.scaling.min),void 0!==t.scaling.max&&(e.scaling.max=t.scaling.max),p.mergeOptions(e.scaling,t.scaling,"label",n.scaling)):!0===i&&null===t.scaling&&(e.scaling=(0,h.default)(n.scaling)),void 0!==t.arrows&&null!==t.arrows)if("string"==typeof t.arrows){var d=t.arrows.toLowerCase();e.arrows.to.enabled=-1!=d.indexOf("to"),e.arrows.middle.enabled=-1!=d.indexOf("middle"),e.arrows.from.enabled=-1!=d.indexOf("from")}else{if("object"!==(0,a.default)(t.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(t.arrows));p.mergeOptions(e.arrows,t.arrows,"to",n.arrows),p.mergeOptions(e.arrows,t.arrows,"middle",n.arrows),p.mergeOptions(e.arrows,t.arrows,"from",n.arrows)}else!0===i&&null===t.arrows&&(e.arrows=(0,h.default)(n.arrows));if(void 0!==t.color&&null!==t.color){var l=t.color,u=e.color;if(o)p.deepExtend(u,n.color,!1,i);else for(var c in u)u.hasOwnProperty(c)&&delete u[c];if(p.isString(u))u.color=u,u.highlight=u,u.hover=u,u.inherit=!1,void 0===l.opacity&&(u.opacity=1);else{var f=!1;void 0!==l.color&&(u.color=l.color,f=!0),void 0!==l.highlight&&(u.highlight=l.highlight,f=!0),void 0!==l.hover&&(u.hover=l.hover,f=!0),void 0!==l.inherit&&(u.inherit=l.inherit),void 0!==l.opacity&&(u.opacity=Math.min(1,Math.max(0,l.opacity))),!0===f?u.inherit=!1:void 0===u.inherit&&(u.inherit="from")}}else!0===i&&null===t.color&&(e.color=p.bridgeObject(n.color));!0===i&&null===t.font&&(e.font=p.bridgeObject(n.font))}}]),e}();t.default=w},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(78),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_findBorderPositionBezier",value:function(e,t){var i,n,o,s,r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),d=0,h=0,l=1,u=this.to,c=!1;for(e.id===this.from.id&&(u=this.from,c=!0);h<=l&&d<10;){var f=.5*(h+l);if(i=this.getPoint(f,a),n=Math.atan2(u.y-i.y,u.x-i.x),o=u.distanceToBorder(t,n),s=Math.sqrt(Math.pow(i.x-u.x,2)+Math.pow(i.y-u.y,2)),r=o-s,Math.abs(r)<.2)break;r<0?!1===c?h=f:l=f:!1===c?l=f:h=f,d++}return i.t=f,i}},{key:"_getDistanceToBezierEdge",value:function(e,t,i,n,o,s,r){var a=1e9,d=void 0,h=void 0,l=void 0,u=void 0,c=void 0,f=e,p=t;for(h=1;h<10;h++)l=.1*h,u=Math.pow(1-l,2)*e+2*l*(1-l)*r.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*t+2*l*(1-l)*r.y+Math.pow(l,2)*n,h>0&&(d=this._getDistanceToLine(f,p,u,c,o,s),a=d<a?d:a),f=u,p=c;return a}},{key:"_bezierCurve",value:function(e,t,i,n){var o=void 0!==i&&void 0!==i.x,s=void 0!==n&&void 0!==n.x;e.beginPath(),e.moveTo(this.fromPoint.x,this.fromPoint.y),o&&s?e.bezierCurveTo(i.x,i.y,n.x,n.y,this.toPoint.x,this.toPoint.y):o?e.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):e.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(e,t),e.stroke(),this.disableShadow(e,t)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=function(){function e(){(0,s.default)(this,e)}return(0,a.default)(e,null,[{key:"getRange",value:function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)t=e[i[a]],s>t.shape.boundingBox.left&&(s=t.shape.boundingBox.left),r<t.shape.boundingBox.right&&(r=t.shape.boundingBox.right),n>t.shape.boundingBox.top&&(n=t.shape.boundingBox.top),o<t.shape.boundingBox.bottom&&(o=t.shape.boundingBox.bottom);return 1e9===s&&-1e9===r&&1e9===n&&-1e9===o&&(n=0,o=0,s=0,r=0),{minX:s,maxX:r,minY:n,maxY:o}}},{key:"getRangeCore",value:function(e){var t,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=1e9,o=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)t=e[i[a]],s>t.x&&(s=t.x),r<t.x&&(r=t.x),n>t.y&&(n=t.y),o<t.y&&(o=t.y);return 1e9===s&&-1e9===r&&1e9===n&&-1e9===o&&(n=0,o=0,s=0,r=0),{minX:s,maxX:r,minY:n,maxY:o}}},{key:"findCenter",value:function(e){return{x:.5*(e.maxX+e.minX),y:.5*(e.maxY+e.minY)}}},{key:"cloneOptions",value:function(e,t){var i={};return void 0===t||"node"===t?(d.deepExtend(i,e.options,!0),i.x=e.x,i.y=e.y,i.amountOfConnections=e.edges.length):d.deepExtend(i,e.options,!0),i}}]),e}();t.default=h},function(e,t,i){e.exports={default:i(84),__esModule:!0}},function(e,t,i){var n=i(37);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,i){var n=i(39),o=i(11),s=i(64),r=i(18),a=i(14),d=i(24),h=i(89),l=i(46),u=i(66),c=i(8)("iterator"),f=!([].keys&&"next"in[].keys()),p=function(){return this};e.exports=function(e,t,i,v,g,y,m){h(i,t,v);var b,_,w,k=function(e){if(!f&&e in E)return E[e];switch(e){case"keys":case"values":return function(){return new i(this,e)}}return function(){return new i(this,e)}},x=t+" Iterator",O="values"==g,M=!1,E=e.prototype,S=E[c]||E["@@iterator"]||g&&E[g],D=S||k(g),C=g?O?k("entries"):D:void 0,T="Array"==t?E.entries||S:S;if(T&&(w=u(T.call(new e)))!==Object.prototype&&w.next&&(l(w,x,!0),n||a(w,c)||r(w,c,p)),O&&S&&"values"!==S.name&&(M=!0,D=function(){return S.call(this)}),n&&!m||!f&&!M&&E[c]||r(E,c,D),d[t]=D,d[x]=p,g)if(b={values:O?D:k("values"),keys:y?D:k("keys"),entries:C},m)for(_ in b)_ in E||s(E,_,b[_]);else o(o.P+o.F*(f||M),t,b);return b}},function(e,t,i){var n=i(88);e.exports=function(e,t,i){if(n(e),void 0===t)return e;switch(i){case 1:return function(i){return e.call(t,i)};case 2:return function(i,n){return e.call(t,i,n)};case 3:return function(i,n,o){return e.call(t,i,n,o)}}return function(){return e.apply(t,arguments)}}},function(e,t,i){e.exports=!i(13)&&!i(20)(function(){return 7!=Object.defineProperty(i(63)("div"),"a",{get:function(){return 7}}).a})},function(e,t,i){var n=i(25),o=i(9).document,s=n(o)&&n(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},function(e,t,i){e.exports=i(18)},function(e,t,i){var n=i(14),o=i(17),s=i(91)(!1),r=i(43)("IE_PROTO");e.exports=function(e,t){var i,a=o(e),d=0,h=[];for(i in a)i!=r&&n(a,i)&&h.push(i);for(;t.length>d;)n(a,i=t[d++])&&(~s(h,i)||h.push(i));return h}},function(e,t,i){var n=i(14),o=i(29),s=i(43)("IE_PROTO"),r=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=o(e),n(e,s)?e[s]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?r:null}},function(e,t,i){var n=i(37),o=i(8)("toStringTag"),s="Arguments"==n(function(){return arguments}()),r=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,i,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=r(t=Object(e),o))?i:s?n(t):"Object"==(a=n(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t,i){var n=i(11),o=i(6),s=i(20);e.exports=function(e,t){var i=(o.Object||{})[e]||Object[e],r={};r[e]=t(i),n(n.S+n.F*s(function(){i(1)}),"Object",r)}},function(e,t,i){var n=i(65),o=i(45).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},function(e,t,i){var n=i(31),o=i(27),s=i(17),r=i(40),a=i(14),d=i(62),h=Object.getOwnPropertyDescriptor;t.f=i(13)?h:function(e,t){if(e=s(e),t=r(t,!0),d)try{return h(e,t)}catch(e){}if(a(e,t))return o(!n.f.call(e,t),e[t])}},function(e,t,i){e.exports="undefined"!=typeof window&&window.moment||i(114)},function(e,t,i){function n(e){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(e)}n.prototype.setOptions=function(e){e&&void 0!==e.delay&&(this.delay=e.delay),e&&void 0!==e.max&&(this.max=e.max),this._flushIfNeeded()},n.extend=function(e,t){var i=new n(t);if(void 0!==e.flush)throw new Error("Target object already has a property flush");e.flush=function(){i.flush()};var o=[{name:"flush",original:void 0}];if(t&&t.replace)for(var s=0;s<t.replace.length;s++){var r=t.replace[s];o.push({name:r,original:e[r]}),i.replace(e,r)}return i._extended={object:e,methods:o},i},n.prototype.destroy=function(){if(this.flush(),this._extended){for(var e=this._extended.object,t=this._extended.methods,i=0;i<t.length;i++){var n=t[i];n.original?e[n.name]=n.original:delete e[n.name]}this._extended=null}},n.prototype.replace=function(e,t){var i=this,n=e[t];if(!n)throw new Error("Method "+t+" undefined");e[t]=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];i.queue({args:e,fn:n,context:this})}},n.prototype.queue=function(e){"function"==typeof e?this._queue.push({fn:e}):this._queue.push(e),this._flushIfNeeded()},n.prototype._flushIfNeeded=function(){if(this._queue.length>this.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var e=this;this._timeout=setTimeout(function(){e.flush()},this.delay)}},n.prototype.flush=function(){for(;this._queue.length>0;){var e=this._queue.shift();e.fn.apply(e.context||e.fn,e.args||[])}},e.exports=n},function(e,t){function i(e){if(e)return n(e)}function n(e){for(var t in i.prototype)e[t]=i.prototype[t];return e}e.exports=i,i.prototype.on=i.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks[e]=this._callbacks[e]||[]).push(t),this},i.prototype.once=function(e,t){function i(){n.off(e,i),t.apply(this,arguments)}var n=this;return this._callbacks=this._callbacks||{},i.fn=t,this.on(e,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[e];if(!i)return this;if(1==arguments.length)return delete this._callbacks[e],this;for(var n,o=0;o<i.length;o++)if((n=i[o])===t||n.fn===t){i.splice(o,1);break}return this},i.prototype.emit=function(e){this._callbacks=this._callbacks||{};var t=[].slice.call(arguments,1),i=this._callbacks[e];if(i){i=i.slice(0);for(var n=0,o=i.length;n<o;++n)i[n].apply(this,t)}return this},i.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks[e]||[]},i.prototype.hasListeners=function(e){return!!this.listeners(e).length}},function(e,t,i){function n(e){return N=e,p()}function o(){B=0,z=N.charAt(0)}function s(){B++,z=N.charAt(B)}function r(){return N.charAt(B+1)}function a(e){return j.test(e)}function d(e,t){if(e||(e={}),t)for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e}function h(e,t,i){for(var n=t.split("."),o=e;n.length;){var s=n.shift();n.length?(o[s]||(o[s]={}),o=o[s]):o[s]=i}}function l(e,t){for(var i,n,o=null,s=[e],r=e;r.parent;)s.push(r.parent),r=r.parent;if(r.nodes)for(i=0,n=r.nodes.length;i<n;i++)if(t.id===r.nodes[i].id){o=r.nodes[i];break}for(o||(o={id:t.id},e.node&&(o.attr=d(o.attr,e.node))),i=s.length-1;i>=0;i--){var a=s[i];a.nodes||(a.nodes=[]),-1===a.nodes.indexOf(o)&&a.nodes.push(o)}t.attr&&(o.attr=d(o.attr,t.attr))}function u(e,t){if(e.edges||(e.edges=[]),e.edges.push(t),e.edge){var i=d({},e.edge);t.attr=d(i,t.attr)}}function c(e,t,i,n,o){var s={from:t,to:i,type:n};return e.edge&&(s.attr=d({},e.edge)),s.attr=d(s.attr||{},o),s}function f(){for(A=I.NULL,R="";" "===z||"\t"===z||"\n"===z||"\r"===z;)s();do{var e=!1;if("#"===z){for(var t=B-1;" "===N.charAt(t)||"\t"===N.charAt(t);)t--;if("\n"===N.charAt(t)||""===N.charAt(t)){for(;""!=z&&"\n"!=z;)s();e=!0}}if("/"===z&&"/"===r()){for(;""!=z&&"\n"!=z;)s();e=!0}if("/"===z&&"*"===r()){for(;""!=z;){if("*"===z&&"/"===r()){s(),s();break}s()}e=!0}for(;" "===z||"\t"===z||"\n"===z||"\r"===z;)s()}while(e);if(""===z)return void(A=I.DELIMITER);var i=z+r();if(F[i])return A=I.DELIMITER,R=i,s(),void s();if(F[z])return A=I.DELIMITER,R=z,void s();if(a(z)||"-"===z){for(R+=z,s();a(z);)R+=z,s();return"false"===R?R=!1:"true"===R?R=!0:isNaN(Number(R))||(R=Number(R)),void(A=I.IDENTIFIER)}if('"'===z){for(s();""!=z&&('"'!=z||'"'===z&&'"'===r());)'"'===z?(R+=z,s()):"\\"===z&&"n"===r()?(R+="\n",s()):R+=z,s();if('"'!=z)throw k('End of string " expected');return s(),void(A=I.IDENTIFIER)}for(A=I.UNKNOWN;""!=z;)R+=z,s();throw new SyntaxError('Syntax error in part "'+x(R,30)+'"')}function p(){var e={};if(o(),f(),"strict"===R&&(e.strict=!0,f()),"graph"!==R&&"digraph"!==R||(e.type=R,f()),A===I.IDENTIFIER&&(e.id=R,f()),"{"!=R)throw k("Angle bracket { expected");if(f(),v(e),"}"!=R)throw k("Angle bracket } expected");if(f(),""!==R)throw k("End of file expected");return f(),delete e.node,delete e.edge,delete e.graph,e}function v(e){for(;""!==R&&"}"!=R;)g(e),";"===R&&f()}function g(e){var t=y(e);if(t)return void _(e,t);if(!m(e)){if(A!=I.IDENTIFIER)throw k("Identifier expected");var i=R;if(f(),"="===R){if(f(),A!=I.IDENTIFIER)throw k("Identifier expected");e[i]=R,f()}else b(e,i)}}function y(e){var t=null;if("subgraph"===R&&(t={},t.type="subgraph",f(),A===I.IDENTIFIER&&(t.id=R,f())),"{"===R){if(f(),t||(t={}),t.parent=e,t.node=e.node,t.edge=e.edge,t.graph=e.graph,v(t),"}"!=R)throw k("Angle bracket } expected");f(),delete t.node,delete t.edge,delete t.graph,delete t.parent,e.subgraphs||(e.subgraphs=[]),e.subgraphs.push(t)}return t}function m(e){return"node"===R?(f(),e.node=w(),"node"):"edge"===R?(f(),e.edge=w(),"edge"):"graph"===R?(f(),e.graph=w(),"graph"):null}function b(e,t){var i={id:t},n=w();n&&(i.attr=n),l(e,i),_(e,t)}function _(e,t){for(;"->"===R||"--"===R;){var i,n=R;f();var o=y(e);if(o)i=o;else{if(A!=I.IDENTIFIER)throw k("Identifier or subgraph expected");i=R,l(e,{id:i}),f()}u(e,c(e,t,i,n,w())),t=i}}function w(){for(var e=null,t={dashed:!0,solid:!1,dotted:[1,5]};"["===R;){for(f(),e={};""!==R&&"]"!=R;){if(A!=I.IDENTIFIER)throw k("Attribute name expected");var i=R;if(f(),"="!=R)throw k("Equal sign = expected");if(f(),A!=I.IDENTIFIER)throw k("Attribute value expected");var n=R;"style"===i&&(n=t[n]),h(e,i,n),f(),","==R&&f()}if("]"!=R)throw k("Bracket ] expected");f()}return e}function k(e){return new SyntaxError(e+', got "'+x(R,30)+'" (char '+B+")")}function x(e,t){return e.length<=t?e:e.substr(0,27)+"..."}function O(e,t,i){Array.isArray(e)?e.forEach(function(e){Array.isArray(t)?t.forEach(function(t){i(e,t)}):i(e,t)}):Array.isArray(t)?t.forEach(function(t){i(e,t)}):i(e,t)}function M(e,t,i){for(var n=t.split("."),o=n.pop(),s=e,r=0;r<n.length;r++){var a=n[r];a in s||(s[a]={}),s=s[a]}return s[o]=i,e}function E(e,t){var i={};for(var n in e)if(e.hasOwnProperty(n)){var o=t[n];Array.isArray(o)?o.forEach(function(t){M(i,t,e[n])}):"string"==typeof o?M(i,o,e[n]):M(i,n,e[n])}return i}function S(e){var t=n(e),i={nodes:[],edges:[],options:{}};if(t.nodes&&t.nodes.forEach(function(e){var t={id:e.id,label:String(e.label||e.id)};d(t,E(e.attr,T)),t.image&&(t.shape="image"),i.nodes.push(t)}),t.edges){var o=function(e){var t={from:e.from,to:e.to};return d(t,E(e.attr,P)),t.arrows="->"===e.type?"to":void 0,t};t.edges.forEach(function(e){var t,n;t=e.from instanceof Object?e.from.nodes:{id:e.from},n=e.to instanceof Object?e.to.nodes:{id:e.to},e.from instanceof Object&&e.from.edges&&e.from.edges.forEach(function(e){var t=o(e);i.edges.push(t)}),O(t,n,function(t,n){var s=c(i,t.id,n.id,e.type,e.attr),r=o(s);i.edges.push(r)}),e.to instanceof Object&&e.to.edges&&e.to.edges.forEach(function(e){var t=o(e);i.edges.push(t)})})}return t.attr&&(i.options=t.attr),i}var D=i(30),C=function(e){return e&&e.__esModule?e:{default:e}}(D),T={fontsize:"font.size",fontcolor:"font.color",labelfontcolor:"font.color",fontname:"font.face",color:["color.border","color.background"],fillcolor:"color.background",tooltip:"title",labeltooltip:"title"},P=(0,C.default)(T);P.color="color.color",P.style="dashes";var I={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},F={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},N="",B=0,z="",R="",A=I.NULL,j=/[a-zA-Z_0-9.:#]/;t.parseDOT=n,t.DOTToGraph=S},function(e,t,i){function n(e,t){var i=[],n=[],o={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==t&&(void 0!==t.fixed&&(o.nodes.fixed=t.fixed),void 0!==t.parseColor&&(o.nodes.parseColor=t.parseColor),void 0!==t.inheritColor&&(o.edges.inheritColor=t.inheritColor));for(var s=e.edges,r=e.nodes,a=0;a<s.length;a++){var d={},h=s[a];d.id=h.id,d.from=h.source,d.to=h.target,d.attributes=h.attributes,d.label=h.label,d.title=void 0!==h.attributes?h.attributes.title:void 0,"Directed"===h.type&&(d.arrows="to"),h.color&&!1===o.inheritColor&&(d.color=h.color),i.push(d)}for(var l=0;l<r.length;l++){var u={},c=r[l];u.id=c.id,u.attributes=c.attributes,u.x=c.x,u.y=c.y,u.label=c.label,u.title=void 0!==c.attributes?c.attributes.title:c.title,!0===o.nodes.parseColor?u.color=c.color:u.color=void 0!==c.color?{background:c.color,border:c.color,highlight:{background:c.color,border:c.color},hover:{background:c.color,border:c.color}}:void 0,u.size=c.size,u.fixed=o.nodes.fixed&&void 0!==c.x&&void 0!==c.y,n.push(u)}return{nodes:n,edges:i}}t.parseGephi=n},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(130),h=n(d),l=function(){function e(t){(0,s.default)(this,e),this.images={},this.imageBroken={},this.callback=t}return(0,a.default)(e,[{key:"_tryloadBrokenUrl",value:function(e,t,i){if(void 0!==e&&void 0!==i){if(void 0===t)return void console.warn("No broken url image defined");i.onerror=function(){console.error("Could not load brokenImage:",t)},i.image.src=t}}},{key:"_redrawWithImage",value:function(e){this.callback&&this.callback(e)}},{key:"load",value:function(e,t){var i=this,n=this.images[e];if(n)return n;var o=new h.default;return this.images[e]=o,o.image.onload=function(){i._fixImageCoordinates(o.image),o.init(),i._redrawWithImage(o)},o.image.onerror=function(){console.error("Could not load image:",e),i._tryloadBrokenUrl(e,t,o)},o.image.src=e,o}},{key:"_fixImageCoordinates",value:function(e){0===e.width&&(document.body.appendChild(e),e.width=e.offsetWidth,e.height=e.offsetHeight,document.body.removeChild(e))}}]),e}();t.default=l},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(7),a=n(r),d=i(0),h=n(d),l=i(1),u=n(l),c=i(5),f=i(34).default,p=i(136).default,v=["bold","ital","boldital","mono"],g=function(){function e(t,i){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,h.default)(this,e),this.body=t,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=n}return(0,u.default)(e,[{key:"setOptions",value:function(e){if(this.elementOptions=e,this.initFontOptions(e.font),f.isValidLabel(e.label)?this.labelDirty=!0:e.label="",void 0!==e.font&&null!==e.font)if("string"==typeof e.font)this.baseSize=this.fontOptions.size;else if("object"===(0,a.default)(e.font)){var t=e.font.size;void 0!==t&&(this.baseSize=t)}}},{key:"initFontOptions",value:function(t){var i=this;if(c.forEach(v,function(e){i.fontOptions[e]={}}),e.parseFontString(this.fontOptions,t))return void(this.fontOptions.vadjust=0);c.forEach(t,function(e,t){void 0!==e&&null!==e&&"object"!==(void 0===e?"undefined":(0,a.default)(e))&&(i.fontOptions[t]=e)})}},{key:"constrain",value:function(e){var t={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=c.topMost(e,"widthConstraint");if("number"==typeof i)t.maxWdt=Number(i),t.minWdt=Number(i);else if("object"===(void 0===i?"undefined":(0,a.default)(i))){var n=c.topMost(e,["widthConstraint","maximum"]);"number"==typeof n&&(t.maxWdt=Number(n));var o=c.topMost(e,["widthConstraint","minimum"]);"number"==typeof o&&(t.minWdt=Number(o))}var s=c.topMost(e,"heightConstraint");if("number"==typeof s)t.minHgt=Number(s);else if("object"===(void 0===s?"undefined":(0,a.default)(s))){var r=c.topMost(e,["heightConstraint","minimum"]);"number"==typeof r&&(t.minHgt=Number(r));var d=c.topMost(e,["heightConstraint","valign"]);"string"==typeof d&&("top"!==d&&"bottom"!==d||(t.valign=d))}return t}},{key:"update",value:function(e,t){this.setOptions(e,!0),this.propagateFonts(t),c.deepExtend(this.fontOptions,this.constrain(t)),this.fontOptions.chooser=f.choosify("label",t)}},{key:"adjustSizes",value:function(e){var t=e?e.right+e.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=t,this.fontOptions.minWdt-=t);var i=e?e.top+e.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(e,t){for(var i=0;i<t.length;++i)this.addFontToPile(e,t[i])}},{key:"addFontToPile",value:function(e,t){if(void 0!==t&&void 0!==t.font&&null!==t.font){var i=t.font;e.push(i)}}},{key:"getBasicOptions",value:function(t){for(var i={},n=0;n<t.length;++n){var o=t[n],s={};e.parseFontString(s,o)&&(o=s),c.forEach(o,function(e,t){void 0!==e&&(i.hasOwnProperty(t)||(-1!==v.indexOf(t)?i[t]={}:i[t]=e))})}return i}},{key:"getFontOption",value:function(t,i,n){for(var o=void 0,s=0;s<t.length;++s){var r=t[s];if(r.hasOwnProperty(i)){if(void 0===(o=r[i])||null===o)continue;var a={};if(e.parseFontString(a,o)&&(o=a),o.hasOwnProperty(n))return o[n]}}if(this.fontOptions.hasOwnProperty(n))return this.fontOptions[n];throw new Error("Did not find value for multi-font for property: '"+n+"'")}},{key:"getFontOptions",value:function(e,t){for(var i={},n=["color","size","face","mod","vadjust"],o=0;o<n.length;++o){var s=n[o];i[s]=this.getFontOption(e,t,s)}return i}},{key:"propagateFonts",value:function(e){var t=this,i=[];this.addFontOptionsToPile(i,e),this.fontOptions=this.getBasicOptions(i);for(var n=0;n<v.length;++n)!function(e){var n=v[e],o=t.fontOptions[n],s=t.getFontOptions(i,n);c.forEach(s,function(e,t){o[t]=e}),o.size=Number(o.size),o.vadjust=Number(o.vadjust)}(n)}},{key:"draw",value:function(e,t,i,n,o){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r<this.elementOptions.scaling.label.drawThreshold-1||(r>=this.elementOptions.scaling.label.maxVisible&&(r=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(e,n,o,t,i,s),this._drawBackground(e),this._drawText(e,t,this.size.yLine,s,r))}}},{key:"_drawBackground",value:function(e){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){e.fillStyle=this.fontOptions.background;var t=this.getSize();e.fillRect(t.left,t.top,t.width,t.height)}}},{key:"_drawText",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",o=arguments[4],r=this._setAlignment(e,t,i,n),a=(0,s.default)(r,2);t=a[0],i=a[1],e.textAlign="left",t-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var d=0;d<this.lineCount;d++){var h=this.lines[d];if(h&&h.blocks){var l=0;this.isEdgeLabel||"center"===this.fontOptions.align?l+=(this.size.width-h.width)/2:"right"===this.fontOptions.align&&(l+=this.size.width-h.width);for(var u=0;u<h.blocks.length;u++){var c=h.blocks[u];e.font=c.font;var f=this._getColor(c.color,o,c.strokeColor),p=(0,s.default)(f,2),v=p[0],g=p[1];c.strokeWidth>0&&(e.lineWidth=c.strokeWidth,e.strokeStyle=g,e.lineJoin="round"),e.fillStyle=v,c.strokeWidth>0&&e.strokeText(c.text,t+l,i+c.vadjust),e.fillText(c.text,t+l,i+c.vadjust),l+=c.width}i+=h.height}}}},{key:"_setAlignment",value:function(e,t,i,n){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){t=0,i=0;"top"===this.fontOptions.align?(e.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(e.textBaseline="hanging",i+=4):e.textBaseline="middle"}else e.textBaseline=n;return[t,i]}},{key:"_getColor",value:function(e,t,i){var n=e||"#000000",o=i||"#ffffff";if(t<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-t)));n=c.overrideOpacity(n,s),o=c.overrideOpacity(o,s)}return[n,o]}},{key:"getTextSize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(e,t,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var e=this.size.left,t=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":e=i,t=.5*-this.size.height;break;case"top":e=i,t=-(this.size.height+2);break;case"bottom":e=i,t=2}}return{left:e,top:t,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(e,t,i),this.size.left=n-.5*this.size.width,this.size.top=o-.5*this.size.height,this.size.yLine=o+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(e,t,i,n){var o=function(e,t,i){return"normal"===t?"mod"===i?"":e[i]:void 0!==e[t][i]?e[t][i]:e[i]},s={color:o(this.fontOptions,n,"color"),size:o(this.fontOptions,n,"size"),face:o(this.fontOptions,n,"face"),mod:o(this.fontOptions,n,"mod"),vadjust:o(this.fontOptions,n,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(t||i)&&("normal"===n&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?s.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(s,this.elementOptions.id,t,i));var r="";return void 0!==s.mod&&""!==s.mod&&(r+=s.mod+" "),r+=s.size+"px "+s.face,e.font=r.replace(/"/g,""),s.font=e.font,s.height=s.size,s}},{key:"differentState",value:function(e,t){return e!==this.selectedState||t!==this.hoverState}},{key:"_processLabelText",value:function(e,t,i,n){return new p(e,this,t,i).process(n)}},{key:"_processLabel",value:function(e,t,i){if(!1!==this.labelDirty||this.differentState(t,i)){var n=this._processLabelText(e,t,i,this.elementOptions.label);this.fontOptions.minWdt>0&&n.width<this.fontOptions.minWdt&&(n.width=this.fontOptions.minWdt),this.size.labelHeight=n.height,this.fontOptions.minHgt>0&&n.height<this.fontOptions.minHgt&&(n.height=this.fontOptions.minHgt),this.lines=n.lines,this.lineCount=n.lines.length,this.size.width=n.width,this.size.height=n.height,this.selectedState=t,this.hoverState=i,this.labelDirty=!1}}},{key:"visible",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:"parseFontString",value:function(e,t){if(!t||"string"!=typeof t)return!1;var i=t.split(" ");return e.size=i[0].replace("px",""),e.face=i[1],e.color=i[2],!0}}]),e}();t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(5),u=i(79).default,c=function(){function e(t,i,n){(0,a.default)(this,e),this.body=i,this.labelModule=n,this.options={},this.setOptions(t),this.colorDirty=!0,this.color={},this.selectionWidth=2,this.hoverWidth=1.5,this.fromPoint=this.from,this.toPoint=this.to}return(0,h.default)(e,[{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to]}},{key:"cleanup",value:function(){return!1}},{key:"setOptions",value:function(e){this.options=e,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.id=this.options.id}},{key:"drawLine",value:function(e,t,i,n,o){e.strokeStyle=this.getColor(e,t,i,n),e.lineWidth=t.width,!1!==t.dashes?this._drawDashedLine(e,t,o):this._drawLine(e,t,o)}},{key:"_drawLine",value:function(e,t,i,n,o){if(this.from!=this.to)this._line(e,t,i,n,o);else{var r=this._getCircleData(e),a=(0,s.default)(r,3),d=a[0],h=a[1],l=a[2];this._circle(e,t,d,h,l)}}},{key:"_drawDashedLine",value:function(e,t,i,n,o){e.lineCap="round";var r=[5,5];if(!0===Array.isArray(t.dashes)&&(r=t.dashes),void 0!==e.setLineDash){if(e.save(),e.setLineDash(r),e.lineDashOffset=0,this.from!=this.to)this._line(e,t,i);else{var a=this._getCircleData(e),d=(0,s.default)(a,3),h=d[0],l=d[1],u=d[2];this._circle(e,t,h,l,u)}e.setLineDash([0]),e.lineDashOffset=0,e.restore()}else{if(this.from!=this.to)e.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(e),f=(0,s.default)(c,3),p=f[0],v=f[1],g=f[2];this._circle(e,t,p,v,g)}this.enableShadow(e,t),e.stroke(),this.disableShadow(e,t)}}},{key:"findBorderPosition",value:function(e,t,i){return this.from!=this.to?this._findBorderPosition(e,t,i):this._findBorderPositionCircle(e,t,i)}},{key:"findBorderPositions",value:function(e){var t={},i={};if(this.from!=this.to)t=this._findBorderPosition(this.from,e),i=this._findBorderPosition(this.to,e);else{var n=this._getCircleData(e).slice(0,2),o=(0,s.default)(n,2),r=o[0],a=o[1];t=this._findBorderPositionCircle(this.from,e,{x:r,y:a,low:.25,high:.6,direction:-1}),i=this._findBorderPositionCircle(this.from,e,{x:r,y:a,low:.6,high:.8,direction:1})}return{from:t,to:i}}},{key:"_getCircleData",value:function(e){var t=void 0,i=void 0,n=this.from,o=this.options.selfReferenceSize;return void 0!==e&&void 0===n.shape.width&&n.shape.resize(e),n.shape.width>n.shape.height?(t=n.x+.5*n.shape.width,i=n.y-o):(t=n.x+o,i=n.y-.5*n.shape.height),[t,i,o]}},{key:"_pointOnCircle",value:function(e,t,i,n){var o=2*n*Math.PI;return{x:e+i*Math.cos(o),y:t-i*Math.sin(o)}}},{key:"_findBorderPositionCircle",value:function(e,t,i){for(var n=i.x,o=i.y,s=i.low,r=i.high,a=i.direction,d=0,h=this.options.selfReferenceSize,l=void 0,u=void 0,c=void 0,f=void 0,p=void 0,v=.5*(s+r);s<=r&&d<10&&(v=.5*(s+r),l=this._pointOnCircle(n,o,h,v),u=Math.atan2(e.y-l.y,e.x-l.x),c=e.distanceToBorder(t,u),f=Math.sqrt(Math.pow(l.x-e.x,2)+Math.pow(l.y-e.y,2)),p=c-f,!(Math.abs(p)<.05));)p>0?a>0?s=v:r=v:a>0?r=v:s=v,d++;return l.t=v,l}},{key:"getLineWidth",value:function(e,t){return!0===e?Math.max(this.selectionWidth,.3/this.body.view.scale):!0===t?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(e,t,i,n){if(!1!==t.inheritsColor){if("both"===t.inheritsColor&&this.from.id!==this.to.id){var o=e.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,!1===this.from.selected&&!1===this.to.selected?(s=l.overrideOpacity(this.from.options.color.border,t.opacity),r=l.overrideOpacity(this.to.options.color.border,t.opacity)):!0===this.from.selected&&!1===this.to.selected?r=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(s=this.from.options.color.border),o.addColorStop(0,s),o.addColorStop(1,r),o}return"to"===t.inheritsColor?l.overrideOpacity(this.to.options.color.border,t.opacity):l.overrideOpacity(this.from.options.color.border,t.opacity)}return l.overrideOpacity(t.color,t.opacity)}},{key:"_circle",value:function(e,t,i,n,o){this.enableShadow(e,t),e.beginPath(),e.arc(i,n,o,0,2*Math.PI,!1),e.stroke(),this.disableShadow(e,t)}},{key:"getDistanceToEdge",value:function(e,t,i,n,o,r,a,d){var h=0;if(this.from!=this.to)h=this._getDistanceToEdge(e,t,i,n,o,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],f=u[1],p=u[2],v=c-o,g=f-r;h=Math.abs(Math.sqrt(v*v+g*g)-p)}return h}},{key:"_getDistanceToLine",value:function(e,t,i,n,o,s){var r=i-e,a=n-t,d=r*r+a*a,h=((o-e)*r+(s-t)*a)/d;h>1?h=1:h<0&&(h=0);var l=e+h*r,u=t+h*a,c=l-o,f=u-s;return Math.sqrt(c*c+f*f)}},{key:"getArrowData",value:function(e,t,i,n,o,r){var a=void 0,d=void 0,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=r.width;if("from"===t?(h=this.from,l=this.to,u=.1,c=r.fromArrowScale,f=r.fromArrowType):"to"===t?(h=this.to,l=this.from,u=-.1,c=r.toArrowScale,f=r.toArrowType):(h=this.to,l=this.from,c=r.middleArrowScale,f=r.middleArrowType),h!=l)if("middle"!==t)if(!0===this.options.smooth.enabled){d=this.findBorderPosition(h,e,{via:i});var v=this.getPoint(Math.max(0,Math.min(1,d.t+u)),i);a=Math.atan2(d.y-v.y,d.x-v.x)}else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.findBorderPosition(h,e);else a=Math.atan2(h.y-l.y,h.x-l.x),d=this.getPoint(.5,i);else{var g=this._getCircleData(e),y=(0,s.default)(g,3),m=y[0],b=y[1],_=y[2];"from"===t?(d=this.findBorderPosition(this.from,e,{x:m,y:b,low:.25,high:.6,direction:-1}),a=-2*d.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===t?(d=this.findBorderPosition(this.from,e,{x:m,y:b,low:.6,high:1,direction:1}),a=-2*d.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(d=this._pointOnCircle(m,b,_,.175),a=3.9269908169872414)}"middle"===t&&c<0&&(p*=-1);var w=15*c+3*p;return{point:d,core:{x:d.x-.9*w*Math.cos(a),y:d.y-.9*w*Math.sin(a)},angle:a,length:w,type:f}}},{key:"drawArrowHead",value:function(e,t,i,n,o){e.strokeStyle=this.getColor(e,t,i,n),e.fillStyle=e.strokeStyle,e.lineWidth=t.width,u.draw(e,o),this.enableShadow(e,t),e.fill(),this.disableShadow(e,t)}},{key:"enableShadow",value:function(e,t){!0===t.shadow&&(e.shadowColor=t.shadowColor,e.shadowBlur=t.shadowSize,e.shadowOffsetX=t.shadowX,e.shadowOffsetY=t.shadowY)}},{key:"disableShadow",value:function(e,t){!0===t.shadow&&(e.shadowColor="rgba(0,0,0,0)",e.shadowBlur=0,e.shadowOffsetX=0,e.shadowOffsetY=0)}}]),e}();t.default=c},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(3),a=n(r),d=i(4),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,null,[{key:"transform",value:function(e,t){e instanceof Array||(e=[e]);for(var i=t.point.x,n=t.point.y,o=t.angle,s=t.length,r=0;r<e.length;++r){var a=e[r],d=a.x*Math.cos(o)-a.y*Math.sin(o),h=a.x*Math.sin(o)+a.y*Math.cos(o);a.x=i+s*d,a.y=n+s*h}}},{key:"drawPath",value:function(e,t){e.beginPath(),e.moveTo(t[0].x,t[0].y);for(var i=1;i<t.length;++i)e.lineTo(t[i].x,t[i].y);e.closePath()}}]),e}(),v=function(e){function t(){return(0,u.default)(this,t),(0,a.default)(this,(t.__proto__||(0,s.default)(t)).apply(this,arguments))}return(0,h.default)(t,e),(0,f.default)(t,null,[{key:"draw",value:function(e,t){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];p.transform(i,t),p.drawPath(e,i)}}]),t}(p),g=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,null,[{key:"draw",value:function(e,t){var i={x:-.4,y:0};p.transform(i,t),e.circle(i.x,i.y,.4*t.length)}}]),e}(),y=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,null,[{key:"draw",value:function(e,t){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];p.transform(i,t),p.drawPath(e,i)}}]),e}(),m=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,null,[{key:"draw",value:function(e,t){var i;switch(t.type&&(i=t.type.toLowerCase()),i){case"circle":g.draw(e,t);break;case"bar":y.draw(e,t);break;case"arrow":default:v.draw(e,t)}}}]),e}();t.default=m},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.barnesHutTree,this.setOptions(n),this.randomSeed=5}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"seededRandom",value:function(){var e=1e4*Math.sin(this.randomSeed++);return e-Math.floor(e)}},{key:"solve",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var e=void 0,t=this.body.nodes,i=this.physicsBody.physicsNodeIndices,n=i.length,o=this._formBarnesHutTree(t,i);this.barnesHutTree=o;for(var s=0;s<n;s++)e=t[i[s]],e.options.mass>0&&this._getForceContributions(o.root,e)}}},{key:"_getForceContributions",value:function(e,t){this._getForceContribution(e.children.NW,t),this._getForceContribution(e.children.NE,t),this._getForceContribution(e.children.SW,t),this._getForceContribution(e.children.SE,t)}},{key:"_getForceContribution",value:function(e,t){if(e.childrenCount>0){var i=void 0,n=void 0,o=void 0;i=e.centerOfMass.x-t.x,n=e.centerOfMass.y-t.y,o=Math.sqrt(i*i+n*n),o*e.calcSize>this.thetaInversed?this._calculateForces(o,i,n,t,e):4===e.childrenCount?this._getForceContributions(e,t):e.children.data.id!=t.id&&this._calculateForces(o,i,n,t,e)}}},{key:"_calculateForces",value:function(e,t,i,n,o){0===e&&(e=.1,t=e),this.overlapAvoidanceFactor<1&&n.shape.radius&&(e=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,e-n.shape.radius));var s=this.options.gravitationalConstant*o.mass*n.options.mass/Math.pow(e,3),r=t*s,a=i*s;this.physicsBody.forces[n.id].x+=r,this.physicsBody.forces[n.id].y+=a}},{key:"_formBarnesHutTree",value:function(e,t){for(var i=void 0,n=t.length,o=e[t[0]].x,s=e[t[0]].y,r=e[t[0]].x,a=e[t[0]].y,d=1;d<n;d++){var h=e[t[d]],l=h.x,u=h.y;h.options.mass>0&&(l<o&&(o=l),l>r&&(r=l),u<s&&(s=u),u>a&&(a=u))}var c=Math.abs(r-o)-Math.abs(a-s);c>0?(s-=.5*c,a+=.5*c):(o+=.5*c,r-=.5*c);var f=Math.max(1e-5,Math.abs(r-o)),p=.5*f,v=.5*(o+r),g=.5*(s+a),y={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:v-p,maxX:v+p,minY:g-p,maxY:g+p},size:f,calcSize:1/f,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(y.root);for(var m=0;m<n;m++)i=e[t[m]],i.options.mass>0&&this._placeInTree(y.root,i);return y}},{key:"_updateBranchMass",value:function(e,t){var i=e.centerOfMass,n=e.mass+t.options.mass,o=1/n;i.x=i.x*e.mass+t.x*t.options.mass,i.x*=o,i.y=i.y*e.mass+t.y*t.options.mass,i.y*=o,e.mass=n;var s=Math.max(Math.max(t.height,t.radius),t.width);e.maxWidth=e.maxWidth<s?s:e.maxWidth}},{key:"_placeInTree",value:function(e,t,i){1==i&&void 0!==i||this._updateBranchMass(e,t);var n=e.children.NW.range,o=void 0;o=n.maxX>t.x?n.maxY>t.y?"NW":"SW":n.maxY>t.y?"NE":"SE",this._placeInRegion(e,t,o)}},{key:"_placeInRegion",value:function(e,t,i){var n=e.children[i];switch(n.childrenCount){case 0:n.children.data=t,n.childrenCount=1,this._updateBranchMass(n,t);break;case 1:n.children.data.x===t.x&&n.children.data.y===t.y?(t.x+=this.seededRandom(),t.y+=this.seededRandom()):(this._splitBranch(n),this._placeInTree(n,t));break;case 4:this._placeInTree(n,t)}}},{key:"_splitBranch",value:function(e){var t=null;1===e.childrenCount&&(t=e.children.data,e.mass=0,e.centerOfMass.x=0,e.centerOfMass.y=0),e.childrenCount=4,e.children.data=null,this._insertRegion(e,"NW"),this._insertRegion(e,"NE"),this._insertRegion(e,"SW"),this._insertRegion(e,"SE"),null!=t&&this._placeInTree(e,t)}},{key:"_insertRegion",value:function(e,t){var i=void 0,n=void 0,o=void 0,s=void 0,r=.5*e.size;switch(t){case"NW":i=e.range.minX,n=e.range.minX+r,o=e.range.minY,s=e.range.minY+r;break;case"NE":i=e.range.minX+r,n=e.range.maxX,o=e.range.minY,s=e.range.minY+r;break;case"SW":i=e.range.minX,n=e.range.minX+r,o=e.range.minY+r,s=e.range.maxY;break;case"SE":i=e.range.minX+r,n=e.range.maxX,o=e.range.minY+r,s=e.range.maxY}e.children[t]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:n,minY:o,maxY:s},size:.5*e.size,calcSize:2*e.calcSize,children:{data:null},maxWidth:0,level:e.level+1,childrenCount:0}}},{key:"_debug",value:function(e,t){void 0!==this.barnesHutTree&&(e.lineWidth=1,this._drawBranch(this.barnesHutTree.root,e,t))}},{key:"_drawBranch",value:function(e,t,i){void 0===i&&(i="#FF0000"),4===e.childrenCount&&(this._drawBranch(e.children.NW,t),this._drawBranch(e.children.NE,t),this._drawBranch(e.children.SE,t),this._drawBranch(e.children.SW,t)),t.strokeStyle=i,t.beginPath(),t.moveTo(e.range.minX,e.range.minY),t.lineTo(e.range.maxX,e.range.minY),t.stroke(),t.beginPath(),t.moveTo(e.range.maxX,e.range.minY),t.lineTo(e.range.maxX,e.range.maxY),t.stroke(),t.beginPath(),t.moveTo(e.range.maxX,e.range.maxY),t.lineTo(e.range.minX,e.range.maxY),t.stroke(),t.beginPath(),t.moveTo(e.range.minX,e.range.maxY),t.lineTo(e.range.minX,e.range.minY),t.stroke()}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.setOptions(n)}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"solve",value:function(){for(var e=void 0,t=void 0,i=void 0,n=void 0,o=this.body.nodes,s=this.physicsBody.physicsNodeIndices,r=this.physicsBody.forces,a=0;a<s.length;a++){n=o[s[a]],e=-n.x,t=-n.y,i=Math.sqrt(e*e+t*t),this._calculateForces(i,e,t,r,n)}}},{key:"_calculateForces",value:function(e,t,i,n,o){var s=0===e?0:this.options.centralGravity/e;n[o.id].x=t*s,n[o.id].y=i*s}}]),e}();t.default=d},function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0});var n="string",o="boolean",s="number",r="object",a=["arrow","circle","bar"],d={configure:{enabled:{boolean:o},filter:{boolean:o,string:n,array:"array",function:"function"},container:{dom:"dom"},showButton:{boolean:o},__type__:{object:r,boolean:o,string:n,array:"array",function:"function"}},edges:{arrows:{to:{enabled:{boolean:o},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:o}},middle:{enabled:{boolean:o},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:o}},from:{enabled:{boolean:o},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:o}},__type__:{string:["from","to","middle"],object:r}},arrowStrikethrough:{boolean:o},chosen:{label:{boolean:o,function:"function"},edge:{boolean:o,function:"function"},__type__:{object:r,boolean:o}},color:{color:{string:n},highlight:{string:n},hover:{string:n},inherit:{string:["from","to","both"],boolean:o},opacity:{number:s},__type__:{object:r,string:n}},dashes:{boolean:o,array:"array"},font:{color:{string:n},size:{number:s},face:{string:n},background:{string:n},strokeWidth:{number:s},strokeColor:{string:n},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:s},multi:{boolean:o,string:n},bold:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},boldital:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},ital:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},mono:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},__type__:{object:r,string:n}},hidden:{boolean:o},hoverWidth:{function:"function",number:s},label:{string:n,undefined:"undefined"},labelHighlightBold:{boolean:o},length:{number:s,undefined:"undefined"},physics:{boolean:o},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:o},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:o}},customScalingFunction:{function:"function"},__type__:{object:r}},selectionWidth:{function:"function",number:s},selfReferenceSize:{number:s},shadow:{enabled:{boolean:o},color:{string:n},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:o}},smooth:{enabled:{boolean:o},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:s},forceDirection:{string:["horizontal","vertical","none"],boolean:o},__type__:{object:r,boolean:o}},title:{string:n,undefined:"undefined"},width:{number:s},widthConstraint:{maximum:{number:s},__type__:{object:r,boolean:o,number:s}},value:{number:s,undefined:"undefined"},__type__:{object:r}},groups:{useDefaultGroups:{boolean:o},__any__:"get from nodes, will be overwritten below",__type__:{object:r}},interaction:{dragNodes:{boolean:o},dragView:{boolean:o},hideEdgesOnDrag:{boolean:o},hideNodesOnDrag:{boolean:o},hover:{boolean:o},keyboard:{enabled:{boolean:o},speed:{x:{number:s},y:{number:s},zoom:{number:s},__type__:{object:r}},bindToWindow:{boolean:o},__type__:{object:r,boolean:o}},multiselect:{boolean:o},navigationButtons:{boolean:o},selectable:{boolean:o},selectConnectedEdges:{boolean:o},hoverConnectedEdges:{boolean:o},tooltipDelay:{number:s},zoomView:{boolean:o},__type__:{object:r}},layout:{randomSeed:{undefined:"undefined",number:s},improvedLayout:{boolean:o},hierarchical:{enabled:{boolean:o},levelSeparation:{number:s},nodeSpacing:{number:s},treeSpacing:{number:s},blockShifting:{boolean:o},edgeMinimization:{boolean:o},parentCentralization:{boolean:o},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:r,boolean:o}},__type__:{object:r}},manipulation:{enabled:{boolean:o},initiallyActive:{boolean:o},addNode:{boolean:o,function:"function"},addEdge:{boolean:o,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:r,boolean:o,function:"function"}},deleteNode:{boolean:o,function:"function"},deleteEdge:{boolean:o,function:"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:r,boolean:o}},nodes:{borderWidth:{number:s},borderWidthSelected:{number:s,undefined:"undefined"},brokenImage:{string:n,undefined:"undefined"},chosen:{label:{boolean:o,function:"function"},node:{boolean:o,function:"function"},__type__:{object:r,boolean:o}},color:{border:{string:n},background:{string:n},highlight:{border:{string:n},background:{string:n},__type__:{object:r,string:n}},hover:{border:{string:n},background:{string:n},__type__:{object:r,string:n}},__type__:{object:r,string:n}},fixed:{x:{boolean:o},y:{boolean:o},__type__:{object:r,boolean:o}},font:{align:{string:n},color:{string:n},size:{number:s},face:{string:n},background:{string:n},strokeWidth:{number:s},strokeColor:{string:n},vadjust:{number:s},multi:{boolean:o,string:n},bold:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},boldital:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},ital:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},mono:{color:{string:n},size:{number:s},face:{string:n},mod:{string:n},vadjust:{number:s},__type__:{object:r,string:n}},__type__:{object:r,string:n}},group:{string:n,number:s,undefined:"undefined"},heightConstraint:{minimum:{number:s},valign:{string:n},__type__:{object:r,boolean:o,number:s}},hidden:{boolean:o},icon:{face:{string:n},code:{string:n},size:{number:s},color:{string:n},__type__:{object:r}},id:{string:n,number:s},image:{selected:{string:n,undefined:"undefined"},unselected:{string:n,undefined:"undefined"},__type__:{object:r,string:n}},label:{string:n,undefined:"undefined"},labelHighlightBold:{boolean:o},level:{number:s,undefined:"undefined"},margin:{top:{number:s},right:{number:s},bottom:{number:s},left:{number:s},__type__:{object:r,number:s}},mass:{number:s},physics:{boolean:o},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:o},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:o}},customScalingFunction:{function:"function"},__type__:{object:r}},shadow:{enabled:{boolean:o},color:{string:n},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:o}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},shapeProperties:{borderDashes:{boolean:o,array:"array"},borderRadius:{number:s},interpolation:{boolean:o},useImageSize:{boolean:o},useBorderWithImage:{boolean:o},__type__:{object:r}},size:{number:s},title:{string:n,dom:"dom",undefined:"undefined"},value:{number:s,undefined:"undefined"},widthConstraint:{minimum:{number:s},maximum:{number:s},__type__:{object:r,boolean:o,number:s}},x:{number:s},y:{number:s},__type__:{object:r}},physics:{enabled:{boolean:o},barnesHut:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},forceAtlas2Based:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},repulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},hierarchicalRepulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},maxVelocity:{number:s},minVelocity:{number:s},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:o},iterations:{number:s},updateInterval:{number:s},onlyDynamicEdges:{boolean:o},fit:{boolean:o},__type__:{object:r,boolean:o}},timestep:{number:s},adaptiveTimestep:{boolean:o},__type__:{object:r,boolean:o}},autoResize:{boolean:o},clickToUse:{boolean:o},locale:{string:n},locales:{__any__:{any:"any"},__type__:{object:r}},height:{string:n},width:{string:n},__type__:{object:r}};d.groups.__any__=d.nodes,d.manipulation.controlNodeStyle=d.nodes;var h={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]}};t.allOptions=d,t.configureOptions=h},function(e,t,i){t.util=i(5),t.DOMutil=i(119),t.DataSet=i(32),t.DataView=i(51),t.Queue=i(72),t.Network=i(121),t.network={Images:i(76),dotparser:i(74),gephiParser:i(75),allOptions:i(82)},t.network.convertDot=function(e){return t.network.dotparser.DOTToGraph(e)},t.network.convertGephi=function(e,i){return t.network.gephiParser.parseGephi(e,i)},t.moment=i(71),t.Hammer=i(22),t.keycharm=i(52)},function(e,t,i){i(36),i(47),e.exports=i(96)},function(e,t,i){var n=i(86),o=i(87),s=i(24),r=i(17);e.exports=i(60)(Array,"Array",function(e,t){this._t=r(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,i=this._i++;return!e||i>=e.length?(this._t=void 0,o(1)):"keys"==t?o(0,i):"values"==t?o(0,e[i]):o(0,[i,e[i]])},"values"),s.Arguments=s.Array,n("keys"),n("values"),n("entries")},function(e,t){e.exports=function(){}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,i){var n=i(41),o=i(27),s=i(46),r={};i(18)(r,i(8)("iterator"),function(){return this}),e.exports=function(e,t,i){e.prototype=n(r,{next:o(1,i)}),s(e,t+" Iterator")}},function(e,t,i){var n=i(12),o=i(19),s=i(26);e.exports=i(13)?Object.defineProperties:function(e,t){o(e);for(var i,r=s(t),a=r.length,d=0;a>d;)n.f(e,i=r[d++],t[i]);return e}},function(e,t,i){var n=i(17),o=i(92),s=i(93);e.exports=function(e){return function(t,i,r){var a,d=n(t),h=o(d.length),l=s(r,h);if(e&&i!=i){for(;h>l;)if((a=d[l++])!=a)return!0}else for(;h>l;l++)if((e||l in d)&&d[l]===i)return e||l||0;return!e&&-1}}},function(e,t,i){var n=i(42),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},function(e,t,i){var n=i(42),o=Math.max,s=Math.min;e.exports=function(e,t){return e=n(e),e<0?o(e+t,0):s(e,t)}},function(e,t,i){var n=i(9).document;e.exports=n&&n.documentElement},function(e,t,i){var n=i(42),o=i(38);e.exports=function(e){return function(t,i){var s,r,a=String(o(t)),d=n(i),h=a.length;return d<0||d>=h?e?"":void 0:(s=a.charCodeAt(d),s<55296||s>56319||d+1===h||(r=a.charCodeAt(d+1))<56320||r>57343?e?a.charAt(d):s:e?a.slice(d,d+2):r-56320+(s-55296<<10)+65536)}}},function(e,t,i){var n=i(19),o=i(97);e.exports=i(6).getIterator=function(e){var t=o(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return n(t.call(e))}},function(e,t,i){var n=i(67),o=i(8)("iterator"),s=i(24);e.exports=i(6).getIteratorMethod=function(e){if(void 0!=e)return e[o]||e["@@iterator"]||s[n(e)]}},function(e,t,i){i(99);var n=i(6).Object;e.exports=function(e,t){return n.create(e,t)}},function(e,t,i){var n=i(11);n(n.S,"Object",{create:i(41)})},function(e,t,i){i(101),e.exports=i(6).Object.keys},function(e,t,i){var n=i(29),o=i(26);i(68)("keys",function(){return function(e){return o(n(e))}})},function(e,t,i){e.exports={default:i(103),__esModule:!0}},function(e,t,i){i(47),i(36),e.exports=i(48).f("iterator")},function(e,t,i){e.exports={default:i(105),__esModule:!0}},function(e,t,i){i(106),i(111),i(112),i(113),e.exports=i(6).Symbol},function(e,t,i){var n=i(9),o=i(14),s=i(13),r=i(11),a=i(64),d=i(107).KEY,h=i(20),l=i(44),u=i(46),c=i(28),f=i(8),p=i(48),v=i(49),g=i(108),y=i(109),m=i(19),b=i(17),_=i(40),w=i(27),k=i(41),x=i(110),O=i(70),M=i(12),E=i(26),S=O.f,D=M.f,C=x.f,T=n.Symbol,P=n.JSON,I=P&&P.stringify,F=f("_hidden"),N=f("toPrimitive"),B={}.propertyIsEnumerable,z=l("symbol-registry"),R=l("symbols"),A=l("op-symbols"),j=Object.prototype,L="function"==typeof T,H=n.QObject,W=!H||!H.prototype||!H.prototype.findChild,Y=s&&h(function(){return 7!=k(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a})?function(e,t,i){var n=S(j,t);n&&delete j[t],D(e,t,i),n&&e!==j&&D(j,t,n)}:D,V=function(e){var t=R[e]=k(T.prototype);return t._k=e,t},U=L&&"symbol"==typeof T.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof T},q=function(e,t,i){return e===j&&q(A,t,i),m(e),t=_(t,!0),m(i),o(R,t)?(i.enumerable?(o(e,F)&&e[F][t]&&(e[F][t]=!1),i=k(i,{enumerable:w(0,!1)})):(o(e,F)||D(e,F,w(1,{})),e[F][t]=!0),Y(e,t,i)):D(e,t,i)},G=function(e,t){m(e);for(var i,n=g(t=b(t)),o=0,s=n.length;s>o;)q(e,i=n[o++],t[i]);return e},X=function(e,t){return void 0===t?k(e):G(k(e),t)},K=function(e){var t=B.call(this,e=_(e,!0));return!(this===j&&o(R,e)&&!o(A,e))&&(!(t||!o(this,e)||!o(R,e)||o(this,F)&&this[F][e])||t)},Z=function(e,t){if(e=b(e),t=_(t,!0),e!==j||!o(R,t)||o(A,t)){var i=S(e,t);return!i||!o(R,t)||o(e,F)&&e[F][t]||(i.enumerable=!0),i}},$=function(e){for(var t,i=C(b(e)),n=[],s=0;i.length>s;)o(R,t=i[s++])||t==F||t==d||n.push(t);return n},Q=function(e){for(var t,i=e===j,n=C(i?A:b(e)),s=[],r=0;n.length>r;)!o(R,t=n[r++])||i&&!o(j,t)||s.push(R[t]);return s};L||(T=function(){if(this instanceof T)throw TypeError("Symbol is not a constructor!");var e=c(arguments.length>0?arguments[0]:void 0),t=function(i){this===j&&t.call(A,i),o(this,F)&&o(this[F],e)&&(this[F][e]=!1),Y(this,e,w(1,i))};return s&&W&&Y(j,e,{configurable:!0,set:t}),V(e)},a(T.prototype,"toString",function(){return this._k}),O.f=Z,M.f=q,i(69).f=x.f=$,i(31).f=K,i(50).f=Q,s&&!i(39)&&a(j,"propertyIsEnumerable",K,!0),p.f=function(e){return V(f(e))}),r(r.G+r.W+r.F*!L,{Symbol:T});for(var J="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ee=0;J.length>ee;)f(J[ee++]);for(var te=E(f.store),ie=0;te.length>ie;)v(te[ie++]);r(r.S+r.F*!L,"Symbol",{for:function(e){return o(z,e+="")?z[e]:z[e]=T(e)},keyFor:function(e){if(!U(e))throw TypeError(e+" is not a symbol!");for(var t in z)if(z[t]===e)return t},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!L,"Object",{create:X,defineProperty:q,defineProperties:G,getOwnPropertyDescriptor:Z,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),P&&r(r.S+r.F*(!L||h(function(){var e=T();return"[null]"!=I([e])||"{}"!=I({a:e})||"{}"!=I(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!U(e)){for(var t,i,n=[e],o=1;arguments.length>o;)n.push(arguments[o++]);return t=n[1],"function"==typeof t&&(i=t),!i&&y(t)||(t=function(e,t){if(i&&(t=i.call(this,e,t)),!U(t))return t}),n[1]=t,I.apply(P,n)}}}),T.prototype[N]||i(18)(T.prototype,N,T.prototype.valueOf),u(T,"Symbol"),u(Math,"Math",!0),u(n.JSON,"JSON",!0)},function(e,t,i){var n=i(28)("meta"),o=i(25),s=i(14),r=i(12).f,a=0,d=Object.isExtensible||function(){return!0},h=!i(20)(function(){return d(Object.preventExtensions({}))}),l=function(e){r(e,n,{value:{i:"O"+ ++a,w:{}}})},u=function(e,t){if(!o(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!s(e,n)){if(!d(e))return"F";if(!t)return"E";l(e)}return e[n].i},c=function(e,t){if(!s(e,n)){if(!d(e))return!0;if(!t)return!1;l(e)}return e[n].w},f=function(e){return h&&p.NEED&&d(e)&&!s(e,n)&&l(e),e},p=e.exports={KEY:n,NEED:!1,fastKey:u,getWeak:c,onFreeze:f}},function(e,t,i){var n=i(26),o=i(50),s=i(31);e.exports=function(e){var t=n(e),i=o.f;if(i)for(var r,a=i(e),d=s.f,h=0;a.length>h;)d.call(e,r=a[h++])&&t.push(r);return t}},function(e,t,i){var n=i(37);e.exports=Array.isArray||function(e){return"Array"==n(e)}},function(e,t,i){var n=i(17),o=i(69).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(e){try{return o(e)}catch(e){return r.slice()}};e.exports.f=function(e){return r&&"[object Window]"==s.call(e)?a(e):o(n(e))}},function(e,t){},function(e,t,i){i(49)("asyncIterator")},function(e,t,i){i(49)("observable")},function(e,t,i){(function(e){!function(t,i){e.exports=i()}(0,function(){function t(){return Sn.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function n(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(e.hasOwnProperty(t))return!1;return!0}function s(e){return void 0===e}function r(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function a(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var i,n=[];for(i=0;i<e.length;++i)n.push(t(e[i],i));return n}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e,t){for(var i in t)h(t,i)&&(e[i]=t[i]);return h(t,"toString")&&(e.toString=t.toString),h(t,"valueOf")&&(e.valueOf=t.valueOf),e}function u(e,t,i,n){return Ot(e,t,i,n,!0).utc()}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function f(e){return null==e._pf&&(e._pf=c()),e._pf}function p(e){if(null==e._isValid){var t=f(e),i=Dn.call(t.parsedDateParts,function(e){return null!=e}),n=!isNaN(e._d.getTime())&&t.overflow<0&&!t.empty&&!t.invalidMonth&&!t.invalidWeekday&&!t.weekdayMismatch&&!t.nullInput&&!t.invalidFormat&&!t.userInvalidated&&(!t.meridiem||t.meridiem&&i);if(e._strict&&(n=n&&0===t.charsLeftOver&&0===t.unusedTokens.length&&void 0===t.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return n;e._isValid=n}return e._isValid}function v(e){var t=u(NaN);return null!=e?l(f(t),e):f(t).userInvalidated=!0,t}function g(e,t){var i,n,o;if(s(t._isAMomentObject)||(e._isAMomentObject=t._isAMomentObject),s(t._i)||(e._i=t._i),s(t._f)||(e._f=t._f),s(t._l)||(e._l=t._l),s(t._strict)||(e._strict=t._strict),s(t._tzm)||(e._tzm=t._tzm),s(t._isUTC)||(e._isUTC=t._isUTC),s(t._offset)||(e._offset=t._offset),s(t._pf)||(e._pf=f(t)),s(t._locale)||(e._locale=t._locale),Cn.length>0)for(i=0;i<Cn.length;i++)n=Cn[i],o=t[n],s(o)||(e[n]=o);return e}function y(e){g(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===Tn&&(Tn=!0,t.updateOffset(this),Tn=!1)}function m(e){return e instanceof y||null!=e&&null!=e._isAMomentObject}function b(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function _(e){var t=+e,i=0;return 0!==t&&isFinite(t)&&(i=b(t)),i}function w(e,t,i){var n,o=Math.min(e.length,t.length),s=Math.abs(e.length-t.length),r=0;for(n=0;n<o;n++)(i&&e[n]!==t[n]||!i&&_(e[n])!==_(t[n]))&&r++;return r+s}function k(e){!1===t.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function x(e,i){var n=!0;return l(function(){if(null!=t.deprecationHandler&&t.deprecationHandler(null,e),n){for(var o,s=[],r=0;r<arguments.length;r++){if(o="","object"==typeof arguments[r]){o+="\n["+r+"] ";for(var a in arguments[0])o+=a+": "+arguments[0][a]+", ";o=o.slice(0,-2)}else o=arguments[r];s.push(o)}k(e+"\nArguments: "+Array.prototype.slice.call(s).join("")+"\n"+(new Error).stack),n=!1}return i.apply(this,arguments)},i)}function O(e,i){null!=t.deprecationHandler&&t.deprecationHandler(e,i),Pn[e]||(k(i),Pn[e]=!0)}function M(e){return e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function E(e){var t,i;for(i in e)t=e[i],M(t)?this[i]=t:this["_"+i]=t;this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function S(e,t){var i,o=l({},e);for(i in t)h(t,i)&&(n(e[i])&&n(t[i])?(o[i]={},l(o[i],e[i]),l(o[i],t[i])):null!=t[i]?o[i]=t[i]:delete o[i]);for(i in e)h(e,i)&&!h(t,i)&&n(e[i])&&(o[i]=l({},o[i]));return o}function D(e){null!=e&&this.set(e)}function C(e,t,i){var n=this._calendar[e]||this._calendar.sameElse;return M(n)?n.call(t,i):n}function T(e){var t=this._longDateFormat[e],i=this._longDateFormat[e.toUpperCase()];return t||!i?t:(this._longDateFormat[e]=i.replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e])}function P(){return this._invalidDate}function I(e){return this._ordinal.replace("%d",e)}function F(e,t,i,n){var o=this._relativeTime[i];return M(o)?o(e,t,i,n):o.replace(/%d/i,e)}function N(e,t){var i=this._relativeTime[e>0?"future":"past"];return M(i)?i(t):i.replace(/%s/i,t)}function B(e,t){var i=e.toLowerCase();Rn[i]=Rn[i+"s"]=Rn[t]=e}function z(e){return"string"==typeof e?Rn[e]||Rn[e.toLowerCase()]:void 0}function R(e){var t,i,n={};for(i in e)h(e,i)&&(t=z(i))&&(n[t]=e[i]);return n}function A(e,t){An[e]=t}function j(e){var t=[];for(var i in e)t.push({unit:i,priority:An[i]});return t.sort(function(e,t){return e.priority-t.priority}),t}function L(e,t,i){var n=""+Math.abs(e),o=t-n.length;return(e>=0?i?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+n}function H(e,t,i,n){var o=n;"string"==typeof n&&(o=function(){return this[n]()}),e&&(Wn[e]=o),t&&(Wn[t[0]]=function(){return L(o.apply(this,arguments),t[1],t[2])}),i&&(Wn[i]=function(){return this.localeData().ordinal(o.apply(this,arguments),e)})}function W(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function Y(e){var t,i,n=e.match(jn);for(t=0,i=n.length;t<i;t++)Wn[n[t]]?n[t]=Wn[n[t]]:n[t]=W(n[t]);return function(t){var o,s="";for(o=0;o<i;o++)s+=M(n[o])?n[o].call(t,e):n[o];return s}}function V(e,t){return e.isValid()?(t=U(t,e.localeData()),Hn[t]=Hn[t]||Y(t),Hn[t](e)):e.localeData().invalidDate()}function U(e,t){function i(e){return t.longDateFormat(e)||e}var n=5;for(Ln.lastIndex=0;n>=0&&Ln.test(e);)e=e.replace(Ln,i),Ln.lastIndex=0,n-=1;return e}function q(e,t,i){ro[e]=M(t)?t:function(e,n){return e&&i?i:t}}function G(e,t){return h(ro,e)?ro[e](t._strict,t._locale):new RegExp(X(e))}function X(e){return K(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,t,i,n,o){return t||i||n||o}))}function K(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Z(e,t){var i,n=t;for("string"==typeof e&&(e=[e]),r(t)&&(n=function(e,i){i[t]=_(e)}),i=0;i<e.length;i++)ao[e[i]]=n}function $(e,t){Z(e,function(e,i,n,o){n._w=n._w||{},t(e,n._w,n,o)})}function Q(e,t,i){null!=t&&h(ao,e)&&ao[e](t,i._a,i,e)}function J(e){return ee(e)?366:365}function ee(e){return e%4==0&&e%100!=0||e%400==0}function te(){return ee(this.year())}function ie(e,i){return function(n){return null!=n?(oe(this,e,n),t.updateOffset(this,i),this):ne(this,e)}}function ne(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function oe(e,t,i){e.isValid()&&!isNaN(i)&&("FullYear"===t&&ee(e.year())?e._d["set"+(e._isUTC?"UTC":"")+t](i,e.month(),de(i,e.month())):e._d["set"+(e._isUTC?"UTC":"")+t](i))}function se(e){return e=z(e),M(this[e])?this[e]():this}function re(e,t){if("object"==typeof e){e=R(e);for(var i=j(e),n=0;n<i.length;n++)this[i[n].unit](e[i[n].unit])}else if(e=z(e),M(this[e]))return this[e](t);return this}function ae(e,t){return(e%t+t)%t}function de(e,t){if(isNaN(e)||isNaN(t))return NaN;var i=ae(t,12);return e+=(t-i)/12,1===i?ee(e)?29:28:31-i%7%2}function he(e,t){return e?i(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||_o).test(t)?"format":"standalone"][e.month()]:i(this._months)?this._months:this._months.standalone}function le(e,t){return e?i(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[_o.test(t)?"format":"standalone"][e.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ue(e,t,i){var n,o,s,r=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],n=0;n<12;++n)s=u([2e3,n]),this._shortMonthsParse[n]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[n]=this.months(s,"").toLocaleLowerCase();return i?"MMM"===t?(o=mo.call(this._shortMonthsParse,r),-1!==o?o:null):(o=mo.call(this._longMonthsParse,r),-1!==o?o:null):"MMM"===t?-1!==(o=mo.call(this._shortMonthsParse,r))?o:(o=mo.call(this._longMonthsParse,r),-1!==o?o:null):-1!==(o=mo.call(this._longMonthsParse,r))?o:(o=mo.call(this._shortMonthsParse,r),-1!==o?o:null)}function ce(e,t,i){var n,o,s;if(this._monthsParseExact)return ue.call(this,e,t,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),n=0;n<12;n++){if(o=u([2e3,n]),i&&!this._longMonthsParse[n]&&(this._longMonthsParse[n]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[n]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),i||this._monthsParse[n]||(s="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[n]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===t&&this._longMonthsParse[n].test(e))return n;if(i&&"MMM"===t&&this._shortMonthsParse[n].test(e))return n;if(!i&&this._monthsParse[n].test(e))return n}}function fe(e,t){var i;if(!e.isValid())return e;if("string"==typeof t)if(/^\d+$/.test(t))t=_(t);else if(t=e.localeData().monthsParse(t),!r(t))return e;return i=Math.min(e.date(),de(e.year(),t)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](t,i),e}function pe(e){return null!=e?(fe(this,e),t.updateOffset(this,!0),this):ne(this,"Month")}function ve(){return de(this.year(),this.month())}function ge(e){return this._monthsParseExact?(h(this,"_monthsRegex")||me.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(h(this,"_monthsShortRegex")||(this._monthsShortRegex=xo),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)}function ye(e){return this._monthsParseExact?(h(this,"_monthsRegex")||me.call(this),e?this._monthsStrictRegex:this._monthsRegex):(h(this,"_monthsRegex")||(this._monthsRegex=Oo),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)}function me(){function e(e,t){return t.length-e.length}var t,i,n=[],o=[],s=[];for(t=0;t<12;t++)i=u([2e3,t]),n.push(this.monthsShort(i,"")),o.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(n.sort(e),o.sort(e),s.sort(e),t=0;t<12;t++)n[t]=K(n[t]),o[t]=K(o[t]);for(t=0;t<24;t++)s[t]=K(s[t]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+n.join("|")+")","i")}function be(e,t,i,n,o,s,r){var a=new Date(e,t,i,n,o,s,r);return e<100&&e>=0&&isFinite(a.getFullYear())&&a.setFullYear(e),a}function _e(e){var t=new Date(Date.UTC.apply(null,arguments));return e<100&&e>=0&&isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e),t}function we(e,t,i){var n=7+t-i;return-(7+_e(e,0,n).getUTCDay()-t)%7+n-1}function ke(e,t,i,n,o){var s,r,a=(7+i-n)%7,d=we(e,n,o),h=1+7*(t-1)+a+d;return h<=0?(s=e-1,r=J(s)+h):h>J(e)?(s=e+1,r=h-J(e)):(s=e,r=h),{year:s,dayOfYear:r}}function xe(e,t,i){var n,o,s=we(e.year(),t,i),r=Math.floor((e.dayOfYear()-s-1)/7)+1;return r<1?(o=e.year()-1,n=r+Oe(o,t,i)):r>Oe(e.year(),t,i)?(n=r-Oe(e.year(),t,i),o=e.year()+1):(o=e.year(),n=r),{week:n,year:o}}function Oe(e,t,i){var n=we(e,t,i),o=we(e+1,t,i);return(J(e)-n+o)/7}function Me(e){return xe(e,this._week.dow,this._week.doy).week}function Ee(){return this._week.dow}function Se(){return this._week.doy}function De(e){var t=this.localeData().week(this);return null==e?t:this.add(7*(e-t),"d")}function Ce(e){var t=xe(this,1,4).week;return null==e?t:this.add(7*(e-t),"d")}function Te(e,t){return"string"!=typeof e?e:isNaN(e)?(e=t.weekdaysParse(e),"number"==typeof e?e:null):parseInt(e,10)}function Pe(e,t){return"string"==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Ie(e,t){return e?i(this._weekdays)?this._weekdays[e.day()]:this._weekdays[this._weekdays.isFormat.test(t)?"format":"standalone"][e.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Fe(e){return e?this._weekdaysShort[e.day()]:this._weekdaysShort}function Ne(e){return e?this._weekdaysMin[e.day()]:this._weekdaysMin}function Be(e,t,i){var n,o,s,r=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)s=u([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===t?(o=mo.call(this._weekdaysParse,r),-1!==o?o:null):"ddd"===t?(o=mo.call(this._shortWeekdaysParse,r),-1!==o?o:null):(o=mo.call(this._minWeekdaysParse,r),-1!==o?o:null):"dddd"===t?-1!==(o=mo.call(this._weekdaysParse,r))?o:-1!==(o=mo.call(this._shortWeekdaysParse,r))?o:(o=mo.call(this._minWeekdaysParse,r),-1!==o?o:null):"ddd"===t?-1!==(o=mo.call(this._shortWeekdaysParse,r))?o:-1!==(o=mo.call(this._weekdaysParse,r))?o:(o=mo.call(this._minWeekdaysParse,r),-1!==o?o:null):-1!==(o=mo.call(this._minWeekdaysParse,r))?o:-1!==(o=mo.call(this._weekdaysParse,r))?o:(o=mo.call(this._shortWeekdaysParse,r),-1!==o?o:null)}function ze(e,t,i){var n,o,s;if(this._weekdaysParseExact)return Be.call(this,e,t,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(o=u([2e3,1]).day(n),i&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(o,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(o,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(o,"").replace(".",".?")+"$","i")),this._weekdaysParse[n]||(s="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[n]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===t&&this._fullWeekdaysParse[n].test(e))return n;if(i&&"ddd"===t&&this._shortWeekdaysParse[n].test(e))return n;if(i&&"dd"===t&&this._minWeekdaysParse[n].test(e))return n;if(!i&&this._weekdaysParse[n].test(e))return n}}function Re(e){if(!this.isValid())return null!=e?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=Te(e,this.localeData()),this.add(e-t,"d")):t}function Ae(e){if(!this.isValid())return null!=e?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return null==e?t:this.add(e-t,"d")}function je(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var t=Pe(e,this.localeData());return this.day(this.day()%7?t:t-7)}return this.day()||7}function Le(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Ye.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(h(this,"_weekdaysRegex")||(this._weekdaysRegex=Co),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function He(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Ye.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(h(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=To),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function We(e){return this._weekdaysParseExact?(h(this,"_weekdaysRegex")||Ye.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(h(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Po),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ye(){function e(e,t){return t.length-e.length}var t,i,n,o,s,r=[],a=[],d=[],h=[];for(t=0;t<7;t++)i=u([2e3,1]).day(t),n=this.weekdaysMin(i,""),o=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(n),a.push(o),d.push(s),h.push(n),h.push(o),h.push(s);for(r.sort(e),a.sort(e),d.sort(e),h.sort(e),t=0;t<7;t++)a[t]=K(a[t]),d[t]=K(d[t]),h[t]=K(h[t]);this._weekdaysRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Ve(){return this.hours()%12||12}function Ue(){return this.hours()||24}function qe(e,t){H(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}function Ge(e,t){return t._meridiemParse}function Xe(e){return"p"===(e+"").toLowerCase().charAt(0)}function Ke(e,t,i){return e>11?i?"pm":"PM":i?"am":"AM"}function Ze(e){return e?e.toLowerCase().replace("_","-"):e}function $e(e){for(var t,i,n,o,s=0;s<e.length;){for(o=Ze(e[s]).split("-"),t=o.length,i=Ze(e[s+1]),i=i?i.split("-"):null;t>0;){if(n=Qe(o.slice(0,t).join("-")))return n;if(i&&i.length>=t&&w(o,i,!0)>=t-1)break;t--}s++}return null}function Qe(t){var i=null;if(!zo[t]&&void 0!==e&&e&&e.exports)try{i=Io._abbr;!function(){var e=new Error('Cannot find module "./locale"');throw e.code="MODULE_NOT_FOUND",e}(),Je(i)}catch(e){}return zo[t]}function Je(e,t){var i;return e&&(i=s(t)?it(e):et(e,t))&&(Io=i),Io._abbr}function et(e,t){if(null!==t){var i=Bo;if(t.abbr=e,null!=zo[e])O("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=zo[e]._config;else if(null!=t.parentLocale){if(null==zo[t.parentLocale])return Ro[t.parentLocale]||(Ro[t.parentLocale]=[]),Ro[t.parentLocale].push({name:e,config:t}),null;i=zo[t.parentLocale]._config}return zo[e]=new D(S(i,t)),Ro[e]&&Ro[e].forEach(function(e){et(e.name,e.config)}),Je(e),zo[e]}return delete zo[e],null}function tt(e,t){if(null!=t){var i,n=Bo;null!=zo[e]&&(n=zo[e]._config),t=S(n,t),i=new D(t),i.parentLocale=zo[e],zo[e]=i,Je(e)}else null!=zo[e]&&(null!=zo[e].parentLocale?zo[e]=zo[e].parentLocale:null!=zo[e]&&delete zo[e]);return zo[e]}function it(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Io;if(!i(e)){if(t=Qe(e))return t;e=[e]}return $e(e)}function nt(){return In(zo)}function ot(e){var t,i=e._a;return i&&-2===f(e).overflow&&(t=i[lo]<0||i[lo]>11?lo:i[uo]<1||i[uo]>de(i[ho],i[lo])?uo:i[co]<0||i[co]>24||24===i[co]&&(0!==i[fo]||0!==i[po]||0!==i[vo])?co:i[fo]<0||i[fo]>59?fo:i[po]<0||i[po]>59?po:i[vo]<0||i[vo]>999?vo:-1,f(e)._overflowDayOfYear&&(t<ho||t>uo)&&(t=uo),f(e)._overflowWeeks&&-1===t&&(t=go),f(e)._overflowWeekday&&-1===t&&(t=yo),f(e).overflow=t),e}function st(e,t,i){return null!=e?e:null!=t?t:i}function rt(e){var i=new Date(t.now());return e._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function at(e){var t,i,n,o,s=[];if(!e._d){for(n=rt(e),e._w&&null==e._a[uo]&&null==e._a[lo]&&dt(e),null!=e._dayOfYear&&(o=st(e._a[ho],n[ho]),(e._dayOfYear>J(o)||0===e._dayOfYear)&&(f(e)._overflowDayOfYear=!0),i=_e(o,0,e._dayOfYear),e._a[lo]=i.getUTCMonth(),e._a[uo]=i.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=s[t]=n[t];for(;t<7;t++)e._a[t]=s[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[co]&&0===e._a[fo]&&0===e._a[po]&&0===e._a[vo]&&(e._nextDay=!0,e._a[co]=0),e._d=(e._useUTC?_e:be).apply(null,s),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[co]=24),e._w&&void 0!==e._w.d&&e._w.d!==e._d.getDay()&&(f(e).weekdayMismatch=!0)}}function dt(e){var t,i,n,o,s,r,a,d;if(t=e._w,null!=t.GG||null!=t.W||null!=t.E)s=1,r=4,i=st(t.GG,e._a[ho],xe(Mt(),1,4).year),n=st(t.W,1),((o=st(t.E,1))<1||o>7)&&(d=!0);else{s=e._locale._week.dow,r=e._locale._week.doy;var h=xe(Mt(),s,r);i=st(t.gg,e._a[ho],h.year),n=st(t.w,h.week),null!=t.d?((o=t.d)<0||o>6)&&(d=!0):null!=t.e?(o=t.e+s,(t.e<0||t.e>6)&&(d=!0)):o=s}n<1||n>Oe(i,s,r)?f(e)._overflowWeeks=!0:null!=d?f(e)._overflowWeekday=!0:(a=ke(i,n,o,s,r),e._a[ho]=a.year,e._dayOfYear=a.dayOfYear)}function ht(e){var t,i,n,o,s,r,a=e._i,d=Ao.exec(a)||jo.exec(a);if(d){for(f(e).iso=!0,t=0,i=Ho.length;t<i;t++)if(Ho[t][1].exec(d[1])){o=Ho[t][0],n=!1!==Ho[t][2];break}if(null==o)return void(e._isValid=!1);if(d[3]){for(t=0,i=Wo.length;t<i;t++)if(Wo[t][1].exec(d[3])){s=(d[2]||" ")+Wo[t][0];break}if(null==s)return void(e._isValid=!1)}if(!n&&null!=s)return void(e._isValid=!1);if(d[4]){if(!Lo.exec(d[4]))return void(e._isValid=!1);r="Z"}e._f=o+(s||"")+(r||""),yt(e)}else e._isValid=!1}function lt(e,t,i,n,o,s){var r=[ut(e),ko.indexOf(t),parseInt(i,10),parseInt(n,10),parseInt(o,10)];return s&&r.push(parseInt(s,10)),r}function ut(e){var t=parseInt(e,10);return t<=49?2e3+t:t<=999?1900+t:t}function ct(e){return e.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function ft(e,t,i){if(e){if(So.indexOf(e)!==new Date(t[0],t[1],t[2]).getDay())return f(i).weekdayMismatch=!0,i._isValid=!1,!1}return!0}function pt(e,t,i){if(e)return Uo[e];if(t)return 0;var n=parseInt(i,10),o=n%100;return(n-o)/100*60+o}function vt(e){var t=Vo.exec(ct(e._i));if(t){var i=lt(t[4],t[3],t[2],t[5],t[6],t[7]);if(!ft(t[1],i,e))return;e._a=i,e._tzm=pt(t[8],t[9],t[10]),e._d=_e.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),f(e).rfc2822=!0}else e._isValid=!1}function gt(e){var i=Yo.exec(e._i);if(null!==i)return void(e._d=new Date(+i[1]));ht(e),!1===e._isValid&&(delete e._isValid,vt(e),!1===e._isValid&&(delete e._isValid,t.createFromInputFallback(e)))}function yt(e){if(e._f===t.ISO_8601)return void ht(e);if(e._f===t.RFC_2822)return void vt(e);e._a=[],f(e).empty=!0;var i,n,o,s,r,a=""+e._i,d=a.length,h=0;for(o=U(e._f,e._locale).match(jn)||[],i=0;i<o.length;i++)s=o[i],n=(a.match(G(s,e))||[])[0],n&&(r=a.substr(0,a.indexOf(n)),r.length>0&&f(e).unusedInput.push(r),a=a.slice(a.indexOf(n)+n.length),h+=n.length),Wn[s]?(n?f(e).empty=!1:f(e).unusedTokens.push(s),Q(s,n,e)):e._strict&&!n&&f(e).unusedTokens.push(s);f(e).charsLeftOver=d-h,a.length>0&&f(e).unusedInput.push(a),e._a[co]<=12&&!0===f(e).bigHour&&e._a[co]>0&&(f(e).bigHour=void 0),f(e).parsedDateParts=e._a.slice(0),f(e).meridiem=e._meridiem,e._a[co]=mt(e._locale,e._a[co],e._meridiem),at(e),ot(e)}function mt(e,t,i){var n;return null==i?t:null!=e.meridiemHour?e.meridiemHour(t,i):null!=e.isPM?(n=e.isPM(i),n&&t<12&&(t+=12),n||12!==t||(t=0),t):t}function bt(e){var t,i,n,o,s;if(0===e._f.length)return f(e).invalidFormat=!0,void(e._d=new Date(NaN));for(o=0;o<e._f.length;o++)s=0,t=g({},e),null!=e._useUTC&&(t._useUTC=e._useUTC),t._f=e._f[o],yt(t),p(t)&&(s+=f(t).charsLeftOver,s+=10*f(t).unusedTokens.length,f(t).score=s,(null==n||s<n)&&(n=s,i=t));l(e,i||t)}function _t(e){if(!e._d){var t=R(e._i);e._a=d([t.year,t.month,t.day||t.date,t.hour,t.minute,t.second,t.millisecond],function(e){return e&&parseInt(e,10)}),at(e)}}function wt(e){var t=new y(ot(kt(e)));return t._nextDay&&(t.add(1,"d"),t._nextDay=void 0),t}function kt(e){var t=e._i,n=e._f;return e._locale=e._locale||it(e._l),null===t||void 0===n&&""===t?v({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),m(t)?new y(ot(t)):(a(t)?e._d=t:i(n)?bt(e):n?yt(e):xt(e),p(e)||(e._d=null),e))}function xt(e){var o=e._i;s(o)?e._d=new Date(t.now()):a(o)?e._d=new Date(o.valueOf()):"string"==typeof o?gt(e):i(o)?(e._a=d(o.slice(0),function(e){return parseInt(e,10)}),at(e)):n(o)?_t(e):r(o)?e._d=new Date(o):t.createFromInputFallback(e)}function Ot(e,t,s,r,a){var d={};return!0!==s&&!1!==s||(r=s,s=void 0),(n(e)&&o(e)||i(e)&&0===e.length)&&(e=void 0),d._isAMomentObject=!0,d._useUTC=d._isUTC=a,d._l=s,d._i=e,d._f=t,d._strict=r,wt(d)}function Mt(e,t,i,n){return Ot(e,t,i,n,!1)}function Et(e,t){var n,o;if(1===t.length&&i(t[0])&&(t=t[0]),!t.length)return Mt();for(n=t[0],o=1;o<t.length;++o)t[o].isValid()&&!t[o][e](n)||(n=t[o]);return n}function St(){return Et("isBefore",[].slice.call(arguments,0))}function Dt(){return Et("isAfter",[].slice.call(arguments,0))}function Ct(e){for(var t in e)if(-1===mo.call(Ko,t)||null!=e[t]&&isNaN(e[t]))return!1;for(var i=!1,n=0;n<Ko.length;++n)if(e[Ko[n]]){if(i)return!1;parseFloat(e[Ko[n]])!==_(e[Ko[n]])&&(i=!0)}return!0}function Tt(){return this._isValid}function Pt(){return Zt(NaN)}function It(e){var t=R(e),i=t.year||0,n=t.quarter||0,o=t.month||0,s=t.week||0,r=t.day||0,a=t.hour||0,d=t.minute||0,h=t.second||0,l=t.millisecond||0;this._isValid=Ct(t),this._milliseconds=+l+1e3*h+6e4*d+1e3*a*60*60,this._days=+r+7*s,this._months=+o+3*n+12*i,this._data={},this._locale=it(),this._bubble()}function Ft(e){return e instanceof It}function Nt(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function Bt(e,t){H(e,0,0,function(){var e=this.utcOffset(),i="+";return e<0&&(e=-e,i="-"),i+L(~~(e/60),2)+t+L(~~e%60,2)})}function zt(e,t){var i=(t||"").match(e);if(null===i)return null;var n=i[i.length-1]||[],o=(n+"").match(Zo)||["-",0,0],s=60*o[1]+_(o[2]);return 0===s?0:"+"===o[0]?s:-s}function Rt(e,i){var n,o;return i._isUTC?(n=i.clone(),o=(m(e)||a(e)?e.valueOf():Mt(e).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+o),t.updateOffset(n,!1),n):Mt(e).local()}function At(e){return 15*-Math.round(e._d.getTimezoneOffset()/15)}function jt(e,i,n){var o,s=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=zt(no,e)))return this}else Math.abs(e)<16&&!n&&(e*=60);return!this._isUTC&&i&&(o=At(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,"m"),s!==e&&(!i||this._changeInProgress?ti(this,Zt(e-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?s:At(this)}function Lt(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()}function Ht(e){return this.utcOffset(0,e)}function Wt(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(At(this),"m")),this}function Yt(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=zt(io,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this}function Vt(e){return!!this.isValid()&&(e=e?Mt(e).utcOffset():0,(this.utcOffset()-e)%60==0)}function Ut(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function qt(){if(!s(this._isDSTShifted))return this._isDSTShifted;var e={};if(g(e,this),e=kt(e),e._a){var t=e._isUTC?u(e._a):Mt(e._a);this._isDSTShifted=this.isValid()&&w(e._a,t.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Gt(){return!!this.isValid()&&!this._isUTC}function Xt(){return!!this.isValid()&&this._isUTC}function Kt(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Zt(e,t){var i,n,o,s=e,a=null;return Ft(e)?s={ms:e._milliseconds,d:e._days,M:e._months}:r(e)?(s={},t?s[t]=e:s.milliseconds=e):(a=$o.exec(e))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[uo])*i,h:_(a[co])*i,m:_(a[fo])*i,s:_(a[po])*i,ms:_(Nt(1e3*a[vo]))*i}):(a=Qo.exec(e))?(i="-"===a[1]?-1:(a[1],1),s={y:$t(a[2],i),M:$t(a[3],i),w:$t(a[4],i),d:$t(a[5],i),h:$t(a[6],i),m:$t(a[7],i),s:$t(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(o=Jt(Mt(s.from),Mt(s.to)),s={},s.ms=o.milliseconds,s.M=o.months),n=new It(s),Ft(e)&&h(e,"_locale")&&(n._locale=e._locale),n}function $t(e,t){var i=e&&parseFloat(e.replace(",","."));return(isNaN(i)?0:i)*t}function Qt(e,t){var i={milliseconds:0,months:0};return i.months=t.month()-e.month()+12*(t.year()-e.year()),e.clone().add(i.months,"M").isAfter(t)&&--i.months,i.milliseconds=+t-+e.clone().add(i.months,"M"),i}function Jt(e,t){var i;return e.isValid()&&t.isValid()?(t=Rt(t,e),e.isBefore(t)?i=Qt(e,t):(i=Qt(t,e),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ei(e,t){return function(i,n){var o,s;return null===n||isNaN(+n)||(O(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=n,n=s),i="string"==typeof i?+i:i,o=Zt(i,n),ti(this,o,e),this}}function ti(e,i,n,o){var s=i._milliseconds,r=Nt(i._days),a=Nt(i._months);e.isValid()&&(o=null==o||o,a&&fe(e,ne(e,"Month")+a*n),r&&oe(e,"Date",ne(e,"Date")+r*n),s&&e._d.setTime(e._d.valueOf()+s*n),o&&t.updateOffset(e,r||a))}function ii(e,t){var i=e.diff(t,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function ni(e,i){var n=e||Mt(),o=Rt(n,this).startOf("day"),s=t.calendarFormat(this,o)||"sameElse",r=i&&(M(i[s])?i[s].call(this,n):i[s]);return this.format(r||this.localeData().calendar(s,this,Mt(n)))}function oi(){return new y(this)}function si(e,t){var i=m(e)?e:Mt(e);return!(!this.isValid()||!i.isValid())&&(t=z(s(t)?"millisecond":t),"millisecond"===t?this.valueOf()>i.valueOf():i.valueOf()<this.clone().startOf(t).valueOf())}function ri(e,t){var i=m(e)?e:Mt(e);return!(!this.isValid()||!i.isValid())&&(t=z(s(t)?"millisecond":t),"millisecond"===t?this.valueOf()<i.valueOf():this.clone().endOf(t).valueOf()<i.valueOf())}function ai(e,t,i,n){return n=n||"()",("("===n[0]?this.isAfter(e,i):!this.isBefore(e,i))&&(")"===n[1]?this.isBefore(t,i):!this.isAfter(t,i))}function di(e,t){var i,n=m(e)?e:Mt(e);return!(!this.isValid()||!n.isValid())&&(t=z(t||"millisecond"),"millisecond"===t?this.valueOf()===n.valueOf():(i=n.valueOf(),this.clone().startOf(t).valueOf()<=i&&i<=this.clone().endOf(t).valueOf()))}function hi(e,t){return this.isSame(e,t)||this.isAfter(e,t)}function li(e,t){return this.isSame(e,t)||this.isBefore(e,t)}function ui(e,t,i){var n,o,s;if(!this.isValid())return NaN;if(n=Rt(e,this),!n.isValid())return NaN;switch(o=6e4*(n.utcOffset()-this.utcOffset()),t=z(t)){case"year":s=ci(this,n)/12;break;case"month":s=ci(this,n);break;case"quarter":s=ci(this,n)/3;break;case"second":s=(this-n)/1e3;break;case"minute":s=(this-n)/6e4;break;case"hour":s=(this-n)/36e5;break;case"day":s=(this-n-o)/864e5;break;case"week":s=(this-n-o)/6048e5;break;default:s=this-n}return i?s:b(s)}function ci(e,t){var i,n,o=12*(t.year()-e.year())+(t.month()-e.month()),s=e.clone().add(o,"months");return t-s<0?(i=e.clone().add(o-1,"months"),n=(t-s)/(s-i)):(i=e.clone().add(o+1,"months"),n=(t-s)/(i-s)),-(o+n)||0}function fi(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function pi(){if(!this.isValid())return null;var e=this.clone().utc();return e.year()<0||e.year()>9999?V(e,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):M(Date.prototype.toISOString)?this.toDate().toISOString():V(e,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function vi(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="";this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",t="Z");var i="["+e+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",o=t+'[")]';return this.format(i+n+"-MM-DD[T]HH:mm:ss.SSS"+o)}function gi(e){e||(e=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var i=V(this,e);return this.localeData().postformat(i)}function yi(e,t){return this.isValid()&&(m(e)&&e.isValid()||Mt(e).isValid())?Zt({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function mi(e){return this.from(Mt(),e)}function bi(e,t){return this.isValid()&&(m(e)&&e.isValid()||Mt(e).isValid())?Zt({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function _i(e){return this.to(Mt(),e)}function wi(e){var t;return void 0===e?this._locale._abbr:(t=it(e),null!=t&&(this._locale=t),this)}function ki(){return this._locale}function xi(e){switch(e=z(e)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===e&&this.weekday(0),"isoWeek"===e&&this.isoWeekday(1),"quarter"===e&&this.month(3*Math.floor(this.month()/3)),this}function Oi(e){return void 0===(e=z(e))||"millisecond"===e?this:("date"===e&&(e="day"),this.startOf(e).add(1,"isoWeek"===e?"week":e).subtract(1,"ms"))}function Mi(){return this._d.valueOf()-6e4*(this._offset||0)}function Ei(){return Math.floor(this.valueOf()/1e3)}function Si(){return new Date(this.valueOf())}function Di(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function Ci(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function Ti(){return this.isValid()?this.toISOString():null}function Pi(){return p(this)}function Ii(){return l({},f(this))}function Fi(){return f(this).overflow}function Ni(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Bi(e,t){H(0,[e,e.length],0,t)}function zi(e){return Li.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Ri(e){return Li.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)}function Ai(){return Oe(this.year(),1,4)}function ji(){var e=this.localeData()._week;return Oe(this.year(),e.dow,e.doy)}function Li(e,t,i,n,o){var s;return null==e?xe(this,n,o).year:(s=Oe(e,n,o),t>s&&(t=s),Hi.call(this,e,t,i,n,o))}function Hi(e,t,i,n,o){var s=ke(e,t,i,n,o),r=_e(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Wi(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)}function Yi(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?t:this.add(e-t,"d")}function Vi(e,t){t[vo]=_(1e3*("0."+e))}function Ui(){return this._isUTC?"UTC":""}function qi(){return this._isUTC?"Coordinated Universal Time":""}function Gi(e){return Mt(1e3*e)}function Xi(){return Mt.apply(null,arguments).parseZone()}function Ki(e){return e}function Zi(e,t,i,n){var o=it(),s=u().set(n,t);return o[i](s,e)}function $i(e,t,i){if(r(e)&&(t=e,e=void 0),e=e||"",null!=t)return Zi(e,t,i,"month");var n,o=[];for(n=0;n<12;n++)o[n]=Zi(e,n,i,"month");return o}function Qi(e,t,i,n){"boolean"==typeof e?(r(t)&&(i=t,t=void 0),t=t||""):(t=e,i=t,e=!1,r(t)&&(i=t,t=void 0),t=t||"");var o=it(),s=e?o._week.dow:0;if(null!=i)return Zi(t,(i+s)%7,n,"day");var a,d=[];for(a=0;a<7;a++)d[a]=Zi(t,(a+s)%7,n,"day");return d}function Ji(e,t){return $i(e,t,"months")}function en(e,t){return $i(e,t,"monthsShort")}function tn(e,t,i){return Qi(e,t,i,"weekdays")}function nn(e,t,i){return Qi(e,t,i,"weekdaysShort")}function on(e,t,i){return Qi(e,t,i,"weekdaysMin")}function sn(){var e=this._data;return this._milliseconds=hs(this._milliseconds),this._days=hs(this._days),this._months=hs(this._months),e.milliseconds=hs(e.milliseconds),e.seconds=hs(e.seconds),e.minutes=hs(e.minutes),e.hours=hs(e.hours),e.months=hs(e.months),e.years=hs(e.years),this}function rn(e,t,i,n){var o=Zt(t,i);return e._milliseconds+=n*o._milliseconds,e._days+=n*o._days,e._months+=n*o._months,e._bubble()}function an(e,t){return rn(this,e,t,1)}function dn(e,t){return rn(this,e,t,-1)}function hn(e){return e<0?Math.floor(e):Math.ceil(e)}function ln(){var e,t,i,n,o,s=this._milliseconds,r=this._days,a=this._months,d=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*hn(cn(a)+r),r=0,a=0),d.milliseconds=s%1e3,e=b(s/1e3),d.seconds=e%60,t=b(e/60),d.minutes=t%60,i=b(t/60),d.hours=i%24,r+=b(i/24),o=b(un(r)),a+=o,r-=hn(cn(o)),n=b(a/12),a%=12,d.days=r,d.months=a,d.years=n,this}function un(e){return 4800*e/146097}function cn(e){return 146097*e/4800}function fn(e){if(!this.isValid())return NaN;var t,i,n=this._milliseconds;if("month"===(e=z(e))||"year"===e)return t=this._days+n/864e5,i=this._months+un(t),"month"===e?i:i/12;switch(t=this._days+Math.round(cn(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return 24*t+n/36e5;case"minute":return 1440*t+n/6e4;case"second":return 86400*t+n/1e3;case"millisecond":return Math.floor(864e5*t)+n;default:throw new Error("Unknown unit "+e)}}function pn(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function vn(e){return function(){return this.as(e)}}function gn(){return Zt(this)}function yn(e){return e=z(e),this.isValid()?this[e+"s"]():NaN}function mn(e){return function(){return this.isValid()?this._data[e]:NaN}}function bn(){return b(this.days()/7)}function _n(e,t,i,n,o){return o.relativeTime(t||1,!!i,e,n)}function wn(e,t,i){var n=Zt(e).abs(),o=Ms(n.as("s")),s=Ms(n.as("m")),r=Ms(n.as("h")),a=Ms(n.as("d")),d=Ms(n.as("M")),h=Ms(n.as("y")),l=o<=Es.ss&&["s",o]||o<Es.s&&["ss",o]||s<=1&&["m"]||s<Es.m&&["mm",s]||r<=1&&["h"]||r<Es.h&&["hh",r]||a<=1&&["d"]||a<Es.d&&["dd",a]||d<=1&&["M"]||d<Es.M&&["MM",d]||h<=1&&["y"]||["yy",h];return l[2]=t,l[3]=+e>0,l[4]=i,_n.apply(null,l)}function kn(e){return void 0===e?Ms:"function"==typeof e&&(Ms=e,!0)}function xn(e,t){return void 0!==Es[e]&&(void 0===t?Es[e]:(Es[e]=t,"s"===e&&(Es.ss=t-1),!0))}function On(e){if(!this.isValid())return this.localeData().invalidDate();var t=this.localeData(),i=wn(this,!e,t);return e&&(i=t.pastFuture(+this,i)),t.postformat(i)}function Mn(e){return(e>0)-(e<0)||+e}function En(){if(!this.isValid())return this.localeData().invalidDate();var e,t,i,n=Ss(this._milliseconds)/1e3,o=Ss(this._days),s=Ss(this._months);e=b(n/60),t=b(e/60),n%=60,e%=60,i=b(s/12),s%=12;var r=i,a=s,d=o,h=t,l=e,u=n?n.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var f=c<0?"-":"",p=Mn(this._months)!==Mn(c)?"-":"",v=Mn(this._days)!==Mn(c)?"-":"",g=Mn(this._milliseconds)!==Mn(c)?"-":"";return f+"P"+(r?p+r+"Y":"")+(a?p+a+"M":"")+(d?v+d+"D":"")+(h||l||u?"T":"")+(h?g+h+"H":"")+(l?g+l+"M":"")+(u?g+u+"S":"")}var Sn,Dn;Dn=Array.prototype.some?Array.prototype.some:function(e){for(var t=Object(this),i=t.length>>>0,n=0;n<i;n++)if(n in t&&e.call(this,t[n],n,t))return!0;return!1};var Cn=t.momentProperties=[],Tn=!1,Pn={};t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;var In;In=Object.keys?Object.keys:function(e){var t,i=[];for(t in e)h(e,t)&&i.push(t);return i};var Fn={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Nn={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Bn=/\d{1,2}/,zn={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Rn={},An={},jn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Ln=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Hn={},Wn={},Yn=/\d/,Vn=/\d\d/,Un=/\d{3}/,qn=/\d{4}/,Gn=/[+-]?\d{6}/,Xn=/\d\d?/,Kn=/\d\d\d\d?/,Zn=/\d\d\d\d\d\d?/,$n=/\d{1,3}/,Qn=/\d{1,4}/,Jn=/[+-]?\d{1,6}/,eo=/\d+/,to=/[+-]?\d+/,io=/Z|[+-]\d\d:?\d\d/gi,no=/Z|[+-]\d\d(?::?\d\d)?/gi,oo=/[+-]?\d+(\.\d{1,3})?/,so=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ro={},ao={},ho=0,lo=1,uo=2,co=3,fo=4,po=5,vo=6,go=7,yo=8;H("Y",0,0,function(){var e=this.year();return e<=9999?""+e:"+"+e}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),B("year","y"),A("year",1),q("Y",to),q("YY",Xn,Vn),q("YYYY",Qn,qn),q("YYYYY",Jn,Gn),q("YYYYYY",Jn,Gn),Z(["YYYYY","YYYYYY"],ho),Z("YYYY",function(e,i){i[ho]=2===e.length?t.parseTwoDigitYear(e):_(e)}),Z("YY",function(e,i){i[ho]=t.parseTwoDigitYear(e)}),Z("Y",function(e,t){t[ho]=parseInt(e,10)}),t.parseTwoDigitYear=function(e){return _(e)+(_(e)>68?1900:2e3)};var mo,bo=ie("FullYear",!0);mo=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t<this.length;++t)if(this[t]===e)return t;return-1},H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(e){return this.localeData().monthsShort(this,e)}),H("MMMM",0,0,function(e){return this.localeData().months(this,e)}),B("month","M"),A("month",8),q("M",Xn),q("MM",Xn,Vn),q("MMM",function(e,t){return t.monthsShortRegex(e)}),q("MMMM",function(e,t){return t.monthsRegex(e)}),Z(["M","MM"],function(e,t){t[lo]=_(e)-1}),Z(["MMM","MMMM"],function(e,t,i,n){var o=i._locale.monthsParse(e,n,i._strict);null!=o?t[lo]=o:f(i).invalidMonth=e});var _o=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,wo="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ko="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),xo=so,Oo=so;H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),B("week","w"),B("isoWeek","W"),A("week",5),A("isoWeek",5),q("w",Xn),q("ww",Xn,Vn),q("W",Xn),q("WW",Xn,Vn),$(["w","ww","W","WW"],function(e,t,i,n){t[n.substr(0,1)]=_(e)});var Mo={dow:0,doy:6};H("d",0,"do","day"),H("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)}),H("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)}),H("dddd",0,0,function(e){return this.localeData().weekdays(this,e)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),B("day","d"),B("weekday","e"),B("isoWeekday","E"),A("day",11),A("weekday",11),A("isoWeekday",11),q("d",Xn),q("e",Xn),q("E",Xn),q("dd",function(e,t){return t.weekdaysMinRegex(e)}),q("ddd",function(e,t){return t.weekdaysShortRegex(e)}),q("dddd",function(e,t){return t.weekdaysRegex(e)}),$(["dd","ddd","dddd"],function(e,t,i,n){var o=i._locale.weekdaysParse(e,n,i._strict);null!=o?t.d=o:f(i).invalidWeekday=e}),$(["d","e","E"],function(e,t,i,n){t[n]=_(e)});var Eo="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),So="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Do="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Co=so,To=so,Po=so;H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Ve),H("k",["kk",2],0,Ue),H("hmm",0,0,function(){return""+Ve.apply(this)+L(this.minutes(),2)}),H("hmmss",0,0,function(){return""+Ve.apply(this)+L(this.minutes(),2)+L(this.seconds(),2)}),H("Hmm",0,0,function(){return""+this.hours()+L(this.minutes(),2)}),H("Hmmss",0,0,function(){return""+this.hours()+L(this.minutes(),2)+L(this.seconds(),2)}),qe("a",!0),qe("A",!1),B("hour","h"),A("hour",13),q("a",Ge),q("A",Ge),q("H",Xn),q("h",Xn),q("k",Xn),q("HH",Xn,Vn),q("hh",Xn,Vn),q("kk",Xn,Vn),q("hmm",Kn),q("hmmss",Zn),q("Hmm",Kn),q("Hmmss",Zn),Z(["H","HH"],co),Z(["k","kk"],function(e,t,i){var n=_(e);t[co]=24===n?0:n}),Z(["a","A"],function(e,t,i){i._isPm=i._locale.isPM(e),i._meridiem=e}),Z(["h","hh"],function(e,t,i){t[co]=_(e),f(i).bigHour=!0}),Z("hmm",function(e,t,i){var n=e.length-2;t[co]=_(e.substr(0,n)),t[fo]=_(e.substr(n)),f(i).bigHour=!0}),Z("hmmss",function(e,t,i){var n=e.length-4,o=e.length-2;t[co]=_(e.substr(0,n)),t[fo]=_(e.substr(n,2)),t[po]=_(e.substr(o)),f(i).bigHour=!0}),Z("Hmm",function(e,t,i){var n=e.length-2;t[co]=_(e.substr(0,n)),t[fo]=_(e.substr(n))}),Z("Hmmss",function(e,t,i){var n=e.length-4,o=e.length-2;t[co]=_(e.substr(0,n)),t[fo]=_(e.substr(n,2)),t[po]=_(e.substr(o))});var Io,Fo=/[ap]\.?m?\.?/i,No=ie("Hours",!0),Bo={calendar:Fn,longDateFormat:Nn,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Bn,relativeTime:zn,months:wo,monthsShort:ko,week:Mo,weekdays:Eo,weekdaysMin:Do,weekdaysShort:So,meridiemParse:Fo},zo={},Ro={},Ao=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jo=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Lo=/Z|[+-]\d\d(?::?\d\d)?/,Ho=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wo=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Yo=/^\/?Date\((\-?\d+)/i,Vo=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Uo={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};t.createFromInputFallback=x("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))}),t.ISO_8601=function(){},t.RFC_2822=function(){};var qo=x("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:v()}),Go=x("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var e=Mt.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:v()}),Xo=function(){return Date.now?Date.now():+new Date},Ko=["year","quarter","month","week","day","hour","minute","second","millisecond"];Bt("Z",":"),Bt("ZZ",""),q("Z",no),q("ZZ",no),Z(["Z","ZZ"],function(e,t,i){i._useUTC=!0,i._tzm=zt(no,e)});var Zo=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var $o=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Qo=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Zt.fn=It.prototype,Zt.invalid=Pt;var Jo=ei(1,"add"),es=ei(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ts=x("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return void 0===e?this.localeData():this.locale(e)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Bi("gggg","weekYear"),Bi("ggggg","weekYear"),Bi("GGGG","isoWeekYear"),Bi("GGGGG","isoWeekYear"),B("weekYear","gg"),B("isoWeekYear","GG"),A("weekYear",1),A("isoWeekYear",1),q("G",to),q("g",to),q("GG",Xn,Vn),q("gg",Xn,Vn),q("GGGG",Qn,qn),q("gggg",Qn,qn),q("GGGGG",Jn,Gn),q("ggggg",Jn,Gn),$(["gggg","ggggg","GGGG","GGGGG"],function(e,t,i,n){t[n.substr(0,2)]=_(e)}),$(["gg","GG"],function(e,i,n,o){i[o]=t.parseTwoDigitYear(e)}),H("Q",0,"Qo","quarter"),B("quarter","Q"),A("quarter",7),q("Q",Yn),Z("Q",function(e,t){t[lo]=3*(_(e)-1)}),H("D",["DD",2],"Do","date"),B("date","D"),A("date",9),q("D",Xn),q("DD",Xn,Vn),q("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient}),Z(["D","DD"],uo),Z("Do",function(e,t){t[uo]=_(e.match(Xn)[0],10)});var is=ie("Date",!0);H("DDD",["DDDD",3],"DDDo","dayOfYear"),B("dayOfYear","DDD"),A("dayOfYear",4),q("DDD",$n),q("DDDD",Un),Z(["DDD","DDDD"],function(e,t,i){i._dayOfYear=_(e)}),H("m",["mm",2],0,"minute"),B("minute","m"),A("minute",14),q("m",Xn),q("mm",Xn,Vn),Z(["m","mm"],fo);var ns=ie("Minutes",!1);H("s",["ss",2],0,"second"),B("second","s"),A("second",15),q("s",Xn),q("ss",Xn,Vn),Z(["s","ss"],po);var os=ie("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),B("millisecond","ms"),A("millisecond",16),q("S",$n,Yn),q("SS",$n,Vn),q("SSS",$n,Un);var ss;for(ss="SSSS";ss.length<=9;ss+="S")q(ss,eo);for(ss="S";ss.length<=9;ss+="S")Z(ss,Vi);var rs=ie("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var as=y.prototype;as.add=Jo,as.calendar=ni,as.clone=oi,as.diff=ui,as.endOf=Oi,as.format=gi,as.from=yi,as.fromNow=mi,as.to=bi,as.toNow=_i,as.get=se,as.invalidAt=Fi,as.isAfter=si,as.isBefore=ri,as.isBetween=ai,as.isSame=di,as.isSameOrAfter=hi,as.isSameOrBefore=li,as.isValid=Pi,as.lang=ts,as.locale=wi,as.localeData=ki,as.max=Go,as.min=qo,as.parsingFlags=Ii,as.set=re,as.startOf=xi,as.subtract=es,as.toArray=Di,as.toObject=Ci,as.toDate=Si,as.toISOString=pi,as.inspect=vi,as.toJSON=Ti,as.toString=fi,as.unix=Ei,as.valueOf=Mi,as.creationData=Ni,as.year=bo,as.isLeapYear=te,as.weekYear=zi,as.isoWeekYear=Ri,as.quarter=as.quarters=Wi,as.month=pe,as.daysInMonth=ve,as.week=as.weeks=De,as.isoWeek=as.isoWeeks=Ce,as.weeksInYear=ji,as.isoWeeksInYear=Ai,as.date=is,as.day=as.days=Re,as.weekday=Ae,as.isoWeekday=je,as.dayOfYear=Yi,as.hour=as.hours=No,as.minute=as.minutes=ns,as.second=as.seconds=os,as.millisecond=as.milliseconds=rs,as.utcOffset=jt,as.utc=Ht,as.local=Wt,as.parseZone=Yt,as.hasAlignedHourOffset=Vt,as.isDST=Ut,as.isLocal=Gt,as.isUtcOffset=Xt,as.isUtc=Kt,as.isUTC=Kt,as.zoneAbbr=Ui,as.zoneName=qi,as.dates=x("dates accessor is deprecated. Use date instead.",is),as.months=x("months accessor is deprecated. Use month instead",pe),as.years=x("years accessor is deprecated. Use year instead",bo),as.zone=x("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Lt),as.isDSTShifted=x("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",qt);var ds=D.prototype;ds.calendar=C,ds.longDateFormat=T,ds.invalidDate=P,ds.ordinal=I,ds.preparse=Ki,ds.postformat=Ki,ds.relativeTime=F,ds.pastFuture=N,ds.set=E,ds.months=he,ds.monthsShort=le,ds.monthsParse=ce,ds.monthsRegex=ye,ds.monthsShortRegex=ge,ds.week=Me,ds.firstDayOfYear=Se,ds.firstDayOfWeek=Ee,ds.weekdays=Ie,ds.weekdaysMin=Ne,ds.weekdaysShort=Fe,ds.weekdaysParse=ze,ds.weekdaysRegex=Le,ds.weekdaysShortRegex=He,ds.weekdaysMinRegex=We,ds.isPM=Xe,ds.meridiem=Ke,Je("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===_(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),t.lang=x("moment.lang is deprecated. Use moment.locale instead.",Je),t.langData=x("moment.langData is deprecated. Use moment.localeData instead.",it);var hs=Math.abs,ls=vn("ms"),us=vn("s"),cs=vn("m"),fs=vn("h"),ps=vn("d"),vs=vn("w"),gs=vn("M"),ys=vn("y"),ms=mn("milliseconds"),bs=mn("seconds"),_s=mn("minutes"),ws=mn("hours"),ks=mn("days"),xs=mn("months"),Os=mn("years"),Ms=Math.round,Es={ss:44,s:45,m:45,h:22,d:26,M:11},Ss=Math.abs,Ds=It.prototype;return Ds.isValid=Tt,Ds.abs=sn,Ds.add=an,Ds.subtract=dn,Ds.as=fn,Ds.asMilliseconds=ls,Ds.asSeconds=us,Ds.asMinutes=cs,Ds.asHours=fs,Ds.asDays=ps,Ds.asWeeks=vs,Ds.asMonths=gs,Ds.asYears=ys,Ds.valueOf=pn,Ds._bubble=ln,Ds.clone=gn,Ds.get=yn,Ds.milliseconds=ms,Ds.seconds=bs,Ds.minutes=_s,Ds.hours=ws,Ds.days=ks,Ds.weeks=bn,Ds.months=xs,Ds.years=Os,Ds.humanize=On,Ds.toISOString=En,Ds.toString=En,Ds.toJSON=En,Ds.locale=wi,Ds.localeData=ki,Ds.toIsoString=x("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",En),Ds.lang=ts,H("X",0,0,"unix"),H("x",0,0,"valueOf"),q("x",to),q("X",oo),Z("X",function(e,t,i){i._d=new Date(1e3*parseFloat(e,10))}),Z("x",function(e,t,i){i._d=new Date(_(e))}),t.version="2.19.1",function(e){Sn=e}(Mt),t.fn=as,t.min=St,t.max=Dt,t.now=Xo,t.utc=u,t.unix=Gi,t.months=Ji,t.isDate=a,t.locale=Je,t.invalid=v,t.duration=Zt,t.isMoment=m,t.weekdays=tn,t.parseZone=Xi,t.localeData=it,t.isDuration=Ft,t.monthsShort=en,t.weekdaysMin=on,t.defineLocale=et,t.updateLocale=tt,t.locales=nt,t.weekdaysShort=nn,t.normalizeUnits=z,t.relativeTimeRounding=kn,t.relativeTimeThreshold=xn,t.calendarFormat=ii,t.prototype=as,t})}).call(t,i(115)(e))},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){function i(e){throw new Error("Cannot find module '"+e+"'.")}i.keys=function(){return[]},i.resolve=i,e.exports=i,i.id=116},function(e,t,i){(function(t){function i(e,t,i){var n=t&&i||0,o=0;for(t=t||[],e.toLowerCase().replace(/[0-9a-f]{2}/g,function(e){o<16&&(t[n+o++]=u[e])});o<16;)t[n+o++]=0;return t}function n(e,t){var i=t||0,n=l;return n[e[i++]]+n[e[i++]]+n[e[i++]]+n[e[i++]]+"-"+n[e[i++]]+n[e[i++]]+"-"+n[e[i++]]+n[e[i++]]+"-"+n[e[i++]]+n[e[i++]]+"-"+n[e[i++]]+n[e[i++]]+n[e[i++]]+n[e[i++]]+n[e[i++]]+n[e[i++]]}function o(e,t,i){var o=t&&i||0,s=t||[];e=e||{};var r=void 0!==e.clockseq?e.clockseq:v,a=void 0!==e.msecs?e.msecs:(new Date).getTime(),d=void 0!==e.nsecs?e.nsecs:y+1,h=a-g+(d-y)/1e4;if(h<0&&void 0===e.clockseq&&(r=r+1&16383),(h<0||a>g)&&void 0===e.nsecs&&(d=0),d>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,y=d,v=r,a+=122192928e5;var l=(1e4*(268435455&a)+d)%4294967296;s[o++]=l>>>24&255,s[o++]=l>>>16&255,s[o++]=l>>>8&255,s[o++]=255&l;var u=a/4294967296*1e4&268435455;s[o++]=u>>>8&255,s[o++]=255&u,s[o++]=u>>>24&15|16,s[o++]=u>>>16&255,s[o++]=r>>>8|128,s[o++]=255&r;for(var c=e.node||p,f=0;f<6;f++)s[o+f]=c[f];return t||n(s)}function s(e,t,i){var o=t&&i||0;"string"==typeof e&&(t="binary"==e?new Array(16):null,e=null),e=e||{};var s=e.random||(e.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t)for(var a=0;a<16;a++)t[o+a]=s[a];return t||n(s)}var r,a="undefined"!=typeof window?window:void 0!==t?t:null;if(a&&a.crypto&&crypto.getRandomValues){var d=new Uint8Array(16);r=function(){return crypto.getRandomValues(d),d}}if(!r){var h=new Array(16);r=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),h[t]=e>>>((3&t)<<3)&255;return h}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var f=r(),p=[1|f[0],f[1],f[2],f[3],f[4],f[5]],v=16383&(f[6]<<8|f[7]),g=0,y=0,m=s;m.v1=o,m.v4=s,m.parse=i,m.unparse=n,e.exports=m}).call(t,i(118))},function(e,t){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(i=window)}e.exports=i},function(e,t,i){t.prepareElements=function(e){for(var t in e)e.hasOwnProperty(t)&&(e[t].redundant=e[t].used,e[t].used=[])},t.cleanupElements=function(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t].redundant){for(var i=0;i<e[t].redundant.length;i++)e[t].redundant[i].parentNode.removeChild(e[t].redundant[i]);e[t].redundant=[]}},t.resetElements=function(e){t.prepareElements(e),t.cleanupElements(e),t.prepareElements(e)},t.getSVGElement=function(e,t,i){var n;return t.hasOwnProperty(e)?t[e].redundant.length>0?(n=t[e].redundant[0],t[e].redundant.shift()):(n=document.createElementNS("http://www.w3.org/2000/svg",e),i.appendChild(n)):(n=document.createElementNS("http://www.w3.org/2000/svg",e),t[e]={used:[],redundant:[]},i.appendChild(n)),t[e].used.push(n),n},t.getDOMElement=function(e,t,i,n){var o;return t.hasOwnProperty(e)?t[e].redundant.length>0?(o=t[e].redundant[0],t[e].redundant.shift()):(o=document.createElement(e),void 0!==n?i.insertBefore(o,n):i.appendChild(o)):(o=document.createElement(e),t[e]={used:[],redundant:[]},void 0!==n?i.insertBefore(o,n):i.appendChild(o)),t[e].used.push(o),o},t.drawPoint=function(e,i,n,o,s,r){var a;if("circle"==n.style?(a=t.getSVGElement("circle",o,s),a.setAttributeNS(null,"cx",e),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*n.size)):(a=t.getSVGElement("rect",o,s),a.setAttributeNS(null,"x",e-.5*n.size),a.setAttributeNS(null,"y",i-.5*n.size),a.setAttributeNS(null,"width",n.size),a.setAttributeNS(null,"height",n.size)),void 0!==n.styles&&a.setAttributeNS(null,"style",n.styles),a.setAttributeNS(null,"class",n.className+" vis-point"),r){var d=t.getSVGElement("text",o,s);r.xOffset&&(e+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(d.textContent=r.content),r.className&&d.setAttributeNS(null,"class",r.className+" vis-label"),d.setAttributeNS(null,"x",e),d.setAttributeNS(null,"y",i)}return a},t.drawBar=function(e,i,n,o,s,r,a,d){if(0!=o){o<0&&(o*=-1,i-=o);var h=t.getSVGElement("rect",r,a);h.setAttributeNS(null,"x",e-.5*n),h.setAttributeNS(null,"y",i),h.setAttributeNS(null,"width",n),h.setAttributeNS(null,"height",o),h.setAttributeNS(null,"class",s),d&&h.setAttributeNS(null,"style",d)}}},function(e,t,i){var n=i(6),o=n.JSON||(n.JSON={stringify:JSON.stringify});e.exports=function(e){return o.stringify.apply(o,arguments)}},function(e,t,i){function n(e,t,i){var o=this;if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:h,clickToUse:!1},s.extend(this.options,this.defaultOptions),this.body={container:e,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this),once:this.once.bind(this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}}},this.bindEventListeners(),this.images=new l(function(){return o.body.emitter.emit("_requestRedraw")}),this.groups=new u,this.canvas=new y(this.body),this.selectionHandler=new _(this.body,this.canvas),this.interactionHandler=new b(this.body,this.canvas,this.selectionHandler),this.view=new m(this.body,this.canvas),this.renderer=new g(this.body,this.canvas),this.physics=new p(this.body),this.layoutEngine=new w(this.body),this.clustering=new v(this.body),this.manipulation=new k(this.body,this.canvas,this.selectionHandler),this.nodesHandler=new c(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new f(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new T(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(t)}i(122);var o=i(73),s=i(5),r=i(74),a=i(75),d=i(123),h=i(126),l=i(76).default,u=i(131).default,c=i(132).default,f=i(163).default,p=i(169).default,v=i(176).default,g=i(178).default,y=i(179).default,m=i(180).default,b=i(181).default,_=i(184).default,w=i(185).default,k=i(187).default,x=i(188).default,O=i(54).default,M=i(54),E=M.printStyle,S=i(82),D=S.allOptions,C=S.configureOptions,T=i(190).default;o(n.prototype),n.prototype.setOptions=function(e){var t=this;if(void 0!==e){!0===O.validate(e,D)&&console.log("%cErrors have been found in the supplied options object.",E);var i=["locale","locales","clickToUse"];if(s.selectiveDeepExtend(i,this.options,e),e=this.layoutEngine.setOptions(e.layout,e),this.canvas.setOptions(e),this.groups.setOptions(e.groups),this.nodesHandler.setOptions(e.nodes),this.edgesHandler.setOptions(e.edges),this.physics.setOptions(e.physics),this.manipulation.setOptions(e.manipulation,e,this.options),this.interactionHandler.setOptions(e.interaction),this.renderer.setOptions(e.interaction),this.selectionHandler.setOptions(e.interaction),void 0!==e.groups&&this.body.emitter.emit("refreshNodes"),"configure"in e&&(this.configurator||(this.configurator=new x(this,this.body.container,C,this.canvas.pixelRatio)),this.configurator.setOptions(e.configure)),this.configurator&&!0===this.configurator.options.enabled){var n={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};s.deepExtend(n.nodes,this.nodesHandler.options),s.deepExtend(n.edges,this.edgesHandler.options),s.deepExtend(n.layout,this.layoutEngine.options),s.deepExtend(n.interaction,this.selectionHandler.options),s.deepExtend(n.interaction,this.renderer.options),s.deepExtend(n.interaction,this.interactionHandler.options),s.deepExtend(n.manipulation,this.manipulation.options),s.deepExtend(n.physics,this.physics.options),s.deepExtend(n.global,this.canvas.options),s.deepExtend(n.global,this.options),this.configurator.setModuleOptions(n)}void 0!==e.clickToUse?!0===e.clickToUse?void 0===this.activator&&(this.activator=new d(this.canvas.frame),this.activator.on("change",function(){t.body.emitter.emit("activate")})):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},n.prototype._updateVisibleIndices=function(){var e=this.body.nodes,t=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(var i in e)e.hasOwnProperty(i)&&(this.clustering._isClusteredNode(i)||!1!==e[i].options.hidden||this.body.nodeIndices.push(e[i].id));for(var n in t)if(t.hasOwnProperty(n)){var o=t[n],s=e[o.fromId],r=e[o.toId],a=void 0!==s&&void 0!==r,d=!this.clustering._isClusteredEdge(n)&&!1===o.options.hidden&&a&&!1===s.options.hidden&&!1===r.options.hidden;d&&this.body.edgeIndices.push(o.id)}},n.prototype.bindEventListeners=function(){var e=this;this.body.emitter.on("_dataChanged",function(){e.edgesHandler._updateState(),e.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",function(){e.clustering._updateState(),e._updateVisibleIndices(),e._updateValueRange(e.body.nodes),e._updateValueRange(e.body.edges),e.body.emitter.emit("startSimulation"),e.body.emitter.emit("_requestRedraw")})},n.prototype.setData=function(e){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),e&&e.dot&&(e.nodes||e.edges))throw new SyntaxError('Data must contain either parameter "dot" or  parameter pair "nodes" and "edges", but not both.');if(this.setOptions(e&&e.options),e&&e.dot){console.log("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var t=r.DOTToGraph(e.dot);return void this.setData(t)}if(e&&e.gephi){console.log("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=a.parseGephi(e.gephi);return void this.setData(i)}this.nodesHandler.setData(e&&e.nodes,!0),this.edgesHandler.setData(e&&e.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},n.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&delete this.body.nodes[e];for(var t in this.body.edges)this.body.edges.hasOwnProperty(t)&&delete this.body.edges[t];s.recursiveDOMDelete(this.body.container)},n.prototype._updateValueRange=function(e){var t,i=void 0,n=void 0,o=0;for(t in e)if(e.hasOwnProperty(t)){var s=e[t].getValue();void 0!==s&&(i=void 0===i?s:Math.min(s,i),n=void 0===n?s:Math.max(s,n),o+=s)}if(void 0!==i&&void 0!==n)for(t in e)e.hasOwnProperty(t)&&e[t].setValueRange(i,n,o)},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},n.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},n.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},n.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},n.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},n.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},n.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},n.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},n.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},n.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},n.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},n.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},n.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},n.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},n.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},n.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},n.prototype.editNodeMode=function(){return console.log("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},n.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},n.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},n.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},n.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},n.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},n.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},n.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},n.prototype.getConnectedNodes=function(e){return void 0!==this.body.nodes[e]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},n.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},n.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},n.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},n.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},n.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},n.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},n.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments)},n.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments)},n.prototype.getNodeAt=function(){var e=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==e&&void 0!==e.id?e.id:e},n.prototype.getEdgeAt=function(){var e=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==e&&void 0!==e.id?e.id:e},n.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},n.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},n.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.redraw()},n.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},n.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},n.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},n.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},n.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},n.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},n.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},n.prototype.getOptionsFromConfigurator=function(){var e={};return this.configurator&&(e=this.configurator.getOptions.apply(this.configurator)),e},e.exports=n},function(e,t,i){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(e,t,i){this.beginPath(),this.arc(e,t,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(e,t,i){this.beginPath(),this.rect(e-i,t-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(e,t,i){this.beginPath(),i*=1.15,t+=.275*i;var n=2*i,o=n/2,s=Math.sqrt(3)/6*n,r=Math.sqrt(n*n-o*o);this.moveTo(e,t-(r-s)),this.lineTo(e+o,t+s),this.lineTo(e-o,t+s),this.lineTo(e,t-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(e,t,i){this.beginPath(),i*=1.15,t-=.275*i;var n=2*i,o=n/2,s=Math.sqrt(3)/6*n,r=Math.sqrt(n*n-o*o);this.moveTo(e,t+(r-s)),this.lineTo(e+o,t-s),this.lineTo(e-o,t-s),this.lineTo(e,t+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(e,t,i){this.beginPath(),i*=.82,t+=.1*i;for(var n=0;n<10;n++){var o=n%2==0?1.3*i:.5*i;this.lineTo(e+o*Math.sin(2*n*Math.PI/10),t-o*Math.cos(2*n*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(e,t,i){this.beginPath(),this.lineTo(e,t+i),this.lineTo(e+i,t),this.lineTo(e,t-i),this.lineTo(e-i,t),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(e,t,i,n,o){var s=Math.PI/180;i-2*o<0&&(o=i/2),n-2*o<0&&(o=n/2),this.beginPath(),this.moveTo(e+o,t),this.lineTo(e+i-o,t),this.arc(e+i-o,t+o,o,270*s,360*s,!1),this.lineTo(e+i,t+n-o),this.arc(e+i-o,t+n-o,o,0,90*s,!1),this.lineTo(e+o,t+n),this.arc(e+o,t+n-o,o,90*s,180*s,!1),this.lineTo(e,t+o),this.arc(e+o,t+o,o,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse_vis=function(e,t,i,n){var o=i/2*.5522848,s=n/2*.5522848,r=e+i,a=t+n,d=e+i/2,h=t+n/2;this.beginPath(),this.moveTo(e,h),this.bezierCurveTo(e,h-s,d-o,t,d,t),this.bezierCurveTo(d+o,t,r,h-s,r,h),this.bezierCurveTo(r,h+s,d+o,a,d,a),this.bezierCurveTo(d-o,a,e,h+s,e,h),this.closePath()},CanvasRenderingContext2D.prototype.database=function(e,t,i,n){var o=i,s=n*(1/3),r=o/2*.5522848,a=s/2*.5522848,d=e+o,h=t+s,l=e+o/2,u=t+s/2,c=t+(n-s/2),f=t+n;this.beginPath(),this.moveTo(d,u),this.bezierCurveTo(d,u+a,l+r,h,l,h),this.bezierCurveTo(l-r,h,e,u+a,e,u),this.bezierCurveTo(e,u-a,l-r,t,l,t),this.bezierCurveTo(l+r,t,d,u-a,d,u),this.lineTo(d,c),this.bezierCurveTo(d,c+a,l+r,f,l,f),this.bezierCurveTo(l-r,f,e,c+a,e,c),this.lineTo(e,u)},CanvasRenderingContext2D.prototype.dashedLine=function(e,t,i,n,o){this.beginPath(),this.moveTo(e,t);for(var s=o.length,r=i-e,a=n-t,d=a/r,h=Math.sqrt(r*r+a*a),l=0,u=!0,c=0,f=o[0];h>=.1;)f=o[l++%s],f>h&&(f=h),c=Math.sqrt(f*f/(1+d*d)),c=r<0?-c:c,e+=c,t+=d*c,!0===u?this.lineTo(e,t):this.moveTo(e,t),h-=f,u=!u},CanvasRenderingContext2D.prototype.hexagon=function(e,t,i){this.beginPath();var n=2*Math.PI/6;this.moveTo(e+i,t);for(var o=1;o<6;o++)this.lineTo(e+i*Math.cos(n*o),t+i*Math.sin(n*o));this.closePath()})},function(e,t,i){function n(e){this.active=!1,this.dom={container:e},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var t=this;["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(e){t.hammer.on(e,function(e){e.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){o(i.target,e)||t.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function o(e,t){for(;e;){if(e===t)return!0;e=e.parentNode}return!1}var s=i(52),r=i(73),a=i(22),d=i(5);r(n.prototype),n.current=null,n.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},n.prototype.activate=function(){n.current&&n.current.deactivate(),n.current=this,this.active=!0,this.dom.overlay.style.display="none",d.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},n.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",d.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},n.prototype._onTapOverlay=function(e){this.activate(),e.stopPropagation()},e.exports=n},function(e,t,i){var n,o,s;!function(i){o=[],n=i,void 0!==(s="function"==typeof n?n.apply(t,o):n)&&(e.exports=s)}(function(){var e=null;return function t(i,n){function o(e){return e.match(/[^ ]+/g)}function s(t){if("hammer.input"!==t.type){if(t.srcEvent._handled||(t.srcEvent._handled={}),t.srcEvent._handled[t.type])return;t.srcEvent._handled[t.type]=!0}var i=!1;t.stopPropagation=function(){i=!0};var n=t.srcEvent.stopPropagation.bind(t.srcEvent);"function"==typeof n&&(t.srcEvent.stopPropagation=function(){n(),t.stopPropagation()}),t.firstTarget=e;for(var o=e;o&&!i;){var s=o.hammer;if(s)for(var r,a=0;a<s.length;a++)if(r=s[a]._handlers[t.type])for(var d=0;d<r.length&&!i;d++)r[d](t);o=o.parentNode}}var r=n||{preventDefault:!1};if(i.Manager){var a=i,d=function(e,i){var n=Object.create(r);return i&&a.assign(n,i),t(new a(e,n),n)};return a.assign(d,a),d.Manager=function(e,i){var n=Object.create(r);return i&&a.assign(n,i),t(new a.Manager(e,n),n)},d}var h=Object.create(i),l=i.element;return l.hammer||(l.hammer=[]),l.hammer.push(h),i.on("hammer.input",function(t){!0!==r.preventDefault&&r.preventDefault!==t.pointerType||t.preventDefault(),t.isFirst&&(e=t.target)}),h._handlers={},h.on=function(e,t){return o(e).forEach(function(e){var n=h._handlers[e];n||(h._handlers[e]=n=[],i.on(e,s)),n.push(t)}),h},h.off=function(e,t){return o(e).forEach(function(e){var n=h._handlers[e];n&&(n=t?n.filter(function(e){return e!==t}):[],n.length>0?h._handlers[e]=n:(i.off(e,s),delete h._handlers[e]))}),h},h.emit=function(t,n){e=n.target,i.emit(t,n)},h.destroy=function(){var e=i.element.hammer,t=e.indexOf(h);-1!==t&&e.splice(t,1),e.length||delete i.element.hammer,h._handlers={},i.destroy()},h}})},function(e,t,i){var n;/*! Hammer.JS - v2.0.7 - 2016-04-22
+ * http://hammerjs.github.io/
+ *
+ * Copyright (c) 2016 Jorik Tangelder;
+ * Licensed under the MIT license */
+!function(o,s,r,a){function d(e,t,i){return setTimeout(f(e,i),t)}function h(e,t,i){return!!Array.isArray(e)&&(l(e,i[t],i),!0)}function l(e,t,i){var n;if(e)if(e.forEach)e.forEach(t,i);else if(e.length!==a)for(n=0;n<e.length;)t.call(i,e[n],n,e),n++;else for(n in e)e.hasOwnProperty(n)&&t.call(i,e[n],n,e)}function u(e,t,i){var n="DEPRECATED METHOD: "+t+"\n"+i+" AT \n";return function(){var t=new Error("get-stack-trace"),i=t&&t.stack?t.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=o.console&&(o.console.warn||o.console.log);return s&&s.call(o.console,n,i),e.apply(this,arguments)}}function c(e,t,i){var n,o=t.prototype;n=e.prototype=Object.create(o),n.constructor=e,n._super=o,i&&pe(n,i)}function f(e,t){return function(){return e.apply(t,arguments)}}function p(e,t){return typeof e==ye?e.apply(t?t[0]||a:a,t):e}function v(e,t){return e===a?t:e}function g(e,t,i){l(_(t),function(t){e.addEventListener(t,i,!1)})}function y(e,t,i){l(_(t),function(t){e.removeEventListener(t,i,!1)})}function m(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function b(e,t){return e.indexOf(t)>-1}function _(e){return e.trim().split(/\s+/g)}function w(e,t,i){if(e.indexOf&&!i)return e.indexOf(t);for(var n=0;n<e.length;){if(i&&e[n][i]==t||!i&&e[n]===t)return n;n++}return-1}function k(e){return Array.prototype.slice.call(e,0)}function x(e,t,i){for(var n=[],o=[],s=0;s<e.length;){var r=t?e[s][t]:e[s];w(o,r)<0&&n.push(e[s]),o[s]=r,s++}return i&&(n=t?n.sort(function(e,i){return e[t]>i[t]}):n.sort()),n}function O(e,t){for(var i,n,o=t[0].toUpperCase()+t.slice(1),s=0;s<ve.length;){if(i=ve[s],(n=i?i+o:t)in e)return n;s++}return a}function M(){return xe++}function E(e){var t=e.ownerDocument||e;return t.defaultView||t.parentWindow||o}function S(e,t){var i=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){p(e.options.enable,[e])&&i.handler(t)},this.init()}function D(e){var t=e.options.inputClass;return new(t||(Ee?W:Se?U:Me?G:H))(e,C)}function C(e,t,i){var n=i.pointers.length,o=i.changedPointers.length,s=t&Ce&&n-o==0,r=t&(Pe|Ie)&&n-o==0;i.isFirst=!!s,i.isFinal=!!r,s&&(e.session={}),i.eventType=t,T(e,i),e.emit("hammer.input",i),e.recognize(i),e.session.prevInput=i}function T(e,t){var i=e.session,n=t.pointers,o=n.length;i.firstInput||(i.firstInput=F(t)),o>1&&!i.firstMultiple?i.firstMultiple=F(t):1===o&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,d=t.center=N(n);t.timeStamp=_e(),t.deltaTime=t.timeStamp-s.timeStamp,t.angle=A(a,d),t.distance=R(a,d),P(i,t),t.offsetDirection=z(t.deltaX,t.deltaY);var h=B(t.deltaTime,t.deltaX,t.deltaY);t.overallVelocityX=h.x,t.overallVelocityY=h.y,t.overallVelocity=be(h.x)>be(h.y)?h.x:h.y,t.scale=r?L(r.pointers,n):1,t.rotation=r?j(r.pointers,n):0,t.maxPointers=i.prevInput?t.pointers.length>i.prevInput.maxPointers?t.pointers.length:i.prevInput.maxPointers:t.pointers.length,I(i,t);var l=e.element;m(t.srcEvent.target,l)&&(l=t.srcEvent.target),t.target=l}function P(e,t){var i=t.center,n=e.offsetDelta||{},o=e.prevDelta||{},s=e.prevInput||{};t.eventType!==Ce&&s.eventType!==Pe||(o=e.prevDelta={x:s.deltaX||0,y:s.deltaY||0},n=e.offsetDelta={x:i.x,y:i.y}),t.deltaX=o.x+(i.x-n.x),t.deltaY=o.y+(i.y-n.y)}function I(e,t){var i,n,o,s,r=e.lastInterval||t,d=t.timeStamp-r.timeStamp;if(t.eventType!=Ie&&(d>De||r.velocity===a)){var h=t.deltaX-r.deltaX,l=t.deltaY-r.deltaY,u=B(d,h,l);n=u.x,o=u.y,i=be(u.x)>be(u.y)?u.x:u.y,s=z(h,l),e.lastInterval=t}else i=r.velocity,n=r.velocityX,o=r.velocityY,s=r.direction;t.velocity=i,t.velocityX=n,t.velocityY=o,t.direction=s}function F(e){for(var t=[],i=0;i<e.pointers.length;)t[i]={clientX:me(e.pointers[i].clientX),clientY:me(e.pointers[i].clientY)},i++;return{timeStamp:_e(),pointers:t,center:N(t),deltaX:e.deltaX,deltaY:e.deltaY}}function N(e){var t=e.length;if(1===t)return{x:me(e[0].clientX),y:me(e[0].clientY)};for(var i=0,n=0,o=0;o<t;)i+=e[o].clientX,n+=e[o].clientY,o++;return{x:me(i/t),y:me(n/t)}}function B(e,t,i){return{x:t/e||0,y:i/e||0}}function z(e,t){return e===t?Fe:be(e)>=be(t)?e<0?Ne:Be:t<0?ze:Re}function R(e,t,i){i||(i=He);var n=t[i[0]]-e[i[0]],o=t[i[1]]-e[i[1]];return Math.sqrt(n*n+o*o)}function A(e,t,i){i||(i=He);var n=t[i[0]]-e[i[0]],o=t[i[1]]-e[i[1]];return 180*Math.atan2(o,n)/Math.PI}function j(e,t){return A(t[1],t[0],We)+A(e[1],e[0],We)}function L(e,t){return R(t[0],t[1],We)/R(e[0],e[1],We)}function H(){this.evEl=Ve,this.evWin=Ue,this.pressed=!1,S.apply(this,arguments)}function W(){this.evEl=Xe,this.evWin=Ke,S.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=$e,this.evWin=Qe,this.started=!1,S.apply(this,arguments)}function V(e,t){var i=k(e.touches),n=k(e.changedTouches);return t&(Pe|Ie)&&(i=x(i.concat(n),"identifier",!0)),[i,n]}function U(){this.evTarget=et,this.targetIds={},S.apply(this,arguments)}function q(e,t){var i=k(e.touches),n=this.targetIds;if(t&(Ce|Te)&&1===i.length)return n[i[0].identifier]=!0,[i,i];var o,s,r=k(e.changedTouches),a=[],d=this.target;if(s=i.filter(function(e){return m(e.target,d)}),t===Ce)for(o=0;o<s.length;)n[s[o].identifier]=!0,o++;for(o=0;o<r.length;)n[r[o].identifier]&&a.push(r[o]),t&(Pe|Ie)&&delete n[r[o].identifier],o++;return a.length?[x(s.concat(a),"identifier",!0),a]:void 0}function G(){S.apply(this,arguments);var e=f(this.handler,this);this.touch=new U(this.manager,e),this.mouse=new H(this.manager,e),this.primaryTouch=null,this.lastTouches=[]}function X(e,t){e&Ce?(this.primaryTouch=t.changedPointers[0].identifier,K.call(this,t)):e&(Pe|Ie)&&K.call(this,t)}function K(e){var t=e.changedPointers[0];if(t.identifier===this.primaryTouch){var i={x:t.clientX,y:t.clientY};this.lastTouches.push(i);var n=this.lastTouches,o=function(){var e=n.indexOf(i);e>-1&&n.splice(e,1)};setTimeout(o,tt)}}function Z(e){for(var t=e.srcEvent.clientX,i=e.srcEvent.clientY,n=0;n<this.lastTouches.length;n++){var o=this.lastTouches[n],s=Math.abs(t-o.x),r=Math.abs(i-o.y);if(s<=it&&r<=it)return!0}return!1}function $(e,t){this.manager=e,this.set(t)}function Q(e){if(b(e,at))return at;var t=b(e,dt),i=b(e,ht);return t&&i?at:t||i?t?dt:ht:b(e,rt)?rt:st}function J(e){this.options=pe({},this.defaults,e||{}),this.id=M(),this.manager=null,this.options.enable=v(this.options.enable,!0),this.state=ut,this.simultaneous={},this.requireFail=[]}function ee(e){return e&gt?"cancel":e&pt?"end":e&ft?"move":e&ct?"start":""}function te(e){return e==Re?"down":e==ze?"up":e==Ne?"left":e==Be?"right":""}function ie(e,t){var i=t.manager;return i?i.get(e):e}function ne(){J.apply(this,arguments)}function oe(){ne.apply(this,arguments),this.pX=null,this.pY=null}function se(){ne.apply(this,arguments)}function re(){J.apply(this,arguments),this._timer=null,this._input=null}function ae(){ne.apply(this,arguments)}function de(){ne.apply(this,arguments)}function he(){J.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function le(e,t){return t=t||{},t.recognizers=v(t.recognizers,le.defaults.preset),new ue(e,t)}function ue(e,t){this.options=pe({},le.defaults,t||{}),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=D(this),this.touchAction=new $(this,this.options.touchAction),ce(this,!0),l(this.options.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}function ce(e,t){var i=e.element;if(i.style){var n;l(e.options.cssProps,function(o,s){n=O(i.style,s),t?(e.oldCssProps[n]=i.style[n],i.style[n]=o):i.style[n]=e.oldCssProps[n]||""}),t||(e.oldCssProps={})}}function fe(e,t){var i=s.createEvent("Event");i.initEvent(e,!0,!0),i.gesture=t,t.target.dispatchEvent(i)}var pe,ve=["","webkit","Moz","MS","ms","o"],ge=s.createElement("div"),ye="function",me=Math.round,be=Math.abs,_e=Date.now;pe="function"!=typeof Object.assign?function(e){if(e===a||null===e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),i=1;i<arguments.length;i++){var n=arguments[i];if(n!==a&&null!==n)for(var o in n)n.hasOwnProperty(o)&&(t[o]=n[o])}return t}:Object.assign;var we=u(function(e,t,i){for(var n=Object.keys(t),o=0;o<n.length;)(!i||i&&e[n[o]]===a)&&(e[n[o]]=t[n[o]]),o++;return e},"extend","Use `assign`."),ke=u(function(e,t){return we(e,t,!0)},"merge","Use `assign`."),xe=1,Oe=/mobile|tablet|ip(ad|hone|od)|android/i,Me="ontouchstart"in o,Ee=O(o,"PointerEvent")!==a,Se=Me&&Oe.test(navigator.userAgent),De=25,Ce=1,Te=2,Pe=4,Ie=8,Fe=1,Ne=2,Be=4,ze=8,Re=16,Ae=Ne|Be,je=ze|Re,Le=Ae|je,He=["x","y"],We=["clientX","clientY"];S.prototype={handler:function(){},init:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(E(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&y(this.element,this.evEl,this.domHandler),this.evTarget&&y(this.target,this.evTarget,this.domHandler),this.evWin&&y(E(this.element),this.evWin,this.domHandler)}};var Ye={mousedown:Ce,mousemove:Te,mouseup:Pe},Ve="mousedown",Ue="mousemove mouseup";c(H,S,{handler:function(e){var t=Ye[e.type];t&Ce&&0===e.button&&(this.pressed=!0),t&Te&&1!==e.which&&(t=Pe),this.pressed&&(t&Pe&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:"mouse",srcEvent:e}))}});var qe={pointerdown:Ce,pointermove:Te,pointerup:Pe,pointercancel:Ie,pointerout:Ie},Ge={2:"touch",3:"pen",4:"mouse",5:"kinect"},Xe="pointerdown",Ke="pointermove pointerup pointercancel";o.MSPointerEvent&&!o.PointerEvent&&(Xe="MSPointerDown",Ke="MSPointerMove MSPointerUp MSPointerCancel"),c(W,S,{handler:function(e){var t=this.store,i=!1,n=e.type.toLowerCase().replace("ms",""),o=qe[n],s=Ge[e.pointerType]||e.pointerType,r="touch"==s,a=w(t,e.pointerId,"pointerId");o&Ce&&(0===e.button||r)?a<0&&(t.push(e),a=t.length-1):o&(Pe|Ie)&&(i=!0),a<0||(t[a]=e,this.callback(this.manager,o,{pointers:t,changedPointers:[e],pointerType:s,srcEvent:e}),i&&t.splice(a,1))}});var Ze={touchstart:Ce,touchmove:Te,touchend:Pe,touchcancel:Ie},$e="touchstart",Qe="touchstart touchmove touchend touchcancel";c(Y,S,{handler:function(e){var t=Ze[e.type];if(t===Ce&&(this.started=!0),this.started){var i=V.call(this,e,t);t&(Pe|Ie)&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,t,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:e})}}});var Je={touchstart:Ce,touchmove:Te,touchend:Pe,touchcancel:Ie},et="touchstart touchmove touchend touchcancel";c(U,S,{handler:function(e){var t=Je[e.type],i=q.call(this,e,t);i&&this.callback(this.manager,t,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:e})}});var tt=2500,it=25;c(G,S,{handler:function(e,t,i){var n="touch"==i.pointerType,o="mouse"==i.pointerType;if(!(o&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(n)X.call(this,t,i);else if(o&&Z.call(this,i))return;this.callback(e,t,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var nt=O(ge.style,"touchAction"),ot=nt!==a,st="auto",rt="manipulation",at="none",dt="pan-x",ht="pan-y",lt=function(){if(!ot)return!1;var e={},t=o.CSS&&o.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(i){e[i]=!t||o.CSS.supports("touch-action",i)}),e}();$.prototype={set:function(e){"compute"==e&&(e=this.compute()),ot&&this.manager.element.style&&lt[e]&&(this.manager.element.style[nt]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return l(this.manager.recognizers,function(t){p(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),Q(e.join(" "))},preventDefaults:function(e){var t=e.srcEvent,i=e.offsetDirection;if(this.manager.session.prevented)return void t.preventDefault();var n=this.actions,o=b(n,at)&&!lt[at],s=b(n,ht)&&!lt[ht],r=b(n,dt)&&!lt[dt];if(o){var a=1===e.pointers.length,d=e.distance<2,h=e.deltaTime<250;if(a&&d&&h)return}return r&&s?void 0:o||s&&i&Ae||r&&i&je?this.preventSrc(t):void 0},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};var ut=1,ct=2,ft=4,pt=8,vt=pt,gt=16;J.prototype={defaults:{},set:function(e){return pe(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(h(e,"recognizeWith",this))return this;var t=this.simultaneous;return e=ie(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return h(e,"dropRecognizeWith",this)?this:(e=ie(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(h(e,"requireFailure",this))return this;var t=this.requireFail;return e=ie(e,this),-1===w(t,e)&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(h(e,"dropRequireFailure",this))return this;e=ie(e,this);var t=w(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){function t(t){i.manager.emit(t,e)}var i=this,n=this.state;n<pt&&t(i.options.event+ee(n)),t(i.options.event),e.additionalEvent&&t(e.additionalEvent),n>=pt&&t(i.options.event+ee(n))},tryEmit:function(e){if(this.canEmit())return this.emit(e);this.state=32},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(32|ut)))return!1;e++}return!0},recognize:function(e){var t=pe({},e);if(!p(this.options.enable,[this,t]))return this.reset(),void(this.state=32);this.state&(vt|gt|32)&&(this.state=ut),this.state=this.process(t),this.state&(ct|ft|pt|gt)&&this.tryEmit(t)},process:function(e){},getTouchAction:function(){},reset:function(){}},c(ne,J,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return 0===t||e.pointers.length===t},process:function(e){var t=this.state,i=e.eventType,n=t&(ct|ft),o=this.attrTest(e);return n&&(i&Ie||!o)?t|gt:n||o?i&Pe?t|pt:t&ct?t|ft:ct:32}}),c(oe,ne,{defaults:{event:"pan",threshold:10,pointers:1,direction:Le},getTouchAction:function(){var e=this.options.direction,t=[];return e&Ae&&t.push(ht),e&je&&t.push(dt),t},directionTest:function(e){var t=this.options,i=!0,n=e.distance,o=e.direction,s=e.deltaX,r=e.deltaY;return o&t.direction||(t.direction&Ae?(o=0===s?Fe:s<0?Ne:Be,i=s!=this.pX,n=Math.abs(e.deltaX)):(o=0===r?Fe:r<0?ze:Re,i=r!=this.pY,n=Math.abs(e.deltaY))),e.direction=o,i&&n>t.threshold&&o&t.direction},attrTest:function(e){return ne.prototype.attrTest.call(this,e)&&(this.state&ct||!(this.state&ct)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=te(e.direction);t&&(e.additionalEvent=this.options.event+t),this._super.emit.call(this,e)}}),c(se,ne,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[at]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&ct)},emit:function(e){if(1!==e.scale){var t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}this._super.emit.call(this,e)}}),c(re,J,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[st]},process:function(e){var t=this.options,i=e.pointers.length===t.pointers,n=e.distance<t.threshold,o=e.deltaTime>t.time;if(this._input=e,!n||!i||e.eventType&(Pe|Ie)&&!o)this.reset();else if(e.eventType&Ce)this.reset(),this._timer=d(function(){this.state=vt,this.tryEmit()},t.time,this);else if(e.eventType&Pe)return vt;return 32},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===vt&&(e&&e.eventType&Pe?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=_e(),this.manager.emit(this.options.event,this._input)))}}),c(ae,ne,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[at]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&ct)}}),c(de,ne,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ae|je,pointers:1},getTouchAction:function(){return oe.prototype.getTouchAction.call(this)},attrTest:function(e){var t,i=this.options.direction;return i&(Ae|je)?t=e.overallVelocity:i&Ae?t=e.overallVelocityX:i&je&&(t=e.overallVelocityY),this._super.attrTest.call(this,e)&&i&e.offsetDirection&&e.distance>this.options.threshold&&e.maxPointers==this.options.pointers&&be(t)>this.options.velocity&&e.eventType&Pe},emit:function(e){var t=te(e.offsetDirection);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),c(he,J,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[rt]},process:function(e){var t=this.options,i=e.pointers.length===t.pointers,n=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&Ce&&0===this.count)return this.failTimeout();if(n&&o&&i){if(e.eventType!=Pe)return this.failTimeout();var s=!this.pTime||e.timeStamp-this.pTime<t.interval,r=!this.pCenter||R(this.pCenter,e.center)<t.posThreshold;this.pTime=e.timeStamp,this.pCenter=e.center,r&&s?this.count+=1:this.count=1,this._input=e;if(0===this.count%t.taps)return this.hasRequireFailures()?(this._timer=d(function(){this.state=vt,this.tryEmit()},t.interval,this),ct):vt}return 32},failTimeout:function(){return this._timer=d(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==vt&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),le.VERSION="2.0.7",le.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[ae,{enable:!1}],[se,{enable:!1},["rotate"]],[de,{direction:Ae}],[oe,{direction:Ae},["swipe"]],[he],[he,{event:"doubletap",taps:2},["tap"]],[re]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};ue.prototype={set:function(e){return pe(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?2:1},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var i,n=this.recognizers,o=t.curRecognizer;(!o||o&&o.state&vt)&&(o=t.curRecognizer=null);for(var s=0;s<n.length;)i=n[s],2===t.stopped||o&&i!=o&&!i.canRecognizeWith(o)?i.reset():i.recognize(e),!o&&i.state&(ct|ft|pt)&&(o=t.curRecognizer=i),s++}},get:function(e){if(e instanceof J)return e;for(var t=this.recognizers,i=0;i<t.length;i++)if(t[i].options.event==e)return t[i];return null},add:function(e){if(h(e,"add",this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(h(e,"remove",this))return this;if(e=this.get(e)){var t=this.recognizers,i=w(t,e);-1!==i&&(t.splice(i,1),this.touchAction.update())}return this},on:function(e,t){if(e!==a&&t!==a){var i=this.handlers;return l(_(e),function(e){i[e]=i[e]||[],i[e].push(t)}),this}},off:function(e,t){if(e!==a){var i=this.handlers;return l(_(e),function(e){t?i[e]&&i[e].splice(w(i[e],t),1):delete i[e]}),this}},emit:function(e,t){this.options.domEvents&&fe(e,t);var i=this.handlers[e]&&this.handlers[e].slice();if(i&&i.length){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var n=0;n<i.length;)i[n](t),n++}},destroy:function(){this.element&&ce(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},pe(le,{INPUT_START:Ce,INPUT_MOVE:Te,INPUT_END:Pe,INPUT_CANCEL:Ie,STATE_POSSIBLE:ut,STATE_BEGAN:ct,STATE_CHANGED:ft,STATE_ENDED:pt,STATE_RECOGNIZED:vt,STATE_CANCELLED:gt,STATE_FAILED:32,DIRECTION_NONE:Fe,DIRECTION_LEFT:Ne,DIRECTION_RIGHT:Be,DIRECTION_UP:ze,DIRECTION_DOWN:Re,DIRECTION_HORIZONTAL:Ae,DIRECTION_VERTICAL:je,DIRECTION_ALL:Le,Manager:ue,Input:S,TouchAction:$,TouchInput:U,MouseInput:H,PointerEventInput:W,TouchMouseInput:G,SingleTouchInput:Y,Recognizer:J,AttrRecognizer:ne,Tap:he,Pan:oe,Swipe:de,Pinch:se,Rotate:ae,Press:re,on:g,off:y,each:l,merge:ke,extend:we,assign:pe,inherit:c,bindFn:f,prefixed:O}),(void 0!==o?o:"undefined"!=typeof self?self:{}).Hammer=le,(n=function(){return le}.call(t,i,t,e))!==a&&(e.exports=n)}(window,document)},function(e,t,i){t.en={edit:"Edit",del:"Delete selected",back:"Back",addNode:"Add Node",addEdge:"Add Edge",editNode:"Edit Node",editEdge:"Edit Edge",addDescription:"Click in an empty space to place a new node.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",createEdgeError:"Cannot link edges to a cluster.",deleteClusterError:"Clusters cannot be deleted.",editClusterError:"Clusters cannot be edited."},t.en_EN=t.en,t.en_US=t.en,t.de={edit:"Editieren",del:"Lösche Auswahl",back:"Zurück",addNode:"Knoten hinzufügen",addEdge:"Kante hinzufügen",editNode:"Knoten editieren",editEdge:"Kante editieren",addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",deleteClusterError:"Cluster können nicht gelöscht werden.",editClusterError:"Cluster können nicht editiert werden."},t.de_DE=t.de,t.es={edit:"Editar",del:"Eliminar selección",back:"Átras",addNode:"Añadir nodo",addEdge:"Añadir arista",editNode:"Editar nodo",editEdge:"Editar arista",addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",createEdgeError:"No se puede conectar una arista a un grupo.",deleteClusterError:"No es posible eliminar grupos.",editClusterError:"No es posible editar grupos."},t.es_ES=t.es,t.it={edit:"Modifica",del:"Cancella la selezione",back:"Indietro",addNode:"Aggiungi un nodo",addEdge:"Aggiungi un vertice",editNode:"Modifica il nodo",editEdge:"Modifica il vertice",addDescription:"Clicca per aggiungere un nuovo nodo",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",createEdgeError:"Non si possono collegare vertici ad un cluster",deleteClusterError:"I cluster non possono essere cancellati",editClusterError:"I clusters non possono essere modificati."},t.it_IT=t.it,t.nl={edit:"Wijzigen",del:"Selectie verwijderen",back:"Terug",addNode:"Node toevoegen",addEdge:"Link toevoegen",editNode:"Node wijzigen",editEdge:"Link wijzigen",addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",createEdgeError:"Kan geen link maken naar een cluster.",deleteClusterError:"Clusters kunnen niet worden verwijderd.",editClusterError:"Clusters kunnen niet worden aangepast."},t.nl_NL=t.nl,t.nl_BE=t.nl,t["pt-br"]={edit:"Editar",del:"Remover selecionado",back:"Voltar",addNode:"Adicionar nó",addEdge:"Adicionar aresta",editNode:"Editar nó",editEdge:"Editar aresta",addDescription:"Clique em um espaço em branco para adicionar um novo nó",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",createEdgeError:"Não foi possível linkar arestas a um cluster.",deleteClusterError:"Clusters não puderam ser removidos.",editClusterError:"Clusters não puderam ser editados."},t["pt-BR"]=t["pt-br"],t.pt_BR=t["pt-br"],t.pt_br=t["pt-br"],t.ru={edit:"Редактировать",del:"Удалить выбранное",back:"Назад",addNode:"Добавить узел",addEdge:"Добавить ребро",editNode:"Редактировать узел",editEdge:"Редактировать ребро",addDescription:"Кликните в свободное место, чтобы добавить новый узел.",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",createEdgeError:"Невозможно соединить ребра в кластер.",deleteClusterError:"Кластеры не могут быть удалены",editClusterError:"Кластеры недоступны для редактирования."},t.ru_RU=t.ru,t.cn={edit:"编辑",del:"删除选定",back:"返回",addNode:"添加节点",addEdge:"添加连接线",editNode:"编辑节点",editEdge:"编辑连接线",addDescription:"单击空白处放置新节点。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",createEdgeError:"无法将连接线连接到群集。",deleteClusterError:"无法删除群集。",editClusterError:"无法编辑群集。"},t.zh_CN=t.cn},function(e,t,i){e.exports={default:i(128),__esModule:!0}},function(e,t,i){i(129);var n=i(6).Object;e.exports=function(e,t,i){return n.defineProperty(e,t,i)}},function(e,t,i){var n=i(11);n(n.S+n.F*!i(13),"Object",{defineProperty:i(12).f})},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(){(0,s.default)(this,e),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return(0,a.default)(e,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var e=this.image.width,t=this.image.height;this.width=e,this.height=t;var i=Math.floor(t/2),n=Math.floor(t/4),o=Math.floor(t/8),s=Math.floor(t/16),r=Math.floor(e/2),a=Math.floor(e/4),d=Math.floor(e/8),h=Math.floor(e/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,r,i],[r,0,a,n],[r,n,d,o],[5*d,n,h,s]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var e=this.canvas.getContext("2d"),t=this.coordinates[0];e.drawImage(this.image,t[0],t[1],t[2],t[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var n=this.coordinates[i-1],o=this.coordinates[i];e.drawImage(this.canvas,n[0],n[1],n[2],n[3],o[0],o[1],o[2],o[3])}}},{key:"drawImageAtPosition",value:function(e,t,i,n,o,s){if(this.initialized())if(t>2){t*=.5;for(var r=0;t>2&&r<this.NUM_ITERATIONS;)t*=.5,r+=1;r>=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);var a=this.coordinates[r];e.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,n,o,s)}else e.drawImage(this.image,i,n,o,s)}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=function(){function e(){(0,s.default)(this,e),this.clear(),this.defaultIndex=0,this.groupsArray=[],this.groupIndex=0,this.defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},d.extend(this.options,this.defaultOptions)}return(0,a.default)(e,[{key:"setOptions",value:function(e){var t=["useDefaultGroups"];if(void 0!==e)for(var i in e)if(e.hasOwnProperty(i)&&-1===t.indexOf(i)){var n=e[i];this.add(i,n)}}},{key:"clear",value:function(){this.groups={},this.groupsArray=[]}},{key:"get",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.groups[e];if(void 0===i&&t)if(!1===this.options.useDefaultGroups&&this.groupsArray.length>0){var n=this.groupIndex%this.groupsArray.length;this.groupIndex++,i={},i.color=this.groups[this.groupsArray[n]],this.groups[e]=i}else{var o=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,i={},i.color=this.defaultGroups[o],this.groups[e]=i}return i}},{key:"add",value:function(e,t){return this.groups[e]=t,this.groupsArray.push(e),t}}]),e}();t.default=h},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=i(32),l=i(51),u=i(33).default,c=function(){function e(t,i,n,o){var r=this;if((0,s.default)(this,e),this.body=t,this.images=i,this.groups=n,this.layoutEngine=o,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(e,t){r.add(t.items)},update:function(e,t){r.update(t.items,t.data,t.oldData)},remove:function(e,t){r.remove(t.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(e,t,i,n){if(t===e)return.5;var o=1/(t-e);return Math.max(0,(n-e)*o)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative";this.options=d.bridgeObject(this.defaultOptions),this.bindEventListeners()}return(0,a.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){d.forEach(e.nodesListeners,function(t,i){e.body.data.nodes&&e.body.data.nodes.off(i,t)}),delete e.body.functions.createNode,delete e.nodesListeners.add,delete e.nodesListeners.update,delete e.nodesListeners.remove,delete e.nodesListeners})}},{key:"setOptions",value:function(e){if(void 0!==e){if(u.parseOptions(this.options,e),void 0!==e.shape)for(var t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&this.body.nodes[t].updateShape();if(void 0!==e.font)for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i].needsRefresh());if(void 0!==e.size)for(var n in this.body.nodes)this.body.nodes.hasOwnProperty(n)&&this.body.nodes[n].needsRefresh();void 0===e.hidden&&void 0===e.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(e instanceof h||e instanceof l)this.body.data.nodes=e;else if(Array.isArray(e))this.body.data.nodes=new h,this.body.data.nodes.add(e);else{if(e)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new h}if(i&&d.forEach(this.nodesListeners,function(e,t){i.off(t,e)}),this.body.nodes={},this.body.data.nodes){var n=this;d.forEach(this.nodesListeners,function(e,t){n.body.data.nodes.on(t,e)});var o=this.body.data.nodes.getIds();this.add(o,!0)}!1===t&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,n=[],o=0;o<e.length;o++){i=e[o];var s=this.body.data.nodes.get(i),r=this.create(s);n.push(r),this.body.nodes[i]=r}this.layoutEngine.positionInitially(n),!1===t&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(e,t,i){for(var n=this.body.nodes,o=!1,s=0;s<e.length;s++){var r=e[s],a=n[r],d=t[s];void 0!==a?a.setOptions(d)&&(o=!0):(o=!0,a=this.create(d),n[r]=a)}o||void 0===i||(o=t.some(function(e,t){var n=i[t];return n&&n.level!==e.level})),!0===o?this.body.emitter.emit("_dataChanged"):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(e){for(var t=this.body.nodes,i=0;i<e.length;i++){delete t[e[i]]}this.body.emitter.emit("_dataChanged")}},{key:"create",value:function(e){return new(arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)(e,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];d.forEach(this.body.nodes,function(i,n){var o=e.body.data.nodes.get(n);void 0!==o&&(!0===t&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(o))})}},{key:"getPositions",value:function(e){var t={};if(void 0!==e){if(!0===Array.isArray(e)){for(var i=0;i<e.length;i++)if(void 0!==this.body.nodes[e[i]]){var n=this.body.nodes[e[i]];t[e[i]]={x:Math.round(n.x),y:Math.round(n.y)}}}else if(void 0!==this.body.nodes[e]){var o=this.body.nodes[e];t[e]={x:Math.round(o.x),y:Math.round(o.y)}}}else for(var s=0;s<this.body.nodeIndices.length;s++){var r=this.body.nodes[this.body.nodeIndices[s]];t[this.body.nodeIndices[s]]={x:Math.round(r.x),y:Math.round(r.y)}}return t}},{key:"storePositions",value:function(){var e=[],t=this.body.data.nodes.getDataSet();for(var i in t._data)if(t._data.hasOwnProperty(i)){var n=this.body.nodes[i];t._data[i].x==Math.round(n.x)&&t._data[i].y==Math.round(n.y)||e.push({id:n.id,x:Math.round(n.x),y:Math.round(n.y)})}t.update(e)}},{key:"getBoundingBox",value:function(e){if(void 0!==this.body.nodes[e])return this.body.nodes[e].shape.boundingBox}},{key:"getConnectedNodes",value:function(e,t){var i=[];if(void 0!==this.body.nodes[e])for(var n=this.body.nodes[e],o={},s=0;s<n.edges.length;s++){var r=n.edges[s];"to"!==t&&r.toId==n.id?void 0===o[r.fromId]&&(i.push(r.fromId),o[r.fromId]=!0):"from"!==t&&r.fromId==n.id&&void 0===o[r.toId]&&(i.push(r.toId),o[r.toId]=!0)}return i}},{key:"getConnectedEdges",value:function(e){var t=[];if(void 0!==this.body.nodes[e])for(var i=this.body.nodes[e],n=0;n<i.edges.length;n++)t.push(i.edges[n].id);else console.log("NodeId provided for getConnectedEdges does not exist. Provided: ",e);return t}},{key:"moveNode",value:function(e,t,i){var n=this;void 0!==this.body.nodes[e]?(this.body.nodes[e].x=Number(t),this.body.nodes[e].y=Number(i),setTimeout(function(){n.body.emitter.emit("startSimulation")},0)):console.log("Node id supplied to moveNode does not exist. Provided: ",e)}}]),e}();t.default=c},function(e,t,i){e.exports={default:i(134),__esModule:!0}},function(e,t,i){i(36),i(47),e.exports=i(135)},function(e,t,i){var n=i(67),o=i(8)("iterator"),s=i(24);e.exports=i(6).isIterable=function(e){var t=Object(e);return void 0!==t[o]||"@@iterator"in t||s.hasOwnProperty(n(t))}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(137).default,h=i(34).default,l=function(){function e(t,i,n,o){var r=this;(0,s.default)(this,e),this.ctx=t,this.parent=i;var a=function(e,i){if(void 0===e)return 0;var s=r.parent.getFormattingValues(t,n,o,i),a=0;if(""!==e){a=r.ctx.measureText(e).width}return{width:a,values:s}};this.lines=new d(a)}return(0,a.default)(e,[{key:"process",value:function(e){if(!h.isValidLabel(e))return this.lines.finalize();var t=this.parent.fontOptions;e=e.replace(/\r\n/g,"\n"),e=e.replace(/\r/g,"\n");var i=String(e).split("\n"),n=i.length;if(t.multi)for(var o=0;o<n;o++){var s=this.splitBlocks(i[o],t.multi);if(void 0!==s)if(0!==s.length){if(t.maxWdt>0)for(var r=0;r<s.length;r++){var a=s[r].mod,d=s[r].text;this.splitStringIntoLines(d,a,!0)}else for(var l=0;l<s.length;l++){var u=s[l].mod,c=s[l].text;this.lines.append(c,u)}this.lines.newLine()}else this.lines.newLine("")}else if(t.maxWdt>0)for(var f=0;f<n;f++)this.splitStringIntoLines(i[f]);else for(var p=0;p<n;p++)this.lines.newLine(i[p]);return this.lines.finalize()}},{key:"decodeMarkupSystem",value:function(e){var t="none";return"markdown"===e||"md"===e?t="markdown":!0!==e&&"html"!==e||(t="html"),t}},{key:"splitHtmlBlocks",value:function(e){var t=[],i={bold:!1,ital:!1,mono:!1,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(t.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(e){" "===e&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=e&&(this.buffer+=e)};i.position<e.length;){var n=e.charAt(i.position);/[ \t]/.test(n)?i.mono?i.add(n):i.spacing=!0:/</.test(n)?i.mono||i.bold||!/<b>/.test(e.substr(i.position,3))?i.mono||i.ital||!/<i>/.test(e.substr(i.position,3))?!i.mono&&/<code>/.test(e.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(e.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(e.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(e.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(n):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(n)?/&lt;/.test(e.substr(i.position,4))?(i.add("<"),i.position+=3):/&amp;/.test(e.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(n),i.position++}return i.emitBlock(),t}},{key:"splitMarkdownBlocks",value:function(e){var t=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(t.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(e){" "===e&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=e&&(this.buffer+=e)};i.position<e.length;){var n=e.charAt(i.position);/[ \t]/.test(n)?(i.mono?i.add(n):i.spacing=!0,i.beginable=!0):/\\/.test(n)?i.position<e.length+1&&(i.position++,n=e.charAt(i.position),/ \t/.test(n)?i.spacing=!0:(i.add(n),i.beginable=!1)):i.mono||i.bold||!i.beginable&&!i.spacing||!/\*/.test(n)?i.mono||i.ital||!i.beginable&&!i.spacing||!/\_/.test(n)?!i.mono&&(i.beginable||i.spacing)&&/`/.test(n)?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono")):!i.mono&&"bold"===i.mod()&&/\*/.test(n)?i.position===e.length-1||/[.,_` \t\n]/.test(e.charAt(i.position+1))?(i.emitBlock(),i.bold=!1,i.modStack.shift()):i.add(n):!i.mono&&"ital"===i.mod()&&/\_/.test(n)?i.position===e.length-1||/[.,*` \t\n]/.test(e.charAt(i.position+1))?(i.emitBlock(),i.ital=!1,i.modStack.shift()):i.add(n):i.mono&&"mono"===i.mod()&&/`/.test(n)?i.position===e.length-1||/[.,*_ \t\n]/.test(e.charAt(i.position+1))?(i.emitBlock(),i.mono=!1,i.modStack.shift()):i.add(n):(i.add(n),i.beginable=!1):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital")):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold")),i.position++}return i.emitBlock(),t}},{key:"splitBlocks",value:function(e,t){var i=this.decodeMarkupSystem(t);return"none"===i?[{text:e,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(e):"html"===i?this.splitHtmlBlocks(e):void 0}},{key:"overMaxWidth",value:function(e){var t=this.ctx.measureText(e).width;return this.lines.curWidth()+t>this.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(e){for(var t="",i=0;i<e.length;){var n=""===t?"":" ",o=t+n+e[i];if(this.overMaxWidth(o))break;t=o,i++}return i}},{key:"getLongestFitWord",value:function(e){for(var t=0;t<e.length&&!this.overMaxWidth(e.slice(0,t));)t++;return t}},{key:"splitStringIntoLines",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e=e.replace(/^( +)/g,"$1\r"),e=e.replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r");for(var n=e.split("\r");n.length>0;){var o=this.getLongestFit(n);if(0===o){var s=n[0],r=this.getLongestFitWord(s);this.lines.newLine(s.slice(0,r),t),n[0]=s.slice(r)}else{var a=o;" "===n[o-1]?o--:" "===n[a]&&a++;var d=n.slice(0,o).join("");o==n.length&&i?this.lines.append(d,t):this.lines.newLine(d,t),n=n.slice(a)}}}}]),e}();t.default=l},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(138),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=function(){function e(t){(0,a.default)(this,e),this.measureText=t,this.current=0,this.width=0,this.height=0,this.lines=[]}return(0,h.default)(e,[{key:"_add",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[e]&&(this.lines[e]={width:0,height:0,blocks:[]});var n=t;void 0!==t&&""!==t||(n=" ");var o=this.measureText(n,i),r=(0,s.default)({},o.values);r.text=t,r.width=o.width,r.mod=i,void 0!==t&&""!==t||(r.width=0),this.lines[e].blocks.push(r),this.lines[e].width+=r.width}},{key:"curWidth",value:function(){var e=this.lines[this.current];return void 0===e?0:e.width}},{key:"append",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,e,t)}},{key:"newLine",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,e,t),this.current++}},{key:"determineLineHeights",value:function(){for(var e=0;e<this.lines.length;e++){var t=this.lines[e],i=0;if(void 0!==t.blocks)for(var n=0;n<t.blocks.length;n++){var o=t.blocks[n];i<o.height&&(i=o.height)}t.height=i}}},{key:"determineLabelSize",value:function(){for(var e=0,t=0,i=0;i<this.lines.length;i++){var n=this.lines[i];n.width>e&&(e=n.width),t+=n.height}this.width=e,this.height=t}},{key:"removeEmptyBlocks",value:function(){for(var e=[],t=0;t<this.lines.length;t++){var i=this.lines[t];if(0!==i.blocks.length&&(t!==this.lines.length-1||0!==i.width)){var n={};(0,s.default)(n,i),n.blocks=[];for(var o=void 0,r=[],a=0;a<i.blocks.length;a++){var d=i.blocks[a];0!==d.width?r.push(d):void 0===o&&(o=d)}0===r.length&&void 0!==o&&r.push(o),n.blocks=r,e.push(n)}}return e}},{key:"finalize",value:function(){this.determineLineHeights(),this.determineLabelSize();var e=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:e}}}]),e}();t.default=l},function(e,t,i){e.exports={default:i(139),__esModule:!0}},function(e,t,i){i(140),e.exports=i(6).Object.assign},function(e,t,i){var n=i(11);n(n.S+n.F,"Object",{assign:i(141)})},function(e,t,i){var n=i(26),o=i(50),s=i(31),r=i(29),a=i(59),d=Object.assign;e.exports=!d||i(20)(function(){var e={},t={},i=Symbol(),n="abcdefghijklmnopqrst";return e[i]=7,n.split("").forEach(function(e){t[e]=e}),7!=d({},e)[i]||Object.keys(d({},t)).join("")!=n})?function(e,t){for(var i=r(e),d=arguments.length,h=1,l=o.f,u=s.f;d>h;)for(var c,f=a(arguments[h++]),p=l?n(f).concat(l(f)):n(f),v=p.length,g=0;v>g;)u.call(f,c=p[g++])&&(i[c]=f[c]);return i}:d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o._setMargins(n),o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(t,i)){var n=this.getDimensionsFromLabel(e,t,i);this.width=n.width+this.margin.right+this.margin.left,this.height=n.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(e,t,i,n,o,s){this.resize(e,n,o),this.left=t-this.width/2,this.top=i-this.height/2,this.initContextForDraw(e,s),e.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.performFill(e,s),this.updateBoundingBox(t,i,e,n,o),this.labelModule.draw(e,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:"updateBoundingBox",value:function(e,t,i,n,o){this._updateBoundingBox(e,t,i,n,o);var s=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(s)}},{key:"distanceToBorder",value:function(e,t){this.resize(e);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(t)),Math.abs(this.height/2/Math.sin(t)))+i}}]),t}(v.default);t.default=g},function(e,t,i){i(144),e.exports=i(6).Object.getPrototypeOf},function(e,t,i){var n=i(29),o=i(66);i(68)("getPrototypeOf",function(){return function(e){return o(n(e))}})},function(e,t,i){e.exports={default:i(146),__esModule:!0}},function(e,t,i){i(147),e.exports=i(6).Object.setPrototypeOf},function(e,t,i){var n=i(11);n(n.S,"Object",{setPrototypeOf:i(148).set})},function(e,t,i){var n=i(25),o=i(19),s=function(e,t){if(o(e),!n(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{n=i(61)(Function.call,i(70).f(Object.prototype,"__proto__").set,2),n(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return s(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:s}},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(53),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o._setMargins(n),o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(t,i)){var n=this.getDimensionsFromLabel(e,t,i),o=Math.max(n.width+this.margin.right+this.margin.left,n.height+this.margin.top+this.margin.bottom);this.options.size=o/2,this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(e,t,i,n,o,s){this.resize(e,n,o),this.left=t-this.width/2,this.top=i-this.height/2,this._drawRawCircle(e,t,i,s),this.updateBoundingBox(t,i),this.labelModule.draw(e,this.left+this.textSize.width/2+this.margin.left,i,n,o)}},{key:"updateBoundingBox",value:function(e,t){this.boundingBox.top=t-this.options.size,this.boundingBox.left=e-this.options.size,this.boundingBox.right=e+this.options.size,this.boundingBox.bottom=t+this.options.size}},{key:"distanceToBorder",value:function(e,t){return this.resize(e),.5*this.width}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(53),v=n(p),g=function(e){function t(e,i,n,o,r){(0,a.default)(this,t);var d=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return d.setImages(o,r),d}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,this.height=n,void(this.radius=.5*this.width)}this.needsRefresh(t,i)&&this._resizeImage()}},{key:"draw",value:function(e,t,i,n,o,s){this.switchImages(n),this.resize(),this.left=t-this.width/2,this.top=i-this.height/2,this._drawRawCircle(e,t,i,s),e.save(),e.clip(),this._drawImageAtPosition(e,s),e.restore(),this._drawImageLabel(e,t,i,n,o),this.updateBoundingBox(t,i)}},{key:"updateBoundingBox",value:function(e,t){this.boundingBox.top=t-this.options.size,this.boundingBox.left=e-this.options.size,this.boundingBox.right=e+this.options.size,this.boundingBox.bottom=t+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(e,t){return this.resize(e),.5*this.width}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o._setMargins(n),o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e,t,i){if(this.needsRefresh(t,i)){var n=this.getDimensionsFromLabel(e,t,i),o=n.width+this.margin.right+this.margin.left;this.width=o,this.height=o,this.radius=this.width/2}}},{key:"draw",value:function(e,t,i,n,o,s){this.resize(e,n,o),this.left=t-this.width/2,this.top=i-this.height/2,this.initContextForDraw(e,s),e.database(t-this.width/2,i-this.height/2,this.width,this.height),this.performFill(e,s),this.updateBoundingBox(t,i,e,n,o),this.labelModule.draw(e,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"diamond",4,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"circle",2,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this.resize(e),this.options.size}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(t,i)){var n=this.getDimensionsFromLabel(e,t,i);this.height=2*n.height,this.width=n.width+n.height,this.radius=.5*this.width}}},{key:"draw",value:function(e,t,i,n,o,s){this.resize(e,n,o),this.left=t-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(e,s),e.ellipse_vis(this.left,this.top,this.width,this.height),this.performFill(e,s),this.updateBoundingBox(t,i,e,n,o),this.labelModule.draw(e,t,i,n,o)}},{key:"distanceToBorder",value:function(e,t){this.resize(e);var i=.5*this.width,n=.5*this.height,o=Math.sin(t)*i,s=Math.cos(t)*n;return i*n/Math.sqrt(o*o+s*s)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o._setMargins(n),o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e,t,i){this.needsRefresh(t,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(e,t,i,n,o,s){if(this.resize(e,n,o),this.options.icon.size=this.options.icon.size||50,this.left=t-this.width/2,this.top=i-this.height/2,this._icon(e,t,i,n,o,s),void 0!==this.options.label){this.labelModule.draw(e,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+5,n)}this.updateBoundingBox(t,i)}},{key:"updateBoundingBox",value:function(e,t){if(this.boundingBox.top=t-.5*this.options.icon.size,this.boundingBox.left=e-.5*this.options.icon.size,this.boundingBox.right=e+.5*this.options.icon.size,this.boundingBox.bottom=t+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(e,t,i,n,o,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(e.font=(n?"bold ":"")+r+"px "+this.options.icon.face,e.fillStyle=this.options.icon.color||"black",e.textAlign="center",e.textBaseline="middle",this.enableShadow(e,s),e.fillText(this.options.icon.code,t,i),this.disableShadow(e,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(53),v=n(p),g=function(e){function t(e,i,n,o,r){(0,a.default)(this,t);var d=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return d.setImages(o,r),d}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var n=2*this.options.size;return this.width=n,void(this.height=n)}this.needsRefresh(t,i)&&this._resizeImage()}},{key:"draw",value:function(e,t,i,n,o,s){if(this.switchImages(n),this.resize(),this.left=t-this.width/2,this.top=i-this.height/2,!0===this.options.shapeProperties.useBorderWithImage){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,d=(n?a:r)/this.body.view.scale;e.lineWidth=Math.min(this.width,d),e.beginPath(),e.strokeStyle=n?this.options.color.highlight.border:o?this.options.color.hover.border:this.options.color.border,e.fillStyle=n?this.options.color.highlight.background:o?this.options.color.hover.background:this.options.color.background,e.rect(this.left-.5*e.lineWidth,this.top-.5*e.lineWidth,this.width+e.lineWidth,this.height+e.lineWidth),e.fill(),this.performStroke(e,s),e.closePath()}this._drawImageAtPosition(e,s),this._drawImageLabel(e,t,i,n,o),this.updateBoundingBox(t,i)}},{key:"updateBoundingBox",value:function(e,t){this.resize(),this._updateBoundingBox(e,t),void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"square",2,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"hexagon",4,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"star",4,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(15),v=n(p),g=function(e){function t(e,i,n){(0,a.default)(this,t);var o=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n));return o._setMargins(n),o}return(0,f.default)(t,e),(0,h.default)(t,[{key:"resize",value:function(e,t,i){this.needsRefresh(t,i)&&(this.textSize=this.labelModule.getTextSize(e,t,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(e,t,i,n,o,s){this.resize(e,n,o),this.left=t-this.width/2,this.top=i-this.height/2,this.enableShadow(e,s),this.labelModule.draw(e,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,n,o),this.disableShadow(e,s),this.updateBoundingBox(t,i,e,n,o)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"triangle",3,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(16),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"draw",value:function(e,t,i,n,o,s){this._drawShape(e,"triangleDown",3,t,i,n,o,s)}},{key:"distanceToBorder",value:function(e,t){return this._distanceToBorder(e,t)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=i(32),l=i(51),u=i(55).default,c=function(){function e(t,i,n){var o=this;(0,s.default)(this,e),this.body=t,this.images=i,this.groups=n,this.body.functions.createEdge=this.create.bind(this),this.edgesListeners={add:function(e,t){o.add(t.items)},update:function(e,t){o.update(t.items)},remove:function(e,t){o.remove(t.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(e,t,i,n){if(t===e)return.5;var o=1/(t-e);return Math.max(0,(n-e)*o)}},selectionWidth:1.5,selfReferenceSize:20,shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},d.deepExtend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("_forceDisableDynamicCurves",function(t){var i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===t&&(t="continuous");var n=!1;for(var o in e.body.edges)if(e.body.edges.hasOwnProperty(o)){var s=e.body.edges[o],r=e.body.data.edges._data[o];if(void 0!==r){var a=r.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===t?s.setOptions({smooth:!1}):s.setOptions({smooth:{type:t}}),n=!0)}}!0===i&&!0===n&&e.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){e.reconnectEdges()}),this.body.emitter.on("refreshEdges",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){d.forEach(e.edgesListeners,function(t,i){e.body.data.edges&&e.body.data.edges.off(i,t)}),delete e.body.functions.createEdge,delete e.edgesListeners.add,delete e.edgesListeners.update,delete e.edgesListeners.remove,delete e.edgesListeners})}},{key:"setOptions",value:function(e){if(void 0!==e){u.parseOptions(this.options,e,!0,this.defaultOptions,!0);var t=!1;if(void 0!==e.smooth)for(var i in this.body.edges)this.body.edges.hasOwnProperty(i)&&(t=this.body.edges[i].updateEdgeType()||t);if(void 0!==e.font)for(var n in this.body.edges)this.body.edges.hasOwnProperty(n)&&this.body.edges[n].updateLabelModule();void 0===e.hidden&&void 0===e.physics&&!0!==t||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.body.data.edges;if(e instanceof h||e instanceof l)this.body.data.edges=e;else if(Array.isArray(e))this.body.data.edges=new h,this.body.data.edges.add(e);else{if(e)throw new TypeError("Array or DataSet expected");this.body.data.edges=new h}if(n&&d.forEach(this.edgesListeners,function(e,t){n.off(t,e)}),this.body.edges={},this.body.data.edges){d.forEach(this.edgesListeners,function(e,i){t.body.data.edges.on(i,e)});var o=this.body.data.edges.getIds();this.add(o,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,n=this.body.data.edges,o=0;o<e.length;o++){var s=e[o],r=i[s];r&&r.disconnect();var a=n.get(s,{showInternalIds:!0});i[s]=this.create(a)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===t&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(e){for(var t=this.body.edges,i=this.body.data.edges,n=!1,o=0;o<e.length;o++){var s=e[o],r=i.get(s),a=t[s];void 0!==a?(a.disconnect(),n=a.setOptions(r)||n,a.connect()):(this.body.edges[s]=this.create(r),n=!0)}!0===n?(this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),this.body.emitter.emit("_dataChanged")):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==e.length){var i=this.body.edges;d.forEach(e,function(e){var t=i[e];void 0!==t&&t.remove()}),t&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var e=this;d.forEach(this.body.edges,function(t,i){var n=e.body.data.edges._data[i];void 0!==n&&t.setOptions(n)})}},{key:"create",value:function(e){return new u(e,this.body,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var e,t=this.body.nodes,i=this.body.edges;for(e in t)t.hasOwnProperty(e)&&(t[e].edges=[]);for(e in i)if(i.hasOwnProperty(e)){var n=i[e];n.from=null,n.to=null,n.connect()}}},{key:"getConnectedNodes",value:function(e){var t=[];if(void 0!==this.body.edges[e]){var i=this.body.edges[e];void 0!==i.fromId&&t.push(i.fromId),void 0!==i.toId&&t.push(i.toId)}return t}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var e=this,t=[];d.forEach(this.body.edges,function(i,n){var o=e.body.nodes[i.toId],s=e.body.nodes[i.fromId];void 0!==o&&!0===o.isCluster||void 0!==s&&!0===s.isCluster||void 0!==o&&void 0!==s||t.push(n)}),this.remove(t,!1)}},{key:"_addMissingEdges",value:function(){var e=this.body.edges,t=this.body.data.edges,i=[];t.forEach(function(t,n){void 0===e[n]&&i.push(n)}),this.add(i,!0)}}]),e}();t.default=c},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(2),a=n(r),d=i(0),h=n(d),l=i(1),u=n(l),c=i(3),f=n(c),p=i(4),v=n(p),g=i(165),y=n(g),m=function(e){function t(e,i,n){return(0,h.default)(this,t),(0,f.default)(this,(t.__proto__||(0,a.default)(t)).call(this,e,i,n))}return(0,v.default)(t,e),(0,u.default)(t,[{key:"_line",value:function(e,t,i){var n=i[0],o=i[1];this._bezierCurve(e,t,n,o)}},{key:"_getViaCoordinates",value:function(){var e=this.from.x-this.to.x,t=this.from.y-this.to.y,i=void 0,n=void 0,o=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(e)>Math.abs(t)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(n=this.from.y,s=this.to.y,i=this.from.x-r*e,o=this.to.x+r*e):(n=this.from.y-r*t,s=this.to.y+r*t,i=this.from.x,o=this.to.x),[{x:i,y:n},{x:o,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(e,t){return this._findBorderPositionBezier(e,t)}},{key:"_getDistanceToEdge",value:function(e,t,i,n,o,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),d=(0,s.default)(a,2),h=d[0],l=d[1];return this._getDistanceToBezierEdge(e,t,i,n,o,r,h,l)}},{key:"getPoint",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(t,2),n=i[0],o=i[1],r=e,a=[];return a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3),{x:a[0]*this.fromPoint.x+a[1]*n.x+a[2]*o.x+a[3]*this.toPoint.x,y:a[0]*this.fromPoint.y+a[1]*n.y+a[2]*o.y+a[3]*this.toPoint.y}}}]),t}(y.default);t.default=m},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(56),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_getDistanceToBezierEdge",value:function(e,t,i,n,o,s,r,a){var d=1e9,h=void 0,l=void 0,u=void 0,c=void 0,f=void 0,p=e,v=t,g=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,g[0]=Math.pow(1-u,3),g[1]=3*u*Math.pow(1-u,2),g[2]=3*Math.pow(u,2)*(1-u),g[3]=Math.pow(u,3),c=g[0]*e+g[1]*r.x+g[2]*a.x+g[3]*i,f=g[0]*t+g[1]*r.y+g[2]*a.y+g[3]*n,l>0&&(h=this._getDistanceToLine(p,v,c,f,o,s),d=h<d?h:d),p=c,v=f;return d}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(2),a=n(r),d=i(0),h=n(d),l=i(1),u=n(l),c=i(3),f=n(c),p=i(4),v=n(p),g=i(56),y=n(g),m=function(e){function t(e,i,n){(0,h.default)(this,t);var o=(0,f.default)(this,(t.__proto__||(0,a.default)(t)).call(this,e,i,n));return o._boundFunction=function(){o.positionBezierNode()},o.body.emitter.on("_repositionBezierNodes",o._boundFunction),o}return(0,v.default)(t,e),(0,u.default)(t,[{key:"setOptions",value:function(e){var t=!1;this.options.physics!==e.physics&&(t=!0),this.options=e,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===t&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var e="edgeId:"+this.id,t=this.body.functions.createNode({id:e,shape:"circle",physics:!0,hidden:!0});this.body.nodes[e]=t,this.via=t,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(e,t,i){this._bezierCurve(e,t,i)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=e,n=void 0,o=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),d=a[0],h=a[1],l=a[2],u=2*Math.PI*(1-i);n=d+l*Math.sin(u),o=h+l-l*(1-Math.cos(u))}else n=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*t.x+Math.pow(i,2)*this.toPoint.x,o=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*t.y+Math.pow(i,2)*this.toPoint.y;return{x:n,y:o}}},{key:"_findBorderPosition",value:function(e,t){return this._findBorderPositionBezier(e,t,this.via)}},{key:"_getDistanceToEdge",value:function(e,t,i,n,o,s){return this._getDistanceToBezierEdge(e,t,i,n,o,s,this.via)}}]),t}(y.default);t.default=m},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(56),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_line",value:function(e,t,i){this._bezierCurve(e,t,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var e=void 0,t=void 0,i=this.options.smooth.roundness,n=this.options.smooth.type,o=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===n||"diagonalCross"===n){var r=void 0,a=void 0;r=a=o<=s?i*s:i*o,this.from.x>this.to.x&&(r=-r),this.from.y>=this.to.y&&(a=-a),e=this.from.x+r,t=this.from.y+a,"discrete"===n&&(o<=s?e=o<i*s?this.from.x:e:t=s<i*o?this.from.y:t)}else if("straightCross"===n){var d=(1-i)*o,h=(1-i)*s;o<=s?(d=0,this.from.y<this.to.y&&(h=-h)):(this.from.x<this.to.x&&(d=-d),h=0),e=this.to.x+d,t=this.to.y+h}else if("horizontal"===n){var l=(1-i)*o;this.from.x<this.to.x&&(l=-l),e=this.to.x+l,t=this.from.y}else if("vertical"===n){var u=(1-i)*s;this.from.y<this.to.y&&(u=-u),e=this.from.x,t=this.to.y+u}else if("curvedCW"===n){o=this.to.x-this.from.x,s=this.from.y-this.to.y;var c=Math.sqrt(o*o+s*s),f=Math.PI,p=Math.atan2(s,o),v=(p+(.5*i+.5)*f)%(2*f);e=this.from.x+(.5*i+.5)*c*Math.sin(v),t=this.from.y+(.5*i+.5)*c*Math.cos(v)}else if("curvedCCW"===n){o=this.to.x-this.from.x,s=this.from.y-this.to.y;var g=Math.sqrt(o*o+s*s),y=Math.PI,m=Math.atan2(s,o),b=(m+(.5*-i+.5)*y)%(2*y);e=this.from.x+(.5*i+.5)*g*Math.sin(b),t=this.from.y+(.5*i+.5)*g*Math.cos(b)}else{var _=void 0,w=void 0;_=w=o<=s?i*s:i*o,this.from.x>this.to.x&&(_=-_),this.from.y>=this.to.y&&(w=-w),e=this.from.x+_,t=this.from.y+w,o<=s?e=this.from.x<=this.to.x?this.to.x<e?this.to.x:e:this.to.x>e?this.to.x:e:t=this.from.y>=this.to.y?this.to.y>t?this.to.y:t:this.to.y<t?this.to.y:t}return{x:e,y:t}}},{key:"_findBorderPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(e,t,i.via)}},{key:"_getDistanceToEdge",value:function(e,t,i,n,o,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(e,t,i,n,o,s,r)}},{key:"getPoint",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=e;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*t.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*t.y+Math.pow(i,2)*this.toPoint.y}}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(78),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_line",value:function(e,t){e.beginPath(),e.moveTo(this.fromPoint.x,this.fromPoint.y),e.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(e,t),e.stroke(),this.disableShadow(e,t)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(e){return{x:(1-e)*this.fromPoint.x+e*this.toPoint.x,y:(1-e)*this.fromPoint.y+e*this.toPoint.y}}},{key:"_findBorderPosition",value:function(e,t){var i=this.to,n=this.from;e.id===this.from.id&&(i=this.from,n=this.to);var o=Math.atan2(i.y-n.y,i.x-n.x),s=i.x-n.x,r=i.y-n.y,a=Math.sqrt(s*s+r*r),d=e.distanceToBorder(t,o),h=(a-d)/a,l={};return l.x=(1-h)*n.x+h*i.x,l.y=(1-h)*n.y+h*i.y,l}},{key:"_getDistanceToEdge",value:function(e,t,i,n,o,s){return this._getDistanceToLine(e,t,i,n,o,s)}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(10),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(80).default,u=i(170).default,c=i(171).default,f=i(172).default,p=i(173).default,v=i(81).default,g=i(174).default,y=i(175).default,m=i(5),b=i(79).default,_=function(){function e(t){(0,a.default)(this,e),this.body=t,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},m.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,h.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("initPhysics",function(){e.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){e.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){e.stopSimulation(),e.ready=!1}),this.body.emitter.on("disablePhysics",function(){e.physicsEnabled=!1,e.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){e.setOptions(e.options),!0===e.ready&&e.startSimulation()}),this.body.emitter.on("startSimulation",function(){!0===e.ready&&e.startSimulation()}),this.body.emitter.on("stopSimulation",function(){e.stopSimulation()}),this.body.emitter.on("destroy",function(){e.stopSimulation(!1),e.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){e.updatePhysicsData()})}},{key:"setOptions",value:function(e){void 0!==e&&(!1===e?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):!0===e?(this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation()):(this.physicsEnabled=!0,m.selectiveNotDeepExtend(["stabilization"],this.options,e),m.mergeOptions(this.options,e,"stabilization"),void 0===e.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var e;"forceAtlas2Based"===this.options.solver?(e=this.options.forceAtlas2Based,this.nodesSolver=new g(this.body,this.physicsBody,e),this.edgesSolver=new f(this.body,this.physicsBody,e),this.gravitySolver=new y(this.body,this.physicsBody,e)):"repulsion"===this.options.solver?(e=this.options.repulsion,this.nodesSolver=new u(this.body,this.physicsBody,e),this.edgesSolver=new f(this.body,this.physicsBody,e),this.gravitySolver=new v(this.body,this.physicsBody,e)):"hierarchicalRepulsion"===this.options.solver?(e=this.options.hierarchicalRepulsion,this.nodesSolver=new c(this.body,this.physicsBody,e),this.edgesSolver=new p(this.body,this.physicsBody,e),this.gravitySolver=new v(this.body,this.physicsBody,e)):(e=this.options.barnesHut,this.nodesSolver=new l(this.body,this.physicsBody,e),this.edgesSolver=new f(this.body,this.physicsBody,e),this.gravitySolver=new v(this.body,this.physicsBody,e)),this.modelOptions=e}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===e&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===e&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var e=Date.now();this.physicsTick(),(Date.now()-e<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&setTimeout(function(){e.body.emitter.emit("stabilized",{iterations:t}),e.startedStabilization=!1,e.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:"physicsTick",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled){this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1}else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:"updatePhysicsData",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var e=this.body.nodes,t=this.body.edges;for(var i in e)e.hasOwnProperty(i)&&!0===e[i].options.physics&&this.physicsBody.physicsNodeIndices.push(e[i].id);for(var n in t)t.hasOwnProperty(n)&&!0===t[n].options.physics&&this.physicsBody.physicsEdgeIndices.push(t[n].id);for(var o=0;o<this.physicsBody.physicsNodeIndices.length;o++){var s=this.physicsBody.physicsNodeIndices[o];this.physicsBody.forces[s]={x:0,y:0},void 0===this.physicsBody.velocities[s]&&(this.physicsBody.velocities[s]={x:0,y:0})}for(var r in this.physicsBody.velocities)void 0===e[r]&&delete this.physicsBody.velocities[r]}},{key:"revert",value:function(){var e=(0,s.default)(this.previousStates),t=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var n=0;n<e.length;n++){var o=e[n];void 0!==t[o]?!0===t[o].options.physics&&(this.referenceState[o]={positions:{x:t[o].x,y:t[o].y}},i[o].x=this.previousStates[o].vx,i[o].y=this.previousStates[o].vy,t[o].x=this.previousStates[o].x,t[o].y=this.previousStates[o].y):delete this.previousStates[o]}}},{key:"_evaluateStepQuality",value:function(){var e=void 0,t=void 0,i=this.body.nodes,n=this.referenceState;for(var o in this.referenceState)if(this.referenceState.hasOwnProperty(o)&&void 0!==i[o]&&(e=i[o].x-n[o].positions.x,t=i[o].y-n[o].positions.y,Math.sqrt(Math.pow(e,2)+Math.pow(t,2))>.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var e=this.physicsBody.physicsNodeIndices,t=0,i=0,n=0;n<e.length;n++){var o=e[n],s=this._performStep(o);t=Math.max(t,s),i+=s}this.adaptiveTimestepEnabled=i/e.length<5,this.stabilized=t<this.options.minVelocity}},{key:"calculateComponentVelocity",value:function(e,t,i){e+=(t-this.modelOptions.damping*e)/i*this.timestep;var n=this.options.maxVelocity||1e9;return Math.abs(e)>n&&(e=e>0?n:-n),e}},{key:"_performStep",value:function(e){var t=this.body.nodes[e],i=this.physicsBody.forces[e],n=this.physicsBody.velocities[e];return this.previousStates[e]={x:t.x,y:t.y,vx:n.x,vy:n.y},!1===t.options.fixed.x?(n.x=this.calculateComponentVelocity(n.x,i.x,t.options.mass),t.x+=n.x*this.timestep):(i.x=0,n.x=0),!1===t.options.fixed.y?(n.y=this.calculateComponentVelocity(n.y,i.y,t.options.mass),t.y+=n.y*this.timestep):(i.y=0,n.y=0),Math.sqrt(Math.pow(n.x,2)+Math.pow(n.y,2))}},{key:"_freezeNodes",value:function(){var e=this.body.nodes;for(var t in e)if(e.hasOwnProperty(t)&&e[t].x&&e[t].y){var i=e[t].options.fixed;this.freezeCache[t]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var e=this.body.nodes;for(var t in e)e.hasOwnProperty(t)&&void 0!==this.freezeCache[t]&&(e[t].options.fixed.x=this.freezeCache[t].x,e[t].options.fixed.y=this.freezeCache[t].y);this.freezeCache={}}},{key:"stabilize",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;if("number"!=typeof t&&(t=this.options.stabilization.iterations,console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",t)),0===this.physicsBody.physicsNodeIndices.length)return void(this.ready=!0);this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=t,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,setTimeout(function(){return e._stabilizationBatch()},0)}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var e=this,t=function(){return!1===e.stabilized&&e.stabilizationIterations<e.targetIterations},i=function(){e.body.emitter.emit("stabilizationProgress",{iterations:e.stabilizationIterations,total:e.targetIterations})};this._startStabilizing()&&i();for(var n=0;t()&&n<this.options.stabilization.updateInterval;)this.physicsTick(),n++;i(),t()?setTimeout(this._stabilizationBatch.bind(this),0):this._finalizeStabilization()}},{key:"_finalizeStabilization",value:function(){this.body.emitter.emit("_allowRedraw"),!0===this.options.stabilization.fit&&this.body.emitter.emit("fit"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit("stabilizationIterationsDone"),this.body.emitter.emit("_requestRedraw"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:"_drawForces",value:function(e){for(var t=0;t<this.physicsBody.physicsNodeIndices.length;t++){var i=this.physicsBody.physicsNodeIndices[t],n=this.body.nodes[i],o=this.physicsBody.forces[i],s=Math.sqrt(Math.pow(o.x,2)+Math.pow(o.x,2)),r=Math.min(Math.max(5,s),15),a=3*r,d=m.HSVToHex((180-180*Math.min(1,Math.max(0,.03*s)))/360,1,1),h={x:n.x+20*o.x,y:n.y+20*o.y};e.lineWidth=r,e.strokeStyle=d,e.beginPath(),e.moveTo(n.x,n.y),e.lineTo(h.x,h.y),e.stroke();var l=Math.atan2(o.y,o.x);e.fillStyle=d,b.draw(e,{type:"arrow",point:h,angle:l,length:a}),e.fill()}}}]),e}();t.default=_},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.setOptions(n)}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"solve",value:function(){for(var e,t,i,n,o,s,r,a,d=this.body.nodes,h=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,f=0;f<h.length-1;f++){r=d[h[f]];for(var p=f+1;p<h.length;p++)a=d[h[p]],e=a.x-r.x,t=a.y-r.y,i=Math.sqrt(e*e+t*t),0===i&&(i=.1*Math.random(),e=i),i<2*u&&(s=i<.5*u?1:c*i+4/3,s/=i,n=e*s,o=t*s,l[r.id].x-=n,l[r.id].y-=o,l[a.id].x+=n,l[a.id].y+=o)}}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.setOptions(n)}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"solve",value:function(){var e,t,i,n,o,s,r,a,d,h,l=this.body.nodes,u=this.physicsBody.physicsNodeIndices,c=this.physicsBody.forces,f=this.options.nodeDistance;for(d=0;d<u.length-1;d++)for(r=l[u[d]],h=d+1;h<u.length;h++)if(a=l[u[h]],r.level===a.level){e=a.x-r.x,t=a.y-r.y,i=Math.sqrt(e*e+t*t);s=i<f?-Math.pow(.05*i,2)+Math.pow(.05*f,2):0,0===i?i=.01:s/=i,n=e*s,o=t*s,c[r.id].x-=n,c[r.id].y-=o,c[a.id].x+=n,c[a.id].y+=o}}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.setOptions(n)}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"solve",value:function(){for(var e=void 0,t=void 0,i=this.physicsBody.physicsEdgeIndices,n=this.body.edges,o=void 0,s=void 0,r=void 0,a=0;a<i.length;a++)t=n[i[a]],!0===t.connected&&t.toId!==t.fromId&&void 0!==this.body.nodes[t.toId]&&void 0!==this.body.nodes[t.fromId]&&(void 0!==t.edgeType.via?(e=void 0===t.options.length?this.options.springLength:t.options.length,o=t.to,s=t.edgeType.via,r=t.from,this._calculateSpringForce(o,s,.5*e),this._calculateSpringForce(s,r,.5*e)):(e=void 0===t.options.length?1.5*this.options.springLength:t.options.length,this._calculateSpringForce(t.from,t.to,e)))}},{key:"_calculateSpringForce",value:function(e,t,i){var n=e.x-t.x,o=e.y-t.y,s=Math.max(Math.sqrt(n*n+o*o),.01),r=this.options.springConstant*(i-s)/s,a=n*r,d=o*r;void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x+=a,this.physicsBody.forces[e.id].y+=d),void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x-=a,this.physicsBody.forces[t.id].y-=d)}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.physicsBody=i,this.setOptions(n)}return(0,a.default)(e,[{key:"setOptions",value:function(e){this.options=e}},{key:"solve",value:function(){for(var e,t,i,n,o,s,r,a,d=this.body.edges,h=this.physicsBody.physicsEdgeIndices,l=this.physicsBody.physicsNodeIndices,u=this.physicsBody.forces,c=0;c<l.length;c++){var f=l[c];u[f].springFx=0,u[f].springFy=0}for(var p=0;p<h.length;p++)t=d[h[p]],!0===t.connected&&(e=void 0===t.options.length?this.options.springLength:t.options.length,i=t.from.x-t.to.x,n=t.from.y-t.to.y,a=Math.sqrt(i*i+n*n),a=0===a?.01:a,r=this.options.springConstant*(e-a)/a,o=i*r,s=n*r,t.to.level!=t.from.level?(void 0!==u[t.toId]&&(u[t.toId].springFx-=o,u[t.toId].springFy-=s),void 0!==u[t.fromId]&&(u[t.fromId].springFx+=o,u[t.fromId].springFy+=s)):(void 0!==u[t.toId]&&(u[t.toId].x-=.5*o,u[t.toId].y-=.5*s),void 0!==u[t.fromId]&&(u[t.fromId].x+=.5*o,u[t.fromId].y+=.5*s)));r=1;for(var v,g,y=0;y<l.length;y++){var m=l[y];v=Math.min(r,Math.max(-r,u[m].springFx)),g=Math.min(r,Math.max(-r,u[m].springFy)),u[m].x+=v,u[m].y+=g}for(var b=0,_=0,w=0;w<l.length;w++){var k=l[w];b+=u[k].x,_+=u[k].y}for(var x=b/l.length,O=_/l.length,M=0;M<l.length;M++){var E=l[M];u[E].x-=x,u[E].y-=O}}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(80),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_calculateForces",value:function(e,t,i,n,o){0===e&&(e=.1*Math.random(),t=e),this.overlapAvoidanceFactor<1&&n.shape.radius&&(e=Math.max(.1+this.overlapAvoidanceFactor*n.shape.radius,e-n.shape.radius));var s=n.edges.length+1,r=this.options.gravitationalConstant*o.mass*n.options.mass*s/Math.pow(e,2),a=t*r,d=i*r;this.physicsBody.forces[n.id].x+=a,this.physicsBody.forces[n.id].y+=d}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(81),v=n(p),g=function(e){function t(e,i,n){return(0,a.default)(this,t),(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n))}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_calculateForces",value:function(e,t,i,n,o){if(e>0){var s=o.edges.length+1,r=this.options.centralGravity*s*o.options.mass;n[o.id].x=t*r,n[o.id].y=i*r}}}]),t}(v.default);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(10),s=n(o),r=i(7),a=n(r),d=i(0),h=n(d),l=i(1),u=n(l),c=i(5),f=i(57).default,p=i(177).default,v=i(55).default,g=i(33).default,y=function(){function e(t){var i=this;(0,h.default)(this,e),this.body=t,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(e,[{key:"clusterByHubsize",value:function(e,t){void 0===e?e=this._getHubSize():"object"===(void 0===e?"undefined":(0,a.default)(e))&&(t=this._checkOptions(e),e=this._getHubSize());for(var i=[],n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodes[this.body.nodeIndices[n]];o.edges.length>=e&&i.push(o.id)}for(var s=0;s<i.length;s++)this.clusterByConnection(i[s],t,!0);this.body.emitter.emit("_dataChanged")}},{key:"cluster",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===t.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");t=this._checkOptions(t);var n={},o={};c.forEach(this.body.nodes,function(i,s){var r=f.cloneOptions(i);!0===t.joinCondition(r)&&(n[s]=i,c.forEach(i.edges,function(t){void 0===e.clusteredEdges[t.id]&&(o[t.id]=t)}))}),this._cluster(n,o,t,i)}},{key:"clusterByEdgeCount",value:function(e,t){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];t=this._checkOptions(t);for(var o=[],r={},a=void 0,d=void 0,h=void 0,l=0;l<this.body.nodeIndices.length;l++){var u,c,p;!function(n){var l={},v={},g=i.body.nodeIndices[n],y=i.body.nodes[g];if(void 0===r[g]){h=0,d=[];for(var m=0;m<y.edges.length;m++)a=y.edges[m],void 0===i.clusteredEdges[a.id]&&(a.toId!==a.fromId&&h++,d.push(a));if(h===e){u=function(e){if(void 0===t.joinCondition||null===t.joinCondition)return!0;var i=f.cloneOptions(e);return t.joinCondition(i)};for(var b=!0,_=0;_<d.length;_++){a=d[_];var w=i._getConnectedId(a,g);if(!u(y)){b=!1;break}v[a.id]=a,l[g]=y,l[w]=i.body.nodes[w],r[g]=!0}if((0,s.default)(l).length>0&&(0,s.default)(v).length>0&&!0===b)if(c=function(){for(var e=0;e<o.length;++e)for(var t in l)if(void 0!==o[e].nodes[t])return o[e]},void 0!==(p=c())){for(var k in l)void 0===p.nodes[k]&&(p.nodes[k]=l[k]);for(var x in v)void 0===p.edges[x]&&(p.edges[x]=v[x])}else o.push({nodes:l,edges:v})}}}(l)}for(var l=0;l<o.length;l++)this._cluster(o[l].nodes,o[l].edges,t,!1);!0===n&&this.body.emitter.emit("_dataChanged")}},{key:"clusterOutliers",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,e,t)}},{key:"clusterBridges",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,e,t)}},{key:"clusterByConnection",value:function(e,t){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===e)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[e])throw new Error("The nodeId given to clusterByConnection does not exist!");var n=this.body.nodes[e];t=this._checkOptions(t,n),void 0===t.clusterNodeProperties.x&&(t.clusterNodeProperties.x=n.x),void 0===t.clusterNodeProperties.y&&(t.clusterNodeProperties.y=n.y),void 0===t.clusterNodeProperties.fixed&&(t.clusterNodeProperties.fixed={},t.clusterNodeProperties.fixed.x=n.options.fixed.x,t.clusterNodeProperties.fixed.y=n.options.fixed.y);var o={},r={},a=n.id,d=f.cloneOptions(n);o[a]=n;for(var h=0;h<n.edges.length;h++){var l=n.edges[h];if(void 0===this.clusteredEdges[l.id]){var u=this._getConnectedId(l,a);if(void 0===this.clusteredNodes[u])if(u!==a)if(void 0===t.joinCondition)r[l.id]=l,o[u]=this.body.nodes[u];else{var c=f.cloneOptions(this.body.nodes[u]);!0===t.joinCondition(d,c)&&(r[l.id]=l,o[u]=this.body.nodes[u])}else r[l.id]=l}}var p=(0,s.default)(o).map(function(e){return o[e].id});for(v in o)if(o.hasOwnProperty(v))for(var v=o[v],g=0;g<v.edges.length;g++){var y=v.edges[g];p.indexOf(this._getConnectedId(y,v.id))>-1&&(r[y.id]=y)}this._cluster(o,r,t,i)}},{key:"_createClusterEdges",value:function(e,t,i,n){for(var o=void 0,r=void 0,a=void 0,d=void 0,h=void 0,l=void 0,u=(0,s.default)(e),c=[],f=0;f<u.length;f++){r=u[f],a=e[r];for(var p=0;p<a.edges.length;p++)o=a.edges[p],void 0===this.clusteredEdges[o.id]&&(o.toId==o.fromId?t[o.id]=o:o.toId==r?(d=i.id,h=o.fromId,l=h):(d=o.toId,h=i.id,l=d),void 0===e[l]&&c.push({edge:o,fromId:h,toId:d}))}for(var v=[],g=0;g<c.length;g++){var y=c[g],m=y.edge,b=function(e){for(var t=0;t<v.length;t++){var i=v[t],n=e.fromId===i.fromId&&e.toId===i.toId,o=e.fromId===i.toId&&e.toId===i.fromId;if(n||o)return i}return null}(y);null===b?(b=this._createClusteredEdge(y.fromId,y.toId,m,n),v.push(b)):b.clusteringEdgeReplacingIds.push(m.id),this.body.edges[m.id].edgeReplacedById=b.id,this._backupEdgeOptions(m),m.setOptions({physics:!1})}}},{key:"_checkOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===e.clusterEdgeProperties&&(e.clusterEdgeProperties={}),void 0===e.clusterNodeProperties&&(e.clusterNodeProperties={}),e}},{key:"_cluster",value:function(e,t,i){var n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=[];for(var r in e)e.hasOwnProperty(r)&&void 0!==this.clusteredNodes[r]&&o.push(r);for(var a=0;a<o.length;++a)delete e[o[a]];if(0!=(0,s.default)(e).length&&(1!=(0,s.default)(e).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var d=c.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var h=[];for(var l in e)if(e.hasOwnProperty(l)){var u=f.cloneOptions(e[l]);h.push(u)}var v=[];for(var g in t)if(t.hasOwnProperty(g)&&"clusterEdge:"!==g.substr(0,12)){var y=f.cloneOptions(t[g],"edge");v.push(y)}if(!(d=i.processProperties(d,h,v)))throw new Error("The processProperties function does not return properties!")}void 0===d.id&&(d.id="cluster:"+c.randomUUID());var m=d.id;void 0===d.label&&(d.label="cluster");var b=void 0;void 0===d.x&&(b=this._getClusterPosition(e),d.x=b.x),void 0===d.y&&(void 0===b&&(b=this._getClusterPosition(e)),d.y=b.y),d.id=m;var _=this.body.functions.createNode(d,p);_.containedNodes=e,_.containedEdges=t,_.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[d.id]=_,this._clusterEdges(e,t,d,i.clusterEdgeProperties),d.id=void 0,!0===n&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(e){void 0===this.clusteredEdges[e.id]&&(this.clusteredEdges[e.id]={physics:e.options.physics})}},{key:"_restoreEdge",value:function(e){var t=this.clusteredEdges[e.id];void 0!==t&&(e.setOptions({physics:t.physics}),delete this.clusteredEdges[e.id])}},{key:"isCluster",value:function(e){return void 0!==this.body.nodes[e]?!0===this.body.nodes[e].isCluster:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(e){for(var t=(0,s.default)(e),i=e[t[0]].x,n=e[t[0]].x,o=e[t[0]].y,r=e[t[0]].y,a=void 0,d=1;d<t.length;d++)a=e[t[d]],i=a.x<i?a.x:i,n=a.x>n?a.x:n,o=a.y<o?a.y:o,r=a.y>r?a.y:r;return{x:.5*(i+n),y:.5*(o+r)}}},{key:"openCluster",value:function(e,t){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===e)throw new Error("No clusterNodeId supplied to openCluster.");var n=this.body.nodes[e];if(void 0===n)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==n.isCluster||void 0===n.containedNodes||void 0===n.containedEdges)throw new Error("The node:"+e+" is not a valid cluster.");var o=this.findNode(e),s=o.indexOf(e)-1;if(s>=0){var r=o[s];return this.body.nodes[r]._openChildCluster(e),delete this.body.nodes[e],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=n.containedNodes,d=n.containedEdges;if(void 0!==t&&void 0!==t.releaseFunction&&"function"==typeof t.releaseFunction){var h={},l={x:n.x,y:n.y};for(var u in a)if(a.hasOwnProperty(u)){var f=this.body.nodes[u];h[u]={x:f.x,y:f.y}}var p=t.releaseFunction(l,h);for(var v in a)if(a.hasOwnProperty(v)){var g=this.body.nodes[v];void 0!==p[v]&&(g.x=void 0===p[v].x?n.x:p[v].x,g.y=void 0===p[v].y?n.y:p[v].y)}}else c.forEach(a,function(e){!1===e.options.fixed.x&&(e.x=n.x),!1===e.options.fixed.y&&(e.y=n.y)});for(var y in a)if(a.hasOwnProperty(y)){var m=this.body.nodes[y];m.vx=n.vx,m.vy=n.vy,m.setOptions({physics:!0}),delete this.clusteredNodes[y]}for(var b=[],_=0;_<n.edges.length;_++)b.push(n.edges[_]);for(var w=0;w<b.length;w++){for(var k=b[w],x=this._getConnectedId(k,e),O=this.clusteredNodes[x],M=0;M<k.clusteringEdgeReplacingIds.length;M++){var E=k.clusteringEdgeReplacingIds[M],S=this.body.edges[E];if(void 0!==S)if(void 0!==O){var D=this.body.nodes[O.clusterId];D.containedEdges[S.id]=S,delete d[S.id];var C=S.fromId,T=S.toId;S.toId==x?T=O.clusterId:C=O.clusterId,this._createClusteredEdge(C,T,S,D.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(S)}k.remove()}for(var P in d)d.hasOwnProperty(P)&&this._restoreEdge(d[P]);delete this.body.nodes[e],!0===i&&this.body.emitter.emit("_dataChanged")}},{key:"getNodesInCluster",value:function(e){var t=[];if(!0===this.isCluster(e)){var i=this.body.nodes[e].containedNodes;for(var n in i)i.hasOwnProperty(n)&&t.push(this.body.nodes[n].id)}return t}},{key:"findNode",value:function(e){for(var t=[],i=0,n=void 0;void 0!==this.clusteredNodes[e]&&i<100;){if(void 0===(n=this.body.nodes[e]))return[];t.push(n.id),e=this.clusteredNodes[e].clusterId,i++}return void 0===(n=this.body.nodes[e])?[]:(t.push(n.id),t.reverse(),t)}},{key:"updateClusteredNode",value:function(e,t){if(void 0===e)throw new Error("No clusteredNodeId supplied to updateClusteredNode.");if(void 0===t)throw new Error("No newOptions supplied to updateClusteredNode.");if(void 0===this.body.nodes[e])throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist.");this.body.nodes[e].setOptions(t),this.body.emitter.emit("_dataChanged")}},{key:"updateEdge",value:function(e,t){if(void 0===e)throw new Error("No startEdgeId supplied to updateEdge.");if(void 0===t)throw new Error("No newOptions supplied to updateEdge.");if(void 0===this.body.edges[e])throw new Error("The startEdgeId supplied to updateEdge does not exist.");for(var i=this.getClusteredEdges(e),n=0;n<i.length;n++){this.body.edges[i[n]].setOptions(t)}this.body.emitter.emit("_dataChanged")}},{key:"getClusteredEdges",value:function(e){for(var t=[],i=0;void 0!==e&&void 0!==this.body.edges[e]&&i<100;)t.push(this.body.edges[e].id),e=this.body.edges[e].edgeReplacedById,i++;return t.reverse(),t}},{key:"getBaseEdge",value:function(e){return this.getBaseEdges(e)[0]}},{key:"getBaseEdges",value:function(e){for(var t=[e],i=[],n=[],o=0;t.length>0&&o<100;){var s=t.pop();if(void 0!==s){var r=this.body.edges[s];if(void 0!==r){o++;var a=r.clusteringEdgeReplacingIds;if(void 0===a)n.push(s);else for(var d=0;d<a.length;++d){var h=a[d];-1===t.indexOf(a)&&-1===i.indexOf(a)&&t.push(h)}i.push(s)}}}return n}},{key:"_getConnectedId",value:function(e,t){return e.toId!=t?e.toId:(e.fromId,e.fromId)}},{key:"_getHubSize",value:function(){for(var e=0,t=0,i=0,n=0,o=0;o<this.body.nodeIndices.length;o++){var s=this.body.nodes[this.body.nodeIndices[o]];s.edges.length>n&&(n=s.edges.length),e+=s.edges.length,t+=Math.pow(s.edges.length,2),i+=1}e/=i,t/=i;var r=t-Math.pow(e,2),a=Math.sqrt(r),d=Math.floor(e+2*a);return d>n&&(d=n),d}},{key:"_createClusteredEdge",value:function(e,t,i,n,o){var s=f.cloneOptions(i,"edge");c.deepExtend(s,n),s.from=e,s.to=t,s.id="clusterEdge:"+c.randomUUID(),void 0!==o&&c.deepExtend(s,o);var r=this.body.functions.createEdge(s);return r.clusteringEdgeReplacingIds=[i.id],r.connect(),this.body.edges[r.id]=r,r}},{key:"_clusterEdges",value:function(e,t,i,n){if(t instanceof v){var o=t,s={};s[o.id]=o,t=s}if(e instanceof g){var r=e,a={};a[r.id]=r,e=a}if(void 0===i||null===i)throw new Error("_clusterEdges: parameter clusterNode required");void 0===n&&(n=i.clusterEdgeProperties),this._createClusterEdges(e,t,i,n);for(var d in t)if(t.hasOwnProperty(d)&&void 0!==this.body.edges[d]){var h=this.body.edges[d];this._backupEdgeOptions(h),h.setOptions({physics:!1})}for(var l in e)e.hasOwnProperty(l)&&(this.clusteredNodes[l]={clusterId:i.id,node:this.body.nodes[l]},this.body.nodes[l].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(e){if(void 0!==e){var t=this.clusteredNodes[e];if(void 0!==t){var i=t.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(e,t){var i=[];return c.forEach(e,function(e){t(e)&&i.push(e)}),i}},{key:"_updateState",value:function(){var e=this,t=void 0,i=[],n=[],o=function(t){c.forEach(e.body.nodes,function(e){!0===e.isCluster&&t(e)})};for(t in this.clusteredNodes)if(this.clusteredNodes.hasOwnProperty(t)){var r=this.body.nodes[t];void 0===r&&i.push(t)}o(function(e){for(var t=0;t<i.length;t++)delete e.containedNodes[i[t]]});for(var a=0;a<i.length;a++)delete this.clusteredNodes[i[a]];c.forEach(this.clusteredEdges,function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()||n.push(t)}),o(function(e){c.forEach(e.containedEdges,function(e,t){e.endPointsValid()||-1!==n.indexOf(t)||n.push(t)})}),c.forEach(this.body.edges,function(t,i){var o=!0,s=t.clusteringEdgeReplacingIds;if(void 0!==s){var r=0;c.forEach(s,function(t){var i=e.body.edges[t];void 0!==i&&i.endPointsValid()&&(r+=1)}),o=r>0}t.endPointsValid()&&o||n.push(i)}),o(function(t){c.forEach(n,function(i){delete t.containedEdges[i],c.forEach(t.edges,function(o,s){if(o.id===i)return void(t.edges[s]=null);o.clusteringEdgeReplacingIds=e._filter(o.clusteringEdgeReplacingIds,function(e){return-1===n.indexOf(e)})}),t.edges=e._filter(t.edges,function(e){return null!==e})})}),c.forEach(n,function(t){delete e.clusteredEdges[t]}),c.forEach(n,function(t){delete e.body.edges[t]});var d=(0,s.default)(this.body.edges);c.forEach(d,function(t){var i=e.body.edges[t],n=e._isClusteredNode(i.fromId)||e._isClusteredNode(i.toId);if(n!==e._isClusteredEdge(i.id)){if(!n)throw new Error("remove edge from clustering not implemented!");var o=e._getClusterNodeForNode(i.fromId);void 0!==o&&e._clusterEdges(e.body.nodes[i.fromId],i,o);var s=e._getClusterNodeForNode(i.toId);void 0!==s&&e._clusterEdges(e.body.nodes[i.toId],i,s)}});for(var h=!1,l=!0;l;)!function(){var t=[];o(function(e){var i=(0,s.default)(e.containedNodes).length,n=!0===e.options.allowSingleNodeCluster;(n&&i<1||!n&&i<2)&&t.push(e.id)});for(var i=0;i<t.length;++i)e.openCluster(t[i],{},!1);l=t.length>0,h=h||l}();h&&this._updateState()}},{key:"_isClusteredNode",value:function(e){return void 0!==this.clusteredNodes[e]}},{key:"_isClusteredEdge",value:function(e){return void 0!==this.clusteredEdges[e]}}]),e}();t.default=y},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(2),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(3),u=n(l),c=i(4),f=n(c),p=i(5),v=i(33).default,g=function(e){function t(e,i,n,o,r,d){(0,a.default)(this,t);var h=(0,u.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,i,n,o,r,d));return h.isCluster=!0,h.containedNodes={},h.containedEdges={},h}return(0,f.default)(t,e),(0,h.default)(t,[{key:"_openChildCluster",value:function(e){var t=this,i=this.body.nodes[e];if(void 0===this.containedNodes[e])throw new Error("node with id: "+e+" not in current cluster");if(!i.isCluster)throw new Error("node with id: "+e+" is not a cluster");delete this.containedNodes[e],p.forEach(i.edges,function(e){delete t.containedEdges[e.id]}),p.forEach(i.containedNodes,function(e,i){t.containedNodes[i]=e}),i.containedNodes={},p.forEach(i.containedEdges,function(e,i){t.containedEdges[i]=e}),i.containedEdges={},p.forEach(i.edges,function(e){p.forEach(t.edges,function(i){var n=i.clusteringEdgeReplacingIds.indexOf(e.id);-1!==n&&(p.forEach(e.clusteringEdgeReplacingIds,function(e){i.clusteringEdgeReplacingIds.push(e),t.body.edges[e].edgeReplacedById=i.id}),i.clusteringEdgeReplacingIds.splice(n,1))})}),i.edges=[]}}]),t}(v);t.default=g},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}function o(){var e;void 0!==window&&(e=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===e?function(e){e()}:e}Object.defineProperty(t,"__esModule",{value:!0});var s=i(0),r=n(s),a=i(1),d=n(a),h=i(5),l=function(){function e(t,i){(0,r.default)(this,e),o(),this.body=t,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideNodesOnDrag:!1},h.extend(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return(0,d.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("dragStart",function(){e.dragging=!0}),this.body.emitter.on("dragEnd",function(){e.dragging=!1}),this.body.emitter.on("_resizeNodes",function(){e._resizeNodes()}),this.body.emitter.on("_redraw",function(){!1===e.renderingActive&&e._redraw()}),this.body.emitter.on("_blockRedraw",function(){e.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){e.allowRedraw=!0,e.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",this._requestRedraw.bind(this)),this.body.emitter.on("_startRendering",function(){e.renderRequests+=1,e.renderingActive=!0,e._startRendering()}),this.body.emitter.on("_stopRendering",function(){e.renderRequests-=1,e.renderingActive=e.renderRequests>0,e.renderTimer=void 0}),this.body.emitter.on("destroy",function(){e.renderRequests=0,e.allowRedraw=!1,e.renderingActive=!1,!0===e.requiresTimeout?clearTimeout(e.renderTimer):window.cancelAnimationFrame(e.renderTimer),e.body.emitter.off()})}},{key:"setOptions",value:function(e){if(void 0!==e){var t=["hideEdgesOnDrag","hideNodesOnDrag"];h.selectiveDeepExtend(t,this.options,e)}}},{key:"_requestNextFrame",value:function(e,t){if("undefined"!=typeof window){var i=void 0,n=window;return!0===this.requiresTimeout?i=n.setTimeout(e,t):n.requestAnimationFrame&&(i=n.requestAnimationFrame(e)),i}}},{key:"_startRendering",value:function(){!0===this.renderingActive&&void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(this._renderStep.bind(this),this.simulationInterval))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var e=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame(function(){e._redraw(!1)},0))}},{key:"_redraw",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1,0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var t=this.canvas.getContext(),i=this.canvas.frame.canvas.clientWidth,n=this.canvas.frame.canvas.clientHeight;if(t.clearRect(0,0,i,n),0===this.canvas.frame.clientWidth)return;t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale),t.beginPath(),this.body.emitter.emit("beforeDrawing",t),t.closePath(),!1===e&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&this._drawEdges(t),(!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag)&&this._drawNodes(t,e),t.beginPath(),this.body.emitter.emit("afterDrawing",t),t.closePath(),t.restore(),!0===e&&t.clearRect(0,0,i,n)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var e=this.canvas.getContext();e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale);var t=this.body.nodes,i=void 0;for(var n in t)t.hasOwnProperty(n)&&(i=t[n],i.resize(e),i.updateBoundingBox(e,i.selected));e.restore()}},{key:"_drawNodes",value:function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,n=this.body.nodeIndices,o=void 0,s=[],r=this.canvas.DOMtoCanvas({x:-20,y:-20}),a=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),d={top:r.y,left:r.x,bottom:a.y,right:a.x},h=0;h<n.length;h++)o=i[n[h]],o.isSelected()?s.push(n[h]):!0===t?o.draw(e):!0===o.isBoundingBoxOverlappingWith(d)?o.draw(e):o.updateBoundingBox(e,o.selected);for(var l=0;l<s.length;l++)o=i[s[l]],o.draw(e)}},{key:"_drawEdges",value:function(e){for(var t=this.body.edges,i=this.body.edgeIndices,n=void 0,o=0;o<i.length;o++)n=t[i[o]],!0===n.connected&&n.draw(e)}},{key:"_determineBrowserMethod",value:function(){if("undefined"!=typeof window){var e=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,-1!=e.indexOf("msie 9.0")?this.requiresTimeout=!0:-1!=e.indexOf("safari")&&e.indexOf("chrome")<=-1&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}}]),e}();t.default=l},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(22),h=i(35),l=i(5),u=function(){function e(t){(0,s.default)(this,e),this.body=t,this.pixelRatio=1,this.resizeTimer=void 0,this.resizeFunction=this._onResize.bind(this),this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this.options={},this.defaultOptions={autoResize:!0,height:"100%",width:"100%"},l.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.once("resize",function(t){0!==t.width&&(e.body.view.translation.x=.5*t.width),0!==t.height&&(e.body.view.translation.y=.5*t.height)}),this.body.emitter.on("setSize",this.setSize.bind(this)),this.body.emitter.on("destroy",function(){e.hammerFrame.destroy(),e.hammer.destroy(),e._cleanUp()})}},{key:"setOptions",value:function(e){var t=this;if(void 0!==e){var i=["width","height","autoResize"];l.selectiveDeepExtend(i,this.options,e)}!0===this.options.autoResize&&(this._cleanUp(),this.resizeTimer=setInterval(function(){!0===t.setSize()&&t.body.emitter.emit("_requestRedraw")},1e3),this.resizeFunction=this._onResize.bind(this),l.addEventListener(window,"resize",this.resizeFunction))}},{key:"_cleanUp",value:function(){void 0!==this.resizeTimer&&clearInterval(this.resizeTimer),l.removeEventListener(window,"resize",this.resizeFunction),this.resizeFunction=void 0}},{key:"_onResize",value:function(){this.setSize(),this.body.emitter.emit("_redraw")}},{key:"_getCameraState",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/e,this.cameraState.previousHeight=this.frame.canvas.height/e,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/e,y:.5*this.frame.canvas.height/e}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var e=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,t=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=e&&1!=t?i=.5*this.cameraState.scale*(e+t):1!=e?i=this.cameraState.scale*e:1!=t&&(i=this.cameraState.scale*t),this.body.view.scale=i;var n=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),o={x:n.x-this.cameraState.position.x,y:n.y-this.cameraState.position.y};this.body.view.translation.x+=o.x*this.body.view.scale,this.body.view.translation.y+=o.y*this.body.view.scale}}},{key:"_prepareValue",value:function(e){if("number"==typeof e)return e+"px";if("string"==typeof e){if(-1!==e.indexOf("%")||-1!==e.indexOf("px"))return e;if(-1===e.indexOf("%"))return e+"px"}throw new Error("Could not use the value supplied for width or height:"+e)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(e)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var e=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new d(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_ALL}),h.onTouch(this.hammer,function(t){e.body.eventListeners.onTouch(t)}),this.hammer.on("tap",function(t){e.body.eventListeners.onTap(t)}),this.hammer.on("doubletap",function(t){e.body.eventListeners.onDoubleTap(t)}),this.hammer.on("press",function(t){e.body.eventListeners.onHold(t)}),this.hammer.on("panstart",function(t){e.body.eventListeners.onDragStart(t)}),this.hammer.on("panmove",function(t){e.body.eventListeners.onDrag(t)}),this.hammer.on("panend",function(t){e.body.eventListeners.onDragEnd(t)}),this.hammer.on("pinch",function(t){e.body.eventListeners.onPinch(t)}),this.frame.canvas.addEventListener("mousewheel",function(t){e.body.eventListeners.onMouseWheel(t)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(t){e.body.eventListeners.onMouseWheel(t)}),this.frame.canvas.addEventListener("mousemove",function(t){e.body.eventListeners.onMouseMove(t)}),this.frame.canvas.addEventListener("contextmenu",function(t){e.body.eventListeners.onContext(t)}),this.hammerFrame=new d(this.frame),h.onRelease(this.hammerFrame,function(t){e.body.eventListeners.onRelease(t)})}},{key:"setSize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;e=this._prepareValue(e),t=this._prepareValue(t);var i=!1,n=this.frame.canvas.width,o=this.frame.canvas.height,s=this.pixelRatio;if(this._setPixelRatio(),e!=this.options.width||t!=this.options.height||this.frame.style.width!=e||this.frame.style.height!=t)this._getCameraState(s),this.frame.style.width=e,this.frame.style.height=t,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=e,this.options.height=t,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var r=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio);this.frame.canvas.width===r&&this.frame.canvas.height===a||this._getCameraState(s),this.frame.canvas.width!==r&&(this.frame.canvas.width=r,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(n/this.pixelRatio),oldHeight:Math.round(o/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var e=this.getContext();if(void 0===e)throw new Error("Could not get canvax context");var t=1;return"undefined"!=typeof window&&(t=window.devicePixelRatio||1),t/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var e=this.getContext();if(void 0===e)throw new Error("Could not get canvax context");e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(e){return(e-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(e){return e*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(e){return(e-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(e){return e*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(e){return{x:this._XconvertCanvasToDOM(e.x),y:this._YconvertCanvasToDOM(e.y)}}},{key:"DOMtoCanvas",value:function(e){return{x:this._XconvertDOMtoCanvas(e.x),y:this._YconvertDOMtoCanvas(e.y)}}}]),e}();t.default=u},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=i(57).default,l=function(){function e(t,i){var n=this;(0,s.default)(this,e),this.body=t,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){n.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(e,[{key:"setOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=e}},{key:"fit",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,n=void 0;if(void 0!==e.nodes&&0!==e.nodes.length||(e.nodes=this.body.nodeIndices),!0===t){var o=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];!0===r.predefinedPosition&&(o+=1)}if(o>.5*this.body.nodeIndices.length)return void this.fit(e,!1);i=h.getRange(this.body.nodes,e.nodes);n=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;n*=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600)}else{this.body.emitter.emit("_resizeNodes"),i=h.getRange(this.body.nodes,e.nodes);var a=1.1*Math.abs(i.maxX-i.minX),d=1.1*Math.abs(i.maxY-i.minY),l=this.canvas.frame.canvas.clientWidth/a,u=this.canvas.frame.canvas.clientHeight/d;n=l<=u?l:u}n>1?n=1:0===n&&(n=1);var c=h.findCenter(i),f={position:c,scale:n,animation:e.animation};this.moveTo(f)}},{key:"focus",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[e]){var i={x:this.body.nodes[e].x,y:this.body.nodes[e].y};t.position=i,t.lockedOnNode=e,this.moveTo(t)}else console.log("Node: "+e+" cannot be found.")}},{key:"moveTo",value:function(e){if(void 0===e)return void(e={});void 0===e.offset&&(e.offset={x:0,y:0}),void 0===e.offset.x&&(e.offset.x=0),void 0===e.offset.y&&(e.offset.y=0),void 0===e.scale&&(e.scale=this.body.view.scale),void 0===e.position&&(e.position=this.getViewPosition()),void 0===e.animation&&(e.animation={duration:0}),!1===e.animation&&(e.animation={duration:0}),!0===e.animation&&(e.animation={}),void 0===e.animation.duration&&(e.animation.duration=1e3),void 0===e.animation.easingFunction&&(e.animation.easingFunction="easeInOutQuad"),this.animateView(e)}},{key:"animateView",value:function(e){if(void 0!==e){this.animationEasingFunction=e.animation.easingFunction,this.releaseNode(),!0===e.locked&&(this.lockedOnNodeId=e.lockedOnNode,this.lockedOnNodeOffset=e.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=e.scale,this.body.view.scale=this.targetScale;var t=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:t.x-e.position.x,y:t.y-e.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+e.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+e.offset.y},0===e.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*e.animation.duration*.001)||1/60,this.animationEasingFunction=e.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var e={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},t=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:t.x-e.x,y:t.y-e.y},n=this.body.view.translation,o={x:n.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:n.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=o}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===e?1:this.easingTime;var t=d.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*t,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*t,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*t},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),e}();t.default=l},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(5),h=i(182).default,l=i(183).default,u=function(){function e(t,i,n){(0,s.default)(this,e),this.body=t,this.canvas=i,this.selectionHandler=n,this.navigationHandler=new h(t,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},d.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("destroy",function(){clearTimeout(e.popupTimer),delete e.body.functions.getPointer})}},{key:"setOptions",value:function(e){if(void 0!==e){var t=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];d.selectiveNotDeepExtend(t,this.options,e),d.mergeOptions(this.options,e,"keyboard"),e.tooltip&&(d.extend(this.options.tooltip,e.tooltip),e.tooltip.color&&(this.options.tooltip.color=d.parseColor(e.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(e){return{x:e.x-d.getAbsoluteLeft(this.canvas.frame.canvas),y:e.y-d.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(e){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(e.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(e){var t=this.getPointer(e.center),i=this.selectionHandler.options.multiselect&&(e.changedPointers[0].ctrlKey||e.changedPointers[0].metaKey);this.checkSelectionChanges(t,e,i),this.selectionHandler._generateClickEvent("click",e,t)}},{key:"onDoubleTap",value:function(e){var t=this.getPointer(e.center);this.selectionHandler._generateClickEvent("doubleClick",e,t)}},{key:"onHold",value:function(e){var t=this.getPointer(e.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(t,e,i),this.selectionHandler._generateClickEvent("click",e,t),this.selectionHandler._generateClickEvent("hold",e,t)}},{key:"onRelease",value:function(e){if((new Date).valueOf()-this.touchTime>10){var t=this.getPointer(e.center);this.selectionHandler._generateClickEvent("release",e,t),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(e){var t=this.getPointer({x:e.clientX,y:e.clientY});this.selectionHandler._generateClickEvent("oncontext",e,t)}},{key:"checkSelectionChanges",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.selectionHandler.getSelection(),o=!1;o=!0===i?this.selectionHandler.selectAdditionalOnPoint(e):this.selectionHandler.selectOnPoint(e);var s=this.selectionHandler.getSelection(),r=this._determineDifference(n,s),a=this._determineDifference(s,n);r.edges.length>0&&(this.selectionHandler._generateClickEvent("deselectEdge",t,e,n),o=!0),r.nodes.length>0&&(this.selectionHandler._generateClickEvent("deselectNode",t,e,n),o=!0),a.nodes.length>0&&(this.selectionHandler._generateClickEvent("selectNode",t,e),o=!0),a.edges.length>0&&(this.selectionHandler._generateClickEvent("selectEdge",t,e),o=!0),!0===o&&this.selectionHandler._generateClickEvent("select",t,e)}},{key:"_determineDifference",value:function(e,t){var i=function(e,t){for(var i=[],n=0;n<e.length;n++){var o=e[n];-1===t.indexOf(o)&&i.push(o)}return i};return{nodes:i(e.nodes,t.nodes),edges:i(e.edges,t.edges)}}},{key:"onDragStart",value:function(e){void 0===this.drag.pointer&&this.onTouch(e);var t=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=d.extend({},this.body.view.translation),this.drag.nodeId=void 0,void 0!==t&&!0===this.options.dragNodes){this.drag.nodeId=t.id,!1===t.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(t)),this.selectionHandler._generateClickEvent("dragStart",e,this.drag.pointer);var i=this.selectionHandler.selectionObj.nodes;for(var n in i)if(i.hasOwnProperty(n)){var o=i[n],s={id:o.id,node:o,x:o.x,y:o.y,xFixed:o.options.fixed.x,yFixed:o.options.fixed.y};o.options.fixed.x=!0,o.options.fixed.y=!0,this.drag.selection.push(s)}}else this.selectionHandler._generateClickEvent("dragStart",e,this.drag.pointer,void 0,!0)}},{key:"onDrag",value:function(e){var t=this;if(!0!==this.drag.pinched){this.body.emitter.emit("unlockNode");var i=this.getPointer(e.center),n=this.drag.selection;if(n&&n.length&&!0===this.options.dragNodes){this.selectionHandler._generateClickEvent("dragging",e,i);var o=i.x-this.drag.pointer.x,s=i.y-this.drag.pointer.y;n.forEach(function(e){var i=e.node;!1===e.xFixed&&(i.x=t.canvas._XconvertDOMtoCanvas(t.canvas._XconvertCanvasToDOM(e.x)+o)),!1===e.yFixed&&(i.y=t.canvas._YconvertDOMtoCanvas(t.canvas._YconvertCanvasToDOM(e.y)+s))}),this.body.emitter.emit("startSimulation")}else if(!0===this.options.dragView){if(this.selectionHandler._generateClickEvent("dragging",e,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(e);var r=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+r,y:this.drag.translation.y+a},this.body.emitter.emit("_requestRedraw")}}}},{key:"onDragEnd",value:function(e){this.drag.dragging=!1;var t=this.drag.selection;t&&t.length?(t.forEach(function(e){e.node.options.fixed.x=e.xFixed,e.node.options.fixed.y=e.yFixed}),this.selectionHandler._generateClickEvent("dragEnd",e,this.getPointer(e.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler._generateClickEvent("dragEnd",e,this.getPointer(e.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}},{key:"onPinch",value:function(e){var t=this.getPointer(e.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*e.scale;this.zoom(i,t)}},{key:"zoom",value:function(e,t){if(!0===this.options.zoomView){var i=this.body.view.scale;e<1e-5&&(e=1e-5),e>10&&(e=10);var n=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(n=this.canvas.DOMtoCanvas(this.drag.pointer));var o=this.body.view.translation,s=e/i,r=(1-s)*t.x+o.x*s,a=(1-s)*t.y+o.y*s;if(this.body.view.scale=e,this.body.view.translation={x:r,y:a},void 0!=n){var d=this.canvas.canvasToDOM(n);this.drag.pointer.x=d.x,this.drag.pointer.y=d.y}this.body.emitter.emit("_requestRedraw"),i<e?this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:t}):this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:t})}}},{key:"onMouseWheel",value:function(e){if(!0===this.options.zoomView){var t=0;if(e.wheelDelta?t=e.wheelDelta/120:e.detail&&(t=-e.detail/3),0!==t){var i=this.body.view.scale,n=t/10;t<0&&(n/=1-n),i*=1+n;var o=this.getPointer({x:e.clientX,y:e.clientY});this.zoom(i,o)}e.preventDefault()}}},{key:"onMouseMove",value:function(e){var t=this,i=this.getPointer({x:e.clientX,y:e.clientY}),n=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(n=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===n&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=setTimeout(function(){return t._checkShowPopup(i)},this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(e,i)}},{key:"_checkShowPopup",value:function(e){var t=this.canvas._XconvertDOMtoCanvas(e.x),i=this.canvas._YconvertDOMtoCanvas(e.y),n={left:t,top:i,right:t,bottom:i},o=void 0===this.popupObj?void 0:this.popupObj.id,s=!1,r="node";if(void 0===this.popupObj){for(var a=this.body.nodeIndices,d=this.body.nodes,h=void 0,u=[],c=0;c<a.length;c++)h=d[a[c]],!0===h.isOverlappingWith(n)&&void 0!==h.getTitle()&&u.push(a[c]);u.length>0&&(this.popupObj=d[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&!1===s){for(var f=this.body.edgeIndices,p=this.body.edges,v=void 0,g=[],y=0;y<f.length;y++)v=p[f[y]],!0===v.isOverlappingWith(n)&&!0===v.connected&&void 0!==v.getTitle()&&g.push(f[y]);g.length>0&&(this.popupObj=p[g[g.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==o&&(void 0===this.popup&&(this.popup=new l(this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(e.x+3,e.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(e){var t=this.selectionHandler._pointerToPositionObject(e),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(t))){var n=this.selectionHandler.getNodeAt(e);i=void 0!==n&&n.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(e)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(t));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),e}();t.default=u},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(22),h=i(35),l=i(52),u=function(){function e(t,i){var n=this;(0,s.default)(this,e),this.body=t,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){n.activated=!0,n.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){n.activated=!1,n.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==n.keycharm&&n.keycharm.destroy()}),this.options={}}return(0,a.default)(e,[{key:"setOptions",value:function(e){void 0!==e&&(this.options=e,this.create())}},{key:"create",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var e=0;e<this.navigationHammers.length;e++)this.navigationHammers[e].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:"loadNavigationElements",value:function(){var e=this;this.cleanNavigation(),this.navigationDOM={};var t=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],i=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","_fit"];this.navigationDOM.wrapper=document.createElement("div"),this.navigationDOM.wrapper.className="vis-navigation",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var n=0;n<t.length;n++){this.navigationDOM[t[n]]=document.createElement("div"),this.navigationDOM[t[n]].className="vis-button vis-"+t[n],this.navigationDOM.wrapper.appendChild(this.navigationDOM[t[n]]);var o=new d(this.navigationDOM[t[n]]);"_fit"===i[n]?h.onTouch(o,this._fit.bind(this)):h.onTouch(o,this.bindToRedraw.bind(this,i[n])),this.navigationHammers.push(o)}var s=new d(this.canvas.frame);h.onRelease(s,function(){e._stopMovement()}),this.navigationHammers.push(s),this.iconsCreated=!0}},{key:"bindToRedraw",value:function(e){void 0===this.boundFunctions[e]&&(this.boundFunctions[e]=this[e].bind(this),this.body.emitter.on("initRedraw",this.boundFunctions[e]),this.body.emitter.emit("_startRendering"))}},{key:"unbindFromRedraw",value:function(e){void 0!==this.boundFunctions[e]&&(this.body.emitter.off("initRedraw",this.boundFunctions[e]),this.body.emitter.emit("_stopRendering"),delete this.boundFunctions[e])}},{key:"_fit",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var e in this.boundFunctions)this.boundFunctions.hasOwnProperty(e)&&(this.body.emitter.off("initRedraw",this.boundFunctions[e]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var e=this.body.view.scale,t=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=t/e,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,s=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=t,this.body.view.translation={x:o,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var e=this.body.view.scale,t=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,n=t/e,o=(1-n)*this.canvas.canvasViewCenter.x+i.x*n,s=(1-n)*this.canvas.canvasViewCenter.y+i.y*n;this.body.view.scale=t,this.body.view.translation={x:o,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var e=this;void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled&&(!0===this.options.keyboard.bindToWindow?this.keycharm=l({container:window,preventDefault:!0}):this.keycharm=l({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(this.keycharm.bind("up",function(){e.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){e.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){e.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){e.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){e.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){e.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){e.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){e.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){e.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){e.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){e.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){e.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){e.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){e.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){e.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){e.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){e.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){e.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){e.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){e.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){e.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){e.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){e.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){e.unbindFromRedraw("_zoomOut")},"keyup")))}}]),e}();t.default=u},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(t,i){(0,s.default)(this,e),this.container=t,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(e,[{key:"setPosition",value:function(e,t){this.x=parseInt(e),this.y=parseInt(t)}},{key:"setText",value:function(e){e instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(e)):this.frame.innerHTML=e}},{key:"show",value:function(e){if(void 0===e&&(e=!0),!0===e){var t=this.frame.clientHeight,i=this.frame.clientWidth,n=this.frame.parentNode.clientHeight,o=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,d=!0;this.y-t<this.padding&&(d=!1),this.x+i>o-this.padding&&(a=!0),s=a?this.x-i:this.x,r=d?this.y-t:this.y}else r=this.y-t,r+t+this.padding>n&&(r=n-t-this.padding),r<this.padding&&(r=this.padding),s=this.x,s+i+this.padding>o&&(s=o-i-this.padding),s<this.padding&&(s=this.padding);this.frame.style.left=s+"px",this.frame.style.top=r+"px",this.frame.style.visibility="visible",this.hidden=!1}else this.hide()}},{key:"hide",value:function(){this.hidden=!0,this.frame.style.left="0",this.frame.style.top="0",this.frame.style.visibility="hidden"}},{key:"destroy",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),e}();t.default=d},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=i(33).default,h=i(55).default,l=i(5),u=function(){function e(t,i){var n=this;(0,s.default)(this,e),this.body=t,this.canvas=i,this.selectionObj={nodes:[],edges:[]},this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},l.extend(this.options,this.defaultOptions),this.body.emitter.on("_dataChanged",function(){n.updateSelection()})}return(0,a.default)(e,[{key:"setOptions",value:function(e){if(void 0!==e){var t=["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"];l.selectiveDeepExtend(t,this.options,e)}}},{key:"selectOnPoint",value:function(e){var t=!1;if(!0===this.options.selectable){var i=this.getNodeAt(e)||this.getEdgeAt(e);this.unselectAll(),void 0!==i&&(t=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return t}},{key:"selectAdditionalOnPoint",value:function(e){var t=!1;if(!0===this.options.selectable){var i=this.getNodeAt(e)||this.getEdgeAt(e);void 0!==i&&(t=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return t}},{key:"_initBaseEvent",value:function(e,t){var i={};return i.pointer={DOM:{x:t.x,y:t.y},canvas:this.canvas.DOMtoCanvas(t)},i.event=e,i}},{key:"_generateClickEvent",value:function(e,t,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=this._initBaseEvent(t,i);if(!0===o)s.nodes=[],s.edges=[];else{var r=this.getSelection();s.nodes=r.nodes,s.edges=r.edges}void 0!==n&&(s.previousSelection=n),"click"==e&&(s.items=this.getClickedItems(i)),this.body.emitter.emit(e,s)}},{key:"selectObject",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==e&&(e instanceof d&&!0===t&&this._selectConnectedEdges(e),e.select(),this._addToSelection(e),!0)}},{key:"deselectObject",value:function(e){!0===e.isSelected()&&(e.selected=!1,this._removeFromSelection(e))}},{key:"_getAllNodesOverlappingWith",value:function(e){for(var t=[],i=this.body.nodes,n=0;n<this.body.nodeIndices.length;n++){var o=this.body.nodeIndices[n];i[o].isOverlappingWith(e)&&t.push(o)}return t}},{key:"_pointerToPositionObject",value:function(e){var t=this.canvas.DOMtoCanvas(e);return{left:t.x-1,top:t.y+1,right:t.x+1,bottom:t.y-1}}},{key:"getNodeAt",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(e),n=this._getAllNodesOverlappingWith(i);return n.length>0?!0===t?this.body.nodes[n[n.length-1]]:n[n.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(e,t){for(var i=this.body.edges,n=0;n<this.body.edgeIndices.length;n++){var o=this.body.edgeIndices[n];i[o].isOverlappingWith(e)&&t.push(o)}}},{key:"_getAllEdgesOverlappingWith",value:function(e){var t=[];return this._getEdgesOverlappingWith(e,t),t}},{key:"getEdgeAt",value:function(e){for(var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(e),n=10,o=null,s=this.body.edges,r=0;r<this.body.edgeIndices.length;r++){var a=this.body.edgeIndices[r],d=s[a];if(d.connected){var h=d.from.x,l=d.from.y,u=d.to.x,c=d.to.y,f=d.edgeType.getDistanceToEdge(h,l,u,c,i.x,i.y);f<n&&(o=a,n=f)}}return null!==o?!0===t?this.body.edges[o]:o:void 0}},{key:"_addToSelection",value:function(e){e instanceof d?this.selectionObj.nodes[e.id]=e:this.selectionObj.edges[e.id]=e}},{key:"_addToHover",value:function(e){e instanceof d?this.hoverObj.nodes[e.id]=e:this.hoverObj.edges[e.id]=e}},{key:"_removeFromSelection",value:function(e){e instanceof d?(delete this.selectionObj.nodes[e.id],this._unselectConnectedEdges(e)):delete this.selectionObj.edges[e.id]}},{key:"unselectAll",value:function(){for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].unselect();for(var t in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(t)&&this.selectionObj.edges[t].unselect();this.selectionObj={nodes:{},edges:{}}}},{key:"_getSelectedNodeCount",value:function(){var e=0;for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(e+=1);return e}},{key:"_getSelectedNode",value:function(){for(var e in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(e))return this.selectionObj.nodes[e]}},{key:"_getSelectedEdge",value:function(){for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return this.selectionObj.edges[e]}},{key:"_getSelectedEdgeCount",value:function(){var e=0;for(var t in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(t)&&(e+=1);return e}},{key:"_getSelectedObjectCount",value:function(){var e=0;for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(e+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(e+=1);return e}},{key:"_selectionIsEmpty",value:function(){for(var e in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(e))return!1;for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return!1;return!0}},{key:"_clusterInSelection",value:function(){for(var e in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(e)&&this.selectionObj.nodes[e].clusterSize>1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(e){for(var t=0;t<e.edges.length;t++){var i=e.edges[t];i.select(),this._addToSelection(i)}}},{key:"_hoverConnectedEdges",value:function(e){for(var t=0;t<e.edges.length;t++){var i=e.edges[t];i.hover=!0,this._addToHover(i)}}},{key:"_unselectConnectedEdges",value:function(e){for(var t=0;t<e.edges.length;t++){var i=e.edges[t];i.unselect(),this._removeFromSelection(i)}}},{key:"emitBlurEvent",value:function(e,t,i){var n=this._initBaseEvent(e,t);!0===i.hover&&(i.hover=!1,i instanceof d?(n.node=i.id,this.body.emitter.emit("blurNode",n)):(n.edge=i.id,this.body.emitter.emit("blurEdge",n)))}},{key:"emitHoverEvent",value:function(e,t,i){var n=this._initBaseEvent(e,t),o=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),o=!0,i instanceof d?(n.node=i.id,this.body.emitter.emit("hoverNode",n)):(n.edge=i.id,this.body.emitter.emit("hoverEdge",n))),o}},{key:"hoverObject",value:function(e,t){var i=this.getNodeAt(t);void 0===i&&(i=this.getEdgeAt(t));var n=!1;for(var o in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(o)&&(void 0===i||i instanceof d&&i.id!=o||i instanceof h)&&(this.emitBlurEvent(e,t,this.hoverObj.nodes[o]),delete this.hoverObj.nodes[o],n=!0);for(var s in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(s)&&(!0===n?(this.hoverObj.edges[s].hover=!1,delete this.hoverObj.edges[s]):(void 0===i||i instanceof h&&i.id!=s||i instanceof d&&!i.hover)&&(this.emitBlurEvent(e,t,this.hoverObj.edges[s]),delete this.hoverObj.edges[s],n=!0));void 0!==i&&(n=n||this.emitHoverEvent(e,t,i),i instanceof d&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)),!0===n&&this.body.emitter.emit("_requestRedraw")}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodes(),edges:this.getSelectedEdges()}}},{key:"getSelectedNodes",value:function(){var e=[];if(!0===this.options.selectable)for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&e.push(this.selectionObj.nodes[t].id);return e}},{key:"getSelectedEdges",value:function(){var e=[];if(!0===this.options.selectable)for(var t in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(t)&&e.push(this.selectionObj.edges[t].id);return e}},{key:"setSelection",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,n=void 0;if(!e||!e.nodes&&!e.edges)throw"Selection must be an object with nodes and/or edges properties";if((t.unselectAll||void 0===t.unselectAll)&&this.unselectAll(),e.nodes)for(i=0;i<e.nodes.length;i++){n=e.nodes[i];var o=this.body.nodes[n];if(!o)throw new RangeError('Node with id "'+n+'" not found');this.selectObject(o,t.highlightEdges)}if(e.edges)for(i=0;i<e.edges.length;i++){n=e.edges[i];var s=this.body.edges[n];if(!s)throw new RangeError('Edge with id "'+n+'" not found');this.selectObject(s)}this.body.emitter.emit("_requestRedraw")}},{key:"selectNodes",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!e||void 0===e.length)throw"Selection must be an array with ids";this.setSelection({nodes:e},{highlightEdges:t})}},{key:"selectEdges",value:function(e){if(!e||void 0===e.length)throw"Selection must be an array with ids";this.setSelection({edges:e})}},{key:"updateSelection",value:function(){for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(this.body.nodes.hasOwnProperty(e)||delete this.selectionObj.nodes[e]);for(var t in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(t)&&(this.body.edges.hasOwnProperty(t)||delete this.selectionObj.edges[t])}},{key:"getClickedItems",value:function(e){for(var t=this.canvas.DOMtoCanvas(e),i=[],n=this.body.nodeIndices,o=this.body.nodes,s=n.length-1;s>=0;s--){var r=o[n[s]],a=r.getItemsOnPoint(t);i.push.apply(i,a)}for(var d=this.body.edgeIndices,h=this.body.edges,l=d.length-1;l>=0;l--){var u=h[d[l]],c=u.getItemsOnPoint(t);i.push.apply(i,c)}return i}}]),e}();t.default=u},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(7),a=n(r),d=i(10),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=i(5),v=i(57).default,g=i(186),y=g.HorizontalStrategy,m=g.VerticalStrategy,b=function(){function e(){(0,u.default)(this,e),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return(0,f.default)(e,[{key:"addRelation",value:function(e,t){void 0===this.childrenReference[e]&&(this.childrenReference[e]=[]),this.childrenReference[e].push(t),void 0===this.parentReference[t]&&(this.parentReference[t]=[]),this.parentReference[t].push(e)}},{key:"checkIfTree",value:function(){for(var e in this.parentReference)if(this.parentReference[e].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(e,t){void 0!==t&&void 0===this.trees[e.id]&&(this.trees[e.id]=t,this.treeIndex=Math.max(t,this.treeIndex))}},{key:"ensureLevel",value:function(e){void 0===this.levels[e]&&(this.levels[e]=0)}},{key:"getMaxLevel",value:function(e){var t=this,i={};return function e(n){if(void 0!==i[n])return i[n];var o=t.levels[n];if(t.childrenReference[n]){var s=t.childrenReference[n];if(s.length>0)for(var r=0;r<s.length;r++)o=Math.max(o,e(s[r]))}return i[n]=o,o}(e)}},{key:"levelDownstream",value:function(e,t){void 0===this.levels[t.id]&&(void 0===this.levels[e.id]&&(this.levels[e.id]=0),this.levels[t.id]=this.levels[e.id]+1)}},{key:"setMinLevelToZero",value:function(e){var t=1e9;for(var i in e)e.hasOwnProperty(i)&&void 0!==this.levels[i]&&(t=Math.min(this.levels[i],t));for(var n in e)e.hasOwnProperty(n)&&void 0!==this.levels[n]&&(this.levels[n]-=t)}},{key:"getTreeSize",value:function(e,t){var i=1e9,n=-1e9,o=1e9,s=-1e9;for(var r in this.trees)if(this.trees.hasOwnProperty(r)&&this.trees[r]===t){var a=e[r];i=Math.min(a.x,i),n=Math.max(a.x,n),o=Math.min(a.y,o),s=Math.max(a.y,s)}return{min_x:i,max_x:n,min_y:o,max_y:s}}},{key:"hasSameParent",value:function(e,t){var i=this.parentReference[e.id],n=this.parentReference[t.id];if(void 0===i||void 0===n)return!1;for(var o=0;o<i.length;o++)for(var s=0;s<n.length;s++)if(i[o]==n[s])return!0;return!1}},{key:"inSameSubNetwork",value:function(e,t){return this.trees[e.id]===this.trees[t.id]}},{key:"getLevels",value:function(){return(0,h.default)(this.distributionOrdering)}},{key:"addToOrdering",value:function(e,t){void 0===this.distributionOrdering[t]&&(this.distributionOrdering[t]=[]);var i=!1,n=this.distributionOrdering[t];for(var o in n)if(n[o]===e){i=!0;break}i||(this.distributionOrdering[t].push(e),this.distributionIndex[e.id]=this.distributionOrdering[t].length-1)}}]),e}(),_=function(){function e(t){(0,u.default)(this,e),this.body=t,this.initialRandomSeed=Math.round(1e6*Math.random()),this.randomSeed=this.initialRandomSeed,this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:"UD",sortMethod:"hubsize"}},p.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,f.default)(e,[{key:"bindEventListeners",value:function(){var e=this;this.body.emitter.on("_dataChanged",function(){e.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",function(){e.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",function(){e.setupHierarchicalLayout()}),this.body.emitter.on("_adjustEdgesForHierarchicalLayout",function(){if(!0===e.options.hierarchical.enabled){var t=e.direction.curveType();e.body.emitter.emit("_forceDisableDynamicCurves",t,!1)}})}},{key:"setOptions",value:function(e,t){if(void 0!==e){var i=this.options.hierarchical,n=i.enabled;if(p.selectiveDeepExtend(["randomSeed","improvedLayout"],this.options,e),p.mergeOptions(this.options,e,"hierarchical"),void 0!==e.randomSeed&&(this.initialRandomSeed=e.randomSeed),!0===i.enabled)return!0===n&&this.body.emitter.emit("refresh",!0),"RL"===i.direction||"DU"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(t);if(!0===n)return this.body.emitter.emit("refresh"),p.deepExtend(t,this.optionsBackup)}return t}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(e){if(!0===this.options.hierarchical.enabled){var t=this.optionsBackup.physics;void 0===e.physics||!0===e.physics?(e.physics={enabled:void 0===t.enabled||t.enabled,solver:"hierarchicalRepulsion"},t.enabled=void 0===t.enabled||t.enabled,t.solver=t.solver||"barnesHut"):"object"===(0,a.default)(e.physics)?(t.enabled=void 0===e.physics.enabled||e.physics.enabled,t.solver=e.physics.solver||"barnesHut",e.physics.solver="hierarchicalRepulsion"):!1!==e.physics&&(t.solver="barnesHut",e.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===e.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},e.edges={smooth:!1};else if(void 0===e.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},e.edges.smooth=!1;else if("boolean"==typeof e.edges.smooth)this.optionsBackup.edges={smooth:e.edges.smooth},e.edges.smooth={enabled:e.edges.smooth,type:i};else{var n=e.edges.smooth;void 0!==n.type&&"dynamic"!==n.type&&(i=n.type),this.optionsBackup.edges={smooth:void 0===n.enabled||n.enabled,type:void 0===n.type?"dynamic":n.type,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection},e.edges.smooth={enabled:void 0===n.enabled||n.enabled,type:i,roundness:void 0===n.roundness?.5:n.roundness,forceDirection:void 0!==n.forceDirection&&n.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return e}},{key:"seededRandom",value:function(){var e=1e4*Math.sin(this.randomSeed++);return e-Math.floor(e)}},{key:"positionInitially",value:function(e){if(!0!==this.options.hierarchical.enabled){this.randomSeed=this.initialRandomSeed;for(var t=e.length+50,i=0;i<e.length;i++){var n=e[i],o=2*Math.PI*this.seededRandom();void 0===n.x&&(n.x=t*Math.cos(o)),void 0===n.y&&(n.y=t*Math.sin(o))}}}},{key:"layoutNetwork",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var e=this.body.nodeIndices,t=0,i=0;i<e.length;i++){!0===this.body.nodes[e[i]].predefinedPosition&&(t+=1)}if(t<.5*e.length){var n=0,o={clusterNodeProperties:{shape:"ellipse",label:"",group:"",font:{multi:!1}},clusterEdgeProperties:{label:"",font:{multi:!1},smooth:{enabled:!1}}};if(e.length>150){for(var s=e.length;e.length>150&&n<=10;){n+=1;var r=e.length;n%3==0?this.body.modules.clustering.clusterBridges(o):this.body.modules.clustering.clusterOutliers(o);if(r==e.length&&n%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}n>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(e,this.body.edgeIndices,!0),this._shiftToCenter();for(var a=0;a<e.length;a++){var d=this.body.nodes[e[a]];!1===d.predefinedPosition&&(d.x+=70*(.5-this.seededRandom()),d.y+=70*(.5-this.seededRandom()))}this._declusterAll(),this.body.emitter.emit("_repositionBezierNodes")}}}},{key:"_shiftToCenter",value:function(){for(var e=v.getRangeCore(this.body.nodes,this.body.nodeIndices),t=v.findCenter(e),i=0;i<this.body.nodeIndices.length;i++){var n=this.body.nodes[this.body.nodeIndices[i]];n.x-=t.x,n.y-=t.y}}},{key:"_declusterAll",value:function(){for(var e=!0;!0===e;){e=!1;for(var t=0;t<this.body.nodeIndices.length;t++)!0===this.body.nodes[this.body.nodeIndices[t]].isCluster&&(e=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[t],{},!1));!0===e&&this.body.emitter.emit("_dataChanged")}}},{key:"getSeed",value:function(){return this.initialRandomSeed}},{key:"setupHierarchicalLayout",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var e=void 0,t=void 0,i=!1,n=!1;this.lastNodeOnLevel={},this.hierarchical=new b;for(t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&(e=this.body.nodes[t],void 0!==e.options.level?(i=!0,this.hierarchical.levels[t]=e.options.level):n=!0);if(!0===n&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===n){var o=this.options.hierarchical.sortMethod;"hubsize"===o?this._determineLevelsByHubsize():"directed"===o?this._determineLevelsDirected():"custom"===o&&this._determineLevelsCustomCallback()}for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&this.hierarchical.ensureLevel(s);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var e=this,t=!1,i={},n=function(t,i){var n=e.hierarchical.trees;for(var o in n)n.hasOwnProperty(o)&&n[o]===t&&e.direction.shift(o,i)},o=function(){for(var t=[],i=0;i<e.hierarchical.numTrees();i++)t.push(e.direction.getTreeSize(i));return t},r=function t(i,n){if(!n[i.id]&&(n[i.id]=!0,e.hierarchical.childrenReference[i.id])){var o=e.hierarchical.childrenReference[i.id];if(o.length>0)for(var s=0;s<o.length;s++)t(e.body.nodes[o[s]],n)}},a=function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,n=1e9,o=1e9,r=1e9,a=-1e9;for(var d in t)if(t.hasOwnProperty(d)){var h=e.body.nodes[d],l=e.hierarchical.levels[h.id],u=e.direction.getPosition(h),c=e._getSpaceAroundNode(h,t),f=(0,s.default)(c,2),p=f[0],v=f[1];n=Math.min(p,n),o=Math.min(v,o),l<=i&&(r=Math.min(u,r),a=Math.max(u,a))}return[r,a,n,o]},d=function(t,i){var n=e.hierarchical.getMaxLevel(t.id),o=e.hierarchical.getMaxLevel(i.id);return Math.min(n,o)},h=function(t,i,n){for(var o=e.hierarchical,s=0;s<i.length;s++){var r=i[s],a=o.distributionOrdering[r];if(a.length>1)for(var d=0;d<a.length-1;d++){var h=a[d],l=a[d+1];o.hasSameParent(h,l)&&o.inSameSubNetwork(h,l)&&t(h,l,n)}}},l=function(i,n){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=e.direction.getPosition(i),h=e.direction.getPosition(n),l=Math.abs(h-s),u=e.options.hierarchical.nodeSpacing;if(l>u){var c={},f={};r(i,c),r(n,f);var p=d(i,n),v=a(c,p),g=a(f,p),y=v[1],m=g[0],b=g[2];if(Math.abs(y-m)>u){var _=y-m+u;_<-b+u&&(_=-b+u),_<0&&(e._shiftBlock(n.id,_),t=!0,!0===o&&e._centerParent(n))}}},u=function(n,o){for(var d=o.id,h=o.edges,l=e.hierarchical.levels[o.id],u=e.options.hierarchical.levelSeparation*e.options.hierarchical.levelSeparation,c={},f=[],p=0;p<h.length;p++){var v=h[p];if(v.toId!=v.fromId){var g=v.toId==d?v.from:v.to;c[h[p].id]=g,e.hierarchical.levels[g.id]<l&&f.push(v)}}var y=function(t,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var s=e.direction.getPosition(c[i[o].id])-t;n+=s/Math.sqrt(s*s+u)}return n},m=function(t,i){for(var n=0,o=0;o<i.length;o++)if(void 0!==c[i[o].id]){var s=e.direction.getPosition(c[i[o].id])-t;n-=u*Math.pow(s*s+u,-1.5)}return n},b=function(t,i){for(var n=e.direction.getPosition(o),s={},r=0;r<t;r++){var a=y(n,i),d=m(n,i);if(n-=Math.max(-40,Math.min(40,Math.round(a/d))),void 0!==s[n])break;s[n]=r}return n},_=b(n,f);!function(n){var s=e.direction.getPosition(o);if(void 0===i[o.id]){var d={};r(o,d),i[o.id]=d}var h=a(i[o.id]),l=h[2],u=h[3],c=n-s,f=0;c>0?f=Math.min(c,u-e.options.hierarchical.nodeSpacing):c<0&&(f=-Math.min(-c,l-e.options.hierarchical.nodeSpacing)),0!=f&&(e._shiftBlock(o.id,f),t=!0)}(_),_=b(n,h),function(i){var n=e.direction.getPosition(o),r=e._getSpaceAroundNode(o),a=(0,s.default)(r,2),d=a[0],h=a[1],l=i-n,u=n;l>0?u=Math.min(n+(h-e.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(n-(d-e.options.hierarchical.nodeSpacing),i)),u!==n&&(e.direction.setPosition(o,u),t=!0)}(_)};!0===this.options.hierarchical.blockShifting&&(function(i){var n=e.hierarchical.getLevels();n=n.reverse();for(var o=0;o<i&&(t=!1,h(l,n,!0),!0===t);o++);}(5),function(){for(var t in e.body.nodes)e.body.nodes.hasOwnProperty(t)&&e._centerParent(e.body.nodes[t])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var n=e.hierarchical.getLevels();n=n.reverse();for(var o=0;o<i;o++){t=!1;for(var s=0;s<n.length;s++)for(var r=n[s],a=e.hierarchical.distributionOrdering[r],d=0;d<a.length;d++)u(1e3,a[d]);if(!0!==t)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var t=e.hierarchical.getLevels();t=t.reverse();for(var i=0;i<t.length;i++)for(var n=t[i],o=e.hierarchical.distributionOrdering[n],s=0;s<o.length;s++)e._centerParent(o[s])}(),function(){for(var t=o(),i=0,s=0;s<t.length-1;s++){i+=t[s].max-t[s+1].min+e.options.hierarchical.treeSpacing,n(s+1,i)}}()}},{key:"_getSpaceAroundNode",value:function(e,t){var i=!0;void 0===t&&(i=!1);var n=this.hierarchical.levels[e.id];if(void 0!==n){var o=this.hierarchical.distributionIndex[e.id],s=this.direction.getPosition(e),r=this.hierarchical.distributionOrdering[n],a=1e9,d=1e9;if(0!==o){var h=r[o-1];if(!0===i&&void 0===t[h.id]||!1===i){a=s-this.direction.getPosition(h)}}if(o!=r.length-1){var l=r[o+1];if(!0===i&&void 0===t[l.id]||!1===i){var u=this.direction.getPosition(l);d=Math.min(d,u-s)}}return[a,d]}return[0,0]}},{key:"_centerParent",value:function(e){if(this.hierarchical.parentReference[e.id])for(var t=this.hierarchical.parentReference[e.id],i=0;i<t.length;i++){var n=t[i],o=this.body.nodes[n],r=this.hierarchical.childrenReference[n];if(void 0!==r){var a=this._getCenterPosition(r),d=this.direction.getPosition(o),h=this._getSpaceAroundNode(o),l=(0,s.default)(h,2),u=l[0],c=l[1],f=d-a;(f<0&&Math.abs(f)<c-this.options.hierarchical.nodeSpacing||f>0&&Math.abs(f)<u-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(o,a)}}}},{key:"_placeNodesByHierarchy",value:function(e){this.positionedNodes={};for(var t in e)if(e.hasOwnProperty(t)){var i=(0,h.default)(e[t]);i=this._indexArrayToNodes(i),this.direction.sort(i);for(var n=0,o=0;o<i.length;o++){var s=i[o];if(void 0===this.positionedNodes[s.id]){var r=this.options.hierarchical.nodeSpacing,a=r*n;n>0&&(a=this.direction.getPosition(i[o-1])+r),this.direction.setPosition(s,a,t),this._validatePositionAndContinue(s,t,a),n++}}}}},{key:"_placeBranchNodes",value:function(e,t){var i=this.hierarchical.childrenReference[e];if(void 0!==i){for(var n=[],o=0;o<i.length;o++)n.push(this.body.nodes[i[o]]);this.direction.sort(n);for(var s=0;s<n.length;s++){var r=n[s],a=this.hierarchical.levels[r.id];if(!(a>t&&void 0===this.positionedNodes[r.id]))return;var d=this.options.hierarchical.nodeSpacing,h=void 0;h=0===s?this.direction.getPosition(this.body.nodes[e]):this.direction.getPosition(n[s-1])+d,this.direction.setPosition(r,h,a),this._validatePositionAndContinue(r,a,h)}var l=this._getCenterPosition(n);this.direction.setPosition(this.body.nodes[e],l,t)}}},{key:"_validatePositionAndContinue",value:function(e,t,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[t]){var n=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[t]]);if(i-n<this.options.hierarchical.nodeSpacing){var o=n+this.options.hierarchical.nodeSpacing-i,s=this._findCommonParent(this.lastNodeOnLevel[t],e.id);this._shiftBlock(s.withChild,o)}}this.lastNodeOnLevel[t]=e.id,this.positionedNodes[e.id]=!0,this._placeBranchNodes(e.id,t)}}},{key:"_indexArrayToNodes",value:function(e){for(var t=[],i=0;i<e.length;i++)t.push(this.body.nodes[e[i]]);return t}},{key:"_getDistribution",value:function(){var e={},t=void 0,i=void 0;for(t in this.body.nodes)if(this.body.nodes.hasOwnProperty(t)){i=this.body.nodes[t];var n=void 0===this.hierarchical.levels[t]?0:this.hierarchical.levels[t];this.direction.fix(i,n),void 0===e[n]&&(e[n]={}),e[n][t]=i}return e}},{key:"_getActiveEdges",value:function(e){var t=this,i=[];return p.forEach(e.edges,function(e){-1!==t.body.edgeIndices.indexOf(e.id)&&i.push(e)}),i}},{key:"_getHubSizes",value:function(){var e=this,t={},i=this.body.nodeIndices;p.forEach(i,function(i){var n=e.body.nodes[i],o=e._getActiveEdges(n).length;t[o]=!0});var n=[];return p.forEach(t,function(e){n.push(Number(e))}),n.sort(function(e,t){return t-e}),n}},{key:"_determineLevelsByHubsize",value:function(){for(var e=this,t=function(t,i){e.hierarchical.levelDownstream(t,i)},i=this._getHubSizes(),n=0;n<i.length;++n){if("break"===function(n){var o=i[n];if(0===o)return"break";p.forEach(e.body.nodeIndices,function(i){var n=e.body.nodes[i];o===e._getActiveEdges(n).length&&e._crawlNetwork(t,i)})}(n))break}}},{key:"_determineLevelsCustomCallback",value:function(){var e=this,t=function(t,i,n){var o=e.hierarchical.levels[t.id];void 0===o&&(o=e.hierarchical.levels[t.id]=1e5);var s=(v.cloneOptions(t,"node"),v.cloneOptions(i,"node"),void v.cloneOptions(n,"edge"));e.hierarchical.levels[i.id]=o+s};this._crawlNetwork(t),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_determineLevelsDirected",value:function(){var e=this,t=function(t){return p.forEach(e.body.edges,function(e){if(e.toId===t.fromId&&e.fromId===t.toId)return!0}),!1},i=function(i,n,o){var s=e.hierarchical.levels[i.id],r=e.hierarchical.levels[n.id];t(o)&&void 0!==s&&void 0!==r||(void 0===s&&(s=e.hierarchical.levels[i.id]=1e4),o.toId==n.id?e.hierarchical.levels[n.id]=s+1:e.hierarchical.levels[n.id]=s-1)};this._crawlNetwork(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var e=this,t=function(t,i){e.hierarchical.levels[i.id]>e.hierarchical.levels[t.id]&&e.hierarchical.addRelation(t.id,i.id)};this._crawlNetwork(t),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],n={},o=function i(o,s){if(void 0===n[o.id]){e.hierarchical.setTreeIndex(o,s),n[o.id]=!0;for(var r=void 0,a=e._getActiveEdges(o),d=0;d<a.length;d++){var h=a[d];!0===h.connected&&(r=h.toId==o.id?h.from:h.to,o.id!=r.id&&(t(o,r,h),i(r,s)))}}};if(void 0===i)for(var s=0,r=0;r<this.body.nodeIndices.length;r++){var a=this.body.nodeIndices[r];if(void 0===n[a]){var d=this.body.nodes[a];o(d,s),s+=1}}else{var h=this.body.nodes[i];if(void 0===h)return void console.error("Node not found:",i);o(h)}}},{key:"_shiftBlock",value:function(e,t){var i=this,n={};!function e(o){if(!n[o]){n[o]=!0,i.direction.shift(o,t);var s=i.hierarchical.childrenReference[o];if(void 0!==s)for(var r=0;r<s.length;r++)e(s[r])}}(e)}},{key:"_findCommonParent",value:function(e,t){var i=this,n={};return function e(t,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var s=0;s<o.length;s++){var r=o[s];t[r]=!0,e(t,r)}}(n,e),function e(t,n){var o=i.hierarchical.parentReference[n];if(void 0!==o)for(var s=0;s<o.length;s++){var r=o[s];if(void 0!==t[r])return{foundParent:r,withChild:n};var a=e(t,r);if(null!==a.foundParent)return a}return{foundParent:null,withChild:n}}(n,t)}},{key:"setDirectionStrategy",value:function(){var e="UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction;this.direction=e?new m(this):new y(this)}},{key:"_getCenterPosition",value:function(e){for(var t=1e9,i=-1e9,n=0;n<e.length;n++){var o=void 0;if(void 0!==e[n].id)o=e[n];else{var s=e[n];o=this.body.nodes[s]}var r=this.direction.getPosition(o);t=Math.min(t,r),i=Math.max(i,r)}return.5*(t+i)}}]),e}();t.default=_},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.VerticalStrategy=t.HorizontalStrategy=void 0;var o=i(2),s=n(o),r=i(3),a=n(r),d=i(4),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=function(){function e(){(0,u.default)(this,e)}return(0,f.default)(e,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(e){return this.fake_use(e),this.abstract()}},{key:"setPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(e,t,i),this.abstract()}},{key:"getTreeSize",value:function(e){return this.fake_use(e),this.abstract()}},{key:"sort",value:function(e){this.fake_use(e),this.abstract()}},{key:"fix",value:function(e,t){this.fake_use(e,t),this.abstract()}},{key:"shift",value:function(e,t){this.fake_use(e,t),this.abstract()}}]),e}(),v=function(e){function t(e){(0,u.default)(this,t);var i=(0,a.default)(this,(t.__proto__||(0,s.default)(t)).call(this));return i.layout=e,i}return(0,h.default)(t,e),(0,f.default)(t,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(e){return e.x}},{key:"setPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(e,i),e.x=t}},{key:"getTreeSize",value:function(e){var t=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,e);return{min:t.min_x,max:t.max_x}}},{key:"sort",value:function(e){e.sort(function(e,t){return void 0===e.x||void 0===t.x?0:e.x-t.x})}},{key:"fix",value:function(e,t){e.y=this.layout.options.hierarchical.levelSeparation*t,e.options.fixed.y=!0}},{key:"shift",value:function(e,t){this.layout.body.nodes[e].x+=t}}]),t}(p),g=function(e){function t(e){(0,u.default)(this,t);var i=(0,a.default)(this,(t.__proto__||(0,s.default)(t)).call(this));return i.layout=e,i}return(0,h.default)(t,e),(0,f.default)(t,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(e){return e.y}},{key:"setPosition",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(e,i),e.y=t}},{key:"getTreeSize",value:function(e){var t=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,e);return{min:t.min_y,max:t.max_y}}},{key:"sort",value:function(e){e.sort(function(e,t){return void 0===e.y||void 0===t.y?0:e.y-t.y})}},{key:"fix",value:function(e,t){e.x=this.layout.options.hierarchical.levelSeparation*t,e.options.fixed.x=!0}},{key:"shift",value:function(e,t){this.layout.body.nodes[e].y+=t}}]),t}(p);t.HorizontalStrategy=g,t.VerticalStrategy=v},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(10),s=n(o),r=i(21),a=n(r),d=i(7),h=n(d),l=i(0),u=n(l),c=i(1),f=n(c),p=i(5),v=i(22),g=i(35),y=function(){function e(t,i,n){var o=this;(0,u.default)(this,e),this.body=t,this.canvas=i,this.selectionHandler=n,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},p.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){o._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,f.default)(e,[{key:"_restore",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(e,t,i){void 0!==t&&(void 0!==t.locale?this.options.locale=t.locale:this.options.locale=i.locale,void 0!==t.locales?this.options.locales=t.locales:this.options.locales=i.locales),void 0!==e&&("boolean"==typeof e?this.options.enabled=e:(this.options.enabled=!0,p.deepExtend(this.options,e)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var e=this.selectionHandler._getSelectedNodeCount(),t=this.selectionHandler._getSelectedEdgeCount(),i=e+t,n=this.options.locales[this.options.locale],o=!1;!1!==this.options.addNode&&(this._createAddNodeButton(n),o=!0),!1!==this.options.addEdge&&(!0===o?this._createSeperator(1):o=!0,this._createAddEdgeButton(n)),1===e&&"function"==typeof this.options.editNode?(!0===o?this._createSeperator(2):o=!0,this._createEditNodeButton(n)):1===t&&0===e&&!1!==this.options.editEdge&&(!0===o?this._createSeperator(3):o=!0,this._createEditEdgeButton(n)),0!==i&&(e>0&&!1!==this.options.deleteNode?(!0===o&&this._createSeperator(4),this._createDeleteButton(n)):0===e&&!1!==this.options.deleteEdge&&(!0===o&&this._createSeperator(4),this._createDeleteButton(n))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var e=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var t=this.selectionHandler._getSelectedNode();if(void 0!==t){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==t.isCluster){var i=p.deepExtend({},t.options,!1);if(i.x=t.x,i.y=t.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(t){null!==t&&void 0!==t&&"editNode"===e.inMode&&e.body.data.nodes.getDataSet().update(t),e.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",this._dragStartEdge.bind(this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,h.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var e=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(e.from,e.to)}if(!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],n=this._getNewTargetNode(i.from.x,i.from.y),o=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(n.id),this.temporaryIds.nodes.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(e){var t=i.edgeType.findBorderPositions(e);!1===n.selected&&(n.x=t.from.x,n.y=t.from.y),!1===o.selected&&(o.x=t.to.x,o.y=t.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var e=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var t=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),n=void 0;if(t.length>0){for(var o=0;o<t.length;o++)if(!0===this.body.nodes[t[o]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);"function"==typeof this.options.deleteNode&&(n=this.options.deleteNode)}else i.length>0&&"function"==typeof this.options.deleteEdge&&(n=this.options.deleteEdge);if("function"==typeof n){var s={nodes:t,edges:i};if(2!==n.length)throw new Error("The function for delete does not support two arguments (data, callback)");n(s,function(t){null!==t&&void 0!==t&&"delete"===e.inMode?(e.body.data.edges.getDataSet().remove(t.edges),e.body.data.nodes.getDataSet().remove(t.nodes),e.body.emitter.emit("startSimulation"),e.showManipulatorToolbar()):(e.body.emitter.emit("startSimulation"),e.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(t),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(e,t){var i=p.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+p.randomUUID(),i.hidden=!1,i.physics=!1,i.x=e,i.y=t;var n=this.body.functions.createNode(i);return n.shape.boundingBox={left:e,right:e,top:t,bottom:t},n}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},p.recursiveDOMDelete(this.editModeDiv);var e=this.options.locales[this.options.locale],t=this._createButton("editMode","vis-button vis-edit vis-edit-mode",e.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(t),this._bindHammerToDiv(t,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(p.recursiveDOMDelete(this.editModeDiv),p.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var e=0;e<this.manipulationHammers.length;e++)this.manipulationHammers[e].destroy();this.manipulationHammers=[]}}},{key:"_removeManipulationDOM",value:function(){this._clean(),p.recursiveDOMDelete(this.manipulationDiv),p.recursiveDOMDelete(this.editModeDiv),p.recursiveDOMDelete(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+e]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+e].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+e])}},{key:"_createAddNodeButton",value:function(e){var t=this._createButton("addNode","vis-button vis-add",e.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(t),this._bindHammerToDiv(t,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(e){var t=this._createButton("addEdge","vis-button vis-connect",e.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(t),this._bindHammerToDiv(t,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(e){var t=this._createButton("editNode","vis-button vis-edit",e.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(t),this._bindHammerToDiv(t,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(e){var t=this._createButton("editEdge","vis-button vis-edit",e.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(t),this._bindHammerToDiv(t,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(e){var t;t=this.options.rtl?"vis-button vis-delete-rtl":"vis-button vis-delete";var i=this._createButton("delete",t,e.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(e){var t=this._createButton("back","vis-button vis-back",e.back||this.options.locales.en.back);this.manipulationDiv.appendChild(t),this._bindHammerToDiv(t,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[e+"Div"]=document.createElement("div"),this.manipulationDOM[e+"Div"].className=t,this.manipulationDOM[e+"Label"]=document.createElement("div"),this.manipulationDOM[e+"Label"].className=n,this.manipulationDOM[e+"Label"].innerHTML=i,this.manipulationDOM[e+"Div"].appendChild(this.manipulationDOM[e+"Label"]),this.manipulationDOM[e+"Div"]}},{key:"_createDescription",value:function(e){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",e))}},{key:"_temporaryBindEvent",value:function(e,t){this.temporaryEventFunctions.push({event:e,boundFunction:t}),this.body.emitter.on(e,t)}},{key:"_temporaryBindUI",value:function(e,t){if(void 0===this.body.eventListeners[e])throw new Error("This UI function does not exist. Typo? You tried: "+e+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[e]=this.body.eventListeners[e],this.body.eventListeners[e]=t}},{key:"_unbindTemporaryUIs",value:function(){for(var e in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(e)&&(this.body.eventListeners[e]=this.temporaryUIFunctions[e],delete this.temporaryUIFunctions[e]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var e=0;e<this.temporaryEventFunctions.length;e++){var t=this.temporaryEventFunctions[e].event,i=this.temporaryEventFunctions[e].boundFunction;this.body.emitter.off(t,i)}this.temporaryEventFunctions=[]}},{key:"_bindHammerToDiv",value:function(e,t){var i=new v(e,{});g.onTouch(i,t),this.manipulationHammers.push(i)}},{key:"_cleanupTemporaryNodesAndEdges",value:function(){for(var e=0;e<this.temporaryIds.edges.length;e++){this.body.edges[this.temporaryIds.edges[e]].disconnect(),delete this.body.edges[this.temporaryIds.edges[e]];var t=this.body.edgeIndices.indexOf(this.temporaryIds.edges[e]);-1!==t&&this.body.edgeIndices.splice(t,1)}for(var i=0;i<this.temporaryIds.nodes.length;i++){delete this.body.nodes[this.temporaryIds.nodes[i]];var n=this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]);-1!==n&&this.body.nodeIndices.splice(n,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:"_controlNodeTouch",value:function(e){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=p.extend({},this.body.view.translation)}},{key:"_controlNodeDragStart",value:function(e){var t=this.lastTouch,i=this.selectionHandler._pointerToPositionObject(t),n=this.body.nodes[this.temporaryIds.nodes[0]],o=this.body.nodes[this.temporaryIds.nodes[1]],s=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=n.isOverlappingWith(i),a=o.isOverlappingWith(i);!0===r?(this.selectedControlNode=n,s.edgeType.from=n):!0===a&&(this.selectedControlNode=o,s.edgeType.to=o),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit("_redraw")}},{key:"_controlNodeDrag",value:function(e){this.body.emitter.emit("disablePhysics");var t=this.body.functions.getPointer(e.center),i=this.canvas.DOMtoCanvas(t);if(void 0!==this.selectedControlNode)this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y;else{var n=t.x-this.lastTouch.x,o=t.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+n,y:this.lastTouch.translation.y+o}}this.body.emitter.emit("_redraw")}},{key:"_controlNodeDragEnd",value:function(e){var t=this.body.functions.getPointer(e.center),i=this.selectionHandler._pointerToPositionObject(t),n=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=o.length-1;r>=0;r--)if(o[r]!==this.selectedControlNode.id){s=this.body.nodes[o[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(!0===s.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,n.to.id):this._performEditEdge(n.from.id,s.id)}else n.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(e){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(e.center),this.lastTouch.translation=p.extend({},this.body.view.translation);var t=this.lastTouch,i=this.selectionHandler.getNodeAt(t);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var n=this._getNewTargetNode(i.x,i.y);this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id);var o=this.body.functions.createEdge({id:"connectionEdge"+p.randomUUID(),from:i.id,to:n.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[o.id]=o,this.body.edgeIndices.push(o.id),this.temporaryIds.nodes.push(n.id),this.temporaryIds.edges.push(o.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(e){var t=this.body.functions.getPointer(e.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(t.x),i.y=this.canvas._YconvertDOMtoCanvas(t.y),this.body.emitter.emit("_redraw")}else{var n=t.x-this.lastTouch.x,o=t.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+n,y:this.lastTouch.translation.y+o}}}},{key:"_finishConnect",value:function(e){var t=this.body.functions.getPointer(e.center),i=this.selectionHandler._pointerToPositionObject(t),n=void 0;void 0!==this.temporaryIds.edges[0]&&(n=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var o=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=o.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(o[r])){s=this.body.nodes[o[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(!0===s.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[n]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(n,s.id)),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(e){var t=this.lastTouch;this.selectionHandler._generateClickEvent("dragStart",e,t,void 0,!0)}},{key:"_performAddNode",value:function(e){var t=this,i={id:p.randomUUID(),x:e.pointer.canvas.x,y:e.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(e){null!==e&&void 0!==e&&"addNode"===t.inMode&&(t.body.data.nodes.getDataSet().add(e),t.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(e,t){var i=this,n={from:e,to:t};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(n,function(e){null!==e&&void 0!==e&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(e),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(e,t){var i=this,n={id:this.edgeBeingEditedId,from:e,to:t,label:this.body.data.edges._data[this.edgeBeingEditedId].label},o=this.options.editEdge;if("object"===(void 0===o?"undefined":(0,h.default)(o))&&(o=o.editWithoutDrag),"function"==typeof o){if(2!==o.length)throw new Error("The function for edit does not support two arguments (data, callback)");o(n,function(e){null===e||void 0===e||"editEdge"!==i.inMode?(i.body.edges[n.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(e),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(n),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),e}();t.default=y},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(21),s=n(o),r=i(7),a=n(r),d=i(0),h=n(d),l=i(1),u=n(l),c=i(5),f=i(189).default,p=function(){function e(t,i,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,h.default)(this,e),this.parent=t,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},c.extend(this.options,this.defaultOptions),this.configureOptions=n,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new f(o),this.wrapper=void 0}return(0,u.default)(e,[{key:"setOptions",value:function(e){if(void 0!==e){this.popupHistory={},this._removePopup();var t=!0;"string"==typeof e?this.options.filter=e:e instanceof Array?this.options.filter=e.join():"object"===(void 0===e?"undefined":(0,a.default)(e))?(void 0!==e.container&&(this.options.container=e.container),void 0!==e.filter&&(this.options.filter=e.filter),void 0!==e.showButton&&(this.options.showButton=e.showButton),void 0!==e.enabled&&(t=e.enabled)):"boolean"==typeof e?(this.options.filter=!0,t=e):"function"==typeof e&&(this.options.filter=e,t=!0),!1===this.options.filter&&(t=!1),this.options.enabled=t}this._clean()}},{key:"setModuleOptions",value:function(e){this.moduleOptions=e,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var e=this;this._clean(),this.changedOptions=[];var t=this.options.filter,i=0,n=!1;for(var o in this.configureOptions)this.configureOptions.hasOwnProperty(o)&&(this.allowCreation=!1,n=!1,"function"==typeof t?(n=t(o,[]),n=n||this._handleObject(this.configureOptions[o],[o],!0)):!0!==t&&-1===t.indexOf(o)||(n=!0),!1!==n&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(o),this._handleObject(this.configureOptions[o],[o])),i++);if(!0===this.options.showButton){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){e._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var e=0;e<this.domElements.length;e++)this.wrapper.appendChild(this.domElements[e]);this._showPopupIfNeeded()}},{key:"_clean",value:function(){for(var e=0;e<this.domElements.length;e++)this.wrapper.removeChild(this.domElements[e]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:"_getValue",value:function(e){for(var t=this.moduleOptions,i=0;i<e.length;i++){if(void 0===t[e[i]]){t=void 0;break}t=t[e[i]]}return t}},{key:"_makeItem",value:function(e){if(!0===this.allowCreation){var t=document.createElement("div");t.className="vis-configuration vis-config-item vis-config-s"+e.length;for(var i=arguments.length,n=Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return n.forEach(function(e){t.appendChild(e)}),this.domElements.push(t),this.domElements.length}return 0}},{key:"_makeHeader",value:function(e){var t=document.createElement("div");t.className="vis-configuration vis-config-header",t.innerHTML=e,this._makeItem([],t)}},{key:"_makeLabel",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");return n.className="vis-configuration vis-config-label vis-config-s"+t.length,n.innerHTML=!0===i?"<i><b>"+e+":</b></i>":e+":",n}},{key:"_makeDropdown",value:function(e,t,i){var n=document.createElement("select");n.className="vis-configuration vis-config-select";var o=0;void 0!==t&&-1!==e.indexOf(t)&&(o=e.indexOf(t));for(var s=0;s<e.length;s++){var r=document.createElement("option");r.value=e[s],s===o&&(r.selected="selected"),r.innerHTML=e[s],n.appendChild(r)}var a=this;n.onchange=function(){a._update(this.value,i)};var d=this._makeLabel(i[i.length-1],i);this._makeItem(i,d,n)}},{key:"_makeRange",value:function(e,t,i){var n=e[0],o=e[1],s=e[2],r=e[3],a=document.createElement("input");a.className="vis-configuration vis-config-range";try{a.type="range",a.min=o,a.max=s}catch(e){}a.step=r;var d="",h=0;if(void 0!==t){t<0&&1.2*t<o?(a.min=Math.ceil(1.2*t),h=a.min,d="range increased"):t/1.2<o&&(a.min=Math.ceil(t/1.2),h=a.min,d="range increased"),1.2*t>s&&1!==s&&(a.max=Math.ceil(1.2*t),h=a.max,d="range increased"),a.value=t}else a.value=n;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var c=this._makeLabel(i[i.length-1],i),f=this._makeItem(i,c,a,l);""!==d&&this.popupHistory[f]!==h&&(this.popupHistory[f]=h,this._setupPopup(d,f))}},{key:"_setupPopup",value:function(e,t){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var n=document.createElement("div");n.id="vis-configuration-popup",n.className="vis-configuration-popup",n.innerHTML=e,n.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:n,index:t}}}},{key:"_removePopup",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:"_showPopupIfNeeded",value:function(){var e=this;if(void 0!==this.popupDiv.html){var t=this.domElements[this.popupDiv.index],i=t.getBoundingClientRect();this.popupDiv.html.style.left=i.left+"px",this.popupDiv.html.style.top=i.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=setTimeout(function(){e.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=setTimeout(function(){e._removePopup()},1800)}}},{key:"_makeCheckbox",value:function(e,t,i){var n=document.createElement("input");n.type="checkbox",n.className="vis-configuration vis-config-checkbox",n.checked=e,void 0!==t&&(n.checked=t,t!==e&&("object"===(void 0===e?"undefined":(0,a.default)(e))?t!==e.enabled&&this.changedOptions.push({path:i,value:t}):this.changedOptions.push({path:i,value:t})));var o=this;n.onchange=function(){o._update(this.checked,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,n)}},{key:"_makeTextInput",value:function(e,t,i){var n=document.createElement("input");n.type="text",n.className="vis-configuration vis-config-text",n.value=t,t!==e&&this.changedOptions.push({path:i,value:t});var o=this;n.onchange=function(){o._update(this.value,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,n)}},{key:"_makeColorField",value:function(e,t,i){var n=this,o=e[1],s=document.createElement("div");t=void 0===t?o:t,"none"!==t?(s.className="vis-configuration vis-config-colorBlock",s.style.backgroundColor=t):s.className="vis-configuration vis-config-colorBlock none",t=void 0===t?o:t,s.onclick=function(){n._showColorPicker(t,s,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,s)}},{key:"_showColorPicker",value:function(e,t,i){var n=this;t.onclick=function(){},this.colorPicker.insertTo(t),this.colorPicker.show(),this.colorPicker.setColor(e),this.colorPicker.setUpdateCallback(function(e){var o="rgba("+e.r+","+e.g+","+e.b+","+e.a+")";t.style.backgroundColor=o,n._update(o,i)}),this.colorPicker.setCloseCallback(function(){t.onclick=function(){n._showColorPicker(e,t,i)}})}},{key:"_handleObject",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=!1,o=this.options.filter,s=!1;for(var r in e)if(e.hasOwnProperty(r)){n=!0;var a=e[r],d=c.copyAndExtendArray(t,r);if("function"==typeof o&&!1===(n=o(r,t))&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,n=this._handleObject(a,d,!0),this.allowCreation=!1===i),!1!==n){s=!0;var h=this._getValue(d);if(a instanceof Array)this._handleArray(a,h,d);else if("string"==typeof a)this._makeTextInput(a,h,d);else if("boolean"==typeof a)this._makeCheckbox(a,h,d);else if(a instanceof Object){var l=!0;if(-1!==t.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(l=!1),!0===l)if(void 0!==a.enabled){var u=c.copyAndExtendArray(d,"enabled"),f=this._getValue(u);if(!0===f){var p=this._makeLabel(r,d,!0);this._makeItem(d,p),s=this._handleObject(a,d)||s}else this._makeCheckbox(a,f,d)}else{var v=this._makeLabel(r,d,!0);this._makeItem(d,v),s=this._handleObject(a,d)||s}}else console.error("dont know how to handle",a,r,d)}}return s}},{key:"_handleArray",value:function(e,t,i){"string"==typeof e[0]&&"color"===e[0]?(this._makeColorField(e,t,i),e[1]!==t&&this.changedOptions.push({path:i,value:t})):"string"==typeof e[0]?(this._makeDropdown(e,t,i),e[0]!==t&&this.changedOptions.push({path:i,value:t})):"number"==typeof e[0]&&(this._makeRange(e,t,i),e[0]!==t&&this.changedOptions.push({path:i,value:Number(t)}))}},{key:"_update",value:function(e,t){var i=this._constructOptions(e,t);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i;e="true"===e||e,e="false"!==e&&e;for(var o=0;o<t.length;o++)"global"!==t[o]&&(void 0===n[t[o]]&&(n[t[o]]={}),o!==t.length-1?n=n[t[o]]:n[t[o]]=e);return i}},{key:"_printOptions",value:function(){var e=this.getOptions();this.optionsContainer.innerHTML="<pre>var options = "+(0,s.default)(e,null,2)+"</pre>"}},{key:"getOptions",value:function(){for(var e={},t=0;t<this.changedOptions.length;t++)this._constructOptions(this.changedOptions[t].value,this.changedOptions[t].path,e);return e}}]),e}();t.default=p},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(21),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(22),u=i(35),c=i(5),f=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,e),this.pixelRatio=t,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,h.default)(e,[{key:"insertTo",value:function(e){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=e,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(e){if("function"!=typeof e)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=e}},{key:"setCloseCallback",value:function(e){if("function"!=typeof e)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=e}},{key:"_isColorString",value:function(e){var t={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof e)return t[e]}},{key:"setColor",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==e){var i=void 0,n=this._isColorString(e);if(void 0!==n&&(e=n),!0===c.isString(e)){if(!0===c.isValidRGB(e)){var o=e.substr(4).substr(0,e.length-5).split(",");i={r:o[0],g:o[1],b:o[2],a:1}}else if(!0===c.isValidRGBA(e)){var r=e.substr(5).substr(0,e.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===c.isValidHex(e)){var a=c.hexToRGB(e);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(e instanceof Object&&void 0!==e.r&&void 0!==e.g&&void 0!==e.b){var d=void 0!==e.a?e.a:"1.0";i={r:e.r,g:e.g,b:e.b,a:d}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(e));this._setColor(i,t)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var e=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=c.extend({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==e.closeCallback&&(e.closeCallback(),e.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(e){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=c.extend({},e)),this.color=e;var t=c.RGBToHSV(e.r,e.g,e.b),i=2*Math.PI,n=this.r*t.s,o=this.centerCoordinates.x+n*Math.sin(i*t.h),s=this.centerCoordinates.y+n*Math.cos(i*t.h);this.colorPickerSelector.style.left=o-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(e)}},{key:"_setOpacity",value:function(e){this.color.a=e/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(e){var t=c.RGBToHSV(this.color.r,this.color.g,this.color.b);t.v=e/100;var i=c.HSVToRGB(t.h,t.s,t.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,t=c.RGBToHSV(e.r,e.g,e.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var n=this.colorPickerCanvas.clientWidth,o=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,n,o),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-t.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*t.v,this.opacityRange.value=100*e.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var e=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(t)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(e){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(e){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var e=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(t){e._moveSelector(t)}),this.hammer.on("tap",function(t){e._moveSelector(t)}),this.hammer.on("panstart",function(t){e._moveSelector(t)}),this.hammer.on("panmove",function(t){e._moveSelector(t)}),this.hammer.on("panend",function(t){e._moveSelector(t)})}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var e=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1)),e.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var t=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;e.clearRect(0,0,t,i);var n=void 0,o=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*t,y:.5*i},this.r=.49*t;var a=2*Math.PI/360,d=1/this.r,h=void 0;for(s=0;s<360;s++)for(r=0;r<this.r;r++)n=this.centerCoordinates.x+r*Math.sin(a*s),o=this.centerCoordinates.y+r*Math.cos(a*s),h=c.HSVToRGB(s*(1/360),r*d,1),e.fillStyle="rgb("+h.r+","+h.g+","+h.b+")",e.fillRect(n-.5,o-.5,2,2);e.strokeStyle="rgba(0,0,0,1)",e.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),e.stroke(),this.hueCircle=e.getImageData(0,0,t,i)}this.generated=!0}},{key:"_moveSelector",value:function(e){var t=this.colorPickerDiv.getBoundingClientRect(),i=e.center.x-t.left,n=e.center.y-t.top,o=.5*this.colorPickerDiv.clientHeight,s=.5*this.colorPickerDiv.clientWidth,r=i-s,a=n-o,d=Math.atan2(r,a),h=.98*Math.min(Math.sqrt(r*r+a*a),s),l=Math.cos(d)*h+o,u=Math.sin(d)*h+s;this.colorPickerSelector.style.top=l-.5*this.colorPickerSelector.clientHeight+"px",this.colorPickerSelector.style.left=u-.5*this.colorPickerSelector.clientWidth+"px";var f=d/(2*Math.PI);f=f<0?f+1:f;var p=h/this.r,v=c.RGBToHSV(this.color.r,this.color.g,this.color.b);v.h=f,v.s=p;var g=c.HSVToRGB(v.h,v.s,v.v);g.a=this.color.a,this.color=g,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),e}();t.default=f},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(23),s=n(o),r=i(0),a=n(r),d=i(1),h=n(d),l=i(191),u=n(l),c=function(){function e(t,i,n){(0,a.default)(this,e),this.body=t,this.springLength=i,this.springConstant=n,this.distanceSolver=new u.default}return(0,h.default)(e,[{key:"setOptions",value:function(e){e&&(e.springLength&&(this.springLength=e.springLength),e.springConstant&&(this.springConstant=e.springConstant))}},{key:"solve",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=this.distanceSolver.getDistances(this.body,e,t);this._createL_matrix(n),this._createK_matrix(n),this._createE_matrix();for(var o=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),a=1e9,d=0,h=0,l=0,u=0,c=0;a>.01&&o<r;){o+=1;var f=this._getHighestEnergyNode(i),p=(0,s.default)(f,4);for(d=p[0],a=p[1],h=p[2],l=p[3],u=a,c=0;u>1&&c<5;){c+=1,this._moveNode(d,h,l);var v=this._getEnergy(d),g=(0,s.default)(v,3);u=g[0],h=g[1],l=g[2]}}}},{key:"_getHighestEnergyNode",value:function(e){for(var t=this.body.nodeIndices,i=this.body.nodes,n=0,o=t[0],r=0,a=0,d=0;d<t.length;d++){var h=t[d];if(!1===i[h].predefinedPosition||!0===i[h].isCluster&&!0===e||!0===i[h].options.fixed.x||!0===i[h].options.fixed.y){var l=this._getEnergy(h),u=(0,s.default)(l,3),c=u[0],f=u[1],p=u[2];n<c&&(n=c,o=h,r=f,a=p)}}return[o,n,r,a]}},{key:"_getEnergy",value:function(e){var t=(0,s.default)(this.E_sums[e],2),i=t[0],n=t[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(n,2)),i,n]}},{key:"_moveNode",value:function(e,t,i){for(var n=this.body.nodeIndices,o=this.body.nodes,s=0,r=0,a=0,d=o[e].x,h=o[e].y,l=this.K_matrix[e],u=this.L_matrix[e],c=0;c<n.length;c++){var f=n[c];if(f!==e){var p=o[f].x,v=o[f].y,g=l[f],y=u[f],m=1/Math.pow(Math.pow(d-p,2)+Math.pow(h-v,2),1.5);s+=g*(1-y*Math.pow(h-v,2)*m),r+=g*(y*(d-p)*(h-v)*m),a+=g*(1-y*Math.pow(d-p,2)*m)}}var b=s,_=r,w=t,k=a,x=i,O=(w/b+x/_)/(_/b-k/_),M=-(_*O+w)/b;o[e].x+=M,o[e].y+=O,this._updateE_matrix(e)}},{key:"_createL_matrix",value:function(e){var t=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var n=0;n<t.length;n++){this.L_matrix[t[n]]={};for(var o=0;o<t.length;o++)this.L_matrix[t[n]][t[o]]=i*e[t[n]][t[o]]}}},{key:"_createK_matrix",value:function(e){var t=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var n=0;n<t.length;n++){this.K_matrix[t[n]]={};for(var o=0;o<t.length;o++)this.K_matrix[t[n]][t[o]]=i*Math.pow(e[t[n]][t[o]],-2)}}},{key:"_createE_matrix",value:function(){var e=this.body.nodeIndices,t=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<e.length;i++)this.E_matrix[e[i]]=[];for(var n=0;n<e.length;n++){for(var o=e[n],s=t[o].x,r=t[o].y,a=0,d=0,h=n;h<e.length;h++){var l=e[h];if(l!==o){var u=t[l].x,c=t[l].y,f=1/Math.sqrt(Math.pow(s-u,2)+Math.pow(r-c,2));this.E_matrix[o][h]=[this.K_matrix[o][l]*(s-u-this.L_matrix[o][l]*(s-u)*f),this.K_matrix[o][l]*(r-c-this.L_matrix[o][l]*(r-c)*f)],this.E_matrix[l][n]=this.E_matrix[o][h],a+=this.E_matrix[o][h][0],d+=this.E_matrix[o][h][1]}}this.E_sums[o]=[a,d]}}},{key:"_updateE_matrix",value:function(e){for(var t=this.body.nodeIndices,i=this.body.nodes,n=this.E_matrix[e],o=this.K_matrix[e],s=this.L_matrix[e],r=i[e].x,a=i[e].y,d=0,h=0,l=0;l<t.length;l++){var u=t[l];if(u!==e){var c=n[l],f=c[0],p=c[1],v=i[u].x,g=i[u].y,y=1/Math.sqrt(Math.pow(r-v,2)+Math.pow(a-g,2)),m=o[u]*(r-v-s[u]*(r-v)*y),b=o[u]*(a-g-s[u]*(a-g)*y);n[l]=[m,b],d+=m,h+=b;var _=this.E_sums[u];_[0]+=m-f,_[1]+=b-p}}this.E_sums[e]=[d,h]}}]),e}();t.default=c},function(e,t,i){function n(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=i(0),s=n(o),r=i(1),a=n(r),d=function(){function e(){(0,s.default)(this,e)}return(0,a.default)(e,[{key:"getDistances",value:function(e,t,i){for(var n={},o=e.edges,s=0;s<t.length;s++){var r=t[s],a={};n[r]=a;for(var d=0;d<t.length;d++)a[t[d]]=s==d?0:1e9}for(var h=0;h<i.length;h++){var l=o[i[h]];!0===l.connected&&void 0!==n[l.fromId]&&void 0!==n[l.toId]&&(n[l.fromId][l.toId]=1,n[l.toId][l.fromId]=1)}for(var u=t.length,c=0;c<u;c++)for(var f=t[c],p=n[f],v=0;v<u-1;v++)for(var g=t[v],y=n[g],m=v+1;m<u;m++){var b=t[m],_=n[b],w=Math.min(y[b],y[f]+p[b]);y[b]=w,_[g]=w}return n}}]),e}();t.default=d}])});
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.css b/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..eeacbd802d3051abac6cd703ce32c969f54ff7b6
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.css
@@ -0,0 +1 @@
+.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"\26F6"}.vis-rolling-mode-btn:hover{opacity:1}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-nested-group{background:#f5f5f5}.vis-label.vis-nesting-group.expanded:before{content:"\25BC"}.vis-label.vis-nesting-group.collapsed-rtl:before{content:"\25C0"}.vis-label.vis-nesting-group.collapsed:before{content:"\25B6"}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.js b/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cfa0da3d4f38b08a63485c682ed21b723563d83
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis-timeline-graph2d.min.js
@@ -0,0 +1,30 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=85)}([function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i,o){var n=!1;!0===o&&(n=null===e[i]&&void 0!==t[i]),n?delete t[i]:t[i]=e[i]}var s=i(86),r=o(s),a=i(43),h=o(a),d=i(4),l=o(d),u=i(1),p=o(u),c=i(3),m=i(126);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(f.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return m.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,p.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var s in t)void 0!==i[s]&&(null===i[s]||"object"!==(0,p.default)(i[s])?n(t,i,s,o):"object"===(0,p.default)(t[s])&&e.fillIfDefined(t[s],i[s],o))},e.extend=function(t,e){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n])}return t},e.selectiveExtend=function(t,e,i){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var o=2;o<arguments.length;o++)for(var n=arguments[o],s=0;s<t.length;s++){var r=t[s];n&&n.hasOwnProperty(r)&&(e[r]=n[r])}return e},e.selectiveDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r=0;r<t.length;r++){var a=t[r];if(o.hasOwnProperty(a))if(o[a]&&o[a].constructor===Object)void 0===i[a]&&(i[a]={}),i[a].constructor===Object?e.deepExtend(i[a],o[a],!1,s):n(i,o,a,s);else{if(Array.isArray(o[a]))throw new TypeError("Arrays are not supported by deepExtend");n(i,o,a,s)}}return i},e.selectiveNotDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r in o)if(o.hasOwnProperty(r)&&-1===t.indexOf(r))if(o[r]&&o[r].constructor===Object)void 0===i[r]&&(i[r]={}),i[r].constructor===Object?e.deepExtend(i[r],o[r]):n(i,o,r,s);else if(Array.isArray(o[r])){i[r]=[];for(var a=0;a<o[r].length;a++)i[r].push(o[r][a])}else n(i,o,r,s);return i},e.deepExtend=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var r in i)if(i.hasOwnProperty(r)||!0===o)if(i[r]&&i[r].constructor===Object)void 0===t[r]&&(t[r]={}),t[r].constructor===Object?e.deepExtend(t[r],i[r],o):n(t,i,r,s);else if(Array.isArray(i[r])){t[r]=[];for(var a=0;a<i[r].length;a++)t[r].push(i[r][a])}else n(t,i,r,s);return t},e.equalArray=function(t,e){if(t.length!=e.length)return!1;for(var i=0,o=t.length;i<o;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var o;if(void 0!==t){if(null===t)return null;if(!i)return t;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return e.isString(t)&&!isNaN(Date.parse(t))?c(t).valueOf():Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(c.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return o=f.exec(t),o?new Date(Number(o[1])):c(new Date(t)).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return c(t);if(t instanceof Date)return c(t.valueOf());if(c.isMoment(t))return c(t);if(e.isString(t))return o=f.exec(t),c(o?Number(o[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(c.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return o=f.exec(t),o?new Date(Number(o[1])).toISOString():c(t).format();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){o=f.exec(t);return"/Date("+(o?new Date(Number(o[1])).valueOf():new Date(t).valueOf())+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var f=/^\/?Date\((\-?\d+)/i;e.getType=function(t){var e=void 0===t?"undefined":(0,p.default)(t);return"object"==e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var i=[],o=0;o<t.length;o++)i.push(t[o]);return i.push(e),i},e.copyArray=function(t){for(var e=[],i=0;i<t.length;i++)e.push(t[i]);return e},e.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left},e.getAbsoluteRight=function(t){return t.getBoundingClientRect().right},e.getAbsoluteTop=function(t){return t.getBoundingClientRect().top},e.addClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.concat(o.filter(function(t){return i.indexOf(t)<0})),t.className=i.join(" ")},e.removeClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.filter(function(t){return o.indexOf(t)<0}),t.className=i.join(" ")},e.forEach=function(t,e){var i,o;if(Array.isArray(t))for(i=0,o=t.length;i<o;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},e.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.updateProperty=function(t,e,i){return t[e]!==i&&(t[e]=i,!0)},e.throttle=function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame(function(){e=!1,t()}))}},e.addEventListener=function(t,e,i,o){t.addEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){var o;return-1!=t.indexOf("rgba")?t:-1!=t.indexOf("rgb")?(o=t.substr(t.indexOf("(")+1).replace(")","").split(","),"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"):(o=e.hexToRGB(t),null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")")},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var g={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,l.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=g.split(t.style.cssText),n=g.split(i),s=e.extend(o,n);t.style.cssText=g.join(s)},e.removeCssText=function(t,e){var i=g.split(t.style.cssText),o=g.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=g.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if(null!==i&&"object"===(void 0===i?"undefined":(0,p.default)(i))){for(var o=(0,h.default)(i),n=0;n<t.length;n++)i.hasOwnProperty(t[n])&&"object"==(0,p.default)(i[t[n]])&&(o[t[n]]=e.bridgeObject(i[t[n]]));return o}return null},e.bridgeObject=function(t){if(null!==t&&"object"===(void 0===t?"undefined":(0,p.default)(t))){var i=(0,h.default)(t);if(t instanceof Element)i=t;else{i=(0,h.default)(t);for(var o in t)t.hasOwnProperty(o)&&"object"==(0,p.default)(t[o])&&(i[o]=e.bridgeObject(t[o]))}return i}return null},e.insertSort=function(t,e){for(var i=0;i<t.length;i++){for(var o=t[i],n=i;n>0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=function(t){return null!==t&&void 0!==t},s=function(t){return null!==t&&"object"===(void 0===t?"undefined":(0,p.default)(t))};if(!s(t))throw new Error("Parameter mergeTarget must be an object");if(!s(e))throw new Error("Parameter options must be an object");if(!n(i))throw new Error("Parameter option must have a value");if(!s(o))throw new Error("Parameter globalOptions must be an object");var r=e[i],a=s(o)&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(o),d=a?o[i]:void 0,l=d?d.enabled:void 0;if(void 0!==r){if("boolean"==typeof r)return s(t[i])||(t[i]={}),void(t[i].enabled=r);if(null===r&&!s(t[i])){if(!n(d))return;t[i]=(0,h.default)(d)}if(s(r)){var u=!0;void 0!==r.enabled?u=r.enabled:void 0!==l&&(u=d.enabled),function(t,e,i){s(t[i])||(t[i]={});var o=e[i],n=t[i];for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])}(t,e,i),t[i].enabled=u}}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){var s,r,a,h,d=0,l=0,u=t.length-1;for(n=void 0!=n?n:function(t,e){return t==e?0:t<e?-1:1};l<=u&&d<1e4;){if(h=Math.floor(.5*(u+l)),s=t[Math.max(0,h-1)][i],r=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==n(r,e))return h;if(n(s,e)<0&&n(r,e)>0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,s=void 0;try{for(var a,h=(0,r.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l<e.length;l++)i&&(i=i[e[l]]);if(void 0!==i)break}}}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(110),s=o(n),r=i(112),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return void 0===t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":void 0===t?"undefined":h(t)}},function(t,e){var i=t.exports={version:"2.5.1"};"number"==typeof __e&&(__e=i)},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(123)},function(t,e,i){t.exports={default:i(107),__esModule:!0}},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(0);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=o},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e,i){var o=i(40)("wks"),n=i(27),s=i(6).Symbol,r="function"==typeof s;(t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))}).store=o},function(t,e,i){var o=i(18),n=i(57),s=i(36),r=Object.defineProperty;e.f=i(9)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){t.exports=!i(19)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}},e.resetElements=function(t){e.prepareElements(t),e.cleanupElements(t),e.prepareElements(t)},e.getSVGElement=function(t,e,i){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(){var t=function(){};return{on:t,off:t,destroy:t,emit:t,get:function(e){return{set:t}}}}if("undefined"!=typeof window){var n=i(130),s=window.Hammer||i(131);t.exports=n(s,{preventDefault:"mouse"})}else t.exports=function(){return o()}},function(t,e,i){var o=i(91),n=i(34);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(8),n=i(25);t.exports=i(9)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=(0,l.default)(this._options.type),o=0,n=i.length;o<n;o++){var s=i[o],r=this._options.type[s];this._type[s]="Date"==r||"ISODate"==r||"ASPDate"==r?"Date":r}this._subscribers={},t&&this.add(t),this.setOptions(e)}var s=i(16),r=o(s),a=i(1),h=o(a),d=i(4),l=o(d),u=i(0),p=i(65);n.prototype.setOptions=function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=p.extend(this,{replace:["add","update","remove"]})),"object"===(0,h.default)(t.queue)&&this._queue.setOptions(t.queue)))},n.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},n.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},n.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var o=[];t in this._subscribers&&(o=o.concat(this._subscribers[t])),"*"in this._subscribers&&(o=o.concat(this._subscribers["*"]));for(var n=0,s=o.length;n<s;n++){var r=o[n];r.callback&&r.callback(t,e,i||null)}},n.prototype.add=function(t,e){var i,o=[],n=this;if(Array.isArray(t))for(var s=0,r=t.length;s<r;s++)i=n._addItem(t[s]),o.push(i);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");i=n._addItem(t),o.push(i)}return o.length&&this._trigger("add",{items:o},e),o},n.prototype.update=function(t,e){var i=[],o=[],n=[],s=[],r=this,a=r._fieldId,d=function(t){var e=t[a];if(r._data[e]){var h=u.extend({},r._data[e]);e=r._updateItem(t),o.push(e),s.push(t),n.push(h)}else e=r._addItem(t),i.push(e)};if(Array.isArray(t))for(var l=0,p=t.length;l<p;l++)t[l]&&"object"===(0,h.default)(t[l])?d(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");d(t)}if(i.length&&this._trigger("add",{items:i},e),o.length){var c={items:o,oldData:n,data:s};this._trigger("update",c,e)}return i.concat(o)},n.prototype.get=function(t){var e,i,o,n=this,s=u.getType(arguments[0]);"String"==s||"Number"==s?(e=arguments[0],o=arguments[1]):"Array"==s?(i=arguments[0],o=arguments[1]):o=arguments[0];var r;if(o&&o.returnType){r=-1==["Array","Object"].indexOf(o.returnType)?"Array":o.returnType}else r="Array";var a,h,d,p,c,m=o&&o.type||this._options.type,f=o&&o.filter,g=[];if(void 0!=e)(a=n._getItem(e,m))&&f&&!f(a)&&(a=null);else if(void 0!=i)for(p=0,c=i.length;p<c;p++)a=n._getItem(i[p],m),f&&!f(a)||g.push(a);else for(h=(0,l.default)(this._data),p=0,c=h.length;p<c;p++)d=h[p],a=n._getItem(d,m),f&&!f(a)||g.push(a);if(o&&o.order&&void 0==e&&this._sort(g,o.order),o&&o.fields){var v=o.fields;if(void 0!=e)a=this._filterFields(a,v);else for(p=0,c=g.length;p<c;p++)g[p]=this._filterFields(g[p],v)}if("Object"==r){var y,b={};for(p=0,c=g.length;p<c;p++)y=g[p],b[y.id]=y;return b}return void 0!=e?a:g},n.prototype.getIds=function(t){var e,i,o,n,s,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,u=(0,l.default)(r),p=[];if(a)if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&s.push(n);for(this._sort(s,h),e=0,i=s.length;e<i;e++)p.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&p.push(n[this._fieldId]);else if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;e<i;e++)p.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=r[o],p.push(n[this._fieldId]);return p},n.prototype.getDataSet=function(){return this},n.prototype.forEach=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=this._data,d=(0,l.default)(h);if(e&&e.order){var u=this.get(e);for(i=0,o=u.length;i<o;i++)n=u[i],s=n[this._fieldId],t(n,s)}else for(i=0,o=d.length;i<o;i++)s=d[i],n=this._getItem(s,a),r&&!r(n)||t(n,s)},n.prototype.map=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=[],d=this._data,u=(0,l.default)(d);for(i=0,o=u.length;i<o;i++)n=u[i],s=this._getItem(n,a),r&&!r(s)||h.push(t(s,n));return e&&e.order&&this._sort(h,e.order),h},n.prototype._filterFields=function(t,e){if(!t)return t;var i,o,n={},s=(0,l.default)(t),r=s.length;if(Array.isArray(e))for(i=0;i<r;i++)o=s[i],-1!=e.indexOf(o)&&(n[o]=t[o]);else for(i=0;i<r;i++)o=s[i],e.hasOwnProperty(o)&&(n[e[o]]=t[o]);return n},n.prototype._sort=function(t,e){if(u.isString(e)){var i=e;t.sort(function(t,e){var o=t[i],n=e[i];return o>n?1:o<n?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},n.prototype.remove=function(t,e){var i,o,n,s,r=[],a=[],h=[];for(h=Array.isArray(t)?t:[t],i=0,o=h.length;i<o;i++)(s=this._remove(h[i]))&&void 0!=(n=s[this._fieldId])&&(r.push(n),a.push(s));return r.length&&this._trigger("remove",{items:r,oldData:a},e),r},n.prototype._remove=function(t){var e,i;return u.isNumber(t)||u.isString(t)?i=t:t&&"object"===(void 0===t?"undefined":(0,h.default)(t))&&(i=t[this._fieldId]),void 0!==i&&this._data[i]?(e=this._data[i],delete this._data[i],this.length--,e):null},n.prototype.clear=function(t){var e,i,o=(0,l.default)(this._data),n=[];for(e=0,i=o.length;e<i;e++)n.push(this._data[o[e]]);return this._data={},this.length=0,this._trigger("remove",{items:o,oldData:n},t),o},n.prototype.max=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d>r)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d<r)&&(s=h,r=d)}return s},n.prototype.distinct=function(t){var e,i,o,n=this._data,s=(0,l.default)(n),r=[],a=this._options.type&&this._options.type[t]||null,h=0;for(e=0,o=s.length;e<o;e++){var d=s[e],p=n[d],c=p[t],m=!1;for(i=0;i<h;i++)if(r[i]==c){m=!0;break}m||void 0===c||(r[h]=c,h++)}if(a)for(e=0,o=r.length;e<o;e++)r[e]=u.convert(r[e],a);return r},n.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=u.randomUUID(),t[this._fieldId]=e;var i,o,n={},s=(0,l.default)(t);for(i=0,o=s.length;i<o;i++){var r=s[i],a=this._type[r];n[r]=u.convert(t[r],a)}return this._data[e]=n,this.length++,e},n.prototype._getItem=function(t,e){var i,o,n,s,r=this._data[t];if(!r)return null;var a={},h=(0,l.default)(r);if(e)for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=u.convert(o,e[i]);else for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=o;return a[this._fieldId]||(a[this._fieldId]=r.id),a},n.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+(0,r.default)(t)+")");var i=this._data[e];if(!i)throw new Error("Cannot update item: no item with id "+e+" found");for(var o=(0,l.default)(t),n=0,s=o.length;n<s;n++){var a=o[n],h=this._type[a];i[a]=u.convert(t[a],h)}return e},t.exports=n},function(t,e,i){t.exports={default:i(128),__esModule:!0}},function(t,e,i){var o=i(6),n=i(2),s=i(92),r=i(14),a=function(t,e,i){var h,d,l,u=t&a.F,p=t&a.G,c=t&a.S,m=t&a.P,f=t&a.B,g=t&a.W,v=p?n:n[e]||(n[e]={}),y=v.prototype,b=p?o:c?o[e]:(o[e]||{}).prototype;p&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in v||(l=d?b[h]:i[h],v[h]=p&&"function"!=typeof b[h]?i[h]:f&&d?s(l,o):g&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):m&&"function"==typeof l?s(Function.call,l):l,m&&((v.virtual||(v.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e,i){var o=i(24);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){function o(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var n=i(4),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(15);o.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;o<n;o++)s.push(this._data._data[e[o]]);this._ids={},this.length=0,this._trigger("remove",{items:e,oldData:s})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),o=0,n=e.length;o<n;o++)i=e[o],this._ids[i]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){var t,e,i,o=this._data.getIds({filter:this._options&&this._options.filter}),n=(0,s.default)(this._ids),r={},a=[],h=[],d=[];for(e=0,i=o.length;e<i;e++)t=o[e],r[t]=!0,this._ids[t]||(a.push(t),this._ids[t]=!0);for(e=0,i=n.length;e<i;e++)t=n[e],r[t]||(h.push(t),d.push(this._data._data[t]),delete this._ids[t]);this.length+=a.length-h.length,a.length&&this._trigger("add",{items:a}),h.length&&this._trigger("remove",{items:h,oldData:d})},o.prototype.get=function(t){var e,i,o,n=this,s=r.getType(arguments[0]);"String"==s||"Number"==s||"Array"==s?(e=arguments[0],i=arguments[1],o=arguments[2]):(i=arguments[0],o=arguments[1]);var a=r.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(t){return n._options.filter(t)&&i.filter(t)});var h=[];return void 0!=e&&h.push(e),h.push(a),h.push(o),this._data&&this._data.get.apply(this._data,h)},o.prototype.getIds=function(t){var e;if(this._data){var i,o=this._options.filter;i=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},o.prototype.map=function(t,e){var i=[];if(this._data){var o,n=this._options.filter;o=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,i=this._data.map(t,{filter:o,order:e&&e.order})}else i=[];return i},o.prototype.getDataSet=function(){for(var t=this;t instanceof o;)t=t._data;return t||null},o.prototype._onEvent=function(t,e,i){var o,n,s,r,a=e&&e.items,h=[],d=[],l=[],u=[],p=[],c=[];if(a&&this._data){switch(t){case"add":for(o=0,n=a.length;o<n;o++)s=a[o],(r=this.get(s))&&(this._ids[s]=!0,h.push(s));break;case"update":for(o=0,n=a.length;o<n;o++)s=a[o],r=this.get(s),r?this._ids[s]?(d.push(s),p.push(e.data[o]),u.push(e.oldData[o])):(this._ids[s]=!0,h.push(s)):this._ids[s]&&(delete this._ids[s],l.push(s),c.push(e.oldData[o]));break;case"remove":for(o=0,n=a.length;o<n;o++)s=a[o],this._ids[s]&&(delete this._ids[s],l.push(s),c.push(e.oldData[o]))}this.length+=h.length-l.length,h.length&&this._trigger("add",{items:h},i),d.length&&this._trigger("update",{items:d,oldData:u,data:p},i),l.length&&this._trigger("remove",{items:l,oldData:c},i)}},o.prototype.on=a.prototype.on,o.prototype.off=a.prototype.off,o.prototype._trigger=a.prototype._trigger,o.prototype.subscribe=o.prototype.on,o.prototype.unsubscribe=o.prototype.off,t.exports=o},function(t,e,i){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n<o.length;n++)if(void 0===o[n].repeat){var s={};s.start=t(o[n].start).toDate().valueOf(),s.end=t(o[n].end).toDate().valueOf(),i.hiddenDates.push(s)}i.hiddenDates.sort(function(t,e){return t.start-e.start})}},e.updateHiddenDates=function(t,i,o){if(o&&!Array.isArray(o))return e.updateHiddenDates(t,i,[o]);if(o&&void 0!==i.domProps.centerContainer.width){e.convertHiddenOptions(t,i,o);for(var n=t(i.range.start),s=t(i.range.end),r=i.range.end-i.range.start,a=r/i.domProps.centerContainer.width,h=0;h<o.length;h++)if(void 0!==o[h].repeat){var d=t(o[h].start),l=t(o[h].end);if("Invalid Date"==d._d)throw new Error("Supplied start date is not valid: "+o[h].start);if("Invalid Date"==l._d)throw new Error("Supplied end date is not valid: "+o[h].end);var u=l-d;if(u>=4*a){var p=0,c=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(p=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-p,"days"),c.add(1,"weeks");break;case"weekly":var m=l.diff(d,"days"),f=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(f),l.day(f),l.add(m,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),c.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(p=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(p,"months"),c.add(1,"months");break;case"yearly":d.year()!=l.year()&&(p=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(p,"years"),c.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d<c;)switch(i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),o[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(i);var g=e.isHidden(i.range.start,i.hiddenDates),v=e.isHidden(i.range.end,i.hiddenDates),y=i.range.start,b=i.range.end;1==g.hidden&&(y=1==i.range.startToFront?g.startDate-1:g.endDate+1),1==v.hidden&&(b=1==i.range.endToFront?v.startDate-1:v.endDate+1),1!=g.hidden&&1!=v.hidden||i.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],o=0;o<e.length;o++)for(var n=0;n<e.length;n++)o!=n&&1!=e[n].remove&&1!=e[o].remove&&(e[n].start>=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(o=0;o<e.length;o++)!0!==e[o].remove&&i.push(e[o]);t.hiddenDates=i,t.hiddenDates.sort(function(t,e){return t.start-e.start})},e.printDates=function(t){for(var e=0;e<t.length;e++)console.log(e,new Date(t[e].start),new Date(t[e].end),t[e].start,t[e].end,t[e].remove)},e.stepOverHiddenDates=function(t,e,i){for(var o=!1,n=e.current.valueOf(),s=0;s<e.hiddenDates.length;s++){var r=e.hiddenDates[s].start,a=e.hiddenDates[s].end;if(n>=r&&n<a){o=!0;break}}if(1==o&&n<e._end.valueOf()&&n!=i){var h=t(i),d=t(a);h.year()!=d.year()?e.switchedYear=!0:h.month()!=d.month()?e.switchedMonth=!0:h.dayOfYear()!=d.dayOfYear()&&(e.switchedDay=!0),e.current=d}},e.toScreen=function(t,i,o){var n;if(0==t.body.hiddenDates.length)return n=t.range.conversion(o),(i.valueOf()-n.offset)*n.scale;var s=e.isHidden(i,t.body.hiddenDates);1==s.hidden&&(i=s.startDate);var r=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end);if(i<t.range.start){n=t.range.conversion(o,r);var a=e.getHiddenDurationBeforeStart(t.body.hiddenDates,i,n.offset);return i=t.options.moment(i).toDate().valueOf(),i+=a,-(n.offset-i.valueOf())*n.scale}if(i>t.range.end){var h={start:t.range.start,end:i};return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale}return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a);return new Date(h+a+t.range.start)},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<i&&(o+=r-s)}return o},e.getHiddenDurationBeforeStart=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<=i&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s<e.length;s++){var r=e[s].start,a=e[s].end;r>=i.start&&a<i.end&&o>=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r<t.length;r++){var a=t[r].start,h=t[r].end;if(a>=e.start&&h<e.end){if(n+=a-s,s=h,n>=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?o<0?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i<e.length;i++){var o=e[i].start,n=e[i].end;if(t>=o&&t<n)return{hidden:!0,startDate:o,endDate:n}}return{hidden:!1,startDate:o,endDate:n}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(1),r=o(s),a=i(4),h=o(a),d=i(12),l=i(0),u=i(3);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){void 0!=t.group&&this.data.group!=t.group&&null!=this.parent&&this.parent.itemSet._moveToGroup(this,t.group),this.parent&&(this.parent.stackDirty=!0),void 0!=t.subgroup&&this.data.subgroup!=t.subgroup&&null!=this.parent&&this.parent.changeSubgroup(this,this.data.subgroup,t.subgroup),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this;var i=new d(e);i.on("tap",function(e){t.parent.itemSet.body.emitter.emit("click",{event:e,item:t.id})}),i.on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t),t.parent.itemSet.body.emitter.emit("doubleClick",{event:e,item:t.id})}),this.dom.box?this.dom.dragLeft?this.dom.box.insertBefore(e,this.dom.dragLeft):this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(o).on("tap",function(t){t.stopPropagation(),i.parent.removeFromDataSet(i)}),t.appendChild(o),this.dom.deleteButton=o}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||!0===this.data.editable)&&!1!==this.data.editable;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;o+this.parent.top-50<-n?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var s,r;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(r=this.options.tooltipOnItemUpdateTime.template.bind(this),s=r(this.data)):(s="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(s+="<br> end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=s}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else if(this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o)){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else if(this._contentToString(this.content)!==this._contentToString(e)){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},n.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=(0,h.default)(this.data)}for(var i=0;i<e.length;i++){var o=e[i],n=this.data[o];null!=n?t.setAttribute("data-"+o,n):t.removeAttribute("data-"+o)}}},n.prototype._updateStyle=function(t){this.style&&(l.removeCssText(t,this.style),this.style=null),this.data.style&&(l.addCssText(t,this.data.style),this.style=this.data.style)},n.prototype._contentToString=function(t){return"string"==typeof t?t:t&&"outerHTML"in t?t.outerHTML:t},n.prototype._updateEditStatus=function(){this.options&&("boolean"==typeof this.options.editable?this.editable={updateTime:this.options.editable,updateGroup:this.options.editable,remove:this.options.editable}:"object"===(0,r.default)(this.options.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.options.editable))),this.options&&this.options.editable&&!0===this.options.editable.overrideItems||this.data&&("boolean"==typeof this.data.editable?this.editable={updateTime:this.data.editable,updateGroup:this.data.editable,remove:this.data.editable}:"object"===(0,r.default)(this.data.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.data.editable)))},n.prototype.getWidthLeft=function(){return 0},n.prototype.getWidthRight=function(){return 0},n.prototype.getTitle=function(){return this.data.title},t.exports=n},function(t,e){t.exports={}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,i){var o=i(60),n=i(41);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:h.FORMAT,moment:l,timeAxis:null},this.options=r.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(1),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(5),h=i(49),d=i(21),l=i(3);o.prototype=new a,o.prototype.setOptions=function(t){t&&(r.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment","rtl"],this.options,t),r.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===(0,s.default)(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof l.locale?l.locale(t.locale):l.lang(t.locale)))},o.prototype._create=function(){this.dom.foreground=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.foreground.className="vis-time-axis vis-foreground",this.dom.background.className="vis-time-axis vis-background"},o.prototype.destroy=function(){this.dom.foreground.parentNode&&this.dom.foreground.parentNode.removeChild(this.dom.foreground),this.dom.background.parentNode&&this.dom.background.parentNode.removeChild(this.dom.background),this.body=null},o.prototype.redraw=function(){var t=this.props,e=this.dom.foreground,i=this.dom.background,o="top"==this.options.orientation.axis?this.body.dom.top:this.body.dom.bottom,n=e.parentNode!==o;this._calculateCharSize();var s=this.options.showMinorLabels&&"none"!==this.options.orientation.axis,r=this.options.showMajorLabels&&"none"!==this.options.orientation.axis;t.minorLabelHeight=s?t.minorCharHeight:0,t.majorLabelHeight=r?t.majorCharHeight:0,t.height=t.minorLabelHeight+t.majorLabelHeight,t.width=e.offsetWidth,t.minorLineHeight=this.body.domProps.root.height-t.majorLabelHeight-("top"==this.options.orientation.axis?this.body.domProps.bottom.height:this.body.domProps.top.height),t.minorLineWidth=1,t.majorLineHeight=t.minorLineHeight+t.majorLabelHeight,t.majorLineWidth=1;var a=e.nextSibling,h=i.nextSibling;return e.parentNode&&e.parentNode.removeChild(e),i.parentNode&&i.parentNode.removeChild(i),e.style.height=this.props.height+"px",this._repaintLabels(),a?o.insertBefore(e,a):o.appendChild(e),h?this.body.dom.backgroundVertical.insertBefore(i,h):this.body.dom.backgroundVertical.appendChild(i),this._isResized()||n},o.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=r.convert(this.body.range.start,"Number"),i=r.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var s=new h(new Date(e),new Date(i),n,this.body.hiddenDates,this.options);s.setMoment(this.options.moment),this.options.format&&s.setFormat(this.options.format),this.options.timeAxis&&s.setScale(this.options.timeAxis),this.step=s;var a=this.dom;a.redundant.lines=a.lines,a.redundant.majorTexts=a.majorTexts,a.redundant.minorTexts=a.minorTexts,a.lines=[],a.majorTexts=[],a.minorTexts=[];var l,p,c,m,f,g,v,y,b,_=0,w=void 0,x=0;for(s.start(),l=s.getCurrent(),c=this.body.util.toScreen(l);s.hasNext()&&x<1e3;){switch(x++,m=s.isMajor(),b=s.getClassName(),y=s.getLabelMinor(),l,p=c,s.next(),l=s.getCurrent(),s.isMajor(),c=this.body.util.toScreen(l),g=_,_=c-p,s.scale){case"week":f=!0;break;default:f=_>=.4*g}if(this.options.showMinorLabels&&f){var D=this._repaintMinorText(p,y,t,b);D.style.width=_+"px"}m&&this.options.showMajorLabels?(p>0&&(void 0==w&&(w=p),D=this._repaintMajorText(p,s.getLabelMajor(),t,b)),v=this._repaintMajorLine(p,_,t,b)):f?v=this._repaintMinorLine(p,_,t,b):v&&(v.style.width=parseInt(v.style.width)+_+"px")}if(1e3!==x||u||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to 1000 lines."),u=!0),this.options.showMajorLabels){var S=this.body.util.toTime(0),k=s.getLabelMajor(S),C=k.length*(this.props.majorCharWidth||10)+10;(void 0==w||C<w)&&this._repaintMajorText(0,k,t,b)}r.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},o.prototype._repaintMinorText=function(t,e,i,o){var n=this.dom.redundant.minorTexts.shift();if(!n){var s=document.createTextNode("");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.minorTexts.push(n),n.innerHTML=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",n.className="vis-text vis-minor "+o,n},o.prototype._repaintMajorText=function(t,e,i,o){var n=this.dom.redundant.majorTexts.shift();if(!n){var s=document.createElement("div");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return n.childNodes[0].innerHTML=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",this.dom.majorTexts.push(n),n},o.prototype._repaintMinorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-minor "+o):(n.style.left=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-minor "+o),n.style.width=e+"px",n},o.prototype._repaintMajorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?"0":this.body.domProps.top.height+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-major "+o):(n.style.left=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-major "+o),n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="vis-text vis-major vis-measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth};var u=!1;t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={moment:a,locales:h,locale:"en",id:void 0,title:void 0},this.options=s.extend({},this.defaultOptions),e&&e.time?this.customTime=e.time:this.customTime=new Date,this.eventParams={},this.setOptions(e),this._create()}var n=i(12),s=i(0),r=i(5),a=i(3),h=i(69);o.prototype=new r,o.prototype.setOptions=function(t){t&&s.selectiveExtend(["moment","locale","locales","id"],this.options,t)},o.prototype._create=function(){function t(t){this.body.range._onMouseWheel(t)}var e=document.createElement("div");e["custom-time"]=this,e.className="vis-custom-time "+(this.options.id||""),e.style.position="absolute",e.style.top="0px",e.style.height="100%",this.bar=e;var i=document.createElement("div");i.style.position="relative",i.style.top="0px",i.style.left="-10px",i.style.height="100%",i.style.width="20px",i.addEventListener?(i.addEventListener("mousewheel",t.bind(this),!1),i.addEventListener("DOMMouseScroll",t.bind(this),!1)):i.attachEvent("onmousewheel",t.bind(this)),e.appendChild(i),this.hammer=new n(i),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:n.DIRECTION_HORIZONTAL})},o.prototype.destroy=function(){this.hide(),this.hammer.destroy(),this.hammer=null,this.body=null},o.prototype.redraw=function(){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale];i||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),i=this.options.locales.en);var o=this.options.title;return void 0===o?(o=i.time+": "+this.options.moment(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss"),o=o.charAt(0).toUpperCase()+o.substring(1)):"function"==typeof o&&(o=o.call(this.customTime)),this.bar.style.left=e+"px",this.bar.title=o,!1},o.prototype.hide=function(){this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar)},o.prototype.setCustomTime=function(t){this.customTime=s.convert(t,"Date"),this.redraw()},o.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},o.prototype.setCustomTitle=function(t){this.options.title=t},o.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation()},o.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=this.body.util.toScreen(this.eventParams.customTime)+t.deltaX,i=this.body.util.toTime(e);this.setCustomTime(i),this.body.emitter.emit("timechange",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation()}},o.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation())},o.customTimeFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("custom-time"))return e["custom-time"];e=e.parentNode}return null},t.exports=o},function(t,e,i){e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,i){e.__esModule=!0;var o=i(134),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(){function t(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),(0,n.default)(t,o.key,o)}}return function(e,i,o){return i&&t(e.prototype,i),o&&t(e,o),e}}()},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(16),s=o(n),r=i(1),a=o(r),h=i(4),d=o(h),l=i(30),u=o(l),p=i(31),c=o(p),m=i(0),f=!1,g=void 0,v="background: #FFeeee; color: #dd0000",y=function(){function t(){(0,u.default)(this,t)}return(0,c.default)(t,null,[{key:"validate",value:function(e,i,o){f=!1,g=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),f}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){if(void 0===o[e]&&void 0===o.__any__)return void t.getSuggestion(e,o,n);var s=e,r=!0;void 0===o[e]&&void 0!==o.__any__&&(s="__any__",r="object"===t.getType(i[e]));var a=o[s];r&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,o,s,a,n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=function(i){console.log("%c"+i+t.printLocation(r,e),v)},h=t.getType(i[e]),l=s[h];void 0!==l?"array"===t.getType(l)&&-1===l.indexOf(i[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(l)+' not "'+i[e]+'". '),f=!0):"object"===h&&"__any__"!==n&&(r=m.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print((0,d.default)(s))+". Received ["+h+'] "'+i[e]+'"'),f=!0)}},{key:"getType",value:function(t){var e=void 0===t?"undefined":(0,a.default)(t);return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,g,[],!0),r=void 0;r=void 0!==n.indexMatch?" in "+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n':s.distance<=4&&n.distance>s.distance?" in "+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):n.distance<=8?'. Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e):". Did you mean one of these: "+t.print((0,d.default)(i))+t.printLocation(o,e),console.log('%cUnknown option detected: "'+e+'"'+r,v),f=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&!0===n){var p=t.findInOptions(e,i[l],m.copyAndExtendArray(o,l));s>p.distance&&(r=p.closestMatch,a=p.path,s=p.distance,d=p.indexMatch)}else-1!==l.toLowerCase().indexOf(h)&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=m.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n<t.length;n++){for(var s=0;s<n+1;s++)o+="  ";o+=t[n]+": {\n"}for(var r=0;r<t.length+1;r++)o+="  ";o+=e+"\n";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)o+="  ";o+="}\n"}return o+"\n\n"}},{key:"print",value:function(t){return(0,s.default)(t).replace(/(\")|(\[)|(\])|(,"__type__")/g,"").replace(/(\,)/g,", ")}},{key:"levenshteinDistance",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,o=[];for(i=0;i<=e.length;i++)o[i]=[i];var n;for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}();e.default=y,e.printStyle=v},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,e){t.exports=!0},function(t,e,i){var o=i(24);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e,i){var o=i(18),n=i(95),s=i(41),r=i(39)("IE_PROTO"),a=function(){},h=function(){var t,e=i(58)("iframe"),o=s.length;for(e.style.display="none",i(99).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;o--;)delete h.prototype[s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a.prototype=o(t),i=new a,a.prototype=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(40)("keys"),n=i(27);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(6),n=o["__core-js_shared__"]||(o["__core-js_shared__"]={});t.exports=function(t){return n[t]||(n[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){var o=i(8).f,n=i(10),s=i(7)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){t.exports={default:i(105),__esModule:!0}},function(t,e,i){e.f=i(7)},function(t,e,i){var o=i(6),n=i(2),s=i(35),r=i(44),a=i(8).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){var i=c().hours(0).minutes(0).seconds(0).milliseconds(0),o=i.clone().add(-3,"days").valueOf(),n=i.clone().add(3,"days").valueOf();this.millisecondsPerPixelCache=void 0,void 0===e?(this.start=o,this.end=n):(this.start=e.start||o,this.end=e.end||n),this.rolling=!1,this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={rtl:!1,start:null,end:null,moment:c,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10,rollingMode:{follow:!1,offset:.5}},this.options=p.extend({},this.defaultOptions),this.props={touch:{}},this.animationTimer=null,this.body.emitter.on("panstart",this._onDragStart.bind(this)),this.body.emitter.on("panmove",this._onDrag.bind(this)),this.body.emitter.on("panend",this._onDragEnd.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.body.dom.rollingModeBtn.addEventListener("click",this.startRolling.bind(this)),this.setOptions(e)}function s(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}var r=i(4),a=o(r),h=i(16),d=o(h),l=i(1),u=o(l),p=i(0),c=i(3),m=i(5),f=i(21);n.prototype=new m,n.prototype.setOptions=function(t){if(t){var e=["animation","direction","min","max","zoomMin","zoomMax","moveable","zoomable","moment","activate","hiddenDates","zoomKey","rtl","showCurrentTime","rollingMode","horizontalScroll"];p.selectiveExtend(e,this.options,t),t.rollingMode&&t.rollingMode.follow&&this.startRolling(),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},n.prototype.startRolling=function(){function t(){e.stopRolling(),e.rolling=!0;var i=e.end-e.start,o=p.convert(new Date,"Date").valueOf(),n=o-i*e.options.rollingMode.offset,s=o+i*(1-e.options.rollingMode.offset),r={animation:!1};e.setRange(n,s,r),i=1/e.conversion(e.body.domProps.center.width).scale/10,i<30&&(i=30),i>1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){i||(i={}),!0!==i.byUser&&(i.byUser=!1);var s=this,r=void 0!=t?p.convert(t,"Date").valueOf():null,h=void 0!=e?p.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),this.millisecondsPerPixelCache=void 0,i.animation){var l=this.start,c=this.end,m="object"===(0,u.default)(i.animation)&&"duration"in i.animation?i.animation.duration:500,g="object"===(0,u.default)(i.animation)&&"easingFunction"in i.animation?i.animation.easingFunction:"easeInOutQuad",v=p.easingFunctions[g];if(!v)throw new Error("Unknown easing function "+(0,d.default)(g)+". Choose from: "+(0,a.default)(p.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1;return function t(){if(!s.props.touch.dragging){var e=(new Date).valueOf(),a=e-y,d=v(a/m),u=a>m,p=u||null===r?r:l+(r-l)*d,g=u||null===h?h:c+(h-c)*d;_=s._applyRange(p,g),f.updateHiddenDates(s.options.moment,s.body,s.options.hiddenDates),b=b||_;var w={start:new Date(s.start),end:new Date(s.end),byUser:i.byUser,event:i.event};if(n&&n(d,_,u),_&&s.body.emitter.emit("rangechange",w),u){if(b&&(s.body.emitter.emit("rangechanged",w),o))return o()}else s.animationTimer=setTimeout(t,20)}}()}var _=this._applyRange(r,h);if(f.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:i.byUser,event:i.event};if(this.body.emitter.emit("rangechange",w),clearTimeout(s.timeoutID),s.timeoutID=setTimeout(function(){s.body.emitter.emit("rangechanged",w)},200),o)return o()}},n.prototype.getMillisecondsPerPixel=function(){return void 0===this.millisecondsPerPixelCache&&(this.millisecondsPerPixelCache=(this.end-this.start)/this.body.dom.center.clientWidth),this.millisecondsPerPixelCache},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?p.convert(t,"Date").valueOf():this.start,n=null!=e?p.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?p.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?p.convert(this.options.min,"Date").valueOf():null;if(isNaN(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(n<o&&(n=o),null!==r&&o<r&&(i=r-o,o+=i,n+=i,null!=s&&n>s&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o<r&&(o=r)),null!==this.options.zoomMin){var a=parseFloat(this.options.zoomMin);if(a<0&&(a=0),n-o<a){this.end-this.start===a&&o>=this.start-.5&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var h=parseFloat(this.options.zoomMax);h<0&&(h=0),n-o>h&&(this.end-this.start===h&&o<this.start&&n>this.end?(o=this.start,n=this.end):(i=n-o-h,o+=i/2,n-=i/2))}var d=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,d},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start;o-=f.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);var n,r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;n=this.options.rtl?i/r*o:-i/r*o;var a=this.props.touch.start+n,h=this.props.touch.end+n,d=f.snapAwayFromHidden(this.body.hiddenDates,a,this.previousDelta-i,!0),l=f.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0);if(d!=a||l!=h)return this.deltaDifference+=i,this.props.touch.start=d,this.props.touch.end=l,void this._onDrag(t);this.previousDelta=i,this._applyRange(a,h);var u=new Date(this.start),p=new Date(this.end);this.body.emitter.emit("rangechange",{start:u,end:p,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.prototype._onDragEnd=function(t){this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end),byUser:!0,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),!(this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable)&&this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var i;i=e<0?1-e/5:1/(1+e/5);var o;if(this.rolling)o=this.start+(this.end-this.start)*this.options.rollingMode.offset;else{var n=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);o=this._pointerToDate(n)}this.zoom(i,o,e,t),t.preventDefault()}},n.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0,p.preventDefault(t)},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){p.preventDefault(t),this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=f.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=f.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=f.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=f.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d);var l={animation:!1,byUser:!0,event:t};this.setRange(r,a,l),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e,i=t.center?t.center.x:t.clientX;e=this.options.rtl?i-p.getAbsoluteLeft(this.body.dom.centerContainer):p.getAbsoluteRight(this.body.dom.centerContainer)-i;var o=this.body.util.toTime(e);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:p.getAbsoluteRight(e)-t.x,y:t.y-p.getAbsoluteTop(e)}:{x:t.x-p.getAbsoluteLeft(e),y:t.y-p.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=f.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=f.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0);var d=f.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=f.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l);var u={animation:!1,byUser:!0,event:o};this.setRange(a,h,u),this.startToFront=!1,this.endToFront=!0},n.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},n.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:null};this.setRange(o,n,s)},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){}var s=i(16),r=o(s),a=i(1),h=o(a),d=i(66),l=i(12),u=i(67),p=i(0),c=i(28),m=i(132),f=i(21),g=i(29);d(n.prototype),n.prototype._create=function(t){function e(t){this.isActive()&&this.emit("mousewheel",t);var e=0,i=0;if("detail"in t&&(i=-1*t.detail),"wheelDelta"in t&&(i=t.wheelDelta),"wheelDeltaY"in t&&(i=t.wheelDeltaY),"wheelDeltaX"in t&&(e=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=-1*i,i=0),"deltaY"in t&&(i=-1*t.deltaY),"deltaX"in t&&(e=t.deltaX),this.options.zoomKey&&!t[this.options.zoomKey])if(t.preventDefault(),this.options.verticalScroll&&Math.abs(i)>=Math.abs(e)){var o=this.props.scrollTop,n=o+i;this.isActive()&&(this._setScrollTop(n),this._redraw(),this.emit("scroll",t))}else if(this.options.horizontalScroll){var s=Math.abs(e)>=Math.abs(i)?e:i,r=s/120*(this.range.end-this.range.start)/20,a=this.range.start+r,h=this.range.end+r,d={animation:!1,byUser:!0,event:t};this.range.setRange(a,h,d)}}function i(t){if(s.options.verticalScroll&&(t.preventDefault(),s.isActive())){var e=-t.target.scrollTop;s._setScrollTop(e),s._redraw(),s.emit("scrollSide",t)}}function o(t){if(t.preventDefault&&t.preventDefault(),!(!t.target.className.indexOf("vis")>-1||a))return t.dataTransfer.dropEffect="move",a=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e||!e.content)return}catch(t){return!1}return a=!1,t.center={x:t.clientX,y:t.clientY},"item"!==e.target?s.itemSet._onAddItem(t):s.itemSet._onDropObjectOnItem(t),s.emit("drop",s.getEventProperties(t)),!1}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.rollingModeBtn=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.rollingModeBtn.className="vis-rolling-mode-btn",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){!0===this.initialDrawDone&&this._redraw()}.bind(this)),this.on("rangechanged",function(){this.initialRangeChangeDone||(this.initialRangeChangeDone=!0)}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=p.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={},["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var a=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,this.initialRangeChangeDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(p.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),"object"!==(0,h.default)(this.options.orientation)&&(this.options.orientation={item:void 0,axis:void 0}),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(t.orientation)&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new c(this.body);i.setOptions=function(t){var e=t?p.extend({},t):{};e.orientation="top",c.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&f.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new m(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var n=p.deepExtend({},this.options);this.components.forEach(function(t){p.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},n.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?p.convert(t,"Date").valueOf():new Date;if(this.customTimes.some(function(t){return t.options.id===e}))throw new Error("A custom time with id "+(0,r.default)(e)+" already exists");var o=new g(this.body,p.extend({},this.options,{time:i,id:e}));return this.customTimes.push(o),this.components.push(o),this._redraw(),e},n.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.prototype.fit=function(t,e){var i=this.getDataRange();if(null!==i.min||null!==i.max){var o=i.max-i.min,n=new Date(i.min.valueOf()-.01*o),s=new Date(i.max.valueOf()+.01*o),r=!t||void 0===t.animation||t.animation;this.range.setRange(n,s,{animation:r},e)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i,o){"function"==typeof arguments[2]&&(o=arguments[2],i={});var n,s;1==arguments.length?(s=arguments[0],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n})):2==arguments.length&&"function"==typeof arguments[1]?(s=arguments[0],o=arguments[1],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n},o)):(n=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,{animation:n},o))},n.prototype.moveTo=function(t,e,i){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.range.end-this.range.start,n=p.convert(t,"Date").valueOf(),s=n-o/2,r=n+o/2,a=!e||void 0===e.animation||e.animation;this.range.setRange(s,r,{animation:a},i)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=r/(1+t),h=(r-a)/2,d=n+h,l=s-h;this.setWindow(d,l,e,i)}},n.prototype.zoomOut=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=n-r*t/2,h=s+r*t/2;this.setWindow(a,h,e,i)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){f.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(p.addClassName(o.root,"vis-top"),p.removeClassName(o.root,"vis-bottom")):(p.removeClassName(o.root,"vis-top"),p.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=p.option.asSize(e.maxHeight,""),o.root.style.minHeight=p.option.asSize(e.minHeight,""),o.root.style.width=p.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=o.root.offsetWidth-o.root.clientWidth,0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(i.borderRootWidth=i.borderRootHeight),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=p.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=p.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.height<i.centerContainer.height)&&(o.left.style.top=a+"px",o.right.style.top=a+"px",o.rightContainer.className=o.rightContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),o.leftContainer.className=o.leftContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right,this._setDOM());var u=i.center.height>i.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});if(t){if(this.redrawCount<5)return void this.body.emitter.emit("_change");console.log("WARNING: infinite loop in redraw?")}else this.redrawCount=0;this.body.emitter.emit("changed")}},n.prototype._setDOM=function(){var t=this.props,e=this.dom;t.leftContainer.width=t.left.width,t.rightContainer.width=t.right.width;var i=t.root.width-t.left.width-t.right.width-t.borderRootWidth;t.center.width=i,t.centerContainer.width=i,t.top.width=i,t.bottom.width=i,e.background.style.height=t.background.height+"px",e.backgroundVertical.style.height=t.background.height+"px",e.backgroundHorizontal.style.height=t.centerContainer.height+"px",e.centerContainer.style.height=t.centerContainer.height+"px",e.leftContainer.style.height=t.leftContainer.height+"px",e.rightContainer.style.height=t.rightContainer.height+"px",e.background.style.width=t.background.width+"px",e.backgroundVertical.style.width=t.centerContainer.width+"px",e.backgroundHorizontal.style.width=t.background.width+"px",e.centerContainer.style.width=t.center.width+"px",e.top.style.width=t.top.width+"px",e.bottom.style.width=t.bottom.width+"px",e.background.style.left="0",e.background.style.top="0",e.backgroundVertical.style.left=t.left.width+t.border.left+"px",e.backgroundVertical.style.top="0",e.backgroundHorizontal.style.left="0",e.backgroundHorizontal.style.top=t.top.height+"px",e.centerContainer.style.left=t.left.width+"px",e.centerContainer.style.top=t.top.height+"px",e.leftContainer.style.left="0",e.leftContainer.style.top=t.top.height+"px",e.rightContainer.style.left=t.left.width+t.center.width+"px",e.rightContainer.style.top=t.top.height+"px",e.top.style.left=t.left.width+"px",e.top.style.top="0",e.bottom.style.left=t.left.width+"px",e.bottom.style.top=t.top.height+t.centerContainer.height+"px",e.center.style.left="0",e.left.style.left="0",e.right.style.left="0"},n.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},n.prototype.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},n.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},n.prototype._toTime=function(t){return f.toTime(this,t,this.props.center.width)},n.prototype._toGlobalTime=function(t){return f.toTime(this,t,this.props.root.width)},n.prototype._toScreen=function(t){return f.toScreen(this,t,this.props.center.width)},n.prototype._toGlobalScreen=function(t){return f.toScreen(this,t,this.props.root.width)},n.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},n.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){if(1!=t.options.autoResize)return void t._stopAutoResize();t.dom.root&&(t.dom.root.offsetWidth==t.props.lastWidth&&t.dom.root.offsetHeight==t.props.lastHeight||(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,t.props.scrollbarWidth=p.getScrollBarWidth(),t.body.emitter.emit("_change")))},p.addEventListener(window,"resize",this._onResize),t.dom.root&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight),this.watchTimer=setInterval(this._onResize,1e3)},n.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),this._onResize&&(p.removeEventListener(window,"resize",this._onResize),this._onResize=null)},n.prototype._onTouch=function(t){this.touch.allowDragging=!0,this.touch.initialScrollTop=this.props.scrollTop},n.prototype._onPinch=function(t){this.touch.allowDragging=!1},n.prototype._onDrag=function(t){if(t&&this.touch.allowDragging){var e=t.deltaY,i=this._getScrollTop(),o=this._setScrollTop(this.touch.initialScrollTop+e);this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),o!=i&&this.emit("verticalDrag")}},n.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},n.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("top"!=this.options.orientation.item&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop<t&&(this.props.scrollTop=t),this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),this.props.scrollTop},n.prototype._getScrollTop=function(){return this.props.scrollTop},n.prototype._createConfigurator=function(){throw new Error("Cannot invoke abstract method _createConfigurator")},t.exports=n},function(t,e,i){function o(t,e,i,s,r){this.moment=n,this.current=this.moment(),this._start=this.moment(),this._end=this.moment(),this.autoScale=!0,this.scale="day",this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,Array.isArray(s)?this.hiddenDates=s:this.hiddenDates=void 0!=s?[s]:[],this.format=o.FORMAT,this.options=r||{}}var n=i(3),s=i(21),r=i(0);o.FORMAT={minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},o.prototype.setMoment=function(t){this.moment=t,this.current=this.moment(this.current.valueOf()),this._start=this.moment(this._start.valueOf()),this._end=this.moment(this._end.valueOf())},o.prototype.setFormat=function(t){var e=r.deepExtend({},o.FORMAT);this.format=r.deepExtend(e,t)},o.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?this.moment(t.valueOf()):new Date,this._end=void 0!=e?this.moment(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},o.prototype.start=function(){this.current=this._start.clone(),this.roundToMinor()},o.prototype.roundToMinor=function(){switch("week"==this.scale&&this.current.weekday(0),this.scale){case"year":this.current.year(this.step*Math.floor(this.current.year()/this.step)),this.current.month(0);case"month":this.current.date(1);case"week":case"day":case"weekday":this.current.hours(0);case"hour":this.current.minutes(0);case"minute":this.current.seconds(0);case"second":this.current.milliseconds(0)}if(1!=this.step)switch(this.scale){case"millisecond":this.current.subtract(this.current.milliseconds()%this.step,"milliseconds");break;case"second":this.current.subtract(this.current.seconds()%this.step,"seconds");break;case"minute":this.current.subtract(this.current.minutes()%this.step,"minutes");break;case"hour":this.current.subtract(this.current.hours()%this.step,"hours");break;case"weekday":case"day":this.current.subtract((this.current.date()-1)%this.step,"day");break;case"week":this.current.subtract(this.current.week()%this.step,"week");break;case"month":this.current.subtract(this.current.month()%this.step,"month");break;case"year":this.current.subtract(this.current.year()%this.step,"year")}},o.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},o.prototype.next=function(){var t=this.current.valueOf();switch(this.scale){case"millisecond":this.current.add(this.step,"millisecond");break;case"second":this.current.add(this.step,"second");break;case"minute":this.current.add(this.step,"minute");break;case"hour":this.current.add(this.step,"hour"),this.current.month()<6?this.current.subtract(this.current.hours()%this.step,"hour"):this.current.hours()%this.step!=0&&this.current.add(this.step-this.current.hours()%this.step,"hour");break;case"weekday":case"day":this.current.add(this.step,"day");break;case"week":if(0!==this.current.weekday())this.current.weekday(0),this.current.add(this.step,"week");else if(!1===this.options.showMajorLabels)this.current.add(this.step,"week");else{var e=this.current.clone();e.add(1,"week"),e.isSame(this.current,"month")?this.current.add(this.step,"week"):(this.current.add(this.step,"week"),this.current.date(1))}break;case"month":this.current.add(this.step,"month");break;case"year":this.current.add(this.step,"year")}if(1!=this.step)switch(this.scale){case"millisecond":this.current.milliseconds()>0&&this.current.milliseconds()<this.step&&this.current.milliseconds(0);break;case"second":this.current.seconds()>0&&this.current.seconds()<this.step&&this.current.seconds(0);break;case"minute":this.current.minutes()>0&&this.current.minutes()<this.step&&this.current.minutes(0);break;case"hour":this.current.hours()>0&&this.current.hours()<this.step&&this.current.hours(0);break;case"weekday":case"day":this.current.date()<this.step+1&&this.current.date(1);break;case"week":this.current.week()<this.step&&this.current.week(1);break;case"month":this.current.month()<this.step&&this.current.month(0)}this.current.valueOf()==t&&(this.current=this._end.clone()),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,s.stepOverHiddenDates(this.moment,this,t)},o.prototype.getCurrent=function(){return this.current},o.prototype.setScale=function(t){t&&"string"==typeof t.scale&&(this.scale=t.scale,this.step=t.step>0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){31104e9>t&&(this.scale="year",this.step=1e3),15552e9>t&&(this.scale="year",this.step=500),31104e8>t&&(this.scale="year",this.step=100),15552e8>t&&(this.scale="year",this.step=50),31104e7>t&&(this.scale="year",this.step=10),15552e7>t&&(this.scale="year",this.step=5),31104e6>t&&(this.scale="year",this.step=1),7776e6>t&&(this.scale="month",this.step=3),2592e6>t&&(this.scale="month",this.step=1),432e6>t&&(this.scale="day",this.step=5),1728e5>t&&(this.scale="day",this.step=2),864e5>t&&(this.scale="day",this.step=1),432e5>t&&(this.scale="weekday",this.step=1),144e5>t&&(this.scale="hour",this.step=4),36e5>t&&(this.scale="hour",this.step=1),9e5>t&&(this.scale="minute",this.step=15),6e5>t&&(this.scale="minute",this.step=10),3e5>t&&(this.scale="minute",this.step=5),6e4>t&&(this.scale="minute",this.step=1),15e3>t&&(this.scale="second",this.step=15),1e4>t&&(this.scale="second",this.step=10),5e3>t&&(this.scale="second",this.step=5),1e3>t&&(this.scale="second",this.step=1),200>t&&(this.scale="millisecond",this.step=200),100>t&&(this.scale="millisecond",this.step=100),50>t&&(this.scale="millisecond",this.step=50),10>t&&(this.scale="millisecond",this.step=10),5>t&&(this.scale="millisecond",this.step=5),1>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("week"==e)o.weekday()>2?(o.weekday(0),o.add(1,"week")):o.weekday(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.scale){case"year":case"month":case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.scale){case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":case"week":return 1==t.date();case"month":return 0==t.month();case"year":default:return!1}},o.prototype.getLabelMinor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];switch(this.scale){case"week":if(this.isMajor()&&0!==t.weekday())return"";default:return e&&e.length>0?this.moment(t).format(e):""}},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/a%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(n().add(1,"day"),"day")?" vis-tomorrow":t.isSame(n().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}var n=this.moment,s=this.moment(this.current),r=s.locale?s.locale("en"):s.lang("en"),a=this.step,h=[];switch(this.scale){case"millisecond":h.push(e(r)),h.push(t(r.milliseconds()));break;case"second":h.push(e(r)),h.push(t(r.seconds()));break;case"minute":h.push(e(r)),h.push(t(r.minutes()));break;case"hour":h.push("vis-h"+r.hours()+(4==this.step?"-h"+(r.hours()+4):"")),h.push(e(r)),h.push(t(r.hours()));break;case"weekday":h.push("vis-"+r.format("dddd").toLowerCase()),h.push(e(r)),h.push(i(r)),h.push(t(r.date()));break;case"day":h.push("vis-day"+r.date()),h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(e(r)),h.push(o(r)),h.push(this.step<=2?e(r):""),h.push(this.step<=2?"vis-"+r.format("dddd").toLowerCase():""),h.push(t(r.date()-1));break;case"week":h.push("vis-week"+r.format("w")),h.push(i(r)),h.push(t(r.week()));break;case"month":h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(o(r)),h.push(t(r.month()));break;case"year":h.push("vis-year"+r.year()),h.push(function(t){return t.isSame(new Date,"year")?" vis-current-year":""}(r)),h.push(t(r.year()))}return h.filter(String).join(" ")},t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={rtl:!1,showCurrentTime:!0,moment:r,locales:a,locale:"en"},this.options=n.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var n=i(0),s=i(5),r=i(3),a=i(69);o.prototype=new s,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-current-time",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},o.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},o.prototype.setOptions=function(t){t&&n.selectiveExtend(["rtl","showCurrentTime","moment","locale","locales"],this.options,t)},o.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=this.options.moment((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),o=this.options.locales[this.options.locale];o||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),o=this.options.locales.en);var n=o.current+" "+o.time+": "+e.format("dddd, MMMM Do YYYY, H:mm:ss");n=n.charAt(0).toUpperCase()+n.substring(1),this.options.rtl?this.bar.style.right=i+"px":this.bar.style.left=i+"px",this.bar.title=n}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},o.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,o=1/i/10;o<30&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.groupId=t,this.subgroups={},this.subgroupStack={},this.subgroupStackAll=!1,this.doInnerStack=!1,this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,this.stackDirty=!0,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),e&&e.subgroupStack)if("boolean"==typeof e.subgroupStack)this.doInnerStack=e.subgroupStack,this.subgroupStackAll=e.subgroupStack;else for(var o in e.subgroupStack)this.subgroupStack[o]=e.subgroupStack[o],this.doInnerStack=this.doInnerStack||e.subgroupStack[o];this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var n=this;this.itemSet.body.emitter.on("checkRangedItems",function(){n.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(4),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(71);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else e instanceof Object?i(t,this.dom.inner):this.dom.inner.innerHTML=void 0!==e&&null!==e?e:this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?r.removeClassName(this.dom.inner,"vis-hidden"):r.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),r.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(r.removeClassName(this.dom.label,o),r.addClassName(this.dom.label,"expanded")):(r.removeClassName(this.dom.label,"expanded"),r.addClassName(this.dom.label,o))}else this.nestedGroups&&(this.nestedGroups=null,o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed",r.removeClassName(this.dom.label,o),r.removeClassName(this.dom.label,"expanded"),r.removeClassName(this.dom.label,"vis-nesting-group"));t&&t.nestedInGroup&&(r.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(r.removeClassName(this.dom.label,this.className),r.removeClassName(this.dom.foreground,this.className),r.removeClassName(this.dom.background,this.className),r.removeClassName(this.dom.axis,this.className)),r.addClassName(this.dom.label,n),r.addClassName(this.dom.foreground,n),r.addClassName(this.dom.background,n),r.addClassName(this.dom.axis,n),this.className=n),this.style&&(r.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(r.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype._didMarkerHeightChange=function(){var t=this.dom.marker.clientHeight;if(t!=this.lastMarkerHeight){this.lastMarkerHeight=t;var e={},i=0;r.forEach(this.items,function(t,o){if(t.dirty=!0,t.displayed){e[o]=t.redraw(!0),i=e[o].length}});if(i>0)for(var o=0;o<i;o++)r.forEach(e,function(t){t[o]()});return!0}},o.prototype._calculateGroupSizeAndPosition=function(){var t=this.dom.foreground.offsetTop,e=this.dom.foreground.offsetLeft,i=this.dom.foreground.offsetWidth;this.top=t,this.right=e,this.width=i},o.prototype._redrawItems=function(t,e,i,o){if(t||this.stackDirty||this.isVisible&&!e){var n={},s=null;if("function"==typeof this.itemSet.options.order){var h=this,d={},l=0;if(r.forEach(this.items,function(t,e){t.displayed||(d[e]=t.redraw(!0),l=d[e].length,h.visibleItems.push(t))}),l>0)for(var u=0;u<l;u++)r.forEach(d,function(t){t[u]()});if(r.forEach(this.items,function(t){t.repositionX(!1)}),this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else{var p=this.orderedItems.byStart.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stack(p,i,!0)}this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o)}else if(this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o),this.itemSet.options.stack)if(this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items;a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else a.stack(this.visibleItems,i,!0);else a.nostack(this.visibleItems,i,this.subgroups,this.itemSet.options.stackSubgroups);this.stackDirty=!1}},o.prototype._didResize=function(t,e){t=r.updateProperty(this,"height",e)||t;var i=this.dom.inner.clientWidth,o=this.dom.inner.clientHeight;return t=r.updateProperty(this.props.label,"width",i)||t,t=r.updateProperty(this.props.label,"height",o)||t},o.prototype._applyGroupHeight=function(t){this.dom.background.style.height=t+"px",this.dom.foreground.style.height=t+"px",this.dom.label.style.height=t+"px"},o.prototype._updateItemsVerticalPosition=function(t){for(var e=0,i=this.visibleItems.length;e<i;e++){var o=this.visibleItems[e];o.repositionY(t),this.isVisible||"__background__"==this.groupId||o.displayed&&o.hide()}},o.prototype.redraw=function(t,e,i,o){var n,s=!1,r=this.isVisible,a=[function(){i=this._didMarkerHeightChange.bind(this)}.bind(this),this._updateSubGroupHeights.bind(this,e),this._calculateGroupSizeAndPosition.bind(this),function(){this.isVisible=this._isGroupVisible.bind(this)(t,e)}.bind(this),function(){this._redrawItems.bind(this)(i,r,e,t)}.bind(this),this._updateSubgroupsSizes.bind(this),function(){n=this._calculateHeight.bind(this)(e)}.bind(this),this._calculateGroupSizeAndPosition.bind(this),function(){s=this._didResize.bind(this)(s,n)}.bind(this),function(){this._applyGroupHeight.bind(this)(n)}.bind(this),function(){this._updateItemsVerticalPosition.bind(this)(e)}.bind(this),function(){return!this.isVisible&&this.height&&(s=!1),s}];if(o)return a;var h;return a.forEach(function(t){h=t()}),h},o.prototype._updateSubGroupHeights=function(t){if((0,s.default)(this.subgroups).length>0){var e=this;this.resetSubgroups(),r.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},o.prototype._isGroupVisible=function(t,e){return this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(r.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,r.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},o.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),this.stackDirty=!0,void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end||t.data.start,visible:!1,index:this.subgroupIndex,items:[],stack:this.subgroupStackAll||this.subgroupStack[e]||!1},this.subgroupIndex++),new Date(t.data.start)<new Date(this.subgroups[e].start)&&(this.subgroups[e].start=t.data.start);var i=t.data.end||t.data.start;new Date(i)>new Date(this.subgroups[e].end)&&(this.subgroups[e].end=i),this.subgroups[e].items.push(t)},o.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.end||t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.start,n=i-1;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)<new Date(o)&&(o=t.data.start);var e=t.data.end||t.data.start;new Date(e)>new Date(n)&&(n=e)}),t.subgroups[e].start=o,t.subgroups[e].end=new Date(n-1)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t,e=[];if("string"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push({subgroup:t,sortField:this.subgroups[t].items[0].data[this.subgroupOrderer]});e.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push(this.subgroups[t].items[0].data);e.sort(this.subgroupOrderer)}if(e.length>0)for(var i=0;i<e.length;i++)this.subgroups[e[i].subgroup].index=i}},o.prototype.resetSubgroups=function(){for(var t in this.subgroups)this.subgroups.hasOwnProperty(t)&&(this.subgroups[t].visible=!1,this.subgroups[t].height=0)},o.prototype.remove=function(t){delete this.items[t.id],t.setParent(null),this.stackDirty=!0;var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1),void 0!==t.data.subgroup&&(this._removeFromSubgroup(t),this.orderSubgroups())},o.prototype._removeFromSubgroup=function(t,e){if(void 0!=(e=e||t.data.subgroup)){var i=this.subgroups[e];if(i){var o=i.items.indexOf(t);o>=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},o.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},o.prototype.order=function(){for(var t=r.toArray(this.items),e=[],i=[],o=0;o<t.length;o++)void 0!==t[o].data.end&&i.push(t[o]),e.push(t[o]);this.orderedItems={byStart:e,byEnd:i},a.orderByStart(this.orderedItems.byStart),a.orderByEnd(this.orderedItems.byEnd)},o.prototype._updateItemsInRange=function(t,e,i){var o=[],n={},s=(i.end-i.start)/4,a=i.start-s,h=i.end+s,d=function(t){return t<a?-1:t<=h?0:1};if(e.length>0)for(var l=0;l<e.length;l++)this._checkIfVisibleWithReference(e[l],o,n,i);var u=r.binarySearchCustom(t.byStart,d,"data","start");if(this._traceVisible(u,t.byStart,o,n,function(t){return t.data.start<a||t.data.start>h}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;l<t.byEnd.length;l++)this._checkIfVisibleWithReference(t.byEnd[l],o,n,i);else{var p=r.binarySearchCustom(t.byEnd,d,"data","end");this._traceVisible(p,t.byEnd,o,n,function(t){return t.data.end<a||t.data.end>h})}var c={},m=0;for(l=0;l<o.length;l++){var f=o[l];if(!f.displayed){c[l]=f.redraw(!0),m=c[l].length}}if(m>0)for(var g=0;g<m;g++)r.forEach(c,function(t){t[g]()});for(l=0;l<o.length;l++)o[l].repositionX();return o},o.prototype._traceVisible=function(t,e,i,o,n){if(-1!=t){var s,r;for(s=t;s>=0&&(r=e[s],!n(r));s--)void 0===o[r.id]&&(o[r.id]=!0,i.push(r));for(s=t+1;s<e.length&&(r=e[s],!n(r));s++)void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}},o.prototype._checkIfVisible=function(t,e,i){t.isVisible(i)?(t.displayed||t.show(),t.repositionX(),e.push(t)):t.displayed&&t.hide()},o.prototype._checkIfVisibleWithReference=function(t,e,i,o){t.isVisible(o)?void 0===i[t.id]&&(i[t.id]=!0,e.push(t)):t.displayed&&t.hide()},o.prototype.changeSubgroup=function(t,e,i){this._removeFromSubgroup(t,e),this._addToSubgroup(t,i),this.orderSubgroups()},t.exports=o},function(t,e,i){function o(t,e,i){r.call(this,t,e,i),this.width=0,this.height=0,this.top=0,this.left=0}var n=i(43),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(51);o.prototype=(0,s.default)(r.prototype),o.prototype.redraw=function(t,e,i){this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.width=this.dom.background.offsetWidth,this.dom.background.style.height="0";for(var o=0,n=this.visibleItems.length;o<n;o++){this.visibleItems[o].repositionY(e)}return!1},o.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(22);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-range",o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.visibleFrame=document.createElement("div"),this.dom.visibleFrame.className="vis-item-visible-frame",this.dom.box.appendChild(this.dom.visibleFrame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className=this.baseClassName+e,this.dom.content.style.maxWidth="none"}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.frame).overflow,{content:{width:this.dom.content.offsetWidth},box:{height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=t.box.height,this.dom.content.style.maxWidth="",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDeleteButton(this.dom.box),this._repaintDragCenter(),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end),r=void 0===this.data.align?this.options.align:this.data.align;!1===this.data.limitSize||void 0!==t&&!0!==t||(n<-o&&(n=-o),s>2*o&&(s=2*o));var a=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=a+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=a,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=a+"px",r){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(a-i,0)+"px":this.dom.content.style.left=Math.max(a-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((a-i)/2,0)+"px":this.dom.content.style.left=Math.max((a-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+e+"px)")}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,this.dom.box.appendChild(t),this.dom.dragLeft=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragLeft||(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},o.prototype._repaintDragRight=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,this.dom.box.appendChild(t),this.dom.dragRight=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragRight||(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=o},function(t,e,i){function o(t,e){}function n(t,e){return e=void 0===e?{}:e,{style:e.style||t.options.drawPoints.style,styles:e.styles||t.options.drawPoints.styles,size:e.size||t.options.drawPoints.size,className:e.className||t.className}}function s(t,e){var i=void 0;return t.options&&t.options.drawPoints&&t.options.drawPoints.onRender&&"function"==typeof t.options.drawPoints.onRender&&(i=t.options.drawPoints.onRender),e.group.options&&e.group.options.drawPoints&&e.group.options.drawPoints.onRender&&"function"==typeof e.group.options.drawPoints.onRender&&(i=e.group.options.drawPoints.onRender),i}var r=i(1),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(11);o.draw=function(t,e,i,o){o=o||0;for(var r=s(i,e),d=0;d<t.length;d++)if(r){var l=r(t[d],e);!0!==l&&"object"!==(void 0===l?"undefined":(0,a.default)(l))||h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e,l),i.svgElements,i.svg,t[d].label)}else h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e),i.svgElements,i.svg,t[d].label)},o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,d=h.getSVGElement("rect",r.svgElements,r.svg);d.setAttributeNS(null,"x",e),d.setAttributeNS(null,"y",i-a),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",2*a),d.setAttributeNS(null,"class","vis-outline"),h.drawPoint(e+.5*o,i,n(t),r.svgElements,r.svg)},t.exports=o},function(t,e,i){i(88);for(var o=i(6),n=i(14),s=i(23),r=i(7)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),h=0;h<a.length;h++){var d=a[h],l=o[d],u=l&&l.prototype;u&&!u[r]&&n(u,r,d),s[d]=s.Array}},function(t,e,i){var o=i(35),n=i(17),s=i(59),r=i(14),a=i(10),h=i(23),d=i(94),l=i(42),u=i(100),p=i(7)("iterator"),c=!([].keys&&"next"in[].keys()),m=function(){return this};t.exports=function(t,e,i,f,g,v,y){d(i,e,f);var b,_,w,x=function(t){if(!c&&t in C)return C[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},D=e+" Iterator",S="values"==g,k=!1,C=t.prototype,T=C[p]||C["@@iterator"]||g&&C[g],M=T||x(g),O=g?S?x("entries"):M:void 0,E="Array"==e?C.entries||T:T;if(E&&(w=u(E.call(new t)))!==Object.prototype&&w.next&&(l(w,D,!0),o||a(w,p)||r(w,p,m)),S&&T&&"values"!==T.name&&(k=!0,M=function(){return T.call(this)}),o&&!y||!c&&!k&&C[p]||r(C,p,M),h[e]=M,h[D]=m,g)if(b={values:S?M:x("values"),keys:v?M:x("keys"),entries:O},y)for(_ in b)_ in C||s(C,_,b[_]);else n(n.P+n.F*(c||k),e,b);return b}},function(t,e,i){t.exports=!i(9)&&!i(19)(function(){return 7!=Object.defineProperty(i(58)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){var o=i(24),n=i(6).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){t.exports=i(14)},function(t,e,i){var o=i(10),n=i(13),s=i(96)(!1),r=i(39)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(34);t.exports=function(t){return Object(o(t))}},function(t,e,i){var o=i(101)(!0);i(56)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,i){var o=i(60),n=i(41).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){function o(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}o.prototype.setOptions=function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()},o.extend=function(t,e){var i=new o(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){i.flush()};var n=[{name:"flush",original:void 0}];if(e&&e.replace)for(var s=0;s<e.replace.length;s++){var r=e.replace[s];n.push({name:r,original:t[r]}),i.replace(t,r)}return i._extended={object:t,methods:n},i},o.prototype.destroy=function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var o=e[i];o.original?t[o.name]=o.original:delete t[o.name]}this._extended=null}},o.prototype.replace=function(t,e){var i=this,o=t[e];if(!o)throw new Error("Method "+e+" undefined");t[e]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];i.queue({args:t,fn:o,context:this})}},o.prototype.queue=function(t){"function"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()},o.prototype._flushIfNeeded=function(){if(this._queue.length>this.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},o.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=o},function(t,e){function i(t){if(t)return o(t)}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var o,n=0;n<i.length;n++)if((o=i[n])===e||o.fn===e){i.splice(n,1);break}return this},i.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),i=this._callbacks[t];if(i){i=i.slice(0);for(var o=0,n=i.length;o<n;++o)i[o].apply(this,e)}return this},i.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},i.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,i){e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch,e.disablePreventDefaultVertically=function(t){return t.getTouchAction=function(){return["pan-y"]},t}},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(0,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;e<=122;e++)r[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;n<o.length;n++)void 0===o[n].shift?o[n].fn(t):1==o[n].shift&&1==t.shiftKey?o[n].fn(t):0==o[n].shift&&0==t.shiftKey&&o[n].fn(t);1==i&&t.preventDefault()}};return n.bind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);void 0===s[i][r[t].code]&&(s[i][r[t].code]=[]),s[i][r[t].code].push({fn:e,shift:r[t].shift})},n.bindAll=function(t,e){void 0===e&&(e="keydown");for(var i in r)r.hasOwnProperty(i)&&n.bind(i,t,e)},n.getKey=function(t){for(var e in r)if(r.hasOwnProperty(e)){if(1==t.shiftKey&&1==r[e].shift&&t.keyCode==r[e].code)return e;if(0==t.shiftKey&&0==r[e].shift&&t.keyCode==r[e].code)return e;if(t.keyCode==r[e].code&&"shift"==e)return e}return"unknown key, currently not supported"},n.unbind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);if(void 0!==e){var o=[],n=s[i][r[t].code];if(void 0!==n)for(var a=0;a<n.length;a++)n[a].fn==e&&n[a].shift==r[t].shift||o.push(s[i][r[t].code][a]);s[i][r[t].code]=o}else s[i][r[t].code]=[]},n.reset=function(){s={keydown:{},keyup:{}}},n.destroy=function(){s={keydown:{},keyup:{}},o.removeEventListener("keydown",a,!0),o.removeEventListener("keyup",h,!0)},o.addEventListener("keydown",a,!0),o.addEventListener("keyup",h,!0),n}return t})},function(t,e,i){e.en={current:"current",time:"time"},e.en_EN=e.en,e.en_US=e.en,e.it={current:"attuale",time:"tempo"},e.it_IT=e.it,e.it_CH=e.it,e.nl={current:"huidige",time:"tijd"},e.nl_NL=e.nl,e.nl_BE=e.nl,e.de={current:"Aktuelle",time:"Zeit"},e.de_DE=e.de,e.fr={current:"actuel",time:"heure"},e.fr_FR=e.fr,e.fr_CA=e.fr,e.fr_BE=e.fr,e.es={current:"corriente",time:"hora"},e.es_ES=e.es},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.body=t,this.defaultOptions={type:null,orientation:{item:"bottom"},align:"auto",stack:!0,stackSubgroups:!0,groupOrderSwap:function(t,e,i){var o=e.order;e.order=t.order,t.order=o},groupOrder:"order",selectable:!0,multiselect:!1,itemsAlwaysDraggable:{item:!1,range:!1},editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1,overrideItems:!1},groupEditable:{order:!1,add:!1,remove:!1},snap:c.snap,onDropObjectOnItem:function(t,e,i){i(e)},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},onAddGroup:function(t,e){e(t)},onMoveGroup:function(t,e){e(t)},onRemoveGroup:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1},this.options=l.extend({},this.defaultOptions),this.options.rtl=e.rtl,this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){if(i._onAddGroups(e.items),i.groupsData&&i.groupsData.length>0){var n=i.groupsData.getDataSet();n.get().forEach(function(t){if(t.nestedGroups){0!=t.showNested&&(t.showNested=!0);var e=[];t.nestedGroups.forEach(function(i){var o=n.get(i);o&&(o.nestedInGroup=t.id,0==t.showNested&&(o.visible=!1),e=e.concat(o))}),n.update(e,o)}})}},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.popup=null,this.touchParams={},this.groupTouchParams={},this._create(),this.setOptions(e)}var s=i(43),r=o(s),a=i(1),h=o(a),d=i(12),l=i(0),u=i(15),p=i(20),c=i(49),m=i(5),f=i(51),g=i(52),v=i(72),y=i(73),b=i(53),_=i(74),w=i(133).default,x="__ungrouped__",D="__background__";n.prototype=new m,n.types={background:_,box:v,range:b,point:y},n.prototype._create=function(){var t=document.createElement("div");t.className="vis-itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="vis-background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="vis-foreground",t.appendChild(i),this.dom.foreground=i;var o=document.createElement("div");o.className="vis-axis",this.dom.axis=o;var n=document.createElement("div");n.className="vis-labelset",this.dom.labelSet=n,this._updateUngrouped();var s=new g(D,null,this);s.show(),this.groups[D]=s,this.hammer=new d(this.body.dom.centerContainer),this.hammer.on("hammer.input",function(t){t.isFirst&&this._onTouch(t)}.bind(this)),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_HORIZONTAL}),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("press",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.options.rtl?this.groupHammer=new d(this.body.dom.rightContainer):this.groupHammer=new d(this.body.dom.leftContainer),this.groupHammer.on("tap",this._onGroupClick.bind(this)),this.groupHammer.on("panstart",this._onGroupDragStart.bind(this)),this.groupHammer.on("panmove",this._onGroupDrag.bind(this)),this.groupHammer.on("panend",this._onGroupDragEnd.bind(this)),this.groupHammer.get("pan").set({threshold:5,direction:d.DIRECTION_VERTICAL}),this.body.dom.centerContainer.addEventListener("mouseover",this._onMouseOver.bind(this)),this.body.dom.centerContainer.addEventListener("mouseout",this._onMouseOut.bind(this)),this.body.dom.centerContainer.addEventListener("mousemove",this._onMouseMove.bind(this)),this.body.dom.centerContainer.addEventListener("contextmenu",this._onDragEnd.bind(this)),this.body.dom.centerContainer.addEventListener("mousewheel",this._onMouseWheel.bind(this)),this.show()},n.prototype.setOptions=function(t){if(t){var e=["type","rtl","align","order","stack","stackSubgroups","selectable","multiselect","multiselectPerGroup","groupOrder","dataAttributes","template","groupTemplate","visibleFrameTemplate","hide","snap","groupOrderSwap","showTooltips","tooltip","tooltipOnItemUpdateTime"];l.selectiveExtend(e,this.options,t),"itemsAlwaysDraggable"in t&&("boolean"==typeof t.itemsAlwaysDraggable?(this.options.itemsAlwaysDraggable.item=t.itemsAlwaysDraggable,this.options.itemsAlwaysDraggable.range=!1):"object"===(0,h.default)(t.itemsAlwaysDraggable)&&(l.selectiveExtend(["item","range"],this.options.itemsAlwaysDraggable,t.itemsAlwaysDraggable),this.options.itemsAlwaysDraggable.item||(this.options.itemsAlwaysDraggable.range=!1))),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.item="top"===t.orientation?"top":"bottom":"object"===(0,h.default)(t.orientation)&&"item"in t.orientation&&(this.options.orientation.item=t.orientation.item)),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"===(0,h.default)(t.margin)&&(l.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"===(0,h.default)(t.margin.item)&&l.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable,this.options.editable.overrideItems=!1):"object"===(0,h.default)(t.editable)&&l.selectiveExtend(["updateTime","updateGroup","add","remove","overrideItems"],this.options.editable,t.editable)),"groupEditable"in t&&("boolean"==typeof t.groupEditable?(this.options.groupEditable.order=t.groupEditable,this.options.groupEditable.add=t.groupEditable,this.options.groupEditable.remove=t.groupEditable):"object"===(0,h.default)(t.groupEditable)&&l.selectiveExtend(["order","add","remove"],this.options.groupEditable,t.groupEditable));["onDropObjectOnItem","onAdd","onUpdate","onRemove","onMove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup"].forEach(function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this)),this.markDirty()}},n.prototype.markDirty=function(t){this.groupIds=[],t&&t.refreshItems&&l.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()})},n.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},n.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},n.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||(this.options.rtl?this.body.dom.right.appendChild(this.dom.labelSet):this.body.dom.left.appendChild(this.dom.labelSet))},n.prototype.setSelection=function(t){var e,i,o,n;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;e<i;e++)o=this.selection[e],(n=this.items[o])&&n.unselect();for(this.selection=[],e=0,i=t.length;e<i;e++)o=t[e],(n=this.items[o])&&(this.selection.push(o),n.select())},n.prototype.getSelection=function(){return this.selection.concat([])},n.prototype.getVisibleItems=function(){var t,e,i=this.body.range.getRange();this.options.rtl?(t=this.body.util.toScreen(i.start),e=this.body.util.toScreen(i.end)):(e=this.body.util.toScreen(i.start),t=this.body.util.toScreen(i.end));var o=[];for(var n in this.groups)if(this.groups.hasOwnProperty(n))for(var s=this.groups[n],r=s.isVisible?s.visibleItems:[],a=0;a<r.length;a++){var h=r[a];this.options.rtl?h.right<e&&h.right+h.width>t&&o.push(h.id):h.left<t&&h.left+h.width>e&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;i<o;i++)if(e[i]==t){e.splice(i,1);break}},n.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=l.option.asSize,o=this.options,n=o.orientation.item,s=!1,r=this.dom.frame;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.options.rtl?this.props.right=this.body.domProps.right.width+this.body.domProps.border.right:this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,r.className="vis-itemset",s=this._orderGroups()||s;var a=e.end-e.start,h=a!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth,d=e.start!=this.lastRangeStart,u=o.stack!=this.lastStack,p=o.stackSubgroups!=this.lastStackSubgroups,c=h||d||u||p;this.lastVisibleInterval=a,this.lastRangeStart=e.start,this.lastStack=o.stack,this.lastStackSubgroups=o.stackSubgroups,this.props.lastWidth=this.props.width;var m=this._firstGroup(),f={item:t.item,axis:t.axis},g={item:t.item,axis:t.item.vertical/2},v=0,y=t.axis+t.item.vertical;this.groups[D].redraw(e,g,c);var b={},_=0;if(l.forEach(this.groups,function(t,i){if(i!==D){var o=t==m?f:g;b[i]=t.redraw(e,o,c,!0),_=b[i].length}}),_>0){for(var w={},x=0;x<_;x++)l.forEach(b,function(t,e){w[e]=t[x]()});l.forEach(this.groups,function(t,e){if(e!==D){var i=w[e];s=i||s,v+=t.height}}),v=Math.max(v,y)}return v=Math.max(v,y),r.style.height=i(v),this.props.width=r.offsetWidth,this.props.height=v,this.dom.axis.style.top=i("top"==n?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.options.rtl?this.dom.axis.style.right="0":this.dom.axis.style.left="0",this.initialItemSetDrawn=!0,s=this._isResized()||s},n.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t];return this.groups[e]||this.groups[x]||null},n.prototype._updateUngrouped=function(){var t,e,i=this.groups[x];if(this.groupsData){if(i){i.hide(),delete this.groups[x];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){i=new f(null,null,this),this.groups[x]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},n.prototype.getLabelSet=function(){return this.dom.labelSet},n.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof u||t instanceof p))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(l.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;l.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},n.prototype.getItems=function(){return this.itemsData},n.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(l.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof u||t instanceof p))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var o=this.groupsData;this.groupsData instanceof p&&(o=this.groupsData.getDataSet()),o.get().forEach(function(t){t.nestedGroups&&t.nestedGroups.forEach(function(e){var i=o.get(e);i.nestedInGroup=t.id,0==t.showNested&&(i.visible=!1),o.update(i)})});var n=this.id;l.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype.getGroups=function(){return this.groupsData},n.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},n.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},n.prototype._getGroupId=function(t){return"background"==this._getType(t)&&void 0==t.group?D:this.groupsData?t.group:x},n.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,o=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=o?e._getType(o):null,a=n.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,o):(i=s.selected,e._removeItem(s),s=null)),!s&&o){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(o,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onAdd=n.prototype._onUpdate,n.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.body.emitter.emit("_change",{queue:!0}))},n.prototype._order=function(){l.forEach(this.groups,function(t){t.order()})},n.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},n.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==x||t==D)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=(0,r.default)(e.options);l.extend(n,{height:null}),o=new f(t,i,e),e.groups[t]=o;for(var s in e.items)if(e.items.hasOwnProperty(s)){var a=e.items[s];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder});t=this._orderNestedGroups(t);var e=!l.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},n.prototype._orderNestedGroups=function(t){var e=[];return t.forEach(function(t){var i=this.groupsData.get(t);if(i.nestedInGroup||e.push(t),i.nestedGroups){var o=this.groupsData.get({filter:function(e){return e.nestedInGroup==t},order:this.options.groupOrder}),n=o.map(function(t){return t.id});e=e.concat(n)}},this),e},n.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i?i&&i.data&&i.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1,i&&i.add(t)},n.prototype._updateItem=function(t,e){t.setData(e);var i=this._getGroupId(t.data),o=this.groups[i];o?o&&o.data&&o.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1},n.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},n.prototype._constructByEndArray=function(t){for(var e=[],i=0;i<t.length;i++)t[i]instanceof b&&e.push(t[i]);return e},n.prototype._onTouch=function(t){this.touchParams.item=this.itemFromTarget(t),this.touchParams.dragLeftItem=t.target.dragLeftItem||!1,this.touchParams.dragRightItem=t.target.dragRightItem||!1,this.touchParams.itemProps=null},n.prototype._getGroupIndex=function(t){for(var e=0;e<this.groupIds.length;e++)if(t==this.groupIds[e])return e},n.prototype._onDragStart=function(t){if(!this.touchParams.itemIsDragging){var e,i=this.touchParams.item||null,o=this;if(i&&(i.selected||this.options.itemsAlwaysDraggable.item)){if(this.options.editable.overrideItems&&!this.options.editable.updateTime&&!this.options.editable.updateGroup)return;if(null!=i.editable&&!i.editable.updateTime&&!i.editable.updateGroup&&!this.options.editable.overrideItems)return;var n=this.touchParams.dragLeftItem,s=this.touchParams.dragRightItem;if(this.touchParams.itemIsDragging=!0,this.touchParams.selectedItem=i,n)e={item:n,initialX:t.center.x,dragLeft:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(s)e={item:s,initialX:t.center.x,dragRight:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey))this._onDragStartAddItem(t);else{this.groupIds.length<1&&this.redraw();var r=this._getGroupIndex(i.data.group),a=this.options.itemsAlwaysDraggable.item&&!i.selected?[i.id]:this.getSelection();this.touchParams.itemProps=a.map(function(e){var i=o.items[e],n=o._getGroupIndex(i.data.group);return{item:i,initialX:t.center.x,groupOffset:r-n,data:this._cloneItemData(i.data)}}.bind(this))}t.stopPropagation()}else this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey)&&this._onDragStartAddItem(t)}},n.prototype._onDragStartAddItem=function(t){var e,i,o=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x+10):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e-10);var n=this.body.util.toTime(i),s=this.body.util.getScale(),r=this.body.util.getStep(),a=o?o(n,s,r):n,h=a,d={type:"range",start:a,end:h,content:"new item"},u=l.randomUUID();d[this.itemsData._fieldId]=u;var p=this.groupFromTarget(t);p&&(d.group=p.groupId);var c=new b(d,this.conversion,this.options);c.id=u,c.data=this._cloneItemData(d),this._addItem(c),this.touchParams.selectedItem=c;var m={item:c,initialX:t.center.x,data:c.data};this.options.rtl?m.dragLeft=!0:m.dragRight=!0,this.touchParams.itemProps=[m],t.stopPropagation()},n.prototype._onDrag=function(t){if(this.touchParams.itemProps){t.stopPropagation();var e,i=this,o=this.options.snap||null;e=this.options.rtl?this.body.dom.root.offsetLeft+this.body.domProps.right.width:this.body.dom.root.offsetLeft+this.body.domProps.left.width;var n=this.body.util.getScale(),s=this.body.util.getStep(),r=this.touchParams.selectedItem,a=(this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateGroup||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateGroup,h=null;if(a&&r&&void 0!=r.data.group){var d=i.groupFromTarget(t);d&&(h=this._getGroupIndex(d.groupId))}this.touchParams.itemProps.forEach(function(d){var u,p,c,m,f,g=i.body.util.toTime(t.center.x-e),v=i.body.util.toTime(d.initialX-e);u=this.options.rtl?-(g-v):g-v;var y=this._cloneItemData(d.item.data);if(null==d.item.editable||d.item.editable.updateTime||d.item.editable.updateGroup||i.options.editable.overrideItems){if((this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateTime||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateTime)if(d.dragLeft)this.options.rtl?void 0!=y.end&&(c=l.convert(d.data.end,"Date"),f=new Date(c.valueOf()+u),y.end=o?o(f,n,s):f):void 0!=y.start&&(p=l.convert(d.data.start,"Date"),m=new Date(p.valueOf()+u),y.start=o?o(m,n,s):m);else if(d.dragRight)this.options.rtl?void 0!=y.start&&(p=l.convert(d.data.start,"Date"),m=new Date(p.valueOf()+u),y.start=o?o(m,n,s):m):void 0!=y.end&&(c=l.convert(d.data.end,"Date"),f=new Date(c.valueOf()+u),y.end=o?o(f,n,s):f);else if(void 0!=y.start)if(p=l.convert(d.data.start,"Date").valueOf(),m=new Date(p+u),void 0!=y.end){c=l.convert(d.data.end,"Date");var b=c.valueOf()-p.valueOf();y.start=o?o(m,n,s):m,y.end=new Date(y.start.valueOf()+b)}else y.start=o?o(m,n,s):m;if(a&&!d.dragLeft&&!d.dragRight&&null!=h&&void 0!=y.group){var _=h-d.groupOffset;_=Math.max(0,_),_=Math.min(i.groupIds.length-1,_),y.group=i.groupIds[_]}y=this._cloneItemData(y),i.options.onMoving(y,function(t){t&&d.item.setData(this._cloneItemData(t,"Date"))}.bind(this))}}.bind(this)),this.body.emitter.emit("_change")}},n.prototype._moveToGroup=function(t,e){var i=this.groups[e];if(i&&i.groupId!=t.data.group){var o=t.parent;o.remove(t),o.order(),t.data.group=i.groupId,i.add(t),i.order()}},n.prototype._onDragEnd=function(t){if(this.touchParams.itemIsDragging=!1,this.touchParams.itemProps){t.stopPropagation();var e=this,i=this.itemsData.getDataSet(),o=this.touchParams.itemProps;this.touchParams.itemProps=null,o.forEach(function(t){var o=t.item.id;if(null!=e.itemsData.get(o,e.itemOptions)){var n=this._cloneItemData(t.item.data);e.options.onMove(n,function(n){n?(n[i._fieldId]=o,i.update(n)):(t.item.setData(t.data),e.body.emitter.emit("_change"))})}else e.options.onAdd(t.item.data,function(i){e._removeItem(t.item),i&&e.itemsData.getDataSet().add(i),e.body.emitter.emit("_change")})}.bind(this))}},n.prototype._onGroupClick=function(t){var e=this.groupFromTarget(t);if(e&&e.nestedGroups){var i=this.groupsData.getDataSet(),o=i.get(e.groupId);void 0==o.showNested&&(o.showNested=!0),o.showNested=!o.showNested;var n=i.get(e.nestedGroups).map(function(t){return t.visible=o.showNested,t});if(i.update(n.concat(o)),o.showNested)l.removeClassName(e.dom.label,"collapsed"),l.addClassName(e.dom.label,"expanded");else{l.removeClassName(e.dom.label,"expanded");var s=this.options.rtl?"collapsed-rtl":"collapsed";l.addClassName(e.dom.label,s)}}},n.prototype._onGroupDragStart=function(t){this.options.groupEditable.order&&(this.groupTouchParams.group=this.groupFromTarget(t),this.groupTouchParams.group&&(t.stopPropagation(),this.groupTouchParams.originalOrder=this.groupsData.getIds({order:this.options.groupOrder})))},n.prototype._onGroupDrag=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this.groupsData;this.groupsData instanceof p&&(e=this.groupsData.getDataSet());var i=this.groupFromTarget(t);if(i&&i.height!=this.groupTouchParams.group.height){var o=i.top<this.groupTouchParams.group.top,n=t.center?t.center.y:t.clientY,s=l.getAbsoluteTop(i.dom.foreground),r=this.groupTouchParams.group.height;if(o){if(s+r<n)return}else{if(s+i.height-r>n)return}}if(i&&i!=this.groupTouchParams.group){var a=e.get(i.groupId),h=e.get(this.groupTouchParams.group.groupId);h&&a&&(this.options.groupOrderSwap(h,a,e),e.update(h),e.update(a));var d=e.getIds({order:this.options.groupOrder});if(!l.equalArray(d,this.groupTouchParams.originalOrder))for(var u=this.groupTouchParams.originalOrder,c=this.groupTouchParams.group.groupId,m=Math.min(u.length,d.length),f=0,g=0,v=0;f<m;){for(;f+g<m&&f+v<m&&d[f+g]==u[f+v];)f++;if(f+g>=m)break;if(d[f+g]==c)g=1;else if(u[f+v]==c)v=1;else{var y=d.indexOf(u[f+v]),b=e.get(d[f+g]),_=e.get(u[f+v]);this.options.groupOrderSwap(b,_,e),e.update(b),e.update(_);var w=d[f+g];d[f+g]=u[f+v],d[y]=w,f++}}}}},n.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=l.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!l.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a<r;){for(;a<r&&n[a]==s[a];)a++;if(a>=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),u=o.get(s[a]);e.options.groupOrderSwap(d,u,o),o.update(d),o.update(u);var p=n[a];n[a]=s[a],n[h]=p,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){if(e!==this.itemFromRelatedTarget(t)){var i=e.getTitle();if(this.options.showTooltips&&i){null==this.popup&&(this.popup=new w(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(i);var o=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(o)+o.offsetLeft,t.clientY-l.getAbsoluteTop(o)+o.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){e!==this.itemFromRelatedTarget(t)&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){if(this.itemFromTarget(t)&&this.options.showTooltips&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var e=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(e)+e.offsetLeft,t.clientY-l.getAbsoluteTop(e)+e.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onDropObjectOnItem=function(t){var e=this.itemFromTarget(t),i=JSON.parse(t.dataTransfer.getData("text"));this.options.onDropObjectOnItem(i,e)},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e,i,o=this,n=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e);var s,r,a=this.body.util.toTime(i),h=this.body.util.getScale(),d=this.body.util.getStep();"drop"==t.type?(r=JSON.parse(t.dataTransfer.getData("text")),r.content=r.content?r.content:"new item",r.start=r.start?r.start:n?n(a,h,d):a,r.type=r.type||"box",r[this.itemsData._fieldId]=r.id||l.randomUUID(),"range"!=r.type||r.end||(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s)):(r={start:n?n(a,h,d):a,content:"new item"},r[this.itemsData._fieldId]=l.randomUUID(),"range"===this.options.type&&(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s));var u=this.groupFromTarget(t);u&&(r.group=u.groupId),r=this._cloneItemData(r),this.options.onAdd(r,function(e){e&&(o.itemsData.getDataSet().add(e),"drop"==t.type&&o.setSelection([e.id]))})}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){var i=this.options.multiselect?this.getSelection():[];if((t.srcEvent&&t.srcEvent.shiftKey||!1)&&this.options.multiselect){var o=this.itemsData.get(e.id).group,s=void 0;this.options.multiselectPerGroup&&i.length>0&&(s=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=s&&s!=o||i.push(e.id);var r=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||s==o){i=[];for(var a in this.items)if(this.items.hasOwnProperty(a)){var h=this.items[a],d=h.data.start,l=void 0!==h.data.end?h.data.end:d;!(d>=r.min&&l<=r.max)||this.options.multiselectPerGroup&&s!=this.itemsData.get(h.id).group||h instanceof _||i.push(h.id)}}}else{var u=i.indexOf(e.id);-1==u?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.start<i)&&(i=t.start),void 0!=t.end?(null==e||t.end>e)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){var e=t.center?t.center.y:t.clientY,i=this.groupIds;i.length<=0&&this.groupsData&&(i=this.groupsData.getIds({order:this.options.groupOrder}));for(var o=0;o<i.length;o++){var n=i[o],s=this.groups[n],r=s.dom.foreground,a=l.getAbsoluteTop(r);if(e>a&&e<a+r.offsetHeight)return s;if("top"===this.options.orientation.item){if(o===this.groupIds.length-1&&e>a)return s}else if(0===o&&e<a+r.offset)return s}return null},n.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},n.prototype._cloneItemData=function(t,e){var i=l.extend({},t);return e||(e=this.itemsData.getDataSet()._options.type),void 0!=i.start&&(i.start=l.convert(i.start,e&&e.start||"Date")),void 0!=i.end&&(i.end=l.convert(i.end,e&&e.end||"Date")),i},t.exports=n},function(t,e,i){e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){return("end"in t.data?t.data.end:t.data.start)-("end"in e.data?e.data.end:e.data.start)})},e.stack=function(t,i,o){if(o)for(var n=0;n<t.length;n++)t[n].top=null;for(var n=0;n<t.length;n++){var s=t[n];if(s.stack&&null===s.top){s.top=i.axis;do{for(var r=null,a=0,h=t.length;a<h;a++){var d=t[a];if(null!==d.top&&d!==s&&d.stack&&e.collision(s,d,i.item,d.options.rtl)){r=d;break}}null!=r&&(s.top=r.top+r.height+i.item.vertical)}while(r)}}},e.substack=function(t,i,o){for(var n=0;n<t.length;n++)t[n].top=null;var s=o.height;for(n=0;n<t.length;n++){var r=t[n];if(r.stack&&null===r.top){r.top=r.baseTop;do{for(var a=null,h=0,d=t.length;h<d;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item,l.options.rtl)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical),r.top+r.height>s&&(s=r.top+r.height)}while(a)}}o.height=s-o.top+.5*i.item.vertical},e.nostack=function(t,i,o,n){for(var s=0;s<t.length;s++)if(void 0==t[s].data.subgroup)t[s].top=i.item.vertical;else if(void 0!==t[s].data.subgroup&&n){var r=0;for(var a in o)o.hasOwnProperty(a)&&1==o[a].visible&&o[a].index<o[t[s].data.subgroup].index&&(r+=o[a].height,o[t[s].data.subgroup].top=r);t[s].top=r+.5*i.item.vertical}n||e.stackSubgroups(t,i,o)},e.stackSubgroups=function(t,i,o){for(var n in o)if(o.hasOwnProperty(n)){o[n].top=0;do{var s=null;for(var r in o)if(null!==o[r].top&&r!==n&&o[n].index>o[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;a<t.length;a++)void 0!==t[a].data.subgroup&&(t[a].top=o[t[a].data.subgroup].top+.5*i.item.vertical)},e.stackSubgroupsWithInnerStack=function(t,i,o){var n=!1,s=[];for(var r in o)o[r].hasOwnProperty("index")?s[o[r].index]=r:s.push(r);for(var a=0;a<s.length;a++)if(r=s[a],o.hasOwnProperty(r)){n=n||o[r].stack,o[r].top=0;for(var h in o)o[h].visible&&o[r].index>o[h].index&&(o[r].top+=o[h].height);for(var d=t[r],l=0;l<d.length;l++)void 0!==d[l].data.subgroup&&(d[l].top=o[d[l].data.subgroup].top+.5*i.item.vertical,o[r].stack&&(d[l].baseTop=d[l].top));n&&o[r].stack&&e.substack(t[r],i,o[r])}},e.collision=function(t,e,i,o){return o?t.right-i.horizontal+.001<e.right+e.width&&t.right+t.width+i.horizontal-.001>e.right&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top:t.left-i.horizontal+.001<e.left+e.width&&t.left+t.width+i.horizontal-.001>e.left&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.top<e.top+e.height&&t.top+t.height>e.top||e.start<=t.start&&e.end>=t.start&&e.top<t.top+t.height&&e.top+e.height>t.top}},function(t,e,i){function o(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(22);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.options.align,i=this.width*t.getMillisecondsPerPixel();return"right"==e?this.data.start.getTime()>t.start&&this.data.start.getTime()-i<t.end:"left"==e?this.data.start.getTime()+i>t.start&&this.data.start.getTime()<t.end:this.data.start.getTime()+i/2>t.start&&this.data.start.getTime()-i/2<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("DIV"),this.dom.content=document.createElement("DIV"),this.dom.content.className="vis-item-content",this.dom.box.appendChild(this.dom.content),this.dom.line=document.createElement("DIV"),this.dom.line.className="vis-line",this.dom.dot=document.createElement("DIV"),this.dom.dot.className="vis-dot",this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}if(!this.dom.line.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(this.dom.line)}if(!this.dom.dot.parentNode){var i=this.parent.dom.axis;if(!e)throw new Error("Cannot redraw item: parent has no axis container element");i.appendChild(this.dom.dot)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className="vis-item vis-box"+e,this.dom.line.className="vis-item vis-line"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{previous:{right:this.dom.box.style.right,left:this.dom.box.style.left},dot:{height:this.dom.dot.offsetHeight,width:this.dom.dot.offsetWidth},line:{width:this.dom.line.offsetWidth},box:{width:this.dom.box.offsetWidth,height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.options.rtl?this.dom.box.style.right="0px":this.dom.box.style.left="0px",this.props.dot.height=t.dot.height,this.props.dot.width=t.dot.width,this.props.line.width=t.line.width,this.width=t.box.width,this.height=t.box.height,this.options.rtl?this.dom.box.style.right=t.previous.right:this.dom.box.style.left=t.previous.left,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.box)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom;t.box.parentNode&&t.box.parentNode.removeChild(t.box),t.line.parentNode&&t.line.parentNode.removeChild(t.line),t.dot.parentNode&&t.dot.parentNode.removeChild(t.dot),this.displayed=!1}},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start),e=this.options.align;"right"==e?this.options.rtl?(this.right=t-this.width,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t-this.width,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width+"px",this.dom.dot.style.left=t-this.props.line.width/2-this.props.dot.width/2+"px"):"left"==e?this.options.rtl?(this.right=t,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t+"px",this.dom.dot.style.right=t+this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t+"px",this.dom.dot.style.left=t+this.props.line.width/2-this.props.dot.width/2+"px"):this.options.rtl?(this.right=t-this.width/2,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.dot.width/2+"px"):(this.left=t-this.width/2,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width/2+"px",this.dom.dot.style.left=t-this.props.dot.width/2+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box,i=this.dom.line,o=this.dom.dot;if("top"==t)e.style.top=(this.top||0)+"px",i.style.top="0",i.style.height=this.parent.top+this.top+1+"px",i.style.bottom="";else{var n=this.parent.itemSet.props.height,s=n-this.parent.top-this.parent.height+this.top;e.style.top=(this.parent.height-this.top-this.height||0)+"px",i.style.top=n-s+"px",i.style.bottom="0"}o.style.top=-this.props.dot.height/2+"px"},o.prototype.getWidthLeft=function(){return this.width/2},o.prototype.getWidthRight=function(){return this.width/2},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={dot:{top:0,width:0,height:0},content:{height:0,marginLeft:0,marginRight:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(22);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.width*t.getMillisecondsPerPixel();return this.data.start.getTime()+e>t.start&&this.data.start<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.point=document.createElement("div"),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.point.appendChild(this.dom.content),this.dom.dot=document.createElement("div"),this.dom.point.appendChild(this.dom.dot),this.dom.point["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.point.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.point)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.point),this._updateStyle(this.dom.point);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.point.className="vis-item vis-point"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{dot:{width:this.dom.dot.offsetWidth,height:this.dom.dot.offsetHeight},content:{width:this.dom.content.offsetWidth,height:this.dom.content.offsetHeight},point:{width:this.dom.point.offsetWidth,height:this.dom.point.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.dot.width=t.dot.width,this.props.dot.height=t.dot.height,this.props.content.height=t.content.height,this.options.rtl?this.dom.content.style.marginRight=2*this.props.dot.width+"px":this.dom.content.style.marginLeft=2*this.props.dot.width+"px",this.width=t.point.width,this.height=t.point.height,this.dom.dot.style.top=(this.height-this.props.dot.height)/2+"px",this.options.rtl?this.dom.dot.style.right=this.props.dot.width/2+"px":this.dom.dot.style.left=this.props.dot.width/2+"px",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.point),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.point)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){this.displayed&&(this.dom.point.parentNode&&this.dom.point.parentNode.removeChild(this.dom.point),this.displayed=!1)},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start);this.options.rtl?(this.right=t-this.props.dot.width,this.dom.point.style.right=this.right+"px"):(this.left=t-this.props.dot.width,this.dom.point.style.left=this.left+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.point;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype.getWidthLeft=function(){return this.props.dot.width},o.prototype.getWidthRight=function(){return this.props.dot.width},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(22),s=i(52),r=i(53);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-background",o.prototype.stack=!1,o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.background;if(!t)throw new Error("Cannot redraw item: parent has no background container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var t=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");this.dom.box.className=this.baseClassName+t}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.content).overflow,{content:{width:this.dom.content.offsetWidth}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=0,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup;this.dom.box.style.height=this.parent.subgroups[o].height+"px",this.dom.box.style.top="top"==i?this.parent.top+this.parent.subgroups[o].top+"px":this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},align:{string:o},rtl:{boolean:n,undefined:"undefined"},rollingMode:{follow:{boolean:n},offset:{number:s,undefined:"undefined"},__type__:{object:r}},verticalScroll:{boolean:n,undefined:"undefined"},horizontalScroll:{boolean:n,undefined:"undefined"},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},dataAttributes:{string:o,array:"array"},editable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},updateGroup:{boolean:n,undefined:"undefined"},updateTime:{boolean:n,undefined:"undefined"},overrideItems:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},__type__:{object:r}},moment:{function:"function"},groupOrder:{string:o,function:"function"},groupEditable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},order:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},groupOrderSwap:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},itemsAlwaysDraggable:{item:{boolean:n,undefined:"undefined"},range:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},limitSize:{boolean:n},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},margin:{axis:{number:s},item:{horizontal:{number:s,undefined:"undefined"},vertical:{number:s,undefined:"undefined"},__type__:{object:r,number:s}},__type__:{object:r,number:s}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},multiselectPerGroup:{boolean:n},onAdd:{function:"function"},onDropObjectOnItem:{function:"function"},onUpdate:{function:"function"},onMove:{function:"function"},onMoving:{function:"function"},onRemove:{function:"function"},onAddGroup:{function:"function"},onMoveGroup:{function:"function"},onRemoveGroup:{function:"function"},onInitialDrawComplete:{function:"function"},order:{function:"function"},orientation:{axis:{string:o,undefined:"undefined"},item:{string:o,undefined:"undefined"},__type__:{string:o,object:r}},selectable:{boolean:n},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},stack:{boolean:n},stackSubgroups:{boolean:n},snap:{function:"function",null:"null"},start:{date:"date",number:s,string:o,moment:"moment"},template:{function:"function"},groupTemplate:{function:"function"},visibleFrameTemplate:{string:o,function:"function"},showTooltips:{boolean:n},tooltip:{followMouse:{boolean:n},overflowMethod:{string:["cap","flip"]},__type__:{object:r}},tooltipOnItemUpdateTime:{template:{function:"function"},__type__:{boolean:n,object:r}},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},type:{string:o},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},__type__:{object:r}},h={global:{align:["center","left","right"],direction:!1,autoResize:!0,clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,stackSubgroups:!0,start:"",showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1,type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=a,e.configureOptions=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(16),s=o(n),r=i(1),a=o(r),h=i(30),d=o(h),l=i(31),u=o(l),p=i(0),c=i(137).default,m=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},p.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new c(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===(void 0===t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),!1===this.options.filter&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):!0!==e&&-1===e.indexOf(n)||(o=!0),!1!==o&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(!0===this.options.showButton){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:"_clean",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:"_getValue",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:"_makeItem",value:function(t){if(!0===this.allowCreation){var e=document.createElement("div");e.className="vis-configuration vis-config-item vis-config-s"+t.length;for(var i=arguments.length,o=Array(i>1?i-1:0),n=1;n<i;n++)o[n-1]=arguments[n];return o.forEach(function(t){e.appendChild(t)}),this.domElements.push(e),this.domElements.length}return 0}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerHTML=t,this._makeItem([],e)}},{key:"_makeLabel",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,o.innerHTML=!0===i?"<i><b>"+t+":</b></i>":t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;s<t.length;s++){var r=document.createElement("option");r.value=t[s],s===n&&(r.selected="selected"),r.innerHTML=t[s],o.appendChild(r)}var a=this;o.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,o)}},{key:"_makeRange",value:function(t,e,i){var o=t[0],n=t[1],s=t[2],r=t[3],a=document.createElement("input");a.className="vis-configuration vis-config-range";try{a.type="range",a.min=n,a.max=s}catch(t){}a.step=r;var h="",d=0;if(void 0!==e){e<0&&1.2*e<n?(a.min=Math.ceil(1.2*e),d=a.min,h="range increased"):e/1.2<n&&(a.min=Math.ceil(e/1.2),d=a.min,h="range increased"),1.2*e>s&&1!==s&&(a.max=Math.ceil(1.2*e),d=a.max,h="range increased"),a.value=e}else a.value=o;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var p=this._makeLabel(i[i.length-1],i),c=this._makeItem(i,p,a,l);""!==h&&this.popupHistory[c]!==d&&(this.popupHistory[c]=d,this._setupPopup(h,c))}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var o=document.createElement("div");o.id="vis-configuration-popup",o.className="vis-configuration-popup",o.innerHTML=t,o.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:o,index:e}}}},{key:"_removePopup",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:"_showPopupIfNeeded",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index],i=e.getBoundingClientRect();this.popupDiv.html.style.left=i.left+"px",this.popupDiv.html.style.top=i.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=setTimeout(function(){t.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=setTimeout(function(){t._removePopup()},1800)}}},{key:"_makeCheckbox",value:function(t,e,i){var o=document.createElement("input");o.type="checkbox",o.className="vis-configuration vis-config-checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"===(void 0===t?"undefined":(0,a.default)(t))?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var n=this;o.onchange=function(){n._update(this.checked,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeTextInput",value:function(t,e,i){var o=document.createElement("input");o.type="text",o.className="vis-configuration vis-config-text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var n=this;o.onchange=function(){n._update(this.value,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeColorField",value:function(t,e,i){var o=this,n=t[1],s=document.createElement("div");e=void 0===e?n:e,"none"!==e?(s.className="vis-configuration vis-config-colorBlock",s.style.backgroundColor=e):s.className="vis-configuration vis-config-colorBlock none",e=void 0===e?n:e,s.onclick=function(){o._showColorPicker(e,s,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,s)}},{key:"_showColorPicker",value:function(t,e,i){var o=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback(function(t){var n="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=n,o._update(n,i)}),this.colorPicker.setCloseCallback(function(){e.onclick=function(){o._showColorPicker(t,e,i)}})}},{key:"_handleObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!1,n=this.options.filter,s=!1;for(var r in t)if(t.hasOwnProperty(r)){o=!0;var a=t[r],h=p.copyAndExtendArray(e,r);if("function"==typeof n&&!1===(o=n(r,e))&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==o){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(-1!==e.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(l=!1),!0===l)if(void 0!==a.enabled){var u=p.copyAndExtendArray(h,"enabled"),c=this._getValue(u);if(!0===c){var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,c,h)}else{var f=this._makeLabel(r,h,!0);this._makeItem(h,f),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}return s}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i;t="true"===t||t,t="false"!==t&&t;for(var n=0;n<e.length;n++)"global"!==e[n]&&(void 0===o[e[n]]&&(o[e[n]]={}),n!==e.length-1?o=o[e[n]]:o[e[n]]=t);return i}},{key:"_printOptions",value:function(){var t=this.getOptions();this.optionsContainer.innerHTML="<pre>var options = "+(0,s.default)(t,null,2)+"</pre>"}},{key:"getOptions",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}();e.default=m},function(t,e,i){function o(t,e){this.id=r.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=r.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=r.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n=i(1),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(11),h=i(15),d=i(20),l=i(5),u=i(78),p=i(80),c=i(83),m=i(81),f=i(82),g=i(54);o.prototype=new l,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-line-graph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new c(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new c(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))<this.body.domProps.centerContainer.height&&(this.updateSVGheight=!0),r.selectiveDeepExtend(e,this.options,t),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),r.mergeOptions(this.options,t,"legend"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty("__ungrouped__")&&this.groups.__ungrouped__.setOptions(t)}this.dom.frame&&(this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0}))},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(r.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;r.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}},o.prototype.setGroups=function(t){var e,i=this;if(this.groupsData){r.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null;for(var o=0;o<e.length;o++)this._removeGroup(e[o])}if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var n=this.id;r.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}},o.prototype._onUpdate=function(t){this._updateAllGroupData(t)},o.prototype._onAdd=function(t){this._onUpdate(t)},o.prototype._onRemove=function(t){this._onUpdate(t)},o.prototype._onUpdateGroups=function(t){this._updateAllGroupData(null,t)},o.prototype._onAddGroups=function(t){this._onUpdateGroups(t)},o.prototype._onRemoveGroups=function(t){for(var e=0;e<t.length;e++)this._removeGroup(t[e]);this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})},o.prototype._removeGroup=function(t){this.groups.hasOwnProperty(t)&&("right"==this.groups[t].options.yAxisOrientation?(this.yAxisRight.removeGroup(t),this.legendRight.removeGroup(t),this.legendRight.redraw()):(this.yAxisLeft.removeGroup(t),this.legendLeft.removeGroup(t),this.legendLeft.redraw()),delete this.groups[t])},o.prototype._updateGroup=function(t,e){this.groups.hasOwnProperty(e)?(this.groups[e].update(t),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.updateGroup(e,this.groups[e]),this.legendRight.updateGroup(e,this.groups[e]),this.yAxisLeft.removeGroup(e),this.legendLeft.removeGroup(e)):(this.yAxisLeft.updateGroup(e,this.groups[e]),this.legendLeft.updateGroup(e,this.groups[e]),this.yAxisRight.removeGroup(e),this.legendRight.removeGroup(e))):(this.groups[e]=new p(t,e,this.options,this.groupsUsingDefaultStyles),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.addGroup(e,this.groups[e]),this.legendRight.addGroup(e,this.groups[e])):(this.yAxisLeft.addGroup(e,this.groups[e]),this.legendLeft.addGroup(e,this.groups[e]))),this.legendLeft.redraw(),this.legendRight.redraw()},o.prototype._updateAllGroupData=function(t,e){if(null!=this.itemsData){var i={},o=this.itemsData.get(),n=this.itemsData._fieldId,s={};t&&t.map(function(t){s[t]=t});for(var a={},h=0;h<o.length;h++){var d=o[h],l=d.group;null!==l&&void 0!==l||(l="__ungrouped__"),a.hasOwnProperty(l)?a[l]++:a[l]=1}var u={};if(!e&&t)for(l in this.groups)if(this.groups.hasOwnProperty(l)){g=this.groups[l];var p=g.getItems();i[l]=p.filter(function(t){return u[t[n]]=t[n],t[n]!==s[t[n]]});var c=a[l];a[l]-=i[l].length,i[l].length<c&&(i[l][c-1]={})}for(h=0;h<o.length;h++)if(d=o[h],l=d.group,null!==l&&void 0!==l||(l="__ungrouped__"),e||!t||d[n]===s[d[n]]||!u.hasOwnProperty(d[n])){i.hasOwnProperty(l)||(i[l]=new Array(a[l]));var m=r.bridgeObject(d);m.x=r.convert(d.x,"Date"),m.end=r.convert(d.end,"Date"),m.orginalY=d.y,m.y=Number(d.y),m[n]=d[n];var f=i[l].length-a[l]--;i[l][f]=m}for(l in this.groups)this.groups.hasOwnProperty(l)&&(i.hasOwnProperty(l)||(i[l]=new Array(0)));for(l in i)if(i.hasOwnProperty(l))if(0==i[l].length)this.groups.hasOwnProperty(l)&&this._removeGroup(l);else{var g=void 0;void 0!=this.groupsData&&(g=this.groupsData.get(l)),void 0==g&&(g={id:l,content:this.options.defaultGroup+l}),this._updateGroup(g,l),this.groups[l].setItems(i[l])}this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})}},o.prototype.redraw=function(){var t=!1;this.props.width=this.dom.frame.offsetWidth,this.props.height=this.body.domProps.centerContainer.height-this.body.domProps.border.top-this.body.domProps.border.bottom,t=this._isResized()||t;var e=this.body.range.end-this.body.range.start,i=e!=this.lastVisibleInterval;if(this.lastVisibleInterval=e,1==t&&(this.svg.style.width=r.option.asSize(3*this.props.width),this.svg.style.left=r.option.asSize(-this.props.width),-1==(this.options.height+"").indexOf("%")&&1!=this.updateSVGheightOnResize||(this.updateSVGheight=!0)),1==this.updateSVGheight?(this.options.graphHeight!=this.props.height+"px"&&(this.options.graphHeight=this.props.height+"px",this.svg.style.height=this.props.height+"px"),this.updateSVGheight=!1):this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",1==t||1==i||1==this.abortedGraphUpdate||1==this.forceGraphUpdate)t=this._updateGraph()||t,this.forceGraphUpdate=!1;else if(0!=this.lastStart){var o=this.body.range.start-this.lastStart,n=this.body.range.end-this.body.range.start;if(0!=this.props.width){var s=this.props.width/n,a=o*s;this.svg.style.left=-this.props.width-a+"px"}}return this.legendLeft.redraw(),this.legendRight.redraw(),t},o.prototype._getSortedGroupIds=function(){var t=[];for(var e in this.groups)if(this.groups.hasOwnProperty(e)){var i=this.groups[e];1!=i.visible||void 0!==this.options.groups.visibility[e]&&1!=this.options.groups.visibility[e]||t.push({id:e,zIndex:i.options.zIndex})}r.insertSort(t,function(t,e){var i=t.zIndex,o=e.zIndex;return void 0===i&&(i=0),void 0===o&&(o=0),i==o?0:i<o?-1:1});for(var o=new Array(t.length),n=0;n<t.length;n++)o[n]=t[n].id;return o},o.prototype._updateGraph=function(){if(a.prepareElements(this.svgElements),0!=this.props.width&&null!=this.itemsData){var t,e,i={},o=this.body.util.toGlobalTime(-this.body.domProps.root.width),n=this.body.util.toGlobalTime(2*this.body.domProps.root.width),s=this._getSortedGroupIds();if(s.length>0){var r={};for(this._getRelevantData(s,r,o,n),this._applySampling(s,r),e=0;e<s.length;e++)this._convertXcoordinates(r[s[e]]);if(this._getYRanges(s,r,i),1==this._updateYAxis(s,i))return a.cleanupElements(this.svgElements),this.abortedGraphUpdate=!0,!0;this.abortedGraphUpdate=!1;var h=void 0;for(e=0;e<s.length;e++)t=this.groups[s[e]],!0===this.options.stack&&"line"===this.options.style&&(void 0!=t.options.excludeFromStacking&&t.options.excludeFromStacking||(void 0!=h&&(this._stack(r[t.id],r[h.id]),1==t.options.shaded.enabled&&"group"!==t.options.shaded.orientation&&("top"==t.options.shaded.orientation&&"group"!==h.options.shaded.orientation?(h.options.shaded.orientation="group",h.options.shaded.groupId=t.id):(t.options.shaded.orientation="group",t.options.shaded.groupId=h.id))),h=t)),this._convertYcoordinates(r[s[e]],t);var d={};for(e=0;e<s.length;e++)if(t=this.groups[s[e]],"line"===t.options.style&&1==t.options.shaded.enabled){var l=r[s[e]];if(null==l||0==l.length)continue;if(d.hasOwnProperty(s[e])||(d[s[e]]=f.calcPath(l,t)),"group"===t.options.shaded.orientation){var u=t.options.shaded.groupId;if(-1===s.indexOf(u)){console.log(t.id+": Unknown shading group target given:"+u);continue}d.hasOwnProperty(u)||(d[u]=f.calcPath(r[u],this.groups[u])),f.drawShading(d[s[e]],t,d[u],this.framework)}else f.drawShading(d[s[e]],t,void 0,this.framework)}for(m.draw(s,r,this.framework),e=0;e<s.length;e++)if(t=this.groups[s[e]],r[s[e]].length>0)switch(t.options.style){case"line":d.hasOwnProperty(s[e])||(d[s[e]]=f.calcPath(r[s[e]],t)),f.draw(d[s[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||g.draw(r[s[e]],t,this.framework)}}}return a.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;a<t.length;a++){s=void 0,r=void 0;for(var h=i;h<e.length;h++){if(e[h].x===t[a].x){s=e[h],r=e[h],i=h;break}if(e[h].x>t[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,t[a].y=0==o?t[a].orginalY+r.y:t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,s,a,h;if(t.length>0)for(s=0;s<t.length;s++){n=this.groups[t[s]];var d=n.getItems();if(1==n.options.sort){var l=function(t,e){return t.getTime()==e.getTime()?0:t<e?-1:1},u=Math.max(0,r.binarySearchValue(d,i,"x","before",l)),p=Math.min(d.length,r.binarySearchValue(d,o,"x","after",l)+1);p<=0&&(p=d.length);var c=new Array(p-u);for(a=u;a<p;a++)h=n.itemsData[a],c[a-u]=h;e[t[s]]=c}else e[t[s]]=n.itemsData}},o.prototype._applySampling=function(t,e){var i;if(t.length>0)for(var o=0;o<t.length;o++)if(i=this.groups[t[o]],1==i.options.sampling){var n=e[t[o]];if(n.length>0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l<r;l+=s){var u=Math.round(l/s);d[u]=n[l]}e[t[o]]=d.splice(0,Math.round(r/s))}}},o.prototype._getYRanges=function(t,e,i){var o,n,s,r,a=[],h=[];if(t.length>0){for(s=0;s<t.length;s++)o=e[t[s]],r=this.groups[t[s]].options,o.length>0&&(n=this.groups[t[s]],!0===r.stack&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));m.getStackedYRange(a,i,t,"__barStackLeft","left"),m.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var u=0;u<t.length;u++){var p=this.groups[t[u]];p&&"right"!=p.options.yAxisOrientation?(s=!0,a=1e9,d=-1e9):p&&p.options.yAxisOrientation&&(r=!0,h=1e9,l=-1e9)}for(u=0;u<t.length;u++)e.hasOwnProperty(t[u])&&!0!==e[t[u]].ignore&&(i=e[t[u]].min,o=e[t[u]].max,"right"!=e[t[u]].yAxisOrientation?(s=!0,a=a>i?i:a,d=d<o?o:d):(r=!0,h=h>i?i:h,l=l<o?o:l));1==s&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}n=this._toggleAxisVisiblity(s,this.yAxisLeft)||n,n=this._toggleAxisVisiblity(r,this.yAxisRight)||n,1==r&&1==s?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!s,this.yAxisRight.masterAxis=this.yAxisLeft,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,n=this.yAxisLeft.redraw()||n,n=this.yAxisRight.redraw()||n):n=this.yAxisRight.redraw()||n;var c=["__barStackLeft","__barStackRight","__lineStackLeft","__lineStackRight"];for(u=0;u<c.length;u++)-1!=t.indexOf(c[u])&&t.splice(t.indexOf(c[u]),1);return n},o.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},o.prototype._convertXcoordinates=function(t){for(var e=this.body.util.toScreen,i=0;i<t.length;i++)t[i].screen_x=e(t[i].x)+this.props.width,t[i].screen_y=t[i].y,void 0!=t[i].end?t[i].screen_end=e(t[i].end)+this.props.width:t[i].screen_end=void 0},o.prototype._convertYcoordinates=function(t,e){var i=this.yAxisLeft,o=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(i=this.yAxisRight);for(var n=0;n<t.length;n++)t[n].screen_y=Math.round(i.convertValue(t[n].y));e.setZeroPosition(Math.min(o,i.convertValue(0)))},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=r.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!1,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,left:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}},right:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}}},this.linegraphOptions=o,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.scale=void 0,this.range={start:0,end:0},this.options=r.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.getBoundingClientRect().height,this.hidden=!1,this.stepPixels=25,this.zeroCrossing=-1,this.amountOfSteps=-1,this.lineOffset=0,this.master=!0,this.masterAxis=null,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups};var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var n=i(4),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(11),h=i(5),d=i(79);o.prototype=new h,o.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},o.prototype.updateGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.amountOfGroups+=1),this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","left","right","alignZeros"];r.selectiveDeepExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),!0===e&&this.dom.frame&&(this.hide(),this.show())}},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},o.prototype._redrawGroupIcons=function(){a.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=11.5;t="left"===this.options.orientation?4:this.width-e-4;var o=(0,s.default)(this.groups);o.sort(function(t,e){return t<e?-1:1});for(var n=0;n<o.length;n++){var r=o[n];!0!==this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&!0!==this.linegraphOptions.visibility[r]||(this.groups[r].getLegend(e,15,this.framework,t,i),i+=19)}a.cleanupElements(this.svgElements),this.iconsRemoved=!1},o.prototype._cleanupIcons=function(){!1===this.iconsRemoved&&(a.prepareElements(this.svgElements),a.cleanupElements(this.svgElements),this.iconsRemoved=!0)},o.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"===this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},o.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},o.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},o.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(!0!==this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&!0!==this.linegraphOptions.visibility[i]||e++);if(0===this.amountOfGroups||0===e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=!0===this.options.visible?Number((""+this.options.width).replace("px","")):0;var o=this.props,n=this.dom.frame;n.className="vis-data-axis",this._calculateCharSize();var s=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;o.minorLabelHeight=r?o.minorCharHeight:0,o.majorLabelHeight=a?o.majorCharHeight:0,o.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,o.minorLineHeight=1,o.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,o.majorLineHeight=1,"left"===s?(n.style.top="0",n.style.left="0",n.style.bottom="",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.left.width,this.props.height=this.body.domProps.left.height):(n.style.top="",n.style.bottom="0",n.style.left="0",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.right.width,this.props.height=this.body.domProps.right.height),t=this._redrawLabels(),t=this._isResized()||t,!0===this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(s)}return t},o.prototype._redrawLabels=function(){var t=this,e=!1;a.prepareElements(this.DOMelements.lines),a.prepareElements(this.DOMelements.labels);var i=this.options.orientation,o=void 0!=this.options[i].range?this.options[i].range:{},n=!0;void 0!=o.max&&(this.range.end=o.max,n=!1);var s=!0;void 0!=o.min&&(this.range.start=o.min,s=!1),this.scale=new d(this.range.start,this.range.end,s,n,this.dom.frame.offsetHeight,this.props.majorCharHeight,this.options.alignZeros,this.options[i].format),!1===this.master&&void 0!=this.masterAxis&&this.scale.followScale(this.masterAxis.scale),this.maxLabelSize=0,this.scale.getLines().forEach(function(e){var o=e.y,n=e.major;t.options.showMinorLabels&&!1===n&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-minor",t.props.minorCharHeight),n&&o>=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),!0===t.master&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var r=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(r=this.props.titleCharHeight);var h=!0===this.options.icons?Math.max(this.options.iconWidth,r)+this.options.labelOffsetX+15:r+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-h&&!0===this.options.visible?(this.width=this.maxLabelSize+h,this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSize<this.width-h&&!0===this.options.visible&&this.width>this.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+h),this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var s=a.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize<e.length*r&&(this.maxLabelSize=e.length*r)},o.prototype._redrawLine=function(t,e,i,o,n){if(!0===this.master){var s=a.getDOMElement("div",this.DOMelements.lines,this.dom.lineContainer);s.className=i,s.innerHTML="","left"===e?s.style.left=this.width-o+"px":s.style.right=this.width-o+"px",s.style.width=n+"px",s.style.top=t+"px"}},o.prototype._redrawTitle=function(t){if(a.prepareElements(this.DOMelements.title),void 0!==this.options[t].title&&void 0!==this.options[t].title.text){var e=a.getDOMElement("div",this.DOMelements.title,this.dom.frame);e.className="vis-y-axis vis-title vis-"+t,e.innerHTML=this.options[t].title.text,void 0!==this.options[t].title.style&&r.addCssText(e,this.options[t].title.style),"left"===t?e.style.left=this.props.titleCharHeight+"px":e.style.right=this.props.titleCharHeight+"px",e.style.width=this.height+"px"}a.cleanupElements(this.DOMelements.title)},o.prototype._calculateCharSize=function(){if(!("minorCharHeight"in this.props)){var t=document.createTextNode("0"),e=document.createElement("div");e.className="vis-y-axis vis-minor vis-measure",e.appendChild(t),this.dom.frame.appendChild(e),this.props.minorCharHeight=e.clientHeight,this.props.minorCharWidth=e.clientWidth,this.dom.frame.removeChild(e)}if(!("majorCharHeight"in this.props)){var i=document.createTextNode("0"),o=document.createElement("div");o.className="vis-y-axis vis-major vis-measure",o.appendChild(i),this.dom.frame.appendChild(o),this.props.majorCharHeight=o.clientHeight,this.props.majorCharWidth=o.clientWidth,this.dom.frame.removeChild(o)}if(!("titleCharHeight"in this.props)){var n=document.createTextNode("0"),s=document.createElement("div");s.className="vis-y-axis vis-title vis-measure",s.appendChild(n),this.dom.frame.appendChild(s),this.props.titleCharHeight=s.clientHeight,this.props.titleCharWidth=s.clientWidth,this.dom.frame.removeChild(s)}},t.exports=o},function(t,e,i){function o(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>h.magnitudefactor*h.minorSteps[h.minorStepIdx]*.5?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}o.prototype.setCharHeight=function(t){this.majorCharHeight=t},o.prototype.setHeight=function(t){this.containerHeight=t},o.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r<this.minorSteps.length;r++){if(this.magnitudefactor*this.minorSteps[r]>=e){n=!0,this.minorStepIdx=r;break}}if(!0===n)break}},o.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])==0},o.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},o.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},o.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},o.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},o.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdx<this.minorStepIdx?(this.minorStepIdx=1,2==e?s():(s(),s())):(this.minorStepIdx=2,1==e?r():(r(),r())));for(var a=t.convertValue(0),h=t.getStep()*t.scale,d=!1,l=0;!d&&l++<5;){this.scale=h/(this.minorSteps[this.minorStepIdx]*this.magnitudefactor);var u=this.containerHeight/this.scale;this._start=i,this._end=this._start+u;var p=this._end*this.scale,c=this.magnitudefactor*this.majorSteps[this.minorStepIdx],m=this.getFirstMajor()-t.getFirstMajor();if(this.zeroAlign){var f=a-p;this._end+=f/this.scale,this._start=this._end-u}else this.autoScaleStart?(this._start-=m/this.scale,this._end=this._start+u):(this._start+=c-m/this.scale,this._end=this._start+u);if(!this.autoScaleEnd&&this._end>o+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start<i-1e-5){if(!(this.zeroAlign&&i>=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&u<o-i?(s(),d=!1):d=!0}}},o.prototype.convertValue=function(t){return this.containerHeight-(t-this._start)*this.scale},o.prototype.screenToValue=function(t){return(this.containerHeight-t)/this.scale+this._start},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=e;var n=["sampling","style","sort","yAxisOrientation","barChart","drawPoints","shaded","interpolation","zIndex","excludeFromStacking","excludeFromLegend"];this.options=r.selectiveBridgeObject(n,i),this.usingDefaultStyle=void 0===t.className,this.groupsUsingDefaultStyles=o,this.zeroPosition=0,this.update(t),1==this.usingDefaultStyle&&(this.groupsUsingDefaultStyles[0]+=1),this.itemsData=[],this.visible=void 0===t.visible||t.visible}var n=i(1),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(81),h=i(82),d=i(54);o.prototype.setItems=function(t){null!=t?(this.itemsData=t,1==this.options.sort&&r.insertSort(this.itemsData,function(t,e){return t.x>e.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];r.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){i={svg:document.createElementNS("http://www.w3.org/2000/svg","svg"),svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":h.drawIcon(this,o,n,t,e,i);break;case"points":case"point":d.drawIcon(this,o,n,t,e,i);break;case"bar":a.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;o<t.length;o++)e=e>t[o].y?t[o].y:e,i=i<t[o].y?t[o].y:i;return{min:e,max:i,yAxisOrientation:this.options.yAxisOrientation}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(11),s=i(54);o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,h=n.getSVGElement("rect",r.svgElements,r.svg);h.setAttributeNS(null,"x",e),h.setAttributeNS(null,"y",i-a),h.setAttributeNS(null,"width",o),h.setAttributeNS(null,"height",2*a),h.setAttributeNS(null,"class","vis-outline");var d=Math.round(.3*o),l=t.options.barChart.width,u=l/d,p=Math.round(.4*s),c=Math.round(.75*s),m=Math.round((o-2*d)/3);if(n.drawBar(e+.5*d+m,i+a-p-1,d,p,t.className+" vis-bar",r.svgElements,r.svg,t.style),n.drawBar(e+1.5*d+m+2,i+a-c-1,d,c,t.className+" vis-bar",r.svgElements,r.svg,t.style),1==t.options.drawPoints.enabled){var f={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size/u,className:t.className};n.drawPoint(e+.5*d+m,i+a-p-1,f,r.svgElements,r.svg),n.drawPoint(e+1.5*d+m+2,i+a-c-1,f,r.svgElements,r.svg)}},o.draw=function(t,e,i){var r,a,h,d,l,u,p=[],c={},m=0;for(l=0;l<t.length;l++)if(d=i.groups[t[l]],"bar"===d.options.style&&!0===d.visible&&(void 0===i.options.groups.visibility[t[l]]||!0===i.options.groups.visibility[t[l]]))for(u=0;u<e[t[l]].length;u++)p.push({screen_x:e[t[l]][u].screen_x,screen_end:e[t[l]][u].screen_end,screen_y:e[t[l]][u].screen_y,x:e[t[l]][u].x,end:e[t[l]][u].end,y:e[t[l]][u].y,groupId:t[l],label:e[t[l]][u].label}),m+=1;if(0!==m)for(p.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x}),o._getDataIntersections(c,p),l=0;l<p.length;l++){d=i.groups[p[l].groupId];var f=void 0!=d.options.barChart.minWidth?d.options.barChart.minWidth:.1*d.options.barChart.width;a=p[l].screen_x;var g=0;if(void 0===c[a])l+1<p.length&&(r=Math.abs(p[l+1].screen_x-a)),h=o._getSafeDrawData(r,d,f);else{var v=l+(c[a].amount-c[a].resolved);v<p.length&&(r=Math.abs(p[v].screen_x-a)),h=o._getSafeDrawData(r,d,f),c[a].resolved+=1,!0===d.options.stack&&!0!==d.options.excludeFromStacking?p[l].screen_y<d.zeroPosition?(g=c[a].accumulatedNegative,c[a].accumulatedNegative+=d.zeroPosition-p[l].screen_y):(g=c[a].accumulatedPositive,c[a].accumulatedPositive+=d.zeroPosition-p[l].screen_y):!0===d.options.barChart.sideBySide&&(h.width=h.width/c[a].amount,h.offset+=c[a].resolved*h.width-.5*h.width*(c[a].amount+1))}var y=h.width,b=p[l].screen_x;if(void 0!=p[l].screen_end?(y=p[l].screen_end-p[l].screen_x,b+=.5*y):b+=h.offset,n.drawBar(b,p[l].screen_y-g,y,d.zeroPosition-p[l].screen_y,d.className+" vis-bar",i.svgElements,i.svg,d.style),!0===d.options.drawPoints.enabled){var _={screen_x:p[l].screen_x,screen_y:p[l].screen_y-g,x:p[l].x,y:p[l].y,groupId:p[l].groupId,label:p[l].label};s.draw([_],d,i,h.offset)}}},o._getDataIntersections=function(t,e){for(var i,o=0;o<e.length;o++)o+1<e.length&&(i=Math.abs(e[o+1].screen_x-e[o].screen_x)),o>0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t<e.options.barChart.width&&t>0?(o=t<i?i:t,n=0,"left"===e.options.barChart.align?n-=.5*t:"right"===e.options.barChart.align&&(n+=.5*t)):(o=e.options.barChart.width,n=0,"left"===e.options.barChart.align?n-=.5*e.options.barChart.width:"right"===e.options.barChart.align&&(n+=.5*e.options.barChart.width)),{width:o,offset:n}},o.getStackedYRange=function(t,e,i,n,s){if(t.length>0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x});var r={};o._getDataIntersections(r,t),e[n]=o._getStackedYRange(r,t),e[n].yAxisOrientation=s,i.push(n)}},o._getStackedYRange=function(t,e){for(var i,o=e[0].screen_y,n=e[0].screen_y,s=0;s<e.length;s++)i=e[s].screen_x,void 0===t[i]?(o=o>e[s].screen_y?e[s].screen_y:o,n=n<e[s].screen_y?e[s].screen_y:n):e[s].screen_y<0?t[i].accumulatedNegative+=e[s].screen_y:t[i].accumulatedPositive+=e[s].screen_y;for(var r in t)t.hasOwnProperty(r)&&(o=o>t[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n<t[r].accumulatedNegative?t[r].accumulatedNegative:n,n=n<t[r].accumulatedPositive?t[r].accumulatedPositive:n);return{min:o,max:n}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(11);o.calcPath=function(t,e){if(null!=t&&t.length>0){return 1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o,n=e;if(i)for(o=t.length-2;o>0;o--)n+=t[o][0]+","+t[o][1]+" ";else for(o=1;o<t.length;o++)n+=t[o][0]+","+t[o][1]+" ";return n},o._catmullRomUniform=function(t){var e,i,o,n,s,r,a=[];a.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var h=t.length,d=0;d<h-1;d++)e=0==d?t[0]:t[d-1],i=t[d],o=t[d+1],n=d+2<h?t[d+2]:o,s={screen_x:(-e.screen_x+6*i.screen_x+o.screen_x)*(1/6),screen_y:(-e.screen_y+6*i.screen_y+o.screen_y)*(1/6)},r={screen_x:(i.screen_x+6*o.screen_x-n.screen_x)*(1/6),screen_y:(i.screen_y+6*o.screen_y-n.screen_y)*(1/6)},a.push([s.screen_x,s.screen_y]),a.push([r.screen_x,r.screen_y]),a.push([o.screen_x,o.screen_y]);return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);var o,n,s,r,a,h,d,l,u,p,c,m,f,g,v,y,b,_,w,x=[];x.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var D=t.length,S=0;S<D-1;S++)o=0==S?t[0]:t[S-1],n=t[S],s=t[S+1],r=S+2<D?t[S+2]:s,d=Math.sqrt(Math.pow(o.screen_x-n.screen_x,2)+Math.pow(o.screen_y-n.screen_y,2)),l=Math.sqrt(Math.pow(n.screen_x-s.screen_x,2)+Math.pow(n.screen_y-s.screen_y,2)),u=Math.sqrt(Math.pow(s.screen_x-r.screen_x,2)+Math.pow(s.screen_y-r.screen_y,2)),g=Math.pow(u,i),y=Math.pow(u,2*i),v=Math.pow(l,i),b=Math.pow(l,2*i),w=Math.pow(d,i),_=Math.pow(d,2*i),p=2*_+3*w*v+b,c=2*y+3*g*v+b,m=3*w*(w+v),m>0&&(m=1/m),f=3*g*(g+v),f>0&&(f=1/f),a={screen_x:(-b*o.screen_x+p*n.screen_x+_*s.screen_x)*m,screen_y:(-b*o.screen_y+p*n.screen_y+_*s.screen_y)*m},h={screen_x:(y*n.screen_x+c*s.screen_x-b*r.screen_x)*f,screen_y:(y*n.screen_y+c*s.screen_y-b*r.screen_y)*f},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i<t.length;i++)e.push([t[i].screen_x,t[i].screen_y]);return e},t.exports=o},function(t,e,i){function o(t,e,i,o){this.body=t,this.defaultOptions={enabled:!1,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},this.side=i,this.options=r.extend({},this.defaultOptions),this.linegraphOptions=o,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.setOptions(e)}var n=i(4),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(0),a=i(11),h=i(5);o.prototype=new h,o.prototype.clear=function(){this.groups={},this.amountOfGroups=0},o.prototype.addGroup=function(t,e){1!=e.options.excludeFromLegend&&(this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1)},o.prototype.updateGroup=function(t,e){this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="vis-legend-text",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];r.selectiveDeepExtend(e,this.options,t)},o.prototype.redraw=function(){var t=0,e=(0,s.default)(this.groups);e.sort(function(t,e){return t<e?-1:1});for(var i=0;i<e.length;i++){var o=e[i];1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||t++}if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var n=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+n+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var r="";for(i=0;i<e.length;i++)o=e[i],1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||(r+=this.groups[o].content+"<br />");this.dom.textArea.innerHTML=r,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,s.default)(this.groups);t.sort(function(t,e){return t<e?-1:1}),a.resetElements(this.svgElements);var e=window.getComputedStyle(this.dom.frame).paddingTop,i=Number(e.replace("px","")),o=i,n=this.options.iconSize,r=.75*this.options.iconSize,h=i+.5*r+3;this.svg.style.width=n+5+i+"px";for(var d=0;d<t.length;d++){var l=t[d];1!=this.groups[l].visible||void 0!==this.linegraphOptions.visibility[l]&&1!=this.linegraphOptions.visibility[l]||(this.groups[l].getLegend(n,r,this.framework,o,h),h+=r+this.options.iconSpacing)}}},t.exports=o},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},yAxisOrientation:{string:["left","right"]},defaultGroup:{string:o},sort:{boolean:n},sampling:{boolean:n},stack:{boolean:n},graphHeight:{string:o,number:s},shaded:{enabled:{boolean:n},orientation:{string:["bottom","top","zero","group"]},groupId:{object:r},__type__:{boolean:n,object:r}},style:{string:["line","bar","points"]},barChart:{width:{number:s},minWidth:{number:s},sideBySide:{boolean:n},align:{string:["left","center","right"]},__type__:{object:r}},interpolation:{enabled:{boolean:n},parametrization:{string:["centripetal","chordal","uniform"]},alpha:{number:s},__type__:{object:r,boolean:n}},drawPoints:{enabled:{boolean:n},onRender:{function:"function"},size:{number:s},style:{string:["square","circle"]},__type__:{object:r,boolean:n,function:"function"}},dataAxis:{showMinorLabels:{boolean:n},showMajorLabels:{boolean:n},icons:{boolean:n},width:{string:o,number:s},visible:{boolean:n},alignZeros:{boolean:n},left:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},right:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},__type__:{object:r}},legend:{enabled:{boolean:n},icons:{boolean:n},left:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},right:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},__type__:{object:r,boolean:n}},groups:{visibility:{any:"any"},__type__:{object:r}},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},moment:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},orientation:{string:o},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},start:{date:"date",number:s,string:o,moment:"moment"},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},zIndex:{number:s},__type__:{object:r}},h={global:{sort:!0,sampling:!0,stack:!1,shaded:{enabled:!1,orientation:["zero","top","bottom","group"]},style:["line","bar","points"],barChart:{width:[50,5,100,5],minWidth:[50,5,100,5],sideBySide:!1,align:["left","center","right"]},interpolation:{enabled:!0,parametrization:["centripetal","chordal","uniform"]},drawPoints:{enabled:!0,size:[6,2,30,1],style:["square","circle"]},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:[40,0,200,1],visible:!0,alignZeros:!0,left:{title:{text:"",style:""}},right:{title:{text:"",style:""}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]},right:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]}},autoResize:!0,clickToUse:!1,end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},height:"",locale:"",max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!0,orientation:["both","bottom","top"],showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,start:"",width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1],zIndex:0}};e.allOptions=a,e.configureOptions=h},function(t,e,i){e.util=i(0),e.DOMutil=i(11),e.DataSet=i(15),e.DataView=i(20),e.Queue=i(65),e.Timeline=i(129),e.Graph2d=i(138),e.timeline={Core:i(48),DateUtil:i(21),Range:i(47),stack:i(71),TimeStep:i(49),components:{items:{Item:i(22),BackgroundItem:i(74),BoxItem:i(72),PointItem:i(73),RangeItem:i(53)},BackgroundGroup:i(52),Component:i(5),CurrentTime:i(50),CustomTime:i(29),DataAxis:i(78),DataScale:i(79),GraphGroup:i(80),Group:i(51),ItemSet:i(70),Legend:i(83),LineGraph:i(77),TimeAxis:i(28)}},e.moment=i(3),e.Hammer=i(12),e.keycharm=i(68)},function(t,e,i){t.exports={default:i(87),__esModule:!0}},function(t,e,i){i(55),i(62),t.exports=i(102)},function(t,e,i){var o=i(89),n=i(90),s=i(23),r=i(13);t.exports=i(56)(Array,"Array",function(t,e){this._t=r(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,i=this._i++;return!t||i>=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,i){var o=i(33);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e,i){var o=i(93);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(37),n=i(25),s=i(42),r={};i(14)(r,i(7)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(8),n=i(18),s=i(26);t.exports=i(9)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(13),n=i(97),s=i(98);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if((a=h[l++])!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(38),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e,i){var o=i(38),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(6).document;t.exports=o&&o.documentElement},function(t,e,i){var o=i(10),n=i(61),s=i(39)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(38),n=i(34);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):r-56320+(s-55296<<10)+65536)}}},function(t,e,i){var o=i(18),n=i(103);t.exports=i(2).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(104),n=i(7)("iterator"),s=i(23);t.exports=i(2).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){var o=i(33),n=i(7)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){i(106);var o=i(2).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(17);o(o.S,"Object",{create:i(37)})},function(t,e,i){i(108),t.exports=i(2).Object.keys},function(t,e,i){var o=i(61),n=i(26);i(109)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){var o=i(17),n=i(2),s=i(19);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){t.exports={default:i(111),__esModule:!0}},function(t,e,i){i(62),i(55),t.exports=i(44).f("iterator")},function(t,e,i){t.exports={default:i(113),__esModule:!0}},function(t,e,i){i(114),i(120),i(121),i(122),t.exports=i(2).Symbol},function(t,e,i){var o=i(6),n=i(10),s=i(9),r=i(17),a=i(59),h=i(115).KEY,d=i(19),l=i(40),u=i(42),p=i(27),c=i(7),m=i(44),f=i(45),g=i(116),v=i(117),y=i(18),b=i(13),_=i(36),w=i(25),x=i(37),D=i(118),S=i(119),k=i(8),C=i(26),T=S.f,M=k.f,O=D.f,E=o.Symbol,P=o.JSON,I=P&&P.stringify,N=c("_hidden"),A=c("toPrimitive"),R={}.propertyIsEnumerable,L=l("symbol-registry"),F=l("symbols"),H=l("op-symbols"),j=Object.prototype,Y="function"==typeof E,G=o.QObject,z=!G||!G.prototype||!G.prototype.findChild,W=s&&d(function(){return 7!=x(M({},"a",{get:function(){return M(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=T(j,e);o&&delete j[e],M(t,e,i),o&&t!==j&&M(j,e,o)}:M,V=function(t){var e=F[t]=x(E.prototype);return e._k=t,e},B=Y&&"symbol"==typeof E.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof E},U=function(t,e,i){return t===j&&U(H,e,i),y(t),e=_(e,!0),y(i),n(F,e)?(i.enumerable?(n(t,N)&&t[N][e]&&(t[N][e]=!1),i=x(i,{enumerable:w(0,!1)})):(n(t,N)||M(t,N,w(1,{})),t[N][e]=!0),W(t,e,i)):M(t,e,i)},q=function(t,e){y(t);for(var i,o=g(e=b(e)),n=0,s=o.length;s>n;)U(t,i=o[n++],e[i]);return t},X=function(t,e){return void 0===e?x(t):q(x(t),e)},Z=function(t){var e=R.call(this,t=_(t,!0));return!(this===j&&n(F,t)&&!n(H,t))&&(!(e||!n(this,t)||!n(F,t)||n(this,N)&&this[N][t])||e)},K=function(t,e){if(t=b(t),e=_(e,!0),t!==j||!n(F,e)||n(H,e)){var i=T(t,e);return!i||!n(F,e)||n(t,N)&&t[N][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=O(b(t)),o=[],s=0;i.length>s;)n(F,e=i[s++])||e==N||e==h||o.push(e);return o},$=function(t){for(var e,i=t===j,o=O(i?H:b(t)),s=[],r=0;o.length>r;)!n(F,e=o[r++])||i&&!n(j,e)||s.push(F[e]);return s};Y||(E=function(){if(this instanceof E)throw TypeError("Symbol is not a constructor!");var t=p(arguments.length>0?arguments[0]:void 0),e=function(i){this===j&&e.call(H,i),n(this,N)&&n(this[N],t)&&(this[N][t]=!1),W(this,t,w(1,i))};return s&&z&&W(j,t,{configurable:!0,set:e}),V(t)},a(E.prototype,"toString",function(){return this._k}),S.f=K,k.f=U,i(64).f=D.f=J,i(46).f=Z,i(63).f=$,s&&!i(35)&&a(j,"propertyIsEnumerable",Z,!0),m.f=function(t){return V(c(t))}),r(r.G+r.W+r.F*!Y,{Symbol:E});for(var Q="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Q.length>tt;)c(Q[tt++]);for(var et=C(c.store),it=0;et.length>it;)f(et[it++]);r(r.S+r.F*!Y,"Symbol",{for:function(t){return n(L,t+="")?L[t]:L[t]=E(t)},keyFor:function(t){if(!B(t))throw TypeError(t+" is not a symbol!");for(var e in L)if(L[e]===t)return e},useSetter:function(){z=!0},useSimple:function(){z=!1}}),r(r.S+r.F*!Y,"Object",{create:X,defineProperty:U,defineProperties:q,getOwnPropertyDescriptor:K,getOwnPropertyNames:J,getOwnPropertySymbols:$}),P&&r(r.S+r.F*(!Y||d(function(){var t=E();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!B(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&v(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!B(e))return e}),o[1]=e,I.apply(P,o)}}}),E.prototype[A]||i(14)(E.prototype,A,E.prototype.valueOf),u(E,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(27)("meta"),n=i(24),s=i(10),r=i(8).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(19)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},p=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},c=function(t){return d&&m.NEED&&h(t)&&!s(t,o)&&l(t),t},m=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:p,onFreeze:c}},function(t,e,i){var o=i(26),n=i(63),s=i(46);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e,i){var o=i(33);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(13),n=i(64).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e,i){var o=i(46),n=i(25),s=i(13),r=i(36),a=i(10),h=i(57),d=Object.getOwnPropertyDescriptor;e.f=i(9)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e){},function(t,e,i){i(45)("asyncIterator")},function(t,e,i){i(45)("observable")},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(0,function(){function e(){return To.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function n(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}function s(t){return void 0===t}function r(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i<t.length;++i)o.push(e(t[i],i));return o}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function l(t,e){for(var i in e)d(e,i)&&(t[i]=e[i]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function u(t,e,i,o){return Se(t,e,i,o,!0).utc()}function p(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function c(t){return null==t._pf&&(t._pf=p()),t._pf}function m(t){if(null==t._isValid){var e=c(t),i=Mo.call(e.parsedDateParts,function(t){return null!=t}),o=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(o=o&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return o;t._isValid=o}return t._isValid}function f(t){var e=u(NaN);return null!=t?l(c(e),t):c(e).userInvalidated=!0,e}function g(t,e){var i,o,n;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=c(e)),s(e._locale)||(t._locale=e._locale),Oo.length>0)for(i=0;i<Oo.length;i++)o=Oo[i],n=e[o],s(n)||(t[o]=n);return t}function v(t){g(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===Eo&&(Eo=!0,e.updateOffset(this),Eo=!1)}function y(t){return t instanceof v||null!=t&&null!=t._isAMomentObject}function b(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function _(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=b(e)),i}function w(t,e,i){var o,n=Math.min(t.length,e.length),s=Math.abs(t.length-e.length),r=0;for(o=0;o<n;o++)(i&&t[o]!==e[o]||!i&&_(t[o])!==_(e[o]))&&r++;return r+s}function x(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function D(t,i){var o=!0;return l(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),o){for(var n,s=[],r=0;r<arguments.length;r++){if(n="","object"==typeof arguments[r]){n+="\n["+r+"] ";for(var a in arguments[0])n+=a+": "+arguments[0][a]+", ";n=n.slice(0,-2)}else n=arguments[r];s.push(n)}x(t+"\nArguments: "+Array.prototype.slice.call(s).join("")+"\n"+(new Error).stack),o=!1}return i.apply(this,arguments)},i)}function S(t,i){null!=e.deprecationHandler&&e.deprecationHandler(t,i),Po[t]||(x(i),Po[t]=!0)}function k(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function C(t){var e,i;for(i in t)e=t[i],k(e)?this[i]=e:this["_"+i]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function T(t,e){var i,n=l({},t);for(i in e)d(e,i)&&(o(t[i])&&o(e[i])?(n[i]={},l(n[i],t[i]),l(n[i],e[i])):null!=e[i]?n[i]=e[i]:delete n[i]);for(i in t)d(t,i)&&!d(e,i)&&o(t[i])&&(n[i]=l({},n[i]));return n}function M(t){null!=t&&this.set(t)}function O(t,e,i){var o=this._calendar[t]||this._calendar.sameElse;return k(o)?o.call(e,i):o}function E(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function P(){return this._invalidDate}function I(t){return this._ordinal.replace("%d",t)}function N(t,e,i,o){var n=this._relativeTime[i];return k(n)?n(t,e,i,o):n.replace(/%d/i,t)}function A(t,e){var i=this._relativeTime[t>0?"future":"past"];return k(i)?i(e):i.replace(/%s/i,e)}function R(t,e){var i=t.toLowerCase();Fo[i]=Fo[i+"s"]=Fo[e]=t}function L(t){return"string"==typeof t?Fo[t]||Fo[t.toLowerCase()]:void 0}function F(t){var e,i,o={};for(i in t)d(t,i)&&(e=L(i))&&(o[e]=t[i]);return o}function H(t,e){Ho[t]=e}function j(t){var e=[];for(var i in t)e.push({unit:i,priority:Ho[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function Y(t,e,i){var o=""+Math.abs(t),n=e-o.length;return(t>=0?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function G(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(zo[t]=n),e&&(zo[e[0]]=function(){return Y(n.apply(this,arguments),e[1],e[2])}),i&&(zo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function z(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function W(t){var e,i,o=t.match(jo);for(e=0,i=o.length;e<i;e++)zo[o[e]]?o[e]=zo[o[e]]:o[e]=z(o[e]);return function(e){var n,s="";for(n=0;n<i;n++)s+=k(o[n])?o[n].call(e,t):o[n];return s}}function V(t,e){return t.isValid()?(e=B(e,t.localeData()),Go[e]=Go[e]||W(e),Go[e](t)):t.localeData().invalidDate()}function B(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(Yo.lastIndex=0;o>=0&&Yo.test(t);)t=t.replace(Yo,i),Yo.lastIndex=0,o-=1;return t}function U(t,e,i){an[t]=k(e)?e:function(t,o){return t&&i?i:e}}function q(t,e){return d(an,t)?an[t](e._strict,e._locale):new RegExp(X(t))}function X(t){return Z(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function Z(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function K(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),r(e)&&(o=function(t,i){i[e]=_(t)}),i=0;i<t.length;i++)hn[t[i]]=o}function J(t,e){K(t,function(t,i,o,n){o._w=o._w||{},e(t,o._w,o,n)})}function $(t,e,i){null!=e&&d(hn,t)&&hn[t](e,i._a,i,t)}function Q(t){return tt(t)?366:365}function tt(t){return t%4==0&&t%100!=0||t%400==0}function et(){return tt(this.year())}function it(t,i){return function(o){return null!=o?(nt(this,t,o),e.updateOffset(this,i),this):ot(this,t)}}function ot(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function nt(t,e,i){t.isValid()&&!isNaN(i)&&("FullYear"===e&&tt(t.year())?t._d["set"+(t._isUTC?"UTC":"")+e](i,t.month(),ht(i,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](i))}function st(t){return t=L(t),k(this[t])?this[t]():this}function rt(t,e){if("object"==typeof t){t=F(t);for(var i=j(t),o=0;o<i.length;o++)this[i[o].unit](t[i[o].unit])}else if(t=L(t),k(this[t]))return this[t](e);return this}function at(t,e){return(t%e+e)%e}function ht(t,e){if(isNaN(t)||isNaN(e))return NaN;var i=at(e,12);return t+=(e-i)/12,1===i?tt(t)?29:28:31-i%7%2}function dt(t,e){return t?i(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||_n).test(e)?"format":"standalone"][t.month()]:i(this._months)?this._months:this._months.standalone}function lt(t,e){return t?i(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[_n.test(e)?"format":"standalone"][t.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ut(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)s=u([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(s,"").toLocaleLowerCase();return i?"MMM"===e?(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null):(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):"MMM"===e?-1!==(n=yn.call(this._shortMonthsParse,r))?n:(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):-1!==(n=yn.call(this._longMonthsParse,r))?n:(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null)}function pt(t,e,i){var o,n,s;if(this._monthsParseExact)return ut.call(this,t,e,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(n=u([2e3,o]),i&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),i||this._monthsParse[o]||(s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[o].test(t))return o;if(i&&"MMM"===e&&this._shortMonthsParse[o].test(t))return o;if(!i&&this._monthsParse[o].test(t))return o}}function ct(t,e){var i;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=_(e);else if(e=t.localeData().monthsParse(e),!r(e))return t;return i=Math.min(t.date(),ht(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t}function mt(t){return null!=t?(ct(this,t),e.updateOffset(this,!0),this):ot(this,"Month")}function ft(){return ht(this.year(),this.month())}function gt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Dn),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function vt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Sn),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function yt(){function t(t,e){return e.length-t.length}var e,i,o=[],n=[],s=[];for(e=0;e<12;e++)i=u([2e3,e]),o.push(this.monthsShort(i,"")),n.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(o.sort(t),n.sort(t),s.sort(t),e=0;e<12;e++)o[e]=Z(o[e]),n[e]=Z(n[e]);for(e=0;e<24;e++)s[e]=Z(s[e]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function bt(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return t<100&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i;return-(7+_t(t,0,o).getUTCDay()-e)%7+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=Q(s)+d):d>Q(t)?(s=t+1,r=d-Q(t)):(s=t,r=d),{year:s,dayOfYear:r}}function Dt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(Q(t)-o+n)/7}function kt(t){return Dt(t,this._week.dow,this._week.doy).week}function Ct(){return this._week.dow}function Tt(){return this._week.doy}function Mt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Ot(t){var e=Dt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Et(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function It(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Nt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function At(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Rt(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=yn.call(this._weekdaysParse,r),-1!==n?n:null):"ddd"===e?(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null):(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"dddd"===e?-1!==(n=yn.call(this._weekdaysParse,r))?n:-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"ddd"===e?-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):-1!==(n=yn.call(this._minWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null)}function Lt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return Rt.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=u([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Et(t,this.localeData()),this.add(t-e,"d")):e}function Ht(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function jt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Yt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=On),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Gt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=En),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function zt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Wt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Wt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=u([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=Z(a[e]),h[e]=Z(h[e]),d[e]=Z(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Vt(){return this.hours()%12||12}function Bt(){return this.hours()||24}function Ut(t,e){G(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,i,o,n,s=0;s<t.length;){for(n=Kt(t[s]).split("-"),e=n.length,i=Kt(t[s+1]),i=i?i.split("-"):null;e>0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&w(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!Ln[e]&&void 0!==t&&t&&t.exports)try{i=In._abbr;!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return Ln[e]}function Qt(t,e){var i;return t&&(i=s(e)?ie(t):te(t,e))&&(In=i),In._abbr}function te(t,e){if(null!==e){var i=Rn;if(e.abbr=t,null!=Ln[t])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=Ln[t]._config;else if(null!=e.parentLocale){if(null==Ln[e.parentLocale])return Fn[e.parentLocale]||(Fn[e.parentLocale]=[]),Fn[e.parentLocale].push({name:t,config:e}),null;i=Ln[e.parentLocale]._config}return Ln[t]=new M(T(i,e)),Fn[t]&&Fn[t].forEach(function(t){te(t.name,t.config)}),Qt(t),Ln[t]}return delete Ln[t],null}function ee(t,e){if(null!=e){var i,o=Rn;null!=Ln[t]&&(o=Ln[t]._config),e=T(o,e),i=new M(e),i.parentLocale=Ln[t],Ln[t]=i,Qt(t)}else null!=Ln[t]&&(null!=Ln[t].parentLocale?Ln[t]=Ln[t].parentLocale:null!=Ln[t]&&delete Ln[t]);return Ln[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return In;if(!i(t)){if(e=$t(t))return e;t=[t]}return Jt(t)}function oe(){return Io(Ln)}function ne(t){var e,i=t._a;return i&&-2===c(t).overflow&&(e=i[ln]<0||i[ln]>11?ln:i[un]<1||i[un]>ht(i[dn],i[ln])?un:i[pn]<0||i[pn]>24||24===i[pn]&&(0!==i[cn]||0!==i[mn]||0!==i[fn])?pn:i[cn]<0||i[cn]>59?cn:i[mn]<0||i[mn]>59?mn:i[fn]<0||i[fn]>999?fn:-1,c(t)._overflowDayOfYear&&(e<dn||e>un)&&(e=un),c(t)._overflowWeeks&&-1===e&&(e=gn),c(t)._overflowWeekday&&-1===e&&(e=vn),c(t).overflow=e),t}function se(t,e,i){return null!=t?t:null!=e?e:i}function re(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function ae(t){var e,i,o,n,s=[];if(!t._d){for(o=re(t),t._w&&null==t._a[un]&&null==t._a[ln]&&he(t),null!=t._dayOfYear&&(n=se(t._a[dn],o[dn]),(t._dayOfYear>Q(n)||0===t._dayOfYear)&&(c(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[ln]=i.getUTCMonth(),t._a[un]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[pn]&&0===t._a[cn]&&0===t._a[mn]&&0===t._a[fn]&&(t._nextDay=!0,t._a[pn]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[pn]=24),t._w&&void 0!==t._w.d&&t._w.d!==t._d.getDay()&&(c(t).weekdayMismatch=!0)}}function he(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=se(e.GG,t._a[dn],Dt(ke(),1,4).year),o=se(e.W,1),((n=se(e.E,1))<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=Dt(ke(),s,r);i=se(e.gg,t._a[dn],d.year),o=se(e.w,d.week),null!=e.d?((n=e.d)<0||n>6)&&(h=!0):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?c(t)._overflowWeeks=!0:null!=h?c(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[dn]=a.year,t._dayOfYear=a.dayOfYear)}function de(t){var e,i,o,n,s,r,a=t._i,h=Hn.exec(a)||jn.exec(a);if(h){for(c(t).iso=!0,e=0,i=Gn.length;e<i;e++)if(Gn[e][1].exec(h[1])){n=Gn[e][0],o=!1!==Gn[e][2];break}if(null==n)return void(t._isValid=!1);if(h[3]){for(e=0,i=zn.length;e<i;e++)if(zn[e][1].exec(h[3])){s=(h[2]||" ")+zn[e][0];break}if(null==s)return void(t._isValid=!1)}if(!o&&null!=s)return void(t._isValid=!1);if(h[4]){if(!Yn.exec(h[4]))return void(t._isValid=!1);r="Z"}t._f=n+(s||"")+(r||""),ve(t)}else t._isValid=!1}function le(t,e,i,o,n,s){var r=[ue(t),xn.indexOf(e),parseInt(i,10),parseInt(o,10),parseInt(n,10)];return s&&r.push(parseInt(s,10)),r}function ue(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}function pe(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function ce(t,e,i){if(t){if(Tn.indexOf(t)!==new Date(e[0],e[1],e[2]).getDay())return c(i).weekdayMismatch=!0,i._isValid=!1,!1}return!0}function me(t,e,i){if(t)return Bn[t];if(e)return 0;var o=parseInt(i,10),n=o%100;return(o-n)/100*60+n}function fe(t){var e=Vn.exec(pe(t._i));if(e){var i=le(e[4],e[3],e[2],e[5],e[6],e[7]);if(!ce(e[1],i,t))return;t._a=i,t._tzm=me(e[8],e[9],e[10]),t._d=_t.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),c(t).rfc2822=!0}else t._isValid=!1}function ge(t){var i=Wn.exec(t._i);if(null!==i)return void(t._d=new Date(+i[1]));de(t),!1===t._isValid&&(delete t._isValid,fe(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function ve(t){if(t._f===e.ISO_8601)return void de(t);if(t._f===e.RFC_2822)return void fe(t);t._a=[],c(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=B(t._f,t._locale).match(jo)||[],i=0;i<n.length;i++)s=n[i],o=(a.match(q(s,t))||[])[0],o&&(r=a.substr(0,a.indexOf(o)),r.length>0&&c(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),zo[s]?(o?c(t).empty=!1:c(t).unusedTokens.push(s),$(s,o,t)):t._strict&&!o&&c(t).unusedTokens.push(s);c(t).charsLeftOver=h-d,a.length>0&&c(t).unusedInput.push(a),t._a[pn]<=12&&!0===c(t).bigHour&&t._a[pn]>0&&(c(t).bigHour=void 0),c(t).parsedDateParts=t._a.slice(0),c(t).meridiem=t._meridiem,t._a[pn]=ye(t._locale,t._a[pn],t._meridiem),ae(t),ne(t)}function ye(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function be(t){var e,i,o,n,s;if(0===t._f.length)return c(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;n<t._f.length;n++)s=0,e=g({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[n],ve(e),m(e)&&(s+=c(e).charsLeftOver,s+=10*c(e).unusedTokens.length,c(e).score=s,(null==o||s<o)&&(o=s,i=e));l(t,i||e)}function _e(t){if(!t._d){var e=F(t._i);t._a=h([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),ae(t)}}function we(t){var e=new v(ne(xe(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function xe(t){var e=t._i,o=t._f;return t._locale=t._locale||ie(t._l),null===e||void 0===o&&""===e?f({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),y(e)?new v(ne(e)):(a(e)?t._d=e:i(o)?be(t):o?ve(t):De(t),m(t)||(t._d=null),t))}function De(t){var n=t._i;s(n)?t._d=new Date(e.now()):a(n)?t._d=new Date(n.valueOf()):"string"==typeof n?ge(t):i(n)?(t._a=h(n.slice(0),function(t){return parseInt(t,10)}),ae(t)):o(n)?_e(t):r(n)?t._d=new Date(n):e.createFromInputFallback(t)}function Se(t,e,s,r,a){var h={};return!0!==s&&!1!==s||(r=s,s=void 0),(o(t)&&n(t)||i(t)&&0===t.length)&&(t=void 0),h._isAMomentObject=!0,h._useUTC=h._isUTC=a,h._l=s,h._i=t,h._f=e,h._strict=r,we(h)}function ke(t,e,i,o){return Se(t,e,i,o,!1)}function Ce(t,e){var o,n;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return ke();for(o=e[0],n=1;n<e.length;++n)e[n].isValid()&&!e[n][t](o)||(o=e[n]);return o}function Te(){return Ce("isBefore",[].slice.call(arguments,0))}function Me(){return Ce("isAfter",[].slice.call(arguments,0))}function Oe(t){for(var e in t)if(-1===yn.call(Zn,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var i=!1,o=0;o<Zn.length;++o)if(t[Zn[o]]){if(i)return!1;parseFloat(t[Zn[o]])!==_(t[Zn[o]])&&(i=!0)}return!0}function Ee(){return this._isValid}function Pe(){return Ke(NaN)}function Ie(t){var e=F(t),i=e.year||0,o=e.quarter||0,n=e.month||0,s=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._isValid=Oe(e),this._milliseconds=+l+1e3*d+6e4*h+1e3*a*60*60,this._days=+r+7*s,this._months=+n+3*o+12*i,this._data={},this._locale=ie(),this._bubble()}function Ne(t){return t instanceof Ie}function Ae(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Re(t,e){G(t,0,0,function(){var t=this.utcOffset(),i="+";return t<0&&(t=-t,i="-"),i+Y(~~(t/60),2)+e+Y(~~t%60,2)})}function Le(t,e){var i=(e||"").match(t);if(null===i)return null;var o=i[i.length-1]||[],n=(o+"").match(Kn)||["-",0,0],s=60*n[1]+_(n[2]);return 0===s?0:"+"===n[0]?s:-s}function Fe(t,i){var o,n;return i._isUTC?(o=i.clone(),n=(y(t)||a(t)?t.valueOf():ke(t).valueOf())-o.valueOf(),o._d.setTime(o._d.valueOf()+n),e.updateOffset(o,!1),o):ke(t).local()}function He(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function je(t,i,o){var n,s=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Le(nn,t)))return this}else Math.abs(t)<16&&!o&&(t*=60);return!this._isUTC&&i&&(n=He(this)),this._offset=t,this._isUTC=!0,null!=n&&this.add(n,"m"),s!==t&&(!i||this._changeInProgress?ei(this,Ke(t-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?s:He(this)}function Ye(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Ge(t){return this.utcOffset(0,t)}function ze(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(He(this),"m")),this}function We(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Le(on,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ve(t){return!!this.isValid()&&(t=t?ke(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function Be(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ue(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(g(t,this),t=xe(t),t._a){var e=t._isUTC?u(t._a):ke(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qe(){return!!this.isValid()&&!this._isUTC}function Xe(){return!!this.isValid()&&this._isUTC}function Ze(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ke(t,e){var i,o,n,s=t,a=null;return Ne(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:r(t)?(s={},e?s[e]=t:s.milliseconds=t):(a=Jn.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[un])*i,h:_(a[pn])*i,m:_(a[cn])*i,s:_(a[mn])*i,ms:_(Ae(1e3*a[fn]))*i}):(a=$n.exec(t))?(i="-"===a[1]?-1:(a[1],1),s={y:Je(a[2],i),M:Je(a[3],i),w:Je(a[4],i),d:Je(a[5],i),h:Je(a[6],i),m:Je(a[7],i),s:Je(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Qe(ke(s.from),ke(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ie(s),Ne(t)&&d(t,"_locale")&&(o._locale=t._locale),o}function Je(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $e(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function Qe(t,e){var i;return t.isValid()&&e.isValid()?(e=Fe(e,t),t.isBefore(e)?i=$e(t,e):(i=$e(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ti(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(S(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ke(i,o),ei(this,n,t),this}}function ei(t,i,o,n){var s=i._milliseconds,r=Ae(i._days),a=Ae(i._months);t.isValid()&&(n=null==n||n,a&&ct(t,ot(t,"Month")+a*o),r&&nt(t,"Date",ot(t,"Date")+r*o),s&&t._d.setTime(t._d.valueOf()+s*o),n&&e.updateOffset(t,r||a))}function ii(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function oi(t,i){var o=t||ke(),n=Fe(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(k(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,ke(o)))}function ni(){return new v(this)}function si(t,e){var i=y(t)?t:ke(t);return!(!this.isValid()||!i.isValid())&&(e=L(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()<this.clone().startOf(e).valueOf())}function ri(t,e){var i=y(t)?t:ke(t);return!(!this.isValid()||!i.isValid())&&(e=L(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()<i.valueOf():this.clone().endOf(e).valueOf()<i.valueOf())}function ai(t,e,i,o){return o=o||"()",("("===o[0]?this.isAfter(t,i):!this.isBefore(t,i))&&(")"===o[1]?this.isBefore(e,i):!this.isAfter(e,i))}function hi(t,e){var i,o=y(t)?t:ke(t);return!(!this.isValid()||!o.isValid())&&(e=L(e||"millisecond"),"millisecond"===e?this.valueOf()===o.valueOf():(i=o.valueOf(),this.clone().startOf(e).valueOf()<=i&&i<=this.clone().endOf(e).valueOf()))}function di(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function li(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ui(t,e,i){var o,n,s;if(!this.isValid())return NaN;if(o=Fe(t,this),!o.isValid())return NaN;switch(n=6e4*(o.utcOffset()-this.utcOffset()),e=L(e)){case"year":s=pi(this,o)/12;break;case"month":s=pi(this,o);break;case"quarter":s=pi(this,o)/3;break;case"second":s=(this-o)/1e3;break;case"minute":s=(this-o)/6e4;break;case"hour":s=(this-o)/36e5;break;case"day":s=(this-o-n)/864e5;break;case"week":s=(this-o-n)/6048e5;break;default:s=this-o}return i?s:b(s)}function pi(t,e){var i,o,n=12*(e.year()-t.year())+(e.month()-t.month()),s=t.clone().add(n,"months");return e-s<0?(i=t.clone().add(n-1,"months"),o=(e-s)/(s-i)):(i=t.clone().add(n+1,"months"),o=(e-s)/(i-s)),-(n+o)||0}function ci(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function mi(){if(!this.isValid())return null;var t=this.clone().utc();return t.year()<0||t.year()>9999?V(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):k(Date.prototype.toISOString)?this.toDate().toISOString():V(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function fi(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=e+'[")]';return this.format(i+o+"-MM-DD[T]HH:mm:ss.SSS"+n)}function gi(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=V(this,t);return this.localeData().postformat(i)}function vi(t,e){return this.isValid()&&(y(t)&&t.isValid()||ke(t).isValid())?Ke({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function yi(t){return this.from(ke(),t)}function bi(t,e){return this.isValid()&&(y(t)&&t.isValid()||ke(t).isValid())?Ke({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _i(t){return this.to(ke(),t)}function wi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function xi(){return this._locale}function Di(t){switch(t=L(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Si(t){return void 0===(t=L(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function ki(){return this._d.valueOf()-6e4*(this._offset||0)}function Ci(){return Math.floor(this.valueOf()/1e3)}function Ti(){return new Date(this.valueOf())}function Mi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Oi(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Ei(){return this.isValid()?this.toISOString():null}function Pi(){return m(this)}function Ii(){return l({},c(this))}function Ni(){return c(this).overflow}function Ai(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ri(t,e){G(0,[t,t.length],0,e)}function Li(t){return Yi.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Fi(t){return Yi.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Hi(){return St(this.year(),1,4)}function ji(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function Yi(t,e,i,o,n){var s;return null==t?Dt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Gi.call(this,t,e,i,o,n))}function Gi(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function zi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Wi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Vi(t,e){e[fn]=_(1e3*("0."+t))}function Bi(){return this._isUTC?"UTC":""}function Ui(){return this._isUTC?"Coordinated Universal Time":""}function qi(t){return ke(1e3*t)}function Xi(){return ke.apply(null,arguments).parseZone()}function Zi(t){return t}function Ki(t,e,i,o){var n=ie(),s=u().set(o,e);return n[i](s,t)}function Ji(t,e,i){if(r(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ki(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ki(t,o,i,"month");return n}function $i(t,e,i,o){"boolean"==typeof t?(r(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,r(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ki(e,(i+s)%7,o,"day");var a,h=[];for(a=0;a<7;a++)h[a]=Ki(e,(a+s)%7,o,"day");return h}function Qi(t,e){return Ji(t,e,"months")}function to(t,e){return Ji(t,e,"monthsShort")}function eo(t,e,i){return $i(t,e,i,"weekdays")}function io(t,e,i){return $i(t,e,i,"weekdaysShort")}function oo(t,e,i){return $i(t,e,i,"weekdaysMin")}function no(){var t=this._data;return this._milliseconds=ds(this._milliseconds),this._days=ds(this._days),this._months=ds(this._months),t.milliseconds=ds(t.milliseconds),t.seconds=ds(t.seconds),t.minutes=ds(t.minutes),t.hours=ds(t.hours),t.months=ds(t.months),t.years=ds(t.years),this}function so(t,e,i,o){var n=Ke(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function ro(t,e){return so(this,t,e,1)}function ao(t,e){return so(this,t,e,-1)}function ho(t){return t<0?Math.floor(t):Math.ceil(t)}function lo(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*ho(po(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=b(s/1e3),h.seconds=t%60,e=b(t/60),h.minutes=e%60,i=b(e/60),h.hours=i%24,r+=b(i/24),n=b(uo(r)),a+=n,r-=ho(po(n)),o=b(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function uo(t){return 4800*t/146097}function po(t){return 146097*t/4800}function co(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if("month"===(t=L(t))||"year"===t)return e=this._days+o/864e5,i=this._months+uo(e),"month"===t?i:i/12;switch(e=this._days+Math.round(po(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function mo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function fo(t){return function(){return this.as(t)}}function go(){return Ke(this)}function vo(t){return t=L(t),this.isValid()?this[t+"s"]():NaN}function yo(t){return function(){return this.isValid()?this._data[t]:NaN}}function bo(){return b(this.days()/7)}function _o(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function wo(t,e,i){var o=Ke(t).abs(),n=ks(o.as("s")),s=ks(o.as("m")),r=ks(o.as("h")),a=ks(o.as("d")),h=ks(o.as("M")),d=ks(o.as("y")),l=n<=Cs.ss&&["s",n]||n<Cs.s&&["ss",n]||s<=1&&["m"]||s<Cs.m&&["mm",s]||r<=1&&["h"]||r<Cs.h&&["hh",r]||a<=1&&["d"]||a<Cs.d&&["dd",a]||h<=1&&["M"]||h<Cs.M&&["MM",h]||d<=1&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=i,_o.apply(null,l)}function xo(t){return void 0===t?ks:"function"==typeof t&&(ks=t,!0)}function Do(t,e){return void 0!==Cs[t]&&(void 0===e?Cs[t]:(Cs[t]=e,"s"===t&&(Cs.ss=e-1),!0))}function So(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=wo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function ko(t){return(t>0)-(t<0)||+t}function Co(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Ts(this._milliseconds)/1e3,n=Ts(this._days),s=Ts(this._months);t=b(o/60),e=b(t/60),o%=60,t%=60,i=b(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o?o.toFixed(3).replace(/\.?0+$/,""):"",p=this.asSeconds();if(!p)return"P0D";var c=p<0?"-":"",m=ko(this._months)!==ko(p)?"-":"",f=ko(this._days)!==ko(p)?"-":"",g=ko(this._milliseconds)!==ko(p)?"-":"";return c+"P"+(r?m+r+"Y":"")+(a?m+a+"M":"")+(h?f+h+"D":"")+(d||l||u?"T":"")+(d?g+d+"H":"")+(l?g+l+"M":"")+(u?g+u+"S":"")}var To,Mo;Mo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o<i;o++)if(o in e&&t.call(this,e[o],o,e))return!0;return!1};var Oo=e.momentProperties=[],Eo=!1,Po={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var Io;Io=Object.keys?Object.keys:function(t){var e,i=[];for(e in t)d(t,e)&&i.push(e);return i};var No={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ao={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ro=/\d{1,2}/,Lo={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Fo={},Ho={},jo=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Yo=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Go={},zo={},Wo=/\d/,Vo=/\d\d/,Bo=/\d{3}/,Uo=/\d{4}/,qo=/[+-]?\d{6}/,Xo=/\d\d?/,Zo=/\d\d\d\d?/,Ko=/\d\d\d\d\d\d?/,Jo=/\d{1,3}/,$o=/\d{1,4}/,Qo=/[+-]?\d{1,6}/,tn=/\d+/,en=/[+-]?\d+/,on=/Z|[+-]\d\d:?\d\d/gi,nn=/Z|[+-]\d\d(?::?\d\d)?/gi,sn=/[+-]?\d+(\.\d{1,3})?/,rn=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,an={},hn={},dn=0,ln=1,un=2,pn=3,cn=4,mn=5,fn=6,gn=7,vn=8;G("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),G(0,["YY",2],0,function(){return this.year()%100}),G(0,["YYYY",4],0,"year"),G(0,["YYYYY",5],0,"year"),G(0,["YYYYYY",6,!0],0,"year"),R("year","y"),H("year",1),U("Y",en),U("YY",Xo,Vo),U("YYYY",$o,Uo),U("YYYYY",Qo,qo),U("YYYYYY",Qo,qo),K(["YYYYY","YYYYYY"],dn),K("YYYY",function(t,i){i[dn]=2===t.length?e.parseTwoDigitYear(t):_(t)}),K("YY",function(t,i){i[dn]=e.parseTwoDigitYear(t)}),K("Y",function(t,e){e[dn]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return _(t)+(_(t)>68?1900:2e3)};var yn,bn=it("FullYear",!0);yn=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},G("M",["MM",2],"Mo",function(){return this.month()+1}),G("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),G("MMMM",0,0,function(t){return this.localeData().months(this,t)}),R("month","M"),H("month",8),U("M",Xo),U("MM",Xo,Vo),U("MMM",function(t,e){return e.monthsShortRegex(t)}),U("MMMM",function(t,e){return e.monthsRegex(t)}),K(["M","MM"],function(t,e){e[ln]=_(t)-1}),K(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[ln]=n:c(i).invalidMonth=t});var _n=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,wn="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),xn="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Dn=rn,Sn=rn;G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),R("week","w"),R("isoWeek","W"),H("week",5),H("isoWeek",5),U("w",Xo),U("ww",Xo,Vo),U("W",Xo),U("WW",Xo,Vo),J(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=_(t)});var kn={dow:0,doy:6};G("d",0,"do","day"),G("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),G("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),G("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),R("day","d"),R("weekday","e"),R("isoWeekday","E"),H("day",11),H("weekday",11),H("isoWeekday",11),U("d",Xo),U("e",Xo),U("E",Xo),U("dd",function(t,e){return e.weekdaysMinRegex(t)}),U("ddd",function(t,e){return e.weekdaysShortRegex(t)}),U("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:c(i).invalidWeekday=t}),J(["d","e","E"],function(t,e,i,o){e[o]=_(t)});var Cn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Tn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Mn="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),On=rn,En=rn,Pn=rn;G("H",["HH",2],0,"hour"),G("h",["hh",2],0,Vt),G("k",["kk",2],0,Bt),G("hmm",0,0,function(){return""+Vt.apply(this)+Y(this.minutes(),2)}),G("hmmss",0,0,function(){return""+Vt.apply(this)+Y(this.minutes(),2)+Y(this.seconds(),2)}),G("Hmm",0,0,function(){return""+this.hours()+Y(this.minutes(),2)}),G("Hmmss",0,0,function(){return""+this.hours()+Y(this.minutes(),2)+Y(this.seconds(),2)}),Ut("a",!0),Ut("A",!1),R("hour","h"),H("hour",13),U("a",qt),U("A",qt),U("H",Xo),U("h",Xo),U("k",Xo),U("HH",Xo,Vo),U("hh",Xo,Vo),U("kk",Xo,Vo),U("hmm",Zo),U("hmmss",Ko),U("Hmm",Zo),U("Hmmss",Ko),K(["H","HH"],pn),K(["k","kk"],function(t,e,i){var o=_(t);e[pn]=24===o?0:o}),K(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),K(["h","hh"],function(t,e,i){e[pn]=_(t),c(i).bigHour=!0}),K("hmm",function(t,e,i){var o=t.length-2;e[pn]=_(t.substr(0,o)),e[cn]=_(t.substr(o)),c(i).bigHour=!0}),K("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[pn]=_(t.substr(0,o)),e[cn]=_(t.substr(o,2)),e[mn]=_(t.substr(n)),c(i).bigHour=!0}),K("Hmm",function(t,e,i){var o=t.length-2;e[pn]=_(t.substr(0,o)),e[cn]=_(t.substr(o))}),K("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[pn]=_(t.substr(0,o)),e[cn]=_(t.substr(o,2)),e[mn]=_(t.substr(n))});var In,Nn=/[ap]\.?m?\.?/i,An=it("Hours",!0),Rn={calendar:No,longDateFormat:Ao,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Ro,relativeTime:Lo,months:wn,monthsShort:xn,week:kn,weekdays:Cn,weekdaysMin:Mn,weekdaysShort:Tn,meridiemParse:Nn},Ln={},Fn={},Hn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Yn=/Z|[+-]\d\d(?::?\d\d)?/,Gn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],zn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Wn=/^\/?Date\((\-?\d+)/i,Vn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Bn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=D("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Un=D("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=ke.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:f()}),qn=D("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=ke.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:f()}),Xn=function(){return Date.now?Date.now():+new Date},Zn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Re("Z",":"),Re("ZZ",""),U("Z",nn),U("ZZ",nn),K(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=Le(nn,t)});var Kn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Jn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$n=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Ke.fn=Ie.prototype,Ke.invalid=Pe;var Qn=ti(1,"add"),ts=ti(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var es=D("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ri("gggg","weekYear"),Ri("ggggg","weekYear"),Ri("GGGG","isoWeekYear"),Ri("GGGGG","isoWeekYear"),R("weekYear","gg"),R("isoWeekYear","GG"),H("weekYear",1),H("isoWeekYear",1),U("G",en),U("g",en),U("GG",Xo,Vo),U("gg",Xo,Vo),U("GGGG",$o,Uo),U("gggg",$o,Uo),U("GGGGG",Qo,qo),U("ggggg",Qo,qo),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=_(t)}),J(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),G("Q",0,"Qo","quarter"),R("quarter","Q"),H("quarter",7),U("Q",Wo),K("Q",function(t,e){e[ln]=3*(_(t)-1)}),G("D",["DD",2],"Do","date"),R("date","D"),H("date",9),U("D",Xo),U("DD",Xo,Vo),U("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),K(["D","DD"],un),K("Do",function(t,e){e[un]=_(t.match(Xo)[0],10)});var is=it("Date",!0);G("DDD",["DDDD",3],"DDDo","dayOfYear"),R("dayOfYear","DDD"),H("dayOfYear",4),U("DDD",Jo),U("DDDD",Bo),K(["DDD","DDDD"],function(t,e,i){i._dayOfYear=_(t)}),G("m",["mm",2],0,"minute"),R("minute","m"),H("minute",14),U("m",Xo),U("mm",Xo,Vo),K(["m","mm"],cn);var os=it("Minutes",!1);G("s",["ss",2],0,"second"),R("second","s"),H("second",15),U("s",Xo),U("ss",Xo,Vo),K(["s","ss"],mn);var ns=it("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),G(0,["SSS",3],0,"millisecond"),G(0,["SSSS",4],0,function(){return 10*this.millisecond()}),G(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),G(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),G(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),G(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),G(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),R("millisecond","ms"),H("millisecond",16),U("S",Jo,Wo),U("SS",Jo,Vo),U("SSS",Jo,Bo);var ss;for(ss="SSSS";ss.length<=9;ss+="S")U(ss,tn);for(ss="S";ss.length<=9;ss+="S")K(ss,Vi);var rs=it("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var as=v.prototype;as.add=Qn,as.calendar=oi,as.clone=ni,as.diff=ui,as.endOf=Si,as.format=gi,as.from=vi,as.fromNow=yi,as.to=bi,as.toNow=_i,as.get=st,as.invalidAt=Ni,as.isAfter=si,as.isBefore=ri,as.isBetween=ai,as.isSame=hi,as.isSameOrAfter=di,as.isSameOrBefore=li,as.isValid=Pi,as.lang=es,as.locale=wi,as.localeData=xi,as.max=qn,as.min=Un,as.parsingFlags=Ii,as.set=rt,as.startOf=Di,as.subtract=ts,as.toArray=Mi,as.toObject=Oi,as.toDate=Ti,as.toISOString=mi,as.inspect=fi,as.toJSON=Ei,as.toString=ci,as.unix=Ci,as.valueOf=ki,as.creationData=Ai,as.year=bn,as.isLeapYear=et,as.weekYear=Li,as.isoWeekYear=Fi,as.quarter=as.quarters=zi,as.month=mt,as.daysInMonth=ft,as.week=as.weeks=Mt,as.isoWeek=as.isoWeeks=Ot,as.weeksInYear=ji,as.isoWeeksInYear=Hi,as.date=is,as.day=as.days=Ft,as.weekday=Ht,as.isoWeekday=jt,as.dayOfYear=Wi,as.hour=as.hours=An,as.minute=as.minutes=os,as.second=as.seconds=ns,as.millisecond=as.milliseconds=rs,as.utcOffset=je,as.utc=Ge,as.local=ze,as.parseZone=We,as.hasAlignedHourOffset=Ve,as.isDST=Be,as.isLocal=qe,as.isUtcOffset=Xe,as.isUtc=Ze,as.isUTC=Ze,as.zoneAbbr=Bi,as.zoneName=Ui,as.dates=D("dates accessor is deprecated. Use date instead.",is),as.months=D("months accessor is deprecated. Use month instead",mt),as.years=D("years accessor is deprecated. Use year instead",bn),as.zone=D("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Ye),as.isDSTShifted=D("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ue);var hs=M.prototype;hs.calendar=O,hs.longDateFormat=E,hs.invalidDate=P,hs.ordinal=I,hs.preparse=Zi,hs.postformat=Zi,hs.relativeTime=N,hs.pastFuture=A,hs.set=C,hs.months=dt,hs.monthsShort=lt,hs.monthsParse=pt,hs.monthsRegex=vt,hs.monthsShortRegex=gt,hs.week=kt,hs.firstDayOfYear=Tt,hs.firstDayOfWeek=Ct,hs.weekdays=It,hs.weekdaysMin=At,hs.weekdaysShort=Nt,hs.weekdaysParse=Lt,hs.weekdaysRegex=Yt,hs.weekdaysShortRegex=Gt,hs.weekdaysMinRegex=zt,hs.isPM=Xt,hs.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=D("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=D("moment.langData is deprecated. Use moment.localeData instead.",ie);var ds=Math.abs,ls=fo("ms"),us=fo("s"),ps=fo("m"),cs=fo("h"),ms=fo("d"),fs=fo("w"),gs=fo("M"),vs=fo("y"),ys=yo("milliseconds"),bs=yo("seconds"),_s=yo("minutes"),ws=yo("hours"),xs=yo("days"),Ds=yo("months"),Ss=yo("years"),ks=Math.round,Cs={ss:44,s:45,m:45,h:22,d:26,M:11},Ts=Math.abs,Ms=Ie.prototype;return Ms.isValid=Ee,Ms.abs=no,Ms.add=ro,Ms.subtract=ao,Ms.as=co,Ms.asMilliseconds=ls,Ms.asSeconds=us,Ms.asMinutes=ps,Ms.asHours=cs,Ms.asDays=ms,Ms.asWeeks=fs,Ms.asMonths=gs,Ms.asYears=vs,Ms.valueOf=mo,Ms._bubble=lo,Ms.clone=go,Ms.get=vo,Ms.milliseconds=ys,Ms.seconds=bs,Ms.minutes=_s,Ms.hours=ws,Ms.days=xs,Ms.weeks=bo,Ms.months=Ds,Ms.years=Ss,Ms.humanize=So,Ms.toISOString=Co,Ms.toString=Co,Ms.toJSON=Co,Ms.locale=wi,Ms.localeData=xi,Ms.toIsoString=D("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Co),Ms.lang=es,G("X",0,0,"unix"),G("x",0,0,"valueOf"),U("x",en),U("X",sn),K("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),K("x",function(t,e,i){i._d=new Date(_(t))}),e.version="2.19.1",function(t){To=t}(ke),e.fn=as,e.min=Te,e.max=Me,e.now=Xn,e.utc=u,e.unix=qi,e.months=Qi,e.isDate=a,e.locale=Qt,e.invalid=f,e.duration=Ke,e.isMoment=y,e.weekdays=eo,e.parseZone=Xi,e.localeData=ie,e.isDuration=Ne,e.monthsShort=to,e.weekdaysMin=oo,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=io,e.normalizeUnits=L,e.relativeTimeRounding=xo,e.relativeTimeThreshold=Do,e.calendarFormat=ii,e.prototype=as,e})}).call(e,i(124)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=125},function(t,e,i){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:f,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:v+1,d=a-g+(h-v)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>g)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");g=a,v=h,f=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var u=a/4294967296*1e4&268435455;s[n++]=u>>>8&255,s[n++]=255&u,s[n++]=u>>>24&15|16,s[n++]=u>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var p=t.node||m,c=0;c<6;c++)s[n+c]=p[c];return e||o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;a<16;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:void 0!==e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},p=0;p<256;p++)l[p]=(p+256).toString(16).substr(1),u[l[p]]=p;var c=r(),m=[1|c[0],c[1],c[2],c[3],c[4],c[5]],f=16383&(c[6]<<8|c[7]),g=0,v=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,i(127))},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){var o=i(2),n=o.JSON||(o.JSON={stringify:JSON.stringify});t.exports=function(t){return n.stringify.apply(n,arguments)}},function(t,e,i){function o(t,e,i,n){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof d||i instanceof l)&&i instanceof Object){var s=n;n=i,i=s}n&&n.throttleRedraw&&console.warn('Timeline option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var r=this;if(this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:a,width:null,height:null,maxHeight:null,minHeight:null},this.options=h.deepExtend({},this.defaultOptions),this._create(t),!n||n&&void 0===n.rtl){this.dom.root.style.visibility="hidden";for(var p,f=this.dom.root;!p&&f;)p=window.getComputedStyle(f,null).direction,f=f.parentElement;this.options.rtl=p&&"rtl"==p.toLowerCase()}else this.options.rtl=n.rtl;this.options.rollingMode=n&&n.rollingMode,this.options.onInitialDrawComplete=n&&n.onInitialDrawComplete,this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{getScale:function(){return r.timeAxis.step.scale},getStep:function(){return r.timeAxis.step.step},toScreen:r._toScreen.bind(r),toGlobalScreen:r._toGlobalScreen.bind(r),toTime:r._toTime.bind(r),toGlobalTime:r._toGlobalTime.bind(r)}},this.range=new u(this.body,this.options),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new c(this.body,this.options),this.timeAxis2=null,this.components.push(this.timeAxis),this.currentTime=new m(this.body,this.options),this.components.push(this.currentTime),this.itemSet=new g(this.body,this.options),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,this.dom.root.onclick=function(t){r.emit("click",r.getEventProperties(t))},this.dom.root.ondblclick=function(t){r.emit("doubleClick",r.getEventProperties(t))},this.dom.root.oncontextmenu=function(t){r.emit("contextmenu",r.getEventProperties(t))},this.dom.root.onmouseover=function(t){r.emit("mouseOver",r.getEventProperties(t))},window.PointerEvent?(this.dom.root.onpointerdown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onpointermove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onpointerup=function(t){r.emit("mouseUp",r.getEventProperties(t))}):(this.dom.root.onmousemove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onmousedown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onmouseup=function(t){r.emit("mouseUp",r.getEventProperties(t))}),this.initialFitDone=!1,this.on("changed",function(){if(null!=this.itemsData&&!this.options.rollingMode){if(!r.initialFitDone)if(r.initialFitDone=!0,void 0!=r.options.start||void 0!=r.options.end){if(void 0==r.options.start||void 0==r.options.end)var t=r.getItemRange();var e=void 0!=r.options.start?r.options.start:t.min,i=void 0!=r.options.end?r.options.end:t.max;r.setWindow(e,i,{animation:!1})}else r.fit({animation:!1});!r.initialDrawDone&&r.initialRangeChangeDone&&(r.initialDrawDone=!0,r.dom.root.style.visibility="visible",r.options.onInitialDrawComplete&&setTimeout(function(){return r.options.onInitialDrawComplete()},0))}}),n&&this.setOptions(n),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}function n(t){return h.convert(t.data.start,"Date").valueOf()}function s(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return h.convert(e,"Date").valueOf()}function r(t,e){var i=t.props.leftContainer.height,o=t.props.left.height,n=e.parent,s=n.top,r=!0,a=t.timeAxis.options.orientation.axis,h=function(){return"bottom"==a?n.height-e.top-e.height:e.top},d=-1*t._getScrollTop(),l=s+h(),u=e.height;return l<d?s+i<=s+h()+u&&(s+=h()-t.itemSet.options.margin.item.vertical):l+u>d+i?s+=h()+u-i+t.itemSet.options.margin.item.vertical:r=!1,s=Math.min(s,o-i),{shouldScroll:r,scrollOffset:s,itemTop:l}}var a=i(3),h=i(0),d=i(15),l=i(20),u=i(47),p=i(48),c=i(28),m=i(50),f=i(29),g=i(70),v=i(32).printStyle,y=i(75).allOptions,b=i(75).configureOptions,_=i(76).default,w=i(32).default;o.prototype=new p,o.prototype._createConfigurator=function(){return new _(this,this.dom.container,b)},o.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},o.prototype.setOptions=function(t){if(!0===w.validate(t,y)&&console.log("%cErrors have been found in the supplied options object.",v),p.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var e=this.itemsData;if(e){var i=this.getSelection();this.setItems(null),this.setItems(e),this.setSelection(i)}}},o.prototype.setItems=function(t){var e;e=t?t instanceof d||t instanceof l?t:new d(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},o.prototype.setGroups=function(t){var e;if(t){var i=function(t){return!1!==t.visible};e=t instanceof d||t instanceof l?new l(t,{filter:i}):new d(t.filter(i))}else e=null;this.groupsData=e,this.itemSet.setGroups(e)},o.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},o.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},o.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},o.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||e<n)&&(n=e),(null===s||i>s)&&(s=i)}),null!==n&&null!==s){var a=this,h=this.itemSet.items[i[0]],d=-1*this._getScrollTop(),l=null,u=function(t,e,i){var o=r(a,h);if(l||(l=o),l.itemTop!=o.itemTop||l.shouldScroll){l.itemTop!=o.itemTop&&o.shouldScroll&&(l=o,d=-1*a._getScrollTop());var n=d,s=l.scrollOffset,u=i?s:n+(s-n)*t;a._setScrollTop(-u),e||a._redraw()}},p=function(){var t=r(a,h);t.shouldScroll&&t.itemTop!=l.itemTop&&(a._setScrollTop(-t.scrollOffset),a._redraw())},c=function(){p(),setTimeout(p,100)},m=(n+s)/2,f=Math.max(this.range.end-this.range.start,1.1*(s-n)),g=!e||void 0===e.animation||e.animation;g||(l={shouldScroll:!1,scrollOffset:-1,itemTop:-1}),this.range.setRange(m-f/2,m+f/2,{animation:g},c,u)}}},o.prototype.fit=function(t,e){var i,o=!t||void 0===t.animation||t.animation,n=this.itemsData&&this.itemsData.getDataSet();1===n.length&&void 0===n.get()[0].end?(i=this.getDataRange(),this.moveTo(i.min.valueOf(),{animation:o},e)):(i=this.getItemRange(),this.range.setRange(i.min,i.max,{animation:o},e))},o.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,r=null;if(null!=e&&null!=i){var a=i-e;a<=0&&(a=10);var d=a/this.props.center.width,l={},u=0;h.forEach(this.itemSet.items,function(t,e){if(t.groupShowing){l[e]=t.redraw(!0),u=l[e].length}});if(u>0)for(var p=0;p<u;p++)h.forEach(l,function(t){t[p]()});if(h.forEach(this.itemSet.items,function(t){var a,h,l=n(t),u=s(t);this.options.rtl?(a=l-(t.getWidthRight()+10)*d,h=u+(t.getWidthLeft()+10)*d):(a=l-(t.getWidthLeft()+10)*d,h=u+(t.getWidthRight()+10)*d),a<e&&(e=a,o=t),h>i&&(i=h,r=t)}.bind(this)),o&&r){var c=o.getWidthLeft()+10,m=r.getWidthRight()+10,f=this.props.center.width-c-m;f>0&&(this.options.rtl?(e=n(o)-m*a/f,i=s(r)+c*a/f):(e=n(o)-c*a/f,i=s(r)+m*a/f))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},o.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=h.convert(i.start,"Date").valueOf(),n=h.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||o<t)&&(t=o),(null===e||n>e)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e,i=t.center?t.center.x:t.clientX,o=t.center?t.center.y:t.clientY;e=this.options.rtl?h.getAbsoluteRight(this.dom.centerContainer)-i:i-h.getAbsoluteLeft(this.dom.centerContainer);var n=o-h.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=f.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),p=this._toTime(e),c=d?d(p,l,u):p,m=h.getTarget(t),g=null;return null!=s?g="item":null!=a?g="custom-time":h.hasParent(m,this.timeAxis.dom.foreground)?g="axis":this.timeAxis2&&h.hasParent(m,this.timeAxis2.dom.foreground)?g="axis":h.hasParent(m,this.itemSet.dom.labelSet)?g="group-label":h.hasParent(m,this.currentTime.bar)?g="current-time":h.hasParent(m,this.dom.center)&&(g="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:g,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:e,y:n,time:p,snappedTime:c}},o.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=o},function(t,e,i){var o,n,s;!function(i){n=[],o=i,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a<s.length;a++)if(r=s[a]._handlers[e.type])for(var h=0;h<r.length&&!i;h++)r[h](e);n=n.parentNode}}var r=o||{preventDefault:!1};if(i.Manager){var a=i,h=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a(t,o),o)};return a.assign(h,a),h.Manager=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a.Manager(t,o),o)},h}var d=Object.create(i),l=i.element;return l.hammer||(l.hammer=[]),l.hammer.push(d),i.on("hammer.input",function(e){!0!==r.preventDefault&&r.preventDefault!==e.pointerType||e.preventDefault(),e.isFirst&&(t=e.target)}),d._handlers={},d.on=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o||(d._handlers[t]=o=[],i.on(t,s)),o.push(e)}),d},d.off=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o&&(o=e?o.filter(function(t){return t!==e}):[],o.length>0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;/*! Hammer.JS - v2.0.7 - 2016-04-22
+ * http://hammerjs.github.io/
+ *
+ * Copyright (c) 2016 Jorik Tangelder;
+ * Licensed under the MIT license */
+!function(n,s,r,a){function h(t,e,i){return setTimeout(c(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o<t.length;)e.call(i,t[o],o,t),o++;else for(o in t)t.hasOwnProperty(o)&&e.call(i,t[o],o,t)}function u(t,e,i){var o="DEPRECATED METHOD: "+e+"\n"+i+" AT \n";return function(){var e=new Error("get-stack-trace"),i=e&&e.stack?e.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function p(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&mt(o,i)}function c(t,e){return function(){return t.apply(e,arguments)}}function m(t,e){return typeof t==vt?t.apply(e?e[0]||a:a,e):t}function f(t,e){return t===a?e:t}function g(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function v(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;o<t.length;){if(i&&t[o][i]==e||!i&&t[o]===e)return o;o++}return-1}function x(t){return Array.prototype.slice.call(t,0)}function D(t,e,i){for(var o=[],n=[],s=0;s<t.length;){var r=e?t[s][e]:t[s];w(n,r)<0&&o.push(t[s]),n[s]=r,s++}return i&&(o=e?o.sort(function(t,i){return t[e]>i[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s<ft.length;){if(i=ft[s],(o=i?i+n:e)in t)return o;s++}return a}function k(){return Dt++}function C(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||n}function T(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){m(t.options.enable,[t])&&i.handler(e)},this.init()}function M(t){var e=t.options.inputClass;return new(e||(Ct?z:Tt?B:kt?q:G))(t,O)}function O(t,e,i){var o=i.pointers.length,n=i.changedPointers.length,s=e&Ot&&o-n==0,r=e&(Pt|It)&&o-n==0;i.isFirst=!!s,i.isFinal=!!r,s&&(t.session={}),i.eventType=e,E(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function E(t,e){var i=t.session,o=e.pointers,n=o.length;i.firstInput||(i.firstInput=N(e)),n>1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=A(o);e.timeStamp=_t(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=H(a,h),e.distance=F(a,h),P(i,e),e.offsetDirection=L(e.deltaX,e.deltaY);var d=R(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=bt(d.x)>bt(d.y)?d.x:d.y,e.scale=r?Y(r.pointers,o):1,e.rotation=r?j(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Ot&&s.eventType!==Pt||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=It&&(h>Mt||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=R(h,d,l);o=u.x,n=u.y,i=bt(u.x)>bt(u.y)?u.x:u.y,s=L(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:yt(t.pointers[i].clientX),clientY:yt(t.pointers[i].clientY)},i++;return{timeStamp:_t(),pointers:e,center:A(e),deltaX:t.deltaX,deltaY:t.deltaY}}function A(t){var e=t.length;if(1===e)return{x:yt(t[0].clientX),y:yt(t[0].clientY)};for(var i=0,o=0,n=0;n<e;)i+=t[n].clientX,o+=t[n].clientY,n++;return{x:yt(i/e),y:yt(o/e)}}function R(t,e,i){return{x:e/t||0,y:i/t||0}}function L(t,e){return t===e?Nt:bt(t)>=bt(e)?t<0?At:Rt:e<0?Lt:Ft}function F(t,e,i){i||(i=Gt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function H(t,e,i){i||(i=Gt);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function j(t,e){return H(e[1],e[0],zt)+H(t[1],t[0],zt)}function Y(t,e){return F(e[0],e[1],zt)/F(t[0],t[1],zt)}function G(){this.evEl=Vt,this.evWin=Bt,this.pressed=!1,T.apply(this,arguments)}function z(){this.evEl=Xt,this.evWin=Zt,T.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function W(){this.evTarget=Jt,this.evWin=$t,this.started=!1,T.apply(this,arguments)}function V(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Pt|It)&&(i=D(i.concat(o),"identifier",!0)),[i,o]}function B(){this.evTarget=te,this.targetIds={},T.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Ot|Et)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Ot)for(n=0;n<s.length;)o[s[n].identifier]=!0,n++;for(n=0;n<r.length;)o[r[n].identifier]&&a.push(r[n]),e&(Pt|It)&&delete o[r[n].identifier],n++;return a.length?[D(s.concat(a),"identifier",!0),a]:void 0}function q(){T.apply(this,arguments);var t=c(this.handler,this);this.touch=new B(this.manager,t),this.mouse=new G(this.manager,t),this.primaryTouch=null,this.lastTouches=[]}function X(t,e){t&Ot?(this.primaryTouch=e.changedPointers[0].identifier,Z.call(this,e)):t&(Pt|It)&&Z.call(this,e)}function Z(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY};this.lastTouches.push(i);var o=this.lastTouches,n=function(){var t=o.indexOf(i);t>-1&&o.splice(t,1)};setTimeout(n,ee)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o<this.lastTouches.length;o++){var n=this.lastTouches[o],s=Math.abs(e-n.x),r=Math.abs(i-n.y);if(s<=ie&&r<=ie)return!0}return!1}function J(t,e){this.manager=t,this.set(e)}function $(t){if(b(t,ae))return ae;var e=b(t,he),i=b(t,de);return e&&i?ae:e||i?e?he:de:b(t,re)?re:se}function Q(t){this.options=mt({},this.defaults,t||{}),this.id=k(),this.manager=null,this.options.enable=f(this.options.enable,!0),this.state=ue,this.simultaneous={},this.requireFail=[]}function tt(t){return t&ge?"cancel":t&me?"end":t&ce?"move":t&pe?"start":""}function et(t){return t==Ft?"down":t==Lt?"up":t==At?"left":t==Rt?"right":""}function it(t,e){var i=e.manager;return i?i.get(t):t}function ot(){Q.apply(this,arguments)}function nt(){ot.apply(this,arguments),this.pX=null,this.pY=null}function st(){ot.apply(this,arguments)}function rt(){Q.apply(this,arguments),this._timer=null,this._input=null}function at(){ot.apply(this,arguments)}function ht(){ot.apply(this,arguments)}function dt(){Q.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function lt(t,e){return e=e||{},e.recognizers=f(e.recognizers,lt.defaults.preset),new ut(t,e)}function ut(t,e){this.options=mt({},lt.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=M(this),this.touchAction=new J(this,this.options.touchAction),pt(this,!0),l(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function pt(t,e){var i=t.element;if(i.style){var o;l(t.options.cssProps,function(n,s){o=S(i.style,s),e?(t.oldCssProps[o]=i.style[o],i.style[o]=n):i.style[o]=t.oldCssProps[o]||""}),e||(t.oldCssProps={})}}function ct(t,e){var i=s.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}var mt,ft=["","webkit","Moz","MS","ms","o"],gt=s.createElement("div"),vt="function",yt=Math.round,bt=Math.abs,_t=Date.now;mt="function"!=typeof Object.assign?function(t){if(t===a||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),i=1;i<arguments.length;i++){var o=arguments[i];if(o!==a&&null!==o)for(var n in o)o.hasOwnProperty(n)&&(e[n]=o[n])}return e}:Object.assign;var wt=u(function(t,e,i){for(var o=Object.keys(e),n=0;n<o.length;)(!i||i&&t[o[n]]===a)&&(t[o[n]]=e[o[n]]),n++;return t},"extend","Use `assign`."),xt=u(function(t,e){return wt(t,e,!0)},"merge","Use `assign`."),Dt=1,St=/mobile|tablet|ip(ad|hone|od)|android/i,kt="ontouchstart"in n,Ct=S(n,"PointerEvent")!==a,Tt=kt&&St.test(navigator.userAgent),Mt=25,Ot=1,Et=2,Pt=4,It=8,Nt=1,At=2,Rt=4,Lt=8,Ft=16,Ht=At|Rt,jt=Lt|Ft,Yt=Ht|jt,Gt=["x","y"],zt=["clientX","clientY"];T.prototype={handler:function(){},init:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(C(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&v(this.element,this.evEl,this.domHandler),this.evTarget&&v(this.target,this.evTarget,this.domHandler),this.evWin&&v(C(this.element),this.evWin,this.domHandler)}};var Wt={mousedown:Ot,mousemove:Et,mouseup:Pt},Vt="mousedown",Bt="mousemove mouseup";p(G,T,{handler:function(t){var e=Wt[t.type];e&Ot&&0===t.button&&(this.pressed=!0),e&Et&&1!==t.which&&(e=Pt),this.pressed&&(e&Pt&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var Ut={pointerdown:Ot,pointermove:Et,pointerup:Pt,pointercancel:It,pointerout:It},qt={2:"touch",3:"pen",4:"mouse",5:"kinect"},Xt="pointerdown",Zt="pointermove pointerup pointercancel";n.MSPointerEvent&&!n.PointerEvent&&(Xt="MSPointerDown",Zt="MSPointerMove MSPointerUp MSPointerCancel"),p(z,T,{handler:function(t){var e=this.store,i=!1,o=t.type.toLowerCase().replace("ms",""),n=Ut[o],s=qt[t.pointerType]||t.pointerType,r="touch"==s,a=w(e,t.pointerId,"pointerId");n&Ot&&(0===t.button||r)?a<0&&(e.push(t),a=e.length-1):n&(Pt|It)&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,n,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i&&e.splice(a,1))}});var Kt={touchstart:Ot,touchmove:Et,touchend:Pt,touchcancel:It},Jt="touchstart",$t="touchstart touchmove touchend touchcancel";p(W,T,{handler:function(t){var e=Kt[t.type];if(e===Ot&&(this.started=!0),this.started){var i=V.call(this,t,e);e&(Pt|It)&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}}});var Qt={touchstart:Ot,touchmove:Et,touchend:Pt,touchcancel:It},te="touchstart touchmove touchend touchcancel";p(B,T,{handler:function(t){var e=Qt[t.type],i=U.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}});var ee=2500,ie=25;p(q,T,{handler:function(t,e,i){var o="touch"==i.pointerType,n="mouse"==i.pointerType;if(!(n&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)X.call(this,e,i);else if(n&&K.call(this,i))return;this.callback(t,e,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var oe=S(gt.style,"touchAction"),ne=oe!==a,se="auto",re="manipulation",ae="none",he="pan-x",de="pan-y",le=function(){if(!ne)return!1;var t={},e=n.CSS&&n.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(i){t[i]=!e||n.CSS.supports("touch-action",i)}),t}();J.prototype={set:function(t){"compute"==t&&(t=this.compute()),ne&&this.manager.element.style&&le[t]&&(this.manager.element.style[oe]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){m(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),$(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=b(o,ae)&&!le[ae],s=b(o,de)&&!le[de],r=b(o,he)&&!le[he];if(n){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}return r&&s?void 0:n||s&&i&Ht||r&&i&jt?this.preventSrc(e):void 0},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var ue=1,pe=2,ce=4,me=8,fe=me,ge=16;Q.prototype={defaults:{},set:function(t){return mt(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=it(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=it(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=it(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=it(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<me&&e(i.options.event+tt(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=me&&e(i.options.event+tt(o))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|ue)))return!1;t++}return!0},recognize:function(t){var e=mt({},t);if(!m(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(fe|ge|32)&&(this.state=ue),this.state=this.process(e),this.state&(pe|ce|me|ge)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},p(ot,Q,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,i=t.eventType,o=e&(pe|ce),n=this.attrTest(t);return o&&(i&It||!n)?e|ge:o||n?i&Pt?e|me:e&pe?e|ce:pe:32}}),p(nt,ot,{defaults:{event:"pan",threshold:10,pointers:1,direction:Yt},getTouchAction:function(){var t=this.options.direction,e=[];return t&Ht&&e.push(de),t&jt&&e.push(he),e},directionTest:function(t){var e=this.options,i=!0,o=t.distance,n=t.direction,s=t.deltaX,r=t.deltaY;return n&e.direction||(e.direction&Ht?(n=0===s?Nt:s<0?At:Rt,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?Nt:r<0?Lt:Ft,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return ot.prototype.attrTest.call(this,t)&&(this.state&pe||!(this.state&pe)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),p(st,ot,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&pe)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),p(rt,Q,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime>e.time;if(this._input=t,!o||!i||t.eventType&(Pt|It)&&!n)this.reset();else if(t.eventType&Ot)this.reset(),this._timer=h(function(){this.state=fe,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return fe;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===fe&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=_t(),this.manager.emit(this.options.event,this._input)))}}),p(at,ot,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&pe)}}),p(ht,ot,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ht|jt,pointers:1},getTouchAction:function(){return nt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ht|jt)?e=t.overallVelocity:i&Ht?e=t.overallVelocityX:i&jt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&bt(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),p(dt,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime<e.time;if(this.reset(),t.eventType&Ot&&0===this.count)return this.failTimeout();if(o&&n&&i){if(t.eventType!=Pt)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<e.interval,r=!this.pCenter||F(this.pCenter,t.center)<e.posThreshold;this.pTime=t.timeStamp,this.pCenter=t.center,r&&s?this.count+=1:this.count=1,this._input=t;if(0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=h(function(){this.state=fe,this.tryEmit()},e.interval,this),pe):fe}return 32},failTimeout:function(){return this._timer=h(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==fe&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),lt.VERSION="2.0.7",lt.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[at,{enable:!1}],[st,{enable:!1},["rotate"]],[ht,{direction:Ht}],[nt,{direction:Ht},["swipe"]],[dt],[dt,{event:"doubletap",taps:2},["tap"]],[rt]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};ut.prototype={set:function(t){return mt(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){this.touchAction.preventDefaults(t);var i,o=this.recognizers,n=e.curRecognizer;(!n||n&&n.state&fe)&&(n=e.curRecognizer=null);for(var s=0;s<o.length;)i=o[s],2===e.stopped||n&&i!=n&&!i.canRecognizeWith(n)?i.reset():i.recognize(t),!n&&i.state&(pe|ce|me)&&(n=e.curRecognizer=i),s++}},get:function(t){if(t instanceof Q)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event==t)return e[i];return null},add:function(t){if(d(t,"add",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(d(t,"remove",this))return this;if(t=this.get(t)){var e=this.recognizers,i=w(e,t);-1!==i&&(e.splice(i,1),this.touchAction.update())}return this},on:function(t,e){if(t!==a&&e!==a){var i=this.handlers;return l(_(t),function(t){i[t]=i[t]||[],i[t].push(e)}),this}},off:function(t,e){if(t!==a){var i=this.handlers;return l(_(t),function(t){e?i[t]&&i[t].splice(w(i[t],e),1):delete i[t]}),this}},emit:function(t,e){this.options.domEvents&&ct(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var o=0;o<i.length;)i[o](e),o++}},destroy:function(){this.element&&pt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},mt(lt,{INPUT_START:Ot,INPUT_MOVE:Et,INPUT_END:Pt,INPUT_CANCEL:It,STATE_POSSIBLE:ue,STATE_BEGAN:pe,STATE_CHANGED:ce,STATE_ENDED:me,STATE_RECOGNIZED:fe,STATE_CANCELLED:ge,STATE_FAILED:32,DIRECTION_NONE:Nt,DIRECTION_LEFT:At,DIRECTION_RIGHT:Rt,DIRECTION_UP:Lt,DIRECTION_DOWN:Ft,DIRECTION_HORIZONTAL:Ht,DIRECTION_VERTICAL:jt,DIRECTION_ALL:Yt,Manager:ut,Input:T,TouchAction:J,TouchInput:B,MouseInput:G,PointerEventInput:z,TouchMouseInput:q,SingleTouchInput:W,Recognizer:Q,AttrRecognizer:ot,Tap:dt,Pan:nt,Swipe:ht,Pinch:st,Rotate:at,Press:rt,on:g,off:v,each:l,merge:xt,extend:wt,assign:mt,inherit:p,bindFn:c,prefixed:S}),(void 0!==n?n:"undefined"!=typeof self?self:{}).Hammer=lt,(o=function(){return lt}.call(e,i,e,t))!==a&&(t.exports=o)}(window,document)},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this;["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){n(i.target,t)||e.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function n(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var s=i(68),r=i(66),a=i(12),h=i(0);r(o.prototype),o.current=null,o.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},o.prototype.activate=function(){o.current&&o.current.deactivate(),o.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},o.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},o.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(31),a=o(r),h=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>n-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),r<this.padding&&(r=this.padding),s=this.x,s+i+this.padding>n&&(s=n-i-this.padding),s<this.padding&&(s=this.padding);this.frame.style.left=s+"px",this.frame.style.top=r+"px",this.frame.style.visibility="visible",this.hidden=!1}else this.hide()}},{key:"hide",value:function(){this.hidden=!0,this.frame.style.left="0",this.frame.style.top="0",this.frame.style.visibility="hidden"}},{key:"destroy",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}();e.default=h},function(t,e,i){t.exports={default:i(135),__esModule:!0}},function(t,e,i){i(136);var o=i(2).Object;t.exports=function(t,e,i){return o.defineProperty(t,e,i)}},function(t,e,i){var o=i(17);o(o.S+o.F*!i(9),"Object",{defineProperty:i(8).f})},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(16),s=o(n),r=i(30),a=o(r),h=i(31),d=o(h),l=i(12),u=i(67),p=i(0),c=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),!0===p.isString(t)){if(!0===p.isValidRGB(t)){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(!0===p.isValidRGBA(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===p.isValidHex(t)){var a=p.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=p.extend({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=p.extend({},t)),this.color=t;var e=p.RGBToHSV(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,n=this.centerCoordinates.x+o*Math.sin(i*e.h),s=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=n-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=p.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=p.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=p.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d");this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/this.r,d=void 0;for(s=0;s<360;s++)for(r=0;r<this.r;r++)o=this.centerCoordinates.x+r*Math.sin(a*s),n=this.centerCoordinates.y+r*Math.cos(a*s),d=p.HSVToRGB(s*(1/360),r*h,1),t.fillStyle="rgb("+d.r+","+d.g+","+d.b+")",t.fillRect(o-.5,n-.5,2,2);t.strokeStyle="rgba(0,0,0,1)",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,e,i)}this.generated=!0}},{key:"_moveSelector",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,o=t.center.y-e.top,n=.5*this.colorPickerDiv.clientHeight,s=.5*this.colorPickerDiv.clientWidth,r=i-s,a=o-n,h=Math.atan2(r,a),d=.98*Math.min(Math.sqrt(r*r+a*a),s),l=Math.cos(h)*d+n,u=Math.sin(h)*d+s;this.colorPickerSelector.style.top=l-.5*this.colorPickerSelector.clientHeight+"px",this.colorPickerSelector.style.left=u-.5*this.colorPickerSelector.clientWidth+"px";var c=h/(2*Math.PI);c=c<0?c+1:c;var m=d/this.r,f=p.RGBToHSV(this.color.r,this.color.g,this.color.b);f.h=c,f.s=m;var g=p.HSVToRGB(f.h,f.s,f.v);g.a=this.color.a,this.color=g,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),t}();e.default=c},function(t,e,i){function o(t,e,i,o){if(!(Array.isArray(i)||i instanceof r||i instanceof a)&&i instanceof Object){var d=o;o=i,i=d}o&&o.throttleRedraw&&console.warn('Graph2d option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var p=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:n,width:null,height:null,maxHeight:null,minHeight:null},this.options=s.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{toScreen:p._toScreen.bind(p),toGlobalScreen:p._toGlobalScreen.bind(p),toTime:p._toTime.bind(p),toGlobalTime:p._toGlobalTime.bind(p)}},this.range=new h(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.currentTime=new u(this.body),this.components.push(this.currentTime),this.linegraph=new c(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){p.emit("click",p.getEventProperties(t))}),this.on("doubletap",function(t){p.emit("doubleClick",p.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){p.emit("contextmenu",p.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var n=i(3),s=i(0),r=i(15),a=i(20),h=i(47),d=i(48),l=i(28),u=i(50),p=i(29),c=i(77),m=i(32).printStyle,f=i(84).allOptions,g=i(84).configureOptions,v=i(76).default,y=i(32).default;o.prototype=new d,o.prototype.setOptions=function(t){!0===y.validate(t,f)&&console.log("%cErrors have been found in the supplied options object.",m),d.prototype.setOptions.call(this,t)},o.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof r||t instanceof a?t:new r(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},o.prototype.setGroups=function(t){var e;e=t?t instanceof r||t instanceof a?t:new r(t):null,this.groupsData=e,this.linegraph.setGroups(e)},o.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:'"+t+"'"},o.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]&&(this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]))},o.prototype.getDataRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var o=0;o<this.linegraph.groups[i].itemsData.length;o++){var n=this.linegraph.groups[i].itemsData[o],r=s.convert(n.x,"Date").valueOf();t=null==t?r:t>r?r:t,e=null==e?r:e<r?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-s.getAbsoluteLeft(this.dom.centerContainer),n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this._toTime(o),a=p.customTimeFromTarget(t),h=s.getTarget(t),d=null;s.hasParent(h,this.timeAxis.dom.foreground)?d="axis":this.timeAxis2&&s.hasParent(h,this.timeAxis2.dom.foreground)?d="axis":s.hasParent(h,this.linegraph.yAxisLeft.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.yAxisRight.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.legendLeft.dom.frame)?d="legend":s.hasParent(h,this.linegraph.legendRight.dom.frame)?d="legend":null!=a?d="custom-time":s.hasParent(h,this.currentTime.bar)?d="current-time":s.hasParent(h,this.dom.center)&&(d="background");var l=[],u=this.linegraph.yAxisLeft,c=this.linegraph.yAxisRight;return!u.hidden&&this.itemsData.length>0&&l.push(u.screenToValue(n)),!c.hidden&&this.itemsData.length>0&&l.push(c.screenToValue(n)),{event:t,what:d,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:r,value:l}},o.prototype._createConfigurator=function(){return new v(this,this.dom.container,g)},t.exports=o}])});
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.css b/01_Code/physical_computing_interface/lib/vis/dist/vis.css
new file mode 100644
index 0000000000000000000000000000000000000000..a46bfa896ec467cdbe294b12288b009c2335f572
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.css
@@ -0,0 +1,1448 @@
+.vis .overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+
+  /* Must be displayed above for example selected Timeline items */
+  z-index: 10;
+}
+
+.vis-active {
+  box-shadow: 0 0 10px #86d5f8;
+}
+
+/* override some bootstrap styles screwing up the timelines css */
+
+.vis [class*="span"] {
+  min-height: 0;
+  width: auto;
+}
+
+div.vis-configuration {
+    position:relative;
+    display:block;
+    float:left;
+    font-size:12px;
+}
+
+div.vis-configuration-wrapper {
+    display:block;
+    width:700px;
+}
+
+div.vis-configuration-wrapper::after {
+  clear: both;
+  content: "";
+  display: block;
+}
+
+div.vis-configuration.vis-config-option-container{
+    display:block;
+    width:495px;
+    background-color: #ffffff;
+    border:2px solid #f7f8fa;
+    border-radius:4px;
+    margin-top:20px;
+    left:10px;
+    padding-left:5px;
+}
+
+div.vis-configuration.vis-config-button{
+    display:block;
+    width:495px;
+    height:25px;
+    vertical-align: middle;
+    line-height:25px;
+    background-color: #f7f8fa;
+    border:2px solid #ceced0;
+    border-radius:4px;
+    margin-top:20px;
+    left:10px;
+    padding-left:5px;
+    cursor: pointer;
+    margin-bottom:30px;
+}
+
+div.vis-configuration.vis-config-button.hover{
+    background-color: #4588e6;
+    border:2px solid #214373;
+    color:#ffffff;
+}
+
+div.vis-configuration.vis-config-item{
+    display:block;
+    float:left;
+    width:495px;
+    height:25px;
+    vertical-align: middle;
+    line-height:25px;
+}
+
+
+div.vis-configuration.vis-config-item.vis-config-s2{
+    left:10px;
+    background-color: #f7f8fa;
+    padding-left:5px;
+    border-radius:3px;
+}
+div.vis-configuration.vis-config-item.vis-config-s3{
+    left:20px;
+    background-color: #e4e9f0;
+    padding-left:5px;
+    border-radius:3px;
+}
+div.vis-configuration.vis-config-item.vis-config-s4{
+    left:30px;
+    background-color: #cfd8e6;
+    padding-left:5px;
+    border-radius:3px;
+}
+
+div.vis-configuration.vis-config-header{
+    font-size:18px;
+    font-weight: bold;
+}
+
+div.vis-configuration.vis-config-label{
+    width:120px;
+    height:25px;
+    line-height: 25px;
+}
+
+div.vis-configuration.vis-config-label.vis-config-s3{
+    width:110px;
+}
+div.vis-configuration.vis-config-label.vis-config-s4{
+    width:100px;
+}
+
+div.vis-configuration.vis-config-colorBlock{
+    top:1px;
+    width:30px;
+    height:19px;
+    border:1px solid #444444;
+    border-radius:2px;
+    padding:0px;
+    margin:0px;
+    cursor:pointer;
+}
+
+input.vis-configuration.vis-config-checkbox {
+    left:-5px;
+}
+
+
+input.vis-configuration.vis-config-rangeinput{
+    position:relative;
+    top:-5px;
+    width:60px;
+    /*height:13px;*/
+    padding:1px;
+    margin:0;
+    pointer-events:none;
+}
+
+input.vis-configuration.vis-config-range{
+    /*removes default webkit styles*/
+    -webkit-appearance: none;
+
+    /*fix for FF unable to apply focus style bug */
+    border: 0px solid white;
+    background-color:rgba(0,0,0,0);
+
+    /*required for proper track sizing in FF*/
+    width: 300px;
+    height:20px;
+}
+input.vis-configuration.vis-config-range::-webkit-slider-runnable-track {
+    width: 300px;
+    height: 5px;
+    background: #dedede; /* Old browsers */
+    background: -moz-linear-gradient(top,  #dedede 0%, #c8c8c8 99%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top,  #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top,  #dedede 0%,#c8c8c8 99%); /* IE10+ */
+    background: linear-gradient(to bottom,  #dedede 0%,#c8c8c8 99%); /* W3C */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */
+
+    border: 1px solid #999999;
+    box-shadow: #aaaaaa 0px 0px 3px 0px;
+    border-radius: 3px;
+}
+input.vis-configuration.vis-config-range::-webkit-slider-thumb {
+    -webkit-appearance: none;
+    border: 1px solid #14334b;
+    height: 17px;
+    width: 17px;
+    border-radius: 50%;
+    background: #3876c2; /* Old browsers */
+    background: -moz-linear-gradient(top,  #3876c2 0%, #385380 100%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3876c2), color-stop(100%,#385380)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top,  #3876c2 0%,#385380 100%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top,  #3876c2 0%,#385380 100%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top,  #3876c2 0%,#385380 100%); /* IE10+ */
+    background: linear-gradient(to bottom,  #3876c2 0%,#385380 100%); /* W3C */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3876c2', endColorstr='#385380',GradientType=0 ); /* IE6-9 */
+    box-shadow: #111927 0px 0px 1px 0px;
+    margin-top: -7px;
+}
+input.vis-configuration.vis-config-range:focus {
+    outline: none;
+}
+input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track {
+    background: #9d9d9d; /* Old browsers */
+    background: -moz-linear-gradient(top, #9d9d9d 0%, #c8c8c8 99%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#9d9d9d), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top,  #9d9d9d 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top,  #9d9d9d 0%,#c8c8c8 99%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top,  #9d9d9d 0%,#c8c8c8 99%); /* IE10+ */
+    background: linear-gradient(to bottom,  #9d9d9d 0%,#c8c8c8 99%); /* W3C */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#9d9d9d', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */
+}
+
+input.vis-configuration.vis-config-range::-moz-range-track {
+    width: 300px;
+    height: 10px;
+    background: #dedede; /* Old browsers */
+    background: -moz-linear-gradient(top,  #dedede 0%, #c8c8c8 99%); /* FF3.6+ */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dedede), color-stop(99%,#c8c8c8)); /* Chrome,Safari4+ */
+    background: -webkit-linear-gradient(top,  #dedede 0%,#c8c8c8 99%); /* Chrome10+,Safari5.1+ */
+    background: -o-linear-gradient(top, #dedede 0%, #c8c8c8 99%); /* Opera 11.10+ */
+    background: -ms-linear-gradient(top,  #dedede 0%,#c8c8c8 99%); /* IE10+ */
+    background: linear-gradient(to bottom,  #dedede 0%,#c8c8c8 99%); /* W3C */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dedede', endColorstr='#c8c8c8',GradientType=0 ); /* IE6-9 */
+
+    border: 1px solid #999999;
+    box-shadow: #aaaaaa 0px 0px 3px 0px;
+    border-radius: 3px;
+}
+input.vis-configuration.vis-config-range::-moz-range-thumb {
+    border: none;
+    height: 16px;
+    width: 16px;
+
+    border-radius: 50%;
+    background:  #385380;
+}
+
+/*hide the outline behind the border*/
+input.vis-configuration.vis-config-range:-moz-focusring{
+    outline: 1px solid white;
+    outline-offset: -1px;
+}
+
+input.vis-configuration.vis-config-range::-ms-track {
+    width: 300px;
+    height: 5px;
+
+    /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
+    background: transparent;
+
+    /*leave room for the larger thumb to overflow with a transparent border */
+    border-color: transparent;
+    border-width: 6px 0;
+
+    /*remove default tick marks*/
+    color: transparent;
+}
+input.vis-configuration.vis-config-range::-ms-fill-lower {
+    background: #777;
+    border-radius: 10px;
+}
+input.vis-configuration.vis-config-range::-ms-fill-upper {
+    background: #ddd;
+    border-radius: 10px;
+}
+input.vis-configuration.vis-config-range::-ms-thumb {
+    border: none;
+    height: 16px;
+    width: 16px;
+    border-radius: 50%;
+    background:  #385380;
+}
+input.vis-configuration.vis-config-range:focus::-ms-fill-lower {
+    background: #888;
+}
+input.vis-configuration.vis-config-range:focus::-ms-fill-upper {
+    background: #ccc;
+}
+
+.vis-configuration-popup {
+    position: absolute;
+    background: rgba(57, 76, 89, 0.85);
+    border: 2px solid #f2faff;
+    line-height:30px;
+    height:30px;
+    width:150px;
+    text-align:center;
+    color: #ffffff;
+    font-size:14px;
+    border-radius:4px;
+    -webkit-transition: opacity 0.3s ease-in-out;
+    -moz-transition: opacity 0.3s ease-in-out;
+    transition: opacity 0.3s ease-in-out;
+}
+.vis-configuration-popup:after, .vis-configuration-popup:before {
+    left: 100%;
+    top: 50%;
+    border: solid transparent;
+    content: " ";
+    height: 0;
+    width: 0;
+    position: absolute;
+    pointer-events: none;
+}
+
+.vis-configuration-popup:after {
+    border-color: rgba(136, 183, 213, 0);
+    border-left-color: rgba(57, 76, 89, 0.85);
+    border-width: 8px;
+    margin-top: -8px;
+}
+.vis-configuration-popup:before {
+    border-color: rgba(194, 225, 245, 0);
+    border-left-color: #f2faff;
+    border-width: 12px;
+    margin-top: -12px;
+}
+div.vis-tooltip {
+  position: absolute;
+  visibility: hidden;
+  padding: 5px;
+  white-space: nowrap;
+
+  font-family: verdana;
+  font-size:14px;
+  color:#000000;
+  background-color: #f5f4ed;
+
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  border: 1px solid #808074;
+
+  box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2);
+  pointer-events: none;
+
+  z-index: 5;
+}
+
+
+div.vis-color-picker {
+  position:absolute;
+  top: 0px;
+  left: 30px;
+  margin-top:-140px;
+  margin-left:30px;
+  width:310px;
+  height:444px;
+  z-index: 1;
+  padding: 10px;
+  border-radius:15px;
+  background-color:#ffffff;
+  display: none;
+  box-shadow: rgba(0,0,0,0.5) 0px 0px 10px 0px;
+}
+
+div.vis-color-picker div.vis-arrow {
+  position: absolute;
+  top:147px;
+  left:5px;
+}
+
+div.vis-color-picker div.vis-arrow::after,
+div.vis-color-picker div.vis-arrow::before {
+  right: 100%;
+  top: 50%;
+  border: solid transparent;
+  content: " ";
+  height: 0;
+  width: 0;
+  position: absolute;
+  pointer-events: none;
+}
+
+div.vis-color-picker div.vis-arrow:after {
+  border-color: rgba(255, 255, 255, 0);
+  border-right-color: #ffffff;
+  border-width: 30px;
+  margin-top: -30px;
+}
+
+div.vis-color-picker div.vis-color {
+  position:absolute;
+  width: 289px;
+  height: 289px;
+  cursor: pointer;
+}
+
+
+
+div.vis-color-picker div.vis-brightness {
+  position: absolute;
+  top:313px;
+}
+
+div.vis-color-picker div.vis-opacity {
+  position:absolute;
+  top:350px;
+}
+
+div.vis-color-picker div.vis-selector {
+  position:absolute;
+  top:137px;
+  left:137px;
+  width:15px;
+  height:15px;
+  border-radius:15px;
+  border:1px solid #ffffff;
+  background: #4c4c4c; /* Old browsers */
+  background: -moz-linear-gradient(top,  #4c4c4c 0%, #595959 12%, #666666 25%, #474747 39%, #2c2c2c 50%, #000000 51%, #111111 60%, #2b2b2b 76%, #1c1c1c 91%, #131313 100%); /* FF3.6+ */
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4c4c4c), color-stop(12%,#595959), color-stop(25%,#666666), color-stop(39%,#474747), color-stop(50%,#2c2c2c), color-stop(51%,#000000), color-stop(60%,#111111), color-stop(76%,#2b2b2b), color-stop(91%,#1c1c1c), color-stop(100%,#131313)); /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top,  #4c4c4c 0%,#595959 12%,#666666 25%,#474747 39%,#2c2c2c 50%,#000000 51%,#111111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%); /* Chrome10+,Safari5.1+ */
+  background: -o-linear-gradient(top,  #4c4c4c 0%,#595959 12%,#666666 25%,#474747 39%,#2c2c2c 50%,#000000 51%,#111111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%); /* Opera 11.10+ */
+  background: -ms-linear-gradient(top,  #4c4c4c 0%,#595959 12%,#666666 25%,#474747 39%,#2c2c2c 50%,#000000 51%,#111111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%); /* IE10+ */
+  background: linear-gradient(to bottom,  #4c4c4c 0%,#595959 12%,#666666 25%,#474747 39%,#2c2c2c 50%,#000000 51%,#111111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%); /* W3C */
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#4c4c4c', endColorstr='#131313',GradientType=0 ); /* IE6-9 */
+}
+
+
+
+div.vis-color-picker div.vis-new-color {
+  position:absolute;
+  width:140px;
+  height:20px;
+  border:1px solid rgba(0,0,0,0.1);
+  border-radius:5px;
+  top:380px;
+  left:159px;
+  text-align:right;
+  padding-right:2px;
+  font-size:10px;
+  color:rgba(0,0,0,0.4);
+  vertical-align:middle;
+  line-height:20px;
+
+}
+
+div.vis-color-picker div.vis-initial-color {
+  position:absolute;
+  width:140px;
+  height:20px;
+  border:1px solid rgba(0,0,0,0.1);
+  border-radius:5px;
+  top:380px;
+  left:10px;
+  text-align:left;
+  padding-left:2px;
+  font-size:10px;
+  color:rgba(0,0,0,0.4);
+  vertical-align:middle;
+  line-height:20px;
+}
+
+div.vis-color-picker div.vis-label {
+  position:absolute;
+  width:300px;
+  left:10px;
+}
+
+div.vis-color-picker div.vis-label.vis-brightness {
+  top:300px;
+}
+
+div.vis-color-picker div.vis-label.vis-opacity {
+  top:338px;
+}
+
+div.vis-color-picker div.vis-button {
+  position:absolute;
+  width:68px;
+  height:25px;
+  border-radius:10px;
+  vertical-align: middle;
+  text-align:center;
+  line-height: 25px;
+  top:410px;
+  border:2px solid #d9d9d9;
+  background-color: #f7f7f7;
+  cursor:pointer;
+}
+
+div.vis-color-picker div.vis-button.vis-cancel {
+  /*border:2px solid #ff4e33;*/
+  /*background-color: #ff7761;*/
+  left:5px;
+}
+div.vis-color-picker div.vis-button.vis-load {
+  /*border:2px solid #a153e6;*/
+  /*background-color: #cb8dff;*/
+  left:82px;
+}
+div.vis-color-picker div.vis-button.vis-apply {
+  /*border:2px solid #4588e6;*/
+  /*background-color: #82b6ff;*/
+  left:159px;
+}
+div.vis-color-picker div.vis-button.vis-save {
+  /*border:2px solid #45e655;*/
+  /*background-color: #6dff7c;*/
+  left:236px;
+}
+
+
+div.vis-color-picker input.vis-range {
+  width: 290px;
+  height:20px;
+}
+
+/* TODO: is this redundant?
+div.vis-color-picker input.vis-range-brightness {
+  width: 289px !important;
+}
+
+
+div.vis-color-picker input.vis-saturation-range {
+  width: 289px !important;
+}*/
+div.vis-network div.vis-manipulation {
+  box-sizing: content-box;
+
+  border-width: 0;
+  border-bottom: 1px;
+  border-style:solid;
+  border-color: #d6d9d8;
+  background: #ffffff; /* Old browsers */
+  background: -moz-linear-gradient(top,  #ffffff 0%, #fcfcfc 48%, #fafafa 50%, #fcfcfc 100%); /* FF3.6+ */
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(48%,#fcfcfc), color-stop(50%,#fafafa), color-stop(100%,#fcfcfc)); /* Chrome,Safari4+ */
+  background: -webkit-linear-gradient(top,  #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Chrome10+,Safari5.1+ */
+  background: -o-linear-gradient(top,  #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* Opera 11.10+ */
+  background: -ms-linear-gradient(top,  #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* IE10+ */
+  background: linear-gradient(to bottom,  #ffffff 0%,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%); /* W3C */
+  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fcfcfc',GradientType=0 ); /* IE6-9 */
+
+  padding-top:4px;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 28px;
+}
+
+div.vis-network div.vis-edit-mode {
+  position:absolute;
+  left: 0;
+  top: 5px;
+  height: 30px;
+}
+
+/* FIXME: shouldn't the vis-close button be a child of the vis-manipulation div? */
+
+div.vis-network div.vis-close {
+  position:absolute;
+  right: 0;
+  top: 0;
+  width: 30px;
+  height: 30px;
+
+  background-position: 20px 3px;
+  background-repeat: no-repeat;
+  background-image: url("img/network/cross.png");
+  cursor: pointer;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+div.vis-network div.vis-close:hover {
+  opacity: 0.6;
+}
+
+div.vis-network div.vis-manipulation div.vis-button,
+div.vis-network div.vis-edit-mode div.vis-button {
+  float:left;
+  font-family: verdana;
+  font-size: 12px;
+  -moz-border-radius: 15px;
+  border-radius: 15px;
+  display:inline-block;
+  background-position: 0px 0px;
+  background-repeat:no-repeat;
+  height:24px;
+  margin-left: 10px;
+  /*vertical-align:middle;*/
+  cursor: pointer;
+  padding: 0px 8px 0px 8px;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+div.vis-network div.vis-manipulation div.vis-button:hover {
+  box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.20);
+}
+
+div.vis-network div.vis-manipulation div.vis-button:active {
+  box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.50);
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-back {
+  background-image: url("img/network/backIcon.png");
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-none:hover {
+  box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0);
+  cursor: default;
+}
+div.vis-network div.vis-manipulation div.vis-button.vis-none:active {
+  box-shadow: 1px 1px 8px rgba(0, 0, 0, 0.0);
+}
+div.vis-network div.vis-manipulation div.vis-button.vis-none {
+  padding: 0;
+}
+div.vis-network div.vis-manipulation div.notification {
+  margin: 2px;
+  font-weight: bold;
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-add {
+  background-image: url("img/network/addNodeIcon.png");
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-edit,
+div.vis-network div.vis-edit-mode div.vis-button.vis-edit {
+  background-image: url("img/network/editIcon.png");
+}
+
+div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode {
+  background-color: #fcfcfc;
+  border: 1px solid #cccccc;
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-connect {
+  background-image: url("img/network/connectIcon.png");
+}
+
+div.vis-network div.vis-manipulation div.vis-button.vis-delete {
+  background-image: url("img/network/deleteIcon.png");
+}
+/* top right bottom left */
+div.vis-network div.vis-manipulation div.vis-label,
+div.vis-network div.vis-edit-mode div.vis-label {
+  margin: 0 0 0 23px;
+  line-height: 25px;
+}
+div.vis-network div.vis-manipulation div.vis-separator-line {
+  float:left;
+  display:inline-block;
+  width:1px;
+  height:21px;
+  background-color: #bdbdbd;
+  margin: 0px 7px 0 15px; /*top right bottom left*/
+}
+
+/* TODO: is this redundant?
+div.network-navigation_wrapper {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+}
+*/
+
+div.vis-network div.vis-navigation div.vis-button {
+    width:34px;
+    height:34px;
+    -moz-border-radius: 17px;
+    border-radius: 17px;
+    position:absolute;
+    display:inline-block;
+    background-position: 2px 2px;
+    background-repeat:no-repeat;
+    cursor: pointer;
+    -webkit-touch-callout: none;
+    -webkit-user-select: none;
+    -khtml-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+
+div.vis-network div.vis-navigation div.vis-button:hover {
+    box-shadow: 0 0 3px 3px rgba(56, 207, 21, 0.30);
+}
+
+div.vis-network div.vis-navigation div.vis-button:active {
+    box-shadow: 0 0 1px 3px rgba(56, 207, 21, 0.95);
+}
+
+div.vis-network div.vis-navigation div.vis-button.vis-up {
+    background-image: url("img/network/upArrow.png");
+    bottom:50px;
+    left:55px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-down {
+    background-image: url("img/network/downArrow.png");
+    bottom:10px;
+    left:55px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-left {
+    background-image: url("img/network/leftArrow.png");
+    bottom:10px;
+    left:15px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-right {
+    background-image: url("img/network/rightArrow.png");
+    bottom:10px;
+    left:95px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-zoomIn {
+    background-image: url("img/network/plus.png");
+    bottom:10px;
+    right:15px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-zoomOut {
+    background-image: url("img/network/minus.png");
+    bottom:10px;
+    right:55px;
+}
+div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends {
+    background-image: url("img/network/zoomExtends.png");
+    bottom:50px;
+    right:15px;
+}
+.vis-timeline {
+  /*
+  -webkit-transition: height .4s ease-in-out;
+  transition:         height .4s ease-in-out;
+  */
+}
+
+.vis-panel {
+  /*
+  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;
+  transition:         height .4s ease-in-out, top .4s ease-in-out;
+  */
+}
+
+.vis-axis {
+  /*
+  -webkit-transition: top .4s ease-in-out;
+  transition:         top .4s ease-in-out;
+  */
+}
+
+/* TODO: get animation working nicely
+
+.vis-item {
+  -webkit-transition: top .4s ease-in-out;
+  transition:         top .4s ease-in-out;
+}
+
+.vis-item.line {
+  -webkit-transition: height .4s ease-in-out, top .4s ease-in-out;
+  transition:         height .4s ease-in-out, top .4s ease-in-out;
+}
+/**/
+.vis-current-time {
+  background-color: #FF7F6E;
+  width: 2px;
+  z-index: 1;
+  pointer-events: none;
+}
+
+.vis-rolling-mode-btn {
+  height: 40px;
+  width: 40px;
+  position: absolute;
+  top: 7px;
+  right: 20px;
+  border-radius: 50%;
+  font-size: 28px;
+  cursor: pointer;
+  opacity: 0.8;
+  color: white;
+  font-weight: bold;
+  text-align: center;
+  background: #3876c2;
+}
+.vis-rolling-mode-btn:before {
+  content: "\26F6";
+}
+
+.vis-rolling-mode-btn:hover {
+  opacity: 1;
+}
+.vis-custom-time {
+  background-color: #6E94FF;
+  width: 2px;
+  cursor: move;
+  z-index: 1;
+}
+
+.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal {
+  position: absolute;
+  width: 100%;
+  height: 0;
+  border-bottom: 1px solid;
+}
+
+.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor {
+  border-color: #e5e5e5;
+}
+
+.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major {
+  border-color: #bfbfbf;
+}
+
+
+.vis-data-axis .vis-y-axis.vis-major {
+  width: 100%;
+  position: absolute;
+  color: #4d4d4d;
+  white-space: nowrap;
+}
+
+.vis-data-axis .vis-y-axis.vis-major.vis-measure {
+  padding: 0;
+  margin: 0;
+  border: 0;
+  visibility: hidden;
+  width: auto;
+}
+
+
+.vis-data-axis .vis-y-axis.vis-minor {
+  position: absolute;
+  width: 100%;
+  color: #bebebe;
+  white-space: nowrap;
+}
+
+.vis-data-axis .vis-y-axis.vis-minor.vis-measure {
+  padding: 0;
+  margin: 0;
+  border: 0;
+  visibility: hidden;
+  width: auto;
+}
+
+.vis-data-axis .vis-y-axis.vis-title {
+  position: absolute;
+  color: #4d4d4d;
+  white-space: nowrap;
+  bottom: 20px;
+  text-align: center;
+}
+
+.vis-data-axis .vis-y-axis.vis-title.vis-measure {
+  padding: 0;
+  margin: 0;
+  visibility: hidden;
+  width: auto;
+}
+
+.vis-data-axis .vis-y-axis.vis-title.vis-left {
+  bottom: 0;
+  -webkit-transform-origin: left top;
+  -moz-transform-origin: left top;
+  -ms-transform-origin: left top;
+  -o-transform-origin: left top;
+  transform-origin: left bottom;
+  -webkit-transform: rotate(-90deg);
+  -moz-transform: rotate(-90deg);
+  -ms-transform: rotate(-90deg);
+  -o-transform: rotate(-90deg);
+  transform: rotate(-90deg);
+}
+
+.vis-data-axis .vis-y-axis.vis-title.vis-right {
+  bottom: 0;
+  -webkit-transform-origin: right bottom;
+  -moz-transform-origin: right bottom;
+  -ms-transform-origin: right bottom;
+  -o-transform-origin: right bottom;
+  transform-origin: right bottom;
+  -webkit-transform: rotate(90deg);
+  -moz-transform: rotate(90deg);
+  -ms-transform: rotate(90deg);
+  -o-transform: rotate(90deg);
+  transform: rotate(90deg);
+}
+
+.vis-legend {
+  background-color: rgba(247, 252, 255, 0.65);
+  padding: 5px;
+  border: 1px solid #b3b3b3;
+  box-shadow: 2px 2px 10px rgba(154, 154, 154, 0.55);
+}
+
+.vis-legend-text {
+  /*font-size: 10px;*/
+  white-space: nowrap;
+  display: inline-block
+}
+
+.vis-item {
+  position: absolute;
+  color: #1A1A1A;
+  border-color: #97B0F8;
+  border-width: 1px;
+  background-color: #D5DDF6;
+  display: inline-block;
+  z-index: 1;
+  /*overflow: hidden;*/
+}
+
+.vis-item.vis-selected {
+  border-color: #FFC200;
+  background-color: #FFF785;
+
+  /* z-index must be higher than the z-index of custom time bar and current time bar */
+  z-index: 2;
+}
+
+.vis-editable.vis-selected {
+  cursor: move;
+}
+
+.vis-item.vis-point.vis-selected {
+  background-color: #FFF785;
+}
+
+.vis-item.vis-box {
+  text-align: center;
+  border-style: solid;
+  border-radius: 2px;
+}
+
+.vis-item.vis-point {
+  background: none;
+}
+
+.vis-item.vis-dot {
+  position: absolute;
+  padding: 0;
+  border-width: 4px;
+  border-style: solid;
+  border-radius: 4px;
+}
+
+.vis-item.vis-range {
+  border-style: solid;
+  border-radius: 2px;
+  box-sizing: border-box;
+}
+
+.vis-item.vis-background {
+  border: none;
+  background-color: rgba(213, 221, 246, 0.4);
+  box-sizing: border-box;
+  padding: 0;
+  margin: 0;
+}
+
+.vis-item .vis-item-overflow {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+}
+
+.vis-item-visible-frame {
+  white-space: nowrap;
+}
+
+.vis-item.vis-range .vis-item-content {
+  position: relative;
+  display: inline-block;
+}
+
+.vis-item.vis-background .vis-item-content {
+  position: absolute;
+  display: inline-block;
+}
+
+.vis-item.vis-line {
+  padding: 0;
+  position: absolute;
+  width: 0;
+  border-left-width: 1px;
+  border-left-style: solid;
+}
+
+.vis-item .vis-item-content {
+  white-space: nowrap;
+  box-sizing: border-box;
+  padding: 5px;
+}
+
+.vis-item .vis-onUpdateTime-tooltip {
+  position: absolute;
+  background: #4f81bd;
+  color: white;
+  width: 200px;
+  text-align: center;
+  white-space: nowrap;
+  padding: 5px;
+  border-radius: 1px;
+  transition: 0.4s;
+  -o-transition: 0.4s;
+  -moz-transition: 0.4s;
+  -webkit-transition: 0.4s;
+}
+
+.vis-item .vis-delete, .vis-item .vis-delete-rtl {
+  position: absolute;
+  top: 0px;
+  width: 24px;
+  height: 24px;
+  box-sizing: border-box;
+  padding: 0px 5px;
+  cursor: pointer;
+
+  -webkit-transition: background 0.2s linear;
+  -moz-transition: background 0.2s linear;
+  -ms-transition: background 0.2s linear;
+  -o-transition: background 0.2s linear;
+  transition: background 0.2s linear;
+}
+
+.vis-item .vis-delete {
+  right: -24px;
+}
+
+.vis-item .vis-delete-rtl {
+  left: -24px;
+}
+
+.vis-item .vis-delete:after, .vis-item .vis-delete-rtl:after {
+  content: "\00D7"; /* MULTIPLICATION SIGN */
+  color: red;
+  font-family: arial, sans-serif;
+  font-size: 22px;
+  font-weight: bold;
+
+  -webkit-transition: color 0.2s linear;
+  -moz-transition: color 0.2s linear;
+  -ms-transition: color 0.2s linear;
+  -o-transition: color 0.2s linear;
+  transition: color 0.2s linear;
+}
+
+.vis-item .vis-delete:hover, .vis-item .vis-delete-rtl:hover {
+  background: red;
+}
+
+.vis-item .vis-delete:hover:after, .vis-item .vis-delete-rtl:hover:after {
+  color: white;
+}
+
+.vis-item .vis-drag-center {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0px;
+  cursor: move;
+}
+
+.vis-item.vis-range .vis-drag-left {
+  position: absolute;
+  width: 24px;
+  max-width: 20%;
+  min-width: 2px;
+  height: 100%;
+  top: 0;
+  left: -4px;
+
+  cursor: w-resize;
+}
+
+.vis-item.vis-range .vis-drag-right {
+  position: absolute;
+  width: 24px;
+  max-width: 20%;
+  min-width: 2px;
+  height: 100%;
+  top: 0;
+  right: -4px;
+
+  cursor: e-resize;
+}
+
+.vis-range.vis-item.vis-readonly .vis-drag-left,
+.vis-range.vis-item.vis-readonly .vis-drag-right {
+  cursor: auto;
+}
+
+
+.vis-itemset {
+  position: relative;
+  padding: 0;
+  margin: 0;
+
+  box-sizing: border-box;
+}
+
+.vis-itemset .vis-background,
+.vis-itemset .vis-foreground {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  overflow: visible;
+}
+
+.vis-axis {
+  position: absolute;
+  width: 100%;
+  height: 0;
+  left: 0;
+  z-index: 1;
+}
+
+.vis-foreground .vis-group {
+  position: relative;
+  box-sizing: border-box;
+  border-bottom: 1px solid #bfbfbf;
+}
+
+.vis-foreground .vis-group:last-child {
+  border-bottom: none;
+}
+
+.vis-nesting-group {
+  cursor: pointer;
+}
+
+.vis-nested-group {
+  background: #f5f5f5;
+}
+
+.vis-label.vis-nesting-group.expanded:before {
+  content: "\25BC";
+}
+
+.vis-label.vis-nesting-group.collapsed-rtl:before {
+  content: "\25C0";
+}
+
+.vis-label.vis-nesting-group.collapsed:before {
+  content: "\25B6";
+}
+
+.vis-overlay {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 10;
+}
+
+.vis-labelset {
+  position: relative;
+
+  overflow: hidden;
+
+  box-sizing: border-box;
+}
+
+.vis-labelset .vis-label {
+  position: relative;
+  left: 0;
+  top: 0;
+  width: 100%;
+  color: #4d4d4d;
+
+  box-sizing: border-box;
+}
+
+.vis-labelset .vis-label {
+  border-bottom: 1px solid #bfbfbf;
+}
+
+.vis-labelset .vis-label.draggable {
+  cursor: pointer;
+}
+
+.vis-labelset .vis-label:last-child {
+  border-bottom: none;
+}
+
+.vis-labelset .vis-label .vis-inner {
+  display: inline-block;
+  padding: 5px;
+}
+
+.vis-labelset .vis-label .vis-inner.vis-hidden {
+  padding: 0;
+}
+
+.vis-panel {
+  position: absolute;
+
+  padding: 0;
+  margin: 0;
+
+  box-sizing: border-box;
+}
+
+.vis-panel.vis-center,
+.vis-panel.vis-left,
+.vis-panel.vis-right,
+.vis-panel.vis-top,
+.vis-panel.vis-bottom {
+  border: 1px #bfbfbf;
+}
+
+.vis-panel.vis-center,
+.vis-panel.vis-left,
+.vis-panel.vis-right {
+  border-top-style: solid;
+  border-bottom-style: solid;
+  overflow: hidden;
+}
+
+.vis-left.vis-panel.vis-vertical-scroll, .vis-right.vis-panel.vis-vertical-scroll {
+  height: 100%;
+  overflow-x: hidden;
+  overflow-y: scroll;
+} 
+
+.vis-left.vis-panel.vis-vertical-scroll {
+  direction: rtl;
+}
+
+.vis-left.vis-panel.vis-vertical-scroll .vis-content {
+  direction: ltr;
+}
+
+.vis-right.vis-panel.vis-vertical-scroll {
+  direction: ltr;
+}
+
+.vis-right.vis-panel.vis-vertical-scroll .vis-content {
+  direction: rtl;
+}
+
+.vis-panel.vis-center,
+.vis-panel.vis-top,
+.vis-panel.vis-bottom {
+  border-left-style: solid;
+  border-right-style: solid;
+}
+
+.vis-background {
+  overflow: hidden;
+}
+
+.vis-panel > .vis-content {
+  position: relative;
+}
+
+.vis-panel .vis-shadow {
+  position: absolute;
+  width: 100%;
+  height: 1px;
+  box-shadow: 0 0 10px rgba(0,0,0,0.8);
+  /* TODO: find a nice way to ensure vis-shadows are drawn on top of items
+  z-index: 1;
+  */
+}
+
+.vis-panel .vis-shadow.vis-top {
+  top: -1px;
+  left: 0;
+}
+
+.vis-panel .vis-shadow.vis-bottom {
+  bottom: -1px;
+  left: 0;
+}
+.vis-graph-group0 {
+    fill:#4f81bd;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #4f81bd;
+}
+
+.vis-graph-group1 {
+    fill:#f79646;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #f79646;
+}
+
+.vis-graph-group2 {
+    fill: #8c51cf;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #8c51cf;
+}
+
+.vis-graph-group3 {
+    fill: #75c841;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #75c841;
+}
+
+.vis-graph-group4 {
+    fill: #ff0100;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #ff0100;
+}
+
+.vis-graph-group5 {
+    fill: #37d8e6;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #37d8e6;
+}
+
+.vis-graph-group6 {
+    fill: #042662;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #042662;
+}
+
+.vis-graph-group7 {
+    fill:#00ff26;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #00ff26;
+}
+
+.vis-graph-group8 {
+    fill:#ff00ff;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #ff00ff;
+}
+
+.vis-graph-group9 {
+    fill: #8f3938;
+    fill-opacity:0;
+    stroke-width:2px;
+    stroke: #8f3938;
+}
+
+.vis-timeline .vis-fill {
+    fill-opacity:0.1;
+    stroke: none;
+}
+
+
+.vis-timeline .vis-bar {
+    fill-opacity:0.5;
+    stroke-width:1px;
+}
+
+.vis-timeline .vis-point {
+    stroke-width:2px;
+    fill-opacity:1.0;
+}
+
+
+.vis-timeline .vis-legend-background {
+    stroke-width:1px;
+    fill-opacity:0.9;
+    fill: #ffffff;
+    stroke: #c2c2c2;
+}
+
+
+.vis-timeline .vis-outline {
+    stroke-width:1px;
+    fill-opacity:1;
+    fill: #ffffff;
+    stroke: #e5e5e5;
+}
+
+.vis-timeline .vis-icon-fill {
+    fill-opacity:0.3;
+    stroke: none;
+}
+
+.vis-time-axis {
+  position: relative;
+  overflow: hidden;
+}
+
+.vis-time-axis.vis-foreground {
+  top: 0;
+  left: 0;
+  width: 100%;
+}
+
+.vis-time-axis.vis-background {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
+.vis-time-axis .vis-text {
+  position: absolute;
+  color: #4d4d4d;
+  padding: 3px;
+  overflow: hidden;
+  box-sizing: border-box;
+
+  white-space: nowrap;
+}
+
+.vis-time-axis .vis-text.vis-measure {
+  position: absolute;
+  padding-left: 0;
+  padding-right: 0;
+  margin-left: 0;
+  margin-right: 0;
+  visibility: hidden;
+}
+
+.vis-time-axis .vis-grid.vis-vertical {
+  position: absolute;
+  border-left: 1px solid;
+}
+
+.vis-time-axis .vis-grid.vis-vertical-rtl {
+  position: absolute;
+  border-right: 1px solid;
+}
+
+.vis-time-axis .vis-grid.vis-minor {
+  border-color: #e5e5e5;
+}
+
+.vis-time-axis .vis-grid.vis-major {
+  border-color: #bfbfbf;
+}
+
+
+.vis-timeline {
+  position: relative;
+  border: 1px solid #bfbfbf;
+
+  overflow: hidden;
+  padding: 0;
+  margin: 0;
+
+  box-sizing: border-box;
+}
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.js b/01_Code/physical_computing_interface/lib/vis/dist/vis.js
new file mode 100644
index 0000000000000000000000000000000000000000..2591a2c7ca4cccce35fafcb49cfff409d8e0d26e
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.js
@@ -0,0 +1,59936 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+
+"use strict";
+
+(function webpackUniversalModuleDefinition(root, factory) {
+	if(typeof exports === 'object' && typeof module === 'object')
+		module.exports = factory();
+	else if(typeof define === 'function' && define.amd)
+		define([], factory);
+	else if(typeof exports === 'object')
+		exports["vis"] = factory();
+	else
+		root["vis"] = factory();
+})(this, function() {
+return /******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, {
+/******/ 				configurable: false,
+/******/ 				enumerable: true,
+/******/ 				get: getter
+/******/ 			});
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+/******/
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(__webpack_require__.s = 123);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+exports.default = function (instance, Constructor) {
+  if (!(instance instanceof Constructor)) {
+    throw new TypeError("Cannot call a class as a function");
+  }
+};
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _defineProperty = __webpack_require__(169);
+
+var _defineProperty2 = _interopRequireDefault(_defineProperty);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function () {
+  function defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+      var descriptor = props[i];
+      descriptor.enumerable = descriptor.enumerable || false;
+      descriptor.configurable = true;
+      if ("value" in descriptor) descriptor.writable = true;
+      (0, _defineProperty2.default)(target, descriptor.key, descriptor);
+    }
+  }
+
+  return function (Constructor, protoProps, staticProps) {
+    if (protoProps) defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) defineProperties(Constructor, staticProps);
+    return Constructor;
+  };
+}();
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _getIterator2 = __webpack_require__(77);
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+// utility functions
+
+// first check if moment.js is already loaded in the browser window, if so,
+// use this instance. Else, load via commonjs.
+
+
+var moment = __webpack_require__(9);
+var uuid = __webpack_require__(157);
+
+/**
+ * Test whether given object is a number
+ * @param {*} object
+ * @return {Boolean} isNumber
+ */
+exports.isNumber = function (object) {
+  return object instanceof Number || typeof object == 'number';
+};
+
+/**
+ * Remove everything in the DOM object
+ * @param {Element} DOMobject
+ */
+exports.recursiveDOMDelete = function (DOMobject) {
+  if (DOMobject) {
+    while (DOMobject.hasChildNodes() === true) {
+      exports.recursiveDOMDelete(DOMobject.firstChild);
+      DOMobject.removeChild(DOMobject.firstChild);
+    }
+  }
+};
+
+/**
+ * this function gives you a range between 0 and 1 based on the min and max values in the set, the total sum of all values and the current value.
+ *
+ * @param {number} min
+ * @param {number} max
+ * @param {number} total
+ * @param {number} value
+ * @returns {number}
+ */
+exports.giveRange = function (min, max, total, value) {
+  if (max == min) {
+    return 0.5;
+  } else {
+    var scale = 1 / (max - min);
+    return Math.max(0, (value - min) * scale);
+  }
+};
+
+/**
+ * Test whether given object is a string
+ * @param {*} object
+ * @return {Boolean} isString
+ */
+exports.isString = function (object) {
+  return object instanceof String || typeof object == 'string';
+};
+
+/**
+ * Test whether given object is a Date, or a String containing a Date
+ * @param {Date | String} object
+ * @return {Boolean} isDate
+ */
+exports.isDate = function (object) {
+  if (object instanceof Date) {
+    return true;
+  } else if (exports.isString(object)) {
+    // test whether this string contains a date
+    var match = ASPDateRegex.exec(object);
+    if (match) {
+      return true;
+    } else if (!isNaN(Date.parse(object))) {
+      return true;
+    }
+  }
+
+  return false;
+};
+
+/**
+ * Create a semi UUID
+ * source: http://stackoverflow.com/a/105074/1262753
+ * @return {string} uuid
+ */
+exports.randomUUID = function () {
+  return uuid.v4();
+};
+
+/**
+ * assign all keys of an object that are not nested objects to a certain value (used for color objects).
+ * @param {object} obj
+ * @param {number} value
+ */
+exports.assignAllKeys = function (obj, value) {
+  for (var prop in obj) {
+    if (obj.hasOwnProperty(prop)) {
+      if ((0, _typeof3['default'])(obj[prop]) !== 'object') {
+        obj[prop] = value;
+      }
+    }
+  }
+};
+
+/**
+ * Copy property from b to a if property present in a.
+ * If property in b explicitly set to null, delete it if `allowDeletion` set.
+ *
+ * Internal helper routine, should not be exported. Not added to `exports` for that reason.
+ *
+ * @param {object} a  target object
+ * @param {object} b  source object
+ * @param {string} prop  name of property to copy to a
+ * @param {boolean} allowDeletion  if true, delete property in a if explicitly set to null in b 
+ * @private
+ */
+function copyOrDelete(a, b, prop, allowDeletion) {
+  var doDeletion = false;
+  if (allowDeletion === true) {
+    doDeletion = b[prop] === null && a[prop] !== undefined;
+  }
+
+  if (doDeletion) {
+    delete a[prop];
+  } else {
+    a[prop] = b[prop]; // Remember, this is a reference copy!
+  }
+}
+
+/**
+ * Fill an object with a possibly partially defined other object.
+ *
+ * Only copies values for the properties already present in a.
+ * That means an object is not created on a property if only the b object has it.
+ *
+ * @param {object} a
+ * @param {object} b
+ * @param {boolean} [allowDeletion=false]  if true, delete properties in a that are explicitly set to null in b 
+ */
+exports.fillIfDefined = function (a, b) {
+  var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+  // NOTE: iteration of properties of a
+  // NOTE: prototype properties iterated over as well
+  for (var prop in a) {
+    if (b[prop] !== undefined) {
+      if (b[prop] === null || (0, _typeof3['default'])(b[prop]) !== 'object') {
+        // Note: typeof null === 'object'
+        copyOrDelete(a, b, prop, allowDeletion);
+      } else {
+        if ((0, _typeof3['default'])(a[prop]) === 'object') {
+          exports.fillIfDefined(a[prop], b[prop], allowDeletion);
+        }
+      }
+    }
+  }
+};
+
+/**
+ * Extend object a with the properties of object b or a series of objects
+ * Only properties with defined values are copied
+ * @param {Object} a
+ * @param {...Object} b
+ * @return {Object} a
+ */
+exports.extend = function (a, b) {
+  // eslint-disable-line no-unused-vars
+  for (var i = 1; i < arguments.length; i++) {
+    var other = arguments[i];
+    for (var prop in other) {
+      if (other.hasOwnProperty(prop)) {
+        a[prop] = other[prop];
+      }
+    }
+  }
+  return a;
+};
+
+/**
+ * Extend object a with selected properties of object b or a series of objects
+ * Only properties with defined values are copied
+ * @param {Array.<string>} props
+ * @param {Object} a
+ * @param {Object} b
+ * @return {Object} a
+ */
+exports.selectiveExtend = function (props, a, b) {
+  // eslint-disable-line no-unused-vars
+  if (!Array.isArray(props)) {
+    throw new Error('Array with property names expected as first argument');
+  }
+
+  for (var i = 2; i < arguments.length; i++) {
+    var other = arguments[i];
+
+    for (var p = 0; p < props.length; p++) {
+      var prop = props[p];
+      if (other && other.hasOwnProperty(prop)) {
+        a[prop] = other[prop];
+      }
+    }
+  }
+  return a;
+};
+
+/**
+ * Extend object a with selected properties of object b.
+ * Only properties with defined values are copied.
+ *
+ * **Note:** Previous version of this routine implied that multiple source objects
+ *           could be used; however, the implementation was **wrong**.
+ *           Since multiple (>1) sources weren't used anywhere in the `vis.js` code,
+ *           this has been removed
+ *
+ * @param {Array.<string>} props names of first-level properties to copy over
+ * @param {object} a  target object
+ * @param {object} b  source object
+ * @param {boolean} [allowDeletion=false]  if true, delete property in a if explicitly set to null in b 
+ * @returns {Object} a
+ */
+exports.selectiveDeepExtend = function (props, a, b) {
+  var allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+
+  // TODO: add support for Arrays to deepExtend
+  if (Array.isArray(b)) {
+    throw new TypeError('Arrays are not supported by deepExtend');
+  }
+
+  for (var p = 0; p < props.length; p++) {
+    var prop = props[p];
+    if (b.hasOwnProperty(prop)) {
+      if (b[prop] && b[prop].constructor === Object) {
+        if (a[prop] === undefined) {
+          a[prop] = {};
+        }
+        if (a[prop].constructor === Object) {
+          exports.deepExtend(a[prop], b[prop], false, allowDeletion);
+        } else {
+          copyOrDelete(a, b, prop, allowDeletion);
+        }
+      } else if (Array.isArray(b[prop])) {
+        throw new TypeError('Arrays are not supported by deepExtend');
+      } else {
+        copyOrDelete(a, b, prop, allowDeletion);
+      }
+    }
+  }
+  return a;
+};
+
+/**
+ * Extend object `a` with properties of object `b`, ignoring properties which are explicitly 
+ * specified to be excluded.
+ * 
+ * The properties of `b` are considered for copying.
+ * Properties which are themselves objects are are also extended.
+ * Only properties with defined values are copied
+ *
+ * @param {Array.<string>} propsToExclude  names of properties which should *not* be copied
+ * @param {Object}                      a  object to extend
+ * @param {Object}                      b  object to take properties from for extension
+ * @param {boolean} [allowDeletion=false]  if true, delete properties in a that are explicitly set to null in b 
+ * @return {Object} a
+ */
+exports.selectiveNotDeepExtend = function (propsToExclude, a, b) {
+  var allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+
+  // TODO: add support for Arrays to deepExtend
+  // NOTE: array properties have an else-below; apparently, there is a problem here. 
+  if (Array.isArray(b)) {
+    throw new TypeError('Arrays are not supported by deepExtend');
+  }
+
+  for (var prop in b) {
+    if (!b.hasOwnProperty(prop)) continue; // Handle local properties only 
+    if (propsToExclude.indexOf(prop) !== -1) continue; // In exclusion list, skip
+
+    if (b[prop] && b[prop].constructor === Object) {
+      if (a[prop] === undefined) {
+        a[prop] = {};
+      }
+      if (a[prop].constructor === Object) {
+        exports.deepExtend(a[prop], b[prop]); // NOTE: allowDeletion not propagated!
+      } else {
+        copyOrDelete(a, b, prop, allowDeletion);
+      }
+    } else if (Array.isArray(b[prop])) {
+      a[prop] = [];
+      for (var i = 0; i < b[prop].length; i++) {
+        a[prop].push(b[prop][i]);
+      }
+    } else {
+      copyOrDelete(a, b, prop, allowDeletion);
+    }
+  }
+
+  return a;
+};
+
+/**
+ * Deep extend an object a with the properties of object b
+ *
+ * @param {Object} a
+ * @param {Object} b
+ * @param {boolean} [protoExtend=false]  If true, the prototype values will also be extended.
+ *                          (ie. the options objects that inherit from others will also get the inherited options)
+ * @param {boolean} [allowDeletion=false] If true, the values of fields that are null will be deleted
+ * @returns {Object}
+ */
+exports.deepExtend = function (a, b) {
+  var protoExtend = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+  var allowDeletion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+
+  for (var prop in b) {
+    if (b.hasOwnProperty(prop) || protoExtend === true) {
+      if (b[prop] && b[prop].constructor === Object) {
+        if (a[prop] === undefined) {
+          a[prop] = {};
+        }
+        if (a[prop].constructor === Object) {
+          exports.deepExtend(a[prop], b[prop], protoExtend); // NOTE: allowDeletion not propagated!
+        } else {
+          copyOrDelete(a, b, prop, allowDeletion);
+        }
+      } else if (Array.isArray(b[prop])) {
+        a[prop] = [];
+        for (var i = 0; i < b[prop].length; i++) {
+          a[prop].push(b[prop][i]);
+        }
+      } else {
+        copyOrDelete(a, b, prop, allowDeletion);
+      }
+    }
+  }
+  return a;
+};
+
+/**
+ * Test whether all elements in two arrays are equal.
+ * @param {Array} a
+ * @param {Array} b
+ * @return {boolean} Returns true if both arrays have the same length and same
+ *                   elements.
+ */
+exports.equalArray = function (a, b) {
+  if (a.length != b.length) return false;
+
+  for (var i = 0, len = a.length; i < len; i++) {
+    if (a[i] != b[i]) return false;
+  }
+
+  return true;
+};
+
+/**
+ * Convert an object to another type
+ * @param {boolean | number | string | Date | Moment | Null | undefined} object
+ * @param {string | undefined} type   Name of the type. Available types:
+ *                                    'Boolean', 'Number', 'String',
+ *                                    'Date', 'Moment', ISODate', 'ASPDate'.
+ * @return {*} object
+ * @throws Error
+ */
+exports.convert = function (object, type) {
+  var match;
+
+  if (object === undefined) {
+    return undefined;
+  }
+  if (object === null) {
+    return null;
+  }
+
+  if (!type) {
+    return object;
+  }
+  if (!(typeof type === 'string') && !(type instanceof String)) {
+    throw new Error('Type must be a string');
+  }
+
+  //noinspection FallthroughInSwitchStatementJS
+  switch (type) {
+    case 'boolean':
+    case 'Boolean':
+      return Boolean(object);
+
+    case 'number':
+    case 'Number':
+      if (exports.isString(object) && !isNaN(Date.parse(object))) {
+        return moment(object).valueOf();
+      } else {
+        return Number(object.valueOf());
+      }
+    case 'string':
+    case 'String':
+      return String(object);
+
+    case 'Date':
+      if (exports.isNumber(object)) {
+        return new Date(object);
+      }
+      if (object instanceof Date) {
+        return new Date(object.valueOf());
+      } else if (moment.isMoment(object)) {
+        return new Date(object.valueOf());
+      }
+      if (exports.isString(object)) {
+        match = ASPDateRegex.exec(object);
+        if (match) {
+          // object is an ASP date
+          return new Date(Number(match[1])); // parse number
+        } else {
+          return moment(new Date(object)).toDate(); // parse string
+        }
+      } else {
+        throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date');
+      }
+
+    case 'Moment':
+      if (exports.isNumber(object)) {
+        return moment(object);
+      }
+      if (object instanceof Date) {
+        return moment(object.valueOf());
+      } else if (moment.isMoment(object)) {
+        return moment(object);
+      }
+      if (exports.isString(object)) {
+        match = ASPDateRegex.exec(object);
+        if (match) {
+          // object is an ASP date
+          return moment(Number(match[1])); // parse number
+        } else {
+          return moment(object); // parse string
+        }
+      } else {
+        throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type Date');
+      }
+
+    case 'ISODate':
+      if (exports.isNumber(object)) {
+        return new Date(object);
+      } else if (object instanceof Date) {
+        return object.toISOString();
+      } else if (moment.isMoment(object)) {
+        return object.toDate().toISOString();
+      } else if (exports.isString(object)) {
+        match = ASPDateRegex.exec(object);
+        if (match) {
+          // object is an ASP date
+          return new Date(Number(match[1])).toISOString(); // parse number
+        } else {
+          return moment(object).format(); // ISO 8601
+        }
+      } else {
+        throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ISODate');
+      }
+
+    case 'ASPDate':
+      if (exports.isNumber(object)) {
+        return '/Date(' + object + ')/';
+      } else if (object instanceof Date) {
+        return '/Date(' + object.valueOf() + ')/';
+      } else if (exports.isString(object)) {
+        match = ASPDateRegex.exec(object);
+        var value;
+        if (match) {
+          // object is an ASP date
+          value = new Date(Number(match[1])).valueOf(); // parse number
+        } else {
+          value = new Date(object).valueOf(); // parse string
+        }
+        return '/Date(' + value + ')/';
+      } else {
+        throw new Error('Cannot convert object of type ' + exports.getType(object) + ' to type ASPDate');
+      }
+
+    default:
+      throw new Error('Unknown type "' + type + '"');
+  }
+};
+
+// parse ASP.Net Date pattern,
+// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'
+// code from http://momentjs.com/
+var ASPDateRegex = /^\/?Date\((\-?\d+)/i;
+
+/**
+ * Get the type of an object, for example exports.getType([]) returns 'Array'
+ * @param {*} object
+ * @return {string} type
+ */
+exports.getType = function (object) {
+  var type = typeof object === 'undefined' ? 'undefined' : (0, _typeof3['default'])(object);
+
+  if (type == 'object') {
+    if (object === null) {
+      return 'null';
+    }
+    if (object instanceof Boolean) {
+      return 'Boolean';
+    }
+    if (object instanceof Number) {
+      return 'Number';
+    }
+    if (object instanceof String) {
+      return 'String';
+    }
+    if (Array.isArray(object)) {
+      return 'Array';
+    }
+    if (object instanceof Date) {
+      return 'Date';
+    }
+    return 'Object';
+  } else if (type == 'number') {
+    return 'Number';
+  } else if (type == 'boolean') {
+    return 'Boolean';
+  } else if (type == 'string') {
+    return 'String';
+  } else if (type === undefined) {
+    return 'undefined';
+  }
+
+  return type;
+};
+
+/**
+ * Used to extend an array and copy it. This is used to propagate paths recursively.
+ *
+ * @param {Array} arr
+ * @param {*} newValue
+ * @returns {Array}
+ */
+exports.copyAndExtendArray = function (arr, newValue) {
+  var newArr = [];
+  for (var i = 0; i < arr.length; i++) {
+    newArr.push(arr[i]);
+  }
+  newArr.push(newValue);
+  return newArr;
+};
+
+/**
+ * Used to extend an array and copy it. This is used to propagate paths recursively.
+ *
+ * @param {Array} arr
+ * @returns {Array}
+ */
+exports.copyArray = function (arr) {
+  var newArr = [];
+  for (var i = 0; i < arr.length; i++) {
+    newArr.push(arr[i]);
+  }
+  return newArr;
+};
+
+/**
+ * Retrieve the absolute left value of a DOM element
+ * @param {Element} elem        A dom element, for example a div
+ * @return {number} left        The absolute left position of this element
+ *                              in the browser page.
+ */
+exports.getAbsoluteLeft = function (elem) {
+  return elem.getBoundingClientRect().left;
+};
+
+exports.getAbsoluteRight = function (elem) {
+  return elem.getBoundingClientRect().right;
+};
+
+/**
+ * Retrieve the absolute top value of a DOM element
+ * @param {Element} elem        A dom element, for example a div
+ * @return {number} top        The absolute top position of this element
+ *                              in the browser page.
+ */
+exports.getAbsoluteTop = function (elem) {
+  return elem.getBoundingClientRect().top;
+};
+
+/**
+ * add a className to the given elements style
+ * @param {Element} elem
+ * @param {string} classNames
+ */
+exports.addClassName = function (elem, classNames) {
+  var classes = elem.className.split(' ');
+  var newClasses = classNames.split(' ');
+  classes = classes.concat(newClasses.filter(function (className) {
+    return classes.indexOf(className) < 0;
+  }));
+  elem.className = classes.join(' ');
+};
+
+/**
+ * add a className to the given elements style
+ * @param {Element} elem
+ * @param {string} classNames
+ */
+exports.removeClassName = function (elem, classNames) {
+  var classes = elem.className.split(' ');
+  var oldClasses = classNames.split(' ');
+  classes = classes.filter(function (className) {
+    return oldClasses.indexOf(className) < 0;
+  });
+  elem.className = classes.join(' ');
+};
+
+/**
+ * For each method for both arrays and objects.
+ * In case of an array, the built-in Array.forEach() is applied. (**No, it's not!**)
+ * In case of an Object, the method loops over all properties of the object.
+ * @param {Object | Array} object   An Object or Array
+ * @param {function} callback       Callback method, called for each item in
+ *                                  the object or array with three parameters:
+ *                                  callback(value, index, object)
+ */
+exports.forEach = function (object, callback) {
+  var i, len;
+  if (Array.isArray(object)) {
+    // array
+    for (i = 0, len = object.length; i < len; i++) {
+      callback(object[i], i, object);
+    }
+  } else {
+    // object
+    for (i in object) {
+      if (object.hasOwnProperty(i)) {
+        callback(object[i], i, object);
+      }
+    }
+  }
+};
+
+/**
+ * Convert an object into an array: all objects properties are put into the
+ * array. The resulting array is unordered.
+ * @param {Object} object
+ * @returns {Array} array
+ */
+exports.toArray = function (object) {
+  var array = [];
+
+  for (var prop in object) {
+    if (object.hasOwnProperty(prop)) array.push(object[prop]);
+  }
+
+  return array;
+};
+
+/**
+ * Update a property in an object
+ * @param {Object} object
+ * @param {string} key
+ * @param {*} value
+ * @return {Boolean} changed
+ */
+exports.updateProperty = function (object, key, value) {
+  if (object[key] !== value) {
+    object[key] = value;
+    return true;
+  } else {
+    return false;
+  }
+};
+
+/**
+ * Throttle the given function to be only executed once per animation frame
+ * @param {function} fn
+ * @returns {function} Returns the throttled function
+ */
+exports.throttle = function (fn) {
+  var scheduled = false;
+
+  return function throttled() {
+    if (!scheduled) {
+      scheduled = true;
+      requestAnimationFrame(function () {
+        scheduled = false;
+        fn();
+      });
+    }
+  };
+};
+
+/**
+ * Add and event listener. Works for all browsers
+ * @param {Element}     element    An html element
+ * @param {string}      action     The action, for example "click",
+ *                                 without the prefix "on"
+ * @param {function}    listener   The callback function to be executed
+ * @param {boolean}     [useCapture]
+ */
+exports.addEventListener = function (element, action, listener, useCapture) {
+  if (element.addEventListener) {
+    if (useCapture === undefined) useCapture = false;
+
+    if (action === "mousewheel" && navigator.userAgent.indexOf("Firefox") >= 0) {
+      action = "DOMMouseScroll"; // For Firefox
+    }
+
+    element.addEventListener(action, listener, useCapture);
+  } else {
+    element.attachEvent("on" + action, listener); // IE browsers
+  }
+};
+
+/**
+ * Remove an event listener from an element
+ * @param {Element}     element         An html dom element
+ * @param {string}      action          The name of the event, for example "mousedown"
+ * @param {function}    listener        The listener function
+ * @param {boolean}     [useCapture]
+ */
+exports.removeEventListener = function (element, action, listener, useCapture) {
+  if (element.removeEventListener) {
+    // non-IE browsers
+    if (useCapture === undefined) useCapture = false;
+
+    if (action === "mousewheel" && navigator.userAgent.indexOf("Firefox") >= 0) {
+      action = "DOMMouseScroll"; // For Firefox
+    }
+
+    element.removeEventListener(action, listener, useCapture);
+  } else {
+    // IE browsers
+    element.detachEvent("on" + action, listener);
+  }
+};
+
+/**
+ * Cancels the event if it is cancelable, without stopping further propagation of the event.
+ * @param {Event} event
+ */
+exports.preventDefault = function (event) {
+  if (!event) event = window.event;
+
+  if (event.preventDefault) {
+    event.preventDefault(); // non-IE browsers
+  } else {
+    event.returnValue = false; // IE browsers
+  }
+};
+
+/**
+ * Get HTML element which is the target of the event
+ * @param {Event} event
+ * @return {Element} target element
+ */
+exports.getTarget = function (event) {
+  // code from http://www.quirksmode.org/js/events_properties.html
+  if (!event) {
+    event = window.event;
+  }
+
+  var target;
+
+  if (event.target) {
+    target = event.target;
+  } else if (event.srcElement) {
+    target = event.srcElement;
+  }
+
+  if (target.nodeType != undefined && target.nodeType == 3) {
+    // defeat Safari bug
+    target = target.parentNode;
+  }
+
+  return target;
+};
+
+/**
+ * Check if given element contains given parent somewhere in the DOM tree
+ * @param {Element} element
+ * @param {Element} parent
+ * @returns {boolean}
+ */
+exports.hasParent = function (element, parent) {
+  var e = element;
+
+  while (e) {
+    if (e === parent) {
+      return true;
+    }
+    e = e.parentNode;
+  }
+
+  return false;
+};
+
+exports.option = {};
+
+/**
+ * Convert a value into a boolean
+ * @param {Boolean | function | undefined} value
+ * @param {boolean} [defaultValue]
+ * @returns {Boolean} bool
+ */
+exports.option.asBoolean = function (value, defaultValue) {
+  if (typeof value == 'function') {
+    value = value();
+  }
+
+  if (value != null) {
+    return value != false;
+  }
+
+  return defaultValue || null;
+};
+
+/**
+ * Convert a value into a number
+ * @param {Boolean | function | undefined} value
+ * @param {number} [defaultValue]
+ * @returns {number} number
+ */
+exports.option.asNumber = function (value, defaultValue) {
+  if (typeof value == 'function') {
+    value = value();
+  }
+
+  if (value != null) {
+    return Number(value) || defaultValue || null;
+  }
+
+  return defaultValue || null;
+};
+
+/**
+ * Convert a value into a string
+ * @param {string | function | undefined} value
+ * @param {string} [defaultValue]
+ * @returns {String} str
+ */
+exports.option.asString = function (value, defaultValue) {
+  if (typeof value == 'function') {
+    value = value();
+  }
+
+  if (value != null) {
+    return String(value);
+  }
+
+  return defaultValue || null;
+};
+
+/**
+ * Convert a size or location into a string with pixels or a percentage
+ * @param {string | number | function | undefined} value
+ * @param {string} [defaultValue]
+ * @returns {String} size
+ */
+exports.option.asSize = function (value, defaultValue) {
+  if (typeof value == 'function') {
+    value = value();
+  }
+
+  if (exports.isString(value)) {
+    return value;
+  } else if (exports.isNumber(value)) {
+    return value + 'px';
+  } else {
+    return defaultValue || null;
+  }
+};
+
+/**
+ * Convert a value into a DOM element
+ * @param {HTMLElement | function | undefined} value
+ * @param {HTMLElement} [defaultValue]
+ * @returns {HTMLElement | null} dom
+ */
+exports.option.asElement = function (value, defaultValue) {
+  if (typeof value == 'function') {
+    value = value();
+  }
+
+  return value || defaultValue || null;
+};
+
+/**
+ * http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
+ *
+ * @param {string} hex
+ * @returns {{r: *, g: *, b: *}} | 255 range
+ */
+exports.hexToRGB = function (hex) {
+  // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
+  var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+  hex = hex.replace(shorthandRegex, function (m, r, g, b) {
+    return r + r + g + g + b + b;
+  });
+  var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+  return result ? {
+    r: parseInt(result[1], 16),
+    g: parseInt(result[2], 16),
+    b: parseInt(result[3], 16)
+  } : null;
+};
+
+/**
+ * This function takes color in hex format or rgb() or rgba() format and overrides the opacity. Returns rgba() string.
+ * @param {string} color
+ * @param {number} opacity
+ * @returns {String}
+ */
+exports.overrideOpacity = function (color, opacity) {
+  var rgb;
+  if (color.indexOf("rgba") != -1) {
+    return color;
+  } else if (color.indexOf("rgb") != -1) {
+    rgb = color.substr(color.indexOf("(") + 1).replace(")", "").split(",");
+    return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + "," + opacity + ")";
+  } else {
+    rgb = exports.hexToRGB(color);
+    if (rgb == null) {
+      return color;
+    } else {
+      return "rgba(" + rgb.r + "," + rgb.g + "," + rgb.b + "," + opacity + ")";
+    }
+  }
+};
+
+/**
+ *
+ * @param {number} red     0 -- 255
+ * @param {number} green   0 -- 255
+ * @param {number} blue    0 -- 255
+ * @returns {String}
+ * @constructor
+ */
+exports.RGBToHex = function (red, green, blue) {
+  return "#" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1);
+};
+
+/**
+ * Parse a color property into an object with border, background, and
+ * highlight colors
+ * @param {Object | String} color
+ * @return {Object} colorObject
+ */
+exports.parseColor = function (color) {
+  var c;
+  if (exports.isString(color) === true) {
+    if (exports.isValidRGB(color) === true) {
+      var rgb = color.substr(4).substr(0, color.length - 5).split(',').map(function (value) {
+        return parseInt(value);
+      });
+      color = exports.RGBToHex(rgb[0], rgb[1], rgb[2]);
+    }
+    if (exports.isValidHex(color) === true) {
+      var hsv = exports.hexToHSV(color);
+      var lighterColorHSV = { h: hsv.h, s: hsv.s * 0.8, v: Math.min(1, hsv.v * 1.02) };
+      var darkerColorHSV = { h: hsv.h, s: Math.min(1, hsv.s * 1.25), v: hsv.v * 0.8 };
+      var darkerColorHex = exports.HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);
+      var lighterColorHex = exports.HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);
+      c = {
+        background: color,
+        border: darkerColorHex,
+        highlight: {
+          background: lighterColorHex,
+          border: darkerColorHex
+        },
+        hover: {
+          background: lighterColorHex,
+          border: darkerColorHex
+        }
+      };
+    } else {
+      c = {
+        background: color,
+        border: color,
+        highlight: {
+          background: color,
+          border: color
+        },
+        hover: {
+          background: color,
+          border: color
+        }
+      };
+    }
+  } else {
+    c = {};
+    c.background = color.background || undefined;
+    c.border = color.border || undefined;
+
+    if (exports.isString(color.highlight)) {
+      c.highlight = {
+        border: color.highlight,
+        background: color.highlight
+      };
+    } else {
+      c.highlight = {};
+      c.highlight.background = color.highlight && color.highlight.background || undefined;
+      c.highlight.border = color.highlight && color.highlight.border || undefined;
+    }
+
+    if (exports.isString(color.hover)) {
+      c.hover = {
+        border: color.hover,
+        background: color.hover
+      };
+    } else {
+      c.hover = {};
+      c.hover.background = color.hover && color.hover.background || undefined;
+      c.hover.border = color.hover && color.hover.border || undefined;
+    }
+  }
+
+  return c;
+};
+
+/**
+ * http://www.javascripter.net/faq/rgb2hsv.htm
+ *
+ * @param {number} red
+ * @param {number} green
+ * @param {number} blue
+ * @returns {{h: number, s: number, v: number}}
+ * @constructor
+ */
+exports.RGBToHSV = function (red, green, blue) {
+  red = red / 255;green = green / 255;blue = blue / 255;
+  var minRGB = Math.min(red, Math.min(green, blue));
+  var maxRGB = Math.max(red, Math.max(green, blue));
+
+  // Black-gray-white
+  if (minRGB == maxRGB) {
+    return { h: 0, s: 0, v: minRGB };
+  }
+
+  // Colors other than black-gray-white:
+  var d = red == minRGB ? green - blue : blue == minRGB ? red - green : blue - red;
+  var h = red == minRGB ? 3 : blue == minRGB ? 1 : 5;
+  var hue = 60 * (h - d / (maxRGB - minRGB)) / 360;
+  var saturation = (maxRGB - minRGB) / maxRGB;
+  var value = maxRGB;
+  return { h: hue, s: saturation, v: value };
+};
+
+var cssUtil = {
+  // split a string with css styles into an object with key/values
+  split: function split(cssText) {
+    var styles = {};
+
+    cssText.split(';').forEach(function (style) {
+      if (style.trim() != '') {
+        var parts = style.split(':');
+        var key = parts[0].trim();
+        var value = parts[1].trim();
+        styles[key] = value;
+      }
+    });
+
+    return styles;
+  },
+
+  // build a css text string from an object with key/values
+  join: function join(styles) {
+    return (0, _keys2['default'])(styles).map(function (key) {
+      return key + ': ' + styles[key];
+    }).join('; ');
+  }
+};
+
+/**
+ * Append a string with css styles to an element
+ * @param {Element} element
+ * @param {string} cssText
+ */
+exports.addCssText = function (element, cssText) {
+  var currentStyles = cssUtil.split(element.style.cssText);
+  var newStyles = cssUtil.split(cssText);
+  var styles = exports.extend(currentStyles, newStyles);
+
+  element.style.cssText = cssUtil.join(styles);
+};
+
+/**
+ * Remove a string with css styles from an element
+ * @param {Element} element
+ * @param {string} cssText
+ */
+exports.removeCssText = function (element, cssText) {
+  var styles = cssUtil.split(element.style.cssText);
+  var removeStyles = cssUtil.split(cssText);
+
+  for (var key in removeStyles) {
+    if (removeStyles.hasOwnProperty(key)) {
+      delete styles[key];
+    }
+  }
+
+  element.style.cssText = cssUtil.join(styles);
+};
+
+/**
+ * https://gist.github.com/mjijackson/5311256
+ * @param {number} h
+ * @param {number} s
+ * @param {number} v
+ * @returns {{r: number, g: number, b: number}}
+ * @constructor
+ */
+exports.HSVToRGB = function (h, s, v) {
+  var r, g, b;
+
+  var i = Math.floor(h * 6);
+  var f = h * 6 - i;
+  var p = v * (1 - s);
+  var q = v * (1 - f * s);
+  var t = v * (1 - (1 - f) * s);
+
+  switch (i % 6) {
+    case 0:
+      r = v, g = t, b = p;break;
+    case 1:
+      r = q, g = v, b = p;break;
+    case 2:
+      r = p, g = v, b = t;break;
+    case 3:
+      r = p, g = q, b = v;break;
+    case 4:
+      r = t, g = p, b = v;break;
+    case 5:
+      r = v, g = p, b = q;break;
+  }
+
+  return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) };
+};
+
+exports.HSVToHex = function (h, s, v) {
+  var rgb = exports.HSVToRGB(h, s, v);
+  return exports.RGBToHex(rgb.r, rgb.g, rgb.b);
+};
+
+exports.hexToHSV = function (hex) {
+  var rgb = exports.hexToRGB(hex);
+  return exports.RGBToHSV(rgb.r, rgb.g, rgb.b);
+};
+
+exports.isValidHex = function (hex) {
+  var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);
+  return isOk;
+};
+
+exports.isValidRGB = function (rgb) {
+  rgb = rgb.replace(" ", "");
+  var isOk = /rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(rgb);
+  return isOk;
+};
+exports.isValidRGBA = function (rgba) {
+  rgba = rgba.replace(" ", "");
+  var isOk = /rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(rgba);
+  return isOk;
+};
+
+/**
+ * This recursively redirects the prototype of JSON objects to the referenceObject
+ * This is used for default options.
+ *
+ * @param {Array.<string>} fields
+ * @param {Object} referenceObject
+ * @returns {*}
+ */
+exports.selectiveBridgeObject = function (fields, referenceObject) {
+  if (referenceObject !== null && (typeof referenceObject === 'undefined' ? 'undefined' : (0, _typeof3['default'])(referenceObject)) === "object") {
+    // !!! typeof null === 'object'
+    var objectTo = (0, _create2['default'])(referenceObject);
+    for (var i = 0; i < fields.length; i++) {
+      if (referenceObject.hasOwnProperty(fields[i])) {
+        if ((0, _typeof3['default'])(referenceObject[fields[i]]) == "object") {
+          objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]);
+        }
+      }
+    }
+    return objectTo;
+  } else {
+    return null;
+  }
+};
+
+/**
+ * This recursively redirects the prototype of JSON objects to the referenceObject
+ * This is used for default options.
+ *
+ * @param {Object} referenceObject
+ * @returns {*}
+ */
+exports.bridgeObject = function (referenceObject) {
+  if (referenceObject !== null && (typeof referenceObject === 'undefined' ? 'undefined' : (0, _typeof3['default'])(referenceObject)) === "object") {
+    // !!! typeof null === 'object'
+    var objectTo = (0, _create2['default'])(referenceObject);
+    if (referenceObject instanceof Element) {
+      // Avoid bridging DOM objects
+      objectTo = referenceObject;
+    } else {
+      objectTo = (0, _create2['default'])(referenceObject);
+      for (var i in referenceObject) {
+        if (referenceObject.hasOwnProperty(i)) {
+          if ((0, _typeof3['default'])(referenceObject[i]) == "object") {
+            objectTo[i] = exports.bridgeObject(referenceObject[i]);
+          }
+        }
+      }
+    }
+    return objectTo;
+  } else {
+    return null;
+  }
+};
+
+/**
+ * This method provides a stable sort implementation, very fast for presorted data
+ *
+ * @param {Array} a the array
+ * @param {function} compare an order comparator
+ * @returns {Array}
+ */
+exports.insertSort = function (a, compare) {
+  for (var i = 0; i < a.length; i++) {
+    var k = a[i];
+    for (var j = i; j > 0 && compare(k, a[j - 1]) < 0; j--) {
+      a[j] = a[j - 1];
+    }
+    a[j] = k;
+  }
+  return a;
+};
+
+/**
+ * This is used to set the options of subobjects in the options object.
+ *
+ * A requirement of these subobjects is that they have an 'enabled' element
+ * which is optional for the user but mandatory for the program.
+ *
+ * The added value here of the merge is that option 'enabled' is set as required.
+ *
+ *
+ * @param {object} mergeTarget   | either this.options or the options used for the groups.
+ * @param {object} options       | options
+ * @param {string} option        | option key in the options argument
+ * @param {object} globalOptions | global options, passed in to determine value of option 'enabled'
+ */
+exports.mergeOptions = function (mergeTarget, options, option) {
+  var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+
+  // Local helpers
+  var isPresent = function isPresent(obj) {
+    return obj !== null && obj !== undefined;
+  };
+
+  var isObject = function isObject(obj) {
+    return obj !== null && (typeof obj === 'undefined' ? 'undefined' : (0, _typeof3['default'])(obj)) === 'object';
+  };
+
+  // https://stackoverflow.com/a/34491287/1223531
+  var isEmpty = function isEmpty(obj) {
+    for (var x in obj) {
+      if (obj.hasOwnProperty(x)) return false;
+    }
+    return true;
+  };
+
+  // Guards
+  if (!isObject(mergeTarget)) {
+    throw new Error('Parameter mergeTarget must be an object');
+  }
+
+  if (!isObject(options)) {
+    throw new Error('Parameter options must be an object');
+  }
+
+  if (!isPresent(option)) {
+    throw new Error('Parameter option must have a value');
+  }
+
+  if (!isObject(globalOptions)) {
+    throw new Error('Parameter globalOptions must be an object');
+  }
+
+  //
+  // Actual merge routine, separated from main logic
+  // Only a single level of options is merged. Deeper levels are ref'd. This may actually be an issue.
+  //
+  var doMerge = function doMerge(target, options, option) {
+    if (!isObject(target[option])) {
+      target[option] = {};
+    }
+
+    var src = options[option];
+    var dst = target[option];
+    for (var prop in src) {
+      if (src.hasOwnProperty(prop)) {
+        dst[prop] = src[prop];
+      }
+    }
+  };
+
+  // Local initialization
+  var srcOption = options[option];
+  var globalPassed = isObject(globalOptions) && !isEmpty(globalOptions);
+  var globalOption = globalPassed ? globalOptions[option] : undefined;
+  var globalEnabled = globalOption ? globalOption.enabled : undefined;
+
+  /////////////////////////////////////////
+  // Main routine
+  /////////////////////////////////////////
+  if (srcOption === undefined) {
+    return; // Nothing to do
+  }
+
+  if (typeof srcOption === 'boolean') {
+    if (!isObject(mergeTarget[option])) {
+      mergeTarget[option] = {};
+    }
+
+    mergeTarget[option].enabled = srcOption;
+    return;
+  }
+
+  if (srcOption === null && !isObject(mergeTarget[option])) {
+    // If possible, explicit copy from globals
+    if (isPresent(globalOption)) {
+      mergeTarget[option] = (0, _create2['default'])(globalOption);
+    } else {
+      return; // Nothing to do
+    }
+  }
+
+  if (!isObject(srcOption)) {
+    return;
+  }
+
+  //
+  // Ensure that 'enabled' is properly set. It is required internally
+  // Note that the value from options will always overwrite the existing value
+  //
+  var enabled = true; // default value
+
+  if (srcOption.enabled !== undefined) {
+    enabled = srcOption.enabled;
+  } else {
+    // Take from globals, if present
+    if (globalEnabled !== undefined) {
+      enabled = globalOption.enabled;
+    }
+  }
+
+  doMerge(mergeTarget, options, option);
+  mergeTarget[option].enabled = enabled;
+};
+
+/**
+ * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses
+ * this function will then iterate in both directions over this sorted list to find all visible items.
+ *
+ * @param {Item[]} orderedItems       | Items ordered by start
+ * @param {function} comparator       | -1 is lower, 0 is equal, 1 is higher
+ * @param {string} field
+ * @param {string} field2
+ * @returns {number}
+ * @private
+ */
+exports.binarySearchCustom = function (orderedItems, comparator, field, field2) {
+  var maxIterations = 10000;
+  var iteration = 0;
+  var low = 0;
+  var high = orderedItems.length - 1;
+
+  while (low <= high && iteration < maxIterations) {
+    var middle = Math.floor((low + high) / 2);
+
+    var item = orderedItems[middle];
+    var value = field2 === undefined ? item[field] : item[field][field2];
+
+    var searchResult = comparator(value);
+    if (searchResult == 0) {
+      // jihaa, found a visible item!
+      return middle;
+    } else if (searchResult == -1) {
+      // it is too small --> increase low
+      low = middle + 1;
+    } else {
+      // it is too big --> decrease high
+      high = middle - 1;
+    }
+
+    iteration++;
+  }
+
+  return -1;
+};
+
+/**
+ * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of
+ * two values, we return either the one before or the one after, depending on user input
+ * If it is found, we return the index, else -1.
+ *
+ * @param {Array} orderedItems
+ * @param {{start: number, end: number}} target
+ * @param {string} field
+ * @param {string} sidePreference   'before' or 'after'
+ * @param {function} comparator an optional comparator, returning -1,0,1 for <,==,>.
+ * @returns {number}
+ * @private
+ */
+exports.binarySearchValue = function (orderedItems, target, field, sidePreference, comparator) {
+  var maxIterations = 10000;
+  var iteration = 0;
+  var low = 0;
+  var high = orderedItems.length - 1;
+  var prevValue, value, nextValue, middle;
+
+  comparator = comparator != undefined ? comparator : function (a, b) {
+    return a == b ? 0 : a < b ? -1 : 1;
+  };
+
+  while (low <= high && iteration < maxIterations) {
+    // get a new guess
+    middle = Math.floor(0.5 * (high + low));
+    prevValue = orderedItems[Math.max(0, middle - 1)][field];
+    value = orderedItems[middle][field];
+    nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];
+
+    if (comparator(value, target) == 0) {
+      // we found the target
+      return middle;
+    } else if (comparator(prevValue, target) < 0 && comparator(value, target) > 0) {
+      // target is in between of the previous and the current
+      return sidePreference == 'before' ? Math.max(0, middle - 1) : middle;
+    } else if (comparator(value, target) < 0 && comparator(nextValue, target) > 0) {
+      // target is in between of the current and the next
+      return sidePreference == 'before' ? middle : Math.min(orderedItems.length - 1, middle + 1);
+    } else {
+      // didnt find the target, we need to change our boundaries.
+      if (comparator(value, target) < 0) {
+        // it is too small --> increase low
+        low = middle + 1;
+      } else {
+        // it is too big --> decrease high
+        high = middle - 1;
+      }
+    }
+    iteration++;
+  }
+
+  // didnt find anything. Return -1.
+  return -1;
+};
+
+/*
+ * Easing Functions - inspired from http://gizma.com/easing/
+ * only considering the t value for the range [0, 1] => [0, 1]
+ * https://gist.github.com/gre/1650294
+ */
+exports.easingFunctions = {
+  // no easing, no acceleration
+  linear: function linear(t) {
+    return t;
+  },
+  // accelerating from zero velocity
+  easeInQuad: function easeInQuad(t) {
+    return t * t;
+  },
+  // decelerating to zero velocity
+  easeOutQuad: function easeOutQuad(t) {
+    return t * (2 - t);
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuad: function easeInOutQuad(t) {
+    return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
+  },
+  // accelerating from zero velocity
+  easeInCubic: function easeInCubic(t) {
+    return t * t * t;
+  },
+  // decelerating to zero velocity
+  easeOutCubic: function easeOutCubic(t) {
+    return --t * t * t + 1;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutCubic: function easeInOutCubic(t) {
+    return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;
+  },
+  // accelerating from zero velocity
+  easeInQuart: function easeInQuart(t) {
+    return t * t * t * t;
+  },
+  // decelerating to zero velocity
+  easeOutQuart: function easeOutQuart(t) {
+    return 1 - --t * t * t * t;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuart: function easeInOutQuart(t) {
+    return t < .5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;
+  },
+  // accelerating from zero velocity
+  easeInQuint: function easeInQuint(t) {
+    return t * t * t * t * t;
+  },
+  // decelerating to zero velocity
+  easeOutQuint: function easeOutQuint(t) {
+    return 1 + --t * t * t * t * t;
+  },
+  // acceleration until halfway, then deceleration
+  easeInOutQuint: function easeInOutQuint(t) {
+    return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;
+  }
+};
+
+exports.getScrollBarWidth = function () {
+  var inner = document.createElement('p');
+  inner.style.width = "100%";
+  inner.style.height = "200px";
+
+  var outer = document.createElement('div');
+  outer.style.position = "absolute";
+  outer.style.top = "0px";
+  outer.style.left = "0px";
+  outer.style.visibility = "hidden";
+  outer.style.width = "200px";
+  outer.style.height = "150px";
+  outer.style.overflow = "hidden";
+  outer.appendChild(inner);
+
+  document.body.appendChild(outer);
+  var w1 = inner.offsetWidth;
+  outer.style.overflow = 'scroll';
+  var w2 = inner.offsetWidth;
+  if (w1 == w2) w2 = outer.clientWidth;
+
+  document.body.removeChild(outer);
+
+  return w1 - w2;
+};
+
+exports.topMost = function (pile, accessors) {
+  var candidate = void 0;
+  if (!Array.isArray(accessors)) {
+    accessors = [accessors];
+  }
+  var _iteratorNormalCompletion = true;
+  var _didIteratorError = false;
+  var _iteratorError = undefined;
+
+  try {
+    for (var _iterator = (0, _getIterator3['default'])(pile), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+      var member = _step.value;
+
+      if (member) {
+        candidate = member[accessors[0]];
+        for (var i = 1; i < accessors.length; i++) {
+          if (candidate) {
+            candidate = candidate[accessors[i]];
+          } else {
+            continue;
+          }
+        }
+        if (typeof candidate != 'undefined') {
+          break;
+        }
+      }
+    }
+  } catch (err) {
+    _didIteratorError = true;
+    _iteratorError = err;
+  } finally {
+    try {
+      if (!_iteratorNormalCompletion && _iterator['return']) {
+        _iterator['return']();
+      }
+    } finally {
+      if (_didIteratorError) {
+        throw _iteratorError;
+      }
+    }
+  }
+
+  return candidate;
+};
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(194), __esModule: true };
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function (self, call) {
+  if (!self) {
+    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+  }
+
+  return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self;
+};
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _setPrototypeOf = __webpack_require__(196);
+
+var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function (subClass, superClass) {
+  if (typeof superClass !== "function" && superClass !== null) {
+    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass)));
+  }
+
+  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {
+    constructor: {
+      value: subClass,
+      enumerable: false,
+      writable: true,
+      configurable: true
+    }
+  });
+  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;
+};
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _iterator = __webpack_require__(142);
+
+var _iterator2 = _interopRequireDefault(_iterator);
+
+var _symbol = __webpack_require__(144);
+
+var _symbol2 = _interopRequireDefault(_symbol);
+
+var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+} : function (obj) {
+  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+};
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports) {
+
+var core = module.exports = { version: '2.5.1' };
+if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(140), __esModule: true };
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// first check if moment.js is already loaded in the browser window, if so,
+// use this instance. Else, load via commonjs.
+module.exports = typeof window !== 'undefined' && window['moment'] || __webpack_require__(154);
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Setup a mock hammer.js object, for unit testing.
+ *
+ * Inspiration: https://github.com/uber/deck.gl/pull/658
+ *
+ * @returns {{on: noop, off: noop, destroy: noop, emit: noop, get: get}}
+ */
+function hammerMock() {
+  var noop = function noop() {};
+
+  return {
+    on: noop,
+    off: noop,
+    destroy: noop,
+    emit: noop,
+
+    get: function get(m) {
+      //eslint-disable-line no-unused-vars
+      return {
+        set: noop
+      };
+    }
+  };
+}
+
+if (typeof window !== 'undefined') {
+  var propagating = __webpack_require__(175);
+  var Hammer = window['Hammer'] || __webpack_require__(176);
+  module.exports = propagating(Hammer, {
+    preventDefault: 'mouse'
+  });
+} else {
+  module.exports = function () {
+    // hammer.js is only available in a browser, not in node.js. Replacing it with a mock object.
+    return hammerMock();
+  };
+}
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var Queue = __webpack_require__(43);
+
+/**
+ * DataSet
+ * // TODO: add a DataSet constructor DataSet(data, options)
+ *
+ * Usage:
+ *     var dataSet = new DataSet({
+ *         fieldId: '_id',
+ *         type: {
+ *             // ...
+ *         }
+ *     });
+ *
+ *     dataSet.add(item);
+ *     dataSet.add(data);
+ *     dataSet.update(item);
+ *     dataSet.update(data);
+ *     dataSet.remove(id);
+ *     dataSet.remove(ids);
+ *     var data = dataSet.get();
+ *     var data = dataSet.get(id);
+ *     var data = dataSet.get(ids);
+ *     var data = dataSet.get(ids, options, data);
+ *     dataSet.clear();
+ *
+ * A data set can:
+ * - add/remove/update data
+ * - gives triggers upon changes in the data
+ * - can  import/export data in various data formats
+ *
+ * @param {Array} [data]    Optional array with initial data
+ * @param {Object} [options]   Available options:
+ *                             {string} fieldId Field name of the id in the
+ *                                              items, 'id' by default.
+ *                             {Object.<string, string} type
+ *                                              A map with field names as key,
+ *                                              and the field type as value.
+ *                             {Object} queue   Queue changes to the DataSet,
+ *                                              flush them all at once.
+ *                                              Queue options:
+ *                                              - {number} delay  Delay in ms, null by default
+ *                                              - {number} max    Maximum number of entries in the queue, Infinity by default
+ * @constructor DataSet
+ */
+function DataSet(data, options) {
+  // correctly read optional arguments
+  if (data && !Array.isArray(data)) {
+    options = data;
+    data = null;
+  }
+
+  this._options = options || {};
+  this._data = {}; // map with data indexed by id
+  this.length = 0; // number of items in the DataSet
+  this._fieldId = this._options.fieldId || 'id'; // name of the field containing id
+  this._type = {}; // internal field types (NOTE: this can differ from this._options.type)
+
+  // all variants of a Date are internally stored as Date, so we can convert
+  // from everything to everything (also from ISODate to Number for example)
+  if (this._options.type) {
+    var fields = (0, _keys2['default'])(this._options.type);
+    for (var i = 0, len = fields.length; i < len; i++) {
+      var field = fields[i];
+      var value = this._options.type[field];
+      if (value == 'Date' || value == 'ISODate' || value == 'ASPDate') {
+        this._type[field] = 'Date';
+      } else {
+        this._type[field] = value;
+      }
+    }
+  }
+
+  this._subscribers = {}; // event subscribers
+
+  // add initial data when provided
+  if (data) {
+    this.add(data);
+  }
+
+  this.setOptions(options);
+}
+
+/**
+ * @param {Object} options   Available options:
+ *                             {Object} queue   Queue changes to the DataSet,
+ *                                              flush them all at once.
+ *                                              Queue options:
+ *                                              - {number} delay  Delay in ms, null by default
+ *                                              - {number} max    Maximum number of entries in the queue, Infinity by default
+ */
+DataSet.prototype.setOptions = function (options) {
+  if (options && options.queue !== undefined) {
+    if (options.queue === false) {
+      // delete queue if loaded
+      if (this._queue) {
+        this._queue.destroy();
+        delete this._queue;
+      }
+    } else {
+      // create queue and update its options
+      if (!this._queue) {
+        this._queue = Queue.extend(this, {
+          replace: ['add', 'update', 'remove']
+        });
+      }
+
+      if ((0, _typeof3['default'])(options.queue) === 'object') {
+        this._queue.setOptions(options.queue);
+      }
+    }
+  }
+};
+
+/**
+ * Subscribe to an event, add an event listener
+ * @param {string} event        Event name. Available events: 'add', 'update',
+ *                              'remove'
+ * @param {function} callback   Callback method. Called with three parameters:
+ *                                  {string} event
+ *                                  {Object | null} params
+ *                                  {string | number} senderId
+ */
+DataSet.prototype.on = function (event, callback) {
+  var subscribers = this._subscribers[event];
+  if (!subscribers) {
+    subscribers = [];
+    this._subscribers[event] = subscribers;
+  }
+
+  subscribers.push({
+    callback: callback
+  });
+};
+
+/**
+ * Unsubscribe from an event, remove an event listener
+ * @param {string} event
+ * @param {function} callback
+ */
+DataSet.prototype.off = function (event, callback) {
+  var subscribers = this._subscribers[event];
+  if (subscribers) {
+    this._subscribers[event] = subscribers.filter(function (listener) {
+      return listener.callback != callback;
+    });
+  }
+};
+
+/**
+ * Trigger an event
+ * @param {string} event
+ * @param {Object | null} params
+ * @param {string} [senderId]       Optional id of the sender.
+ * @private
+ */
+DataSet.prototype._trigger = function (event, params, senderId) {
+  if (event == '*') {
+    throw new Error('Cannot trigger event *');
+  }
+
+  var subscribers = [];
+  if (event in this._subscribers) {
+    subscribers = subscribers.concat(this._subscribers[event]);
+  }
+  if ('*' in this._subscribers) {
+    subscribers = subscribers.concat(this._subscribers['*']);
+  }
+
+  for (var i = 0, len = subscribers.length; i < len; i++) {
+    var subscriber = subscribers[i];
+    if (subscriber.callback) {
+      subscriber.callback(event, params, senderId || null);
+    }
+  }
+};
+
+/**
+ * Add data.
+ * Adding an item will fail when there already is an item with the same id.
+ * @param {Object | Array} data
+ * @param {string} [senderId] Optional sender id
+ * @return {Array.<string|number>} addedIds      Array with the ids of the added items
+ */
+DataSet.prototype.add = function (data, senderId) {
+  var addedIds = [],
+      id,
+      me = this;
+
+  if (Array.isArray(data)) {
+    // Array
+    for (var i = 0, len = data.length; i < len; i++) {
+      id = me._addItem(data[i]);
+      addedIds.push(id);
+    }
+  } else if (data && (typeof data === 'undefined' ? 'undefined' : (0, _typeof3['default'])(data)) === 'object') {
+    // Single item
+    id = me._addItem(data);
+    addedIds.push(id);
+  } else {
+    throw new Error('Unknown dataType');
+  }
+
+  if (addedIds.length) {
+    this._trigger('add', { items: addedIds }, senderId);
+  }
+
+  return addedIds;
+};
+
+/**
+ * Update existing items. When an item does not exist, it will be created
+ * @param {Object | Array} data
+ * @param {string} [senderId] Optional sender id
+ * @return {Array.<string|number>} updatedIds     The ids of the added or updated items
+ * @throws {Error} Unknown Datatype
+ */
+DataSet.prototype.update = function (data, senderId) {
+  var addedIds = [];
+  var updatedIds = [];
+  var oldData = [];
+  var updatedData = [];
+  var me = this;
+  var fieldId = me._fieldId;
+
+  var addOrUpdate = function addOrUpdate(item) {
+    var id = item[fieldId];
+    if (me._data[id]) {
+      var oldItem = util.extend({}, me._data[id]);
+      // update item
+      id = me._updateItem(item);
+      updatedIds.push(id);
+      updatedData.push(item);
+      oldData.push(oldItem);
+    } else {
+      // add new item
+      id = me._addItem(item);
+      addedIds.push(id);
+    }
+  };
+
+  if (Array.isArray(data)) {
+    // Array
+    for (var i = 0, len = data.length; i < len; i++) {
+      if (data[i] && (0, _typeof3['default'])(data[i]) === 'object') {
+        addOrUpdate(data[i]);
+      } else {
+        console.warn('Ignoring input item, which is not an object at index ' + i);
+      }
+    }
+  } else if (data && (typeof data === 'undefined' ? 'undefined' : (0, _typeof3['default'])(data)) === 'object') {
+    // Single item
+    addOrUpdate(data);
+  } else {
+    throw new Error('Unknown dataType');
+  }
+
+  if (addedIds.length) {
+    this._trigger('add', { items: addedIds }, senderId);
+  }
+  if (updatedIds.length) {
+    var props = { items: updatedIds, oldData: oldData, data: updatedData };
+    // TODO: remove deprecated property 'data' some day
+    //Object.defineProperty(props, 'data', {
+    //  'get': (function() {
+    //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');
+    //    return updatedData;
+    //  }).bind(this)
+    //});
+    this._trigger('update', props, senderId);
+  }
+
+  return addedIds.concat(updatedIds);
+};
+
+/**
+ * Get a data item or multiple items.
+ *
+ * Usage:
+ *
+ *     get()
+ *     get(options: Object)
+ *
+ *     get(id: number | string)
+ *     get(id: number | string, options: Object)
+ *
+ *     get(ids: number[] | string[])
+ *     get(ids: number[] | string[], options: Object)
+ *
+ * Where:
+ *
+ * {number | string} id         The id of an item
+ * {number[] | string{}} ids    An array with ids of items
+ * {Object} options             An Object with options. Available options:
+ * {string} [returnType]        Type of data to be returned.
+ *                              Can be 'Array' (default) or 'Object'.
+ * {Object.<string, string>} [type]
+ * {string[]} [fields]          field names to be returned
+ * {function} [filter]          filter items
+ * {string | function} [order]  Order the items by a field name or custom sort function.
+ * @param {Array} args
+ * @returns {DataSet}
+ * @throws Error
+ */
+DataSet.prototype.get = function (args) {
+  // eslint-disable-line no-unused-vars
+  var me = this;
+
+  // parse the arguments
+  var id, ids, options;
+  var firstType = util.getType(arguments[0]);
+  if (firstType == 'String' || firstType == 'Number') {
+    // get(id [, options])
+    id = arguments[0];
+    options = arguments[1];
+  } else if (firstType == 'Array') {
+    // get(ids [, options])
+    ids = arguments[0];
+    options = arguments[1];
+  } else {
+    // get([, options])
+    options = arguments[0];
+  }
+
+  // determine the return type
+  var returnType;
+  if (options && options.returnType) {
+    var allowedValues = ['Array', 'Object'];
+    returnType = allowedValues.indexOf(options.returnType) == -1 ? 'Array' : options.returnType;
+  } else {
+    returnType = 'Array';
+  }
+
+  // build options
+  var type = options && options.type || this._options.type;
+  var filter = options && options.filter;
+  var items = [],
+      item,
+      itemIds,
+      itemId,
+      i,
+      len;
+
+  // convert items
+  if (id != undefined) {
+    // return a single item
+    item = me._getItem(id, type);
+    if (item && filter && !filter(item)) {
+      item = null;
+    }
+  } else if (ids != undefined) {
+    // return a subset of items
+    for (i = 0, len = ids.length; i < len; i++) {
+      item = me._getItem(ids[i], type);
+      if (!filter || filter(item)) {
+        items.push(item);
+      }
+    }
+  } else {
+    // return all items
+    itemIds = (0, _keys2['default'])(this._data);
+    for (i = 0, len = itemIds.length; i < len; i++) {
+      itemId = itemIds[i];
+      item = me._getItem(itemId, type);
+      if (!filter || filter(item)) {
+        items.push(item);
+      }
+    }
+  }
+
+  // order the results
+  if (options && options.order && id == undefined) {
+    this._sort(items, options.order);
+  }
+
+  // filter fields of the items
+  if (options && options.fields) {
+    var fields = options.fields;
+    if (id != undefined) {
+      item = this._filterFields(item, fields);
+    } else {
+      for (i = 0, len = items.length; i < len; i++) {
+        items[i] = this._filterFields(items[i], fields);
+      }
+    }
+  }
+
+  // return the results
+  if (returnType == 'Object') {
+    var result = {},
+        resultant;
+    for (i = 0, len = items.length; i < len; i++) {
+      resultant = items[i];
+      result[resultant.id] = resultant;
+    }
+    return result;
+  } else {
+    if (id != undefined) {
+      // a single item
+      return item;
+    } else {
+      // just return our array
+      return items;
+    }
+  }
+};
+
+/**
+ * Get ids of all items or from a filtered set of items.
+ * @param {Object} [options]    An Object with options. Available options:
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ * @return {Array.<string|number>} ids
+ */
+DataSet.prototype.getIds = function (options) {
+  var data = this._data,
+      filter = options && options.filter,
+      order = options && options.order,
+      type = options && options.type || this._options.type,
+      itemIds = (0, _keys2['default'])(data),
+      i,
+      len,
+      id,
+      item,
+      items,
+      ids = [];
+
+  if (filter) {
+    // get filtered items
+    if (order) {
+      // create ordered list
+      items = [];
+      for (i = 0, len = itemIds.length; i < len; i++) {
+        id = itemIds[i];
+        item = this._getItem(id, type);
+        if (filter(item)) {
+          items.push(item);
+        }
+      }
+
+      this._sort(items, order);
+
+      for (i = 0, len = items.length; i < len; i++) {
+        ids.push(items[i][this._fieldId]);
+      }
+    } else {
+      // create unordered list
+      for (i = 0, len = itemIds.length; i < len; i++) {
+        id = itemIds[i];
+        item = this._getItem(id, type);
+        if (filter(item)) {
+          ids.push(item[this._fieldId]);
+        }
+      }
+    }
+  } else {
+    // get all items
+    if (order) {
+      // create an ordered list
+      items = [];
+      for (i = 0, len = itemIds.length; i < len; i++) {
+        id = itemIds[i];
+        items.push(data[id]);
+      }
+
+      this._sort(items, order);
+
+      for (i = 0, len = items.length; i < len; i++) {
+        ids.push(items[i][this._fieldId]);
+      }
+    } else {
+      // create unordered list
+      for (i = 0, len = itemIds.length; i < len; i++) {
+        id = itemIds[i];
+        item = data[id];
+        ids.push(item[this._fieldId]);
+      }
+    }
+  }
+
+  return ids;
+};
+
+/**
+ * Returns the DataSet itself. Is overwritten for example by the DataView,
+ * which returns the DataSet it is connected to instead.
+ * @returns {DataSet}
+ */
+DataSet.prototype.getDataSet = function () {
+  return this;
+};
+
+/**
+ * Execute a callback function for every item in the dataset.
+ * @param {function} callback
+ * @param {Object} [options]    Available options:
+ *                              {Object.<string, string>} [type]
+ *                              {string[]} [fields] filter fields
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ */
+DataSet.prototype.forEach = function (callback, options) {
+  var filter = options && options.filter,
+      type = options && options.type || this._options.type,
+      data = this._data,
+      itemIds = (0, _keys2['default'])(data),
+      i,
+      len,
+      item,
+      id;
+
+  if (options && options.order) {
+    // execute forEach on ordered list
+    var items = this.get(options);
+
+    for (i = 0, len = items.length; i < len; i++) {
+      item = items[i];
+      id = item[this._fieldId];
+      callback(item, id);
+    }
+  } else {
+    // unordered
+    for (i = 0, len = itemIds.length; i < len; i++) {
+      id = itemIds[i];
+      item = this._getItem(id, type);
+      if (!filter || filter(item)) {
+        callback(item, id);
+      }
+    }
+  }
+};
+
+/**
+ * Map every item in the dataset.
+ * @param {function} callback
+ * @param {Object} [options]    Available options:
+ *                              {Object.<string, string>} [type]
+ *                              {string[]} [fields] filter fields
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ * @return {Object[]} mappedItems
+ */
+DataSet.prototype.map = function (callback, options) {
+  var filter = options && options.filter,
+      type = options && options.type || this._options.type,
+      mappedItems = [],
+      data = this._data,
+      itemIds = (0, _keys2['default'])(data),
+      i,
+      len,
+      id,
+      item;
+
+  // convert and filter items
+  for (i = 0, len = itemIds.length; i < len; i++) {
+    id = itemIds[i];
+    item = this._getItem(id, type);
+    if (!filter || filter(item)) {
+      mappedItems.push(callback(item, id));
+    }
+  }
+
+  // order items
+  if (options && options.order) {
+    this._sort(mappedItems, options.order);
+  }
+
+  return mappedItems;
+};
+
+/**
+ * Filter the fields of an item
+ * @param {Object | null} item
+ * @param {string[]} fields     Field names
+ * @return {Object | null} filteredItem or null if no item is provided
+ * @private
+ */
+DataSet.prototype._filterFields = function (item, fields) {
+  if (!item) {
+    // item is null
+    return item;
+  }
+
+  var filteredItem = {},
+      itemFields = (0, _keys2['default'])(item),
+      len = itemFields.length,
+      i,
+      field;
+
+  if (Array.isArray(fields)) {
+    for (i = 0; i < len; i++) {
+      field = itemFields[i];
+      if (fields.indexOf(field) != -1) {
+        filteredItem[field] = item[field];
+      }
+    }
+  } else {
+    for (i = 0; i < len; i++) {
+      field = itemFields[i];
+      if (fields.hasOwnProperty(field)) {
+        filteredItem[fields[field]] = item[field];
+      }
+    }
+  }
+
+  return filteredItem;
+};
+
+/**
+ * Sort the provided array with items
+ * @param {Object[]} items
+ * @param {string | function} order      A field name or custom sort function.
+ * @private
+ */
+DataSet.prototype._sort = function (items, order) {
+  if (util.isString(order)) {
+    // order by provided field name
+    var name = order; // field name
+    items.sort(function (a, b) {
+      var av = a[name];
+      var bv = b[name];
+      return av > bv ? 1 : av < bv ? -1 : 0;
+    });
+  } else if (typeof order === 'function') {
+    // order by sort function
+    items.sort(order);
+  }
+  // TODO: extend order by an Object {field:string, direction:string}
+  //       where direction can be 'asc' or 'desc'
+  else {
+      throw new TypeError('Order must be a function or a string');
+    }
+};
+
+/**
+ * Remove an object by pointer or by id
+ * @param {string | number | Object | Array.<string|number>} id Object or id, or an array with
+ *                                              objects or ids to be removed
+ * @param {string} [senderId] Optional sender id
+ * @return {Array.<string|number>} removedIds
+ */
+DataSet.prototype.remove = function (id, senderId) {
+  var removedIds = [],
+      removedItems = [],
+      ids = [],
+      i,
+      len,
+      itemId,
+      item;
+
+  // force everything to be an array for simplicity
+  ids = Array.isArray(id) ? id : [id];
+
+  for (i = 0, len = ids.length; i < len; i++) {
+    item = this._remove(ids[i]);
+    if (item) {
+      itemId = item[this._fieldId];
+      if (itemId != undefined) {
+        removedIds.push(itemId);
+        removedItems.push(item);
+      }
+    }
+  }
+
+  if (removedIds.length) {
+    this._trigger('remove', { items: removedIds, oldData: removedItems }, senderId);
+  }
+
+  return removedIds;
+};
+
+/**
+ * Remove an item by its id
+ * @param {number | string | Object} id   id or item
+ * @returns {number | string | null} id
+ * @private
+ */
+DataSet.prototype._remove = function (id) {
+  var item, ident;
+
+  // confirm the id to use based on the args type
+  if (util.isNumber(id) || util.isString(id)) {
+    ident = id;
+  } else if (id && (typeof id === 'undefined' ? 'undefined' : (0, _typeof3['default'])(id)) === 'object') {
+    ident = id[this._fieldId]; // look for the identifier field using _fieldId
+  }
+
+  // do the remove if the item is found
+  if (ident !== undefined && this._data[ident]) {
+    item = this._data[ident];
+    delete this._data[ident];
+    this.length--;
+    return item;
+  }
+  return null;
+};
+
+/**
+ * Clear the data
+ * @param {string} [senderId] Optional sender id
+ * @return {Array.<string|number>} removedIds    The ids of all removed items
+ */
+DataSet.prototype.clear = function (senderId) {
+  var i, len;
+  var ids = (0, _keys2['default'])(this._data);
+  var items = [];
+
+  for (i = 0, len = ids.length; i < len; i++) {
+    items.push(this._data[ids[i]]);
+  }
+
+  this._data = {};
+  this.length = 0;
+
+  this._trigger('remove', { items: ids, oldData: items }, senderId);
+
+  return ids;
+};
+
+/**
+ * Find the item with maximum value of a specified field
+ * @param {string} field
+ * @return {Object | null} item  Item containing max value, or null if no items
+ */
+DataSet.prototype.max = function (field) {
+  var data = this._data,
+      itemIds = (0, _keys2['default'])(data),
+      max = null,
+      maxField = null,
+      i,
+      len;
+
+  for (i = 0, len = itemIds.length; i < len; i++) {
+    var id = itemIds[i];
+    var item = data[id];
+    var itemField = item[field];
+    if (itemField != null && (!max || itemField > maxField)) {
+      max = item;
+      maxField = itemField;
+    }
+  }
+
+  return max;
+};
+
+/**
+ * Find the item with minimum value of a specified field
+ * @param {string} field
+ * @return {Object | null} item  Item containing max value, or null if no items
+ */
+DataSet.prototype.min = function (field) {
+  var data = this._data,
+      itemIds = (0, _keys2['default'])(data),
+      min = null,
+      minField = null,
+      i,
+      len;
+
+  for (i = 0, len = itemIds.length; i < len; i++) {
+    var id = itemIds[i];
+    var item = data[id];
+    var itemField = item[field];
+    if (itemField != null && (!min || itemField < minField)) {
+      min = item;
+      minField = itemField;
+    }
+  }
+
+  return min;
+};
+
+/**
+ * Find all distinct values of a specified field
+ * @param {string} field
+ * @return {Array} values  Array containing all distinct values. If data items
+ *                         do not contain the specified field are ignored.
+ *                         The returned array is unordered.
+ */
+DataSet.prototype.distinct = function (field) {
+  var data = this._data;
+  var itemIds = (0, _keys2['default'])(data);
+  var values = [];
+  var fieldType = this._options.type && this._options.type[field] || null;
+  var count = 0;
+  var i, j, len;
+
+  for (i = 0, len = itemIds.length; i < len; i++) {
+    var id = itemIds[i];
+    var item = data[id];
+    var value = item[field];
+    var exists = false;
+    for (j = 0; j < count; j++) {
+      if (values[j] == value) {
+        exists = true;
+        break;
+      }
+    }
+    if (!exists && value !== undefined) {
+      values[count] = value;
+      count++;
+    }
+  }
+
+  if (fieldType) {
+    for (i = 0, len = values.length; i < len; i++) {
+      values[i] = util.convert(values[i], fieldType);
+    }
+  }
+
+  return values;
+};
+
+/**
+ * Add a single item. Will fail when an item with the same id already exists.
+ * @param {Object} item
+ * @return {string} id
+ * @private
+ */
+DataSet.prototype._addItem = function (item) {
+  var id = item[this._fieldId];
+
+  if (id != undefined) {
+    // check whether this id is already taken
+    if (this._data[id]) {
+      // item already exists
+      throw new Error('Cannot add item: item with id ' + id + ' already exists');
+    }
+  } else {
+    // generate an id
+    id = util.randomUUID();
+    item[this._fieldId] = id;
+  }
+
+  var d = {},
+      fields = (0, _keys2['default'])(item),
+      i,
+      len;
+  for (i = 0, len = fields.length; i < len; i++) {
+    var field = fields[i];
+    var fieldType = this._type[field]; // type may be undefined
+    d[field] = util.convert(item[field], fieldType);
+  }
+  this._data[id] = d;
+  this.length++;
+
+  return id;
+};
+
+/**
+ * Get an item. Fields can be converted to a specific type
+ * @param {string} id
+ * @param {Object.<string, string>} [types]  field types to convert
+ * @return {Object | null} item
+ * @private
+ */
+DataSet.prototype._getItem = function (id, types) {
+  var field, value, i, len;
+
+  // get the item from the dataset
+  var raw = this._data[id];
+  if (!raw) {
+    return null;
+  }
+
+  // convert the items field types
+  var converted = {},
+      fields = (0, _keys2['default'])(raw);
+
+  if (types) {
+    for (i = 0, len = fields.length; i < len; i++) {
+      field = fields[i];
+      value = raw[field];
+      converted[field] = util.convert(value, types[field]);
+    }
+  } else {
+    // no field types specified, no converting needed
+    for (i = 0, len = fields.length; i < len; i++) {
+      field = fields[i];
+      value = raw[field];
+      converted[field] = value;
+    }
+  }
+
+  if (!converted[this._fieldId]) {
+    converted[this._fieldId] = raw.id;
+  }
+
+  return converted;
+};
+
+/**
+ * Update a single item: merge with existing item.
+ * Will fail when the item has no id, or when there does not exist an item
+ * with the same id.
+ * @param {Object} item
+ * @return {string} id
+ * @private
+ */
+DataSet.prototype._updateItem = function (item) {
+  var id = item[this._fieldId];
+  if (id == undefined) {
+    throw new Error('Cannot update item: item has no id (item: ' + (0, _stringify2['default'])(item) + ')');
+  }
+  var d = this._data[id];
+  if (!d) {
+    // item doesn't exist
+    throw new Error('Cannot update item: no item with id ' + id + ' found');
+  }
+
+  // merge with current item
+  var fields = (0, _keys2['default'])(item);
+  for (var i = 0, len = fields.length; i < len; i++) {
+    var field = fields[i];
+    var fieldType = this._type[field]; // type may be undefined
+    d[field] = util.convert(item[field], fieldType);
+  }
+
+  return id;
+};
+
+module.exports = DataSet;
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+
+/**
+ * DataView
+ *
+ * a dataview offers a filtered view on a dataset or an other dataview.
+ *
+ * @param {DataSet | DataView} data
+ * @param {Object} [options]   Available options: see method get
+ *
+ * @constructor DataView
+ */
+function DataView(data, options) {
+  this._data = null;
+  this._ids = {}; // ids of the items currently in memory (just contains a boolean true)
+  this.length = 0; // number of items in the DataView
+  this._options = options || {};
+  this._fieldId = 'id'; // name of the field containing id
+  this._subscribers = {}; // event subscribers
+
+  var me = this;
+  this.listener = function () {
+    me._onEvent.apply(me, arguments);
+  };
+
+  this.setData(data);
+}
+
+// TODO: implement a function .config() to dynamically update things like configured filter
+// and trigger changes accordingly
+
+/**
+ * Set a data source for the view
+ * @param {DataSet | DataView} data
+ */
+DataView.prototype.setData = function (data) {
+  var ids, id, i, len, items;
+
+  if (this._data) {
+    // unsubscribe from current dataset
+    if (this._data.off) {
+      this._data.off('*', this.listener);
+    }
+
+    // trigger a remove of all items in memory
+    ids = this._data.getIds({ filter: this._options && this._options.filter });
+    items = [];
+
+    for (i = 0, len = ids.length; i < len; i++) {
+      items.push(this._data._data[ids[i]]);
+    }
+
+    this._ids = {};
+    this.length = 0;
+    this._trigger('remove', { items: ids, oldData: items });
+  }
+
+  this._data = data;
+
+  if (this._data) {
+    // update fieldId
+    this._fieldId = this._options.fieldId || this._data && this._data.options && this._data.options.fieldId || 'id';
+
+    // trigger an add of all added items
+    ids = this._data.getIds({ filter: this._options && this._options.filter });
+    for (i = 0, len = ids.length; i < len; i++) {
+      id = ids[i];
+      this._ids[id] = true;
+    }
+    this.length = ids.length;
+    this._trigger('add', { items: ids });
+
+    // subscribe to new dataset
+    if (this._data.on) {
+      this._data.on('*', this.listener);
+    }
+  }
+};
+
+/**
+ * Refresh the DataView. Useful when the DataView has a filter function
+ * containing a variable parameter.
+ */
+DataView.prototype.refresh = function () {
+  var id, i, len;
+  var ids = this._data.getIds({ filter: this._options && this._options.filter }),
+      oldIds = (0, _keys2['default'])(this._ids),
+      newIds = {},
+      addedIds = [],
+      removedIds = [],
+      removedItems = [];
+
+  // check for additions
+  for (i = 0, len = ids.length; i < len; i++) {
+    id = ids[i];
+    newIds[id] = true;
+    if (!this._ids[id]) {
+      addedIds.push(id);
+      this._ids[id] = true;
+    }
+  }
+
+  // check for removals
+  for (i = 0, len = oldIds.length; i < len; i++) {
+    id = oldIds[i];
+    if (!newIds[id]) {
+      removedIds.push(id);
+      removedItems.push(this._data._data[id]);
+      delete this._ids[id];
+    }
+  }
+
+  this.length += addedIds.length - removedIds.length;
+
+  // trigger events
+  if (addedIds.length) {
+    this._trigger('add', { items: addedIds });
+  }
+  if (removedIds.length) {
+    this._trigger('remove', { items: removedIds, oldData: removedItems });
+  }
+};
+
+/**
+ * Get data from the data view
+ *
+ * Usage:
+ *
+ *     get()
+ *     get(options: Object)
+ *     get(options: Object, data: Array | DataTable)
+ *
+ *     get(id: Number)
+ *     get(id: Number, options: Object)
+ *     get(id: Number, options: Object, data: Array | DataTable)
+ *
+ *     get(ids: Number[])
+ *     get(ids: Number[], options: Object)
+ *     get(ids: Number[], options: Object, data: Array | DataTable)
+ *
+ * Where:
+ *
+ * {number | string} id         The id of an item
+ * {number[] | string{}} ids    An array with ids of items
+ * {Object} options             An Object with options. Available options:
+ *                              {string} [type] Type of data to be returned. Can
+ *                                              be 'DataTable' or 'Array' (default)
+ *                              {Object.<string, string>} [convert]
+ *                              {string[]} [fields] field names to be returned
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ * {Array | DataTable} [data]   If provided, items will be appended to this
+ *                              array or table. Required in case of Google
+ *                              DataTable.
+ * @param {Array} args
+ * @return {DataSet|DataView}
+ */
+DataView.prototype.get = function (args) {
+  // eslint-disable-line no-unused-vars
+  var me = this;
+
+  // parse the arguments
+  var ids, options, data;
+  var firstType = util.getType(arguments[0]);
+  if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') {
+    // get(id(s) [, options] [, data])
+    ids = arguments[0]; // can be a single id or an array with ids
+    options = arguments[1];
+    data = arguments[2];
+  } else {
+    // get([, options] [, data])
+    options = arguments[0];
+    data = arguments[1];
+  }
+
+  // extend the options with the default options and provided options
+  var viewOptions = util.extend({}, this._options, options);
+
+  // create a combined filter method when needed
+  if (this._options.filter && options && options.filter) {
+    viewOptions.filter = function (item) {
+      return me._options.filter(item) && options.filter(item);
+    };
+  }
+
+  // build up the call to the linked data set
+  var getArguments = [];
+  if (ids != undefined) {
+    getArguments.push(ids);
+  }
+  getArguments.push(viewOptions);
+  getArguments.push(data);
+
+  return this._data && this._data.get.apply(this._data, getArguments);
+};
+
+/**
+ * Get ids of all items or from a filtered set of items.
+ * @param {Object} [options]    An Object with options. Available options:
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ * @return {Array.<string|number>} ids
+ */
+DataView.prototype.getIds = function (options) {
+  var ids;
+
+  if (this._data) {
+    var defaultFilter = this._options.filter;
+    var filter;
+
+    if (options && options.filter) {
+      if (defaultFilter) {
+        filter = function filter(item) {
+          return defaultFilter(item) && options.filter(item);
+        };
+      } else {
+        filter = options.filter;
+      }
+    } else {
+      filter = defaultFilter;
+    }
+
+    ids = this._data.getIds({
+      filter: filter,
+      order: options && options.order
+    });
+  } else {
+    ids = [];
+  }
+
+  return ids;
+};
+
+/**
+ * Map every item in the dataset.
+ * @param {function} callback
+ * @param {Object} [options]    Available options:
+ *                              {Object.<string, string>} [type]
+ *                              {string[]} [fields] filter fields
+ *                              {function} [filter] filter items
+ *                              {string | function} [order] Order the items by
+ *                                  a field name or custom sort function.
+ * @return {Object[]} mappedItems
+ */
+DataView.prototype.map = function (callback, options) {
+  var mappedItems = [];
+  if (this._data) {
+    var defaultFilter = this._options.filter;
+    var filter;
+
+    if (options && options.filter) {
+      if (defaultFilter) {
+        filter = function filter(item) {
+          return defaultFilter(item) && options.filter(item);
+        };
+      } else {
+        filter = options.filter;
+      }
+    } else {
+      filter = defaultFilter;
+    }
+
+    mappedItems = this._data.map(callback, {
+      filter: filter,
+      order: options && options.order
+    });
+  } else {
+    mappedItems = [];
+  }
+
+  return mappedItems;
+};
+
+/**
+ * Get the DataSet to which this DataView is connected. In case there is a chain
+ * of multiple DataViews, the root DataSet of this chain is returned.
+ * @return {DataSet} dataSet
+ */
+DataView.prototype.getDataSet = function () {
+  var dataSet = this;
+  while (dataSet instanceof DataView) {
+    dataSet = dataSet._data;
+  }
+  return dataSet || null;
+};
+
+/**
+ * Event listener. Will propagate all events from the connected data set to
+ * the subscribers of the DataView, but will filter the items and only trigger
+ * when there are changes in the filtered data set.
+ * @param {string} event
+ * @param {Object | null} params
+ * @param {string} senderId
+ * @private
+ */
+DataView.prototype._onEvent = function (event, params, senderId) {
+  var i, len, id, item;
+  var ids = params && params.items;
+  var addedIds = [],
+      updatedIds = [],
+      removedIds = [],
+      oldItems = [],
+      updatedItems = [],
+      removedItems = [];
+
+  if (ids && this._data) {
+    switch (event) {
+      case 'add':
+        // filter the ids of the added items
+        for (i = 0, len = ids.length; i < len; i++) {
+          id = ids[i];
+          item = this.get(id);
+          if (item) {
+            this._ids[id] = true;
+            addedIds.push(id);
+          }
+        }
+
+        break;
+
+      case 'update':
+        // determine the event from the views viewpoint: an updated
+        // item can be added, updated, or removed from this view.
+        for (i = 0, len = ids.length; i < len; i++) {
+          id = ids[i];
+          item = this.get(id);
+
+          if (item) {
+            if (this._ids[id]) {
+              updatedIds.push(id);
+              updatedItems.push(params.data[i]);
+              oldItems.push(params.oldData[i]);
+            } else {
+              this._ids[id] = true;
+              addedIds.push(id);
+            }
+          } else {
+            if (this._ids[id]) {
+              delete this._ids[id];
+              removedIds.push(id);
+              removedItems.push(params.oldData[i]);
+            } else {
+              // nothing interesting for me :-(
+            }
+          }
+        }
+
+        break;
+
+      case 'remove':
+        // filter the ids of the removed items
+        for (i = 0, len = ids.length; i < len; i++) {
+          id = ids[i];
+          if (this._ids[id]) {
+            delete this._ids[id];
+            removedIds.push(id);
+            removedItems.push(params.oldData[i]);
+          }
+        }
+
+        break;
+    }
+
+    this.length += addedIds.length - removedIds.length;
+
+    if (addedIds.length) {
+      this._trigger('add', { items: addedIds }, senderId);
+    }
+    if (updatedIds.length) {
+      this._trigger('update', { items: updatedIds, oldData: oldItems, data: updatedItems }, senderId);
+    }
+    if (removedIds.length) {
+      this._trigger('remove', { items: removedIds, oldData: removedItems }, senderId);
+    }
+  }
+};
+
+// copy subscription functionality from DataSet
+DataView.prototype.on = DataSet.prototype.on;
+DataView.prototype.off = DataSet.prototype.off;
+DataView.prototype._trigger = DataSet.prototype._trigger;
+
+// TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5)
+DataView.prototype.subscribe = DataView.prototype.on;
+DataView.prototype.unsubscribe = DataView.prototype.off;
+
+module.exports = DataView;
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var store = __webpack_require__(57)('wks');
+var uid = __webpack_require__(40);
+var Symbol = __webpack_require__(18).Symbol;
+var USE_SYMBOL = typeof Symbol == 'function';
+
+var $exports = module.exports = function (name) {
+  return store[name] || (store[name] =
+    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+};
+
+$exports.store = store;
+
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// DOM utility methods
+
+/**
+ * this prepares the JSON container for allocating SVG elements
+ * @param {Object} JSONcontainer
+ * @private
+ */
+exports.prepareElements = function (JSONcontainer) {
+  // cleanup the redundant svgElements;
+  for (var elementType in JSONcontainer) {
+    if (JSONcontainer.hasOwnProperty(elementType)) {
+      JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;
+      JSONcontainer[elementType].used = [];
+    }
+  }
+};
+
+/**
+ * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from
+ * which to remove the redundant elements.
+ *
+ * @param {Object} JSONcontainer
+ * @private
+ */
+exports.cleanupElements = function (JSONcontainer) {
+  // cleanup the redundant svgElements;
+  for (var elementType in JSONcontainer) {
+    if (JSONcontainer.hasOwnProperty(elementType)) {
+      if (JSONcontainer[elementType].redundant) {
+        for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) {
+          JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]);
+        }
+        JSONcontainer[elementType].redundant = [];
+      }
+    }
+  }
+};
+
+/**
+ * Ensures that all elements are removed first up so they can be recreated cleanly
+ * @param {Object} JSONcontainer
+ */
+exports.resetElements = function (JSONcontainer) {
+  exports.prepareElements(JSONcontainer);
+  exports.cleanupElements(JSONcontainer);
+  exports.prepareElements(JSONcontainer);
+};
+
+/**
+ * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer
+ * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.
+ *
+ * @param {string} elementType
+ * @param {Object} JSONcontainer
+ * @param {Object} svgContainer
+ * @returns {Element}
+ * @private
+ */
+exports.getSVGElement = function (elementType, JSONcontainer, svgContainer) {
+  var element;
+  // allocate SVG element, if it doesnt yet exist, create one.
+  if (JSONcontainer.hasOwnProperty(elementType)) {
+    // this element has been created before
+    // check if there is an redundant element
+    if (JSONcontainer[elementType].redundant.length > 0) {
+      element = JSONcontainer[elementType].redundant[0];
+      JSONcontainer[elementType].redundant.shift();
+    } else {
+      // create a new element and add it to the SVG
+      element = document.createElementNS('http://www.w3.org/2000/svg', elementType);
+      svgContainer.appendChild(element);
+    }
+  } else {
+    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.
+    element = document.createElementNS('http://www.w3.org/2000/svg', elementType);
+    JSONcontainer[elementType] = { used: [], redundant: [] };
+    svgContainer.appendChild(element);
+  }
+  JSONcontainer[elementType].used.push(element);
+  return element;
+};
+
+/**
+ * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer
+ * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.
+ *
+ * @param {string} elementType
+ * @param {Object} JSONcontainer
+ * @param {Element} DOMContainer
+ * @param {Element} insertBefore
+ * @returns {*}
+ */
+exports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) {
+  var element;
+  // allocate DOM element, if it doesnt yet exist, create one.
+  if (JSONcontainer.hasOwnProperty(elementType)) {
+    // this element has been created before
+    // check if there is an redundant element
+    if (JSONcontainer[elementType].redundant.length > 0) {
+      element = JSONcontainer[elementType].redundant[0];
+      JSONcontainer[elementType].redundant.shift();
+    } else {
+      // create a new element and add it to the SVG
+      element = document.createElement(elementType);
+      if (insertBefore !== undefined) {
+        DOMContainer.insertBefore(element, insertBefore);
+      } else {
+        DOMContainer.appendChild(element);
+      }
+    }
+  } else {
+    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.
+    element = document.createElement(elementType);
+    JSONcontainer[elementType] = { used: [], redundant: [] };
+    if (insertBefore !== undefined) {
+      DOMContainer.insertBefore(element, insertBefore);
+    } else {
+      DOMContainer.appendChild(element);
+    }
+  }
+  JSONcontainer[elementType].used.push(element);
+  return element;
+};
+
+/**
+ * Draw a point object. This is a separate function because it can also be called by the legend.
+ * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions
+ * as well.
+ *
+ * @param {number} x
+ * @param {number} y
+ * @param {Object} groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }
+ * @param {Object} JSONcontainer
+ * @param {Object} svgContainer
+ * @param {Object} labelObj
+ * @returns {vis.PointItem}
+ */
+exports.drawPoint = function (x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) {
+  var point;
+  if (groupTemplate.style == 'circle') {
+    point = exports.getSVGElement('circle', JSONcontainer, svgContainer);
+    point.setAttributeNS(null, "cx", x);
+    point.setAttributeNS(null, "cy", y);
+    point.setAttributeNS(null, "r", 0.5 * groupTemplate.size);
+  } else {
+    point = exports.getSVGElement('rect', JSONcontainer, svgContainer);
+    point.setAttributeNS(null, "x", x - 0.5 * groupTemplate.size);
+    point.setAttributeNS(null, "y", y - 0.5 * groupTemplate.size);
+    point.setAttributeNS(null, "width", groupTemplate.size);
+    point.setAttributeNS(null, "height", groupTemplate.size);
+  }
+
+  if (groupTemplate.styles !== undefined) {
+    point.setAttributeNS(null, "style", groupTemplate.styles);
+  }
+  point.setAttributeNS(null, "class", groupTemplate.className + " vis-point");
+  //handle label
+
+
+  if (labelObj) {
+    var label = exports.getSVGElement('text', JSONcontainer, svgContainer);
+    if (labelObj.xOffset) {
+      x = x + labelObj.xOffset;
+    }
+
+    if (labelObj.yOffset) {
+      y = y + labelObj.yOffset;
+    }
+    if (labelObj.content) {
+      label.textContent = labelObj.content;
+    }
+
+    if (labelObj.className) {
+      label.setAttributeNS(null, "class", labelObj.className + " vis-label");
+    }
+    label.setAttributeNS(null, "x", x);
+    label.setAttributeNS(null, "y", y);
+  }
+
+  return point;
+};
+
+/**
+ * draw a bar SVG element centered on the X coordinate
+ *
+ * @param {number} x
+ * @param {number} y
+ * @param {number} width
+ * @param {number} height
+ * @param {string} className
+ * @param {Object} JSONcontainer
+ * @param {Object} svgContainer
+ * @param {string} style
+ */
+exports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer, style) {
+  if (height != 0) {
+    if (height < 0) {
+      height *= -1;
+      y -= height;
+    }
+    var rect = exports.getSVGElement('rect', JSONcontainer, svgContainer);
+    rect.setAttributeNS(null, "x", x - 0.5 * width);
+    rect.setAttributeNS(null, "y", y);
+    rect.setAttributeNS(null, "width", width);
+    rect.setAttributeNS(null, "height", height);
+    rect.setAttributeNS(null, "class", className);
+    if (style) {
+      rect.setAttributeNS(null, "style", style);
+    }
+  }
+};
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.printStyle = undefined;
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+
+var errorFound = false;
+var allOptions = void 0;
+var printStyle = 'background: #FFeeee; color: #dd0000';
+/**
+ *  Used to validate options.
+ */
+
+var Validator = function () {
+  /**
+   * @ignore
+   */
+  function Validator() {
+    (0, _classCallCheck3['default'])(this, Validator);
+  }
+
+  /**
+   * Main function to be called
+   * @param {Object} options
+   * @param {Object} referenceOptions
+   * @param {Object} subObject
+   * @returns {boolean}
+   * @static
+   */
+
+
+  (0, _createClass3['default'])(Validator, null, [{
+    key: 'validate',
+    value: function validate(options, referenceOptions, subObject) {
+      errorFound = false;
+      allOptions = referenceOptions;
+      var usedOptions = referenceOptions;
+      if (subObject !== undefined) {
+        usedOptions = referenceOptions[subObject];
+      }
+      Validator.parse(options, usedOptions, []);
+      return errorFound;
+    }
+
+    /**
+     * Will traverse an object recursively and check every value
+     * @param {Object} options
+     * @param {Object} referenceOptions
+     * @param {array} path    | where to look for the actual option
+     * @static
+     */
+
+  }, {
+    key: 'parse',
+    value: function parse(options, referenceOptions, path) {
+      for (var option in options) {
+        if (options.hasOwnProperty(option)) {
+          Validator.check(option, options, referenceOptions, path);
+        }
+      }
+    }
+
+    /**
+     * Check every value. If the value is an object, call the parse function on that object.
+     * @param {string} option
+     * @param {Object} options
+     * @param {Object} referenceOptions
+     * @param {array} path    | where to look for the actual option
+     * @static
+     */
+
+  }, {
+    key: 'check',
+    value: function check(option, options, referenceOptions, path) {
+      if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) {
+        Validator.getSuggestion(option, referenceOptions, path);
+        return;
+      }
+
+      var referenceOption = option;
+      var is_object = true;
+
+      if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) {
+        // NOTE: This only triggers if the __any__ is in the top level of the options object.
+        //       THAT'S A REALLY BAD PLACE TO ALLOW IT!!!!
+        // TODO: Examine if needed, remove if possible
+
+        // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.
+        referenceOption = '__any__';
+
+        // if the any-subgroup is not a predefined object in the configurator,
+        // we do not look deeper into the object.
+        is_object = Validator.getType(options[option]) === 'object';
+      } else {
+        // Since all options in the reference are objects, we can check whether 
+        // they are supposed to be the object to look for the __type__ field.
+        // if this is an object, we check if the correct type has been supplied to account for shorthand options.
+      }
+
+      var refOptionObj = referenceOptions[referenceOption];
+      if (is_object && refOptionObj.__type__ !== undefined) {
+        refOptionObj = refOptionObj.__type__;
+      }
+
+      Validator.checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path);
+    }
+
+    /**
+     *
+     * @param {string}  option           | the option property
+     * @param {Object}  options          | The supplied options object
+     * @param {Object}  referenceOptions | The reference options containing all options and their allowed formats
+     * @param {string}  referenceOption  | Usually this is the same as option, except when handling an __any__ tag.
+     * @param {string}  refOptionObj     | This is the type object from the reference options
+     * @param {Array}   path             | where in the object is the option
+     * @static
+     */
+
+  }, {
+    key: 'checkFields',
+    value: function checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) {
+      var log = function log(message) {
+        console.log('%c' + message + Validator.printLocation(path, option), printStyle);
+      };
+
+      var optionType = Validator.getType(options[option]);
+      var refOptionType = refOptionObj[optionType];
+
+      if (refOptionType !== undefined) {
+        // if the type is correct, we check if it is supposed to be one of a few select values
+        if (Validator.getType(refOptionType) === 'array' && refOptionType.indexOf(options[option]) === -1) {
+          log('Invalid option detected in "' + option + '".' + ' Allowed values are:' + Validator.print(refOptionType) + ' not "' + options[option] + '". ');
+          errorFound = true;
+        } else if (optionType === 'object' && referenceOption !== "__any__") {
+          path = util.copyAndExtendArray(path, option);
+          Validator.parse(options[option], referenceOptions[referenceOption], path);
+        }
+      } else if (refOptionObj['any'] === undefined) {
+        // type of the field is incorrect and the field cannot be any
+        log('Invalid type received for "' + option + '". Expected: ' + Validator.print((0, _keys2['default'])(refOptionObj)) + '. Received [' + optionType + '] "' + options[option] + '"');
+        errorFound = true;
+      }
+    }
+
+    /**
+     *
+     * @param {Object|boolean|number|string|Array.<number>|Date|Node|Moment|undefined|null} object
+     * @returns {string}
+     * @static
+     */
+
+  }, {
+    key: 'getType',
+    value: function getType(object) {
+      var type = typeof object === 'undefined' ? 'undefined' : (0, _typeof3['default'])(object);
+
+      if (type === 'object') {
+        if (object === null) {
+          return 'null';
+        }
+        if (object instanceof Boolean) {
+          return 'boolean';
+        }
+        if (object instanceof Number) {
+          return 'number';
+        }
+        if (object instanceof String) {
+          return 'string';
+        }
+        if (Array.isArray(object)) {
+          return 'array';
+        }
+        if (object instanceof Date) {
+          return 'date';
+        }
+        if (object.nodeType !== undefined) {
+          return 'dom';
+        }
+        if (object._isAMomentObject === true) {
+          return 'moment';
+        }
+        return 'object';
+      } else if (type === 'number') {
+        return 'number';
+      } else if (type === 'boolean') {
+        return 'boolean';
+      } else if (type === 'string') {
+        return 'string';
+      } else if (type === undefined) {
+        return 'undefined';
+      }
+      return type;
+    }
+
+    /**
+     * @param {string} option
+     * @param {Object} options
+     * @param {Array.<string>} path
+     * @static
+     */
+
+  }, {
+    key: 'getSuggestion',
+    value: function getSuggestion(option, options, path) {
+      var localSearch = Validator.findInOptions(option, options, path, false);
+      var globalSearch = Validator.findInOptions(option, allOptions, [], true);
+
+      var localSearchThreshold = 8;
+      var globalSearchThreshold = 4;
+
+      var msg = void 0;
+      if (localSearch.indexMatch !== undefined) {
+        msg = ' in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was incomplete? Did you mean: "' + localSearch.indexMatch + '"?\n\n';
+      } else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) {
+        msg = ' in ' + Validator.printLocation(localSearch.path, option, '') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch, '');
+      } else if (localSearch.distance <= localSearchThreshold) {
+        msg = '. Did you mean "' + localSearch.closestMatch + '"?' + Validator.printLocation(localSearch.path, option);
+      } else {
+        msg = '. Did you mean one of these: ' + Validator.print((0, _keys2['default'])(options)) + Validator.printLocation(path, option);
+      }
+
+      console.log('%cUnknown option detected: "' + option + '"' + msg, printStyle);
+      errorFound = true;
+    }
+
+    /**
+     * traverse the options in search for a match.
+     * @param {string} option
+     * @param {Object} options
+     * @param {Array} path    | where to look for the actual option
+     * @param {boolean} [recursive=false]
+     * @returns {{closestMatch: string, path: Array, distance: number}}
+     * @static
+     */
+
+  }, {
+    key: 'findInOptions',
+    value: function findInOptions(option, options, path) {
+      var recursive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+
+      var min = 1e9;
+      var closestMatch = '';
+      var closestMatchPath = [];
+      var lowerCaseOption = option.toLowerCase();
+      var indexMatch = undefined;
+      for (var op in options) {
+        // eslint-disable-line guard-for-in
+        var distance = void 0;
+        if (options[op].__type__ !== undefined && recursive === true) {
+          var result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path, op));
+          if (min > result.distance) {
+            closestMatch = result.closestMatch;
+            closestMatchPath = result.path;
+            min = result.distance;
+            indexMatch = result.indexMatch;
+          }
+        } else {
+          if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {
+            indexMatch = op;
+          }
+          distance = Validator.levenshteinDistance(option, op);
+          if (min > distance) {
+            closestMatch = op;
+            closestMatchPath = util.copyArray(path);
+            min = distance;
+          }
+        }
+      }
+      return { closestMatch: closestMatch, path: closestMatchPath, distance: min, indexMatch: indexMatch };
+    }
+
+    /**
+     * @param {Array.<string>} path
+     * @param {Object} option
+     * @param {string} prefix
+     * @returns {String}
+     * @static
+     */
+
+  }, {
+    key: 'printLocation',
+    value: function printLocation(path, option) {
+      var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'Problem value found at: \n';
+
+      var str = '\n\n' + prefix + 'options = {\n';
+      for (var i = 0; i < path.length; i++) {
+        for (var j = 0; j < i + 1; j++) {
+          str += '  ';
+        }
+        str += path[i] + ': {\n';
+      }
+      for (var _j = 0; _j < path.length + 1; _j++) {
+        str += '  ';
+      }
+      str += option + '\n';
+      for (var _i = 0; _i < path.length + 1; _i++) {
+        for (var _j2 = 0; _j2 < path.length - _i; _j2++) {
+          str += '  ';
+        }
+        str += '}\n';
+      }
+      return str + '\n\n';
+    }
+
+    /**
+     * @param {Object} options
+     * @returns {String}
+     * @static
+     */
+
+  }, {
+    key: 'print',
+    value: function print(options) {
+      return (0, _stringify2['default'])(options).replace(/(\")|(\[)|(\])|(,"__type__")/g, "").replace(/(\,)/g, ', ');
+    }
+
+    /**
+     *  Compute the edit distance between the two given strings
+     * http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript
+     *
+     * Copyright (c) 2011 Andrei Mackenzie
+     *
+     * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+     *
+     * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+     *
+     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+     *
+     * @param {string} a
+     * @param {string} b
+     * @returns {Array.<Array.<number>>}}
+     * @static
+     */
+
+  }, {
+    key: 'levenshteinDistance',
+    value: function levenshteinDistance(a, b) {
+      if (a.length === 0) return b.length;
+      if (b.length === 0) return a.length;
+
+      var matrix = [];
+
+      // increment along the first column of each row
+      var i;
+      for (i = 0; i <= b.length; i++) {
+        matrix[i] = [i];
+      }
+
+      // increment each column in the first row
+      var j;
+      for (j = 0; j <= a.length; j++) {
+        matrix[0][j] = j;
+      }
+
+      // Fill in the rest of the matrix
+      for (i = 1; i <= b.length; i++) {
+        for (j = 1; j <= a.length; j++) {
+          if (b.charAt(i - 1) == a.charAt(j - 1)) {
+            matrix[i][j] = matrix[i - 1][j - 1];
+          } else {
+            matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
+            Math.min(matrix[i][j - 1] + 1, // insertion
+            matrix[i - 1][j] + 1)); // deletion
+          }
+        }
+      }
+
+      return matrix[b.length][a.length];
+    }
+  }]);
+  return Validator;
+}();
+
+exports['default'] = Validator;
+exports.printStyle = printStyle;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var util = __webpack_require__(2);
+
+/**
+ * Prototype for visual components
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body]
+ * @param {Object} [options]
+ */
+function Component(body, options) {
+  // eslint-disable-line no-unused-vars
+  this.options = null;
+  this.props = null;
+}
+
+/**
+ * Set options for the component. The new options will be merged into the
+ * current options.
+ * @param {Object} options
+ */
+Component.prototype.setOptions = function (options) {
+  if (options) {
+    util.extend(this.options, options);
+  }
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+Component.prototype.redraw = function () {
+  // should be implemented by the component
+  return false;
+};
+
+/**
+ * Destroy the component. Cleanup DOM and event listeners
+ */
+Component.prototype.destroy = function () {
+  // should be implemented by the component
+};
+
+/**
+ * Test whether the component is resized since the last time _isResized() was
+ * called.
+ * @return {Boolean} Returns true if the component is resized
+ * @protected
+ */
+Component.prototype._isResized = function () {
+  var resized = this.props._previousWidth !== this.props.width || this.props._previousHeight !== this.props.height;
+
+  this.props._previousWidth = this.props.width;
+  this.props._previousHeight = this.props.height;
+
+  return resized;
+};
+
+module.exports = Component;
+
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(18);
+var core = __webpack_require__(7);
+var ctx = __webpack_require__(80);
+var hide = __webpack_require__(26);
+var PROTOTYPE = 'prototype';
+
+var $export = function (type, name, source) {
+  var IS_FORCED = type & $export.F;
+  var IS_GLOBAL = type & $export.G;
+  var IS_STATIC = type & $export.S;
+  var IS_PROTO = type & $export.P;
+  var IS_BIND = type & $export.B;
+  var IS_WRAP = type & $export.W;
+  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
+  var expProto = exports[PROTOTYPE];
+  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
+  var key, own, out;
+  if (IS_GLOBAL) source = name;
+  for (key in source) {
+    // contains in native
+    own = !IS_FORCED && target && target[key] !== undefined;
+    if (own && key in exports) continue;
+    // export native or passed
+    out = own ? target[key] : source[key];
+    // prevent global pollution for namespaces
+    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+    // bind timers to global for call from export context
+    : IS_BIND && own ? ctx(out, global)
+    // wrap global constructors for prevent change them in library
+    : IS_WRAP && target[key] == out ? (function (C) {
+      var F = function (a, b, c) {
+        if (this instanceof C) {
+          switch (arguments.length) {
+            case 0: return new C();
+            case 1: return new C(a);
+            case 2: return new C(a, b);
+          } return new C(a, b, c);
+        } return C.apply(this, arguments);
+      };
+      F[PROTOTYPE] = C[PROTOTYPE];
+      return F;
+    // make static versions for prototype methods
+    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+    if (IS_PROTO) {
+      (exports.virtual || (exports.virtual = {}))[key] = out;
+      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+      if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
+    }
+  }
+};
+// type bitmap
+$export.F = 1;   // forced
+$export.G = 2;   // global
+$export.S = 4;   // static
+$export.P = 8;   // proto
+$export.B = 16;  // bind
+$export.W = 32;  // wrap
+$export.U = 64;  // safe
+$export.R = 128; // real proto method for `library`
+module.exports = $export;
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports) {
+
+// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+var global = module.exports = typeof window != 'undefined' && window.Math == Math
+  ? window : typeof self != 'undefined' && self.Math == Math ? self
+  // eslint-disable-next-line no-new-func
+  : Function('return this')();
+if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(160), __esModule: true };
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(27);
+var IE8_DOM_DEFINE = __webpack_require__(81);
+var toPrimitive = __webpack_require__(53);
+var dP = Object.defineProperty;
+
+exports.f = __webpack_require__(21) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+  anObject(O);
+  P = toPrimitive(P, true);
+  anObject(Attributes);
+  if (IE8_DOM_DEFINE) try {
+    return dP(O, P, Attributes);
+  } catch (e) { /* empty */ }
+  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
+  if ('value' in Attributes) O[P] = Attributes.value;
+  return O;
+};
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Thank's IE8 for his funny defineProperty
+module.exports = !__webpack_require__(28)(function () {
+  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports) {
+
+var hasOwnProperty = {}.hasOwnProperty;
+module.exports = function (it, key) {
+  return hasOwnProperty.call(it, key);
+};
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * The Base class for all Nodes.
+ */
+var NodeBase = function () {
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function NodeBase(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, NodeBase);
+
+    this.body = body;
+    this.labelModule = labelModule;
+    this.setOptions(options);
+    this.top = undefined;
+    this.left = undefined;
+    this.height = undefined;
+    this.width = undefined;
+    this.radius = undefined;
+    this.margin = undefined;
+    this.refreshNeeded = true;
+    this.boundingBox = { top: 0, left: 0, right: 0, bottom: 0 };
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3['default'])(NodeBase, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     *
+     * @param {Label} labelModule
+     * @private
+     */
+
+  }, {
+    key: '_setMargins',
+    value: function _setMargins(labelModule) {
+      this.margin = {};
+      if (this.options.margin) {
+        if ((0, _typeof3['default'])(this.options.margin) == 'object') {
+          this.margin.top = this.options.margin.top;
+          this.margin.right = this.options.margin.right;
+          this.margin.bottom = this.options.margin.bottom;
+          this.margin.left = this.options.margin.left;
+        } else {
+          this.margin.top = this.options.margin;
+          this.margin.right = this.options.margin;
+          this.margin.bottom = this.options.margin;
+          this.margin.left = this.options.margin;
+        }
+      }
+      labelModule.adjustSizes(this.margin);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_distanceToBorder',
+    value: function _distanceToBorder(ctx, angle) {
+      var borderWidth = this.options.borderWidth;
+      this.resize(ctx);
+      return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth;
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'enableShadow',
+    value: function enableShadow(ctx, values) {
+      if (values.shadow) {
+        ctx.shadowColor = values.shadowColor;
+        ctx.shadowBlur = values.shadowSize;
+        ctx.shadowOffsetX = values.shadowX;
+        ctx.shadowOffsetY = values.shadowY;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'disableShadow',
+    value: function disableShadow(ctx, values) {
+      if (values.shadow) {
+        ctx.shadowColor = 'rgba(0,0,0,0)';
+        ctx.shadowBlur = 0;
+        ctx.shadowOffsetX = 0;
+        ctx.shadowOffsetY = 0;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'enableBorderDashes',
+    value: function enableBorderDashes(ctx, values) {
+      if (values.borderDashes !== false) {
+        if (ctx.setLineDash !== undefined) {
+          var dashes = values.borderDashes;
+          if (dashes === true) {
+            dashes = [5, 15];
+          }
+          ctx.setLineDash(dashes);
+        } else {
+          console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used.");
+          this.options.shapeProperties.borderDashes = false;
+          values.borderDashes = false;
+        }
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'disableBorderDashes',
+    value: function disableBorderDashes(ctx, values) {
+      if (values.borderDashes !== false) {
+        if (ctx.setLineDash !== undefined) {
+          ctx.setLineDash([0]);
+        } else {
+          console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used.");
+          this.options.shapeProperties.borderDashes = false;
+          values.borderDashes = false;
+        }
+      }
+    }
+
+    /**
+     * Determine if the shape of a node needs to be recalculated.
+     *
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @returns {boolean}
+     * @protected
+     */
+
+  }, {
+    key: 'needsRefresh',
+    value: function needsRefresh(selected, hover) {
+      if (this.refreshNeeded === true) {
+        // This is probably not the best location to reset this member.
+        // However, in the current logic, it is the most convenient one.
+        this.refreshNeeded = false;
+        return true;
+      }
+
+      return this.width === undefined || this.labelModule.differentState(selected, hover);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'initContextForDraw',
+    value: function initContextForDraw(ctx, values) {
+      var borderWidth = values.borderWidth / this.body.view.scale;
+
+      ctx.lineWidth = Math.min(this.width, borderWidth);
+      ctx.strokeStyle = values.borderColor;
+      ctx.fillStyle = values.color;
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'performStroke',
+    value: function performStroke(ctx, values) {
+      var borderWidth = values.borderWidth / this.body.view.scale;
+
+      //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.
+      ctx.save();
+      // if borders are zero width, they will be drawn with width 1 by default. This prevents that
+      if (borderWidth > 0) {
+        this.enableBorderDashes(ctx, values);
+        //draw the border
+        ctx.stroke();
+        //disable dashed border for other elements
+        this.disableBorderDashes(ctx, values);
+      }
+      ctx.restore();
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'performFill',
+    value: function performFill(ctx, values) {
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+      // draw the background
+      ctx.fill();
+      // disable shadows for other elements.
+      this.disableShadow(ctx, values);
+
+      this.performStroke(ctx, values);
+    }
+
+    /**
+     *
+     * @param {number} margin
+     * @private
+     */
+
+  }, {
+    key: '_addBoundingBoxMargin',
+    value: function _addBoundingBoxMargin(margin) {
+      this.boundingBox.left -= margin;
+      this.boundingBox.top -= margin;
+      this.boundingBox.bottom += margin;
+      this.boundingBox.right += margin;
+    }
+
+    /**
+     * Actual implementation of this method call.
+     *
+     * Doing it like this makes it easier to override
+     * in the child classes.
+     *
+     * @param {number} x width
+     * @param {number} y height
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @private
+     */
+
+  }, {
+    key: '_updateBoundingBox',
+    value: function _updateBoundingBox(x, y, ctx, selected, hover) {
+      if (ctx !== undefined) {
+        this.resize(ctx, selected, hover);
+      }
+
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      this.boundingBox.left = this.left;
+      this.boundingBox.top = this.top;
+      this.boundingBox.bottom = this.top + this.height;
+      this.boundingBox.right = this.left + this.width;
+    }
+
+    /**
+     * Default implementation of this method call.
+     * This acts as a stub which can be overridden.
+     *
+     * @param {number} x width
+     * @param {number} y height
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y, ctx, selected, hover) {
+      this._updateBoundingBox(x, y, ctx, selected, hover);
+    }
+
+    /**
+     * Determine the dimensions to use for nodes with an internal label
+     *
+     * Currently, these are: Circle, Ellipse, Database, Box
+     * The other nodes have external labels, and will not call this method
+     *
+     * If there is no label, decent default values are supplied.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} [selected]
+     * @param {boolean} [hover]
+     * @returns {{width:number, height:number}}
+     */
+
+  }, {
+    key: 'getDimensionsFromLabel',
+    value: function getDimensionsFromLabel(ctx, selected, hover) {
+      // NOTE: previously 'textSize' was not put in 'this' for Ellipse
+      // TODO: examine the consequences.
+      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);
+      var width = this.textSize.width;
+      var height = this.textSize.height;
+
+      var DEFAULT_SIZE = 14;
+      if (width === 0) {
+        // This happens when there is no label text set
+        width = DEFAULT_SIZE; // use a decent default
+        height = DEFAULT_SIZE; // if width zero, then height also always zero
+      }
+
+      return { width: width, height: height };
+    }
+  }]);
+  return NodeBase;
+}();
+
+exports['default'] = NodeBase;
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Base class for constructing Node/Cluster Shapes.
+ *
+ * @extends NodeBase
+ */
+var ShapeBase = function (_NodeBase) {
+  (0, _inherits3['default'])(ShapeBase, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function ShapeBase(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, ShapeBase);
+    return (0, _possibleConstructorReturn3['default'])(this, (ShapeBase.__proto__ || (0, _getPrototypeOf2['default'])(ShapeBase)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   * @param {Object} [values={size: this.options.size}]
+   */
+
+
+  (0, _createClass3['default'])(ShapeBase, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+      var values = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { size: this.options.size };
+
+      if (this.needsRefresh(selected, hover)) {
+        this.labelModule.getTextSize(ctx, selected, hover);
+        var size = 2 * values.size;
+        this.width = size;
+        this.height = size;
+        this.radius = 0.5 * this.width;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {string} shape
+     * @param {number} sizeMultiplier - Unused! TODO: Remove next major release
+     * @param {number} x
+     * @param {number} y
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @private
+     */
+
+  }, {
+    key: '_drawShape',
+    value: function _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover, values);
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      this.initContextForDraw(ctx, values);
+      ctx[shape](x, y, values.size);
+      this.performFill(ctx, values);
+
+      if (this.options.label !== undefined) {
+        // Need to call following here in order to ensure value for `this.labelModule.size.height`
+        this.labelModule.calculateLabelSize(ctx, selected, hover, x, y, 'hanging');
+        var yLabel = y + 0.5 * this.height + 0.5 * this.labelModule.size.height;
+        this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');
+      }
+
+      this.updateBoundingBox(x, y);
+    }
+
+    /**
+     *
+     * @param {number} x
+     * @param {number} y
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y) {
+      this.boundingBox.top = y - this.options.size;
+      this.boundingBox.left = x - this.options.size;
+      this.boundingBox.right = x + this.options.size;
+      this.boundingBox.bottom = y + this.options.size;
+
+      if (this.options.label !== undefined && this.labelModule.size.width > 0) {
+        this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);
+        this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);
+        this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height);
+      }
+    }
+  }]);
+  return ShapeBase;
+}(_NodeBase3['default']);
+
+exports['default'] = ShapeBase;
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// to indexed object, toObject with fallback for non-array-like ES3 strings
+var IObject = __webpack_require__(78);
+var defined = __webpack_require__(51);
+module.exports = function (it) {
+  return IObject(defined(it));
+};
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(20);
+var createDesc = __webpack_require__(39);
+module.exports = __webpack_require__(21) ? function (object, key, value) {
+  return dP.f(object, key, createDesc(1, value));
+} : function (object, key, value) {
+  object[key] = value;
+  return object;
+};
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(32);
+module.exports = function (it) {
+  if (!isObject(it)) throw TypeError(it + ' is not an object!');
+  return it;
+};
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports) {
+
+module.exports = function (exec) {
+  try {
+    return !!exec();
+  } catch (e) {
+    return true;
+  }
+};
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(138), __esModule: true };
+
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+exports.__esModule = true;
+
+var _isIterable2 = __webpack_require__(188);
+
+var _isIterable3 = _interopRequireDefault(_isIterable2);
+
+var _getIterator2 = __webpack_require__(77);
+
+var _getIterator3 = _interopRequireDefault(_getIterator2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.default = function () {
+  function sliceIterator(arr, i) {
+    var _arr = [];
+    var _n = true;
+    var _d = false;
+    var _e = undefined;
+
+    try {
+      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
+        _arr.push(_s.value);
+
+        if (i && _arr.length === i) break;
+      }
+    } catch (err) {
+      _d = true;
+      _e = err;
+    } finally {
+      try {
+        if (!_n && _i["return"]) _i["return"]();
+      } finally {
+        if (_d) throw _e;
+      }
+    }
+
+    return _arr;
+  }
+
+  return function (arr, i) {
+    if (Array.isArray(arr)) {
+      return arr;
+    } else if ((0, _isIterable3.default)(Object(arr))) {
+      return sliceIterator(arr, i);
+    } else {
+      throw new TypeError("Invalid attempt to destructure non-iterable instance");
+    }
+  };
+}();
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports) {
+
+module.exports = {};
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+  return typeof it === 'object' ? it !== null : typeof it === 'function';
+};
+
+
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var $keys = __webpack_require__(84);
+var enumBugKeys = __webpack_require__(58);
+
+module.exports = Object.keys || function keys(O) {
+  return $keys(O, enumBugKeys);
+};
+
+
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * @prototype Point3d
+ * @param {number} [x]
+ * @param {number} [y]
+ * @param {number} [z]
+ */
+function Point3d(x, y, z) {
+  this.x = x !== undefined ? x : 0;
+  this.y = y !== undefined ? y : 0;
+  this.z = z !== undefined ? z : 0;
+}
+
+/**
+ * Subtract the two provided points, returns a-b
+ * @param {Point3d} a
+ * @param {Point3d} b
+ * @return {Point3d} a-b
+ */
+Point3d.subtract = function (a, b) {
+  var sub = new Point3d();
+  sub.x = a.x - b.x;
+  sub.y = a.y - b.y;
+  sub.z = a.z - b.z;
+  return sub;
+};
+
+/**
+ * Add the two provided points, returns a+b
+ * @param {Point3d} a
+ * @param {Point3d} b
+ * @return {Point3d} a+b
+ */
+Point3d.add = function (a, b) {
+  var sum = new Point3d();
+  sum.x = a.x + b.x;
+  sum.y = a.y + b.y;
+  sum.z = a.z + b.z;
+  return sum;
+};
+
+/**
+ * Calculate the average of two 3d points
+ * @param {Point3d} a
+ * @param {Point3d} b
+ * @return {Point3d} The average, (a+b)/2
+ */
+Point3d.avg = function (a, b) {
+  return new Point3d((a.x + b.x) / 2, (a.y + b.y) / 2, (a.z + b.z) / 2);
+};
+
+/**
+ * Calculate the cross product of the two provided points, returns axb
+ * Documentation: http://en.wikipedia.org/wiki/Cross_product
+ * @param {Point3d} a
+ * @param {Point3d} b
+ * @return {Point3d} cross product axb
+ */
+Point3d.crossProduct = function (a, b) {
+  var crossproduct = new Point3d();
+
+  crossproduct.x = a.y * b.z - a.z * b.y;
+  crossproduct.y = a.z * b.x - a.x * b.z;
+  crossproduct.z = a.x * b.y - a.y * b.x;
+
+  return crossproduct;
+};
+
+/**
+ * Rtrieve the length of the vector (or the distance from this point to the origin
+ * @return {number}  length
+ */
+Point3d.prototype.length = function () {
+  return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
+};
+
+module.exports = Point3d;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+/**
+ * Created by Alex on 11/6/2014.
+ */
+
+// https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60
+// if the module has no dependencies, the above pattern can be simplified to
+(function (root, factory) {
+  if (true) {
+    // AMD. Register as an anonymous module.
+    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    // Browser globals (root is window)
+    root.keycharm = factory();
+  }
+}(this, function () {
+
+  function keycharm(options) {
+    var preventDefault = options && options.preventDefault || false;
+
+    var container = options && options.container || window;
+
+    var _exportFunctions = {};
+    var _bound = {keydown:{}, keyup:{}};
+    var _keys = {};
+    var i;
+
+    // a - z
+    for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}
+    // A - Z
+    for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}
+    // 0 - 9
+    for (i = 0;  i <= 9;   i++) {_keys['' + i] = {code:48 + i, shift: false};}
+    // F1 - F12
+    for (i = 1;  i <= 12;   i++) {_keys['F' + i] = {code:111 + i, shift: false};}
+    // num0 - num9
+    for (i = 0;  i <= 9;   i++) {_keys['num' + i] = {code:96 + i, shift: false};}
+
+    // numpad misc
+    _keys['num*'] = {code:106, shift: false};
+    _keys['num+'] = {code:107, shift: false};
+    _keys['num-'] = {code:109, shift: false};
+    _keys['num/'] = {code:111, shift: false};
+    _keys['num.'] = {code:110, shift: false};
+    // arrows
+    _keys['left']  = {code:37, shift: false};
+    _keys['up']    = {code:38, shift: false};
+    _keys['right'] = {code:39, shift: false};
+    _keys['down']  = {code:40, shift: false};
+    // extra keys
+    _keys['space'] = {code:32, shift: false};
+    _keys['enter'] = {code:13, shift: false};
+    _keys['shift'] = {code:16, shift: undefined};
+    _keys['esc']   = {code:27, shift: false};
+    _keys['backspace'] = {code:8, shift: false};
+    _keys['tab']       = {code:9, shift: false};
+    _keys['ctrl']      = {code:17, shift: false};
+    _keys['alt']       = {code:18, shift: false};
+    _keys['delete']    = {code:46, shift: false};
+    _keys['pageup']    = {code:33, shift: false};
+    _keys['pagedown']  = {code:34, shift: false};
+    // symbols
+    _keys['=']     = {code:187, shift: false};
+    _keys['-']     = {code:189, shift: false};
+    _keys[']']     = {code:221, shift: false};
+    _keys['[']     = {code:219, shift: false};
+
+
+
+    var down = function(event) {handleEvent(event,'keydown');};
+    var up = function(event) {handleEvent(event,'keyup');};
+
+    // handle the actualy bound key with the event
+    var handleEvent = function(event,type) {
+      if (_bound[type][event.keyCode] !== undefined) {
+        var bound = _bound[type][event.keyCode];
+        for (var i = 0; i < bound.length; i++) {
+          if (bound[i].shift === undefined) {
+            bound[i].fn(event);
+          }
+          else if (bound[i].shift == true && event.shiftKey == true) {
+            bound[i].fn(event);
+          }
+          else if (bound[i].shift == false && event.shiftKey == false) {
+            bound[i].fn(event);
+          }
+        }
+
+        if (preventDefault == true) {
+          event.preventDefault();
+        }
+      }
+    };
+
+    // bind a key to a callback
+    _exportFunctions.bind = function(key, callback, type) {
+      if (type === undefined) {
+        type = 'keydown';
+      }
+      if (_keys[key] === undefined) {
+        throw new Error("unsupported key: " + key);
+      }
+      if (_bound[type][_keys[key].code] === undefined) {
+        _bound[type][_keys[key].code] = [];
+      }
+      _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});
+    };
+
+
+    // bind all keys to a call back (demo purposes)
+    _exportFunctions.bindAll = function(callback, type) {
+      if (type === undefined) {
+        type = 'keydown';
+      }
+      for (var key in _keys) {
+        if (_keys.hasOwnProperty(key)) {
+          _exportFunctions.bind(key,callback,type);
+        }
+      }
+    };
+
+    // get the key label from an event
+    _exportFunctions.getKey = function(event) {
+      for (var key in _keys) {
+        if (_keys.hasOwnProperty(key)) {
+          if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {
+            return key;
+          }
+          else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {
+            return key;
+          }
+          else if (event.keyCode == _keys[key].code && key == 'shift') {
+            return key;
+          }
+        }
+      }
+      return "unknown key, currently not supported";
+    };
+
+    // unbind either a specific callback from a key or all of them (by leaving callback undefined)
+    _exportFunctions.unbind = function(key, callback, type) {
+      if (type === undefined) {
+        type = 'keydown';
+      }
+      if (_keys[key] === undefined) {
+        throw new Error("unsupported key: " + key);
+      }
+      if (callback !== undefined) {
+        var newBindings = [];
+        var bound = _bound[type][_keys[key].code];
+        if (bound !== undefined) {
+          for (var i = 0; i < bound.length; i++) {
+            if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {
+              newBindings.push(_bound[type][_keys[key].code][i]);
+            }
+          }
+        }
+        _bound[type][_keys[key].code] = newBindings;
+      }
+      else {
+        _bound[type][_keys[key].code] = [];
+      }
+    };
+
+    // reset all bound variables.
+    _exportFunctions.reset = function() {
+      _bound = {keydown:{}, keyup:{}};
+    };
+
+    // unbind all listeners and reset all variables.
+    _exportFunctions.destroy = function() {
+      _bound = {keydown:{}, keyup:{}};
+      container.removeEventListener('keydown', down, true);
+      container.removeEventListener('keyup', up, true);
+    };
+
+    // create listeners.
+    container.addEventListener('keydown',down,true);
+    container.addEventListener('keyup',up,true);
+
+    // return the public functions.
+    return _exportFunctions;
+  }
+
+  return keycharm;
+}));
+
+
+
+
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * used in Core to convert the options into a volatile variable
+ * 
+ * @param {function} moment
+ * @param {Object} body
+ * @param {Array | Object} hiddenDates
+ * @returns {number}
+ */
+exports.convertHiddenOptions = function (moment, body, hiddenDates) {
+  if (hiddenDates && !Array.isArray(hiddenDates)) {
+    return exports.convertHiddenOptions(moment, body, [hiddenDates]);
+  }
+
+  body.hiddenDates = [];
+  if (hiddenDates) {
+    if (Array.isArray(hiddenDates) == true) {
+      for (var i = 0; i < hiddenDates.length; i++) {
+        if (hiddenDates[i].repeat === undefined) {
+          var dateItem = {};
+          dateItem.start = moment(hiddenDates[i].start).toDate().valueOf();
+          dateItem.end = moment(hiddenDates[i].end).toDate().valueOf();
+          body.hiddenDates.push(dateItem);
+        }
+      }
+      body.hiddenDates.sort(function (a, b) {
+        return a.start - b.start;
+      }); // sort by start time
+    }
+  }
+};
+
+/**
+ * create new entrees for the repeating hidden dates
+ *
+ * @param {function} moment
+ * @param {Object} body
+ * @param {Array | Object} hiddenDates
+ * @returns {null}
+ */
+exports.updateHiddenDates = function (moment, body, hiddenDates) {
+  if (hiddenDates && !Array.isArray(hiddenDates)) {
+    return exports.updateHiddenDates(moment, body, [hiddenDates]);
+  }
+
+  if (hiddenDates && body.domProps.centerContainer.width !== undefined) {
+    exports.convertHiddenOptions(moment, body, hiddenDates);
+
+    var start = moment(body.range.start);
+    var end = moment(body.range.end);
+
+    var totalRange = body.range.end - body.range.start;
+    var pixelTime = totalRange / body.domProps.centerContainer.width;
+
+    for (var i = 0; i < hiddenDates.length; i++) {
+      if (hiddenDates[i].repeat !== undefined) {
+        var startDate = moment(hiddenDates[i].start);
+        var endDate = moment(hiddenDates[i].end);
+
+        if (startDate._d == "Invalid Date") {
+          throw new Error("Supplied start date is not valid: " + hiddenDates[i].start);
+        }
+        if (endDate._d == "Invalid Date") {
+          throw new Error("Supplied end date is not valid: " + hiddenDates[i].end);
+        }
+
+        var duration = endDate - startDate;
+        if (duration >= 4 * pixelTime) {
+
+          var offset = 0;
+          var runUntil = end.clone();
+          switch (hiddenDates[i].repeat) {
+            case "daily":
+              // case of time
+              if (startDate.day() != endDate.day()) {
+                offset = 1;
+              }
+              startDate.dayOfYear(start.dayOfYear());
+              startDate.year(start.year());
+              startDate.subtract(7, 'days');
+
+              endDate.dayOfYear(start.dayOfYear());
+              endDate.year(start.year());
+              endDate.subtract(7 - offset, 'days');
+
+              runUntil.add(1, 'weeks');
+              break;
+            case "weekly":
+              var dayOffset = endDate.diff(startDate, 'days');
+              var day = startDate.day();
+
+              // set the start date to the range.start
+              startDate.date(start.date());
+              startDate.month(start.month());
+              startDate.year(start.year());
+              endDate = startDate.clone();
+
+              // force
+              startDate.day(day);
+              endDate.day(day);
+              endDate.add(dayOffset, 'days');
+
+              startDate.subtract(1, 'weeks');
+              endDate.subtract(1, 'weeks');
+
+              runUntil.add(1, 'weeks');
+              break;
+            case "monthly":
+              if (startDate.month() != endDate.month()) {
+                offset = 1;
+              }
+              startDate.month(start.month());
+              startDate.year(start.year());
+              startDate.subtract(1, 'months');
+
+              endDate.month(start.month());
+              endDate.year(start.year());
+              endDate.subtract(1, 'months');
+              endDate.add(offset, 'months');
+
+              runUntil.add(1, 'months');
+              break;
+            case "yearly":
+              if (startDate.year() != endDate.year()) {
+                offset = 1;
+              }
+              startDate.year(start.year());
+              startDate.subtract(1, 'years');
+              endDate.year(start.year());
+              endDate.subtract(1, 'years');
+              endDate.add(offset, 'years');
+
+              runUntil.add(1, 'years');
+              break;
+            default:
+              console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat);
+              return;
+          }
+          while (startDate < runUntil) {
+            body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() });
+            switch (hiddenDates[i].repeat) {
+              case "daily":
+                startDate.add(1, 'days');
+                endDate.add(1, 'days');
+                break;
+              case "weekly":
+                startDate.add(1, 'weeks');
+                endDate.add(1, 'weeks');
+                break;
+              case "monthly":
+                startDate.add(1, 'months');
+                endDate.add(1, 'months');
+                break;
+              case "yearly":
+                startDate.add(1, 'y');
+                endDate.add(1, 'y');
+                break;
+              default:
+                console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:", hiddenDates[i].repeat);
+                return;
+            }
+          }
+          body.hiddenDates.push({ start: startDate.valueOf(), end: endDate.valueOf() });
+        }
+      }
+    }
+    // remove duplicates, merge where possible
+    exports.removeDuplicates(body);
+    // ensure the new positions are not on hidden dates
+    var startHidden = exports.isHidden(body.range.start, body.hiddenDates);
+    var endHidden = exports.isHidden(body.range.end, body.hiddenDates);
+    var rangeStart = body.range.start;
+    var rangeEnd = body.range.end;
+    if (startHidden.hidden == true) {
+      rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;
+    }
+    if (endHidden.hidden == true) {
+      rangeEnd = body.range.endToFront == true ? endHidden.startDate - 1 : endHidden.endDate + 1;
+    }
+    if (startHidden.hidden == true || endHidden.hidden == true) {
+      body.range._applyRange(rangeStart, rangeEnd);
+    }
+  }
+};
+
+/**
+ * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up.
+ * Scales with N^2
+ *
+ * @param {Object} body
+ */
+exports.removeDuplicates = function (body) {
+  var hiddenDates = body.hiddenDates;
+  var safeDates = [];
+  for (var i = 0; i < hiddenDates.length; i++) {
+    for (var j = 0; j < hiddenDates.length; j++) {
+      if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) {
+        // j inside i
+        if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {
+          hiddenDates[j].remove = true;
+        }
+        // j start inside i
+        else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) {
+            hiddenDates[i].end = hiddenDates[j].end;
+            hiddenDates[j].remove = true;
+          }
+          // j end inside i
+          else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {
+              hiddenDates[i].start = hiddenDates[j].start;
+              hiddenDates[j].remove = true;
+            }
+      }
+    }
+  }
+
+  for (i = 0; i < hiddenDates.length; i++) {
+    if (hiddenDates[i].remove !== true) {
+      safeDates.push(hiddenDates[i]);
+    }
+  }
+
+  body.hiddenDates = safeDates;
+  body.hiddenDates.sort(function (a, b) {
+    return a.start - b.start;
+  }); // sort by start time
+};
+
+exports.printDates = function (dates) {
+  for (var i = 0; i < dates.length; i++) {
+    console.log(i, new Date(dates[i].start), new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove);
+  }
+};
+
+/**
+ * Used in TimeStep to avoid the hidden times.
+ * @param {function} moment
+ * @param {TimeStep} timeStep
+ * @param {Date} previousTime
+ */
+exports.stepOverHiddenDates = function (moment, timeStep, previousTime) {
+  var stepInHidden = false;
+  var currentValue = timeStep.current.valueOf();
+  for (var i = 0; i < timeStep.hiddenDates.length; i++) {
+    var startDate = timeStep.hiddenDates[i].start;
+    var endDate = timeStep.hiddenDates[i].end;
+    if (currentValue >= startDate && currentValue < endDate) {
+      stepInHidden = true;
+      break;
+    }
+  }
+
+  if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) {
+    var prevValue = moment(previousTime);
+    var newValue = moment(endDate);
+    //check if the next step should be major
+    if (prevValue.year() != newValue.year()) {
+      timeStep.switchedYear = true;
+    } else if (prevValue.month() != newValue.month()) {
+      timeStep.switchedMonth = true;
+    } else if (prevValue.dayOfYear() != newValue.dayOfYear()) {
+      timeStep.switchedDay = true;
+    }
+
+    timeStep.current = newValue;
+  }
+};
+
+///**
+// * Used in TimeStep to avoid the hidden times.
+// * @param timeStep
+// * @param previousTime
+// */
+//exports.checkFirstStep = function(timeStep) {
+//  var stepInHidden = false;
+//  var currentValue = timeStep.current.valueOf();
+//  for (var i = 0; i < timeStep.hiddenDates.length; i++) {
+//    var startDate = timeStep.hiddenDates[i].start;
+//    var endDate = timeStep.hiddenDates[i].end;
+//    if (currentValue >= startDate && currentValue < endDate) {
+//      stepInHidden = true;
+//      break;
+//    }
+//  }
+//
+//  if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) {
+//    var newValue = moment(endDate);
+//    timeStep.current = newValue.toDate();
+//  }
+//};
+
+/**
+ * replaces the Core toScreen methods
+ *
+ * @param {vis.Core} Core
+ * @param {Date} time
+ * @param {number} width
+ * @returns {number}
+ */
+exports.toScreen = function (Core, time, width) {
+  var conversion;
+  if (Core.body.hiddenDates.length == 0) {
+    conversion = Core.range.conversion(width);
+    return (time.valueOf() - conversion.offset) * conversion.scale;
+  } else {
+    var hidden = exports.isHidden(time, Core.body.hiddenDates);
+    if (hidden.hidden == true) {
+      time = hidden.startDate;
+    }
+
+    var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);
+    if (time < Core.range.start) {
+      conversion = Core.range.conversion(width, duration);
+      var hiddenBeforeStart = exports.getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset);
+      time = Core.options.moment(time).toDate().valueOf();
+      time = time + hiddenBeforeStart;
+      return -(conversion.offset - time.valueOf()) * conversion.scale;
+    } else if (time > Core.range.end) {
+      var rangeAfterEnd = { start: Core.range.start, end: time };
+      time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time);
+      conversion = Core.range.conversion(width, duration);
+      return (time.valueOf() - conversion.offset) * conversion.scale;
+    } else {
+      time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time);
+      conversion = Core.range.conversion(width, duration);
+      return (time.valueOf() - conversion.offset) * conversion.scale;
+    }
+  }
+};
+
+/**
+ * Replaces the core toTime methods
+ *
+ * @param {vis.Core} Core
+ * @param {number} x
+ * @param {number} width
+ * @returns {Date}
+ */
+exports.toTime = function (Core, x, width) {
+  if (Core.body.hiddenDates.length == 0) {
+    var conversion = Core.range.conversion(width);
+    return new Date(x / conversion.scale + conversion.offset);
+  } else {
+    var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);
+    var totalDuration = Core.range.end - Core.range.start - hiddenDuration;
+    var partialDuration = totalDuration * x / width;
+    var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration);
+
+    return new Date(accumulatedHiddenDuration + partialDuration + Core.range.start);
+  }
+};
+
+/**
+ * Support function
+ *
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @param {number} start
+ * @param {number} end
+ * @returns {number}
+ */
+exports.getHiddenDurationBetween = function (hiddenDates, start, end) {
+  var duration = 0;
+  for (var i = 0; i < hiddenDates.length; i++) {
+    var startDate = hiddenDates[i].start;
+    var endDate = hiddenDates[i].end;
+    // if time after the cutout, and the
+    if (startDate >= start && endDate < end) {
+      duration += endDate - startDate;
+    }
+  }
+  return duration;
+};
+
+/**
+ * Support function
+ *
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @param {number} start
+ * @param {number} end
+ * @returns {number}
+ */
+exports.getHiddenDurationBeforeStart = function (hiddenDates, start, end) {
+  var duration = 0;
+  for (var i = 0; i < hiddenDates.length; i++) {
+    var startDate = hiddenDates[i].start;
+    var endDate = hiddenDates[i].end;
+
+    if (startDate >= start && endDate <= end) {
+      duration += endDate - startDate;
+    }
+  }
+  return duration;
+};
+
+/**
+ * Support function
+ * @param {function} moment
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @param {{start: number, end: number}} range
+ * @param {Date} time
+ * @returns {number}
+ */
+exports.correctTimeForHidden = function (moment, hiddenDates, range, time) {
+  time = moment(time).toDate().valueOf();
+  time -= exports.getHiddenDurationBefore(moment, hiddenDates, range, time);
+  return time;
+};
+
+exports.getHiddenDurationBefore = function (moment, hiddenDates, range, time) {
+  var timeOffset = 0;
+  time = moment(time).toDate().valueOf();
+
+  for (var i = 0; i < hiddenDates.length; i++) {
+    var startDate = hiddenDates[i].start;
+    var endDate = hiddenDates[i].end;
+    // if time after the cutout, and the
+    if (startDate >= range.start && endDate < range.end) {
+      if (time >= endDate) {
+        timeOffset += endDate - startDate;
+      }
+    }
+  }
+  return timeOffset;
+};
+
+/**
+ * sum the duration from start to finish, including the hidden duration,
+ * until the required amount has been reached, return the accumulated hidden duration
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @param {{start: number, end: number}} range
+ * @param {number} [requiredDuration=0]
+ * @returns {number}
+ */
+exports.getAccumulatedHiddenDuration = function (hiddenDates, range, requiredDuration) {
+  var hiddenDuration = 0;
+  var duration = 0;
+  var previousPoint = range.start;
+  //exports.printDates(hiddenDates)
+  for (var i = 0; i < hiddenDates.length; i++) {
+    var startDate = hiddenDates[i].start;
+    var endDate = hiddenDates[i].end;
+    // if time after the cutout, and the
+    if (startDate >= range.start && endDate < range.end) {
+      duration += startDate - previousPoint;
+      previousPoint = endDate;
+      if (duration >= requiredDuration) {
+        break;
+      } else {
+        hiddenDuration += endDate - startDate;
+      }
+    }
+  }
+
+  return hiddenDuration;
+};
+
+/**
+ * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @param {Date} time
+ * @param {number} direction
+ * @param {boolean} correctionEnabled
+ * @returns {Date|number}
+ */
+exports.snapAwayFromHidden = function (hiddenDates, time, direction, correctionEnabled) {
+  var isHidden = exports.isHidden(time, hiddenDates);
+  if (isHidden.hidden == true) {
+    if (direction < 0) {
+      if (correctionEnabled == true) {
+        return isHidden.startDate - (isHidden.endDate - time) - 1;
+      } else {
+        return isHidden.startDate - 1;
+      }
+    } else {
+      if (correctionEnabled == true) {
+        return isHidden.endDate + (time - isHidden.startDate) + 1;
+      } else {
+        return isHidden.endDate + 1;
+      }
+    }
+  } else {
+    return time;
+  }
+};
+
+/**
+ * Check if a time is hidden
+ *
+ * @param {Date} time
+ * @param {Array.<{start: Window.start, end: *}>} hiddenDates
+ * @returns {{hidden: boolean, startDate: Window.start, endDate: *}}
+ */
+exports.isHidden = function (time, hiddenDates) {
+  for (var i = 0; i < hiddenDates.length; i++) {
+    var startDate = hiddenDates[i].start;
+    var endDate = hiddenDates[i].end;
+
+    if (time >= startDate && time < endDate) {
+      // if the start is entering a hidden zone
+      return { hidden: true, startDate: startDate, endDate: endDate };
+    }
+  }
+  return { hidden: false, startDate: startDate, endDate: endDate };
+};
+
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Register a touch event, taking place before a gesture
+ * @param {Hammer} hammer       A hammer instance
+ * @param {function} callback   Callback, called as callback(event)
+ */
+exports.onTouch = function (hammer, callback) {
+  callback.inputHandler = function (event) {
+    if (event.isFirst) {
+      callback(event);
+    }
+  };
+
+  hammer.on('hammer.input', callback.inputHandler);
+};
+
+/**
+ * Register a release event, taking place after a gesture
+ * @param {Hammer} hammer       A hammer instance
+ * @param {function} callback   Callback, called as callback(event)
+ * @returns {*}
+ */
+exports.onRelease = function (hammer, callback) {
+  callback.inputHandler = function (event) {
+    if (event.isFinal) {
+      callback(event);
+    }
+  };
+
+  return hammer.on('hammer.input', callback.inputHandler);
+};
+
+/**
+ * Unregister a touch event, taking place before a gesture
+ * @param {Hammer} hammer       A hammer instance
+ * @param {function} callback   Callback, called as callback(event)
+ */
+exports.offTouch = function (hammer, callback) {
+  hammer.off('hammer.input', callback.inputHandler);
+};
+
+/**
+ * Unregister a release event, taking place before a gesture
+ * @param {Hammer} hammer       A hammer instance
+ * @param {function} callback   Callback, called as callback(event)
+ */
+exports.offRelease = exports.offTouch;
+
+/**
+ * Hack the PinchRecognizer such that it doesn't prevent default behavior
+ * for vertical panning.
+ *
+ * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932
+ *
+ * @param {Hammer.Pinch} pinchRecognizer
+ * @return {Hammer.Pinch} returns the pinchRecognizer
+ */
+exports.disablePreventDefaultVertically = function (pinchRecognizer) {
+  var TOUCH_ACTION_PAN_Y = 'pan-y';
+
+  pinchRecognizer.getTouchAction = function () {
+    // default method returns [TOUCH_ACTION_NONE]
+    return [TOUCH_ACTION_PAN_Y];
+  };
+
+  return pinchRecognizer;
+};
+
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Hammer = __webpack_require__(10);
+var util = __webpack_require__(2);
+var moment = __webpack_require__(9);
+
+/**
+ * @constructor Item
+ * @param {Object} data             Object containing (optional) parameters type,
+ *                                  start, end, content, group, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ *                                  Conversion functions from time to screen and vice versa
+ * @param {Object} options          Configuration options
+ *                                  // TODO: describe available options
+ */
+function Item(data, conversion, options) {
+  this.id = null;
+  this.parent = null;
+  this.data = data;
+  this.dom = null;
+  this.conversion = conversion || {};
+  this.options = options || {};
+  this.selected = false;
+  this.displayed = false;
+  this.groupShowing = true;
+  this.dirty = true;
+
+  this.top = null;
+  this.right = null;
+  this.left = null;
+  this.width = null;
+  this.height = null;
+
+  this.editable = null;
+  this._updateEditStatus();
+}
+
+Item.prototype.stack = true;
+
+/**
+ * Select current item
+ */
+Item.prototype.select = function () {
+  this.selected = true;
+  this.dirty = true;
+  if (this.displayed) this.redraw();
+};
+
+/**
+ * Unselect current item
+ */
+Item.prototype.unselect = function () {
+  this.selected = false;
+  this.dirty = true;
+  if (this.displayed) this.redraw();
+};
+
+/**
+ * Set data for the item. Existing data will be updated. The id should not
+ * be changed. When the item is displayed, it will be redrawn immediately.
+ * @param {Object} data
+ */
+Item.prototype.setData = function (data) {
+  var groupChanged = data.group != undefined && this.data.group != data.group;
+  if (groupChanged && this.parent != null) {
+    this.parent.itemSet._moveToGroup(this, data.group);
+  }
+
+  if (this.parent) {
+    this.parent.stackDirty = true;
+  }
+
+  var subGroupChanged = data.subgroup != undefined && this.data.subgroup != data.subgroup;
+  if (subGroupChanged && this.parent != null) {
+    this.parent.changeSubgroup(this, this.data.subgroup, data.subgroup);
+  }
+
+  this.data = data;
+  this._updateEditStatus();
+  this.dirty = true;
+  if (this.displayed) this.redraw();
+};
+
+/**
+ * Set a parent for the item
+ * @param {Group} parent
+ */
+Item.prototype.setParent = function (parent) {
+  if (this.displayed) {
+    this.hide();
+    this.parent = parent;
+    if (this.parent) {
+      this.show();
+    }
+  } else {
+    this.parent = parent;
+  }
+};
+
+/**
+ * Check whether this item is visible inside given range
+ * @param {vis.Range} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+Item.prototype.isVisible = function (range) {
+  // eslint-disable-line no-unused-vars
+  return false;
+};
+
+/**
+ * Show the Item in the DOM (when not already visible)
+ * @return {Boolean} changed
+ */
+Item.prototype.show = function () {
+  return false;
+};
+
+/**
+ * Hide the Item from the DOM (when visible)
+ * @return {Boolean} changed
+ */
+Item.prototype.hide = function () {
+  return false;
+};
+
+/**
+ * Repaint the item
+ */
+Item.prototype.redraw = function () {
+  // should be implemented by the item
+};
+
+/**
+ * Reposition the Item horizontally
+ */
+Item.prototype.repositionX = function () {
+  // should be implemented by the item
+};
+
+/**
+ * Reposition the Item vertically
+ */
+Item.prototype.repositionY = function () {
+  // should be implemented by the item
+};
+
+/**
+ * Repaint a drag area on the center of the item when the item is selected
+ * @protected
+ */
+Item.prototype._repaintDragCenter = function () {
+  if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) {
+    var me = this;
+    // create and show drag area
+    var dragCenter = document.createElement('div');
+    dragCenter.className = 'vis-drag-center';
+    dragCenter.dragCenterItem = this;
+    var hammer = new Hammer(dragCenter);
+
+    hammer.on('tap', function (event) {
+      me.parent.itemSet.body.emitter.emit('click', {
+        event: event,
+        item: me.id
+      });
+    });
+    hammer.on('doubletap', function (event) {
+      event.stopPropagation();
+      me.parent.itemSet._onUpdateItem(me);
+      me.parent.itemSet.body.emitter.emit('doubleClick', {
+        event: event,
+        item: me.id
+      });
+    });
+
+    if (this.dom.box) {
+      if (this.dom.dragLeft) {
+        this.dom.box.insertBefore(dragCenter, this.dom.dragLeft);
+      } else {
+        this.dom.box.appendChild(dragCenter);
+      }
+    } else if (this.dom.point) {
+      this.dom.point.appendChild(dragCenter);
+    }
+
+    this.dom.dragCenter = dragCenter;
+  } else if (!this.selected && this.dom.dragCenter) {
+    // delete drag area
+    if (this.dom.dragCenter.parentNode) {
+      this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter);
+    }
+    this.dom.dragCenter = null;
+  }
+};
+
+/**
+ * Repaint a delete button on the top right of the item when the item is selected
+ * @param {HTMLElement} anchor
+ * @protected
+ */
+Item.prototype._repaintDeleteButton = function (anchor) {
+  var editable = (this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove || !this.options.editable.overrideItems && this.editable != null && this.editable.remove;
+
+  if (this.selected && editable && !this.dom.deleteButton) {
+    // create and show button
+    var me = this;
+
+    var deleteButton = document.createElement('div');
+
+    if (this.options.rtl) {
+      deleteButton.className = 'vis-delete-rtl';
+    } else {
+      deleteButton.className = 'vis-delete';
+    }
+    deleteButton.title = 'Delete this item';
+
+    // TODO: be able to destroy the delete button
+    new Hammer(deleteButton).on('tap', function (event) {
+      event.stopPropagation();
+      me.parent.removeFromDataSet(me);
+    });
+
+    anchor.appendChild(deleteButton);
+    this.dom.deleteButton = deleteButton;
+  } else if (!this.selected && this.dom.deleteButton) {
+    // remove button
+    if (this.dom.deleteButton.parentNode) {
+      this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);
+    }
+    this.dom.deleteButton = null;
+  }
+};
+
+/**
+ * Repaint a onChange tooltip on the top right of the item when the item is selected
+ * @param {HTMLElement} anchor
+ * @protected
+ */
+Item.prototype._repaintOnItemUpdateTimeTooltip = function (anchor) {
+  if (!this.options.tooltipOnItemUpdateTime) return;
+
+  var editable = (this.options.editable.updateTime || this.data.editable === true) && this.data.editable !== false;
+
+  if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) {
+    var onItemUpdateTimeTooltip = document.createElement('div');
+
+    onItemUpdateTimeTooltip.className = 'vis-onUpdateTime-tooltip';
+    anchor.appendChild(onItemUpdateTimeTooltip);
+    this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip;
+  } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) {
+    // remove button
+    if (this.dom.onItemUpdateTimeTooltip.parentNode) {
+      this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip);
+    }
+    this.dom.onItemUpdateTimeTooltip = null;
+  }
+
+  // position onChange tooltip
+  if (this.dom.onItemUpdateTimeTooltip) {
+
+    // only show when editing
+    this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? 'visible' : 'hidden';
+
+    // position relative to item's content
+    if (this.options.rtl) {
+      this.dom.onItemUpdateTimeTooltip.style.right = this.dom.content.style.right;
+    } else {
+      this.dom.onItemUpdateTimeTooltip.style.left = this.dom.content.style.left;
+    }
+
+    // position above or below the item depending on the item's position in the window
+    var tooltipOffset = 50; // TODO: should be tooltip height (depends on template)
+    var scrollTop = this.parent.itemSet.body.domProps.scrollTop;
+
+    // TODO: this.top for orientation:true is actually the items distance from the bottom... 
+    // (should be this.bottom)
+    var itemDistanceFromTop;
+    if (this.options.orientation.item == 'top') {
+      itemDistanceFromTop = this.top;
+    } else {
+      itemDistanceFromTop = this.parent.height - this.top - this.height;
+    }
+    var isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop;
+
+    if (isCloseToTop) {
+      this.dom.onItemUpdateTimeTooltip.style.bottom = "";
+      this.dom.onItemUpdateTimeTooltip.style.top = this.height + 2 + "px";
+    } else {
+      this.dom.onItemUpdateTimeTooltip.style.top = "";
+      this.dom.onItemUpdateTimeTooltip.style.bottom = this.height + 2 + "px";
+    }
+
+    // handle tooltip content
+    var content;
+    var templateFunction;
+
+    if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) {
+      templateFunction = this.options.tooltipOnItemUpdateTime.template.bind(this);
+      content = templateFunction(this.data);
+    } else {
+      content = 'start: ' + moment(this.data.start).format('MM/DD/YYYY hh:mm');
+      if (this.data.end) {
+        content += '<br> end: ' + moment(this.data.end).format('MM/DD/YYYY hh:mm');
+      }
+    }
+    this.dom.onItemUpdateTimeTooltip.innerHTML = content;
+  }
+};
+
+/**
+ * Set HTML contents for the item
+ * @param {Element} element   HTML element to fill with the contents
+ * @private
+ */
+Item.prototype._updateContents = function (element) {
+  var content;
+  var changed;
+  var templateFunction;
+  var itemVisibleFrameContent;
+  var visibleFrameTemplateFunction;
+  var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset
+
+  var frameElement = this.dom.box || this.dom.point;
+  var itemVisibleFrameContentElement = frameElement.getElementsByClassName('vis-item-visible-frame')[0];
+
+  if (this.options.visibleFrameTemplate) {
+    visibleFrameTemplateFunction = this.options.visibleFrameTemplate.bind(this);
+    itemVisibleFrameContent = visibleFrameTemplateFunction(itemData, frameElement);
+  } else {
+    itemVisibleFrameContent = '';
+  }
+
+  if (itemVisibleFrameContentElement) {
+    if (itemVisibleFrameContent instanceof Object && !(itemVisibleFrameContent instanceof Element)) {
+      visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement);
+    } else {
+      changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent);
+      if (changed) {
+        // only replace the content when changed
+        if (itemVisibleFrameContent instanceof Element) {
+          itemVisibleFrameContentElement.innerHTML = '';
+          itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent);
+        } else if (itemVisibleFrameContent != undefined) {
+          itemVisibleFrameContentElement.innerHTML = itemVisibleFrameContent;
+        } else {
+          if (!(this.data.type == 'background' && this.data.content === undefined)) {
+            throw new Error('Property "content" missing in item ' + this.id);
+          }
+        }
+
+        this.itemVisibleFrameContent = itemVisibleFrameContent;
+      }
+    }
+  }
+
+  if (this.options.template) {
+    templateFunction = this.options.template.bind(this);
+    content = templateFunction(itemData, element, this.data);
+  } else {
+    content = this.data.content;
+  }
+
+  if (content instanceof Object && !(content instanceof Element)) {
+    templateFunction(itemData, element);
+  } else {
+    changed = this._contentToString(this.content) !== this._contentToString(content);
+    if (changed) {
+      // only replace the content when changed
+      if (content instanceof Element) {
+        element.innerHTML = '';
+        element.appendChild(content);
+      } else if (content != undefined) {
+        element.innerHTML = content;
+      } else {
+        if (!(this.data.type == 'background' && this.data.content === undefined)) {
+          throw new Error('Property "content" missing in item ' + this.id);
+        }
+      }
+      this.content = content;
+    }
+  }
+};
+
+/**
+ * Process dataAttributes timeline option and set as data- attributes on dom.content
+ * @param {Element} element   HTML element to which the attributes will be attached
+ * @private
+ */
+Item.prototype._updateDataAttributes = function (element) {
+  if (this.options.dataAttributes && this.options.dataAttributes.length > 0) {
+    var attributes = [];
+
+    if (Array.isArray(this.options.dataAttributes)) {
+      attributes = this.options.dataAttributes;
+    } else if (this.options.dataAttributes == 'all') {
+      attributes = (0, _keys2['default'])(this.data);
+    } else {
+      return;
+    }
+
+    for (var i = 0; i < attributes.length; i++) {
+      var name = attributes[i];
+      var value = this.data[name];
+
+      if (value != null) {
+        element.setAttribute('data-' + name, value);
+      } else {
+        element.removeAttribute('data-' + name);
+      }
+    }
+  }
+};
+
+/**
+ * Update custom styles of the element
+ * @param {Element} element
+ * @private
+ */
+Item.prototype._updateStyle = function (element) {
+  // remove old styles
+  if (this.style) {
+    util.removeCssText(element, this.style);
+    this.style = null;
+  }
+
+  // append new styles
+  if (this.data.style) {
+    util.addCssText(element, this.data.style);
+    this.style = this.data.style;
+  }
+};
+
+/**
+ * Stringify the items contents
+ * @param {string | Element | undefined} content
+ * @returns {string | undefined}
+ * @private
+ */
+Item.prototype._contentToString = function (content) {
+  if (typeof content === 'string') return content;
+  if (content && 'outerHTML' in content) return content.outerHTML;
+  return content;
+};
+
+/**
+ * Update the editability of this item.
+ */
+Item.prototype._updateEditStatus = function () {
+  if (this.options) {
+    if (typeof this.options.editable === 'boolean') {
+      this.editable = {
+        updateTime: this.options.editable,
+        updateGroup: this.options.editable,
+        remove: this.options.editable
+      };
+    } else if ((0, _typeof3['default'])(this.options.editable) === 'object') {
+      this.editable = {};
+      util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.options.editable);
+    }
+  }
+  // Item data overrides, except if options.editable.overrideItems is set.
+  if (!this.options || !this.options.editable || this.options.editable.overrideItems !== true) {
+    if (this.data) {
+      if (typeof this.data.editable === 'boolean') {
+        this.editable = {
+          updateTime: this.data.editable,
+          updateGroup: this.data.editable,
+          remove: this.data.editable
+        };
+      } else if ((0, _typeof3['default'])(this.data.editable) === 'object') {
+        // TODO: in vis.js 5.0, we should change this to not reset options from the timeline configuration.
+        // Basically just remove the next line...
+        this.editable = {};
+        util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, this.data.editable);
+      }
+    }
+  }
+};
+
+/**
+ * Return the width of the item left from its start date
+ * @return {number}
+ */
+Item.prototype.getWidthLeft = function () {
+  return 0;
+};
+
+/**
+ * Return the width of the item right from the max of its start and end date
+ * @return {number}
+ */
+Item.prototype.getWidthRight = function () {
+  return 0;
+};
+
+/**
+ * Return the title of the item
+ * @return {string | undefined}
+ */
+Item.prototype.getTitle = function () {
+  return this.data.title;
+};
+
+module.exports = Item;
+
+/***/ }),
+/* 39 */
+/***/ (function(module, exports) {
+
+module.exports = function (bitmap, value) {
+  return {
+    enumerable: !(bitmap & 1),
+    configurable: !(bitmap & 2),
+    writable: !(bitmap & 4),
+    value: value
+  };
+};
+
+
+/***/ }),
+/* 40 */
+/***/ (function(module, exports) {
+
+var id = 0;
+var px = Math.random();
+module.exports = function (key) {
+  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+};
+
+
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.13 ToObject(argument)
+var defined = __webpack_require__(51);
+module.exports = function (it) {
+  return Object(defined(it));
+};
+
+
+/***/ }),
+/* 42 */
+/***/ (function(module, exports) {
+
+exports.f = {}.propertyIsEnumerable;
+
+
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * A queue
+ * @param {Object} options
+ *            Available options:
+ *            - delay: number    When provided, the queue will be flushed
+ *                               automatically after an inactivity of this delay
+ *                               in milliseconds.
+ *                               Default value is null.
+ *            - max: number      When the queue exceeds the given maximum number
+ *                               of entries, the queue is flushed automatically.
+ *                               Default value of max is Infinity.
+ * @constructor Queue
+ */
+function Queue(options) {
+  // options
+  this.delay = null;
+  this.max = Infinity;
+
+  // properties
+  this._queue = [];
+  this._timeout = null;
+  this._extended = null;
+
+  this.setOptions(options);
+}
+
+/**
+ * Update the configuration of the queue
+ * @param {Object} options
+ *            Available options:
+ *            - delay: number    When provided, the queue will be flushed
+ *                               automatically after an inactivity of this delay
+ *                               in milliseconds.
+ *                               Default value is null.
+ *            - max: number      When the queue exceeds the given maximum number
+ *                               of entries, the queue is flushed automatically.
+ *                               Default value of max is Infinity.
+ */
+Queue.prototype.setOptions = function (options) {
+  if (options && typeof options.delay !== 'undefined') {
+    this.delay = options.delay;
+  }
+  if (options && typeof options.max !== 'undefined') {
+    this.max = options.max;
+  }
+
+  this._flushIfNeeded();
+};
+
+/**
+ * Extend an object with queuing functionality.
+ * The object will be extended with a function flush, and the methods provided
+ * in options.replace will be replaced with queued ones.
+ * @param {Object} object
+ * @param {Object} options
+ *            Available options:
+ *            - replace: Array.<string>
+ *                               A list with method names of the methods
+ *                               on the object to be replaced with queued ones.
+ *            - delay: number    When provided, the queue will be flushed
+ *                               automatically after an inactivity of this delay
+ *                               in milliseconds.
+ *                               Default value is null.
+ *            - max: number      When the queue exceeds the given maximum number
+ *                               of entries, the queue is flushed automatically.
+ *                               Default value of max is Infinity.
+ * @return {Queue} Returns the created queue
+ */
+Queue.extend = function (object, options) {
+  var queue = new Queue(options);
+
+  if (object.flush !== undefined) {
+    throw new Error('Target object already has a property flush');
+  }
+  object.flush = function () {
+    queue.flush();
+  };
+
+  var methods = [{
+    name: 'flush',
+    original: undefined
+  }];
+
+  if (options && options.replace) {
+    for (var i = 0; i < options.replace.length; i++) {
+      var name = options.replace[i];
+      methods.push({
+        name: name,
+        original: object[name]
+      });
+      queue.replace(object, name);
+    }
+  }
+
+  queue._extended = {
+    object: object,
+    methods: methods
+  };
+
+  return queue;
+};
+
+/**
+ * Destroy the queue. The queue will first flush all queued actions, and in
+ * case it has extended an object, will restore the original object.
+ */
+Queue.prototype.destroy = function () {
+  this.flush();
+
+  if (this._extended) {
+    var object = this._extended.object;
+    var methods = this._extended.methods;
+    for (var i = 0; i < methods.length; i++) {
+      var method = methods[i];
+      if (method.original) {
+        object[method.name] = method.original;
+      } else {
+        delete object[method.name];
+      }
+    }
+    this._extended = null;
+  }
+};
+
+/**
+ * Replace a method on an object with a queued version
+ * @param {Object} object   Object having the method
+ * @param {string} method   The method name
+ */
+Queue.prototype.replace = function (object, method) {
+  var me = this;
+  var original = object[method];
+  if (!original) {
+    throw new Error('Method ' + method + ' undefined');
+  }
+
+  object[method] = function () {
+    // create an Array with the arguments
+    var args = [];
+    for (var i = 0; i < arguments.length; i++) {
+      args[i] = arguments[i];
+    }
+
+    // add this call to the queue
+    me.queue({
+      args: args,
+      fn: original,
+      context: this
+    });
+  };
+};
+
+/**
+ * Queue a call
+ * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry
+ */
+Queue.prototype.queue = function (entry) {
+  if (typeof entry === 'function') {
+    this._queue.push({ fn: entry });
+  } else {
+    this._queue.push(entry);
+  }
+
+  this._flushIfNeeded();
+};
+
+/**
+ * Check whether the queue needs to be flushed
+ * @private
+ */
+Queue.prototype._flushIfNeeded = function () {
+  // flush when the maximum is exceeded.
+  if (this._queue.length > this.max) {
+    this.flush();
+  }
+
+  // flush after a period of inactivity when a delay is configured
+  clearTimeout(this._timeout);
+  if (this.queue.length > 0 && typeof this.delay === 'number') {
+    var me = this;
+    this._timeout = setTimeout(function () {
+      me.flush();
+    }, this.delay);
+  }
+};
+
+/**
+ * Flush all queued calls
+ */
+Queue.prototype.flush = function () {
+  while (this._queue.length > 0) {
+    var entry = this._queue.shift();
+    entry.fn.apply(entry.context || entry.fn, entry.args || []);
+  }
+};
+
+module.exports = Queue;
+
+/***/ }),
+/* 44 */
+/***/ (function(module, exports) {
+
+
+/**
+ * Expose `Emitter`.
+ */
+
+module.exports = Emitter;
+
+/**
+ * Initialize a new `Emitter`.
+ *
+ * @api public
+ */
+
+function Emitter(obj) {
+  if (obj) return mixin(obj);
+};
+
+/**
+ * Mixin the emitter properties.
+ *
+ * @param {Object} obj
+ * @return {Object}
+ * @api private
+ */
+
+function mixin(obj) {
+  for (var key in Emitter.prototype) {
+    obj[key] = Emitter.prototype[key];
+  }
+  return obj;
+}
+
+/**
+ * Listen on the given `event` with `fn`.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.on =
+Emitter.prototype.addEventListener = function(event, fn){
+  this._callbacks = this._callbacks || {};
+  (this._callbacks[event] = this._callbacks[event] || [])
+    .push(fn);
+  return this;
+};
+
+/**
+ * Adds an `event` listener that will be invoked a single
+ * time then automatically removed.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.once = function(event, fn){
+  var self = this;
+  this._callbacks = this._callbacks || {};
+
+  function on() {
+    self.off(event, on);
+    fn.apply(this, arguments);
+  }
+
+  on.fn = fn;
+  this.on(event, on);
+  return this;
+};
+
+/**
+ * Remove the given callback for `event` or all
+ * registered callbacks.
+ *
+ * @param {String} event
+ * @param {Function} fn
+ * @return {Emitter}
+ * @api public
+ */
+
+Emitter.prototype.off =
+Emitter.prototype.removeListener =
+Emitter.prototype.removeAllListeners =
+Emitter.prototype.removeEventListener = function(event, fn){
+  this._callbacks = this._callbacks || {};
+
+  // all
+  if (0 == arguments.length) {
+    this._callbacks = {};
+    return this;
+  }
+
+  // specific event
+  var callbacks = this._callbacks[event];
+  if (!callbacks) return this;
+
+  // remove all handlers
+  if (1 == arguments.length) {
+    delete this._callbacks[event];
+    return this;
+  }
+
+  // remove specific handler
+  var cb;
+  for (var i = 0; i < callbacks.length; i++) {
+    cb = callbacks[i];
+    if (cb === fn || cb.fn === fn) {
+      callbacks.splice(i, 1);
+      break;
+    }
+  }
+  return this;
+};
+
+/**
+ * Emit `event` with the given args.
+ *
+ * @param {String} event
+ * @param {Mixed} ...
+ * @return {Emitter}
+ */
+
+Emitter.prototype.emit = function(event){
+  this._callbacks = this._callbacks || {};
+  var args = [].slice.call(arguments, 1)
+    , callbacks = this._callbacks[event];
+
+  if (callbacks) {
+    callbacks = callbacks.slice(0);
+    for (var i = 0, len = callbacks.length; i < len; ++i) {
+      callbacks[i].apply(this, args);
+    }
+  }
+
+  return this;
+};
+
+/**
+ * Return array of callbacks for `event`.
+ *
+ * @param {String} event
+ * @return {Array}
+ * @api public
+ */
+
+Emitter.prototype.listeners = function(event){
+  this._callbacks = this._callbacks || {};
+  return this._callbacks[event] || [];
+};
+
+/**
+ * Check if this emitter has `event` handlers.
+ *
+ * @param {String} event
+ * @return {Boolean}
+ * @api public
+ */
+
+Emitter.prototype.hasListeners = function(event){
+  return !! this.listeners(event).length;
+};
+
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var Component = __webpack_require__(16);
+var TimeStep = __webpack_require__(66);
+var DateUtil = __webpack_require__(36);
+var moment = __webpack_require__(9);
+
+/**
+ * A horizontal time axis
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
+ * @param {Object} [options]        See TimeAxis.setOptions for the available
+ *                                  options.
+ * @constructor TimeAxis
+ * @extends Component
+ */
+function TimeAxis(body, options) {
+  this.dom = {
+    foreground: null,
+    lines: [],
+    majorTexts: [],
+    minorTexts: [],
+    redundant: {
+      lines: [],
+      majorTexts: [],
+      minorTexts: []
+    }
+  };
+  this.props = {
+    range: {
+      start: 0,
+      end: 0,
+      minimumStep: 0
+    },
+    lineTop: 0
+  };
+
+  this.defaultOptions = {
+    orientation: {
+      axis: 'bottom'
+    }, // axis orientation: 'top' or 'bottom'
+    showMinorLabels: true,
+    showMajorLabels: true,
+    maxMinorChars: 7,
+    format: TimeStep.FORMAT,
+    moment: moment,
+    timeAxis: null
+  };
+  this.options = util.extend({}, this.defaultOptions);
+
+  this.body = body;
+
+  // create the HTML DOM
+  this._create();
+
+  this.setOptions(options);
+}
+
+TimeAxis.prototype = new Component();
+
+/**
+ * Set options for the TimeAxis.
+ * Parameters will be merged in current options.
+ * @param {Object} options  Available options:
+ *                          {string} [orientation.axis]
+ *                          {boolean} [showMinorLabels]
+ *                          {boolean} [showMajorLabels]
+ */
+TimeAxis.prototype.setOptions = function (options) {
+  if (options) {
+    // copy all options that we know
+    util.selectiveExtend(['showMinorLabels', 'showMajorLabels', 'maxMinorChars', 'hiddenDates', 'timeAxis', 'moment', 'rtl'], this.options, options);
+
+    // deep copy the format options
+    util.selectiveDeepExtend(['format'], this.options, options);
+
+    if ('orientation' in options) {
+      if (typeof options.orientation === 'string') {
+        this.options.orientation.axis = options.orientation;
+      } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'axis' in options.orientation) {
+        this.options.orientation.axis = options.orientation.axis;
+      }
+    }
+
+    // apply locale to moment.js
+    // TODO: not so nice, this is applied globally to moment.js
+    if ('locale' in options) {
+      if (typeof moment.locale === 'function') {
+        // moment.js 2.8.1+
+        moment.locale(options.locale);
+      } else {
+        moment.lang(options.locale);
+      }
+    }
+  }
+};
+
+/**
+ * Create the HTML DOM for the TimeAxis
+ */
+TimeAxis.prototype._create = function () {
+  this.dom.foreground = document.createElement('div');
+  this.dom.background = document.createElement('div');
+
+  this.dom.foreground.className = 'vis-time-axis vis-foreground';
+  this.dom.background.className = 'vis-time-axis vis-background';
+};
+
+/**
+ * Destroy the TimeAxis
+ */
+TimeAxis.prototype.destroy = function () {
+  // remove from DOM
+  if (this.dom.foreground.parentNode) {
+    this.dom.foreground.parentNode.removeChild(this.dom.foreground);
+  }
+  if (this.dom.background.parentNode) {
+    this.dom.background.parentNode.removeChild(this.dom.background);
+  }
+
+  this.body = null;
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+TimeAxis.prototype.redraw = function () {
+  var props = this.props;
+  var foreground = this.dom.foreground;
+  var background = this.dom.background;
+
+  // determine the correct parent DOM element (depending on option orientation)
+  var parent = this.options.orientation.axis == 'top' ? this.body.dom.top : this.body.dom.bottom;
+  var parentChanged = foreground.parentNode !== parent;
+
+  // calculate character width and height
+  this._calculateCharSize();
+
+  // TODO: recalculate sizes only needed when parent is resized or options is changed
+  var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none';
+  var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none';
+
+  // determine the width and height of the elemens for the axis
+  props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
+  props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
+  props.height = props.minorLabelHeight + props.majorLabelHeight;
+  props.width = foreground.offsetWidth;
+
+  props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight - (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height);
+  props.minorLineWidth = 1; // TODO: really calculate width
+  props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;
+  props.majorLineWidth = 1; // TODO: really calculate width
+
+  //  take foreground and background offline while updating (is almost twice as fast)
+  var foregroundNextSibling = foreground.nextSibling;
+  var backgroundNextSibling = background.nextSibling;
+  foreground.parentNode && foreground.parentNode.removeChild(foreground);
+  background.parentNode && background.parentNode.removeChild(background);
+
+  foreground.style.height = this.props.height + 'px';
+
+  this._repaintLabels();
+
+  // put DOM online again (at the same place)
+  if (foregroundNextSibling) {
+    parent.insertBefore(foreground, foregroundNextSibling);
+  } else {
+    parent.appendChild(foreground);
+  }
+  if (backgroundNextSibling) {
+    this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);
+  } else {
+    this.body.dom.backgroundVertical.appendChild(background);
+  }
+  return this._isResized() || parentChanged;
+};
+
+/**
+ * Repaint major and minor text labels and vertical grid lines
+ * @private
+ */
+TimeAxis.prototype._repaintLabels = function () {
+  var orientation = this.options.orientation.axis;
+
+  // calculate range and step (step such that we have space for 7 characters per label)
+  var start = util.convert(this.body.range.start, 'Number');
+  var end = util.convert(this.body.range.end, 'Number');
+  var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf();
+  var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize);
+  minimumStep -= this.body.util.toTime(0).valueOf();
+
+  var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates, this.options);
+  step.setMoment(this.options.moment);
+  if (this.options.format) {
+    step.setFormat(this.options.format);
+  }
+  if (this.options.timeAxis) {
+    step.setScale(this.options.timeAxis);
+  }
+  this.step = step;
+
+  // Move all DOM elements to a "redundant" list, where they
+  // can be picked for re-use, and clear the lists with lines and texts.
+  // At the end of the function _repaintLabels, left over elements will be cleaned up
+  var dom = this.dom;
+  dom.redundant.lines = dom.lines;
+  dom.redundant.majorTexts = dom.majorTexts;
+  dom.redundant.minorTexts = dom.minorTexts;
+  dom.lines = [];
+  dom.majorTexts = [];
+  dom.minorTexts = [];
+
+  var current; // eslint-disable-line no-unused-vars
+  var next;
+  var x;
+  var xNext;
+  var isMajor;
+  var nextIsMajor; // eslint-disable-line no-unused-vars
+  var showMinorGrid;
+  var width = 0,
+      prevWidth;
+  var line;
+  var labelMinor;
+  var xFirstMajorLabel = undefined;
+  var count = 0;
+  var MAX = 1000;
+  var className;
+
+  step.start();
+  next = step.getCurrent();
+  xNext = this.body.util.toScreen(next);
+  while (step.hasNext() && count < MAX) {
+    count++;
+
+    isMajor = step.isMajor();
+    className = step.getClassName();
+    labelMinor = step.getLabelMinor();
+
+    current = next;
+    x = xNext;
+
+    step.next();
+    next = step.getCurrent();
+    nextIsMajor = step.isMajor();
+    xNext = this.body.util.toScreen(next);
+
+    prevWidth = width;
+    width = xNext - x;
+    switch (step.scale) {
+      case 'week':
+        showMinorGrid = true;break;
+      default:
+        showMinorGrid = width >= prevWidth * 0.4;break; // prevent displaying of the 31th of the month on a scale of 5 days
+    }
+
+    if (this.options.showMinorLabels && showMinorGrid) {
+      var label = this._repaintMinorText(x, labelMinor, orientation, className);
+      label.style.width = width + 'px'; // set width to prevent overflow
+    }
+
+    if (isMajor && this.options.showMajorLabels) {
+      if (x > 0) {
+        if (xFirstMajorLabel == undefined) {
+          xFirstMajorLabel = x;
+        }
+        label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className);
+      }
+      line = this._repaintMajorLine(x, width, orientation, className);
+    } else {
+      // minor line
+      if (showMinorGrid) {
+        line = this._repaintMinorLine(x, width, orientation, className);
+      } else {
+        if (line) {
+          // adjust the width of the previous grid
+          line.style.width = parseInt(line.style.width) + width + 'px';
+        }
+      }
+    }
+  }
+
+  if (count === MAX && !warnedForOverflow) {
+    console.warn('Something is wrong with the Timeline scale. Limited drawing of grid lines to ' + MAX + ' lines.');
+    warnedForOverflow = true;
+  }
+
+  // create a major label on the left when needed
+  if (this.options.showMajorLabels) {
+    var leftTime = this.body.util.toTime(0),
+        leftText = step.getLabelMajor(leftTime),
+        widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation
+
+    if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {
+      this._repaintMajorText(0, leftText, orientation, className);
+    }
+  }
+
+  // Cleanup leftover DOM elements from the redundant list
+  util.forEach(this.dom.redundant, function (arr) {
+    while (arr.length) {
+      var elem = arr.pop();
+      if (elem && elem.parentNode) {
+        elem.parentNode.removeChild(elem);
+      }
+    }
+  });
+};
+
+/**
+ * Create a minor label for the axis at position x
+ * @param {number} x
+ * @param {string} text
+ * @param {string} orientation   "top" or "bottom" (default)
+ * @param {string} className
+ * @return {Element} Returns the HTML element of the created label
+ * @private
+ */
+TimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) {
+  // reuse redundant label
+  var label = this.dom.redundant.minorTexts.shift();
+
+  if (!label) {
+    // create new label
+    var content = document.createTextNode('');
+    label = document.createElement('div');
+    label.appendChild(content);
+    this.dom.foreground.appendChild(label);
+  }
+  this.dom.minorTexts.push(label);
+  label.innerHTML = text;
+
+  label.style.top = orientation == 'top' ? this.props.majorLabelHeight + 'px' : '0';
+
+  if (this.options.rtl) {
+    label.style.left = "";
+    label.style.right = x + 'px';
+  } else {
+    label.style.left = x + 'px';
+  }
+  label.className = 'vis-text vis-minor ' + className;
+  //label.title = title;  // TODO: this is a heavy operation
+
+  return label;
+};
+
+/**
+ * Create a Major label for the axis at position x
+ * @param {number} x
+ * @param {string} text
+ * @param {string} orientation   "top" or "bottom" (default)
+ * @param {string} className
+ * @return {Element} Returns the HTML element of the created label
+ * @private
+ */
+TimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) {
+  // reuse redundant label
+  var label = this.dom.redundant.majorTexts.shift();
+
+  if (!label) {
+    // create label
+    var content = document.createElement('div');
+    label = document.createElement('div');
+    label.appendChild(content);
+    this.dom.foreground.appendChild(label);
+  }
+
+  label.childNodes[0].innerHTML = text;
+  label.className = 'vis-text vis-major ' + className;
+  //label.title = title; // TODO: this is a heavy operation
+
+  label.style.top = orientation == 'top' ? '0' : this.props.minorLabelHeight + 'px';
+  if (this.options.rtl) {
+    label.style.left = "";
+    label.style.right = x + 'px';
+  } else {
+    label.style.left = x + 'px';
+  }
+
+  this.dom.majorTexts.push(label);
+  return label;
+};
+
+/**
+ * Create a minor line for the axis at position x
+ * @param {number} x
+ * @param {number} width
+ * @param {string} orientation   "top" or "bottom" (default)
+ * @param {string} className
+ * @return {Element} Returns the created line
+ * @private
+ */
+TimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) {
+  // reuse redundant line
+  var line = this.dom.redundant.lines.shift();
+  if (!line) {
+    // create vertical line
+    line = document.createElement('div');
+    this.dom.background.appendChild(line);
+  }
+  this.dom.lines.push(line);
+
+  var props = this.props;
+  if (orientation == 'top') {
+    line.style.top = props.majorLabelHeight + 'px';
+  } else {
+    line.style.top = this.body.domProps.top.height + 'px';
+  }
+  line.style.height = props.minorLineHeight + 'px';
+  if (this.options.rtl) {
+    line.style.left = "";
+    line.style.right = x - props.minorLineWidth / 2 + 'px';
+    line.className = 'vis-grid vis-vertical-rtl vis-minor ' + className;
+  } else {
+    line.style.left = x - props.minorLineWidth / 2 + 'px';
+    line.className = 'vis-grid vis-vertical vis-minor ' + className;
+  }
+  line.style.width = width + 'px';
+
+  return line;
+};
+
+/**
+ * Create a Major line for the axis at position x
+ * @param {number} x
+ * @param {number} width
+ * @param {string} orientation   "top" or "bottom" (default)
+ * @param {string} className
+ * @return {Element} Returns the created line
+ * @private
+ */
+TimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) {
+  // reuse redundant line
+  var line = this.dom.redundant.lines.shift();
+  if (!line) {
+    // create vertical line
+    line = document.createElement('div');
+    this.dom.background.appendChild(line);
+  }
+  this.dom.lines.push(line);
+
+  var props = this.props;
+  if (orientation == 'top') {
+    line.style.top = '0';
+  } else {
+    line.style.top = this.body.domProps.top.height + 'px';
+  }
+
+  if (this.options.rtl) {
+    line.style.left = "";
+    line.style.right = x - props.majorLineWidth / 2 + 'px';
+    line.className = 'vis-grid vis-vertical-rtl vis-major ' + className;
+  } else {
+    line.style.left = x - props.majorLineWidth / 2 + 'px';
+    line.className = 'vis-grid vis-vertical vis-major ' + className;
+  }
+
+  line.style.height = props.majorLineHeight + 'px';
+  line.style.width = width + 'px';
+
+  return line;
+};
+
+/**
+ * Determine the size of text on the axis (both major and minor axis).
+ * The size is calculated only once and then cached in this.props.
+ * @private
+ */
+TimeAxis.prototype._calculateCharSize = function () {
+  // Note: We calculate char size with every redraw. Size may change, for
+  // example when any of the timelines parents had display:none for example.
+
+  // determine the char width and height on the minor axis
+  if (!this.dom.measureCharMinor) {
+    this.dom.measureCharMinor = document.createElement('DIV');
+    this.dom.measureCharMinor.className = 'vis-text vis-minor vis-measure';
+    this.dom.measureCharMinor.style.position = 'absolute';
+
+    this.dom.measureCharMinor.appendChild(document.createTextNode('0'));
+    this.dom.foreground.appendChild(this.dom.measureCharMinor);
+  }
+  this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;
+  this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;
+
+  // determine the char width and height on the major axis
+  if (!this.dom.measureCharMajor) {
+    this.dom.measureCharMajor = document.createElement('DIV');
+    this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure';
+    this.dom.measureCharMajor.style.position = 'absolute';
+
+    this.dom.measureCharMajor.appendChild(document.createTextNode('0'));
+    this.dom.foreground.appendChild(this.dom.measureCharMajor);
+  }
+  this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;
+  this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;
+};
+
+var warnedForOverflow = false;
+
+module.exports = TimeAxis;
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Hammer = __webpack_require__(10);
+var util = __webpack_require__(2);
+var Component = __webpack_require__(16);
+var moment = __webpack_require__(9);
+var locales = __webpack_require__(98);
+
+/**
+ * A custom time bar
+ * @param {{range: Range, dom: Object}} body
+ * @param {Object} [options]        Available parameters:
+ *                                  {number | string} id
+ *                                  {string} locales
+ *                                  {string} locale
+ * @constructor CustomTime
+ * @extends Component
+ */
+function CustomTime(body, options) {
+  this.body = body;
+
+  // default options
+  this.defaultOptions = {
+    moment: moment,
+    locales: locales,
+    locale: 'en',
+    id: undefined,
+    title: undefined
+  };
+  this.options = util.extend({}, this.defaultOptions);
+
+  if (options && options.time) {
+    this.customTime = options.time;
+  } else {
+    this.customTime = new Date();
+  }
+
+  this.eventParams = {}; // stores state parameters while dragging the bar
+
+  this.setOptions(options);
+
+  // create the DOM
+  this._create();
+}
+
+CustomTime.prototype = new Component();
+
+/**
+ * Set options for the component. Options will be merged in current options.
+ * @param {Object} options  Available parameters:
+ *                                  {number | string} id
+ *                                  {string} locales
+ *                                  {string} locale
+ */
+CustomTime.prototype.setOptions = function (options) {
+  if (options) {
+    // copy all options that we know
+    util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options);
+  }
+};
+
+/**
+ * Create the DOM for the custom time
+ * @private
+ */
+CustomTime.prototype._create = function () {
+  var bar = document.createElement('div');
+  bar['custom-time'] = this;
+  bar.className = 'vis-custom-time ' + (this.options.id || '');
+  bar.style.position = 'absolute';
+  bar.style.top = '0px';
+  bar.style.height = '100%';
+  this.bar = bar;
+
+  var drag = document.createElement('div');
+  drag.style.position = 'relative';
+  drag.style.top = '0px';
+  drag.style.left = '-10px';
+  drag.style.height = '100%';
+  drag.style.width = '20px';
+
+  /**
+   *
+   * @param {WheelEvent} e
+   */
+  function onMouseWheel(e) {
+    this.body.range._onMouseWheel(e);
+  }
+
+  if (drag.addEventListener) {
+    // IE9, Chrome, Safari, Opera
+    drag.addEventListener("mousewheel", onMouseWheel.bind(this), false);
+    // Firefox
+    drag.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false);
+  } else {
+    // IE 6/7/8
+    drag.attachEvent("onmousewheel", onMouseWheel.bind(this));
+  }
+
+  bar.appendChild(drag);
+  // attach event listeners
+  this.hammer = new Hammer(drag);
+  this.hammer.on('panstart', this._onDragStart.bind(this));
+  this.hammer.on('panmove', this._onDrag.bind(this));
+  this.hammer.on('panend', this._onDragEnd.bind(this));
+  this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL });
+};
+
+/**
+ * Destroy the CustomTime bar
+ */
+CustomTime.prototype.destroy = function () {
+  this.hide();
+
+  this.hammer.destroy();
+  this.hammer = null;
+
+  this.body = null;
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+CustomTime.prototype.redraw = function () {
+  var parent = this.body.dom.backgroundVertical;
+  if (this.bar.parentNode != parent) {
+    // attach to the dom
+    if (this.bar.parentNode) {
+      this.bar.parentNode.removeChild(this.bar);
+    }
+    parent.appendChild(this.bar);
+  }
+
+  var x = this.body.util.toScreen(this.customTime);
+
+  var locale = this.options.locales[this.options.locale];
+  if (!locale) {
+    if (!this.warned) {
+      console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization');
+      this.warned = true;
+    }
+    locale = this.options.locales['en']; // fall back on english when not available
+  }
+
+  var title = this.options.title;
+  // To hide the title completely use empty string ''.
+  if (title === undefined) {
+    title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss');
+    title = title.charAt(0).toUpperCase() + title.substring(1);
+  } else if (typeof title === "function") {
+    title = title.call(this.customTime);
+  }
+
+  this.bar.style.left = x + 'px';
+  this.bar.title = title;
+
+  return false;
+};
+
+/**
+ * Remove the CustomTime from the DOM
+ */
+CustomTime.prototype.hide = function () {
+  // remove the line from the DOM
+  if (this.bar.parentNode) {
+    this.bar.parentNode.removeChild(this.bar);
+  }
+};
+
+/**
+ * Set custom time.
+ * @param {Date | number | string} time
+ */
+CustomTime.prototype.setCustomTime = function (time) {
+  this.customTime = util.convert(time, 'Date');
+  this.redraw();
+};
+
+/**
+ * Retrieve the current custom time.
+ * @return {Date} customTime
+ */
+CustomTime.prototype.getCustomTime = function () {
+  return new Date(this.customTime.valueOf());
+};
+
+/**
+  * Set custom title.
+  * @param {Date | number | string} title
+  */
+CustomTime.prototype.setCustomTitle = function (title) {
+  this.options.title = title;
+};
+
+/**
+ * Start moving horizontally
+ * @param {Event} event
+ * @private
+ */
+CustomTime.prototype._onDragStart = function (event) {
+  this.eventParams.dragging = true;
+  this.eventParams.customTime = this.customTime;
+
+  event.stopPropagation();
+};
+
+/**
+ * Perform moving operating.
+ * @param {Event} event
+ * @private
+ */
+CustomTime.prototype._onDrag = function (event) {
+  if (!this.eventParams.dragging) return;
+
+  var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX;
+  var time = this.body.util.toTime(x);
+
+  this.setCustomTime(time);
+
+  // fire a timechange event
+  this.body.emitter.emit('timechange', {
+    id: this.options.id,
+    time: new Date(this.customTime.valueOf()),
+    event: event
+  });
+
+  event.stopPropagation();
+};
+
+/**
+ * Stop moving operating.
+ * @param {Event} event
+ * @private
+ */
+CustomTime.prototype._onDragEnd = function (event) {
+  if (!this.eventParams.dragging) return;
+
+  // fire a timechanged event
+  this.body.emitter.emit('timechanged', {
+    id: this.options.id,
+    time: new Date(this.customTime.valueOf()),
+    event: event
+  });
+
+  event.stopPropagation();
+};
+
+/**
+ * Find a custom time from an event target:
+ * searches for the attribute 'custom-time' in the event target's element tree
+ * @param {Event} event
+ * @return {CustomTime | null} customTime
+ */
+CustomTime.customTimeFromTarget = function (event) {
+  var target = event.target;
+  while (target) {
+    if (target.hasOwnProperty('custom-time')) {
+      return target['custom-time'];
+    }
+    target = target.parentNode;
+  }
+
+  return null;
+};
+
+module.exports = CustomTime;
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+
+var Label = __webpack_require__(117)['default'];
+var ComponentUtil = __webpack_require__(48)['default'];
+var Box = __webpack_require__(193)['default'];
+var Circle = __webpack_require__(200)['default'];
+var CircularImage = __webpack_require__(201)['default'];
+var Database = __webpack_require__(202)['default'];
+var Diamond = __webpack_require__(203)['default'];
+var Dot = __webpack_require__(204)['default'];
+var Ellipse = __webpack_require__(205)['default'];
+var Icon = __webpack_require__(206)['default'];
+var Image = __webpack_require__(207)['default'];
+var Square = __webpack_require__(208)['default'];
+var Hexagon = __webpack_require__(209)['default'];
+var Star = __webpack_require__(210)['default'];
+var Text = __webpack_require__(211)['default'];
+var Triangle = __webpack_require__(212)['default'];
+var TriangleDown = __webpack_require__(213)['default'];
+
+var _require = __webpack_require__(15),
+    printStyle = _require.printStyle;
+
+/**
+ * A node. A node can be connected to other nodes via one or multiple edges.
+ */
+
+
+var Node = function () {
+  /**
+   *
+   * @param {object} options An object containing options for the node. All
+   *                            options are optional, except for the id.
+   *                              {number} id     Id of the node. Required
+   *                              {string} label  Text label for the node
+   *                              {number} x      Horizontal position of the node
+   *                              {number} y      Vertical position of the node
+   *                              {string} shape  Node shape
+   *                              {string} image  An image url
+   *                              {string} title  A title text, can be HTML
+   *                              {anytype} group A group name or number
+   *
+   * @param {Object} body               Shared state of current network instance
+   * @param {Network.Images} imagelist  A list with images. Only needed when the node has an image
+   * @param {Groups} grouplist          A list with groups. Needed for retrieving group options
+   * @param {Object} globalOptions      Current global node options; these serve as defaults for the node instance
+   * @param {Object} defaultOptions     Global default options for nodes; note that this is also the prototype
+   *                                    for parameter `globalOptions`.
+   */
+  function Node(options, body, imagelist, grouplist, globalOptions, defaultOptions) {
+    (0, _classCallCheck3['default'])(this, Node);
+
+    this.options = util.bridgeObject(globalOptions);
+    this.globalOptions = globalOptions;
+    this.defaultOptions = defaultOptions;
+    this.body = body;
+
+    this.edges = []; // all edges connected to this node
+
+    // set defaults for the options
+    this.id = undefined;
+    this.imagelist = imagelist;
+    this.grouplist = grouplist;
+
+    // state options
+    this.x = undefined;
+    this.y = undefined;
+    this.baseSize = this.options.size;
+    this.baseFontSize = this.options.font.size;
+    this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate
+    this.selected = false;
+    this.hover = false;
+
+    this.labelModule = new Label(this.body, this.options, false /* Not edge label */);
+    this.setOptions(options);
+  }
+
+  /**
+   * Attach a edge to the node
+   * @param {Edge} edge
+   */
+
+
+  (0, _createClass3['default'])(Node, [{
+    key: 'attachEdge',
+    value: function attachEdge(edge) {
+      if (this.edges.indexOf(edge) === -1) {
+        this.edges.push(edge);
+      }
+    }
+
+    /**
+     * Detach a edge from the node
+     *
+     * @param {Edge} edge
+     */
+
+  }, {
+    key: 'detachEdge',
+    value: function detachEdge(edge) {
+      var index = this.edges.indexOf(edge);
+      if (index != -1) {
+        this.edges.splice(index, 1);
+      }
+    }
+
+    /**
+     * Set or overwrite options for the node
+     *
+     * @param {Object} options an object with options
+     * @returns {null|boolean}
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      var currentShape = this.options.shape;
+      if (!options) {
+        return; // Note that the return value will be 'undefined'! This is OK.
+      }
+
+      // basic options
+      if (options.id !== undefined) {
+        this.id = options.id;
+      }
+
+      if (this.id === undefined) {
+        throw new Error("Node must have an id");
+      }
+
+      Node.checkMass(options, this.id);
+
+      // set these options locally
+      // clear x and y positions
+      if (options.x !== undefined) {
+        if (options.x === null) {
+          this.x = undefined;this.predefinedPosition = false;
+        } else {
+          this.x = parseInt(options.x);this.predefinedPosition = true;
+        }
+      }
+      if (options.y !== undefined) {
+        if (options.y === null) {
+          this.y = undefined;this.predefinedPosition = false;
+        } else {
+          this.y = parseInt(options.y);this.predefinedPosition = true;
+        }
+      }
+      if (options.size !== undefined) {
+        this.baseSize = options.size;
+      }
+      if (options.value !== undefined) {
+        options.value = parseFloat(options.value);
+      }
+
+      // this transforms all shorthands into fully defined options
+      Node.parseOptions(this.options, options, true, this.globalOptions, this.grouplist);
+
+      var pile = [options, this.options, this.defaultOptions];
+      this.chooser = ComponentUtil.choosify('node', pile);
+
+      this._load_images();
+      this.updateLabelModule(options);
+      this.updateShape(currentShape);
+
+      return options.hidden !== undefined || options.physics !== undefined;
+    }
+
+    /**
+     * Load the images from the options, for the nodes that need them.
+     *
+     * TODO: The imageObj members should be moved to CircularImageBase.
+     *       It's the only place where they are required.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_load_images',
+    value: function _load_images() {
+      // Don't bother loading for nodes without images
+      if (this.options.shape !== 'circularImage' && this.options.shape !== 'image') {
+        return;
+      }
+
+      if (this.options.image === undefined) {
+        throw new Error("Option image must be defined for node type '" + this.options.shape + "'");
+      }
+
+      if (this.imagelist === undefined) {
+        throw new Error("Internal Error: No images provided");
+      }
+
+      if (typeof this.options.image === 'string') {
+        this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage, this.id);
+      } else {
+        if (this.options.image.unselected === undefined) {
+          throw new Error("No unselected image provided");
+        }
+
+        this.imageObj = this.imagelist.load(this.options.image.unselected, this.options.brokenImage, this.id);
+
+        if (this.options.image.selected !== undefined) {
+          this.imageObjAlt = this.imagelist.load(this.options.image.selected, this.options.brokenImage, this.id);
+        } else {
+          this.imageObjAlt = undefined;
+        }
+      }
+    }
+
+    /**
+     * Copy group option values into the node options.
+     *
+     * The group options override the global node options, so the copy of group options
+     *  must happen *after* the global node options have been set.
+     *
+     * This method must also be called also if the global node options have changed and the group options did not.
+     *
+     * @param {Object} parentOptions
+     * @param {Object} newOptions  new values for the options, currently only passed in for check
+     * @param {Object} groupList
+     */
+
+  }, {
+    key: 'getFormattingValues',
+
+
+    /**
+     *
+     * @returns {{color: *, borderWidth: *, borderColor: *, size: *, borderDashes: (boolean|Array|allOptions.nodes.shapeProperties.borderDashes|{boolean, array}), borderRadius: (number|allOptions.nodes.shapeProperties.borderRadius|{number}|Array), shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *}}
+     */
+    value: function getFormattingValues() {
+      var values = {
+        color: this.options.color.background,
+        borderWidth: this.options.borderWidth,
+        borderColor: this.options.color.border,
+        size: this.options.size,
+        borderDashes: this.options.shapeProperties.borderDashes,
+        borderRadius: this.options.shapeProperties.borderRadius,
+        shadow: this.options.shadow.enabled,
+        shadowColor: this.options.shadow.color,
+        shadowSize: this.options.shadow.size,
+        shadowX: this.options.shadow.x,
+        shadowY: this.options.shadow.y
+      };
+      if (this.selected || this.hover) {
+        if (this.chooser === true) {
+          if (this.selected) {
+            values.borderWidth *= 2;
+            values.color = this.options.color.highlight.background;
+            values.borderColor = this.options.color.highlight.border;
+            values.shadow = this.options.shadow.enabled;
+          } else if (this.hover) {
+            values.color = this.options.color.hover.background;
+            values.borderColor = this.options.color.hover.border;
+            values.shadow = this.options.shadow.enabled;
+          }
+        } else if (typeof this.chooser === 'function') {
+          this.chooser(values, this.options.id, this.selected, this.hover);
+          if (values.shadow === false) {
+            if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) {
+              values.shadow = true;
+            }
+          }
+        }
+      } else {
+        values.shadow = this.options.shadow.enabled;
+      }
+      return values;
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'updateLabelModule',
+    value: function updateLabelModule(options) {
+      if (this.options.label === undefined || this.options.label === null) {
+        this.options.label = '';
+      }
+
+      Node.updateGroupOptions(this.options, options, this.grouplist);
+
+      //
+      // Note:The prototype chain for this.options is:
+      //
+      // this.options ->    NodesHandler.options    -> NodesHandler.defaultOptions
+      //                 (also: this.globalOptions)
+      //
+      // Note that the prototypes are mentioned explicitly in the pile list below;
+      // WE DON'T WANT THE ORDER OF THE PROTOTYPES!!!! At least, not for font handling of labels.
+      // This is a good indication that the prototype usage of options is deficient.
+      //
+      var currentGroup = this.grouplist.get(this.options.group, false);
+      var pile = [options, // new options
+      this.options, // current node options, see comment above for prototype
+      currentGroup, // group options, if any
+      this.globalOptions, // Currently set global node options
+      this.defaultOptions // Default global node options
+      ];
+      this.labelModule.update(this.options, pile);
+
+      if (this.labelModule.baseSize !== undefined) {
+        this.baseFontSize = this.labelModule.baseSize;
+      }
+    }
+
+    /**
+     *
+     * @param {string} currentShape
+     */
+
+  }, {
+    key: 'updateShape',
+    value: function updateShape(currentShape) {
+      if (currentShape === this.options.shape && this.shape) {
+        this.shape.setOptions(this.options, this.imageObj, this.imageObjAlt);
+      } else {
+        // choose draw method depending on the shape
+        switch (this.options.shape) {
+          case 'box':
+            this.shape = new Box(this.options, this.body, this.labelModule);
+            break;
+          case 'circle':
+            this.shape = new Circle(this.options, this.body, this.labelModule);
+            break;
+          case 'circularImage':
+            this.shape = new CircularImage(this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt);
+            break;
+          case 'database':
+            this.shape = new Database(this.options, this.body, this.labelModule);
+            break;
+          case 'diamond':
+            this.shape = new Diamond(this.options, this.body, this.labelModule);
+            break;
+          case 'dot':
+            this.shape = new Dot(this.options, this.body, this.labelModule);
+            break;
+          case 'ellipse':
+            this.shape = new Ellipse(this.options, this.body, this.labelModule);
+            break;
+          case 'icon':
+            this.shape = new Icon(this.options, this.body, this.labelModule);
+            break;
+          case 'image':
+            this.shape = new Image(this.options, this.body, this.labelModule, this.imageObj, this.imageObjAlt);
+            break;
+          case 'square':
+            this.shape = new Square(this.options, this.body, this.labelModule);
+            break;
+          case 'hexagon':
+            this.shape = new Hexagon(this.options, this.body, this.labelModule);
+            break;
+          case 'star':
+            this.shape = new Star(this.options, this.body, this.labelModule);
+            break;
+          case 'text':
+            this.shape = new Text(this.options, this.body, this.labelModule);
+            break;
+          case 'triangle':
+            this.shape = new Triangle(this.options, this.body, this.labelModule);
+            break;
+          case 'triangleDown':
+            this.shape = new TriangleDown(this.options, this.body, this.labelModule);
+            break;
+          default:
+            this.shape = new Ellipse(this.options, this.body, this.labelModule);
+            break;
+        }
+      }
+      this.needsRefresh();
+    }
+
+    /**
+     * select this node
+     */
+
+  }, {
+    key: 'select',
+    value: function select() {
+      this.selected = true;
+      this.needsRefresh();
+    }
+
+    /**
+     * unselect this node
+     */
+
+  }, {
+    key: 'unselect',
+    value: function unselect() {
+      this.selected = false;
+      this.needsRefresh();
+    }
+
+    /**
+     * Reset the calculated size of the node, forces it to recalculate its size
+     */
+
+  }, {
+    key: 'needsRefresh',
+    value: function needsRefresh() {
+      this.shape.refreshNeeded = true;
+    }
+
+    /**
+     * get the title of this node.
+     * @return {string} title    The title of the node, or undefined when no title
+     *                           has been set.
+     */
+
+  }, {
+    key: 'getTitle',
+    value: function getTitle() {
+      return this.options.title;
+    }
+
+    /**
+     * Calculate the distance to the border of the Node
+     * @param {CanvasRenderingContext2D}   ctx
+     * @param {number} angle        Angle in radians
+     * @returns {number} distance   Distance to the border in pixels
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this.shape.distanceToBorder(ctx, angle);
+    }
+
+    /**
+     * Check if this node has a fixed x and y position
+     * @return {boolean}      true if fixed, false if not
+     */
+
+  }, {
+    key: 'isFixed',
+    value: function isFixed() {
+      return this.options.fixed.x && this.options.fixed.y;
+    }
+
+    /**
+     * check if this node is selecte
+     * @return {boolean} selected   True if node is selected, else false
+     */
+
+  }, {
+    key: 'isSelected',
+    value: function isSelected() {
+      return this.selected;
+    }
+
+    /**
+     * Retrieve the value of the node. Can be undefined
+     * @return {number} value
+     */
+
+  }, {
+    key: 'getValue',
+    value: function getValue() {
+      return this.options.value;
+    }
+
+    /**
+     * Get the current dimensions of the label
+     *
+     * @return {rect}
+     */
+
+  }, {
+    key: 'getLabelSize',
+    value: function getLabelSize() {
+      return this.labelModule.size();
+    }
+
+    /**
+     * Adjust the value range of the node. The node will adjust it's size
+     * based on its value.
+     * @param {number} min
+     * @param {number} max
+     * @param {number} total
+     */
+
+  }, {
+    key: 'setValueRange',
+    value: function setValueRange(min, max, total) {
+      if (this.options.value !== undefined) {
+        var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);
+        var sizeDiff = this.options.scaling.max - this.options.scaling.min;
+        if (this.options.scaling.label.enabled === true) {
+          var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;
+          this.options.font.size = this.options.scaling.label.min + scale * fontDiff;
+        }
+        this.options.size = this.options.scaling.min + scale * sizeDiff;
+      } else {
+        this.options.size = this.baseSize;
+        this.options.font.size = this.baseFontSize;
+      }
+
+      this.updateLabelModule();
+    }
+
+    /**
+     * Draw this node in the given canvas
+     * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d");
+     * @param {CanvasRenderingContext2D}   ctx
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx) {
+      var values = this.getFormattingValues();
+      this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values);
+    }
+
+    /**
+     * Update the bounding box of the shape
+     * @param {CanvasRenderingContext2D}   ctx
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(ctx) {
+      this.shape.updateBoundingBox(this.x, this.y, ctx);
+    }
+
+    /**
+     * Recalculate the size of this node in the given canvas
+     * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d");
+     * @param {CanvasRenderingContext2D}   ctx
+     */
+
+  }, {
+    key: 'resize',
+    value: function resize(ctx) {
+      var values = this.getFormattingValues();
+      this.shape.resize(ctx, this.selected, this.hover, values);
+    }
+
+    /**
+     * Determine all visual elements of this node instance, in which the given
+     * point falls within the bounding shape.
+     *
+     * @param {point} point
+     * @returns {Array.<nodeClickItem|nodeLabelClickItem>} list with the items which are on the point
+     */
+
+  }, {
+    key: 'getItemsOnPoint',
+    value: function getItemsOnPoint(point) {
+      var ret = [];
+
+      if (this.labelModule.visible()) {
+        if (ComponentUtil.pointInRect(this.labelModule.getSize(), point)) {
+          ret.push({ nodeId: this.id, labelId: 0 });
+        }
+      }
+
+      if (ComponentUtil.pointInRect(this.shape.boundingBox, point)) {
+        ret.push({ nodeId: this.id });
+      }
+
+      return ret;
+    }
+
+    /**
+     * Check if this object is overlapping with the provided object
+     * @param {Object} obj   an object with parameters left, top, right, bottom
+     * @return {boolean}     True if location is located on node
+     */
+
+  }, {
+    key: 'isOverlappingWith',
+    value: function isOverlappingWith(obj) {
+      return this.shape.left < obj.right && this.shape.left + this.shape.width > obj.left && this.shape.top < obj.bottom && this.shape.top + this.shape.height > obj.top;
+    }
+
+    /**
+     * Check if this object is overlapping with the provided object
+     * @param {Object} obj   an object with parameters left, top, right, bottom
+     * @return {boolean}     True if location is located on node
+     */
+
+  }, {
+    key: 'isBoundingBoxOverlappingWith',
+    value: function isBoundingBoxOverlappingWith(obj) {
+      return this.shape.boundingBox.left < obj.right && this.shape.boundingBox.right > obj.left && this.shape.boundingBox.top < obj.bottom && this.shape.boundingBox.bottom > obj.top;
+    }
+
+    /**
+    * Check valid values for mass
+    *
+    * The mass may not be negative or zero. If it is, reset to 1
+    *
+    * @param {object} options
+    * @param {Node.id} id
+     * @static
+    */
+
+  }], [{
+    key: 'updateGroupOptions',
+    value: function updateGroupOptions(parentOptions, newOptions, groupList) {
+      if (groupList === undefined) return; // No groups, nothing to do
+
+      var group = parentOptions.group;
+
+      // paranoia: the selected group is already merged into node options, check.
+      if (newOptions !== undefined && newOptions.group !== undefined && group !== newOptions.group) {
+        throw new Error("updateGroupOptions: group values in options don't match.");
+      }
+
+      var hasGroup = typeof group === 'number' || typeof group === 'string' && group != '';
+      if (!hasGroup) return; // current node has no group, no need to merge
+
+      var groupObj = groupList.get(group);
+
+      // Skip merging of group font options into parent; these are required to be distinct for labels
+      // TODO: It might not be a good idea either to merge the rest of the options, investigate this. 
+      util.selectiveNotDeepExtend(['font'], parentOptions, groupObj);
+
+      // the color object needs to be completely defined.
+      // Since groups can partially overwrite the colors, we parse it again, just in case.
+      parentOptions.color = util.parseColor(parentOptions.color);
+    }
+
+    /**
+     * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.
+     * Static so it can also be used by the handler.
+     *
+     * @param {Object} parentOptions
+     * @param {Object} newOptions
+     * @param {boolean} [allowDeletion=false]
+     * @param {Object} [globalOptions={}]
+     * @param {Object} [groupList]
+     * @static
+     */
+
+  }, {
+    key: 'parseOptions',
+    value: function parseOptions(parentOptions, newOptions) {
+      var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+      var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+      var groupList = arguments[4];
+
+
+      var fields = ['color', 'fixed', 'shadow'];
+      util.selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);
+
+      Node.checkMass(newOptions);
+
+      // merge the shadow options into the parent.
+      util.mergeOptions(parentOptions, newOptions, 'shadow', globalOptions);
+
+      // individual shape newOptions
+      if (newOptions.color !== undefined && newOptions.color !== null) {
+        var parsedColor = util.parseColor(newOptions.color);
+        util.fillIfDefined(parentOptions.color, parsedColor);
+      } else if (allowDeletion === true && newOptions.color === null) {
+        parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options
+      }
+
+      // handle the fixed options
+      if (newOptions.fixed !== undefined && newOptions.fixed !== null) {
+        if (typeof newOptions.fixed === 'boolean') {
+          parentOptions.fixed.x = newOptions.fixed;
+          parentOptions.fixed.y = newOptions.fixed;
+        } else {
+          if (newOptions.fixed.x !== undefined && typeof newOptions.fixed.x === 'boolean') {
+            parentOptions.fixed.x = newOptions.fixed.x;
+          }
+          if (newOptions.fixed.y !== undefined && typeof newOptions.fixed.y === 'boolean') {
+            parentOptions.fixed.y = newOptions.fixed.y;
+          }
+        }
+      }
+
+      if (allowDeletion === true && newOptions.font === null) {
+        parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options
+      }
+
+      Node.updateGroupOptions(parentOptions, newOptions, groupList);
+
+      // handle the scaling options, specifically the label part
+      if (newOptions.scaling !== undefined) {
+        util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', globalOptions.scaling);
+      }
+    }
+  }, {
+    key: 'checkMass',
+    value: function checkMass(options, id) {
+      if (options.mass !== undefined && options.mass <= 0) {
+        var strId = '';
+        if (id !== undefined) {
+          strId = ' in node id: ' + id;
+        }
+        console.log('%cNegative or zero mass disallowed' + strId + ', setting mass to 1.', printStyle);
+        options.mass = 1;
+      }
+    }
+  }]);
+  return Node;
+}();
+
+exports['default'] = Node;
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Definitions for param's in jsdoc.
+ * These are more or less global within Network. Putting them here until I can figure out
+ * where to really put them
+ * 
+ * @typedef {string|number} Id
+ * @typedef {Id} NodeId
+ * @typedef {Id} EdgeId
+ * @typedef {Id} LabelId
+ *
+ * @typedef {{x: number, y: number}} point
+ * @typedef {{left: number, top: number, width: number, height: number}} rect
+ * @typedef {{x: number, y:number, angle: number}} rotationPoint
+ *   - point to rotate around and the angle in radians to rotate. angle == 0 means no rotation
+ * @typedef {{nodeId:NodeId}} nodeClickItem
+ * @typedef {{nodeId:NodeId, labelId:LabelId}} nodeLabelClickItem
+ * @typedef {{edgeId:EdgeId}} edgeClickItem
+ * @typedef {{edgeId:EdgeId, labelId:LabelId}} edgeLabelClickItem
+ */
+
+var util = __webpack_require__(2);
+
+/**
+ * Helper functions for components
+ * @class
+ */
+
+var ComponentUtil = function () {
+  function ComponentUtil() {
+    (0, _classCallCheck3['default'])(this, ComponentUtil);
+  }
+
+  (0, _createClass3['default'])(ComponentUtil, null, [{
+    key: 'choosify',
+
+    /**
+     * Determine values to use for (sub)options of 'chosen'.
+     *
+     * This option is either a boolean or an object whose values should be examined further.
+     * The relevant structures are:
+     *
+     * - chosen: <boolean value>
+     * - chosen: { subOption: <boolean or function> }
+     *
+     * Where subOption is 'node', 'edge' or 'label'.
+     *
+     * The intention of this method appears to be to set a specific priority to the options;
+     * Since most properties are either bridged or merged into the local options objects, there
+     * is not much point in handling them separately.
+     * TODO: examine if 'most' in previous sentence can be replaced with 'all'. In that case, we
+     *       should be able to get rid of this method.
+     *
+     * @param {string}  subOption  option within object 'chosen' to consider; either 'node', 'edge' or 'label'
+     * @param {Object}  pile       array of options objects to consider
+     * 
+     * @return {boolean|function}  value for passed subOption of 'chosen' to use
+     */
+    value: function choosify(subOption, pile) {
+      // allowed values for subOption
+      var allowed = ['node', 'edge', 'label'];
+      var value = true;
+
+      var chosen = util.topMost(pile, 'chosen');
+      if (typeof chosen === 'boolean') {
+        value = chosen;
+      } else if ((typeof chosen === 'undefined' ? 'undefined' : (0, _typeof3['default'])(chosen)) === 'object') {
+        if (allowed.indexOf(subOption) === -1) {
+          throw new Error('choosify: subOption \'' + subOption + '\' should be one of ' + "'" + allowed.join("', '") + "'");
+        }
+
+        var chosenEdge = util.topMost(pile, ['chosen', subOption]);
+        if (typeof chosenEdge === 'boolean' || typeof chosenEdge === 'function') {
+          value = chosenEdge;
+        }
+      }
+
+      return value;
+    }
+
+    /**
+     * Check if the point falls within the given rectangle.
+     *
+     * @param {rect} rect
+     * @param {point} point
+     * @param {rotationPoint} [rotationPoint] if specified, the rotation that applies to the rectangle.
+     * @returns {boolean}  true if point within rectangle, false otherwise
+     * @static
+     */
+
+  }, {
+    key: 'pointInRect',
+    value: function pointInRect(rect, point, rotationPoint) {
+      if (rect.width <= 0 || rect.height <= 0) {
+        return false; // early out
+      }
+
+      if (rotationPoint !== undefined) {
+        // Rotate the point the same amount as the rectangle
+        var tmp = {
+          x: point.x - rotationPoint.x,
+          y: point.y - rotationPoint.y
+        };
+
+        if (rotationPoint.angle !== 0) {
+          // In order to get the coordinates the same, you need to 
+          // rotate in the reverse direction
+          var angle = -rotationPoint.angle;
+
+          var tmp2 = {
+            x: Math.cos(angle) * tmp.x - Math.sin(angle) * tmp.y,
+            y: Math.sin(angle) * tmp.x + Math.cos(angle) * tmp.y
+          };
+          point = tmp2;
+        } else {
+          point = tmp;
+        }
+
+        // Note that if a rotation is specified, the rectangle coordinates
+        // are **not* the full canvas coordinates. They are relative to the
+        // rotationPoint. Hence, the point coordinates need not be translated
+        // back in this case.
+      }
+
+      var right = rect.x + rect.width;
+      var bottom = rect.y + rect.width;
+
+      return rect.left < point.x && right > point.x && rect.top < point.y && bottom > point.y;
+    }
+
+    /**
+     * Check if given value is acceptable as a label text.
+     *
+     * @param {*} text value to check; can be anything at this point
+     * @returns {boolean} true if valid label value, false otherwise
+     */
+
+  }, {
+    key: 'isValidLabel',
+    value: function isValidLabel(text) {
+      // Note that this is quite strict: types that *might* be converted to string are disallowed
+      return typeof text === 'string' && text !== '';
+    }
+  }]);
+  return ComponentUtil;
+}();
+
+exports['default'] = ComponentUtil;
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(125);
+var global = __webpack_require__(18);
+var hide = __webpack_require__(26);
+var Iterators = __webpack_require__(31);
+var TO_STRING_TAG = __webpack_require__(13)('toStringTag');
+
+var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
+  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
+  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
+  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
+  'TextTrackList,TouchList').split(',');
+
+for (var i = 0; i < DOMIterables.length; i++) {
+  var NAME = DOMIterables[i];
+  var Collection = global[NAME];
+  var proto = Collection && Collection.prototype;
+  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
+  Iterators[NAME] = Iterators.Array;
+}
+
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports) {
+
+var toString = {}.toString;
+
+module.exports = function (it) {
+  return toString.call(it).slice(8, -1);
+};
+
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports) {
+
+// 7.2.1 RequireObjectCoercible(argument)
+module.exports = function (it) {
+  if (it == undefined) throw TypeError("Can't call method on  " + it);
+  return it;
+};
+
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports) {
+
+module.exports = true;
+
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.1 ToPrimitive(input [, PreferredType])
+var isObject = __webpack_require__(32);
+// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+// and the second argument - flag - preferred type is a string
+module.exports = function (it, S) {
+  if (!isObject(it)) return it;
+  var fn, val;
+  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+  throw TypeError("Can't convert object to primitive value");
+};
+
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var anObject = __webpack_require__(27);
+var dPs = __webpack_require__(130);
+var enumBugKeys = __webpack_require__(58);
+var IE_PROTO = __webpack_require__(56)('IE_PROTO');
+var Empty = function () { /* empty */ };
+var PROTOTYPE = 'prototype';
+
+// Create object with fake `null` prototype: use iframe Object with cleared prototype
+var createDict = function () {
+  // Thrash, waste and sodomy: IE GC bug
+  var iframe = __webpack_require__(82)('iframe');
+  var i = enumBugKeys.length;
+  var lt = '<';
+  var gt = '>';
+  var iframeDocument;
+  iframe.style.display = 'none';
+  __webpack_require__(134).appendChild(iframe);
+  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+  // createDict = iframe.contentWindow.Object;
+  // html.removeChild(iframe);
+  iframeDocument = iframe.contentWindow.document;
+  iframeDocument.open();
+  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+  iframeDocument.close();
+  createDict = iframeDocument.F;
+  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
+  return createDict();
+};
+
+module.exports = Object.create || function create(O, Properties) {
+  var result;
+  if (O !== null) {
+    Empty[PROTOTYPE] = anObject(O);
+    result = new Empty();
+    Empty[PROTOTYPE] = null;
+    // add "__proto__" for Object.getPrototypeOf polyfill
+    result[IE_PROTO] = O;
+  } else result = createDict();
+  return Properties === undefined ? result : dPs(result, Properties);
+};
+
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports) {
+
+// 7.1.4 ToInteger
+var ceil = Math.ceil;
+var floor = Math.floor;
+module.exports = function (it) {
+  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+};
+
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var shared = __webpack_require__(57)('keys');
+var uid = __webpack_require__(40);
+module.exports = function (key) {
+  return shared[key] || (shared[key] = uid(key));
+};
+
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(18);
+var SHARED = '__core-js_shared__';
+var store = global[SHARED] || (global[SHARED] = {});
+module.exports = function (key) {
+  return store[key] || (store[key] = {});
+};
+
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports) {
+
+// IE 8- don't enum bug keys
+module.exports = (
+  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+).split(',');
+
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var def = __webpack_require__(20).f;
+var has = __webpack_require__(22);
+var TAG = __webpack_require__(13)('toStringTag');
+
+module.exports = function (it, tag, stat) {
+  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+};
+
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var $at = __webpack_require__(135)(true);
+
+// 21.1.3.27 String.prototype[@@iterator]()
+__webpack_require__(79)(String, 'String', function (iterated) {
+  this._t = String(iterated); // target
+  this._i = 0;                // next index
+// 21.1.5.2.1 %StringIteratorPrototype%.next()
+}, function () {
+  var O = this._t;
+  var index = this._i;
+  var point;
+  if (index >= O.length) return { value: undefined, done: true };
+  point = $at(O, index);
+  this._i += point.length;
+  return { value: point, done: false };
+});
+
+
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
+
+exports.f = __webpack_require__(13);
+
+
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var global = __webpack_require__(18);
+var core = __webpack_require__(7);
+var LIBRARY = __webpack_require__(52);
+var wksExt = __webpack_require__(61);
+var defineProperty = __webpack_require__(20).f;
+module.exports = function (name) {
+  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
+};
+
+
+/***/ }),
+/* 63 */
+/***/ (function(module, exports) {
+
+exports.f = Object.getOwnPropertySymbols;
+
+
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var moment = __webpack_require__(9);
+var Component = __webpack_require__(16);
+var DateUtil = __webpack_require__(36);
+
+/**
+ * A Range controls a numeric range with a start and end value.
+ * The Range adjusts the range based on mouse events or programmatic changes,
+ * and triggers events when the range is changing or has been changed.
+ * @param {{dom: Object, domProps: Object, emitter: Emitter}} body
+ * @param {Object} [options]    See description at Range.setOptions
+ * @constructor Range
+ * @extends Component
+ */
+function Range(body, options) {
+  var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0);
+  var start = now.clone().add(-3, 'days').valueOf();
+  var end = now.clone().add(3, 'days').valueOf();
+  this.millisecondsPerPixelCache = undefined;
+
+  if (options === undefined) {
+    this.start = start;
+    this.end = end;
+  } else {
+    this.start = options.start || start;
+    this.end = options.end || end;
+  }
+
+  this.rolling = false;
+
+  this.body = body;
+  this.deltaDifference = 0;
+  this.scaleOffset = 0;
+  this.startToFront = false;
+  this.endToFront = true;
+
+  // default options
+  this.defaultOptions = {
+    rtl: false,
+    start: null,
+    end: null,
+    moment: moment,
+    direction: 'horizontal', // 'horizontal' or 'vertical'
+    moveable: true,
+    zoomable: true,
+    min: null,
+    max: null,
+    zoomMin: 10, // milliseconds
+    zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000, // milliseconds
+    rollingMode: {
+      follow: false,
+      offset: 0.5
+    }
+  };
+  this.options = util.extend({}, this.defaultOptions);
+  this.props = {
+    touch: {}
+  };
+  this.animationTimer = null;
+
+  // drag listeners for dragging
+  this.body.emitter.on('panstart', this._onDragStart.bind(this));
+  this.body.emitter.on('panmove', this._onDrag.bind(this));
+  this.body.emitter.on('panend', this._onDragEnd.bind(this));
+
+  // mouse wheel for zooming
+  this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this));
+
+  // pinch to zoom
+  this.body.emitter.on('touch', this._onTouch.bind(this));
+  this.body.emitter.on('pinch', this._onPinch.bind(this));
+
+  // on click of rolling mode button
+  this.body.dom.rollingModeBtn.addEventListener('click', this.startRolling.bind(this));
+
+  this.setOptions(options);
+}
+
+Range.prototype = new Component();
+
+/**
+ * Set options for the range controller
+ * @param {Object} options      Available options:
+ *                              {number | Date | String} start  Start date for the range
+ *                              {number | Date | String} end    End date for the range
+ *                              {number} min    Minimum value for start
+ *                              {number} max    Maximum value for end
+ *                              {number} zoomMin    Set a minimum value for
+ *                                                  (end - start).
+ *                              {number} zoomMax    Set a maximum value for
+ *                                                  (end - start).
+ *                              {boolean} moveable Enable moving of the range
+ *                                                 by dragging. True by default
+ *                              {boolean} zoomable Enable zooming of the range
+ *                                                 by pinching/scrolling. True by default
+ */
+Range.prototype.setOptions = function (options) {
+  if (options) {
+    // copy the options that we know
+    var fields = ['animation', 'direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable', 'moment', 'activate', 'hiddenDates', 'zoomKey', 'rtl', 'showCurrentTime', 'rollingMode', 'horizontalScroll'];
+    util.selectiveExtend(fields, this.options, options);
+
+    if (options.rollingMode && options.rollingMode.follow) {
+      this.startRolling();
+    }
+    if ('start' in options || 'end' in options) {
+      // apply a new range. both start and end are optional
+      this.setRange(options.start, options.end);
+    }
+  }
+};
+
+/**
+ * Test whether direction has a valid value
+ * @param {string} direction    'horizontal' or 'vertical'
+ */
+function validateDirection(direction) {
+  if (direction != 'horizontal' && direction != 'vertical') {
+    throw new TypeError('Unknown direction "' + direction + '". ' + 'Choose "horizontal" or "vertical".');
+  }
+}
+
+/**
+ * Start auto refreshing the current time bar
+ */
+Range.prototype.startRolling = function () {
+  var me = this;
+
+  /**
+   *  Updates the current time.
+   */
+  function update() {
+    me.stopRolling();
+    me.rolling = true;
+
+    var interval = me.end - me.start;
+    var t = util.convert(new Date(), 'Date').valueOf();
+
+    var start = t - interval * me.options.rollingMode.offset;
+    var end = t + interval * (1 - me.options.rollingMode.offset);
+
+    var options = {
+      animation: false
+    };
+    me.setRange(start, end, options);
+
+    // determine interval to refresh
+    var scale = me.conversion(me.body.domProps.center.width).scale;
+    interval = 1 / scale / 10;
+    if (interval < 30) interval = 30;
+    if (interval > 1000) interval = 1000;
+
+    me.body.dom.rollingModeBtn.style.visibility = "hidden";
+    // start a renderTimer to adjust for the new time
+    me.currentTimeTimer = setTimeout(update, interval);
+  }
+
+  update();
+};
+
+/**
+ * Stop auto refreshing the current time bar
+ */
+Range.prototype.stopRolling = function () {
+  if (this.currentTimeTimer !== undefined) {
+    clearTimeout(this.currentTimeTimer);
+    this.rolling = false;
+    this.body.dom.rollingModeBtn.style.visibility = "visible";
+  }
+};
+
+/**
+ * Set a new start and end range
+ * @param {Date | number | string} [start]
+ * @param {Date | number | string} [end]
+ * @param {Object} options      Available options:
+ *                              {boolean | {duration: number, easingFunction: string}} [animation=false]
+ *                                    If true, the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ *                              {boolean} [byUser=false]
+ *                              {Event}  event  Mouse event
+ * @param {Function} callback     a callback function to be executed at the end of this function  
+ * @param {Function} frameCallback    a callback function executed each frame of the range animation.
+ *                                    The callback will be passed three parameters:
+ *                                    {number} easeCoefficient    an easing coefficent
+ *                                    {boolean} willDraw          If true the caller will redraw after the callback completes
+ *                                    {boolean} done              If true then animation is ending after the current frame
+ */
+
+Range.prototype.setRange = function (start, end, options, callback, frameCallback) {
+  if (!options) {
+    options = {};
+  }
+  if (options.byUser !== true) {
+    options.byUser = false;
+  }
+  var me = this;
+  var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null;
+  var finalEnd = end != undefined ? util.convert(end, 'Date').valueOf() : null;
+  this._cancelAnimation();
+  this.millisecondsPerPixelCache = undefined;
+
+  if (options.animation) {
+    // true or an Object
+    var initStart = this.start;
+    var initEnd = this.end;
+    var duration = (0, _typeof3['default'])(options.animation) === 'object' && 'duration' in options.animation ? options.animation.duration : 500;
+    var easingName = (0, _typeof3['default'])(options.animation) === 'object' && 'easingFunction' in options.animation ? options.animation.easingFunction : 'easeInOutQuad';
+    var easingFunction = util.easingFunctions[easingName];
+    if (!easingFunction) {
+      throw new Error('Unknown easing function ' + (0, _stringify2['default'])(easingName) + '. ' + 'Choose from: ' + (0, _keys2['default'])(util.easingFunctions).join(', '));
+    }
+
+    var initTime = new Date().valueOf();
+    var anyChanged = false;
+
+    var next = function next() {
+      if (!me.props.touch.dragging) {
+        var now = new Date().valueOf();
+        var time = now - initTime;
+        var ease = easingFunction(time / duration);
+        var done = time > duration;
+        var s = done || finalStart === null ? finalStart : initStart + (finalStart - initStart) * ease;
+        var e = done || finalEnd === null ? finalEnd : initEnd + (finalEnd - initEnd) * ease;
+
+        changed = me._applyRange(s, e);
+        DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates);
+        anyChanged = anyChanged || changed;
+
+        var params = {
+          start: new Date(me.start),
+          end: new Date(me.end),
+          byUser: options.byUser,
+          event: options.event
+        };
+
+        if (frameCallback) {
+          frameCallback(ease, changed, done);
+        }
+
+        if (changed) {
+          me.body.emitter.emit('rangechange', params);
+        }
+
+        if (done) {
+          if (anyChanged) {
+            me.body.emitter.emit('rangechanged', params);
+            if (callback) {
+              return callback();
+            }
+          }
+        } else {
+          // animate with as high as possible frame rate, leave 20 ms in between
+          // each to prevent the browser from blocking
+          me.animationTimer = setTimeout(next, 20);
+        }
+      }
+    };
+
+    return next();
+  } else {
+    var changed = this._applyRange(finalStart, finalEnd);
+    DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);
+    if (changed) {
+      var params = {
+        start: new Date(this.start),
+        end: new Date(this.end),
+        byUser: options.byUser,
+        event: options.event
+      };
+
+      this.body.emitter.emit('rangechange', params);
+      clearTimeout(me.timeoutID);
+      me.timeoutID = setTimeout(function () {
+        me.body.emitter.emit('rangechanged', params);
+      }, 200);
+      if (callback) {
+        return callback();
+      }
+    }
+  }
+};
+
+/**
+ * Get the number of milliseconds per pixel.
+ *
+ * @returns {undefined|number}
+ */
+Range.prototype.getMillisecondsPerPixel = function () {
+  if (this.millisecondsPerPixelCache === undefined) {
+    this.millisecondsPerPixelCache = (this.end - this.start) / this.body.dom.center.clientWidth;
+  }
+  return this.millisecondsPerPixelCache;
+};
+
+/**
+ * Stop an animation
+ * @private
+ */
+Range.prototype._cancelAnimation = function () {
+  if (this.animationTimer) {
+    clearTimeout(this.animationTimer);
+    this.animationTimer = null;
+  }
+};
+
+/**
+ * Set a new start and end range. This method is the same as setRange, but
+ * does not trigger a range change and range changed event, and it returns
+ * true when the range is changed
+ * @param {number} [start]
+ * @param {number} [end]
+ * @return {boolean} changed
+ * @private
+ */
+Range.prototype._applyRange = function (start, end) {
+  var newStart = start != null ? util.convert(start, 'Date').valueOf() : this.start,
+      newEnd = end != null ? util.convert(end, 'Date').valueOf() : this.end,
+      max = this.options.max != null ? util.convert(this.options.max, 'Date').valueOf() : null,
+      min = this.options.min != null ? util.convert(this.options.min, 'Date').valueOf() : null,
+      diff;
+
+  // check for valid number
+  if (isNaN(newStart) || newStart === null) {
+    throw new Error('Invalid start "' + start + '"');
+  }
+  if (isNaN(newEnd) || newEnd === null) {
+    throw new Error('Invalid end "' + end + '"');
+  }
+
+  // prevent end < start
+  if (newEnd < newStart) {
+    newEnd = newStart;
+  }
+
+  // prevent start < min
+  if (min !== null) {
+    if (newStart < min) {
+      diff = min - newStart;
+      newStart += diff;
+      newEnd += diff;
+
+      // prevent end > max
+      if (max != null) {
+        if (newEnd > max) {
+          newEnd = max;
+        }
+      }
+    }
+  }
+
+  // prevent end > max
+  if (max !== null) {
+    if (newEnd > max) {
+      diff = newEnd - max;
+      newStart -= diff;
+      newEnd -= diff;
+
+      // prevent start < min
+      if (min != null) {
+        if (newStart < min) {
+          newStart = min;
+        }
+      }
+    }
+  }
+
+  // prevent (end-start) < zoomMin
+  if (this.options.zoomMin !== null) {
+    var zoomMin = parseFloat(this.options.zoomMin);
+    if (zoomMin < 0) {
+      zoomMin = 0;
+    }
+    if (newEnd - newStart < zoomMin) {
+      // compensate for a scale of 0.5 ms
+      var compensation = 0.5;
+      if (this.end - this.start === zoomMin && newStart >= this.start - compensation && newEnd <= this.end) {
+        // ignore this action, we are already zoomed to the minimum
+        newStart = this.start;
+        newEnd = this.end;
+      } else {
+        // zoom to the minimum
+        diff = zoomMin - (newEnd - newStart);
+        newStart -= diff / 2;
+        newEnd += diff / 2;
+      }
+    }
+  }
+
+  // prevent (end-start) > zoomMax
+  if (this.options.zoomMax !== null) {
+    var zoomMax = parseFloat(this.options.zoomMax);
+    if (zoomMax < 0) {
+      zoomMax = 0;
+    }
+
+    if (newEnd - newStart > zoomMax) {
+      if (this.end - this.start === zoomMax && newStart < this.start && newEnd > this.end) {
+        // ignore this action, we are already zoomed to the maximum
+        newStart = this.start;
+        newEnd = this.end;
+      } else {
+        // zoom to the maximum
+        diff = newEnd - newStart - zoomMax;
+        newStart += diff / 2;
+        newEnd -= diff / 2;
+      }
+    }
+  }
+
+  var changed = this.start != newStart || this.end != newEnd;
+
+  // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range)
+  if (!(newStart >= this.start && newStart <= this.end || newEnd >= this.start && newEnd <= this.end) && !(this.start >= newStart && this.start <= newEnd || this.end >= newStart && this.end <= newEnd)) {
+    this.body.emitter.emit('checkRangedItems');
+  }
+
+  this.start = newStart;
+  this.end = newEnd;
+  return changed;
+};
+
+/**
+ * Retrieve the current range.
+ * @return {Object} An object with start and end properties
+ */
+Range.prototype.getRange = function () {
+  return {
+    start: this.start,
+    end: this.end
+  };
+};
+
+/**
+ * Calculate the conversion offset and scale for current range, based on
+ * the provided width
+ * @param {number} width
+ * @param {number} [totalHidden=0]
+ * @returns {{offset: number, scale: number}} conversion
+ */
+Range.prototype.conversion = function (width, totalHidden) {
+  return Range.conversion(this.start, this.end, width, totalHidden);
+};
+
+/**
+ * Static method to calculate the conversion offset and scale for a range,
+ * based on the provided start, end, and width
+ * @param {number} start
+ * @param {number} end
+ * @param {number} width
+ * @param {number} [totalHidden=0]
+ * @returns {{offset: number, scale: number}} conversion
+ */
+Range.conversion = function (start, end, width, totalHidden) {
+  if (totalHidden === undefined) {
+    totalHidden = 0;
+  }
+  if (width != 0 && end - start != 0) {
+    return {
+      offset: start,
+      scale: width / (end - start - totalHidden)
+    };
+  } else {
+    return {
+      offset: 0,
+      scale: 1
+    };
+  }
+};
+
+/**
+ * Start dragging horizontally or vertically
+ * @param {Event} event
+ * @private
+ */
+Range.prototype._onDragStart = function (event) {
+  this.deltaDifference = 0;
+  this.previousDelta = 0;
+
+  // only allow dragging when configured as movable
+  if (!this.options.moveable) return;
+
+  // only start dragging when the mouse is inside the current range
+  if (!this._isInsideRange(event)) return;
+
+  // refuse to drag when we where pinching to prevent the timeline make a jump
+  // when releasing the fingers in opposite order from the touch screen
+  if (!this.props.touch.allowDragging) return;
+
+  this.stopRolling();
+
+  this.props.touch.start = this.start;
+  this.props.touch.end = this.end;
+  this.props.touch.dragging = true;
+
+  if (this.body.dom.root) {
+    this.body.dom.root.style.cursor = 'move';
+  }
+};
+
+/**
+ * Perform dragging operation
+ * @param {Event} event
+ * @private
+ */
+Range.prototype._onDrag = function (event) {
+  if (!event) return;
+
+  if (!this.props.touch.dragging) return;
+
+  // only allow dragging when configured as movable
+  if (!this.options.moveable) return;
+
+  // TODO: this may be redundant in hammerjs2
+  // refuse to drag when we where pinching to prevent the timeline make a jump
+  // when releasing the fingers in opposite order from the touch screen
+  if (!this.props.touch.allowDragging) return;
+
+  var direction = this.options.direction;
+  validateDirection(direction);
+  var delta = direction == 'horizontal' ? event.deltaX : event.deltaY;
+  delta -= this.deltaDifference;
+  var interval = this.props.touch.end - this.props.touch.start;
+
+  // normalize dragging speed if cutout is in between.
+  var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);
+  interval -= duration;
+
+  var width = direction == 'horizontal' ? this.body.domProps.center.width : this.body.domProps.center.height;
+  var diffRange;
+  if (this.options.rtl) {
+    diffRange = delta / width * interval;
+  } else {
+    diffRange = -delta / width * interval;
+  }
+
+  var newStart = this.props.touch.start + diffRange;
+  var newEnd = this.props.touch.end + diffRange;
+
+  // snapping times away from hidden zones
+  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta - delta, true);
+  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta - delta, true);
+  if (safeStart != newStart || safeEnd != newEnd) {
+    this.deltaDifference += delta;
+    this.props.touch.start = safeStart;
+    this.props.touch.end = safeEnd;
+    this._onDrag(event);
+    return;
+  }
+
+  this.previousDelta = delta;
+  this._applyRange(newStart, newEnd);
+
+  var startDate = new Date(this.start);
+  var endDate = new Date(this.end);
+
+  // fire a rangechange event
+  this.body.emitter.emit('rangechange', {
+    start: startDate,
+    end: endDate,
+    byUser: true,
+    event: event
+  });
+
+  // fire a panmove event
+  this.body.emitter.emit('panmove');
+};
+
+/**
+ * Stop dragging operation
+ * @param {event} event
+ * @private
+ */
+Range.prototype._onDragEnd = function (event) {
+  if (!this.props.touch.dragging) return;
+
+  // only allow dragging when configured as movable
+  if (!this.options.moveable) return;
+
+  // TODO: this may be redundant in hammerjs2
+  // refuse to drag when we where pinching to prevent the timeline make a jump
+  // when releasing the fingers in opposite order from the touch screen
+  if (!this.props.touch.allowDragging) return;
+
+  this.props.touch.dragging = false;
+  if (this.body.dom.root) {
+    this.body.dom.root.style.cursor = 'auto';
+  }
+
+  // fire a rangechanged event
+  this.body.emitter.emit('rangechanged', {
+    start: new Date(this.start),
+    end: new Date(this.end),
+    byUser: true,
+    event: event
+  });
+};
+
+/**
+ * Event handler for mouse wheel event, used to zoom
+ * Code from http://adomas.org/javascript-mouse-wheel/
+ * @param {Event} event
+ * @private
+ */
+Range.prototype._onMouseWheel = function (event) {
+  // retrieve delta
+  var delta = 0;
+  if (event.wheelDelta) {
+    /* IE/Opera. */
+    delta = event.wheelDelta / 120;
+  } else if (event.detail) {
+    /* Mozilla case. */
+    // In Mozilla, sign of delta is different than in IE.
+    // Also, delta is multiple of 3.
+    delta = -event.detail / 3;
+  }
+
+  // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable
+  if (this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable || !this.options.zoomable && this.options.moveable) {
+    return;
+  }
+
+  // only allow zooming when configured as zoomable and moveable
+  if (!(this.options.zoomable && this.options.moveable)) return;
+
+  // only zoom when the mouse is inside the current range
+  if (!this._isInsideRange(event)) return;
+
+  // If delta is nonzero, handle it.
+  // Basically, delta is now positive if wheel was scrolled up,
+  // and negative, if wheel was scrolled down.
+  if (delta) {
+    // perform the zoom action. Delta is normally 1 or -1
+
+    // adjust a negative delta such that zooming in with delta 0.1
+    // equals zooming out with a delta -0.1
+    var scale;
+    if (delta < 0) {
+      scale = 1 - delta / 5;
+    } else {
+      scale = 1 / (1 + delta / 5);
+    }
+
+    // calculate center, the date to zoom around
+    var pointerDate;
+    if (this.rolling) {
+      pointerDate = this.start + (this.end - this.start) * this.options.rollingMode.offset;
+    } else {
+      var pointer = this.getPointer({ x: event.clientX, y: event.clientY }, this.body.dom.center);
+      pointerDate = this._pointerToDate(pointer);
+    }
+    this.zoom(scale, pointerDate, delta, event);
+
+    // Prevent default actions caused by mouse wheel
+    // (else the page and timeline both scroll)
+    event.preventDefault();
+  }
+};
+
+/**
+ * Start of a touch gesture
+ * @param {Event} event
+ * @private
+ */
+Range.prototype._onTouch = function (event) {
+  // eslint-disable-line no-unused-vars
+  this.props.touch.start = this.start;
+  this.props.touch.end = this.end;
+  this.props.touch.allowDragging = true;
+  this.props.touch.center = null;
+  this.scaleOffset = 0;
+  this.deltaDifference = 0;
+  // Disable the browser default handling of this event.
+  util.preventDefault(event);
+};
+
+/**
+ * Handle pinch event
+ * @param {Event} event
+ * @private
+ */
+Range.prototype._onPinch = function (event) {
+  // only allow zooming when configured as zoomable and moveable
+  if (!(this.options.zoomable && this.options.moveable)) return;
+
+  // Disable the browser default handling of this event.
+  util.preventDefault(event);
+
+  this.props.touch.allowDragging = false;
+
+  if (!this.props.touch.center) {
+    this.props.touch.center = this.getPointer(event.center, this.body.dom.center);
+  }
+
+  this.stopRolling();
+
+  var scale = 1 / (event.scale + this.scaleOffset);
+  var centerDate = this._pointerToDate(this.props.touch.center);
+
+  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);
+  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate);
+  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;
+
+  // calculate new start and end
+  var newStart = centerDate - hiddenDurationBefore + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale;
+  var newEnd = centerDate + hiddenDurationAfter + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale;
+
+  // snapping times away from hidden zones
+  this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times
+  this.endToFront = scale - 1 <= 0; // used to do the right auto correction with periodic hidden times
+
+  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true);
+  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true);
+  if (safeStart != newStart || safeEnd != newEnd) {
+    this.props.touch.start = safeStart;
+    this.props.touch.end = safeEnd;
+    this.scaleOffset = 1 - event.scale;
+    newStart = safeStart;
+    newEnd = safeEnd;
+  }
+
+  var options = {
+    animation: false,
+    byUser: true,
+    event: event
+  };
+  this.setRange(newStart, newEnd, options);
+
+  this.startToFront = false; // revert to default
+  this.endToFront = true; // revert to default
+};
+
+/**
+ * Test whether the mouse from a mouse event is inside the visible window,
+ * between the current start and end date
+ * @param {Object} event
+ * @return {boolean} Returns true when inside the visible window
+ * @private
+ */
+Range.prototype._isInsideRange = function (event) {
+  // calculate the time where the mouse is, check whether inside
+  // and no scroll action should happen.
+  var clientX = event.center ? event.center.x : event.clientX;
+  var x;
+  if (this.options.rtl) {
+    x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer);
+  } else {
+    x = util.getAbsoluteRight(this.body.dom.centerContainer) - clientX;
+  }
+  var time = this.body.util.toTime(x);
+
+  return time >= this.start && time <= this.end;
+};
+
+/**
+ * Helper function to calculate the center date for zooming
+ * @param {{x: number, y: number}} pointer
+ * @return {number} date
+ * @private
+ */
+Range.prototype._pointerToDate = function (pointer) {
+  var conversion;
+  var direction = this.options.direction;
+
+  validateDirection(direction);
+
+  if (direction == 'horizontal') {
+    return this.body.util.toTime(pointer.x).valueOf();
+  } else {
+    var height = this.body.domProps.center.height;
+    conversion = this.conversion(height);
+    return pointer.y / conversion.scale + conversion.offset;
+  }
+};
+
+/**
+ * Get the pointer location relative to the location of the dom element
+ * @param {{x: number, y: number}} touch
+ * @param {Element} element   HTML DOM element
+ * @return {{x: number, y: number}} pointer
+ * @private
+ */
+Range.prototype.getPointer = function (touch, element) {
+  if (this.options.rtl) {
+    return {
+      x: util.getAbsoluteRight(element) - touch.x,
+      y: touch.y - util.getAbsoluteTop(element)
+    };
+  } else {
+    return {
+      x: touch.x - util.getAbsoluteLeft(element),
+      y: touch.y - util.getAbsoluteTop(element)
+    };
+  }
+};
+
+/**
+ * Zoom the range the given scale in or out. Start and end date will
+ * be adjusted, and the timeline will be redrawn. You can optionally give a
+ * date around which to zoom.
+ * For example, try scale = 0.9 or 1.1
+ * @param {number} scale      Scaling factor. Values above 1 will zoom out,
+ *                            values below 1 will zoom in.
+ * @param {number} [center]   Value representing a date around which will
+ *                            be zoomed.
+ * @param {number} delta
+ * @param {Event} event
+ */
+Range.prototype.zoom = function (scale, center, delta, event) {
+  // if centerDate is not provided, take it half between start Date and end Date
+  if (center == null) {
+    center = (this.start + this.end) / 2;
+  }
+
+  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);
+  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center);
+  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;
+
+  // calculate new start and end
+  var newStart = center - hiddenDurationBefore + (this.start - (center - hiddenDurationBefore)) * scale;
+  var newEnd = center + hiddenDurationAfter + (this.end - (center + hiddenDurationAfter)) * scale;
+
+  // snapping times away from hidden zones
+  this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times
+  this.endToFront = -delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times
+  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true);
+  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true);
+  if (safeStart != newStart || safeEnd != newEnd) {
+    newStart = safeStart;
+    newEnd = safeEnd;
+  }
+
+  var options = {
+    animation: false,
+    byUser: true,
+    event: event
+  };
+  this.setRange(newStart, newEnd, options);
+
+  this.startToFront = false; // revert to default
+  this.endToFront = true; // revert to default
+};
+
+/**
+ * Move the range with a given delta to the left or right. Start and end
+ * value will be adjusted. For example, try delta = 0.1 or -0.1
+ * @param {number}  delta     Moving amount. Positive value will move right,
+ *                            negative value will move left
+ */
+Range.prototype.move = function (delta) {
+  // zoom start Date and end Date relative to the centerDate
+  var diff = this.end - this.start;
+
+  // apply new values
+  var newStart = this.start + diff * delta;
+  var newEnd = this.end + diff * delta;
+
+  // TODO: reckon with min and max range
+
+  this.start = newStart;
+  this.end = newEnd;
+};
+
+/**
+ * Move the range to a new center point
+ * @param {number} moveTo      New center point of the range
+ */
+Range.prototype.moveTo = function (moveTo) {
+  var center = (this.start + this.end) / 2;
+
+  var diff = center - moveTo;
+
+  // calculate new start and end
+  var newStart = this.start - diff;
+  var newEnd = this.end - diff;
+
+  var options = {
+    animation: false,
+    byUser: true,
+    event: null
+  };
+  this.setRange(newStart, newEnd, options);
+};
+
+module.exports = Range;
+
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Emitter = __webpack_require__(44);
+var Hammer = __webpack_require__(10);
+var hammerUtil = __webpack_require__(37);
+var util = __webpack_require__(2);
+var TimeAxis = __webpack_require__(45);
+var Activator = __webpack_require__(97);
+var DateUtil = __webpack_require__(36);
+var CustomTime = __webpack_require__(46);
+
+/**
+ * Create a timeline visualization
+ * @constructor Core
+ */
+function Core() {}
+
+// turn Core into an event emitter
+Emitter(Core.prototype);
+
+/**
+ * Create the main DOM for the Core: a root panel containing left, right,
+ * top, bottom, content, and background panel.
+ * @param {Element} container  The container element where the Core will
+ *                             be attached.
+ * @protected
+ */
+Core.prototype._create = function (container) {
+  this.dom = {};
+
+  this.dom.container = container;
+
+  this.dom.root = document.createElement('div');
+  this.dom.background = document.createElement('div');
+  this.dom.backgroundVertical = document.createElement('div');
+  this.dom.backgroundHorizontal = document.createElement('div');
+  this.dom.centerContainer = document.createElement('div');
+  this.dom.leftContainer = document.createElement('div');
+  this.dom.rightContainer = document.createElement('div');
+  this.dom.center = document.createElement('div');
+  this.dom.left = document.createElement('div');
+  this.dom.right = document.createElement('div');
+  this.dom.top = document.createElement('div');
+  this.dom.bottom = document.createElement('div');
+  this.dom.shadowTop = document.createElement('div');
+  this.dom.shadowBottom = document.createElement('div');
+  this.dom.shadowTopLeft = document.createElement('div');
+  this.dom.shadowBottomLeft = document.createElement('div');
+  this.dom.shadowTopRight = document.createElement('div');
+  this.dom.shadowBottomRight = document.createElement('div');
+  this.dom.rollingModeBtn = document.createElement('div');
+
+  this.dom.root.className = 'vis-timeline';
+  this.dom.background.className = 'vis-panel vis-background';
+  this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical';
+  this.dom.backgroundHorizontal.className = 'vis-panel vis-background vis-horizontal';
+  this.dom.centerContainer.className = 'vis-panel vis-center';
+  this.dom.leftContainer.className = 'vis-panel vis-left';
+  this.dom.rightContainer.className = 'vis-panel vis-right';
+  this.dom.top.className = 'vis-panel vis-top';
+  this.dom.bottom.className = 'vis-panel vis-bottom';
+  this.dom.left.className = 'vis-content';
+  this.dom.center.className = 'vis-content';
+  this.dom.right.className = 'vis-content';
+  this.dom.shadowTop.className = 'vis-shadow vis-top';
+  this.dom.shadowBottom.className = 'vis-shadow vis-bottom';
+  this.dom.shadowTopLeft.className = 'vis-shadow vis-top';
+  this.dom.shadowBottomLeft.className = 'vis-shadow vis-bottom';
+  this.dom.shadowTopRight.className = 'vis-shadow vis-top';
+  this.dom.shadowBottomRight.className = 'vis-shadow vis-bottom';
+  this.dom.rollingModeBtn.className = 'vis-rolling-mode-btn';
+
+  this.dom.root.appendChild(this.dom.background);
+  this.dom.root.appendChild(this.dom.backgroundVertical);
+  this.dom.root.appendChild(this.dom.backgroundHorizontal);
+  this.dom.root.appendChild(this.dom.centerContainer);
+  this.dom.root.appendChild(this.dom.leftContainer);
+  this.dom.root.appendChild(this.dom.rightContainer);
+  this.dom.root.appendChild(this.dom.top);
+  this.dom.root.appendChild(this.dom.bottom);
+  this.dom.root.appendChild(this.dom.bottom);
+  this.dom.root.appendChild(this.dom.rollingModeBtn);
+
+  this.dom.centerContainer.appendChild(this.dom.center);
+  this.dom.leftContainer.appendChild(this.dom.left);
+  this.dom.rightContainer.appendChild(this.dom.right);
+  this.dom.centerContainer.appendChild(this.dom.shadowTop);
+  this.dom.centerContainer.appendChild(this.dom.shadowBottom);
+  this.dom.leftContainer.appendChild(this.dom.shadowTopLeft);
+  this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft);
+  this.dom.rightContainer.appendChild(this.dom.shadowTopRight);
+  this.dom.rightContainer.appendChild(this.dom.shadowBottomRight);
+
+  // size properties of each of the panels
+  this.props = {
+    root: {},
+    background: {},
+    centerContainer: {},
+    leftContainer: {},
+    rightContainer: {},
+    center: {},
+    left: {},
+    right: {},
+    top: {},
+    bottom: {},
+    border: {},
+    scrollTop: 0,
+    scrollTopMin: 0
+  };
+
+  this.on('rangechange', function () {
+    if (this.initialDrawDone === true) {
+      this._redraw();
+    }
+  }.bind(this));
+  this.on('rangechanged', function () {
+    if (!this.initialRangeChangeDone) {
+      this.initialRangeChangeDone = true;
+    }
+  }.bind(this));
+  this.on('touch', this._onTouch.bind(this));
+  this.on('panmove', this._onDrag.bind(this));
+
+  var me = this;
+  this._origRedraw = this._redraw.bind(this);
+  this._redraw = util.throttle(this._origRedraw);
+
+  this.on('_change', function (properties) {
+    if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) {
+      me._redraw();
+    } else {
+      me._origRedraw();
+    }
+  });
+
+  // create event listeners for all interesting events, these events will be
+  // emitted via emitter
+  this.hammer = new Hammer(this.dom.root);
+  var pinchRecognizer = this.hammer.get('pinch').set({ enable: true });
+  hammerUtil.disablePreventDefaultVertically(pinchRecognizer);
+  this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL });
+  this.listeners = {};
+
+  var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend'
+  // TODO: cleanup
+  //'touch', 'pinch',
+  //'tap', 'doubletap', 'hold',
+  //'dragstart', 'drag', 'dragend',
+  //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox
+  ];
+  events.forEach(function (type) {
+    var listener = function listener(event) {
+      if (me.isActive()) {
+        me.emit(type, event);
+      }
+    };
+    me.hammer.on(type, listener);
+    me.listeners[type] = listener;
+  });
+
+  // emulate a touch event (emitted before the start of a pan, pinch, tap, or press)
+  hammerUtil.onTouch(this.hammer, function (event) {
+    me.emit('touch', event);
+  }.bind(this));
+
+  // emulate a release event (emitted after a pan, pinch, tap, or press)
+  hammerUtil.onRelease(this.hammer, function (event) {
+    me.emit('release', event);
+  }.bind(this));
+
+  /**
+   *
+   * @param {WheelEvent} event
+   */
+  function onMouseWheel(event) {
+    if (this.isActive()) {
+      this.emit('mousewheel', event);
+    }
+
+    // deltaX and deltaY normalization from jquery.mousewheel.js
+    var deltaX = 0;
+    var deltaY = 0;
+
+    // Old school scrollwheel delta
+    if ('detail' in event) {
+      deltaY = event.detail * -1;
+    }
+    if ('wheelDelta' in event) {
+      deltaY = event.wheelDelta;
+    }
+    if ('wheelDeltaY' in event) {
+      deltaY = event.wheelDeltaY;
+    }
+    if ('wheelDeltaX' in event) {
+      deltaX = event.wheelDeltaX * -1;
+    }
+
+    // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
+    if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {
+      deltaX = deltaY * -1;
+      deltaY = 0;
+    }
+
+    // New school wheel delta (wheel event)
+    if ('deltaY' in event) {
+      deltaY = event.deltaY * -1;
+    }
+    if ('deltaX' in event) {
+      deltaX = event.deltaX;
+    }
+
+    // prevent scrolling when zoomKey defined or activated
+    if (!this.options.zoomKey || event[this.options.zoomKey]) return;
+
+    // Prevent default actions caused by mouse wheel
+    // (else the page and timeline both scroll)
+    event.preventDefault();
+
+    if (this.options.verticalScroll && Math.abs(deltaY) >= Math.abs(deltaX)) {
+      var current = this.props.scrollTop;
+      var adjusted = current + deltaY;
+
+      if (this.isActive()) {
+        this._setScrollTop(adjusted);
+        this._redraw();
+        this.emit('scroll', event);
+      }
+    } else if (this.options.horizontalScroll) {
+      var delta = Math.abs(deltaX) >= Math.abs(deltaY) ? deltaX : deltaY;
+
+      // calculate a single scroll jump relative to the range scale
+      var diff = delta / 120 * (this.range.end - this.range.start) / 20;
+      // calculate new start and end
+      var newStart = this.range.start + diff;
+      var newEnd = this.range.end + diff;
+
+      var options = {
+        animation: false,
+        byUser: true,
+        event: event
+      };
+      this.range.setRange(newStart, newEnd, options);
+    }
+  }
+
+  if (this.dom.centerContainer.addEventListener) {
+    // IE9, Chrome, Safari, Opera
+    this.dom.centerContainer.addEventListener("mousewheel", onMouseWheel.bind(this), false);
+    // Firefox
+    this.dom.centerContainer.addEventListener("DOMMouseScroll", onMouseWheel.bind(this), false);
+  } else {
+    // IE 6/7/8
+    this.dom.centerContainer.attachEvent("onmousewheel", onMouseWheel.bind(this));
+  }
+
+  /**
+   *
+   * @param {scroll} event
+   */
+  function onMouseScrollSide(event) {
+    if (!me.options.verticalScroll) return;
+    event.preventDefault();
+    if (me.isActive()) {
+      var adjusted = -event.target.scrollTop;
+      me._setScrollTop(adjusted);
+      me._redraw();
+      me.emit('scrollSide', event);
+    }
+  }
+
+  this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));
+  this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));
+
+  var itemAddedToTimeline = false;
+
+  /**
+   *
+   * @param {dragover} event
+   * @returns {boolean}
+   */
+  function handleDragOver(event) {
+    if (event.preventDefault) {
+      event.preventDefault(); // Necessary. Allows us to drop.
+    }
+
+    // make sure your target is a vis element
+    if (!event.target.className.indexOf("vis") > -1) return;
+
+    // make sure only one item is added every time you're over the timeline
+    if (itemAddedToTimeline) return;
+
+    event.dataTransfer.dropEffect = 'move';
+    itemAddedToTimeline = true;
+    return false;
+  }
+
+  /**
+   *
+   * @param {drop} event
+   * @returns {boolean}
+   */
+  function handleDrop(event) {
+    // prevent redirect to blank page - Firefox
+    if (event.preventDefault) {
+      event.preventDefault();
+    }
+    if (event.stopPropagation) {
+      event.stopPropagation();
+    }
+    // return when dropping non-vis items
+    try {
+      var itemData = JSON.parse(event.dataTransfer.getData("text"));
+      if (!itemData || !itemData.content) return;
+    } catch (err) {
+      return false;
+    }
+
+    itemAddedToTimeline = false;
+    event.center = {
+      x: event.clientX,
+      y: event.clientY
+    };
+
+    if (itemData.target !== 'item') {
+      me.itemSet._onAddItem(event);
+    } else {
+      me.itemSet._onDropObjectOnItem(event);
+    }
+    me.emit('drop', me.getEventProperties(event));
+    return false;
+  }
+
+  this.dom.center.addEventListener('dragover', handleDragOver.bind(this), false);
+  this.dom.center.addEventListener('drop', handleDrop.bind(this), false);
+
+  this.customTimes = [];
+
+  // store state information needed for touch events
+  this.touch = {};
+
+  this.redrawCount = 0;
+  this.initialDrawDone = false;
+  this.initialRangeChangeDone = false;
+
+  // attach the root panel to the provided container
+  if (!container) throw new Error('No container provided');
+  container.appendChild(this.dom.root);
+};
+
+/**
+ * Set options. Options will be passed to all components loaded in the Timeline.
+ * @param {Object} [options]
+ *                           {String} orientation
+ *                              Vertical orientation for the Timeline,
+ *                              can be 'bottom' (default) or 'top'.
+ *                           {string | number} width
+ *                              Width for the timeline, a number in pixels or
+ *                              a css string like '1000px' or '75%'. '100%' by default.
+ *                           {string | number} height
+ *                              Fixed height for the Timeline, a number in pixels or
+ *                              a css string like '400px' or '75%'. If undefined,
+ *                              The Timeline will automatically size such that
+ *                              its contents fit.
+ *                           {string | number} minHeight
+ *                              Minimum height for the Timeline, a number in pixels or
+ *                              a css string like '400px' or '75%'.
+ *                           {string | number} maxHeight
+ *                              Maximum height for the Timeline, a number in pixels or
+ *                              a css string like '400px' or '75%'.
+ *                           {number | Date | string} start
+ *                              Start date for the visible window
+ *                           {number | Date | string} end
+ *                              End date for the visible window
+ */
+Core.prototype.setOptions = function (options) {
+  if (options) {
+    // copy the known options
+    var fields = ['width', 'height', 'minHeight', 'maxHeight', 'autoResize', 'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates', 'locale', 'locales', 'moment', 'rtl', 'zoomKey', 'horizontalScroll', 'verticalScroll'];
+    util.selectiveExtend(fields, this.options, options);
+
+    this.dom.rollingModeBtn.style.visibility = 'hidden';
+
+    if (this.options.rtl) {
+      this.dom.container.style.direction = "rtl";
+      this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical-rtl';
+    }
+
+    if (this.options.verticalScroll) {
+      if (this.options.rtl) {
+        this.dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';
+      } else {
+        this.dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';
+      }
+    }
+
+    if ((0, _typeof3['default'])(this.options.orientation) !== 'object') {
+      this.options.orientation = { item: undefined, axis: undefined };
+    }
+    if ('orientation' in options) {
+      if (typeof options.orientation === 'string') {
+        this.options.orientation = {
+          item: options.orientation,
+          axis: options.orientation
+        };
+      } else if ((0, _typeof3['default'])(options.orientation) === 'object') {
+        if ('item' in options.orientation) {
+          this.options.orientation.item = options.orientation.item;
+        }
+        if ('axis' in options.orientation) {
+          this.options.orientation.axis = options.orientation.axis;
+        }
+      }
+    }
+
+    if (this.options.orientation.axis === 'both') {
+      if (!this.timeAxis2) {
+        var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body);
+        timeAxis2.setOptions = function (options) {
+          var _options = options ? util.extend({}, options) : {};
+          _options.orientation = 'top'; // override the orientation option, always top
+          TimeAxis.prototype.setOptions.call(timeAxis2, _options);
+        };
+        this.components.push(timeAxis2);
+      }
+    } else {
+      if (this.timeAxis2) {
+        var index = this.components.indexOf(this.timeAxis2);
+        if (index !== -1) {
+          this.components.splice(index, 1);
+        }
+        this.timeAxis2.destroy();
+        this.timeAxis2 = null;
+      }
+    }
+
+    // if the graph2d's drawPoints is a function delegate the callback to the onRender property
+    if (typeof options.drawPoints == 'function') {
+      options.drawPoints = {
+        onRender: options.drawPoints
+      };
+    }
+
+    if ('hiddenDates' in this.options) {
+      DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates);
+    }
+
+    if ('clickToUse' in options) {
+      if (options.clickToUse) {
+        if (!this.activator) {
+          this.activator = new Activator(this.dom.root);
+        }
+      } else {
+        if (this.activator) {
+          this.activator.destroy();
+          delete this.activator;
+        }
+      }
+    }
+
+    if ('showCustomTime' in options) {
+      throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])');
+    }
+
+    // enable/disable autoResize
+    this._initAutoResize();
+  }
+
+  // propagate options to all components
+  this.components.forEach(function (component) {
+    return component.setOptions(options);
+  });
+
+  // enable/disable configure
+  if ('configure' in options) {
+    if (!this.configurator) {
+      this.configurator = this._createConfigurator();
+    }
+
+    this.configurator.setOptions(options.configure);
+
+    // collect the settings of all components, and pass them to the configuration system
+    var appliedOptions = util.deepExtend({}, this.options);
+    this.components.forEach(function (component) {
+      util.deepExtend(appliedOptions, component.options);
+    });
+    this.configurator.setModuleOptions({ global: appliedOptions });
+  }
+
+  this._redraw();
+};
+
+/**
+ * Returns true when the Timeline is active.
+ * @returns {boolean}
+ */
+Core.prototype.isActive = function () {
+  return !this.activator || this.activator.active;
+};
+
+/**
+ * Destroy the Core, clean up all DOM elements and event listeners.
+ */
+Core.prototype.destroy = function () {
+  // unbind datasets
+  this.setItems(null);
+  this.setGroups(null);
+
+  // remove all event listeners
+  this.off();
+
+  // stop checking for changed size
+  this._stopAutoResize();
+
+  // remove from DOM
+  if (this.dom.root.parentNode) {
+    this.dom.root.parentNode.removeChild(this.dom.root);
+  }
+  this.dom = null;
+
+  // remove Activator
+  if (this.activator) {
+    this.activator.destroy();
+    delete this.activator;
+  }
+
+  // cleanup hammer touch events
+  for (var event in this.listeners) {
+    if (this.listeners.hasOwnProperty(event)) {
+      delete this.listeners[event];
+    }
+  }
+  this.listeners = null;
+  this.hammer = null;
+
+  // give all components the opportunity to cleanup
+  this.components.forEach(function (component) {
+    return component.destroy();
+  });
+
+  this.body = null;
+};
+
+/**
+ * Set a custom time bar
+ * @param {Date} time
+ * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted.
+ */
+Core.prototype.setCustomTime = function (time, id) {
+  var customTimes = this.customTimes.filter(function (component) {
+    return id === component.options.id;
+  });
+
+  if (customTimes.length === 0) {
+    throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id));
+  }
+
+  if (customTimes.length > 0) {
+    customTimes[0].setCustomTime(time);
+  }
+};
+
+/**
+ * Retrieve the current custom time.
+ * @param {number} [id=undefined]    Id of the custom time bar.
+ * @return {Date | undefined} customTime
+ */
+Core.prototype.getCustomTime = function (id) {
+  var customTimes = this.customTimes.filter(function (component) {
+    return component.options.id === id;
+  });
+
+  if (customTimes.length === 0) {
+    throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id));
+  }
+  return customTimes[0].getCustomTime();
+};
+
+/**
+ * Set a custom title for the custom time bar.
+ * @param {string} [title] Custom title
+ * @param {number} [id=undefined]    Id of the custom time bar.
+ * @returns {*}
+ */
+Core.prototype.setCustomTimeTitle = function (title, id) {
+  var customTimes = this.customTimes.filter(function (component) {
+    return component.options.id === id;
+  });
+
+  if (customTimes.length === 0) {
+    throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id));
+  }
+  if (customTimes.length > 0) {
+    return customTimes[0].setCustomTitle(title);
+  }
+};
+
+/**
+ * Retrieve meta information from an event.
+ * Should be overridden by classes extending Core
+ * @param {Event} event
+ * @return {Object} An object with related information.
+ */
+Core.prototype.getEventProperties = function (event) {
+  return { event: event };
+};
+
+/**
+ * Add custom vertical bar
+ * @param {Date | string | number} [time]  A Date, unix timestamp, or
+ *                                         ISO date string. Time point where
+ *                                         the new bar should be placed.
+ *                                         If not provided, `new Date()` will
+ *                                         be used.
+ * @param {number | string} [id=undefined] Id of the new bar. Optional
+ * @return {number | string}               Returns the id of the new bar
+ */
+Core.prototype.addCustomTime = function (time, id) {
+  var timestamp = time !== undefined ? util.convert(time, 'Date').valueOf() : new Date();
+
+  var exists = this.customTimes.some(function (customTime) {
+    return customTime.options.id === id;
+  });
+  if (exists) {
+    throw new Error('A custom time with id ' + (0, _stringify2['default'])(id) + ' already exists');
+  }
+
+  var customTime = new CustomTime(this.body, util.extend({}, this.options, {
+    time: timestamp,
+    id: id
+  }));
+
+  this.customTimes.push(customTime);
+  this.components.push(customTime);
+  this._redraw();
+
+  return id;
+};
+
+/**
+ * Remove previously added custom bar
+ * @param {int} id ID of the custom bar to be removed
+ * [at]returns {boolean} True if the bar exists and is removed, false otherwise
+ */
+Core.prototype.removeCustomTime = function (id) {
+  var customTimes = this.customTimes.filter(function (bar) {
+    return bar.options.id === id;
+  });
+
+  if (customTimes.length === 0) {
+    throw new Error('No custom time bar found with id ' + (0, _stringify2['default'])(id));
+  }
+
+  customTimes.forEach(function (customTime) {
+    this.customTimes.splice(this.customTimes.indexOf(customTime), 1);
+    this.components.splice(this.components.indexOf(customTime), 1);
+    customTime.destroy();
+  }.bind(this));
+};
+
+/**
+ * Get the id's of the currently visible items.
+ * @returns {Array} The ids of the visible items
+ */
+Core.prototype.getVisibleItems = function () {
+  return this.itemSet && this.itemSet.getVisibleItems() || [];
+};
+
+/**
+ * Set Core window such that it fits all items
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback] a callback funtion to be executed at the end of this function
+ */
+Core.prototype.fit = function (options, callback) {
+  var range = this.getDataRange();
+
+  // skip range set if there is no min and max date
+  if (range.min === null && range.max === null) {
+    return;
+  }
+
+  // apply a margin of 1% left and right of the data
+  var interval = range.max - range.min;
+  var min = new Date(range.min.valueOf() - interval * 0.01);
+  var max = new Date(range.max.valueOf() + interval * 0.01);
+  var animation = options && options.animation !== undefined ? options.animation : true;
+  this.range.setRange(min, max, { animation: animation }, callback);
+};
+
+/**
+ * Calculate the data range of the items start and end dates
+ * [at]returns {{min: [Date], max: [Date]}}
+ * @protected
+ */
+Core.prototype.getDataRange = function () {
+  // must be implemented by Timeline and Graph2d
+  throw new Error('Cannot invoke abstract method getDataRange');
+};
+
+/**
+ * Set the visible window. Both parameters are optional, you can change only
+ * start or only end. Syntax:
+ *
+ *     TimeLine.setWindow(start, end)
+ *     TimeLine.setWindow(start, end, options)
+ *     TimeLine.setWindow(range)
+ *
+ * Where start and end can be a Date, number, or string, and range is an
+ * object with properties start and end.
+ *
+ * @param {Date | number | string | Object} [start] Start date of visible window
+ * @param {Date | number | string} [end]            End date of visible window
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback] a callback funtion to be executed at the end of this function
+ */
+Core.prototype.setWindow = function (start, end, options, callback) {
+  if (typeof arguments[2] == "function") {
+    callback = arguments[2];
+    options = {};
+  }
+  var animation;
+  var range;
+  if (arguments.length == 1) {
+    range = arguments[0];
+    animation = range.animation !== undefined ? range.animation : true;
+    this.range.setRange(range.start, range.end, { animation: animation });
+  } else if (arguments.length == 2 && typeof arguments[1] == "function") {
+    range = arguments[0];
+    callback = arguments[1];
+    animation = range.animation !== undefined ? range.animation : true;
+    this.range.setRange(range.start, range.end, { animation: animation }, callback);
+  } else {
+    animation = options && options.animation !== undefined ? options.animation : true;
+    this.range.setRange(start, end, { animation: animation }, callback);
+  }
+};
+
+/**
+ * Move the window such that given time is centered on screen.
+ * @param {Date | number | string} time
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback] a callback funtion to be executed at the end of this function
+ */
+Core.prototype.moveTo = function (time, options, callback) {
+  if (typeof arguments[1] == "function") {
+    callback = arguments[1];
+    options = {};
+  }
+  var interval = this.range.end - this.range.start;
+  var t = util.convert(time, 'Date').valueOf();
+
+  var start = t - interval / 2;
+  var end = t + interval / 2;
+  var animation = options && options.animation !== undefined ? options.animation : true;
+
+  this.range.setRange(start, end, { animation: animation }, callback);
+};
+
+/**
+ * Get the visible window
+ * @return {{start: Date, end: Date}}   Visible range
+ */
+Core.prototype.getWindow = function () {
+  var range = this.range.getRange();
+  return {
+    start: new Date(range.start),
+    end: new Date(range.end)
+  };
+};
+
+/**
+ * Zoom in the window such that given time is centered on screen.
+ * @param {number} percentage - must be between [0..1]
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback] a callback funtion to be executed at the end of this function
+ */
+Core.prototype.zoomIn = function (percentage, options, callback) {
+  if (!percentage || percentage < 0 || percentage > 1) return;
+  if (typeof arguments[1] == "function") {
+    callback = arguments[1];
+    options = {};
+  }
+  var range = this.getWindow();
+  var start = range.start.valueOf();
+  var end = range.end.valueOf();
+  var interval = end - start;
+  var newInterval = interval / (1 + percentage);
+  var distance = (interval - newInterval) / 2;
+  var newStart = start + distance;
+  var newEnd = end - distance;
+
+  this.setWindow(newStart, newEnd, options, callback);
+};
+
+/**
+ * Zoom out the window such that given time is centered on screen.
+ * @param {number} percentage - must be between [0..1]
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback] a callback funtion to be executed at the end of this function
+ */
+Core.prototype.zoomOut = function (percentage, options, callback) {
+  if (!percentage || percentage < 0 || percentage > 1) return;
+  if (typeof arguments[1] == "function") {
+    callback = arguments[1];
+    options = {};
+  }
+  var range = this.getWindow();
+  var start = range.start.valueOf();
+  var end = range.end.valueOf();
+  var interval = end - start;
+  var newStart = start - interval * percentage / 2;
+  var newEnd = end + interval * percentage / 2;
+
+  this.setWindow(newStart, newEnd, options, callback);
+};
+
+/**
+ * Force a redraw. Can be overridden by implementations of Core
+ *
+ * Note: this function will be overridden on construction with a trottled version
+ */
+Core.prototype.redraw = function () {
+  this._redraw();
+};
+
+/**
+ * Redraw for internal use. Redraws all components. See also the public
+ * method redraw.
+ * @protected
+ */
+Core.prototype._redraw = function () {
+  this.redrawCount++;
+  var resized = false;
+  var options = this.options;
+  var props = this.props;
+  var dom = this.dom;
+
+  if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible
+
+  DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);
+
+  // update class names
+  if (options.orientation == 'top') {
+    util.addClassName(dom.root, 'vis-top');
+    util.removeClassName(dom.root, 'vis-bottom');
+  } else {
+    util.removeClassName(dom.root, 'vis-top');
+    util.addClassName(dom.root, 'vis-bottom');
+  }
+
+  // update root width and height options
+  dom.root.style.maxHeight = util.option.asSize(options.maxHeight, '');
+  dom.root.style.minHeight = util.option.asSize(options.minHeight, '');
+  dom.root.style.width = util.option.asSize(options.width, '');
+
+  // calculate border widths
+  props.border.left = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2;
+  props.border.right = props.border.left;
+  props.border.top = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2;
+  props.border.bottom = props.border.top;
+  props.borderRootHeight = dom.root.offsetHeight - dom.root.clientHeight;
+  props.borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth;
+
+  // workaround for a bug in IE: the clientWidth of an element with
+  // a height:0px and overflow:hidden is not calculated and always has value 0
+  if (dom.centerContainer.clientHeight === 0) {
+    props.border.left = props.border.top;
+    props.border.right = props.border.left;
+  }
+  if (dom.root.clientHeight === 0) {
+    props.borderRootWidth = props.borderRootHeight;
+  }
+
+  // calculate the heights. If any of the side panels is empty, we set the height to
+  // minus the border width, such that the border will be invisible
+  props.center.height = dom.center.offsetHeight;
+  props.left.height = dom.left.offsetHeight;
+  props.right.height = dom.right.offsetHeight;
+  props.top.height = dom.top.clientHeight || -props.border.top;
+  props.bottom.height = dom.bottom.clientHeight || -props.border.bottom;
+
+  // TODO: compensate borders when any of the panels is empty.
+
+  // apply auto height
+  // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM)
+  var contentHeight = Math.max(props.left.height, props.center.height, props.right.height);
+  var autoHeight = props.top.height + contentHeight + props.bottom.height + props.borderRootHeight + props.border.top + props.border.bottom;
+  dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px');
+
+  // calculate heights of the content panels
+  props.root.height = dom.root.offsetHeight;
+  props.background.height = props.root.height - props.borderRootHeight;
+  var containerHeight = props.root.height - props.top.height - props.bottom.height - props.borderRootHeight;
+  props.centerContainer.height = containerHeight;
+  props.leftContainer.height = containerHeight;
+  props.rightContainer.height = props.leftContainer.height;
+
+  // calculate the widths of the panels
+  props.root.width = dom.root.offsetWidth;
+  props.background.width = props.root.width - props.borderRootWidth;
+
+  if (!this.initialDrawDone) {
+    props.scrollbarWidth = util.getScrollBarWidth();
+  }
+
+  if (options.verticalScroll) {
+    if (options.rtl) {
+      props.left.width = dom.leftContainer.clientWidth || -props.border.left;
+      props.right.width = dom.rightContainer.clientWidth + props.scrollbarWidth || -props.border.right;
+    } else {
+      props.left.width = dom.leftContainer.clientWidth + props.scrollbarWidth || -props.border.left;
+      props.right.width = dom.rightContainer.clientWidth || -props.border.right;
+    }
+  } else {
+    props.left.width = dom.leftContainer.clientWidth || -props.border.left;
+    props.right.width = dom.rightContainer.clientWidth || -props.border.right;
+  }
+
+  this._setDOM();
+
+  // update the scrollTop, feasible range for the offset can be changed
+  // when the height of the Core or of the contents of the center changed
+  var offset = this._updateScrollTop();
+
+  // reposition the scrollable contents
+  if (options.orientation.item != 'top') {
+    offset += Math.max(props.centerContainer.height - props.center.height - props.border.top - props.border.bottom, 0);
+  }
+  dom.center.style.top = offset + 'px';
+
+  // show shadows when vertical scrolling is available
+  var visibilityTop = props.scrollTop == 0 ? 'hidden' : '';
+  var visibilityBottom = props.scrollTop == props.scrollTopMin ? 'hidden' : '';
+  dom.shadowTop.style.visibility = visibilityTop;
+  dom.shadowBottom.style.visibility = visibilityBottom;
+  dom.shadowTopLeft.style.visibility = visibilityTop;
+  dom.shadowBottomLeft.style.visibility = visibilityBottom;
+  dom.shadowTopRight.style.visibility = visibilityTop;
+  dom.shadowBottomRight.style.visibility = visibilityBottom;
+
+  if (options.verticalScroll) {
+    dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';
+    dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';
+
+    dom.shadowTopRight.style.visibility = "hidden";
+    dom.shadowBottomRight.style.visibility = "hidden";
+    dom.shadowTopLeft.style.visibility = "hidden";
+    dom.shadowBottomLeft.style.visibility = "hidden";
+
+    dom.left.style.top = '0px';
+    dom.right.style.top = '0px';
+  }
+
+  if (!options.verticalScroll || props.center.height < props.centerContainer.height) {
+    dom.left.style.top = offset + 'px';
+    dom.right.style.top = offset + 'px';
+    dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' ');
+    dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp('(?:^|\\s)' + 'vis-vertical-scroll' + '(?:\\s|$)'), ' ');
+    props.left.width = dom.leftContainer.clientWidth || -props.border.left;
+    props.right.width = dom.rightContainer.clientWidth || -props.border.right;
+    this._setDOM();
+  }
+
+  // enable/disable vertical panning
+  var contentsOverflow = props.center.height > props.centerContainer.height;
+  this.hammer.get('pan').set({
+    direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL
+  });
+
+  // redraw all components
+  this.components.forEach(function (component) {
+    resized = component.redraw() || resized;
+  });
+  var MAX_REDRAW = 5;
+  if (resized) {
+    if (this.redrawCount < MAX_REDRAW) {
+      this.body.emitter.emit('_change');
+      return;
+    } else {
+      console.log('WARNING: infinite loop in redraw?');
+    }
+  } else {
+    this.redrawCount = 0;
+  }
+
+  //Emit public 'changed' event for UI updates, see issue #1592
+  this.body.emitter.emit("changed");
+};
+
+Core.prototype._setDOM = function () {
+  var props = this.props;
+  var dom = this.dom;
+
+  props.leftContainer.width = props.left.width;
+  props.rightContainer.width = props.right.width;
+  var centerWidth = props.root.width - props.left.width - props.right.width - props.borderRootWidth;
+  props.center.width = centerWidth;
+  props.centerContainer.width = centerWidth;
+  props.top.width = centerWidth;
+  props.bottom.width = centerWidth;
+
+  // resize the panels
+  dom.background.style.height = props.background.height + 'px';
+  dom.backgroundVertical.style.height = props.background.height + 'px';
+  dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px';
+  dom.centerContainer.style.height = props.centerContainer.height + 'px';
+  dom.leftContainer.style.height = props.leftContainer.height + 'px';
+  dom.rightContainer.style.height = props.rightContainer.height + 'px';
+
+  dom.background.style.width = props.background.width + 'px';
+  dom.backgroundVertical.style.width = props.centerContainer.width + 'px';
+  dom.backgroundHorizontal.style.width = props.background.width + 'px';
+  dom.centerContainer.style.width = props.center.width + 'px';
+  dom.top.style.width = props.top.width + 'px';
+  dom.bottom.style.width = props.bottom.width + 'px';
+
+  // reposition the panels
+  dom.background.style.left = '0';
+  dom.background.style.top = '0';
+  dom.backgroundVertical.style.left = props.left.width + props.border.left + 'px';
+  dom.backgroundVertical.style.top = '0';
+  dom.backgroundHorizontal.style.left = '0';
+  dom.backgroundHorizontal.style.top = props.top.height + 'px';
+  dom.centerContainer.style.left = props.left.width + 'px';
+  dom.centerContainer.style.top = props.top.height + 'px';
+  dom.leftContainer.style.left = '0';
+  dom.leftContainer.style.top = props.top.height + 'px';
+  dom.rightContainer.style.left = props.left.width + props.center.width + 'px';
+  dom.rightContainer.style.top = props.top.height + 'px';
+  dom.top.style.left = props.left.width + 'px';
+  dom.top.style.top = '0';
+  dom.bottom.style.left = props.left.width + 'px';
+  dom.bottom.style.top = props.top.height + props.centerContainer.height + 'px';
+  dom.center.style.left = '0';
+  dom.left.style.left = '0';
+  dom.right.style.left = '0';
+};
+
+// TODO: deprecated since version 1.1.0, remove some day
+Core.prototype.repaint = function () {
+  throw new Error('Function repaint is deprecated. Use redraw instead.');
+};
+
+/**
+ * Set a current time. This can be used for example to ensure that a client's
+ * time is synchronized with a shared server time.
+ * Only applicable when option `showCurrentTime` is true.
+ * @param {Date | string | number} time     A Date, unix timestamp, or
+ *                                          ISO date string.
+ */
+Core.prototype.setCurrentTime = function (time) {
+  if (!this.currentTime) {
+    throw new Error('Option showCurrentTime must be true');
+  }
+
+  this.currentTime.setCurrentTime(time);
+};
+
+/**
+ * Get the current time.
+ * Only applicable when option `showCurrentTime` is true.
+ * @return {Date} Returns the current time.
+ */
+Core.prototype.getCurrentTime = function () {
+  if (!this.currentTime) {
+    throw new Error('Option showCurrentTime must be true');
+  }
+
+  return this.currentTime.getCurrentTime();
+};
+
+/**
+ * Convert a position on screen (pixels) to a datetime
+ * @param {int}     x    Position on the screen in pixels
+ * @return {Date}   time The datetime the corresponds with given position x
+ * @protected
+ */
+// TODO: move this function to Range
+Core.prototype._toTime = function (x) {
+  return DateUtil.toTime(this, x, this.props.center.width);
+};
+
+/**
+ * Convert a position on the global screen (pixels) to a datetime
+ * @param {int}     x    Position on the screen in pixels
+ * @return {Date}   time The datetime the corresponds with given position x
+ * @protected
+ */
+// TODO: move this function to Range
+Core.prototype._toGlobalTime = function (x) {
+  return DateUtil.toTime(this, x, this.props.root.width);
+  //var conversion = this.range.conversion(this.props.root.width);
+  //return new Date(x / conversion.scale + conversion.offset);
+};
+
+/**
+ * Convert a datetime (Date object) into a position on the screen
+ * @param {Date}   time A date
+ * @return {int}   x    The position on the screen in pixels which corresponds
+ *                      with the given date.
+ * @protected
+ */
+// TODO: move this function to Range
+Core.prototype._toScreen = function (time) {
+  return DateUtil.toScreen(this, time, this.props.center.width);
+};
+
+/**
+ * Convert a datetime (Date object) into a position on the root
+ * This is used to get the pixel density estimate for the screen, not the center panel
+ * @param {Date}   time A date
+ * @return {int}   x    The position on root in pixels which corresponds
+ *                      with the given date.
+ * @protected
+ */
+// TODO: move this function to Range
+Core.prototype._toGlobalScreen = function (time) {
+  return DateUtil.toScreen(this, time, this.props.root.width);
+  //var conversion = this.range.conversion(this.props.root.width);
+  //return (time.valueOf() - conversion.offset) * conversion.scale;
+};
+
+/**
+ * Initialize watching when option autoResize is true
+ * @private
+ */
+Core.prototype._initAutoResize = function () {
+  if (this.options.autoResize == true) {
+    this._startAutoResize();
+  } else {
+    this._stopAutoResize();
+  }
+};
+
+/**
+ * Watch for changes in the size of the container. On resize, the Panel will
+ * automatically redraw itself.
+ * @private
+ */
+Core.prototype._startAutoResize = function () {
+  var me = this;
+
+  this._stopAutoResize();
+
+  this._onResize = function () {
+    if (me.options.autoResize != true) {
+      // stop watching when the option autoResize is changed to false
+      me._stopAutoResize();
+      return;
+    }
+
+    if (me.dom.root) {
+      // check whether the frame is resized
+      // Note: we compare offsetWidth here, not clientWidth. For some reason,
+      // IE does not restore the clientWidth from 0 to the actual width after
+      // changing the timeline's container display style from none to visible
+      if (me.dom.root.offsetWidth != me.props.lastWidth || me.dom.root.offsetHeight != me.props.lastHeight) {
+        me.props.lastWidth = me.dom.root.offsetWidth;
+        me.props.lastHeight = me.dom.root.offsetHeight;
+        me.props.scrollbarWidth = util.getScrollBarWidth();
+
+        me.body.emitter.emit('_change');
+      }
+    }
+  };
+
+  // add event listener to window resize
+  util.addEventListener(window, 'resize', this._onResize);
+
+  //Prevent initial unnecessary redraw
+  if (me.dom.root) {
+    me.props.lastWidth = me.dom.root.offsetWidth;
+    me.props.lastHeight = me.dom.root.offsetHeight;
+  }
+
+  this.watchTimer = setInterval(this._onResize, 1000);
+};
+
+/**
+ * Stop watching for a resize of the frame.
+ * @private
+ */
+Core.prototype._stopAutoResize = function () {
+  if (this.watchTimer) {
+    clearInterval(this.watchTimer);
+    this.watchTimer = undefined;
+  }
+
+  // remove event listener on window.resize
+  if (this._onResize) {
+    util.removeEventListener(window, 'resize', this._onResize);
+    this._onResize = null;
+  }
+};
+
+/**
+ * Start moving the timeline vertically
+ * @param {Event} event
+ * @private
+ */
+Core.prototype._onTouch = function (event) {
+  // eslint-disable-line no-unused-vars
+  this.touch.allowDragging = true;
+  this.touch.initialScrollTop = this.props.scrollTop;
+};
+
+/**
+ * Start moving the timeline vertically
+ * @param {Event} event
+ * @private
+ */
+Core.prototype._onPinch = function (event) {
+  // eslint-disable-line no-unused-vars
+  this.touch.allowDragging = false;
+};
+
+/**
+ * Move the timeline vertically
+ * @param {Event} event
+ * @private
+ */
+Core.prototype._onDrag = function (event) {
+  if (!event) return;
+  // refuse to drag when we where pinching to prevent the timeline make a jump
+  // when releasing the fingers in opposite order from the touch screen
+  if (!this.touch.allowDragging) return;
+
+  var delta = event.deltaY;
+
+  var oldScrollTop = this._getScrollTop();
+  var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta);
+
+  if (this.options.verticalScroll) {
+    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;
+    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;
+  }
+
+  if (newScrollTop != oldScrollTop) {
+    this.emit("verticalDrag");
+  }
+};
+
+/**
+ * Apply a scrollTop
+ * @param {number} scrollTop
+ * @returns {number} scrollTop  Returns the applied scrollTop
+ * @private
+ */
+Core.prototype._setScrollTop = function (scrollTop) {
+  this.props.scrollTop = scrollTop;
+  this._updateScrollTop();
+  return this.props.scrollTop;
+};
+
+/**
+ * Update the current scrollTop when the height of  the containers has been changed
+ * @returns {number} scrollTop  Returns the applied scrollTop
+ * @private
+ */
+Core.prototype._updateScrollTop = function () {
+  // recalculate the scrollTopMin
+  var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero
+  if (scrollTopMin != this.props.scrollTopMin) {
+    // in case of bottom orientation, change the scrollTop such that the contents
+    // do not move relative to the time axis at the bottom
+    if (this.options.orientation.item != 'top') {
+      this.props.scrollTop += scrollTopMin - this.props.scrollTopMin;
+    }
+    this.props.scrollTopMin = scrollTopMin;
+  }
+
+  // limit the scrollTop to the feasible scroll range
+  if (this.props.scrollTop > 0) this.props.scrollTop = 0;
+  if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin;
+
+  if (this.options.verticalScroll) {
+    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;
+    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;
+  }
+
+  return this.props.scrollTop;
+};
+
+/**
+ * Get the current scrollTop
+ * @returns {number} scrollTop
+ * @private
+ */
+Core.prototype._getScrollTop = function () {
+  return this.props.scrollTop;
+};
+
+/**
+ * Load a configurator
+ * [at]returns {Object}
+ * @private
+ */
+Core.prototype._createConfigurator = function () {
+  throw new Error('Cannot invoke abstract method _createConfigurator');
+};
+
+module.exports = Core;
+
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var moment = __webpack_require__(9);
+var DateUtil = __webpack_require__(36);
+var util = __webpack_require__(2);
+
+/**
+ * The class TimeStep is an iterator for dates. You provide a start date and an
+ * end date. The class itself determines the best scale (step size) based on the
+ * provided start Date, end Date, and minimumStep.
+ *
+ * If minimumStep is provided, the step size is chosen as close as possible
+ * to the minimumStep but larger than minimumStep. If minimumStep is not
+ * provided, the scale is set to 1 DAY.
+ * The minimumStep should correspond with the onscreen size of about 6 characters
+ *
+ * Alternatively, you can set a scale by hand.
+ * After creation, you can initialize the class by executing first(). Then you
+ * can iterate from the start date to the end date via next(). You can check if
+ * the end date is reached with the function hasNext(). After each step, you can
+ * retrieve the current date via getCurrent().
+ * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours,
+ * days, to years.
+ *
+ * Version: 1.2
+ *
+ * @param {Date} [start]         The start date, for example new Date(2010, 9, 21)
+ *                               or new Date(2010, 9, 21, 23, 45, 00)
+ * @param {Date} [end]           The end date
+ * @param {number} [minimumStep] Optional. Minimum step size in milliseconds
+ * @param {Date|Array.<Date>} [hiddenDates] Optional.
+ * @param {{showMajorLabels: boolean}} [options] Optional.
+ * @constructor  TimeStep
+ */
+function TimeStep(start, end, minimumStep, hiddenDates, options) {
+  this.moment = moment;
+
+  // variables
+  this.current = this.moment();
+  this._start = this.moment();
+  this._end = this.moment();
+
+  this.autoScale = true;
+  this.scale = 'day';
+  this.step = 1;
+
+  // initialize the range
+  this.setRange(start, end, minimumStep);
+
+  // hidden Dates options
+  this.switchedDay = false;
+  this.switchedMonth = false;
+  this.switchedYear = false;
+  if (Array.isArray(hiddenDates)) {
+    this.hiddenDates = hiddenDates;
+  } else if (hiddenDates != undefined) {
+    this.hiddenDates = [hiddenDates];
+  } else {
+    this.hiddenDates = [];
+  }
+
+  this.format = TimeStep.FORMAT; // default formatting
+  this.options = options ? options : {};
+}
+
+// Time formatting
+TimeStep.FORMAT = {
+  minorLabels: {
+    millisecond: 'SSS',
+    second: 's',
+    minute: 'HH:mm',
+    hour: 'HH:mm',
+    weekday: 'ddd D',
+    day: 'D',
+    week: 'w',
+    month: 'MMM',
+    year: 'YYYY'
+  },
+  majorLabels: {
+    millisecond: 'HH:mm:ss',
+    second: 'D MMMM HH:mm',
+    minute: 'ddd D MMMM',
+    hour: 'ddd D MMMM',
+    weekday: 'MMMM YYYY',
+    day: 'MMMM YYYY',
+    week: 'MMMM YYYY',
+    month: 'YYYY',
+    year: ''
+  }
+};
+
+/**
+ * Set custom constructor function for moment. Can be used to set dates
+ * to UTC or to set a utcOffset.
+ * @param {function} moment
+ */
+TimeStep.prototype.setMoment = function (moment) {
+  this.moment = moment;
+
+  // update the date properties, can have a new utcOffset
+  this.current = this.moment(this.current.valueOf());
+  this._start = this.moment(this._start.valueOf());
+  this._end = this.moment(this._end.valueOf());
+};
+
+/**
+ * Set custom formatting for the minor an major labels of the TimeStep.
+ * Both `minorLabels` and `majorLabels` are an Object with properties:
+ * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.
+ * @param {{minorLabels: Object, majorLabels: Object}} format
+ */
+TimeStep.prototype.setFormat = function (format) {
+  var defaultFormat = util.deepExtend({}, TimeStep.FORMAT);
+  this.format = util.deepExtend(defaultFormat, format);
+};
+
+/**
+ * Set a new range
+ * If minimumStep is provided, the step size is chosen as close as possible
+ * to the minimumStep but larger than minimumStep. If minimumStep is not
+ * provided, the scale is set to 1 DAY.
+ * The minimumStep should correspond with the onscreen size of about 6 characters
+ * @param {Date} [start]      The start date and time.
+ * @param {Date} [end]        The end date and time.
+ * @param {int} [minimumStep] Optional. Minimum step size in milliseconds
+ */
+TimeStep.prototype.setRange = function (start, end, minimumStep) {
+  if (!(start instanceof Date) || !(end instanceof Date)) {
+    throw "No legal start or end date in method setRange";
+  }
+
+  this._start = start != undefined ? this.moment(start.valueOf()) : new Date();
+  this._end = end != undefined ? this.moment(end.valueOf()) : new Date();
+
+  if (this.autoScale) {
+    this.setMinimumStep(minimumStep);
+  }
+};
+
+/**
+ * Set the range iterator to the start date.
+ */
+TimeStep.prototype.start = function () {
+  this.current = this._start.clone();
+  this.roundToMinor();
+};
+
+/**
+ * Round the current date to the first minor date value
+ * This must be executed once when the current date is set to start Date
+ */
+TimeStep.prototype.roundToMinor = function () {
+  // round to floor
+  // to prevent year & month scales rounding down to the first day of week we perform this separately
+  if (this.scale == 'week') {
+    this.current.weekday(0);
+  }
+  // IMPORTANT: we have no breaks in this switch! (this is no bug)
+  // noinspection FallThroughInSwitchStatementJS
+  switch (this.scale) {
+    case 'year':
+      this.current.year(this.step * Math.floor(this.current.year() / this.step));
+      this.current.month(0);
+    case 'month':
+      this.current.date(1); // eslint-disable-line no-fallthrough
+    case 'week': // eslint-disable-line no-fallthrough
+    case 'day': // eslint-disable-line no-fallthrough
+    case 'weekday':
+      this.current.hours(0); // eslint-disable-line no-fallthrough
+    case 'hour':
+      this.current.minutes(0); // eslint-disable-line no-fallthrough
+    case 'minute':
+      this.current.seconds(0); // eslint-disable-line no-fallthrough
+    case 'second':
+      this.current.milliseconds(0); // eslint-disable-line no-fallthrough
+    //case 'millisecond': // nothing to do for milliseconds
+  }
+
+  if (this.step != 1) {
+    // round down to the first minor value that is a multiple of the current step size
+    switch (this.scale) {
+      case 'millisecond':
+        this.current.subtract(this.current.milliseconds() % this.step, 'milliseconds');break;
+      case 'second':
+        this.current.subtract(this.current.seconds() % this.step, 'seconds');break;
+      case 'minute':
+        this.current.subtract(this.current.minutes() % this.step, 'minutes');break;
+      case 'hour':
+        this.current.subtract(this.current.hours() % this.step, 'hours');break;
+      case 'weekday': // intentional fall through
+      case 'day':
+        this.current.subtract((this.current.date() - 1) % this.step, 'day');break;
+      case 'week':
+        this.current.subtract(this.current.week() % this.step, 'week');break;
+      case 'month':
+        this.current.subtract(this.current.month() % this.step, 'month');break;
+      case 'year':
+        this.current.subtract(this.current.year() % this.step, 'year');break;
+      default:
+        break;
+    }
+  }
+};
+
+/**
+ * Check if the there is a next step
+ * @return {boolean}  true if the current date has not passed the end date
+ */
+TimeStep.prototype.hasNext = function () {
+  return this.current.valueOf() <= this._end.valueOf();
+};
+
+/**
+ * Do the next step
+ */
+TimeStep.prototype.next = function () {
+  var prev = this.current.valueOf();
+
+  // Two cases, needed to prevent issues with switching daylight savings
+  // (end of March and end of October)
+  switch (this.scale) {
+    case 'millisecond':
+      this.current.add(this.step, 'millisecond');break;
+    case 'second':
+      this.current.add(this.step, 'second');break;
+    case 'minute':
+      this.current.add(this.step, 'minute');break;
+    case 'hour':
+      this.current.add(this.step, 'hour');
+
+      if (this.current.month() < 6) {
+        this.current.subtract(this.current.hours() % this.step, 'hour');
+      } else {
+        if (this.current.hours() % this.step !== 0) {
+          this.current.add(this.step - this.current.hours() % this.step, 'hour');
+        }
+      }
+      break;
+    case 'weekday': // intentional fall through
+    case 'day':
+      this.current.add(this.step, 'day');break;
+    case 'week':
+      if (this.current.weekday() !== 0) {
+        // we had a month break not correlating with a week's start before
+        this.current.weekday(0); // switch back to week cycles
+        this.current.add(this.step, 'week');
+      } else if (this.options.showMajorLabels === false) {
+        this.current.add(this.step, 'week'); // the default case
+      } else {
+        // first day of the week
+        var nextWeek = this.current.clone();
+        nextWeek.add(1, 'week');
+        if (nextWeek.isSame(this.current, 'month')) {
+          // is the first day of the next week in the same month?
+          this.current.add(this.step, 'week'); // the default case
+        } else {
+          // inject a step at each first day of the month
+          this.current.add(this.step, 'week');
+          this.current.date(1);
+        }
+      }
+      break;
+    case 'month':
+      this.current.add(this.step, 'month');break;
+    case 'year':
+      this.current.add(this.step, 'year');break;
+    default:
+      break;
+  }
+
+  if (this.step != 1) {
+    // round down to the correct major value
+    switch (this.scale) {
+      case 'millisecond':
+        if (this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current.milliseconds(0);break;
+      case 'second':
+        if (this.current.seconds() > 0 && this.current.seconds() < this.step) this.current.seconds(0);break;
+      case 'minute':
+        if (this.current.minutes() > 0 && this.current.minutes() < this.step) this.current.minutes(0);break;
+      case 'hour':
+        if (this.current.hours() > 0 && this.current.hours() < this.step) this.current.hours(0);break;
+      case 'weekday': // intentional fall through
+      case 'day':
+        if (this.current.date() < this.step + 1) this.current.date(1);break;
+      case 'week':
+        if (this.current.week() < this.step) this.current.week(1);break; // week numbering starts at 1, not 0
+      case 'month':
+        if (this.current.month() < this.step) this.current.month(0);break;
+      case 'year':
+        break; // nothing to do for year
+      default:
+        break;
+    }
+  }
+
+  // safety mechanism: if current time is still unchanged, move to the end
+  if (this.current.valueOf() == prev) {
+    this.current = this._end.clone();
+  }
+
+  // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates
+  this.switchedDay = false;
+  this.switchedMonth = false;
+  this.switchedYear = false;
+
+  DateUtil.stepOverHiddenDates(this.moment, this, prev);
+};
+
+/**
+ * Get the current datetime
+ * @return {Moment}  current The current date
+ */
+TimeStep.prototype.getCurrent = function () {
+  return this.current;
+};
+
+/**
+ * Set a custom scale. Autoscaling will be disabled.
+ * For example setScale('minute', 5) will result
+ * in minor steps of 5 minutes, and major steps of an hour.
+ *
+ * @param {{scale: string, step: number}} params
+ *                               An object containing two properties:
+ *                               - A string 'scale'. Choose from 'millisecond', 'second',
+ *                                 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'.
+ *                               - A number 'step'. A step size, by default 1.
+ *                                 Choose for example 1, 2, 5, or 10.
+ */
+TimeStep.prototype.setScale = function (params) {
+  if (params && typeof params.scale == 'string') {
+    this.scale = params.scale;
+    this.step = params.step > 0 ? params.step : 1;
+    this.autoScale = false;
+  }
+};
+
+/**
+ * Enable or disable autoscaling
+ * @param {boolean} enable  If true, autoascaling is set true
+ */
+TimeStep.prototype.setAutoScale = function (enable) {
+  this.autoScale = enable;
+};
+
+/**
+ * Automatically determine the scale that bests fits the provided minimum step
+ * @param {number} [minimumStep]  The minimum step size in milliseconds
+ */
+TimeStep.prototype.setMinimumStep = function (minimumStep) {
+  if (minimumStep == undefined) {
+    return;
+  }
+
+  //var b = asc + ds;
+
+  var stepYear = 1000 * 60 * 60 * 24 * 30 * 12;
+  var stepMonth = 1000 * 60 * 60 * 24 * 30;
+  var stepDay = 1000 * 60 * 60 * 24;
+  var stepHour = 1000 * 60 * 60;
+  var stepMinute = 1000 * 60;
+  var stepSecond = 1000;
+  var stepMillisecond = 1;
+
+  // find the smallest step that is larger than the provided minimumStep
+  if (stepYear * 1000 > minimumStep) {
+    this.scale = 'year';this.step = 1000;
+  }
+  if (stepYear * 500 > minimumStep) {
+    this.scale = 'year';this.step = 500;
+  }
+  if (stepYear * 100 > minimumStep) {
+    this.scale = 'year';this.step = 100;
+  }
+  if (stepYear * 50 > minimumStep) {
+    this.scale = 'year';this.step = 50;
+  }
+  if (stepYear * 10 > minimumStep) {
+    this.scale = 'year';this.step = 10;
+  }
+  if (stepYear * 5 > minimumStep) {
+    this.scale = 'year';this.step = 5;
+  }
+  if (stepYear > minimumStep) {
+    this.scale = 'year';this.step = 1;
+  }
+  if (stepMonth * 3 > minimumStep) {
+    this.scale = 'month';this.step = 3;
+  }
+  if (stepMonth > minimumStep) {
+    this.scale = 'month';this.step = 1;
+  }
+  if (stepDay * 5 > minimumStep) {
+    this.scale = 'day';this.step = 5;
+  }
+  if (stepDay * 2 > minimumStep) {
+    this.scale = 'day';this.step = 2;
+  }
+  if (stepDay > minimumStep) {
+    this.scale = 'day';this.step = 1;
+  }
+  if (stepDay / 2 > minimumStep) {
+    this.scale = 'weekday';this.step = 1;
+  }
+  if (stepHour * 4 > minimumStep) {
+    this.scale = 'hour';this.step = 4;
+  }
+  if (stepHour > minimumStep) {
+    this.scale = 'hour';this.step = 1;
+  }
+  if (stepMinute * 15 > minimumStep) {
+    this.scale = 'minute';this.step = 15;
+  }
+  if (stepMinute * 10 > minimumStep) {
+    this.scale = 'minute';this.step = 10;
+  }
+  if (stepMinute * 5 > minimumStep) {
+    this.scale = 'minute';this.step = 5;
+  }
+  if (stepMinute > minimumStep) {
+    this.scale = 'minute';this.step = 1;
+  }
+  if (stepSecond * 15 > minimumStep) {
+    this.scale = 'second';this.step = 15;
+  }
+  if (stepSecond * 10 > minimumStep) {
+    this.scale = 'second';this.step = 10;
+  }
+  if (stepSecond * 5 > minimumStep) {
+    this.scale = 'second';this.step = 5;
+  }
+  if (stepSecond > minimumStep) {
+    this.scale = 'second';this.step = 1;
+  }
+  if (stepMillisecond * 200 > minimumStep) {
+    this.scale = 'millisecond';this.step = 200;
+  }
+  if (stepMillisecond * 100 > minimumStep) {
+    this.scale = 'millisecond';this.step = 100;
+  }
+  if (stepMillisecond * 50 > minimumStep) {
+    this.scale = 'millisecond';this.step = 50;
+  }
+  if (stepMillisecond * 10 > minimumStep) {
+    this.scale = 'millisecond';this.step = 10;
+  }
+  if (stepMillisecond * 5 > minimumStep) {
+    this.scale = 'millisecond';this.step = 5;
+  }
+  if (stepMillisecond > minimumStep) {
+    this.scale = 'millisecond';this.step = 1;
+  }
+};
+
+/**
+ * Snap a date to a rounded value.
+ * The snap intervals are dependent on the current scale and step.
+ * Static function
+ * @param {Date} date    the date to be snapped.
+ * @param {string} scale Current scale, can be 'millisecond', 'second',
+ *                       'minute', 'hour', 'weekday, 'day', 'week', 'month', 'year'.
+ * @param {number} step  Current step (1, 2, 4, 5, ...
+ * @return {Date} snappedDate
+ */
+TimeStep.snap = function (date, scale, step) {
+  var clone = moment(date);
+
+  if (scale == 'year') {
+    var year = clone.year() + Math.round(clone.month() / 12);
+    clone.year(Math.round(year / step) * step);
+    clone.month(0);
+    clone.date(0);
+    clone.hours(0);
+    clone.minutes(0);
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'month') {
+    if (clone.date() > 15) {
+      clone.date(1);
+      clone.add(1, 'month');
+      // important: first set Date to 1, after that change the month.
+    } else {
+      clone.date(1);
+    }
+
+    clone.hours(0);
+    clone.minutes(0);
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'week') {
+    if (clone.weekday() > 2) {
+      // doing it the momentjs locale aware way
+      clone.weekday(0);
+      clone.add(1, 'week');
+    } else {
+      clone.weekday(0);
+    }
+
+    clone.hours(0);
+    clone.minutes(0);
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'day') {
+    //noinspection FallthroughInSwitchStatementJS
+    switch (step) {
+      case 5:
+      case 2:
+        clone.hours(Math.round(clone.hours() / 24) * 24);break;
+      default:
+        clone.hours(Math.round(clone.hours() / 12) * 12);break;
+    }
+    clone.minutes(0);
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'weekday') {
+    //noinspection FallthroughInSwitchStatementJS
+    switch (step) {
+      case 5:
+      case 2:
+        clone.hours(Math.round(clone.hours() / 12) * 12);break;
+      default:
+        clone.hours(Math.round(clone.hours() / 6) * 6);break;
+    }
+    clone.minutes(0);
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'hour') {
+    switch (step) {
+      case 4:
+        clone.minutes(Math.round(clone.minutes() / 60) * 60);break;
+      default:
+        clone.minutes(Math.round(clone.minutes() / 30) * 30);break;
+    }
+    clone.seconds(0);
+    clone.milliseconds(0);
+  } else if (scale == 'minute') {
+    //noinspection FallthroughInSwitchStatementJS
+    switch (step) {
+      case 15:
+      case 10:
+        clone.minutes(Math.round(clone.minutes() / 5) * 5);
+        clone.seconds(0);
+        break;
+      case 5:
+        clone.seconds(Math.round(clone.seconds() / 60) * 60);break;
+      default:
+        clone.seconds(Math.round(clone.seconds() / 30) * 30);break;
+    }
+    clone.milliseconds(0);
+  } else if (scale == 'second') {
+    //noinspection FallthroughInSwitchStatementJS
+    switch (step) {
+      case 15:
+      case 10:
+        clone.seconds(Math.round(clone.seconds() / 5) * 5);
+        clone.milliseconds(0);
+        break;
+      case 5:
+        clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000);break;
+      default:
+        clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500);break;
+    }
+  } else if (scale == 'millisecond') {
+    var _step = step > 5 ? step / 2 : 1;
+    clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step);
+  }
+
+  return clone;
+};
+
+/**
+ * Check if the current value is a major value (for example when the step
+ * is DAY, a major value is each first day of the MONTH)
+ * @return {boolean} true if current date is major, else false.
+ */
+TimeStep.prototype.isMajor = function () {
+  if (this.switchedYear == true) {
+    switch (this.scale) {
+      case 'year':
+      case 'month':
+      case 'week':
+      case 'weekday':
+      case 'day':
+      case 'hour':
+      case 'minute':
+      case 'second':
+      case 'millisecond':
+        return true;
+      default:
+        return false;
+    }
+  } else if (this.switchedMonth == true) {
+    switch (this.scale) {
+      case 'week':
+      case 'weekday':
+      case 'day':
+      case 'hour':
+      case 'minute':
+      case 'second':
+      case 'millisecond':
+        return true;
+      default:
+        return false;
+    }
+  } else if (this.switchedDay == true) {
+    switch (this.scale) {
+      case 'millisecond':
+      case 'second':
+      case 'minute':
+      case 'hour':
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  var date = this.moment(this.current);
+  switch (this.scale) {
+    case 'millisecond':
+      return date.milliseconds() == 0;
+    case 'second':
+      return date.seconds() == 0;
+    case 'minute':
+      return date.hours() == 0 && date.minutes() == 0;
+    case 'hour':
+      return date.hours() == 0;
+    case 'weekday': // intentional fall through
+    case 'day':
+      return date.date() == 1;
+    case 'week':
+      return date.date() == 1;
+    case 'month':
+      return date.month() == 0;
+    case 'year':
+      return false;
+    default:
+      return false;
+  }
+};
+
+/**
+ * Returns formatted text for the minor axislabel, depending on the current
+ * date and the scale. For example when scale is MINUTE, the current time is
+ * formatted as "hh:mm".
+ * @param {Date} [date=this.current] custom date. if not provided, current date is taken
+ * @returns {String}
+ */
+TimeStep.prototype.getLabelMinor = function (date) {
+  if (date == undefined) {
+    date = this.current;
+  }
+  if (date instanceof Date) {
+    date = this.moment(date);
+  }
+
+  if (typeof this.format.minorLabels === "function") {
+    return this.format.minorLabels(date, this.scale, this.step);
+  }
+
+  var format = this.format.minorLabels[this.scale];
+  // noinspection FallThroughInSwitchStatementJS
+  switch (this.scale) {
+    case 'week':
+      if (this.isMajor() && date.weekday() !== 0) {
+        return "";
+      }
+    default:
+      // eslint-disable-line no-fallthrough
+      return format && format.length > 0 ? this.moment(date).format(format) : '';
+  }
+};
+
+/**
+ * Returns formatted text for the major axis label, depending on the current
+ * date and the scale. For example when scale is MINUTE, the major scale is
+ * hours, and the hour will be formatted as "hh".
+ * @param {Date} [date=this.current] custom date. if not provided, current date is taken
+ * @returns {String}
+ */
+TimeStep.prototype.getLabelMajor = function (date) {
+  if (date == undefined) {
+    date = this.current;
+  }
+  if (date instanceof Date) {
+    date = this.moment(date);
+  }
+
+  if (typeof this.format.majorLabels === "function") {
+    return this.format.majorLabels(date, this.scale, this.step);
+  }
+
+  var format = this.format.majorLabels[this.scale];
+  return format && format.length > 0 ? this.moment(date).format(format) : '';
+};
+
+TimeStep.prototype.getClassName = function () {
+  var _moment = this.moment;
+  var m = this.moment(this.current);
+  var current = m.locale ? m.locale('en') : m.lang('en'); // old versions of moment have .lang() function
+  var step = this.step;
+  var classNames = [];
+
+  /**
+   *
+   * @param {number} value
+   * @returns {String}
+   */
+  function even(value) {
+    return value / step % 2 == 0 ? ' vis-even' : ' vis-odd';
+  }
+
+  /**
+   *
+   * @param {Date} date
+   * @returns {String}
+   */
+  function today(date) {
+    if (date.isSame(new Date(), 'day')) {
+      return ' vis-today';
+    }
+    if (date.isSame(_moment().add(1, 'day'), 'day')) {
+      return ' vis-tomorrow';
+    }
+    if (date.isSame(_moment().add(-1, 'day'), 'day')) {
+      return ' vis-yesterday';
+    }
+    return '';
+  }
+
+  /**
+   *
+   * @param {Date} date
+   * @returns {String}
+   */
+  function currentWeek(date) {
+    return date.isSame(new Date(), 'week') ? ' vis-current-week' : '';
+  }
+
+  /**
+   *
+   * @param {Date} date
+   * @returns {String}
+   */
+  function currentMonth(date) {
+    return date.isSame(new Date(), 'month') ? ' vis-current-month' : '';
+  }
+
+  /**
+   *
+   * @param {Date} date
+   * @returns {String}
+   */
+  function currentYear(date) {
+    return date.isSame(new Date(), 'year') ? ' vis-current-year' : '';
+  }
+
+  switch (this.scale) {
+    case 'millisecond':
+      classNames.push(today(current));
+      classNames.push(even(current.milliseconds()));
+      break;
+    case 'second':
+      classNames.push(today(current));
+      classNames.push(even(current.seconds()));
+      break;
+    case 'minute':
+      classNames.push(today(current));
+      classNames.push(even(current.minutes()));
+      break;
+    case 'hour':
+      classNames.push('vis-h' + current.hours() + (this.step == 4 ? '-h' + (current.hours() + 4) : ''));
+      classNames.push(today(current));
+      classNames.push(even(current.hours()));
+      break;
+    case 'weekday':
+      classNames.push('vis-' + current.format('dddd').toLowerCase());
+      classNames.push(today(current));
+      classNames.push(currentWeek(current));
+      classNames.push(even(current.date()));
+      break;
+    case 'day':
+      classNames.push('vis-day' + current.date());
+      classNames.push('vis-' + current.format('MMMM').toLowerCase());
+      classNames.push(today(current));
+      classNames.push(currentMonth(current));
+      classNames.push(this.step <= 2 ? today(current) : '');
+      classNames.push(this.step <= 2 ? 'vis-' + current.format('dddd').toLowerCase() : '');
+      classNames.push(even(current.date() - 1));
+      break;
+    case 'week':
+      classNames.push('vis-week' + current.format('w'));
+      classNames.push(currentWeek(current));
+      classNames.push(even(current.week()));
+      break;
+    case 'month':
+      classNames.push('vis-' + current.format('MMMM').toLowerCase());
+      classNames.push(currentMonth(current));
+      classNames.push(even(current.month()));
+      break;
+    case 'year':
+      classNames.push('vis-year' + current.year());
+      classNames.push(currentYear(current));
+      classNames.push(even(current.year()));
+      break;
+  }
+  return classNames.filter(String).join(" ");
+};
+
+module.exports = TimeStep;
+
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var util = __webpack_require__(2);
+var Component = __webpack_require__(16);
+var moment = __webpack_require__(9);
+var locales = __webpack_require__(98);
+
+/**
+ * A current time bar
+ * @param {{range: Range, dom: Object, domProps: Object}} body
+ * @param {Object} [options]        Available parameters:
+ *                                  {Boolean} [showCurrentTime]
+ * @constructor CurrentTime
+ * @extends Component
+ */
+function CurrentTime(body, options) {
+  this.body = body;
+
+  // default options
+  this.defaultOptions = {
+    rtl: false,
+    showCurrentTime: true,
+
+    moment: moment,
+    locales: locales,
+    locale: 'en'
+  };
+  this.options = util.extend({}, this.defaultOptions);
+  this.offset = 0;
+
+  this._create();
+
+  this.setOptions(options);
+}
+
+CurrentTime.prototype = new Component();
+
+/**
+ * Create the HTML DOM for the current time bar
+ * @private
+ */
+CurrentTime.prototype._create = function () {
+  var bar = document.createElement('div');
+  bar.className = 'vis-current-time';
+  bar.style.position = 'absolute';
+  bar.style.top = '0px';
+  bar.style.height = '100%';
+
+  this.bar = bar;
+};
+
+/**
+ * Destroy the CurrentTime bar
+ */
+CurrentTime.prototype.destroy = function () {
+  this.options.showCurrentTime = false;
+  this.redraw(); // will remove the bar from the DOM and stop refreshing
+
+  this.body = null;
+};
+
+/**
+ * Set options for the component. Options will be merged in current options.
+ * @param {Object} options  Available parameters:
+ *                          {boolean} [showCurrentTime]
+ */
+CurrentTime.prototype.setOptions = function (options) {
+  if (options) {
+    // copy all options that we know
+    util.selectiveExtend(['rtl', 'showCurrentTime', 'moment', 'locale', 'locales'], this.options, options);
+  }
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+CurrentTime.prototype.redraw = function () {
+  if (this.options.showCurrentTime) {
+    var parent = this.body.dom.backgroundVertical;
+    if (this.bar.parentNode != parent) {
+      // attach to the dom
+      if (this.bar.parentNode) {
+        this.bar.parentNode.removeChild(this.bar);
+      }
+      parent.appendChild(this.bar);
+
+      this.start();
+    }
+
+    var now = this.options.moment(new Date().valueOf() + this.offset);
+    var x = this.body.util.toScreen(now);
+
+    var locale = this.options.locales[this.options.locale];
+    if (!locale) {
+      if (!this.warned) {
+        console.log('WARNING: options.locales[\'' + this.options.locale + '\'] not found. See http://visjs.org/docs/timeline/#Localization');
+        this.warned = true;
+      }
+      locale = this.options.locales['en']; // fall back on english when not available
+    }
+    var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss');
+    title = title.charAt(0).toUpperCase() + title.substring(1);
+
+    if (this.options.rtl) {
+      this.bar.style.right = x + 'px';
+    } else {
+      this.bar.style.left = x + 'px';
+    }
+    this.bar.title = title;
+  } else {
+    // remove the line from the DOM
+    if (this.bar.parentNode) {
+      this.bar.parentNode.removeChild(this.bar);
+    }
+    this.stop();
+  }
+
+  return false;
+};
+
+/**
+ * Start auto refreshing the current time bar
+ */
+CurrentTime.prototype.start = function () {
+  var me = this;
+
+  /**
+   *  Updates the current time.
+   */
+  function update() {
+    me.stop();
+
+    // determine interval to refresh
+    var scale = me.body.range.conversion(me.body.domProps.center.width).scale;
+    var interval = 1 / scale / 10;
+    if (interval < 30) interval = 30;
+    if (interval > 1000) interval = 1000;
+
+    me.redraw();
+    me.body.emitter.emit('currentTimeTick');
+
+    // start a renderTimer to adjust for the new time
+    me.currentTimeTimer = setTimeout(update, interval);
+  }
+
+  update();
+};
+
+/**
+ * Stop auto refreshing the current time bar
+ */
+CurrentTime.prototype.stop = function () {
+  if (this.currentTimeTimer !== undefined) {
+    clearTimeout(this.currentTimeTimer);
+    delete this.currentTimeTimer;
+  }
+};
+
+/**
+ * Set a current time. This can be used for example to ensure that a client's
+ * time is synchronized with a shared server time.
+ * @param {Date | string | number} time     A Date, unix timestamp, or
+ *                                          ISO date string.
+ */
+CurrentTime.prototype.setCurrentTime = function (time) {
+  var t = util.convert(time, 'Date').valueOf();
+  var now = new Date().valueOf();
+  this.offset = t - now;
+  this.redraw();
+};
+
+/**
+ * Get the current time.
+ * @return {Date} Returns the current time.
+ */
+CurrentTime.prototype.getCurrentTime = function () {
+  return new Date(new Date().valueOf() + this.offset);
+};
+
+module.exports = CurrentTime;
+
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var stack = __webpack_require__(100);
+
+/**
+ * @param {number | string} groupId
+ * @param {Object} data
+ * @param {ItemSet} itemSet
+ * @constructor Group
+ */
+function Group(groupId, data, itemSet) {
+  this.groupId = groupId;
+  this.subgroups = {};
+  this.subgroupStack = {};
+  this.subgroupStackAll = false;
+  this.doInnerStack = false;
+  this.subgroupIndex = 0;
+  this.subgroupOrderer = data && data.subgroupOrder;
+  this.itemSet = itemSet;
+  this.isVisible = null;
+  this.stackDirty = true; // if true, items will be restacked on next redraw
+
+  if (data && data.nestedGroups) {
+    this.nestedGroups = data.nestedGroups;
+    if (data.showNested == false) {
+      this.showNested = false;
+    } else {
+      this.showNested = true;
+    }
+  }
+
+  if (data && data.subgroupStack) {
+    if (typeof data.subgroupStack === "boolean") {
+      this.doInnerStack = data.subgroupStack;
+      this.subgroupStackAll = data.subgroupStack;
+    } else {
+      // We might be doing stacking on specific sub groups, but only
+      // if at least one is set to do stacking
+      for (var key in data.subgroupStack) {
+        this.subgroupStack[key] = data.subgroupStack[key];
+        this.doInnerStack = this.doInnerStack || data.subgroupStack[key];
+      }
+    }
+  }
+
+  this.nestedInGroup = null;
+
+  this.dom = {};
+  this.props = {
+    label: {
+      width: 0,
+      height: 0
+    }
+  };
+  this.className = null;
+
+  this.items = {}; // items filtered by groupId of this group
+  this.visibleItems = []; // items currently visible in window
+  this.itemsInRange = []; // items currently in range
+  this.orderedItems = {
+    byStart: [],
+    byEnd: []
+  };
+  this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap.
+  var me = this;
+  this.itemSet.body.emitter.on("checkRangedItems", function () {
+    me.checkRangedItems = true;
+  });
+
+  this._create();
+
+  this.setData(data);
+}
+
+/**
+ * Create DOM elements for the group
+ * @private
+ */
+Group.prototype._create = function () {
+  var label = document.createElement('div');
+  if (this.itemSet.options.groupEditable.order) {
+    label.className = 'vis-label draggable';
+  } else {
+    label.className = 'vis-label';
+  }
+  this.dom.label = label;
+
+  var inner = document.createElement('div');
+  inner.className = 'vis-inner';
+  label.appendChild(inner);
+  this.dom.inner = inner;
+
+  var foreground = document.createElement('div');
+  foreground.className = 'vis-group';
+  foreground['timeline-group'] = this;
+  this.dom.foreground = foreground;
+
+  this.dom.background = document.createElement('div');
+  this.dom.background.className = 'vis-group';
+
+  this.dom.axis = document.createElement('div');
+  this.dom.axis.className = 'vis-group';
+
+  // create a hidden marker to detect when the Timelines container is attached
+  // to the DOM, or the style of a parent of the Timeline is changed from
+  // display:none is changed to visible.
+  this.dom.marker = document.createElement('div');
+  this.dom.marker.style.visibility = 'hidden';
+  this.dom.marker.style.position = 'absolute';
+  this.dom.marker.innerHTML = '';
+  this.dom.background.appendChild(this.dom.marker);
+};
+
+/**
+ * Set the group data for this group
+ * @param {Object} data   Group data, can contain properties content and className
+ */
+Group.prototype.setData = function (data) {
+  // update contents
+  var content;
+  var templateFunction;
+
+  if (this.itemSet.options && this.itemSet.options.groupTemplate) {
+    templateFunction = this.itemSet.options.groupTemplate.bind(this);
+    content = templateFunction(data, this.dom.inner);
+  } else {
+    content = data && data.content;
+  }
+
+  if (content instanceof Element) {
+    this.dom.inner.appendChild(content);
+    while (this.dom.inner.firstChild) {
+      this.dom.inner.removeChild(this.dom.inner.firstChild);
+    }
+    this.dom.inner.appendChild(content);
+  } else if (content instanceof Object) {
+    templateFunction(data, this.dom.inner);
+  } else if (content !== undefined && content !== null) {
+    this.dom.inner.innerHTML = content;
+  } else {
+    this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null
+  }
+
+  // update title
+  this.dom.label.title = data && data.title || '';
+  if (!this.dom.inner.firstChild) {
+    util.addClassName(this.dom.inner, 'vis-hidden');
+  } else {
+    util.removeClassName(this.dom.inner, 'vis-hidden');
+  }
+
+  if (data && data.nestedGroups) {
+    if (!this.nestedGroups || this.nestedGroups != data.nestedGroups) {
+      this.nestedGroups = data.nestedGroups;
+    }
+
+    if (data.showNested !== undefined || this.showNested === undefined) {
+      if (data.showNested == false) {
+        this.showNested = false;
+      } else {
+        this.showNested = true;
+      }
+    }
+
+    util.addClassName(this.dom.label, 'vis-nesting-group');
+    var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed';
+    if (this.showNested) {
+      util.removeClassName(this.dom.label, collapsedDirClassName);
+      util.addClassName(this.dom.label, 'expanded');
+    } else {
+      util.removeClassName(this.dom.label, 'expanded');
+      util.addClassName(this.dom.label, collapsedDirClassName);
+    }
+  } else if (this.nestedGroups) {
+    this.nestedGroups = null;
+    collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed';
+    util.removeClassName(this.dom.label, collapsedDirClassName);
+    util.removeClassName(this.dom.label, 'expanded');
+    util.removeClassName(this.dom.label, 'vis-nesting-group');
+  }
+
+  if (data && data.nestedInGroup) {
+    util.addClassName(this.dom.label, 'vis-nested-group');
+    if (this.itemSet.options && this.itemSet.options.rtl) {
+      this.dom.inner.style.paddingRight = '30px';
+    } else {
+      this.dom.inner.style.paddingLeft = '30px';
+    }
+  }
+
+  // update className
+  var className = data && data.className || null;
+  if (className != this.className) {
+    if (this.className) {
+      util.removeClassName(this.dom.label, this.className);
+      util.removeClassName(this.dom.foreground, this.className);
+      util.removeClassName(this.dom.background, this.className);
+      util.removeClassName(this.dom.axis, this.className);
+    }
+    util.addClassName(this.dom.label, className);
+    util.addClassName(this.dom.foreground, className);
+    util.addClassName(this.dom.background, className);
+    util.addClassName(this.dom.axis, className);
+    this.className = className;
+  }
+
+  // update style
+  if (this.style) {
+    util.removeCssText(this.dom.label, this.style);
+    this.style = null;
+  }
+  if (data && data.style) {
+    util.addCssText(this.dom.label, data.style);
+    this.style = data.style;
+  }
+};
+
+/**
+ * Get the width of the group label
+ * @return {number} width
+ */
+Group.prototype.getLabelWidth = function () {
+  return this.props.label.width;
+};
+
+Group.prototype._didMarkerHeightChange = function () {
+  var markerHeight = this.dom.marker.clientHeight;
+  if (markerHeight != this.lastMarkerHeight) {
+    this.lastMarkerHeight = markerHeight;
+    var redrawQueue = {};
+    var redrawQueueLength = 0;
+
+    util.forEach(this.items, function (item, key) {
+      item.dirty = true;
+      if (item.displayed) {
+        var returnQueue = true;
+        redrawQueue[key] = item.redraw(returnQueue);
+        redrawQueueLength = redrawQueue[key].length;
+      }
+    });
+
+    var needRedraw = redrawQueueLength > 0;
+    if (needRedraw) {
+      // redraw all regular items
+      for (var i = 0; i < redrawQueueLength; i++) {
+        util.forEach(redrawQueue, function (fns) {
+          fns[i]();
+        });
+      }
+    }
+    return true;
+  }
+};
+
+Group.prototype._calculateGroupSizeAndPosition = function () {
+  var offsetTop = this.dom.foreground.offsetTop;
+  var offsetLeft = this.dom.foreground.offsetLeft;
+  var offsetWidth = this.dom.foreground.offsetWidth;
+  this.top = offsetTop;
+  this.right = offsetLeft;
+  this.width = offsetWidth;
+};
+
+Group.prototype._redrawItems = function (forceRestack, lastIsVisible, margin, range) {
+  var restack = forceRestack || this.stackDirty || this.isVisible && !lastIsVisible;
+
+  // if restacking, reposition visible items vertically
+  if (restack) {
+    var visibleSubgroups = {};
+    var subgroup = null;
+
+    if (typeof this.itemSet.options.order === 'function') {
+      // a custom order function
+      // brute force restack of all items
+
+      // show all items
+      var me = this;
+      var limitSize = false;
+
+      var redrawQueue = {};
+      var redrawQueueLength = 0;
+
+      util.forEach(this.items, function (item, key) {
+        if (!item.displayed) {
+          var returnQueue = true;
+          redrawQueue[key] = item.redraw(returnQueue);
+          redrawQueueLength = redrawQueue[key].length;
+          me.visibleItems.push(item);
+        }
+      });
+
+      var needRedraw = redrawQueueLength > 0;
+      if (needRedraw) {
+        // redraw all regular items
+        for (var i = 0; i < redrawQueueLength; i++) {
+          util.forEach(redrawQueue, function (fns) {
+            fns[i]();
+          });
+        }
+      }
+
+      util.forEach(this.items, function (item) {
+        item.repositionX(limitSize);
+      });
+
+      if (this.doInnerStack && this.itemSet.options.stackSubgroups) {
+        // Order the items within each subgroup
+        for (subgroup in this.subgroups) {
+          visibleSubgroups[subgroup] = this.subgroups[subgroup].items.slice().sort(function (a, b) {
+            return me.itemSet.options.order(a.data, b.data);
+          });
+        }
+
+        stack.stackSubgroupsWithInnerStack(visibleSubgroups, margin, this.subgroups);
+      } else {
+        // order all items and force a restacking
+        var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) {
+          return me.itemSet.options.order(a.data, b.data);
+        });
+        stack.stack(customOrderedItems, margin, true /* restack=true */);
+      }
+
+      this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);
+    } else {
+      // no custom order function, lazy stacking
+      this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);
+
+      if (this.itemSet.options.stack) {
+        if (this.doInnerStack && this.itemSet.options.stackSubgroups) {
+          for (subgroup in this.subgroups) {
+            visibleSubgroups[subgroup] = this.subgroups[subgroup].items;
+          }
+
+          stack.stackSubgroupsWithInnerStack(visibleSubgroups, margin, this.subgroups);
+        } else {
+          // TODO: ugly way to access options...
+          stack.stack(this.visibleItems, margin, true /* restack=true */);
+        }
+      } else {
+        // no stacking
+        stack.nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups);
+      }
+    }
+
+    this.stackDirty = false;
+  }
+};
+
+Group.prototype._didResize = function (resized, height) {
+  resized = util.updateProperty(this, 'height', height) || resized;
+  // recalculate size of label
+  var labelWidth = this.dom.inner.clientWidth;
+  var labelHeight = this.dom.inner.clientHeight;
+  resized = util.updateProperty(this.props.label, 'width', labelWidth) || resized;
+  resized = util.updateProperty(this.props.label, 'height', labelHeight) || resized;
+  return resized;
+};
+
+Group.prototype._applyGroupHeight = function (height) {
+  this.dom.background.style.height = height + 'px';
+  this.dom.foreground.style.height = height + 'px';
+  this.dom.label.style.height = height + 'px';
+};
+
+// update vertical position of items after they are re-stacked and the height of the group is calculated
+Group.prototype._updateItemsVerticalPosition = function (margin) {
+  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {
+    var item = this.visibleItems[i];
+    item.repositionY(margin);
+    if (!this.isVisible && this.groupId != "__background__") {
+      if (item.displayed) item.hide();
+    }
+  }
+};
+
+/**
+ * Repaint this group
+ * @param {{start: number, end: number}} range
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ * @param {boolean} [forceRestack=false]  Force restacking of all items
+ * @param {boolean} [returnQueue=false]  return the queue or if the group resized
+ * @return {boolean} Returns true if the group is resized or the redraw queue if returnQueue=true
+ */
+Group.prototype.redraw = function (range, margin, forceRestack, returnQueue) {
+  var resized = false;
+  var lastIsVisible = this.isVisible;
+  var height;
+
+  var queue = [
+  // force recalculation of the height of the items when the marker height changed
+  // (due to the Timeline being attached to the DOM or changed from display:none to visible)
+  function () {
+    forceRestack = this._didMarkerHeightChange.bind(this);
+  }.bind(this),
+
+  // recalculate the height of the subgroups
+  this._updateSubGroupHeights.bind(this, margin),
+
+  // calculate actual size and position
+  this._calculateGroupSizeAndPosition.bind(this),
+
+  // check if group is visible
+  function () {
+    this.isVisible = this._isGroupVisible.bind(this)(range, margin);
+  }.bind(this),
+
+  // redraw Items if needed
+  function () {
+    this._redrawItems.bind(this)(forceRestack, lastIsVisible, margin, range);
+  }.bind(this),
+
+  // update subgroups
+  this._updateSubgroupsSizes.bind(this),
+
+  // recalculate the height of the group
+  function () {
+    height = this._calculateHeight.bind(this)(margin);
+  }.bind(this),
+
+  // calculate actual size and position again
+  this._calculateGroupSizeAndPosition.bind(this),
+
+  // check if resized
+  function () {
+    resized = this._didResize.bind(this)(resized, height);
+  }.bind(this),
+
+  // apply group height
+  function () {
+    this._applyGroupHeight.bind(this)(height);
+  }.bind(this),
+
+  // update vertical position of items after they are re-stacked and the height of the group is calculated
+  function () {
+    this._updateItemsVerticalPosition.bind(this)(margin);
+  }.bind(this), function () {
+    if (!this.isVisible && this.height) {
+      resized = false;
+    }
+    return resized;
+  }];
+
+  if (returnQueue) {
+    return queue;
+  } else {
+    var result;
+    queue.forEach(function (fn) {
+      result = fn();
+    });
+    return result;
+  }
+};
+
+/**
+ * recalculate the height of the subgroups
+ *
+ * @param {{item: vis.Item}} margin
+ * @private
+ */
+Group.prototype._updateSubGroupHeights = function (margin) {
+  if ((0, _keys2['default'])(this.subgroups).length > 0) {
+    var me = this;
+
+    this.resetSubgroups();
+
+    util.forEach(this.visibleItems, function (item) {
+      if (item.data.subgroup !== undefined) {
+        me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical);
+        me.subgroups[item.data.subgroup].visible = true;
+      }
+    });
+  }
+};
+
+/**
+ * check if group is visible
+ *
+ * @param {vis.Range} range
+ * @param {{axis: vis.DataAxis}} margin
+ * @returns {boolean} is visible
+ * @private
+ */
+Group.prototype._isGroupVisible = function (range, margin) {
+  return this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis && this.top + this.height + margin.axis >= -range.body.domProps.scrollTop;
+};
+
+/**
+ * recalculate the height of the group
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ * @returns {number} Returns the height
+ * @private
+ */
+Group.prototype._calculateHeight = function (margin) {
+  // recalculate the height of the group
+  var height;
+  var itemsInRange = this.visibleItems;
+  if (itemsInRange.length > 0) {
+    var min = itemsInRange[0].top;
+    var max = itemsInRange[0].top + itemsInRange[0].height;
+    util.forEach(itemsInRange, function (item) {
+      min = Math.min(min, item.top);
+      max = Math.max(max, item.top + item.height);
+    });
+    if (min > margin.axis) {
+      // there is an empty gap between the lowest item and the axis
+      var offset = min - margin.axis;
+      max -= offset;
+      util.forEach(itemsInRange, function (item) {
+        item.top -= offset;
+      });
+    }
+    height = max + margin.item.vertical / 2;
+  } else {
+    height = 0;
+  }
+  height = Math.max(height, this.props.label.height);
+
+  return height;
+};
+
+/**
+ * Show this group: attach to the DOM
+ */
+Group.prototype.show = function () {
+  if (!this.dom.label.parentNode) {
+    this.itemSet.dom.labelSet.appendChild(this.dom.label);
+  }
+
+  if (!this.dom.foreground.parentNode) {
+    this.itemSet.dom.foreground.appendChild(this.dom.foreground);
+  }
+
+  if (!this.dom.background.parentNode) {
+    this.itemSet.dom.background.appendChild(this.dom.background);
+  }
+
+  if (!this.dom.axis.parentNode) {
+    this.itemSet.dom.axis.appendChild(this.dom.axis);
+  }
+};
+
+/**
+ * Hide this group: remove from the DOM
+ */
+Group.prototype.hide = function () {
+  var label = this.dom.label;
+  if (label.parentNode) {
+    label.parentNode.removeChild(label);
+  }
+
+  var foreground = this.dom.foreground;
+  if (foreground.parentNode) {
+    foreground.parentNode.removeChild(foreground);
+  }
+
+  var background = this.dom.background;
+  if (background.parentNode) {
+    background.parentNode.removeChild(background);
+  }
+
+  var axis = this.dom.axis;
+  if (axis.parentNode) {
+    axis.parentNode.removeChild(axis);
+  }
+};
+
+/**
+ * Add an item to the group
+ * @param {Item} item
+ */
+Group.prototype.add = function (item) {
+  this.items[item.id] = item;
+  item.setParent(this);
+  this.stackDirty = true;
+  // add to
+  if (item.data.subgroup !== undefined) {
+    this._addToSubgroup(item);
+    this.orderSubgroups();
+  }
+
+  if (this.visibleItems.indexOf(item) == -1) {
+    var range = this.itemSet.body.range; // TODO: not nice accessing the range like this
+    this._checkIfVisible(item, this.visibleItems, range);
+  }
+};
+
+Group.prototype._addToSubgroup = function (item, subgroupId) {
+  subgroupId = subgroupId || item.data.subgroup;
+  if (subgroupId != undefined && this.subgroups[subgroupId] === undefined) {
+    this.subgroups[subgroupId] = {
+      height: 0,
+      top: 0,
+      start: item.data.start,
+      end: item.data.end || item.data.start,
+      visible: false,
+      index: this.subgroupIndex,
+      items: [],
+      stack: this.subgroupStackAll || this.subgroupStack[subgroupId] || false
+    };
+    this.subgroupIndex++;
+  }
+
+  if (new Date(item.data.start) < new Date(this.subgroups[subgroupId].start)) {
+    this.subgroups[subgroupId].start = item.data.start;
+  }
+
+  var itemEnd = item.data.end || item.data.start;
+  if (new Date(itemEnd) > new Date(this.subgroups[subgroupId].end)) {
+    this.subgroups[subgroupId].end = itemEnd;
+  }
+
+  this.subgroups[subgroupId].items.push(item);
+};
+
+Group.prototype._updateSubgroupsSizes = function () {
+  var me = this;
+  if (me.subgroups) {
+    for (var subgroup in me.subgroups) {
+      var initialEnd = me.subgroups[subgroup].items[0].data.end || me.subgroups[subgroup].items[0].data.start;
+      var newStart = me.subgroups[subgroup].items[0].data.start;
+      var newEnd = initialEnd - 1;
+
+      me.subgroups[subgroup].items.forEach(function (item) {
+        if (new Date(item.data.start) < new Date(newStart)) {
+          newStart = item.data.start;
+        }
+
+        var itemEnd = item.data.end || item.data.start;
+        if (new Date(itemEnd) > new Date(newEnd)) {
+          newEnd = itemEnd;
+        }
+      });
+
+      me.subgroups[subgroup].start = newStart;
+      me.subgroups[subgroup].end = new Date(newEnd - 1); // -1 to compensate for colliding end to start subgroups;
+    }
+  }
+};
+
+Group.prototype.orderSubgroups = function () {
+  if (this.subgroupOrderer !== undefined) {
+    var sortArray = [];
+    var subgroup;
+    if (typeof this.subgroupOrderer == 'string') {
+      for (subgroup in this.subgroups) {
+        sortArray.push({ subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer] });
+      }
+      sortArray.sort(function (a, b) {
+        return a.sortField - b.sortField;
+      });
+    } else if (typeof this.subgroupOrderer == 'function') {
+      for (subgroup in this.subgroups) {
+        sortArray.push(this.subgroups[subgroup].items[0].data);
+      }
+      sortArray.sort(this.subgroupOrderer);
+    }
+
+    if (sortArray.length > 0) {
+      for (var i = 0; i < sortArray.length; i++) {
+        this.subgroups[sortArray[i].subgroup].index = i;
+      }
+    }
+  }
+};
+
+Group.prototype.resetSubgroups = function () {
+  for (var subgroup in this.subgroups) {
+    if (this.subgroups.hasOwnProperty(subgroup)) {
+      this.subgroups[subgroup].visible = false;
+      this.subgroups[subgroup].height = 0;
+    }
+  }
+};
+
+/**
+ * Remove an item from the group
+ * @param {Item} item
+ */
+Group.prototype.remove = function (item) {
+  delete this.items[item.id];
+  item.setParent(null);
+  this.stackDirty = true;
+
+  // remove from visible items
+  var index = this.visibleItems.indexOf(item);
+  if (index != -1) this.visibleItems.splice(index, 1);
+
+  if (item.data.subgroup !== undefined) {
+    this._removeFromSubgroup(item);
+    this.orderSubgroups();
+  }
+};
+
+Group.prototype._removeFromSubgroup = function (item, subgroupId) {
+  subgroupId = subgroupId || item.data.subgroup;
+  if (subgroupId != undefined) {
+    var subgroup = this.subgroups[subgroupId];
+    if (subgroup) {
+      var itemIndex = subgroup.items.indexOf(item);
+      //  Check the item is actually in this subgroup. How should items not in the group be handled?
+      if (itemIndex >= 0) {
+        subgroup.items.splice(itemIndex, 1);
+        if (!subgroup.items.length) {
+          delete this.subgroups[subgroupId];
+        } else {
+          this._updateSubgroupsSizes();
+        }
+      }
+    }
+  }
+};
+
+/**
+ * Remove an item from the corresponding DataSet
+ * @param {Item} item
+ */
+Group.prototype.removeFromDataSet = function (item) {
+  this.itemSet.removeItem(item.id);
+};
+
+/**
+ * Reorder the items
+ */
+Group.prototype.order = function () {
+  var array = util.toArray(this.items);
+  var startArray = [];
+  var endArray = [];
+
+  for (var i = 0; i < array.length; i++) {
+    if (array[i].data.end !== undefined) {
+      endArray.push(array[i]);
+    }
+    startArray.push(array[i]);
+  }
+  this.orderedItems = {
+    byStart: startArray,
+    byEnd: endArray
+  };
+
+  stack.orderByStart(this.orderedItems.byStart);
+  stack.orderByEnd(this.orderedItems.byEnd);
+};
+
+/**
+ * Update the visible items
+ * @param {{byStart: Item[], byEnd: Item[]}} orderedItems   All items ordered by start date and by end date
+ * @param {Item[]} oldVisibleItems                          The previously visible items.
+ * @param {{start: number, end: number}} range              Visible range
+ * @return {Item[]} visibleItems                            The new visible items.
+ * @private
+ */
+Group.prototype._updateItemsInRange = function (orderedItems, oldVisibleItems, range) {
+  var visibleItems = [];
+  var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems
+
+  var interval = (range.end - range.start) / 4;
+  var lowerBound = range.start - interval;
+  var upperBound = range.end + interval;
+
+  // this function is used to do the binary search.
+  var searchFunction = function searchFunction(value) {
+    if (value < lowerBound) {
+      return -1;
+    } else if (value <= upperBound) {
+      return 0;
+    } else {
+      return 1;
+    }
+  };
+
+  // first check if the items that were in view previously are still in view.
+  // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window!
+  // also cleans up invisible items.
+  if (oldVisibleItems.length > 0) {
+    for (var i = 0; i < oldVisibleItems.length; i++) {
+      this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range);
+    }
+  }
+
+  // we do a binary search for the items that have only start values.
+  var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data', 'start');
+
+  // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values.
+  this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) {
+    return item.data.start < lowerBound || item.data.start > upperBound;
+  });
+
+  // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown.
+  // We therefore have to brute force check all items in the byEnd list
+  if (this.checkRangedItems == true) {
+    this.checkRangedItems = false;
+    for (i = 0; i < orderedItems.byEnd.length; i++) {
+      this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range);
+    }
+  } else {
+    // we do a binary search for the items that have defined end times.
+    var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data', 'end');
+
+    // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values.
+    this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) {
+      return item.data.end < lowerBound || item.data.end > upperBound;
+    });
+  }
+
+  var redrawQueue = {};
+  var redrawQueueLength = 0;
+
+  for (i = 0; i < visibleItems.length; i++) {
+    var item = visibleItems[i];
+    if (!item.displayed) {
+      var returnQueue = true;
+      redrawQueue[i] = item.redraw(returnQueue);
+      redrawQueueLength = redrawQueue[i].length;
+    }
+  }
+
+  var needRedraw = redrawQueueLength > 0;
+  if (needRedraw) {
+    // redraw all regular items
+    for (var j = 0; j < redrawQueueLength; j++) {
+      util.forEach(redrawQueue, function (fns) {
+        fns[j]();
+      });
+    }
+  }
+
+  for (i = 0; i < visibleItems.length; i++) {
+    visibleItems[i].repositionX();
+  }
+  return visibleItems;
+};
+
+Group.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) {
+  if (initialPos != -1) {
+    var i, item;
+    for (i = initialPos; i >= 0; i--) {
+      item = items[i];
+      if (breakCondition(item)) {
+        break;
+      } else {
+        if (visibleItemsLookup[item.id] === undefined) {
+          visibleItemsLookup[item.id] = true;
+          visibleItems.push(item);
+        }
+      }
+    }
+
+    for (i = initialPos + 1; i < items.length; i++) {
+      item = items[i];
+      if (breakCondition(item)) {
+        break;
+      } else {
+        if (visibleItemsLookup[item.id] === undefined) {
+          visibleItemsLookup[item.id] = true;
+          visibleItems.push(item);
+        }
+      }
+    }
+  }
+};
+
+/**
+ * this function is very similar to the _checkIfInvisible() but it does not
+ * return booleans, hides the item if it should not be seen and always adds to
+ * the visibleItems.
+ * this one is for brute forcing and hiding.
+ *
+ * @param {Item} item
+ * @param {Array} visibleItems
+ * @param {{start:number, end:number}} range
+ * @private
+ */
+Group.prototype._checkIfVisible = function (item, visibleItems, range) {
+  if (item.isVisible(range)) {
+    if (!item.displayed) item.show();
+    // reposition item horizontally
+    item.repositionX();
+    visibleItems.push(item);
+  } else {
+    if (item.displayed) item.hide();
+  }
+};
+
+/**
+ * this function is very similar to the _checkIfInvisible() but it does not
+ * return booleans, hides the item if it should not be seen and always adds to
+ * the visibleItems.
+ * this one is for brute forcing and hiding.
+ *
+ * @param {Item} item
+ * @param {Array.<vis.Item>} visibleItems
+ * @param {Object<number, boolean>} visibleItemsLookup
+ * @param {{start:number, end:number}} range
+ * @private
+ */
+Group.prototype._checkIfVisibleWithReference = function (item, visibleItems, visibleItemsLookup, range) {
+  if (item.isVisible(range)) {
+    if (visibleItemsLookup[item.id] === undefined) {
+      visibleItemsLookup[item.id] = true;
+      visibleItems.push(item);
+    }
+  } else {
+    if (item.displayed) item.hide();
+  }
+};
+
+Group.prototype.changeSubgroup = function (item, oldSubgroup, newSubgroup) {
+  this._removeFromSubgroup(item, oldSubgroup);
+  this._addToSubgroup(item, newSubgroup);
+  this.orderSubgroups();
+};
+
+module.exports = Group;
+
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Group = __webpack_require__(68);
+
+/**
+ * @constructor BackgroundGroup
+ * @param {number | string} groupId
+ * @param {Object} data
+ * @param {ItemSet} itemSet
+ * @extends Group
+ */
+function BackgroundGroup(groupId, data, itemSet) {
+  Group.call(this, groupId, data, itemSet);
+
+  this.width = 0;
+  this.height = 0;
+  this.top = 0;
+  this.left = 0;
+}
+
+BackgroundGroup.prototype = (0, _create2['default'])(Group.prototype);
+
+/**
+ * Repaint this group
+ * @param {{start: number, end: number}} range
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ * @param {boolean} [forceRestack=false]  Force restacking of all items
+ * @return {boolean} Returns true if the group is resized
+ */
+BackgroundGroup.prototype.redraw = function (range, margin, forceRestack) {
+  // eslint-disable-line no-unused-vars
+  var resized = false;
+
+  this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);
+
+  // calculate actual size
+  this.width = this.dom.background.offsetWidth;
+
+  // apply new height (just always zero for BackgroundGroup
+  this.dom.background.style.height = '0';
+
+  // update vertical position of items after they are re-stacked and the height of the group is calculated
+  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {
+    var item = this.visibleItems[i];
+    item.repositionY(margin);
+  }
+
+  return resized;
+};
+
+/**
+ * Show this group: attach to the DOM
+ */
+BackgroundGroup.prototype.show = function () {
+  if (!this.dom.background.parentNode) {
+    this.itemSet.dom.background.appendChild(this.dom.background);
+  }
+};
+
+module.exports = BackgroundGroup;
+
+/***/ }),
+/* 70 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Item = __webpack_require__(38);
+
+/**
+ * @constructor RangeItem
+ * @extends Item
+ * @param {Object} data             Object containing parameters start, end
+ *                                  content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ *                                  Conversion functions from time to screen and vice versa
+ * @param {Object} [options]        Configuration options
+ *                                  // TODO: describe options
+ */
+function RangeItem(data, conversion, options) {
+  this.props = {
+    content: {
+      width: 0
+    }
+  };
+  this.overflow = false; // if contents can overflow (css styling), this flag is set to true
+  this.options = options;
+  // validate data
+  if (data) {
+    if (data.start == undefined) {
+      throw new Error('Property "start" missing in item ' + data.id);
+    }
+    if (data.end == undefined) {
+      throw new Error('Property "end" missing in item ' + data.id);
+    }
+  }
+
+  Item.call(this, data, conversion, options);
+}
+
+RangeItem.prototype = new Item(null, null, null);
+
+RangeItem.prototype.baseClassName = 'vis-item vis-range';
+
+/**
+ * Check whether this item is visible inside given range
+ *
+ * @param {vis.Range} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+RangeItem.prototype.isVisible = function (range) {
+  // determine visibility
+  return this.data.start < range.end && this.data.end > range.start;
+};
+
+RangeItem.prototype._createDomElement = function () {
+  if (!this.dom) {
+    // create DOM
+    this.dom = {};
+
+    // background box
+    this.dom.box = document.createElement('div');
+    // className is updated in redraw()
+
+    // frame box (to prevent the item contents from overflowing)
+    this.dom.frame = document.createElement('div');
+    this.dom.frame.className = 'vis-item-overflow';
+    this.dom.box.appendChild(this.dom.frame);
+
+    // visible frame box (showing the frame that is always visible)
+    this.dom.visibleFrame = document.createElement('div');
+    this.dom.visibleFrame.className = 'vis-item-visible-frame';
+    this.dom.box.appendChild(this.dom.visibleFrame);
+
+    // contents box
+    this.dom.content = document.createElement('div');
+    this.dom.content.className = 'vis-item-content';
+    this.dom.frame.appendChild(this.dom.content);
+
+    // attach this item as attribute
+    this.dom.box['timeline-item'] = this;
+
+    this.dirty = true;
+  }
+};
+
+RangeItem.prototype._appendDomElement = function () {
+  if (!this.parent) {
+    throw new Error('Cannot redraw item: no parent attached');
+  }
+  if (!this.dom.box.parentNode) {
+    var foreground = this.parent.dom.foreground;
+    if (!foreground) {
+      throw new Error('Cannot redraw item: parent has no foreground container element');
+    }
+    foreground.appendChild(this.dom.box);
+  }
+  this.displayed = true;
+};
+
+RangeItem.prototype._updateDirtyDomComponents = function () {
+  // update dirty DOM. An item is marked dirty when:
+  // - the item is not yet rendered
+  // - the item's data is changed
+  // - the item is selected/deselected
+  if (this.dirty) {
+    this._updateContents(this.dom.content);
+    this._updateDataAttributes(this.dom.box);
+    this._updateStyle(this.dom.box);
+
+    var editable = this.editable.updateTime || this.editable.updateGroup;
+
+    // update class
+    var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly');
+    this.dom.box.className = this.baseClassName + className;
+
+    // turn off max-width to be able to calculate the real width
+    // this causes an extra browser repaint/reflow, but so be it
+    this.dom.content.style.maxWidth = 'none';
+  }
+};
+
+RangeItem.prototype._getDomComponentsSizes = function () {
+  // determine from css whether this box has overflow
+  this.overflow = window.getComputedStyle(this.dom.frame).overflow !== 'hidden';
+  return {
+    content: {
+      width: this.dom.content.offsetWidth
+    },
+    box: {
+      height: this.dom.box.offsetHeight
+    }
+  };
+};
+
+RangeItem.prototype._updateDomComponentsSizes = function (sizes) {
+  this.props.content.width = sizes.content.width;
+  this.height = sizes.box.height;
+  this.dom.content.style.maxWidth = '';
+  this.dirty = false;
+};
+
+RangeItem.prototype._repaintDomAdditionals = function () {
+  this._repaintOnItemUpdateTimeTooltip(this.dom.box);
+  this._repaintDeleteButton(this.dom.box);
+  this._repaintDragCenter();
+  this._repaintDragLeft();
+  this._repaintDragRight();
+};
+
+/**
+ * Repaint the item
+ * @param {boolean} [returnQueue=false]  return the queue
+ * @return {boolean} the redraw queue if returnQueue=true
+ */
+RangeItem.prototype.redraw = function (returnQueue) {
+  var sizes;
+  var queue = [
+  // create item DOM
+  this._createDomElement.bind(this),
+
+  // append DOM to parent DOM
+  this._appendDomElement.bind(this),
+
+  // update dirty DOM 
+  this._updateDirtyDomComponents.bind(this), function () {
+    if (this.dirty) {
+      sizes = this._getDomComponentsSizes.bind(this)();
+    }
+  }.bind(this), function () {
+    if (this.dirty) {
+      this._updateDomComponentsSizes.bind(this)(sizes);
+    }
+  }.bind(this),
+
+  // repaint DOM additionals
+  this._repaintDomAdditionals.bind(this)];
+
+  if (returnQueue) {
+    return queue;
+  } else {
+    var result;
+    queue.forEach(function (fn) {
+      result = fn();
+    });
+    return result;
+  }
+};
+
+/**
+ * Show the item in the DOM (when not already visible). The items DOM will
+ * be created when needed.
+ */
+RangeItem.prototype.show = function () {
+  if (!this.displayed) {
+    this.redraw();
+  }
+};
+
+/**
+ * Hide the item from the DOM (when visible)
+ */
+RangeItem.prototype.hide = function () {
+  if (this.displayed) {
+    var box = this.dom.box;
+
+    if (box.parentNode) {
+      box.parentNode.removeChild(box);
+    }
+
+    this.displayed = false;
+  }
+};
+
+/**
+ * Reposition the item horizontally
+ * @param {boolean} [limitSize=true] If true (default), the width of the range
+ *                                   item will be limited, as the browser cannot
+ *                                   display very wide divs. This means though
+ *                                   that the applied left and width may
+ *                                   not correspond to the ranges start and end
+ * @Override
+ */
+RangeItem.prototype.repositionX = function (limitSize) {
+  var parentWidth = this.parent.width;
+  var start = this.conversion.toScreen(this.data.start);
+  var end = this.conversion.toScreen(this.data.end);
+  var align = this.data.align === undefined ? this.options.align : this.data.align;
+  var contentStartPosition;
+  var contentWidth;
+
+  // limit the width of the range, as browsers cannot draw very wide divs
+  // unless limitSize: false is explicitly set in item data
+  if (this.data.limitSize !== false && (limitSize === undefined || limitSize === true)) {
+    if (start < -parentWidth) {
+      start = -parentWidth;
+    }
+    if (end > 2 * parentWidth) {
+      end = 2 * parentWidth;
+    }
+  }
+
+  // add 0.5 to compensate floating-point values rounding
+  var boxWidth = Math.max(end - start + 0.5, 1);
+
+  if (this.overflow) {
+    if (this.options.rtl) {
+      this.right = start;
+    } else {
+      this.left = start;
+    }
+    this.width = boxWidth + this.props.content.width;
+    contentWidth = this.props.content.width;
+
+    // Note: The calculation of width is an optimistic calculation, giving
+    //       a width which will not change when moving the Timeline
+    //       So no re-stacking needed, which is nicer for the eye;
+  } else {
+    if (this.options.rtl) {
+      this.right = start;
+    } else {
+      this.left = start;
+    }
+    this.width = boxWidth;
+    contentWidth = Math.min(end - start, this.props.content.width);
+  }
+
+  if (this.options.rtl) {
+    this.dom.box.style.right = this.right + 'px';
+  } else {
+    this.dom.box.style.left = this.left + 'px';
+  }
+  this.dom.box.style.width = boxWidth + 'px';
+
+  switch (align) {
+    case 'left':
+      if (this.options.rtl) {
+        this.dom.content.style.right = '0';
+      } else {
+        this.dom.content.style.left = '0';
+      }
+      break;
+
+    case 'right':
+      if (this.options.rtl) {
+        this.dom.content.style.right = Math.max(boxWidth - contentWidth, 0) + 'px';
+      } else {
+        this.dom.content.style.left = Math.max(boxWidth - contentWidth, 0) + 'px';
+      }
+      break;
+
+    case 'center':
+      if (this.options.rtl) {
+        this.dom.content.style.right = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';
+      } else {
+        this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';
+      }
+
+      break;
+
+    default:
+      // 'auto'
+      // when range exceeds left of the window, position the contents at the left of the visible area
+      if (this.overflow) {
+        if (end > 0) {
+          contentStartPosition = Math.max(-start, 0);
+        } else {
+          contentStartPosition = -contentWidth; // ensure it's not visible anymore
+        }
+      } else {
+        if (start < 0) {
+          contentStartPosition = -start;
+        } else {
+          contentStartPosition = 0;
+        }
+      }
+      if (this.options.rtl) {
+        this.dom.content.style.right = contentStartPosition + 'px';
+      } else {
+        this.dom.content.style.left = contentStartPosition + 'px';
+        this.dom.content.style.width = 'calc(100% - ' + contentStartPosition + 'px)';
+      }
+  }
+};
+
+/**
+ * Reposition the item vertically
+ * @Override
+ */
+RangeItem.prototype.repositionY = function () {
+  var orientation = this.options.orientation.item;
+  var box = this.dom.box;
+
+  if (orientation == 'top') {
+    box.style.top = this.top + 'px';
+  } else {
+    box.style.top = this.parent.height - this.top - this.height + 'px';
+  }
+};
+
+/**
+ * Repaint a drag area on the left side of the range when the range is selected
+ * @protected
+ */
+RangeItem.prototype._repaintDragLeft = function () {
+  if ((this.selected || this.options.itemsAlwaysDraggable.range) && this.options.editable.updateTime && !this.dom.dragLeft) {
+    // create and show drag area
+    var dragLeft = document.createElement('div');
+    dragLeft.className = 'vis-drag-left';
+    dragLeft.dragLeftItem = this;
+
+    this.dom.box.appendChild(dragLeft);
+    this.dom.dragLeft = dragLeft;
+  } else if (!this.selected && !this.options.itemsAlwaysDraggable.range && this.dom.dragLeft) {
+    // delete drag area
+    if (this.dom.dragLeft.parentNode) {
+      this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);
+    }
+    this.dom.dragLeft = null;
+  }
+};
+
+/**
+ * Repaint a drag area on the right side of the range when the range is selected
+ * @protected
+ */
+RangeItem.prototype._repaintDragRight = function () {
+  if ((this.selected || this.options.itemsAlwaysDraggable.range) && this.options.editable.updateTime && !this.dom.dragRight) {
+    // create and show drag area
+    var dragRight = document.createElement('div');
+    dragRight.className = 'vis-drag-right';
+    dragRight.dragRightItem = this;
+
+    this.dom.box.appendChild(dragRight);
+    this.dom.dragRight = dragRight;
+  } else if (!this.selected && !this.options.itemsAlwaysDraggable.range && this.dom.dragRight) {
+    // delete drag area
+    if (this.dom.dragRight.parentNode) {
+      this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);
+    }
+    this.dom.dragRight = null;
+  }
+};
+
+module.exports = RangeItem;
+
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+
+var ColorPicker = __webpack_require__(179)['default'];
+
+/**
+ * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.
+ * Boolean options are recognised as Boolean
+ * Number options should be written as array: [default value, min value, max value, stepsize]
+ * Colors should be written as array: ['color', '#ffffff']
+ * Strings with should be written as array: [option1, option2, option3, ..]
+ *
+ * The options are matched with their counterparts in each of the modules and the values used in the configuration are
+ */
+
+var Configurator = function () {
+  /**
+   * @param {Object} parentModule        | the location where parentModule.setOptions() can be called
+   * @param {Object} defaultContainer    | the default container of the module
+   * @param {Object} configureOptions    | the fully configured and predefined options set found in allOptions.js
+   * @param {number} pixelRatio          | canvas pixel ratio
+   */
+  function Configurator(parentModule, defaultContainer, configureOptions) {
+    var pixelRatio = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
+    (0, _classCallCheck3['default'])(this, Configurator);
+
+    this.parent = parentModule;
+    this.changedOptions = [];
+    this.container = defaultContainer;
+    this.allowCreation = false;
+
+    this.options = {};
+    this.initialized = false;
+    this.popupCounter = 0;
+    this.defaultOptions = {
+      enabled: false,
+      filter: true,
+      container: undefined,
+      showButton: true
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this.configureOptions = configureOptions;
+    this.moduleOptions = {};
+    this.domElements = [];
+    this.popupDiv = {};
+    this.popupLimit = 5;
+    this.popupHistory = {};
+    this.colorPicker = new ColorPicker(pixelRatio);
+    this.wrapper = undefined;
+  }
+
+  /**
+   * refresh all options.
+   * Because all modules parse their options by themselves, we just use their options. We copy them here.
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3['default'])(Configurator, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        // reset the popup history because the indices may have been changed.
+        this.popupHistory = {};
+        this._removePopup();
+
+        var enabled = true;
+        if (typeof options === 'string') {
+          this.options.filter = options;
+        } else if (options instanceof Array) {
+          this.options.filter = options.join();
+        } else if ((typeof options === 'undefined' ? 'undefined' : (0, _typeof3['default'])(options)) === 'object') {
+          if (options.container !== undefined) {
+            this.options.container = options.container;
+          }
+          if (options.filter !== undefined) {
+            this.options.filter = options.filter;
+          }
+          if (options.showButton !== undefined) {
+            this.options.showButton = options.showButton;
+          }
+          if (options.enabled !== undefined) {
+            enabled = options.enabled;
+          }
+        } else if (typeof options === 'boolean') {
+          this.options.filter = true;
+          enabled = options;
+        } else if (typeof options === 'function') {
+          this.options.filter = options;
+          enabled = true;
+        }
+        if (this.options.filter === false) {
+          enabled = false;
+        }
+
+        this.options.enabled = enabled;
+      }
+      this._clean();
+    }
+
+    /**
+     *
+     * @param {Object} moduleOptions
+     */
+
+  }, {
+    key: 'setModuleOptions',
+    value: function setModuleOptions(moduleOptions) {
+      this.moduleOptions = moduleOptions;
+      if (this.options.enabled === true) {
+        this._clean();
+        if (this.options.container !== undefined) {
+          this.container = this.options.container;
+        }
+        this._create();
+      }
+    }
+
+    /**
+     * Create all DOM elements
+     * @private
+     */
+
+  }, {
+    key: '_create',
+    value: function _create() {
+      var _this = this;
+
+      this._clean();
+      this.changedOptions = [];
+
+      var filter = this.options.filter;
+      var counter = 0;
+      var show = false;
+      for (var option in this.configureOptions) {
+        if (this.configureOptions.hasOwnProperty(option)) {
+          this.allowCreation = false;
+          show = false;
+          if (typeof filter === 'function') {
+            show = filter(option, []);
+            show = show || this._handleObject(this.configureOptions[option], [option], true);
+          } else if (filter === true || filter.indexOf(option) !== -1) {
+            show = true;
+          }
+
+          if (show !== false) {
+            this.allowCreation = true;
+
+            // linebreak between categories
+            if (counter > 0) {
+              this._makeItem([]);
+            }
+            // a header for the category
+            this._makeHeader(option);
+
+            // get the sub options
+            this._handleObject(this.configureOptions[option], [option]);
+          }
+          counter++;
+        }
+      }
+
+      if (this.options.showButton === true) {
+        var generateButton = document.createElement('div');
+        generateButton.className = 'vis-configuration vis-config-button';
+        generateButton.innerHTML = 'generate options';
+        generateButton.onclick = function () {
+          _this._printOptions();
+        };
+        generateButton.onmouseover = function () {
+          generateButton.className = 'vis-configuration vis-config-button hover';
+        };
+        generateButton.onmouseout = function () {
+          generateButton.className = 'vis-configuration vis-config-button';
+        };
+
+        this.optionsContainer = document.createElement('div');
+        this.optionsContainer.className = 'vis-configuration vis-config-option-container';
+
+        this.domElements.push(this.optionsContainer);
+        this.domElements.push(generateButton);
+      }
+
+      this._push();
+      //~ this.colorPicker.insertTo(this.container);
+    }
+
+    /**
+     * draw all DOM elements on the screen
+     * @private
+     */
+
+  }, {
+    key: '_push',
+    value: function _push() {
+      this.wrapper = document.createElement('div');
+      this.wrapper.className = 'vis-configuration-wrapper';
+      this.container.appendChild(this.wrapper);
+      for (var i = 0; i < this.domElements.length; i++) {
+        this.wrapper.appendChild(this.domElements[i]);
+      }
+
+      this._showPopupIfNeeded();
+    }
+
+    /**
+     * delete all DOM elements
+     * @private
+     */
+
+  }, {
+    key: '_clean',
+    value: function _clean() {
+      for (var i = 0; i < this.domElements.length; i++) {
+        this.wrapper.removeChild(this.domElements[i]);
+      }
+
+      if (this.wrapper !== undefined) {
+        this.container.removeChild(this.wrapper);
+        this.wrapper = undefined;
+      }
+      this.domElements = [];
+
+      this._removePopup();
+    }
+
+    /**
+     * get the value from the actualOptions if it exists
+     * @param {array} path    | where to look for the actual option
+     * @returns {*}
+     * @private
+     */
+
+  }, {
+    key: '_getValue',
+    value: function _getValue(path) {
+      var base = this.moduleOptions;
+      for (var i = 0; i < path.length; i++) {
+        if (base[path[i]] !== undefined) {
+          base = base[path[i]];
+        } else {
+          base = undefined;
+          break;
+        }
+      }
+      return base;
+    }
+
+    /**
+     * all option elements are wrapped in an item
+     * @param {Array} path    | where to look for the actual option
+     * @param {Array.<Element>} domElements
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_makeItem',
+    value: function _makeItem(path) {
+      if (this.allowCreation === true) {
+        var item = document.createElement('div');
+        item.className = 'vis-configuration vis-config-item vis-config-s' + path.length;
+
+        for (var _len = arguments.length, domElements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+          domElements[_key - 1] = arguments[_key];
+        }
+
+        domElements.forEach(function (element) {
+          item.appendChild(element);
+        });
+        this.domElements.push(item);
+        return this.domElements.length;
+      }
+      return 0;
+    }
+
+    /**
+     * header for major subjects
+     * @param {string} name
+     * @private
+     */
+
+  }, {
+    key: '_makeHeader',
+    value: function _makeHeader(name) {
+      var div = document.createElement('div');
+      div.className = 'vis-configuration vis-config-header';
+      div.innerHTML = name;
+      this._makeItem([], div);
+    }
+
+    /**
+     * make a label, if it is an object label, it gets different styling.
+     * @param {string} name
+     * @param {array} path    | where to look for the actual option
+     * @param {string} objectLabel
+     * @returns {HTMLElement}
+     * @private
+     */
+
+  }, {
+    key: '_makeLabel',
+    value: function _makeLabel(name, path) {
+      var objectLabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      var div = document.createElement('div');
+      div.className = 'vis-configuration vis-config-label vis-config-s' + path.length;
+      if (objectLabel === true) {
+        div.innerHTML = '<i><b>' + name + ':</b></i>';
+      } else {
+        div.innerHTML = name + ':';
+      }
+      return div;
+    }
+
+    /**
+     * make a dropdown list for multiple possible string optoins
+     * @param {Array.<number>} arr
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_makeDropdown',
+    value: function _makeDropdown(arr, value, path) {
+      var select = document.createElement('select');
+      select.className = 'vis-configuration vis-config-select';
+      var selectedValue = 0;
+      if (value !== undefined) {
+        if (arr.indexOf(value) !== -1) {
+          selectedValue = arr.indexOf(value);
+        }
+      }
+
+      for (var i = 0; i < arr.length; i++) {
+        var option = document.createElement('option');
+        option.value = arr[i];
+        if (i === selectedValue) {
+          option.selected = 'selected';
+        }
+        option.innerHTML = arr[i];
+        select.appendChild(option);
+      }
+
+      var me = this;
+      select.onchange = function () {
+        me._update(this.value, path);
+      };
+
+      var label = this._makeLabel(path[path.length - 1], path);
+      this._makeItem(path, label, select);
+    }
+
+    /**
+     * make a range object for numeric options
+     * @param {Array.<number>} arr
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_makeRange',
+    value: function _makeRange(arr, value, path) {
+      var defaultValue = arr[0];
+      var min = arr[1];
+      var max = arr[2];
+      var step = arr[3];
+      var range = document.createElement('input');
+      range.className = 'vis-configuration vis-config-range';
+      try {
+        range.type = 'range'; // not supported on IE9
+        range.min = min;
+        range.max = max;
+      }
+      // TODO: Add some error handling and remove this lint exception
+      catch (err) {} // eslint-disable-line no-empty
+      range.step = step;
+
+      // set up the popup settings in case they are needed.
+      var popupString = '';
+      var popupValue = 0;
+
+      if (value !== undefined) {
+        var factor = 1.20;
+        if (value < 0 && value * factor < min) {
+          range.min = Math.ceil(value * factor);
+          popupValue = range.min;
+          popupString = 'range increased';
+        } else if (value / factor < min) {
+          range.min = Math.ceil(value / factor);
+          popupValue = range.min;
+          popupString = 'range increased';
+        }
+        if (value * factor > max && max !== 1) {
+          range.max = Math.ceil(value * factor);
+          popupValue = range.max;
+          popupString = 'range increased';
+        }
+        range.value = value;
+      } else {
+        range.value = defaultValue;
+      }
+
+      var input = document.createElement('input');
+      input.className = 'vis-configuration vis-config-rangeinput';
+      input.value = range.value;
+
+      var me = this;
+      range.onchange = function () {
+        input.value = this.value;me._update(Number(this.value), path);
+      };
+      range.oninput = function () {
+        input.value = this.value;
+      };
+
+      var label = this._makeLabel(path[path.length - 1], path);
+      var itemIndex = this._makeItem(path, label, range, input);
+
+      // if a popup is needed AND it has not been shown for this value, show it.
+      if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) {
+        this.popupHistory[itemIndex] = popupValue;
+        this._setupPopup(popupString, itemIndex);
+      }
+    }
+
+    /**
+     * prepare the popup
+     * @param {string} string
+     * @param {number} index
+     * @private
+     */
+
+  }, {
+    key: '_setupPopup',
+    value: function _setupPopup(string, index) {
+      var _this2 = this;
+
+      if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) {
+        var div = document.createElement("div");
+        div.id = "vis-configuration-popup";
+        div.className = "vis-configuration-popup";
+        div.innerHTML = string;
+        div.onclick = function () {
+          _this2._removePopup();
+        };
+        this.popupCounter += 1;
+        this.popupDiv = { html: div, index: index };
+      }
+    }
+
+    /**
+     * remove the popup from the dom
+     * @private
+     */
+
+  }, {
+    key: '_removePopup',
+    value: function _removePopup() {
+      if (this.popupDiv.html !== undefined) {
+        this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);
+        clearTimeout(this.popupDiv.hideTimeout);
+        clearTimeout(this.popupDiv.deleteTimeout);
+        this.popupDiv = {};
+      }
+    }
+
+    /**
+     * Show the popup if it is needed.
+     * @private
+     */
+
+  }, {
+    key: '_showPopupIfNeeded',
+    value: function _showPopupIfNeeded() {
+      var _this3 = this;
+
+      if (this.popupDiv.html !== undefined) {
+        var correspondingElement = this.domElements[this.popupDiv.index];
+        var rect = correspondingElement.getBoundingClientRect();
+        this.popupDiv.html.style.left = rect.left + "px";
+        this.popupDiv.html.style.top = rect.top - 30 + "px"; // 30 is the height;
+        document.body.appendChild(this.popupDiv.html);
+        this.popupDiv.hideTimeout = setTimeout(function () {
+          _this3.popupDiv.html.style.opacity = 0;
+        }, 1500);
+        this.popupDiv.deleteTimeout = setTimeout(function () {
+          _this3._removePopup();
+        }, 1800);
+      }
+    }
+
+    /**
+     * make a checkbox for boolean options.
+     * @param {number} defaultValue
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_makeCheckbox',
+    value: function _makeCheckbox(defaultValue, value, path) {
+      var checkbox = document.createElement('input');
+      checkbox.type = 'checkbox';
+      checkbox.className = 'vis-configuration vis-config-checkbox';
+      checkbox.checked = defaultValue;
+      if (value !== undefined) {
+        checkbox.checked = value;
+        if (value !== defaultValue) {
+          if ((typeof defaultValue === 'undefined' ? 'undefined' : (0, _typeof3['default'])(defaultValue)) === 'object') {
+            if (value !== defaultValue.enabled) {
+              this.changedOptions.push({ path: path, value: value });
+            }
+          } else {
+            this.changedOptions.push({ path: path, value: value });
+          }
+        }
+      }
+
+      var me = this;
+      checkbox.onchange = function () {
+        me._update(this.checked, path);
+      };
+
+      var label = this._makeLabel(path[path.length - 1], path);
+      this._makeItem(path, label, checkbox);
+    }
+
+    /**
+     * make a text input field for string options.
+     * @param {number} defaultValue
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_makeTextInput',
+    value: function _makeTextInput(defaultValue, value, path) {
+      var checkbox = document.createElement('input');
+      checkbox.type = 'text';
+      checkbox.className = 'vis-configuration vis-config-text';
+      checkbox.value = value;
+      if (value !== defaultValue) {
+        this.changedOptions.push({ path: path, value: value });
+      }
+
+      var me = this;
+      checkbox.onchange = function () {
+        me._update(this.value, path);
+      };
+
+      var label = this._makeLabel(path[path.length - 1], path);
+      this._makeItem(path, label, checkbox);
+    }
+
+    /**
+     * make a color field with a color picker for color fields
+     * @param {Array.<number>} arr
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_makeColorField',
+    value: function _makeColorField(arr, value, path) {
+      var _this4 = this;
+
+      var defaultColor = arr[1];
+      var div = document.createElement('div');
+      value = value === undefined ? defaultColor : value;
+
+      if (value !== 'none') {
+        div.className = 'vis-configuration vis-config-colorBlock';
+        div.style.backgroundColor = value;
+      } else {
+        div.className = 'vis-configuration vis-config-colorBlock none';
+      }
+
+      value = value === undefined ? defaultColor : value;
+      div.onclick = function () {
+        _this4._showColorPicker(value, div, path);
+      };
+
+      var label = this._makeLabel(path[path.length - 1], path);
+      this._makeItem(path, label, div);
+    }
+
+    /**
+     * used by the color buttons to call the color picker.
+     * @param {number} value
+     * @param {HTMLElement} div
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_showColorPicker',
+    value: function _showColorPicker(value, div, path) {
+      var _this5 = this;
+
+      // clear the callback from this div
+      div.onclick = function () {};
+
+      this.colorPicker.insertTo(div);
+      this.colorPicker.show();
+
+      this.colorPicker.setColor(value);
+      this.colorPicker.setUpdateCallback(function (color) {
+        var colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')';
+        div.style.backgroundColor = colorString;
+        _this5._update(colorString, path);
+      });
+
+      // on close of the colorpicker, restore the callback.
+      this.colorPicker.setCloseCallback(function () {
+        div.onclick = function () {
+          _this5._showColorPicker(value, div, path);
+        };
+      });
+    }
+
+    /**
+     * parse an object and draw the correct items
+     * @param {Object} obj
+     * @param {array} [path=[]]    | where to look for the actual option
+     * @param {boolean} [checkOnly=false]
+     * @returns {boolean}
+     * @private
+     */
+
+  }, {
+    key: '_handleObject',
+    value: function _handleObject(obj) {
+      var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+      var checkOnly = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      var show = false;
+      var filter = this.options.filter;
+      var visibleInSet = false;
+      for (var subObj in obj) {
+        if (obj.hasOwnProperty(subObj)) {
+          show = true;
+          var item = obj[subObj];
+          var newPath = util.copyAndExtendArray(path, subObj);
+          if (typeof filter === 'function') {
+            show = filter(subObj, path);
+
+            // if needed we must go deeper into the object.
+            if (show === false) {
+              if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) {
+                this.allowCreation = false;
+                show = this._handleObject(item, newPath, true);
+                this.allowCreation = checkOnly === false;
+              }
+            }
+          }
+
+          if (show !== false) {
+            visibleInSet = true;
+            var value = this._getValue(newPath);
+
+            if (item instanceof Array) {
+              this._handleArray(item, value, newPath);
+            } else if (typeof item === 'string') {
+              this._makeTextInput(item, value, newPath);
+            } else if (typeof item === 'boolean') {
+              this._makeCheckbox(item, value, newPath);
+            } else if (item instanceof Object) {
+              // collapse the physics options that are not enabled
+              var draw = true;
+              if (path.indexOf('physics') !== -1) {
+                if (this.moduleOptions.physics.solver !== subObj) {
+                  draw = false;
+                }
+              }
+
+              if (draw === true) {
+                // initially collapse options with an disabled enabled option.
+                if (item.enabled !== undefined) {
+                  var enabledPath = util.copyAndExtendArray(newPath, 'enabled');
+                  var enabledValue = this._getValue(enabledPath);
+                  if (enabledValue === true) {
+                    var label = this._makeLabel(subObj, newPath, true);
+                    this._makeItem(newPath, label);
+                    visibleInSet = this._handleObject(item, newPath) || visibleInSet;
+                  } else {
+                    this._makeCheckbox(item, enabledValue, newPath);
+                  }
+                } else {
+                  var _label = this._makeLabel(subObj, newPath, true);
+                  this._makeItem(newPath, _label);
+                  visibleInSet = this._handleObject(item, newPath) || visibleInSet;
+                }
+              }
+            } else {
+              console.error('dont know how to handle', item, subObj, newPath);
+            }
+          }
+        }
+      }
+      return visibleInSet;
+    }
+
+    /**
+     * handle the array type of option
+     * @param {Array.<number>} arr
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_handleArray',
+    value: function _handleArray(arr, value, path) {
+      if (typeof arr[0] === 'string' && arr[0] === 'color') {
+        this._makeColorField(arr, value, path);
+        if (arr[1] !== value) {
+          this.changedOptions.push({ path: path, value: value });
+        }
+      } else if (typeof arr[0] === 'string') {
+        this._makeDropdown(arr, value, path);
+        if (arr[0] !== value) {
+          this.changedOptions.push({ path: path, value: value });
+        }
+      } else if (typeof arr[0] === 'number') {
+        this._makeRange(arr, value, path);
+        if (arr[0] !== value) {
+          this.changedOptions.push({ path: path, value: Number(value) });
+        }
+      }
+    }
+
+    /**
+     * called to update the network with the new settings.
+     * @param {number} value
+     * @param {array} path    | where to look for the actual option
+     * @private
+     */
+
+  }, {
+    key: '_update',
+    value: function _update(value, path) {
+      var options = this._constructOptions(value, path);
+
+      if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) {
+        this.parent.body.emitter.emit("configChange", options);
+      }
+      this.initialized = true;
+      this.parent.setOptions(options);
+    }
+
+    /**
+     *
+     * @param {string|Boolean} value
+     * @param {Array.<string>} path
+     * @param {{}} optionsObj
+     * @returns {{}}
+     * @private
+     */
+
+  }, {
+    key: '_constructOptions',
+    value: function _constructOptions(value, path) {
+      var optionsObj = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      var pointer = optionsObj;
+
+      // when dropdown boxes can be string or boolean, we typecast it into correct types
+      value = value === 'true' ? true : value;
+      value = value === 'false' ? false : value;
+
+      for (var i = 0; i < path.length; i++) {
+        if (path[i] !== 'global') {
+          if (pointer[path[i]] === undefined) {
+            pointer[path[i]] = {};
+          }
+          if (i !== path.length - 1) {
+            pointer = pointer[path[i]];
+          } else {
+            pointer[path[i]] = value;
+          }
+        }
+      }
+      return optionsObj;
+    }
+
+    /**
+     * @private
+     */
+
+  }, {
+    key: '_printOptions',
+    value: function _printOptions() {
+      var options = this.getOptions();
+      this.optionsContainer.innerHTML = '<pre>var options = ' + (0, _stringify2['default'])(options, null, 2) + '</pre>';
+    }
+
+    /**
+     *
+     * @returns {{}} options
+     */
+
+  }, {
+    key: 'getOptions',
+    value: function getOptions() {
+      var options = {};
+      for (var i = 0; i < this.changedOptions.length; i++) {
+        this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options);
+      }
+      return options;
+    }
+  }]);
+  return Configurator;
+}();
+
+exports['default'] = Configurator;
+
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var DOMutil = __webpack_require__(14);
+
+/**
+ *
+ * @param {number | string} groupId
+ * @param {Object} options   // TODO: Describe options
+ *
+ * @constructor Points
+ */
+function Points(groupId, options) {} // eslint-disable-line no-unused-vars
+
+
+/**
+ * draw the data points
+ *
+ * @param {Array} dataset
+ * @param {GraphGroup} group
+ * @param {Object} framework            | SVG DOM element
+ * @param {number} [offset]
+ */
+Points.draw = function (dataset, group, framework, offset) {
+  offset = offset || 0;
+  var callback = getCallback(framework, group);
+
+  for (var i = 0; i < dataset.length; i++) {
+    if (!callback) {
+      // draw the point the simple way.
+      DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label);
+    } else {
+      var callbackResult = callback(dataset[i], group); // result might be true, false or an object
+      if (callbackResult === true || (typeof callbackResult === 'undefined' ? 'undefined' : (0, _typeof3['default'])(callbackResult)) === 'object') {
+        DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label);
+      }
+    }
+  }
+};
+
+Points.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {
+  var fillHeight = iconHeight * 0.5;
+
+  var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg);
+  outline.setAttributeNS(null, "x", x);
+  outline.setAttributeNS(null, "y", y - fillHeight);
+  outline.setAttributeNS(null, "width", iconWidth);
+  outline.setAttributeNS(null, "height", 2 * fillHeight);
+  outline.setAttributeNS(null, "class", "vis-outline");
+
+  //Don't call callback on icon
+  DOMutil.drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg);
+};
+
+/**
+ *
+ * @param {vis.Group} group
+ * @param {any} callbackResult
+ * @returns {{style: *, styles: (*|string), size: *, className: *}}
+ */
+function getGroupTemplate(group, callbackResult) {
+  callbackResult = typeof callbackResult === 'undefined' ? {} : callbackResult;
+  return {
+    style: callbackResult.style || group.options.drawPoints.style,
+    styles: callbackResult.styles || group.options.drawPoints.styles,
+    size: callbackResult.size || group.options.drawPoints.size,
+    className: callbackResult.className || group.className
+  };
+}
+
+/**
+ *
+ * @param {Object} framework            | SVG DOM element
+ * @param {vis.Group} group
+ * @returns {function}
+ */
+function getCallback(framework, group) {
+  var callback = undefined;
+  // check for the graph2d onRender
+  if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == 'function') {
+    callback = framework.options.drawPoints.onRender;
+  }
+
+  // override it with the group onRender if defined
+  if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == 'function') {
+    callback = group.group.options.drawPoints.onRender;
+  }
+  return callback;
+}
+
+module.exports = Points;
+
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * NOTE: This is a bad base class
+ *
+ * Child classes are:
+ *
+ *   Image       - uses *only* image methods
+ *   Circle      - uses *only* _drawRawCircle
+ *   CircleImage - uses all
+ *
+ * TODO: Refactor, move _drawRawCircle to different module, derive Circle from NodeBase
+ *       Rename this to ImageBase
+ *       Consolidate common code in Image and CircleImage to base class
+ *
+ * @extends NodeBase
+ */
+var CircleImageBase = function (_NodeBase) {
+  (0, _inherits3['default'])(CircleImageBase, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function CircleImageBase(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, CircleImageBase);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (CircleImageBase.__proto__ || (0, _getPrototypeOf2['default'])(CircleImageBase)).call(this, options, body, labelModule));
+
+    _this.labelOffset = 0;
+    _this.selected = false;
+    return _this;
+  }
+
+  /**
+   *
+   * @param {Object} options
+   * @param {Object} [imageObj]
+   * @param {Object} [imageObjAlt]
+   */
+
+
+  (0, _createClass3['default'])(CircleImageBase, [{
+    key: 'setOptions',
+    value: function setOptions(options, imageObj, imageObjAlt) {
+      this.options = options;
+
+      if (!(imageObj === undefined && imageObjAlt === undefined)) {
+        this.setImages(imageObj, imageObjAlt);
+      }
+    }
+
+    /**
+     * Set the images for this node.
+     *
+     * The images can be updated after the initial setting of options;
+     * therefore, this method needs to be reentrant. 
+     *
+     * For correct working in error cases, it is necessary to properly set
+     * field 'nodes.brokenImage' in the options.
+     *
+     * @param {Image} imageObj  required; main image to show for this node
+     * @param {Image|undefined} imageObjAlt optional; image to show when node is selected
+     */
+
+  }, {
+    key: 'setImages',
+    value: function setImages(imageObj, imageObjAlt) {
+      if (imageObjAlt && this.selected) {
+        this.imageObj = imageObjAlt;
+        this.imageObjAlt = imageObj;
+      } else {
+        this.imageObj = imageObj;
+        this.imageObjAlt = imageObjAlt;
+      }
+    }
+
+    /**
+     * Set selection and switch between the base and the selected image.
+     *
+     * Do the switch only if imageObjAlt exists.
+     *
+     * @param {boolean} selected value of new selected state for current node
+     */
+
+  }, {
+    key: 'switchImages',
+    value: function switchImages(selected) {
+      var selection_changed = selected && !this.selected || !selected && this.selected;
+      this.selected = selected; // Remember new selection
+
+      if (this.imageObjAlt !== undefined && selection_changed) {
+        var imageTmp = this.imageObj;
+        this.imageObj = this.imageObjAlt;
+        this.imageObjAlt = imageTmp;
+      }
+    }
+
+    /**
+     * Adjust the node dimensions for a loaded image.
+     *
+     * Pre: this.imageObj is valid
+     */
+
+  }, {
+    key: '_resizeImage',
+    value: function _resizeImage() {
+      var width, height;
+
+      if (this.options.shapeProperties.useImageSize === false) {
+        // Use the size property
+        var ratio_width = 1;
+        var ratio_height = 1;
+
+        // Only calculate the proper ratio if both width and height not zero
+        if (this.imageObj.width && this.imageObj.height) {
+          if (this.imageObj.width > this.imageObj.height) {
+            ratio_width = this.imageObj.width / this.imageObj.height;
+          } else {
+            ratio_height = this.imageObj.height / this.imageObj.width;
+          }
+        }
+
+        width = this.options.size * 2 * ratio_width;
+        height = this.options.size * 2 * ratio_height;
+      } else {
+        // Use the image size
+        width = this.imageObj.width;
+        height = this.imageObj.height;
+      }
+
+      this.width = width;
+      this.height = height;
+      this.radius = 0.5 * this.width;
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @private
+     */
+
+  }, {
+    key: '_drawRawCircle',
+    value: function _drawRawCircle(ctx, x, y, values) {
+      this.initContextForDraw(ctx, values);
+      ctx.circle(x, y, values.size);
+      this.performFill(ctx, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @private
+     */
+
+  }, {
+    key: '_drawImageAtPosition',
+    value: function _drawImageAtPosition(ctx, values) {
+      if (this.imageObj.width != 0) {
+        // draw the image
+        ctx.globalAlpha = 1.0;
+
+        // draw shadow if enabled
+        this.enableShadow(ctx, values);
+
+        var factor = 1;
+        if (this.options.shapeProperties.interpolation === true) {
+          factor = this.imageObj.width / this.width / this.body.view.scale;
+        }
+
+        this.imageObj.drawImageAtPosition(ctx, factor, this.left, this.top, this.width, this.height);
+
+        // disable shadows for other elements.
+        this.disableShadow(ctx, values);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @private
+     */
+
+  }, {
+    key: '_drawImageLabel',
+    value: function _drawImageLabel(ctx, x, y, selected, hover) {
+      var yLabel;
+      var offset = 0;
+
+      if (this.height !== undefined) {
+        offset = this.height * 0.5;
+        var labelDimensions = this.labelModule.getTextSize(ctx, selected, hover);
+        if (labelDimensions.lineCount >= 1) {
+          offset += labelDimensions.height / 2;
+        }
+      }
+
+      yLabel = y + offset;
+
+      if (this.options.label) {
+        this.labelOffset = offset;
+      }
+      this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');
+    }
+  }]);
+  return CircleImageBase;
+}(_NodeBase3['default']);
+
+exports['default'] = CircleImageBase;
+
+/***/ }),
+/* 74 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var Label = __webpack_require__(117)['default'];
+var ComponentUtil = __webpack_require__(48)['default'];
+var CubicBezierEdge = __webpack_require__(215)['default'];
+var BezierEdgeDynamic = __webpack_require__(217)['default'];
+var BezierEdgeStatic = __webpack_require__(218)['default'];
+var StraightEdge = __webpack_require__(219)['default'];
+
+/**
+ * An edge connects two nodes and has a specific direction.
+ */
+
+var Edge = function () {
+  /**
+   * @param {Object} options        values specific to this edge, must contain at least 'from' and 'to'
+   * @param {Object} body           shared state from Network instance
+   * @param {Object} globalOptions  options from the EdgesHandler instance
+   * @param {Object} defaultOptions default options from the EdgeHandler instance. Value and reference are constant
+   */
+  function Edge(options, body, globalOptions, defaultOptions) {
+    (0, _classCallCheck3['default'])(this, Edge);
+
+    if (body === undefined) {
+      throw new Error("No body provided");
+    }
+
+    // Since globalOptions is constant in values as well as reference,
+    // Following needs to be done only once.
+
+    this.options = util.bridgeObject(globalOptions);
+    this.globalOptions = globalOptions;
+    this.defaultOptions = defaultOptions;
+    this.body = body;
+
+    // initialize variables
+    this.id = undefined;
+    this.fromId = undefined;
+    this.toId = undefined;
+    this.selected = false;
+    this.hover = false;
+    this.labelDirty = true;
+
+    this.baseWidth = this.options.width;
+    this.baseFontSize = this.options.font.size;
+
+    this.from = undefined; // a node
+    this.to = undefined; // a node
+
+    this.edgeType = undefined;
+
+    this.connected = false;
+
+    this.labelModule = new Label(this.body, this.options, true /* It's an edge label */);
+    this.setOptions(options);
+  }
+
+  /**
+   * Set or overwrite options for the edge
+   * @param {Object} options  an object with options
+   * @returns {null|boolean} null if no options, boolean if date changed
+   */
+
+
+  (0, _createClass3['default'])(Edge, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (!options) {
+        return;
+      }
+
+      Edge.parseOptions(this.options, options, true, this.globalOptions);
+
+      if (options.id !== undefined) {
+        this.id = options.id;
+      }
+      if (options.from !== undefined) {
+        this.fromId = options.from;
+      }
+      if (options.to !== undefined) {
+        this.toId = options.to;
+      }
+      if (options.title !== undefined) {
+        this.title = options.title;
+      }
+      if (options.value !== undefined) {
+        options.value = parseFloat(options.value);
+      }
+
+      var pile = [options, this.options, this.defaultOptions];
+      this.chooser = ComponentUtil.choosify('edge', pile);
+
+      // update label Module
+      this.updateLabelModule(options);
+
+      var dataChanged = this.updateEdgeType();
+
+      // if anything has been updates, reset the selection width and the hover width
+      this._setInteractionWidths();
+
+      // A node is connected when it has a from and to node that both exist in the network.body.nodes.
+      this.connect();
+
+      if (options.hidden !== undefined || options.physics !== undefined) {
+        dataChanged = true;
+      }
+
+      return dataChanged;
+    }
+
+    /**
+     *
+     * @param {Object} parentOptions
+     * @param {Object} newOptions
+     * @param {boolean} [allowDeletion=false]
+     * @param {Object} [globalOptions={}]
+     * @param {boolean} [copyFromGlobals=false]
+     */
+
+  }, {
+    key: 'getFormattingValues',
+
+
+    /**
+     *
+     * @returns {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}}
+     */
+    value: function getFormattingValues() {
+      var toArrow = this.options.arrows.to === true || this.options.arrows.to.enabled === true;
+      var fromArrow = this.options.arrows.from === true || this.options.arrows.from.enabled === true;
+      var middleArrow = this.options.arrows.middle === true || this.options.arrows.middle.enabled === true;
+      var inheritsColor = this.options.color.inherit;
+      var values = {
+        toArrow: toArrow,
+        toArrowScale: this.options.arrows.to.scaleFactor,
+        toArrowType: this.options.arrows.to.type,
+        middleArrow: middleArrow,
+        middleArrowScale: this.options.arrows.middle.scaleFactor,
+        middleArrowType: this.options.arrows.middle.type,
+        fromArrow: fromArrow,
+        fromArrowScale: this.options.arrows.from.scaleFactor,
+        fromArrowType: this.options.arrows.from.type,
+        arrowStrikethrough: this.options.arrowStrikethrough,
+        color: inheritsColor ? undefined : this.options.color.color,
+        inheritsColor: inheritsColor,
+        opacity: this.options.color.opacity,
+        hidden: this.options.hidden,
+        length: this.options.length,
+        shadow: this.options.shadow.enabled,
+        shadowColor: this.options.shadow.color,
+        shadowSize: this.options.shadow.size,
+        shadowX: this.options.shadow.x,
+        shadowY: this.options.shadow.y,
+        dashes: this.options.dashes,
+        width: this.options.width
+      };
+      if (this.selected || this.hover) {
+        if (this.chooser === true) {
+          if (this.selected) {
+            var selectedWidth = this.options.selectionWidth;
+            if (typeof selectedWidth === 'function') {
+              values.width = selectedWidth(values.width);
+            } else if (typeof selectedWidth === 'number') {
+              values.width += selectedWidth;
+            }
+            values.width = Math.max(values.width, 0.3 / this.body.view.scale);
+            values.color = this.options.color.highlight;
+            values.shadow = this.options.shadow.enabled;
+          } else if (this.hover) {
+            var hoverWidth = this.options.hoverWidth;
+            if (typeof hoverWidth === 'function') {
+              values.width = hoverWidth(values.width);
+            } else if (typeof hoverWidth === 'number') {
+              values.width += hoverWidth;
+            }
+            values.width = Math.max(values.width, 0.3 / this.body.view.scale);
+            values.color = this.options.color.hover;
+            values.shadow = this.options.shadow.enabled;
+          }
+        } else if (typeof this.chooser === 'function') {
+          this.chooser(values, this.options.id, this.selected, this.hover);
+          if (values.color !== undefined) {
+            values.inheritsColor = false;
+          }
+          if (values.shadow === false) {
+            if (values.shadowColor !== this.options.shadow.color || values.shadowSize !== this.options.shadow.size || values.shadowX !== this.options.shadow.x || values.shadowY !== this.options.shadow.y) {
+              values.shadow = true;
+            }
+          }
+        }
+      } else {
+        values.shadow = this.options.shadow.enabled;
+        values.width = Math.max(values.width, 0.3 / this.body.view.scale);
+      }
+      return values;
+    }
+
+    /**
+     * update the options in the label module
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'updateLabelModule',
+    value: function updateLabelModule(options) {
+      var pile = [options, this.options, this.globalOptions, // Currently set global edge options
+      this.defaultOptions];
+
+      this.labelModule.update(this.options, pile);
+
+      if (this.labelModule.baseSize !== undefined) {
+        this.baseFontSize = this.labelModule.baseSize;
+      }
+    }
+
+    /**
+     * update the edge type, set the options
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'updateEdgeType',
+    value: function updateEdgeType() {
+      var smooth = this.options.smooth;
+      var dataChanged = false;
+      var changeInType = true;
+      if (this.edgeType !== undefined) {
+        if (this.edgeType instanceof BezierEdgeDynamic && smooth.enabled === true && smooth.type === 'dynamic' || this.edgeType instanceof CubicBezierEdge && smooth.enabled === true && smooth.type === 'cubicBezier' || this.edgeType instanceof BezierEdgeStatic && smooth.enabled === true && smooth.type !== 'dynamic' && smooth.type !== 'cubicBezier' || this.edgeType instanceof StraightEdge && smooth.type.enabled === false) {
+          changeInType = false;
+        }
+        if (changeInType === true) {
+          dataChanged = this.cleanup();
+        }
+      }
+      if (changeInType === true) {
+        if (smooth.enabled === true) {
+          if (smooth.type === 'dynamic') {
+            dataChanged = true;
+            this.edgeType = new BezierEdgeDynamic(this.options, this.body, this.labelModule);
+          } else if (smooth.type === 'cubicBezier') {
+            this.edgeType = new CubicBezierEdge(this.options, this.body, this.labelModule);
+          } else {
+            this.edgeType = new BezierEdgeStatic(this.options, this.body, this.labelModule);
+          }
+        } else {
+          this.edgeType = new StraightEdge(this.options, this.body, this.labelModule);
+        }
+      } else {
+        // if nothing changes, we just set the options.
+        this.edgeType.setOptions(this.options);
+      }
+      return dataChanged;
+    }
+
+    /**
+     * Connect an edge to its nodes
+     */
+
+  }, {
+    key: 'connect',
+    value: function connect() {
+      this.disconnect();
+
+      this.from = this.body.nodes[this.fromId] || undefined;
+      this.to = this.body.nodes[this.toId] || undefined;
+      this.connected = this.from !== undefined && this.to !== undefined;
+
+      if (this.connected === true) {
+        this.from.attachEdge(this);
+        this.to.attachEdge(this);
+      } else {
+        if (this.from) {
+          this.from.detachEdge(this);
+        }
+        if (this.to) {
+          this.to.detachEdge(this);
+        }
+      }
+
+      this.edgeType.connect();
+    }
+
+    /**
+     * Disconnect an edge from its nodes
+     */
+
+  }, {
+    key: 'disconnect',
+    value: function disconnect() {
+      if (this.from) {
+        this.from.detachEdge(this);
+        this.from = undefined;
+      }
+      if (this.to) {
+        this.to.detachEdge(this);
+        this.to = undefined;
+      }
+
+      this.connected = false;
+    }
+
+    /**
+     * get the title of this edge.
+     * @return {string} title    The title of the edge, or undefined when no title
+     *                           has been set.
+     */
+
+  }, {
+    key: 'getTitle',
+    value: function getTitle() {
+      return this.title;
+    }
+
+    /**
+     * check if this node is selecte
+     * @return {boolean} selected   True if node is selected, else false
+     */
+
+  }, {
+    key: 'isSelected',
+    value: function isSelected() {
+      return this.selected;
+    }
+
+    /**
+     * Retrieve the value of the edge. Can be undefined
+     * @return {number} value
+     */
+
+  }, {
+    key: 'getValue',
+    value: function getValue() {
+      return this.options.value;
+    }
+
+    /**
+     * Adjust the value range of the edge. The edge will adjust it's width
+     * based on its value.
+     * @param {number} min
+     * @param {number} max
+     * @param {number} total
+     */
+
+  }, {
+    key: 'setValueRange',
+    value: function setValueRange(min, max, total) {
+      if (this.options.value !== undefined) {
+        var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);
+        var widthDiff = this.options.scaling.max - this.options.scaling.min;
+        if (this.options.scaling.label.enabled === true) {
+          var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;
+          this.options.font.size = this.options.scaling.label.min + scale * fontDiff;
+        }
+        this.options.width = this.options.scaling.min + scale * widthDiff;
+      } else {
+        this.options.width = this.baseWidth;
+        this.options.font.size = this.baseFontSize;
+      }
+
+      this._setInteractionWidths();
+      this.updateLabelModule();
+    }
+
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_setInteractionWidths',
+    value: function _setInteractionWidths() {
+      if (typeof this.options.hoverWidth === 'function') {
+        this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);
+      } else {
+        this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;
+      }
+      if (typeof this.options.selectionWidth === 'function') {
+        this.edgeType.selectionWidth = this.options.selectionWidth(this.options.width);
+      } else {
+        this.edgeType.selectionWidth = this.options.selectionWidth + this.options.width;
+      }
+    }
+
+    /**
+     * Redraw a edge
+     * Draw this edge in the given canvas
+     * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d");
+     * @param {CanvasRenderingContext2D}   ctx
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx) {
+      var values = this.getFormattingValues();
+      if (values.hidden) {
+        return;
+      }
+
+      // get the via node from the edge type
+      var viaNode = this.edgeType.getViaNode();
+      var arrowData = {};
+
+      // restore edge targets to defaults
+      this.edgeType.fromPoint = this.edgeType.from;
+      this.edgeType.toPoint = this.edgeType.to;
+
+      // from and to arrows give a different end point for edges. we set them here
+      if (values.fromArrow) {
+        arrowData.from = this.edgeType.getArrowData(ctx, 'from', viaNode, this.selected, this.hover, values);
+        if (values.arrowStrikethrough === false) this.edgeType.fromPoint = arrowData.from.core;
+      }
+      if (values.toArrow) {
+        arrowData.to = this.edgeType.getArrowData(ctx, 'to', viaNode, this.selected, this.hover, values);
+        if (values.arrowStrikethrough === false) this.edgeType.toPoint = arrowData.to.core;
+      }
+
+      // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.
+      if (values.middleArrow) {
+        arrowData.middle = this.edgeType.getArrowData(ctx, 'middle', viaNode, this.selected, this.hover, values);
+      }
+
+      // draw everything
+      this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);
+      this.drawArrows(ctx, arrowData, values);
+      this.drawLabel(ctx, viaNode);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Object} arrowData
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'drawArrows',
+    value: function drawArrows(ctx, arrowData, values) {
+      if (values.fromArrow) {
+        this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.from);
+      }
+      if (values.middleArrow) {
+        this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.middle);
+      }
+      if (values.toArrow) {
+        this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.to);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Node} viaNode
+     */
+
+  }, {
+    key: 'drawLabel',
+    value: function drawLabel(ctx, viaNode) {
+      if (this.options.label !== undefined) {
+        // set style
+        var node1 = this.from;
+        var node2 = this.to;
+
+        if (this.labelModule.differentState(this.selected, this.hover)) {
+          this.labelModule.getTextSize(ctx, this.selected, this.hover);
+        }
+
+        if (node1.id != node2.id) {
+          this.labelModule.pointToSelf = false;
+          var point = this.edgeType.getPoint(0.5, viaNode);
+          ctx.save();
+
+          var rotationPoint = this._getRotation(ctx);
+          if (rotationPoint.angle != 0) {
+            ctx.translate(rotationPoint.x, rotationPoint.y);
+            ctx.rotate(rotationPoint.angle);
+          }
+
+          // draw the label
+          this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);
+
+          /*
+                  // Useful debug code: draw a border around the label
+                  // This should **not** be enabled in production!
+                  var size = this.labelModule.getSize();; // ;; intentional so lint catches it
+                  ctx.strokeStyle = "#ff0000";
+                  ctx.strokeRect(size.left, size.top, size.width, size.height);
+                  // End  debug code
+          */
+
+          ctx.restore();
+        } else {
+          // Ignore the orientations.
+          this.labelModule.pointToSelf = true;
+          var x, y;
+          var radius = this.options.selfReferenceSize;
+          if (node1.shape.width > node1.shape.height) {
+            x = node1.x + node1.shape.width * 0.5;
+            y = node1.y - radius;
+          } else {
+            x = node1.x + radius;
+            y = node1.y - node1.shape.height * 0.5;
+          }
+          point = this._pointOnCircle(x, y, radius, 0.125);
+          this.labelModule.draw(ctx, point.x, point.y, this.selected, this.hover);
+        }
+      }
+    }
+
+    /**
+     * Determine all visual elements of this edge instance, in which the given
+     * point falls within the bounding shape.
+     *
+     * @param {point} point
+     * @returns {Array.<edgeClickItem|edgeLabelClickItem>} list with the items which are on the point
+     */
+
+  }, {
+    key: 'getItemsOnPoint',
+    value: function getItemsOnPoint(point) {
+      var ret = [];
+
+      if (this.labelModule.visible()) {
+        var rotationPoint = this._getRotation();
+        if (ComponentUtil.pointInRect(this.labelModule.getSize(), point, rotationPoint)) {
+          ret.push({ edgeId: this.id, labelId: 0 });
+        }
+      }
+
+      var obj = {
+        left: point.x,
+        top: point.y
+      };
+
+      if (this.isOverlappingWith(obj)) {
+        ret.push({ edgeId: this.id });
+      }
+
+      return ret;
+    }
+
+    /**
+     * Check if this object is overlapping with the provided object
+     * @param {Object} obj   an object with parameters left, top
+     * @return {boolean}     True if location is located on the edge
+     */
+
+  }, {
+    key: 'isOverlappingWith',
+    value: function isOverlappingWith(obj) {
+      if (this.connected) {
+        var distMax = 10;
+        var xFrom = this.from.x;
+        var yFrom = this.from.y;
+        var xTo = this.to.x;
+        var yTo = this.to.y;
+        var xObj = obj.left;
+        var yObj = obj.top;
+
+        var dist = this.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj);
+
+        return dist < distMax;
+      } else {
+        return false;
+      }
+    }
+
+    /** 
+     * Determine the rotation point, if any.
+     *
+     * @param {CanvasRenderingContext2D} [ctx] if passed, do a recalculation of the label size
+     * @returns {rotationPoint} the point to rotate around and the angle in radians to rotate
+     * @private
+     */
+
+  }, {
+    key: '_getRotation',
+    value: function _getRotation(ctx) {
+      var viaNode = this.edgeType.getViaNode();
+      var point = this.edgeType.getPoint(0.5, viaNode);
+
+      if (ctx !== undefined) {
+        this.labelModule.calculateLabelSize(ctx, this.selected, this.hover, point.x, point.y);
+      }
+
+      var ret = {
+        x: point.x,
+        y: this.labelModule.size.yLine,
+        angle: 0
+      };
+
+      if (!this.labelModule.visible()) {
+        return ret; // Don't even bother doing the atan2, there's nothing to draw
+      }
+
+      if (this.options.font.align === "horizontal") {
+        return ret; // No need to calculate angle
+      }
+
+      var dy = this.from.y - this.to.y;
+      var dx = this.from.x - this.to.x;
+      var angle = Math.atan2(dy, dx); // radians
+
+      // rotate so that label is readable
+      if (angle < -1 && dx < 0 || angle > 0 && dx < 0) {
+        angle += Math.PI;
+      }
+      ret.angle = angle;
+
+      return ret;
+    }
+
+    /**
+     * Get a point on a circle
+     * @param {number} x
+     * @param {number} y
+     * @param {number} radius
+     * @param {number} percentage Value between 0 (line start) and 1 (line end)
+     * @return {Object} point
+     * @private
+     */
+
+  }, {
+    key: '_pointOnCircle',
+    value: function _pointOnCircle(x, y, radius, percentage) {
+      var angle = percentage * 2 * Math.PI;
+      return {
+        x: x + radius * Math.cos(angle),
+        y: y - radius * Math.sin(angle)
+      };
+    }
+
+    /**
+     * Sets selected state to true
+     */
+
+  }, {
+    key: 'select',
+    value: function select() {
+      this.selected = true;
+    }
+
+    /**
+     * Sets selected state to false
+     */
+
+  }, {
+    key: 'unselect',
+    value: function unselect() {
+      this.selected = false;
+    }
+
+    /**
+     * cleans all required things on delete
+     * @returns {*}
+     */
+
+  }, {
+    key: 'cleanup',
+    value: function cleanup() {
+      return this.edgeType.cleanup();
+    }
+
+    /**
+     * Remove edge from the list and perform necessary cleanup.
+     */
+
+  }, {
+    key: 'remove',
+    value: function remove() {
+      this.cleanup();
+      this.disconnect();
+      delete this.body.edges[this.id];
+    }
+
+    /**
+     * Check if both connecting nodes exist
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'endPointsValid',
+    value: function endPointsValid() {
+      return this.body.nodes[this.fromId] !== undefined && this.body.nodes[this.toId] !== undefined;
+    }
+  }], [{
+    key: 'parseOptions',
+    value: function parseOptions(parentOptions, newOptions) {
+      var allowDeletion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+      var globalOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+      var copyFromGlobals = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+      var fields = ['arrowStrikethrough', 'id', 'from', 'hidden', 'hoverWidth', 'labelHighlightBold', 'length', 'line', 'opacity', 'physics', 'scaling', 'selectionWidth', 'selfReferenceSize', 'to', 'title', 'value', 'width', 'font', 'chosen', 'widthConstraint'];
+
+      // only deep extend the items in the field array. These do not have shorthand.
+      util.selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);
+
+      // Only copy label if it's a legal value.
+      if (ComponentUtil.isValidLabel(newOptions.label)) {
+        parentOptions.label = newOptions.label;
+      } else {
+        parentOptions.label = undefined;
+      }
+
+      util.mergeOptions(parentOptions, newOptions, 'smooth', globalOptions);
+      util.mergeOptions(parentOptions, newOptions, 'shadow', globalOptions);
+
+      if (newOptions.dashes !== undefined && newOptions.dashes !== null) {
+        parentOptions.dashes = newOptions.dashes;
+      } else if (allowDeletion === true && newOptions.dashes === null) {
+        parentOptions.dashes = (0, _create2['default'])(globalOptions.dashes); // this sets the pointer of the option back to the global option.
+      }
+
+      // set the scaling newOptions
+      if (newOptions.scaling !== undefined && newOptions.scaling !== null) {
+        if (newOptions.scaling.min !== undefined) {
+          parentOptions.scaling.min = newOptions.scaling.min;
+        }
+        if (newOptions.scaling.max !== undefined) {
+          parentOptions.scaling.max = newOptions.scaling.max;
+        }
+        util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', globalOptions.scaling);
+      } else if (allowDeletion === true && newOptions.scaling === null) {
+        parentOptions.scaling = (0, _create2['default'])(globalOptions.scaling); // this sets the pointer of the option back to the global option.
+      }
+
+      // handle multiple input cases for arrows
+      if (newOptions.arrows !== undefined && newOptions.arrows !== null) {
+        if (typeof newOptions.arrows === 'string') {
+          var arrows = newOptions.arrows.toLowerCase();
+          parentOptions.arrows.to.enabled = arrows.indexOf("to") != -1;
+          parentOptions.arrows.middle.enabled = arrows.indexOf("middle") != -1;
+          parentOptions.arrows.from.enabled = arrows.indexOf("from") != -1;
+        } else if ((0, _typeof3['default'])(newOptions.arrows) === 'object') {
+          util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to', globalOptions.arrows);
+          util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', globalOptions.arrows);
+          util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from', globalOptions.arrows);
+        } else {
+          throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:" + (0, _stringify2['default'])(newOptions.arrows));
+        }
+      } else if (allowDeletion === true && newOptions.arrows === null) {
+        parentOptions.arrows = (0, _create2['default'])(globalOptions.arrows); // this sets the pointer of the option back to the global option.
+      }
+
+      // handle multiple input cases for color
+      if (newOptions.color !== undefined && newOptions.color !== null) {
+        var fromColor = newOptions.color;
+        var toColor = parentOptions.color;
+
+        // If passed, fill in values from default options - required in the case of no prototype bridging
+        if (copyFromGlobals) {
+          util.deepExtend(toColor, globalOptions.color, false, allowDeletion);
+        } else {
+          // Clear local properties - need to do it like this in order to retain prototype bridges
+          for (var i in toColor) {
+            if (toColor.hasOwnProperty(i)) {
+              delete toColor[i];
+            }
+          }
+        }
+
+        if (util.isString(toColor)) {
+          toColor.color = toColor;
+          toColor.highlight = toColor;
+          toColor.hover = toColor;
+          toColor.inherit = false;
+          if (fromColor.opacity === undefined) {
+            toColor.opacity = 1.0; // set default
+          }
+        } else {
+          var colorsDefined = false;
+          if (fromColor.color !== undefined) {
+            toColor.color = fromColor.color;colorsDefined = true;
+          }
+          if (fromColor.highlight !== undefined) {
+            toColor.highlight = fromColor.highlight;colorsDefined = true;
+          }
+          if (fromColor.hover !== undefined) {
+            toColor.hover = fromColor.hover;colorsDefined = true;
+          }
+          if (fromColor.inherit !== undefined) {
+            toColor.inherit = fromColor.inherit;
+          }
+          if (fromColor.opacity !== undefined) {
+            toColor.opacity = Math.min(1, Math.max(0, fromColor.opacity));
+          }
+
+          if (colorsDefined === true) {
+            toColor.inherit = false;
+          } else {
+            if (toColor.inherit === undefined) {
+              toColor.inherit = 'from'; // Set default
+            }
+          }
+        }
+      } else if (allowDeletion === true && newOptions.color === null) {
+        parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options
+      }
+
+      if (allowDeletion === true && newOptions.font === null) {
+        parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options
+      }
+    }
+  }]);
+  return Edge;
+}();
+
+exports['default'] = Edge;
+
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _EdgeBase2 = __webpack_require__(118);
+
+var _EdgeBase3 = _interopRequireDefault(_EdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * The Base Class for all Bezier edges. Bezier curves are used to model smooth
+ * gradual curves in paths between nodes.
+ *
+ * @extends EdgeBase
+ */
+var BezierEdgeBase = function (_EdgeBase) {
+  (0, _inherits3['default'])(BezierEdgeBase, _EdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function BezierEdgeBase(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, BezierEdgeBase);
+    return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeBase)).call(this, options, body, labelModule));
+  }
+
+  /**
+   * This function uses binary search to look for the point where the bezier curve crosses the border of the node.
+   *
+   * @param {Node} nearNode
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {Node} viaNode
+   * @returns {*}
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(BezierEdgeBase, [{
+    key: '_findBorderPositionBezier',
+    value: function _findBorderPositionBezier(nearNode, ctx) {
+      var viaNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this._getViaCoordinates();
+
+      var maxIterations = 10;
+      var iteration = 0;
+      var low = 0;
+      var high = 1;
+      var pos, angle, distanceToBorder, distanceToPoint, difference;
+      var threshold = 0.2;
+      var node = this.to;
+      var from = false;
+      if (nearNode.id === this.from.id) {
+        node = this.from;
+        from = true;
+      }
+
+      while (low <= high && iteration < maxIterations) {
+        var middle = (low + high) * 0.5;
+
+        pos = this.getPoint(middle, viaNode);
+        angle = Math.atan2(node.y - pos.y, node.x - pos.x);
+        distanceToBorder = node.distanceToBorder(ctx, angle);
+        distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));
+        difference = distanceToBorder - distanceToPoint;
+        if (Math.abs(difference) < threshold) {
+          break; // found
+        } else if (difference < 0) {
+          // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.
+          if (from === false) {
+            low = middle;
+          } else {
+            high = middle;
+          }
+        } else {
+          if (from === false) {
+            high = middle;
+          } else {
+            low = middle;
+          }
+        }
+
+        iteration++;
+      }
+      pos.t = middle;
+
+      return pos;
+    }
+
+    /**
+     * Calculate the distance between a point (x3,y3) and a line segment from
+     * (x1,y1) to (x2,y2).
+     * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment
+     * @param {number} x1 from x
+     * @param {number} y1 from y
+     * @param {number} x2 to x
+     * @param {number} y2 to y
+     * @param {number} x3 point to check x
+     * @param {number} y3 point to check y
+     * @param {Node} via
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getDistanceToBezierEdge',
+    value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) {
+      // x3,y3 is the point
+      var minDistance = 1e9;
+      var distance = void 0;
+      var i = void 0,
+          t = void 0,
+          x = void 0,
+          y = void 0;
+      var lastX = x1;
+      var lastY = y1;
+      for (i = 1; i < 10; i++) {
+        t = 0.1 * i;
+        x = Math.pow(1 - t, 2) * x1 + 2 * t * (1 - t) * via.x + Math.pow(t, 2) * x2;
+        y = Math.pow(1 - t, 2) * y1 + 2 * t * (1 - t) * via.y + Math.pow(t, 2) * y2;
+        if (i > 0) {
+          distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);
+          minDistance = distance < minDistance ? distance : minDistance;
+        }
+        lastX = x;
+        lastY = y;
+      }
+
+      return minDistance;
+    }
+
+    /**
+     * Draw a bezier curve between two nodes
+     *
+     * The method accepts zero, one or two control points.
+     * Passing zero control points just draws a straight line
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Object}           values   | options for shadow drawing
+     * @param {Object|undefined} viaNode1 | first control point for curve drawing
+     * @param {Object|undefined} viaNode2 | second control point for curve drawing
+     *
+     * @protected
+     */
+
+  }, {
+    key: '_bezierCurve',
+    value: function _bezierCurve(ctx, values, viaNode1, viaNode2) {
+      var hasNode1 = viaNode1 !== undefined && viaNode1.x !== undefined;
+      var hasNode2 = viaNode2 !== undefined && viaNode2.x !== undefined;
+
+      ctx.beginPath();
+      ctx.moveTo(this.fromPoint.x, this.fromPoint.y);
+
+      if (hasNode1 && hasNode2) {
+        ctx.bezierCurveTo(viaNode1.x, viaNode1.y, viaNode2.x, viaNode2.y, this.toPoint.x, this.toPoint.y);
+      } else if (hasNode1) {
+        ctx.quadraticCurveTo(viaNode1.x, viaNode1.y, this.toPoint.x, this.toPoint.y);
+      } else {
+        // fallback to normal straight edge
+        ctx.lineTo(this.toPoint.x, this.toPoint.y);
+      }
+
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+      ctx.stroke();
+      this.disableShadow(ctx, values);
+    }
+
+    /**
+     *
+     * @returns {*|{x, y}|{x: undefined, y: undefined}}
+     */
+
+  }, {
+    key: 'getViaNode',
+    value: function getViaNode() {
+      return this._getViaCoordinates();
+    }
+  }]);
+  return BezierEdgeBase;
+}(_EdgeBase3['default']);
+
+exports['default'] = BezierEdgeBase;
+
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var util = __webpack_require__(2);
+
+/**
+ * Utility Class
+ */
+
+var NetworkUtil = function () {
+  /**
+   * @ignore
+   */
+  function NetworkUtil() {
+    (0, _classCallCheck3["default"])(this, NetworkUtil);
+  }
+
+  /**
+   * Find the center position of the network considering the bounding boxes
+   *
+   * @param {Array.<Node>} allNodes
+   * @param {Array.<Node>} [specificNodes=[]]
+   * @returns {{minX: number, maxX: number, minY: number, maxY: number}}
+   * @static
+   */
+
+
+  (0, _createClass3["default"])(NetworkUtil, null, [{
+    key: "getRange",
+    value: function getRange(allNodes) {
+      var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+
+      var minY = 1e9,
+          maxY = -1e9,
+          minX = 1e9,
+          maxX = -1e9,
+          node;
+      if (specificNodes.length > 0) {
+        for (var i = 0; i < specificNodes.length; i++) {
+          node = allNodes[specificNodes[i]];
+          if (minX > node.shape.boundingBox.left) {
+            minX = node.shape.boundingBox.left;
+          }
+          if (maxX < node.shape.boundingBox.right) {
+            maxX = node.shape.boundingBox.right;
+          }
+          if (minY > node.shape.boundingBox.top) {
+            minY = node.shape.boundingBox.top;
+          } // top is negative, bottom is positive
+          if (maxY < node.shape.boundingBox.bottom) {
+            maxY = node.shape.boundingBox.bottom;
+          } // top is negative, bottom is positive
+        }
+      }
+
+      if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {
+        minY = 0, maxY = 0, minX = 0, maxX = 0;
+      }
+      return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };
+    }
+
+    /**
+     * Find the center position of the network
+     *
+     * @param {Array.<Node>} allNodes
+     * @param {Array.<Node>} [specificNodes=[]]
+     * @returns {{minX: number, maxX: number, minY: number, maxY: number}}
+     * @static
+     */
+
+  }, {
+    key: "getRangeCore",
+    value: function getRangeCore(allNodes) {
+      var specificNodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+
+      var minY = 1e9,
+          maxY = -1e9,
+          minX = 1e9,
+          maxX = -1e9,
+          node;
+      if (specificNodes.length > 0) {
+        for (var i = 0; i < specificNodes.length; i++) {
+          node = allNodes[specificNodes[i]];
+          if (minX > node.x) {
+            minX = node.x;
+          }
+          if (maxX < node.x) {
+            maxX = node.x;
+          }
+          if (minY > node.y) {
+            minY = node.y;
+          } // top is negative, bottom is positive
+          if (maxY < node.y) {
+            maxY = node.y;
+          } // top is negative, bottom is positive
+        }
+      }
+
+      if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {
+        minY = 0, maxY = 0, minX = 0, maxX = 0;
+      }
+      return { minX: minX, maxX: maxX, minY: minY, maxY: maxY };
+    }
+
+    /**
+     * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};
+     * @returns {{x: number, y: number}}
+     * @static
+     */
+
+  }, {
+    key: "findCenter",
+    value: function findCenter(range) {
+      return { x: 0.5 * (range.maxX + range.minX),
+        y: 0.5 * (range.maxY + range.minY) };
+    }
+
+    /**
+     * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.
+     * @param {vis.Item} item
+     * @param {'node'|undefined} type
+     * @returns {{}}
+     * @static
+     */
+
+  }, {
+    key: "cloneOptions",
+    value: function cloneOptions(item, type) {
+      var clonedOptions = {};
+      if (type === undefined || type === 'node') {
+        util.deepExtend(clonedOptions, item.options, true);
+        clonedOptions.x = item.x;
+        clonedOptions.y = item.y;
+        clonedOptions.amountOfConnections = item.edges.length;
+      } else {
+        util.deepExtend(clonedOptions, item.options, true);
+      }
+      return clonedOptions;
+    }
+  }]);
+  return NetworkUtil;
+}();
+
+exports["default"] = NetworkUtil;
+
+/***/ }),
+/* 77 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(124), __esModule: true };
+
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for non-array-like ES3 and non-enumerable old V8 strings
+var cof = __webpack_require__(50);
+// eslint-disable-next-line no-prototype-builtins
+module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
+  return cof(it) == 'String' ? it.split('') : Object(it);
+};
+
+
+/***/ }),
+/* 79 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var LIBRARY = __webpack_require__(52);
+var $export = __webpack_require__(17);
+var redefine = __webpack_require__(83);
+var hide = __webpack_require__(26);
+var has = __webpack_require__(22);
+var Iterators = __webpack_require__(31);
+var $iterCreate = __webpack_require__(129);
+var setToStringTag = __webpack_require__(59);
+var getPrototypeOf = __webpack_require__(85);
+var ITERATOR = __webpack_require__(13)('iterator');
+var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
+var FF_ITERATOR = '@@iterator';
+var KEYS = 'keys';
+var VALUES = 'values';
+
+var returnThis = function () { return this; };
+
+module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
+  $iterCreate(Constructor, NAME, next);
+  var getMethod = function (kind) {
+    if (!BUGGY && kind in proto) return proto[kind];
+    switch (kind) {
+      case KEYS: return function keys() { return new Constructor(this, kind); };
+      case VALUES: return function values() { return new Constructor(this, kind); };
+    } return function entries() { return new Constructor(this, kind); };
+  };
+  var TAG = NAME + ' Iterator';
+  var DEF_VALUES = DEFAULT == VALUES;
+  var VALUES_BUG = false;
+  var proto = Base.prototype;
+  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
+  var $default = $native || getMethod(DEFAULT);
+  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
+  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
+  var methods, key, IteratorPrototype;
+  // Fix native
+  if ($anyNative) {
+    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
+    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
+      // Set @@toStringTag to native iterators
+      setToStringTag(IteratorPrototype, TAG, true);
+      // fix for some old engines
+      if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);
+    }
+  }
+  // fix Array#{values, @@iterator}.name in V8 / FF
+  if (DEF_VALUES && $native && $native.name !== VALUES) {
+    VALUES_BUG = true;
+    $default = function values() { return $native.call(this); };
+  }
+  // Define iterator
+  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
+    hide(proto, ITERATOR, $default);
+  }
+  // Plug for library
+  Iterators[NAME] = $default;
+  Iterators[TAG] = returnThis;
+  if (DEFAULT) {
+    methods = {
+      values: DEF_VALUES ? $default : getMethod(VALUES),
+      keys: IS_SET ? $default : getMethod(KEYS),
+      entries: $entries
+    };
+    if (FORCED) for (key in methods) {
+      if (!(key in proto)) redefine(proto, key, methods[key]);
+    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+  }
+  return methods;
+};
+
+
+/***/ }),
+/* 80 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// optional / simple context binding
+var aFunction = __webpack_require__(128);
+module.exports = function (fn, that, length) {
+  aFunction(fn);
+  if (that === undefined) return fn;
+  switch (length) {
+    case 1: return function (a) {
+      return fn.call(that, a);
+    };
+    case 2: return function (a, b) {
+      return fn.call(that, a, b);
+    };
+    case 3: return function (a, b, c) {
+      return fn.call(that, a, b, c);
+    };
+  }
+  return function (/* ...args */) {
+    return fn.apply(that, arguments);
+  };
+};
+
+
+/***/ }),
+/* 81 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = !__webpack_require__(21) && !__webpack_require__(28)(function () {
+  return Object.defineProperty(__webpack_require__(82)('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+/***/ }),
+/* 82 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var isObject = __webpack_require__(32);
+var document = __webpack_require__(18).document;
+// typeof document.createElement is 'object' in old IE
+var is = isObject(document) && isObject(document.createElement);
+module.exports = function (it) {
+  return is ? document.createElement(it) : {};
+};
+
+
+/***/ }),
+/* 83 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(26);
+
+
+/***/ }),
+/* 84 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var has = __webpack_require__(22);
+var toIObject = __webpack_require__(25);
+var arrayIndexOf = __webpack_require__(131)(false);
+var IE_PROTO = __webpack_require__(56)('IE_PROTO');
+
+module.exports = function (object, names) {
+  var O = toIObject(object);
+  var i = 0;
+  var result = [];
+  var key;
+  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
+  // Don't enum bug & hidden keys
+  while (names.length > i) if (has(O, key = names[i++])) {
+    ~arrayIndexOf(result, key) || result.push(key);
+  }
+  return result;
+};
+
+
+/***/ }),
+/* 85 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+var has = __webpack_require__(22);
+var toObject = __webpack_require__(41);
+var IE_PROTO = __webpack_require__(56)('IE_PROTO');
+var ObjectProto = Object.prototype;
+
+module.exports = Object.getPrototypeOf || function (O) {
+  O = toObject(O);
+  if (has(O, IE_PROTO)) return O[IE_PROTO];
+  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+    return O.constructor.prototype;
+  } return O instanceof Object ? ObjectProto : null;
+};
+
+
+/***/ }),
+/* 86 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// getting tag from 19.1.3.6 Object.prototype.toString()
+var cof = __webpack_require__(50);
+var TAG = __webpack_require__(13)('toStringTag');
+// ES3 wrong here
+var ARG = cof(function () { return arguments; }()) == 'Arguments';
+
+// fallback for IE11 Script Access Denied error
+var tryGet = function (it, key) {
+  try {
+    return it[key];
+  } catch (e) { /* empty */ }
+};
+
+module.exports = function (it) {
+  var O, T, B;
+  return it === undefined ? 'Undefined' : it === null ? 'Null'
+    // @@toStringTag case
+    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
+    // builtinTag case
+    : ARG ? cof(O)
+    // ES3 arguments fallback
+    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+};
+
+
+/***/ }),
+/* 87 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// most Object methods by ES6 should accept primitives
+var $export = __webpack_require__(17);
+var core = __webpack_require__(7);
+var fails = __webpack_require__(28);
+module.exports = function (KEY, exec) {
+  var fn = (core.Object || {})[KEY] || Object[KEY];
+  var exp = {};
+  exp[KEY] = exec(fn);
+  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
+};
+
+
+/***/ }),
+/* 88 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+var $keys = __webpack_require__(84);
+var hiddenKeys = __webpack_require__(58).concat('length', 'prototype');
+
+exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
+  return $keys(O, hiddenKeys);
+};
+
+
+/***/ }),
+/* 89 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var pIE = __webpack_require__(42);
+var createDesc = __webpack_require__(39);
+var toIObject = __webpack_require__(25);
+var toPrimitive = __webpack_require__(53);
+var has = __webpack_require__(22);
+var IE8_DOM_DEFINE = __webpack_require__(81);
+var gOPD = Object.getOwnPropertyDescriptor;
+
+exports.f = __webpack_require__(21) ? gOPD : function getOwnPropertyDescriptor(O, P) {
+  O = toIObject(O);
+  P = toPrimitive(P, true);
+  if (IE8_DOM_DEFINE) try {
+    return gOPD(O, P);
+  } catch (e) { /* empty */ }
+  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
+};
+
+
+/***/ }),
+/* 90 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(162), __esModule: true };
+
+/***/ }),
+/* 91 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * @prototype Point2d
+ * @param {number} [x]
+ * @param {number} [y]
+ */
+function Point2d(x, y) {
+  this.x = x !== undefined ? x : 0;
+  this.y = y !== undefined ? y : 0;
+}
+
+module.exports = Point2d;
+
+/***/ }),
+/* 92 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var util = __webpack_require__(2);
+
+/**
+ * An html slider control with start/stop/prev/next buttons
+ *
+ * @constructor Slider
+ * @param {Element} container  The element where the slider will be created
+ * @param {Object} options   Available options:
+ *                 {boolean} visible   If true (default) the
+ *                           slider is visible.
+ */
+function Slider(container, options) {
+  if (container === undefined) {
+    throw new Error('No container element defined');
+  }
+  this.container = container;
+  this.visible = options && options.visible != undefined ? options.visible : true;
+
+  if (this.visible) {
+    this.frame = document.createElement('DIV');
+    //this.frame.style.backgroundColor = '#E5E5E5';
+    this.frame.style.width = '100%';
+    this.frame.style.position = 'relative';
+    this.container.appendChild(this.frame);
+
+    this.frame.prev = document.createElement('INPUT');
+    this.frame.prev.type = 'BUTTON';
+    this.frame.prev.value = 'Prev';
+    this.frame.appendChild(this.frame.prev);
+
+    this.frame.play = document.createElement('INPUT');
+    this.frame.play.type = 'BUTTON';
+    this.frame.play.value = 'Play';
+    this.frame.appendChild(this.frame.play);
+
+    this.frame.next = document.createElement('INPUT');
+    this.frame.next.type = 'BUTTON';
+    this.frame.next.value = 'Next';
+    this.frame.appendChild(this.frame.next);
+
+    this.frame.bar = document.createElement('INPUT');
+    this.frame.bar.type = 'BUTTON';
+    this.frame.bar.style.position = 'absolute';
+    this.frame.bar.style.border = '1px solid red';
+    this.frame.bar.style.width = '100px';
+    this.frame.bar.style.height = '6px';
+    this.frame.bar.style.borderRadius = '2px';
+    this.frame.bar.style.MozBorderRadius = '2px';
+    this.frame.bar.style.border = '1px solid #7F7F7F';
+    this.frame.bar.style.backgroundColor = '#E5E5E5';
+    this.frame.appendChild(this.frame.bar);
+
+    this.frame.slide = document.createElement('INPUT');
+    this.frame.slide.type = 'BUTTON';
+    this.frame.slide.style.margin = '0px';
+    this.frame.slide.value = ' ';
+    this.frame.slide.style.position = 'relative';
+    this.frame.slide.style.left = '-100px';
+    this.frame.appendChild(this.frame.slide);
+
+    // create events
+    var me = this;
+    this.frame.slide.onmousedown = function (event) {
+      me._onMouseDown(event);
+    };
+    this.frame.prev.onclick = function (event) {
+      me.prev(event);
+    };
+    this.frame.play.onclick = function (event) {
+      me.togglePlay(event);
+    };
+    this.frame.next.onclick = function (event) {
+      me.next(event);
+    };
+  }
+
+  this.onChangeCallback = undefined;
+
+  this.values = [];
+  this.index = undefined;
+
+  this.playTimeout = undefined;
+  this.playInterval = 1000; // milliseconds
+  this.playLoop = true;
+}
+
+/**
+ * Select the previous index
+ */
+Slider.prototype.prev = function () {
+  var index = this.getIndex();
+  if (index > 0) {
+    index--;
+    this.setIndex(index);
+  }
+};
+
+/**
+ * Select the next index
+ */
+Slider.prototype.next = function () {
+  var index = this.getIndex();
+  if (index < this.values.length - 1) {
+    index++;
+    this.setIndex(index);
+  }
+};
+
+/**
+ * Select the next index
+ */
+Slider.prototype.playNext = function () {
+  var start = new Date();
+
+  var index = this.getIndex();
+  if (index < this.values.length - 1) {
+    index++;
+    this.setIndex(index);
+  } else if (this.playLoop) {
+    // jump to the start
+    index = 0;
+    this.setIndex(index);
+  }
+
+  var end = new Date();
+  var diff = end - start;
+
+  // calculate how much time it to to set the index and to execute the callback
+  // function.
+  var interval = Math.max(this.playInterval - diff, 0);
+  // document.title = diff // TODO: cleanup
+
+  var me = this;
+  this.playTimeout = setTimeout(function () {
+    me.playNext();
+  }, interval);
+};
+
+/**
+ * Toggle start or stop playing
+ */
+Slider.prototype.togglePlay = function () {
+  if (this.playTimeout === undefined) {
+    this.play();
+  } else {
+    this.stop();
+  }
+};
+
+/**
+ * Start playing
+ */
+Slider.prototype.play = function () {
+  // Test whether already playing
+  if (this.playTimeout) return;
+
+  this.playNext();
+
+  if (this.frame) {
+    this.frame.play.value = 'Stop';
+  }
+};
+
+/**
+ * Stop playing
+ */
+Slider.prototype.stop = function () {
+  clearInterval(this.playTimeout);
+  this.playTimeout = undefined;
+
+  if (this.frame) {
+    this.frame.play.value = 'Play';
+  }
+};
+
+/**
+ * Set a callback function which will be triggered when the value of the
+ * slider bar has changed.
+ *
+ * @param {function} callback
+ */
+Slider.prototype.setOnChangeCallback = function (callback) {
+  this.onChangeCallback = callback;
+};
+
+/**
+ * Set the interval for playing the list
+ * @param {number} interval   The interval in milliseconds
+ */
+Slider.prototype.setPlayInterval = function (interval) {
+  this.playInterval = interval;
+};
+
+/**
+ * Retrieve the current play interval
+ * @return {number} interval   The interval in milliseconds
+ */
+Slider.prototype.getPlayInterval = function () {
+  return this.playInterval;
+};
+
+/**
+ * Set looping on or off
+ * @param {boolean} doLoop  If true, the slider will jump to the start when
+ *               the end is passed, and will jump to the end
+ *               when the start is passed.
+ *
+ */
+Slider.prototype.setPlayLoop = function (doLoop) {
+  this.playLoop = doLoop;
+};
+
+/**
+ * Execute the onchange callback function
+ */
+Slider.prototype.onChange = function () {
+  if (this.onChangeCallback !== undefined) {
+    this.onChangeCallback();
+  }
+};
+
+/**
+ * redraw the slider on the correct place
+ */
+Slider.prototype.redraw = function () {
+  if (this.frame) {
+    // resize the bar
+    this.frame.bar.style.top = this.frame.clientHeight / 2 - this.frame.bar.offsetHeight / 2 + 'px';
+    this.frame.bar.style.width = this.frame.clientWidth - this.frame.prev.clientWidth - this.frame.play.clientWidth - this.frame.next.clientWidth - 30 + 'px';
+
+    // position the slider button
+    var left = this.indexToLeft(this.index);
+    this.frame.slide.style.left = left + 'px';
+  }
+};
+
+/**
+ * Set the list with values for the slider
+ * @param {Array} values   A javascript array with values (any type)
+ */
+Slider.prototype.setValues = function (values) {
+  this.values = values;
+
+  if (this.values.length > 0) this.setIndex(0);else this.index = undefined;
+};
+
+/**
+ * Select a value by its index
+ * @param {number} index
+ */
+Slider.prototype.setIndex = function (index) {
+  if (index < this.values.length) {
+    this.index = index;
+
+    this.redraw();
+    this.onChange();
+  } else {
+    throw new Error('Index out of range');
+  }
+};
+
+/**
+ * retrieve the index of the currently selected vaue
+ * @return {number} index
+ */
+Slider.prototype.getIndex = function () {
+  return this.index;
+};
+
+/**
+ * retrieve the currently selected value
+ * @return {*} value
+ */
+Slider.prototype.get = function () {
+  return this.values[this.index];
+};
+
+Slider.prototype._onMouseDown = function (event) {
+  // only react on left mouse button down
+  var leftButtonDown = event.which ? event.which === 1 : event.button === 1;
+  if (!leftButtonDown) return;
+
+  this.startClientX = event.clientX;
+  this.startSlideX = parseFloat(this.frame.slide.style.left);
+
+  this.frame.style.cursor = 'move';
+
+  // add event listeners to handle moving the contents
+  // we store the function onmousemove and onmouseup in the graph, so we can
+  // remove the eventlisteners lateron in the function mouseUp()
+  var me = this;
+  this.onmousemove = function (event) {
+    me._onMouseMove(event);
+  };
+  this.onmouseup = function (event) {
+    me._onMouseUp(event);
+  };
+  util.addEventListener(document, 'mousemove', this.onmousemove);
+  util.addEventListener(document, 'mouseup', this.onmouseup);
+  util.preventDefault(event);
+};
+
+Slider.prototype.leftToIndex = function (left) {
+  var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10;
+  var x = left - 3;
+
+  var index = Math.round(x / width * (this.values.length - 1));
+  if (index < 0) index = 0;
+  if (index > this.values.length - 1) index = this.values.length - 1;
+
+  return index;
+};
+
+Slider.prototype.indexToLeft = function (index) {
+  var width = parseFloat(this.frame.bar.style.width) - this.frame.slide.clientWidth - 10;
+
+  var x = index / (this.values.length - 1) * width;
+  var left = x + 3;
+
+  return left;
+};
+
+Slider.prototype._onMouseMove = function (event) {
+  var diff = event.clientX - this.startClientX;
+  var x = this.startSlideX + diff;
+
+  var index = this.leftToIndex(x);
+
+  this.setIndex(index);
+
+  util.preventDefault();
+};
+
+Slider.prototype._onMouseUp = function (event) {
+  // eslint-disable-line no-unused-vars
+  this.frame.style.cursor = 'auto';
+
+  // remove event listeners
+  util.removeEventListener(document, 'mousemove', this.onmousemove);
+  util.removeEventListener(document, 'mouseup', this.onmouseup);
+
+  util.preventDefault();
+};
+
+module.exports = Slider;
+
+/***/ }),
+/* 93 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * @prototype StepNumber
+ * The class StepNumber is an iterator for Numbers. You provide a start and end
+ * value, and a best step size. StepNumber itself rounds to fixed values and
+ * a finds the step that best fits the provided step.
+ *
+ * If prettyStep is true, the step size is chosen as close as possible to the
+ * provided step, but being a round value like 1, 2, 5, 10, 20, 50, ....
+ *
+ * Example usage:
+ *   var step = new StepNumber(0, 10, 2.5, true);
+ *   step.start();
+ *   while (!step.end()) {
+ *   alert(step.getCurrent());
+ *   step.next();
+ *   }
+ *
+ * Version: 1.0
+ *
+ * @param {number} start     The start value
+ * @param {number} end     The end value
+ * @param {number} step    Optional. Step size. Must be a positive value.
+ * @param {boolean} prettyStep Optional. If true, the step size is rounded
+ *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)
+ */
+function StepNumber(start, end, step, prettyStep) {
+  // set default values
+  this._start = 0;
+  this._end = 0;
+  this._step = 1;
+  this.prettyStep = true;
+  this.precision = 5;
+
+  this._current = 0;
+  this.setRange(start, end, step, prettyStep);
+}
+
+/**
+ * Check for input values, to prevent disasters from happening
+ *
+ * Source: http://stackoverflow.com/a/1830844
+ *
+ * @param {string} n
+ * @returns {boolean}
+ */
+StepNumber.prototype.isNumeric = function (n) {
+  return !isNaN(parseFloat(n)) && isFinite(n);
+};
+
+/**
+ * Set a new range: start, end and step.
+ *
+ * @param {number} start     The start value
+ * @param {number} end     The end value
+ * @param {number} step    Optional. Step size. Must be a positive value.
+ * @param {boolean} prettyStep Optional. If true, the step size is rounded
+ *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)
+ */
+StepNumber.prototype.setRange = function (start, end, step, prettyStep) {
+  if (!this.isNumeric(start)) {
+    throw new Error('Parameter \'start\' is not numeric; value: ' + start);
+  }
+  if (!this.isNumeric(end)) {
+    throw new Error('Parameter \'end\' is not numeric; value: ' + start);
+  }
+  if (!this.isNumeric(step)) {
+    throw new Error('Parameter \'step\' is not numeric; value: ' + start);
+  }
+
+  this._start = start ? start : 0;
+  this._end = end ? end : 0;
+
+  this.setStep(step, prettyStep);
+};
+
+/**
+ * Set a new step size
+ * @param {number} step    New step size. Must be a positive value
+ * @param {boolean} prettyStep Optional. If true, the provided step is rounded
+ *               to a pretty step size (like 1, 2, 5, 10, 20, 50, ...)
+ */
+StepNumber.prototype.setStep = function (step, prettyStep) {
+  if (step === undefined || step <= 0) return;
+
+  if (prettyStep !== undefined) this.prettyStep = prettyStep;
+
+  if (this.prettyStep === true) this._step = StepNumber.calculatePrettyStep(step);else this._step = step;
+};
+
+/**
+ * Calculate a nice step size, closest to the desired step size.
+ * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an
+ * integer Number. For example 1, 2, 5, 10, 20, 50, etc...
+ * @param {number}  step  Desired step size
+ * @return {number}     Nice step size
+ */
+StepNumber.calculatePrettyStep = function (step) {
+  var log10 = function log10(x) {
+    return Math.log(x) / Math.LN10;
+  };
+
+  // try three steps (multiple of 1, 2, or 5
+  var step1 = Math.pow(10, Math.round(log10(step))),
+      step2 = 2 * Math.pow(10, Math.round(log10(step / 2))),
+      step5 = 5 * Math.pow(10, Math.round(log10(step / 5)));
+
+  // choose the best step (closest to minimum step)
+  var prettyStep = step1;
+  if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2;
+  if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5;
+
+  // for safety
+  if (prettyStep <= 0) {
+    prettyStep = 1;
+  }
+
+  return prettyStep;
+};
+
+/**
+ * returns the current value of the step
+ * @return {number} current value
+ */
+StepNumber.prototype.getCurrent = function () {
+  return parseFloat(this._current.toPrecision(this.precision));
+};
+
+/**
+ * returns the current step size
+ * @return {number} current step size
+ */
+StepNumber.prototype.getStep = function () {
+  return this._step;
+};
+
+/**
+ * Set the current to its starting value.
+ *
+ * By default, this will be the largest value smaller than start, which
+ * is a multiple of the step size.
+ *
+ * Parameters checkFirst is optional, default false.
+ * If set to true, move the current value one step if smaller than start.
+ *
+ * @param {boolean} [checkFirst=false]
+ */
+StepNumber.prototype.start = function (checkFirst) {
+  if (checkFirst === undefined) {
+    checkFirst = false;
+  }
+
+  this._current = this._start - this._start % this._step;
+
+  if (checkFirst) {
+    if (this.getCurrent() < this._start) {
+      this.next();
+    }
+  }
+};
+
+/**
+ * Do a step, add the step size to the current value
+ */
+StepNumber.prototype.next = function () {
+  this._current += this._step;
+};
+
+/**
+ * Returns true whether the end is reached
+ * @return {boolean}  True if the current value has passed the end value.
+ */
+StepNumber.prototype.end = function () {
+  return this._current > this._end;
+};
+
+module.exports = StepNumber;
+
+/***/ }),
+/* 94 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+////////////////////////////////////////////////////////////////////////////////
+// This modules handles the options for Graph3d.
+//
+////////////////////////////////////////////////////////////////////////////////
+var util = __webpack_require__(2);
+var Camera = __webpack_require__(95);
+var Point3d = __webpack_require__(34);
+
+// enumerate the available styles
+var STYLE = {
+  BAR: 0,
+  BARCOLOR: 1,
+  BARSIZE: 2,
+  DOT: 3,
+  DOTLINE: 4,
+  DOTCOLOR: 5,
+  DOTSIZE: 6,
+  GRID: 7,
+  LINE: 8,
+  SURFACE: 9
+};
+
+// The string representations of the styles
+var STYLENAME = {
+  'dot': STYLE.DOT,
+  'dot-line': STYLE.DOTLINE,
+  'dot-color': STYLE.DOTCOLOR,
+  'dot-size': STYLE.DOTSIZE,
+  'line': STYLE.LINE,
+  'grid': STYLE.GRID,
+  'surface': STYLE.SURFACE,
+  'bar': STYLE.BAR,
+  'bar-color': STYLE.BARCOLOR,
+  'bar-size': STYLE.BARSIZE
+};
+
+/**
+ * Field names in the options hash which are of relevance to the user.
+ *
+ * Specifically, these are the fields which require no special handling,
+ * and can be directly copied over.
+ */
+var OPTIONKEYS = ['width', 'height', 'filterLabel', 'legendLabel', 'xLabel', 'yLabel', 'zLabel', 'xValueLabel', 'yValueLabel', 'zValueLabel', 'showXAxis', 'showYAxis', 'showZAxis', 'showGrid', 'showPerspective', 'showShadow', 'keepAspectRatio', 'verticalRatio', 'dotSizeRatio', 'dotSizeMinFraction', 'dotSizeMaxFraction', 'showAnimationControls', 'animationInterval', 'animationPreload', 'animationAutoStart', 'axisColor', 'gridColor', 'xCenter', 'yCenter'];
+
+/**
+ * Field names in the options hash which are of relevance to the user.
+ *
+ * Same as OPTIONKEYS, but internally these fields are stored with 
+ * prefix 'default' in the name.
+ */
+var PREFIXEDOPTIONKEYS = ['xBarWidth', 'yBarWidth', 'valueMin', 'valueMax', 'xMin', 'xMax', 'xStep', 'yMin', 'yMax', 'yStep', 'zMin', 'zMax', 'zStep'];
+
+// Placeholder for DEFAULTS reference
+var DEFAULTS = undefined;
+
+/**
+ * Check if given hash is empty.
+ *
+ * Source: http://stackoverflow.com/a/679937
+ *
+ * @param {object} obj
+ * @returns {boolean}
+ */
+function isEmpty(obj) {
+  for (var prop in obj) {
+    if (obj.hasOwnProperty(prop)) return false;
+  }
+
+  return true;
+}
+
+/**
+ * Make first letter of parameter upper case.
+ *
+ * Source: http://stackoverflow.com/a/1026087
+ *
+ * @param {string} str
+ * @returns {string}
+ */
+function capitalize(str) {
+  if (str === undefined || str === "" || typeof str != "string") {
+    return str;
+  }
+
+  return str.charAt(0).toUpperCase() + str.slice(1);
+}
+
+/**
+ * Add a prefix to a field name, taking style guide into account
+ *
+ * @param {string} prefix
+ * @param {string} fieldName
+ * @returns {string}
+ */
+function prefixFieldName(prefix, fieldName) {
+  if (prefix === undefined || prefix === "") {
+    return fieldName;
+  }
+
+  return prefix + capitalize(fieldName);
+}
+
+/**
+ * Forcibly copy fields from src to dst in a controlled manner.
+ *
+ * A given field in dst will always be overwitten. If this field
+ * is undefined or not present in src, the field in dst will 
+ * be explicitly set to undefined.
+ * 
+ * The intention here is to be able to reset all option fields.
+ * 
+ * Only the fields mentioned in array 'fields' will be handled.
+ *
+ * @param {object} src
+ * @param {object} dst
+ * @param {array<string>} fields array with names of fields to copy
+ * @param {string} [prefix] prefix to use for the target fields.
+ */
+function forceCopy(src, dst, fields, prefix) {
+  var srcKey;
+  var dstKey;
+
+  for (var i = 0; i < fields.length; ++i) {
+    srcKey = fields[i];
+    dstKey = prefixFieldName(prefix, srcKey);
+
+    dst[dstKey] = src[srcKey];
+  }
+}
+
+/**
+ * Copy fields from src to dst in a safe and controlled manner.
+ *
+ * Only the fields mentioned in array 'fields' will be copied over,
+ * and only if these are actually defined.
+ *
+ * @param {object} src
+ * @param {object} dst
+ * @param {array<string>} fields array with names of fields to copy
+ * @param {string} [prefix] prefix to use for the target fields.
+ */
+function safeCopy(src, dst, fields, prefix) {
+  var srcKey;
+  var dstKey;
+
+  for (var i = 0; i < fields.length; ++i) {
+    srcKey = fields[i];
+    if (src[srcKey] === undefined) continue;
+
+    dstKey = prefixFieldName(prefix, srcKey);
+
+    dst[dstKey] = src[srcKey];
+  }
+}
+
+/**
+ * Initialize dst with the values in src.
+ *
+ * src is the hash with the default values. 
+ * A reference DEFAULTS to this hash is stored locally for 
+ * further handling.
+ *
+ * For now, dst is assumed to be a Graph3d instance.
+ * @param {object} src
+ * @param {object} dst
+ */
+function setDefaults(src, dst) {
+  if (src === undefined || isEmpty(src)) {
+    throw new Error('No DEFAULTS passed');
+  }
+  if (dst === undefined) {
+    throw new Error('No dst passed');
+  }
+
+  // Remember defaults for future reference
+  DEFAULTS = src;
+
+  // Handle the defaults which can be simply copied over
+  forceCopy(src, dst, OPTIONKEYS);
+  forceCopy(src, dst, PREFIXEDOPTIONKEYS, 'default');
+
+  // Handle the more complex ('special') fields
+  setSpecialSettings(src, dst);
+
+  // Following are internal fields, not part of the user settings
+  dst.margin = 10; // px
+  dst.showGrayBottom = false; // TODO: this does not work correctly
+  dst.showTooltip = false;
+  dst.onclick_callback = null;
+  dst.eye = new Point3d(0, 0, -1); // TODO: set eye.z about 3/4 of the width of the window?
+}
+
+/**
+ *
+ * @param {object} options
+ * @param {object} dst
+ */
+function setOptions(options, dst) {
+  if (options === undefined) {
+    return;
+  }
+  if (dst === undefined) {
+    throw new Error('No dst passed');
+  }
+
+  if (DEFAULTS === undefined || isEmpty(DEFAULTS)) {
+    throw new Error('DEFAULTS not set for module Settings');
+  }
+
+  // Handle the parameters which can be simply copied over
+  safeCopy(options, dst, OPTIONKEYS);
+  safeCopy(options, dst, PREFIXEDOPTIONKEYS, 'default');
+
+  // Handle the more complex ('special') fields
+  setSpecialSettings(options, dst);
+}
+
+/**
+ * Special handling for certain parameters
+ *
+ * 'Special' here means: setting requires more than a simple copy
+ *
+ * @param {object} src
+ * @param {object} dst
+ */
+function setSpecialSettings(src, dst) {
+  if (src.backgroundColor !== undefined) {
+    setBackgroundColor(src.backgroundColor, dst);
+  }
+
+  setDataColor(src.dataColor, dst);
+  setStyle(src.style, dst);
+  setShowLegend(src.showLegend, dst);
+  setCameraPosition(src.cameraPosition, dst);
+
+  // As special fields go, this is an easy one; just a translation of the name.
+  // Can't use this.tooltip directly, because that field exists internally
+  if (src.tooltip !== undefined) {
+    dst.showTooltip = src.tooltip;
+  }
+  if (src.onclick != undefined) {
+    dst.onclick_callback = src.onclick;
+  }
+
+  if (src.tooltipStyle !== undefined) {
+    util.selectiveDeepExtend(['tooltipStyle'], dst, src);
+  }
+}
+
+/**
+ * Set the value of setting 'showLegend'
+ *
+ * This depends on the value of the style fields, so it must be called
+ * after the style field has been initialized.
+ *
+ * @param {boolean} showLegend
+ * @param {object} dst
+ */
+function setShowLegend(showLegend, dst) {
+  if (showLegend === undefined) {
+    // If the default was auto, make a choice for this field
+    var isAutoByDefault = DEFAULTS.showLegend === undefined;
+
+    if (isAutoByDefault) {
+      // these styles default to having legends
+      var isLegendGraphStyle = dst.style === STYLE.DOTCOLOR || dst.style === STYLE.DOTSIZE;
+
+      dst.showLegend = isLegendGraphStyle;
+    } else {
+      // Leave current value as is
+    }
+  } else {
+    dst.showLegend = showLegend;
+  }
+}
+
+/**
+ * Retrieve the style index from given styleName
+ * @param {string} styleName  Style name such as 'dot', 'grid', 'dot-line'
+ * @return {number} styleNumber Enumeration value representing the style, or -1
+ *                when not found
+ */
+function getStyleNumberByName(styleName) {
+  var number = STYLENAME[styleName];
+
+  if (number === undefined) {
+    return -1;
+  }
+
+  return number;
+}
+
+/**
+ * Check if given number is a valid style number.
+ *
+ * @param {string | number} style
+ * @return {boolean} true if valid, false otherwise
+ */
+function checkStyleNumber(style) {
+  var valid = false;
+
+  for (var n in STYLE) {
+    if (STYLE[n] === style) {
+      valid = true;
+      break;
+    }
+  }
+
+  return valid;
+}
+
+/**
+ *
+ * @param {string | number} style
+ * @param {Object} dst
+ */
+function setStyle(style, dst) {
+  if (style === undefined) {
+    return; // Nothing to do
+  }
+
+  var styleNumber;
+
+  if (typeof style === 'string') {
+    styleNumber = getStyleNumberByName(style);
+
+    if (styleNumber === -1) {
+      throw new Error('Style \'' + style + '\' is invalid');
+    }
+  } else {
+    // Do a pedantic check on style number value
+    if (!checkStyleNumber(style)) {
+      throw new Error('Style \'' + style + '\' is invalid');
+    }
+
+    styleNumber = style;
+  }
+
+  dst.style = styleNumber;
+}
+
+/**
+ * Set the background styling for the graph
+ * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor
+ * @param {Object} dst
+ */
+function setBackgroundColor(backgroundColor, dst) {
+  var fill = 'white';
+  var stroke = 'gray';
+  var strokeWidth = 1;
+
+  if (typeof backgroundColor === 'string') {
+    fill = backgroundColor;
+    stroke = 'none';
+    strokeWidth = 0;
+  } else if ((typeof backgroundColor === 'undefined' ? 'undefined' : (0, _typeof3['default'])(backgroundColor)) === 'object') {
+    if (backgroundColor.fill !== undefined) fill = backgroundColor.fill;
+    if (backgroundColor.stroke !== undefined) stroke = backgroundColor.stroke;
+    if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth;
+  } else {
+    throw new Error('Unsupported type of backgroundColor');
+  }
+
+  dst.frame.style.backgroundColor = fill;
+  dst.frame.style.borderColor = stroke;
+  dst.frame.style.borderWidth = strokeWidth + 'px';
+  dst.frame.style.borderStyle = 'solid';
+}
+
+/**
+ *
+ * @param {string | Object} dataColor
+ * @param {Object} dst
+ */
+function setDataColor(dataColor, dst) {
+  if (dataColor === undefined) {
+    return; // Nothing to do
+  }
+
+  if (dst.dataColor === undefined) {
+    dst.dataColor = {};
+  }
+
+  if (typeof dataColor === 'string') {
+    dst.dataColor.fill = dataColor;
+    dst.dataColor.stroke = dataColor;
+  } else {
+    if (dataColor.fill) {
+      dst.dataColor.fill = dataColor.fill;
+    }
+    if (dataColor.stroke) {
+      dst.dataColor.stroke = dataColor.stroke;
+    }
+    if (dataColor.strokeWidth !== undefined) {
+      dst.dataColor.strokeWidth = dataColor.strokeWidth;
+    }
+  }
+}
+
+/**
+ *
+ * @param {Object} cameraPosition
+ * @param {Object} dst
+ */
+function setCameraPosition(cameraPosition, dst) {
+  var camPos = cameraPosition;
+  if (camPos === undefined) {
+    return;
+  }
+
+  if (dst.camera === undefined) {
+    dst.camera = new Camera();
+  }
+
+  dst.camera.setArmRotation(camPos.horizontal, camPos.vertical);
+  dst.camera.setArmLength(camPos.distance);
+}
+
+module.exports.STYLE = STYLE;
+module.exports.setDefaults = setDefaults;
+module.exports.setOptions = setOptions;
+module.exports.setCameraPosition = setCameraPosition;
+
+/***/ }),
+/* 95 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _sign = __webpack_require__(165);
+
+var _sign2 = _interopRequireDefault(_sign);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Point3d = __webpack_require__(34);
+
+/**
+ * The camera is mounted on a (virtual) camera arm. The camera arm can rotate
+ * The camera is always looking in the direction of the origin of the arm.
+ * This way, the camera always rotates around one fixed point, the location
+ * of the camera arm.
+ *
+ * Documentation:
+ *   http://en.wikipedia.org/wiki/3D_projection
+ * @class Camera
+ */
+function Camera() {
+  this.armLocation = new Point3d();
+  this.armRotation = {};
+  this.armRotation.horizontal = 0;
+  this.armRotation.vertical = 0;
+  this.armLength = 1.7;
+  this.cameraOffset = new Point3d();
+  this.offsetMultiplier = 0.6;
+
+  this.cameraLocation = new Point3d();
+  this.cameraRotation = new Point3d(0.5 * Math.PI, 0, 0);
+
+  this.calculateCameraOrientation();
+}
+
+/**
+ * Set offset camera in camera coordinates
+ * @param {number} x offset by camera horisontal
+ * @param {number} y offset by camera vertical
+ */
+Camera.prototype.setOffset = function (x, y) {
+  var abs = Math.abs,
+      sign = _sign2['default'],
+      mul = this.offsetMultiplier,
+      border = this.armLength * mul;
+
+  if (abs(x) > border) {
+    x = sign(x) * border;
+  }
+  if (abs(y) > border) {
+    y = sign(y) * border;
+  }
+  this.cameraOffset.x = x;
+  this.cameraOffset.y = y;
+  this.calculateCameraOrientation();
+};
+
+/**
+ * Get camera offset by horizontal and vertical
+ * @returns {number}
+ */
+Camera.prototype.getOffset = function () {
+  return this.cameraOffset;
+};
+
+/**
+ * Set the location (origin) of the arm
+ * @param {number} x  Normalized value of x
+ * @param {number} y  Normalized value of y
+ * @param {number} z  Normalized value of z
+ */
+Camera.prototype.setArmLocation = function (x, y, z) {
+  this.armLocation.x = x;
+  this.armLocation.y = y;
+  this.armLocation.z = z;
+
+  this.calculateCameraOrientation();
+};
+
+/**
+ * Set the rotation of the camera arm
+ * @param {number} horizontal   The horizontal rotation, between 0 and 2*PI.
+ *                Optional, can be left undefined.
+ * @param {number} vertical   The vertical rotation, between 0 and 0.5*PI
+ *                if vertical=0.5*PI, the graph is shown from the
+ *                top. Optional, can be left undefined.
+ */
+Camera.prototype.setArmRotation = function (horizontal, vertical) {
+  if (horizontal !== undefined) {
+    this.armRotation.horizontal = horizontal;
+  }
+
+  if (vertical !== undefined) {
+    this.armRotation.vertical = vertical;
+    if (this.armRotation.vertical < 0) this.armRotation.vertical = 0;
+    if (this.armRotation.vertical > 0.5 * Math.PI) this.armRotation.vertical = 0.5 * Math.PI;
+  }
+
+  if (horizontal !== undefined || vertical !== undefined) {
+    this.calculateCameraOrientation();
+  }
+};
+
+/**
+ * Retrieve the current arm rotation
+ * @return {object}   An object with parameters horizontal and vertical
+ */
+Camera.prototype.getArmRotation = function () {
+  var rot = {};
+  rot.horizontal = this.armRotation.horizontal;
+  rot.vertical = this.armRotation.vertical;
+
+  return rot;
+};
+
+/**
+ * Set the (normalized) length of the camera arm.
+ * @param {number} length A length between 0.71 and 5.0
+ */
+Camera.prototype.setArmLength = function (length) {
+  if (length === undefined) return;
+
+  this.armLength = length;
+
+  // Radius must be larger than the corner of the graph,
+  // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the
+  // graph
+  if (this.armLength < 0.71) this.armLength = 0.71;
+  if (this.armLength > 5.0) this.armLength = 5.0;
+
+  this.setOffset(this.cameraOffset.x, this.cameraOffset.y);
+  this.calculateCameraOrientation();
+};
+
+/**
+ * Retrieve the arm length
+ * @return {number} length
+ */
+Camera.prototype.getArmLength = function () {
+  return this.armLength;
+};
+
+/**
+ * Retrieve the camera location
+ * @return {Point3d} cameraLocation
+ */
+Camera.prototype.getCameraLocation = function () {
+  return this.cameraLocation;
+};
+
+/**
+ * Retrieve the camera rotation
+ * @return {Point3d} cameraRotation
+ */
+Camera.prototype.getCameraRotation = function () {
+  return this.cameraRotation;
+};
+
+/**
+ * Calculate the location and rotation of the camera based on the
+ * position and orientation of the camera arm
+ */
+Camera.prototype.calculateCameraOrientation = function () {
+  // calculate location of the camera
+  this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);
+  this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);
+  this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical);
+
+  // calculate rotation of the camera
+  this.cameraRotation.x = Math.PI / 2 - this.armRotation.vertical;
+  this.cameraRotation.y = 0;
+  this.cameraRotation.z = -this.armRotation.horizontal;
+
+  var xa = this.cameraRotation.x;
+  var za = this.cameraRotation.z;
+  var dx = this.cameraOffset.x;
+  var dy = this.cameraOffset.y;
+  var sin = Math.sin,
+      cos = Math.cos;
+
+  this.cameraLocation.x = this.cameraLocation.x + dx * cos(za) + dy * -sin(za) * cos(xa);
+  this.cameraLocation.y = this.cameraLocation.y + dx * sin(za) + dy * cos(za) * cos(xa);
+  this.cameraLocation.z = this.cameraLocation.z + dy * sin(xa);
+};
+
+module.exports = Camera;
+
+/***/ }),
+/* 96 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var DataView = __webpack_require__(12);
+
+/**
+ * @class Filter
+ *
+ * @param {DataGroup} dataGroup the data group 
+ * @param {number}  column             The index of the column to be filtered
+ * @param {Graph3d} graph              The graph
+ */
+function Filter(dataGroup, column, graph) {
+  this.dataGroup = dataGroup;
+  this.column = column;
+  this.graph = graph; // the parent graph
+
+  this.index = undefined;
+  this.value = undefined;
+
+  // read all distinct values and select the first one
+  this.values = dataGroup.getDistinctValues(this.column);
+
+  if (this.values.length > 0) {
+    this.selectValue(0);
+  }
+
+  // create an array with the filtered datapoints. this will be loaded afterwards
+  this.dataPoints = [];
+
+  this.loaded = false;
+  this.onLoadCallback = undefined;
+
+  if (graph.animationPreload) {
+    this.loaded = false;
+    this.loadInBackground();
+  } else {
+    this.loaded = true;
+  }
+}
+
+/**
+ * Return the label
+ * @return {string} label
+ */
+Filter.prototype.isLoaded = function () {
+  return this.loaded;
+};
+
+/**
+ * Return the loaded progress
+ * @return {number} percentage between 0 and 100
+ */
+Filter.prototype.getLoadedProgress = function () {
+  var len = this.values.length;
+
+  var i = 0;
+  while (this.dataPoints[i]) {
+    i++;
+  }
+
+  return Math.round(i / len * 100);
+};
+
+/**
+ * Return the label
+ * @return {string} label
+ */
+Filter.prototype.getLabel = function () {
+  return this.graph.filterLabel;
+};
+
+/**
+ * Return the columnIndex of the filter
+ * @return {number} columnIndex
+ */
+Filter.prototype.getColumn = function () {
+  return this.column;
+};
+
+/**
+ * Return the currently selected value. Returns undefined if there is no selection
+ * @return {*} value
+ */
+Filter.prototype.getSelectedValue = function () {
+  if (this.index === undefined) return undefined;
+
+  return this.values[this.index];
+};
+
+/**
+ * Retrieve all values of the filter
+ * @return {Array} values
+ */
+Filter.prototype.getValues = function () {
+  return this.values;
+};
+
+/**
+ * Retrieve one value of the filter
+ * @param {number}  index
+ * @return {*} value
+ */
+Filter.prototype.getValue = function (index) {
+  if (index >= this.values.length) throw new Error('Index out of range');
+
+  return this.values[index];
+};
+
+/**
+ * Retrieve the (filtered) dataPoints for the currently selected filter index
+ * @param {number} [index] (optional)
+ * @return {Array} dataPoints
+ */
+Filter.prototype._getDataPoints = function (index) {
+  if (index === undefined) index = this.index;
+
+  if (index === undefined) return [];
+
+  var dataPoints;
+  if (this.dataPoints[index]) {
+    dataPoints = this.dataPoints[index];
+  } else {
+    var f = {};
+    f.column = this.column;
+    f.value = this.values[index];
+
+    var dataView = new DataView(this.dataGroup.getDataSet(), { filter: function filter(item) {
+        return item[f.column] == f.value;
+      } }).get();
+    dataPoints = this.dataGroup._getDataPoints(dataView);
+
+    this.dataPoints[index] = dataPoints;
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Set a callback function when the filter is fully loaded.
+ *
+ * @param {function} callback
+ */
+Filter.prototype.setOnLoadCallback = function (callback) {
+  this.onLoadCallback = callback;
+};
+
+/**
+ * Add a value to the list with available values for this filter
+ * No double entries will be created.
+ * @param {number} index
+ */
+Filter.prototype.selectValue = function (index) {
+  if (index >= this.values.length) throw new Error('Index out of range');
+
+  this.index = index;
+  this.value = this.values[index];
+};
+
+/**
+ * Load all filtered rows in the background one by one
+ * Start this method without providing an index!
+ *
+ * @param {number} [index=0]
+ */
+Filter.prototype.loadInBackground = function (index) {
+  if (index === undefined) index = 0;
+
+  var frame = this.graph.frame;
+
+  if (index < this.values.length) {
+    // create a progress box
+    if (frame.progress === undefined) {
+      frame.progress = document.createElement('DIV');
+      frame.progress.style.position = 'absolute';
+      frame.progress.style.color = 'gray';
+      frame.appendChild(frame.progress);
+    }
+    var progress = this.getLoadedProgress();
+    frame.progress.innerHTML = 'Loading animation... ' + progress + '%';
+    // TODO: this is no nice solution...
+    frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider
+    frame.progress.style.left = 10 + 'px';
+
+    var me = this;
+    setTimeout(function () {
+      me.loadInBackground(index + 1);
+    }, 10);
+    this.loaded = false;
+  } else {
+    this.loaded = true;
+
+    // remove the progress box
+    if (frame.progress !== undefined) {
+      frame.removeChild(frame.progress);
+      frame.progress = undefined;
+    }
+
+    if (this.onLoadCallback) this.onLoadCallback();
+  }
+};
+
+module.exports = Filter;
+
+/***/ }),
+/* 97 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var keycharm = __webpack_require__(35);
+var Emitter = __webpack_require__(44);
+var Hammer = __webpack_require__(10);
+var util = __webpack_require__(2);
+
+/**
+ * Turn an element into an clickToUse element.
+ * When not active, the element has a transparent overlay. When the overlay is
+ * clicked, the mode is changed to active.
+ * When active, the element is displayed with a blue border around it, and
+ * the interactive contents of the element can be used. When clicked outside
+ * the element, the elements mode is changed to inactive.
+ * @param {Element} container
+ * @constructor Activator
+ */
+function Activator(container) {
+  this.active = false;
+
+  this.dom = {
+    container: container
+  };
+
+  this.dom.overlay = document.createElement('div');
+  this.dom.overlay.className = 'vis-overlay';
+
+  this.dom.container.appendChild(this.dom.overlay);
+
+  this.hammer = Hammer(this.dom.overlay);
+  this.hammer.on('tap', this._onTapOverlay.bind(this));
+
+  // block all touch events (except tap)
+  var me = this;
+  var events = ['tap', 'doubletap', 'press', 'pinch', 'pan', 'panstart', 'panmove', 'panend'];
+  events.forEach(function (event) {
+    me.hammer.on(event, function (event) {
+      event.stopPropagation();
+    });
+  });
+
+  // attach a click event to the window, in order to deactivate when clicking outside the timeline
+  if (document && document.body) {
+    this.onClick = function (event) {
+      if (!_hasParent(event.target, container)) {
+        me.deactivate();
+      }
+    };
+    document.body.addEventListener('click', this.onClick);
+  }
+
+  if (this.keycharm !== undefined) {
+    this.keycharm.destroy();
+  }
+  this.keycharm = keycharm();
+
+  // keycharm listener only bounded when active)
+  this.escListener = this.deactivate.bind(this);
+}
+
+// turn into an event emitter
+Emitter(Activator.prototype);
+
+// The currently active activator
+Activator.current = null;
+
+/**
+ * Destroy the activator. Cleans up all created DOM and event listeners
+ */
+Activator.prototype.destroy = function () {
+  this.deactivate();
+
+  // remove dom
+  this.dom.overlay.parentNode.removeChild(this.dom.overlay);
+
+  // remove global event listener
+  if (this.onClick) {
+    document.body.removeEventListener('click', this.onClick);
+  }
+
+  // cleanup hammer instances
+  this.hammer.destroy();
+  this.hammer = null;
+  // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory)
+};
+
+/**
+ * Activate the element
+ * Overlay is hidden, element is decorated with a blue shadow border
+ */
+Activator.prototype.activate = function () {
+  // we allow only one active activator at a time
+  if (Activator.current) {
+    Activator.current.deactivate();
+  }
+  Activator.current = this;
+
+  this.active = true;
+  this.dom.overlay.style.display = 'none';
+  util.addClassName(this.dom.container, 'vis-active');
+
+  this.emit('change');
+  this.emit('activate');
+
+  // ugly hack: bind ESC after emitting the events, as the Network rebinds all
+  // keyboard events on a 'change' event
+  this.keycharm.bind('esc', this.escListener);
+};
+
+/**
+ * Deactivate the element
+ * Overlay is displayed on top of the element
+ */
+Activator.prototype.deactivate = function () {
+  this.active = false;
+  this.dom.overlay.style.display = '';
+  util.removeClassName(this.dom.container, 'vis-active');
+  this.keycharm.unbind('esc', this.escListener);
+
+  this.emit('change');
+  this.emit('deactivate');
+};
+
+/**
+ * Handle a tap event: activate the container
+ * @param {Event}  event   The event
+ * @private
+ */
+Activator.prototype._onTapOverlay = function (event) {
+  // activate the container
+  this.activate();
+  event.stopPropagation();
+};
+
+/**
+ * Test whether the element has the requested parent element somewhere in
+ * its chain of parent nodes.
+ * @param {HTMLElement} element
+ * @param {HTMLElement} parent
+ * @returns {boolean} Returns true when the parent is found somewhere in the
+ *                    chain of parent nodes.
+ * @private
+ */
+function _hasParent(element, parent) {
+  while (element) {
+    if (element === parent) {
+      return true;
+    }
+    element = element.parentNode;
+  }
+  return false;
+}
+
+module.exports = Activator;
+
+/***/ }),
+/* 98 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// English
+exports['en'] = {
+  current: 'current',
+  time: 'time'
+};
+exports['en_EN'] = exports['en'];
+exports['en_US'] = exports['en'];
+
+// Italiano
+exports['it'] = {
+  current: 'attuale',
+  time: 'tempo'
+};
+exports['it_IT'] = exports['it'];
+exports['it_CH'] = exports['it'];
+
+// Dutch
+exports['nl'] = {
+  current: 'huidige',
+  time: 'tijd'
+};
+exports['nl_NL'] = exports['nl'];
+exports['nl_BE'] = exports['nl'];
+
+// German
+exports['de'] = {
+  current: 'Aktuelle',
+  time: 'Zeit'
+};
+exports['de_DE'] = exports['de'];
+
+// French
+exports['fr'] = {
+  current: 'actuel',
+  time: 'heure'
+};
+exports['fr_FR'] = exports['fr'];
+exports['fr_CA'] = exports['fr'];
+exports['fr_BE'] = exports['fr'];
+
+// Espanol
+exports['es'] = {
+  current: 'corriente',
+  time: 'hora'
+};
+exports['es_ES'] = exports['es'];
+
+/***/ }),
+/* 99 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Hammer = __webpack_require__(10);
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var TimeStep = __webpack_require__(66);
+var Component = __webpack_require__(16);
+var Group = __webpack_require__(68);
+var BackgroundGroup = __webpack_require__(69);
+var BoxItem = __webpack_require__(101);
+var PointItem = __webpack_require__(102);
+var RangeItem = __webpack_require__(70);
+var BackgroundItem = __webpack_require__(103);
+var Popup = __webpack_require__(104)['default'];
+
+var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
+var BACKGROUND = '__background__'; // reserved group id for background items without group
+
+/**
+ * An ItemSet holds a set of items and ranges which can be displayed in a
+ * range. The width is determined by the parent of the ItemSet, and the height
+ * is determined by the size of the items.
+ * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body
+ * @param {Object} [options]      See ItemSet.setOptions for the available options.
+ * @constructor ItemSet
+ * @extends Component
+ */
+function ItemSet(body, options) {
+  this.body = body;
+  this.defaultOptions = {
+    type: null, // 'box', 'point', 'range', 'background'
+    orientation: {
+      item: 'bottom' // item orientation: 'top' or 'bottom'
+    },
+    align: 'auto', // alignment of box items
+    stack: true,
+    stackSubgroups: true,
+    groupOrderSwap: function groupOrderSwap(fromGroup, toGroup, groups) {
+      // eslint-disable-line no-unused-vars
+      var targetOrder = toGroup.order;
+      toGroup.order = fromGroup.order;
+      fromGroup.order = targetOrder;
+    },
+    groupOrder: 'order',
+
+    selectable: true,
+    multiselect: false,
+    itemsAlwaysDraggable: {
+      item: false,
+      range: false
+    },
+
+    editable: {
+      updateTime: false,
+      updateGroup: false,
+      add: false,
+      remove: false,
+      overrideItems: false
+    },
+
+    groupEditable: {
+      order: false,
+      add: false,
+      remove: false
+    },
+
+    snap: TimeStep.snap,
+
+    // Only called when `objectData.target === 'item'.
+    onDropObjectOnItem: function onDropObjectOnItem(objectData, item, callback) {
+      callback(item);
+    },
+    onAdd: function onAdd(item, callback) {
+      callback(item);
+    },
+    onUpdate: function onUpdate(item, callback) {
+      callback(item);
+    },
+    onMove: function onMove(item, callback) {
+      callback(item);
+    },
+    onRemove: function onRemove(item, callback) {
+      callback(item);
+    },
+    onMoving: function onMoving(item, callback) {
+      callback(item);
+    },
+    onAddGroup: function onAddGroup(item, callback) {
+      callback(item);
+    },
+    onMoveGroup: function onMoveGroup(item, callback) {
+      callback(item);
+    },
+    onRemoveGroup: function onRemoveGroup(item, callback) {
+      callback(item);
+    },
+
+    margin: {
+      item: {
+        horizontal: 10,
+        vertical: 10
+      },
+      axis: 20
+    },
+
+    showTooltips: true,
+
+    tooltip: {
+      followMouse: false,
+      overflowMethod: 'flip'
+    },
+
+    tooltipOnItemUpdateTime: false
+  };
+
+  // options is shared by this ItemSet and all its items
+  this.options = util.extend({}, this.defaultOptions);
+  this.options.rtl = options.rtl;
+
+  // options for getting items from the DataSet with the correct type
+  this.itemOptions = {
+    type: { start: 'Date', end: 'Date' }
+  };
+
+  this.conversion = {
+    toScreen: body.util.toScreen,
+    toTime: body.util.toTime
+  };
+  this.dom = {};
+  this.props = {};
+  this.hammer = null;
+
+  var me = this;
+  this.itemsData = null; // DataSet
+  this.groupsData = null; // DataSet
+
+  // listeners for the DataSet of the items
+  this.itemListeners = {
+    'add': function add(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onAdd(params.items);
+    },
+    'update': function update(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onUpdate(params.items);
+    },
+    'remove': function remove(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onRemove(params.items);
+    }
+  };
+
+  // listeners for the DataSet of the groups
+  this.groupListeners = {
+    'add': function add(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onAddGroups(params.items);
+
+      if (me.groupsData && me.groupsData.length > 0) {
+        var groupsData = me.groupsData.getDataSet();
+        groupsData.get().forEach(function (groupData) {
+          if (groupData.nestedGroups) {
+            if (groupData.showNested != false) {
+              groupData.showNested = true;
+            }
+            var updatedGroups = [];
+            groupData.nestedGroups.forEach(function (nestedGroupId) {
+              var updatedNestedGroup = groupsData.get(nestedGroupId);
+              if (!updatedNestedGroup) {
+                return;
+              }
+              updatedNestedGroup.nestedInGroup = groupData.id;
+              if (groupData.showNested == false) {
+                updatedNestedGroup.visible = false;
+              }
+              updatedGroups = updatedGroups.concat(updatedNestedGroup);
+            });
+            groupsData.update(updatedGroups, senderId);
+          }
+        });
+      }
+    },
+    'update': function update(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onUpdateGroups(params.items);
+    },
+    'remove': function remove(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onRemoveGroups(params.items);
+    }
+  };
+
+  this.items = {}; // object with an Item for every data item
+  this.groups = {}; // Group object for every group
+  this.groupIds = [];
+
+  this.selection = []; // list with the ids of all selected nodes
+
+  this.popup = null;
+
+  this.touchParams = {}; // stores properties while dragging
+  this.groupTouchParams = {};
+  // create the HTML DOM
+
+  this._create();
+
+  this.setOptions(options);
+}
+
+ItemSet.prototype = new Component();
+
+// available item types will be registered here
+ItemSet.types = {
+  background: BackgroundItem,
+  box: BoxItem,
+  range: RangeItem,
+  point: PointItem
+};
+
+/**
+ * Create the HTML DOM for the ItemSet
+ */
+ItemSet.prototype._create = function () {
+  var frame = document.createElement('div');
+  frame.className = 'vis-itemset';
+  frame['timeline-itemset'] = this;
+  this.dom.frame = frame;
+
+  // create background panel
+  var background = document.createElement('div');
+  background.className = 'vis-background';
+  frame.appendChild(background);
+  this.dom.background = background;
+
+  // create foreground panel
+  var foreground = document.createElement('div');
+  foreground.className = 'vis-foreground';
+  frame.appendChild(foreground);
+  this.dom.foreground = foreground;
+
+  // create axis panel
+  var axis = document.createElement('div');
+  axis.className = 'vis-axis';
+  this.dom.axis = axis;
+
+  // create labelset
+  var labelSet = document.createElement('div');
+  labelSet.className = 'vis-labelset';
+  this.dom.labelSet = labelSet;
+
+  // create ungrouped Group
+  this._updateUngrouped();
+
+  // create background Group
+  var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this);
+  backgroundGroup.show();
+  this.groups[BACKGROUND] = backgroundGroup;
+
+  // attach event listeners
+  // Note: we bind to the centerContainer for the case where the height
+  //       of the center container is larger than of the ItemSet, so we
+  //       can click in the empty area to create a new item or deselect an item.
+  this.hammer = new Hammer(this.body.dom.centerContainer);
+
+  // drag items when selected
+  this.hammer.on('hammer.input', function (event) {
+    if (event.isFirst) {
+      this._onTouch(event);
+    }
+  }.bind(this));
+  this.hammer.on('panstart', this._onDragStart.bind(this));
+  this.hammer.on('panmove', this._onDrag.bind(this));
+  this.hammer.on('panend', this._onDragEnd.bind(this));
+  this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_HORIZONTAL });
+
+  // single select (or unselect) when tapping an item
+  this.hammer.on('tap', this._onSelectItem.bind(this));
+
+  // multi select when holding mouse/touch, or on ctrl+click
+  this.hammer.on('press', this._onMultiSelectItem.bind(this));
+
+  // add item on doubletap
+  this.hammer.on('doubletap', this._onAddItem.bind(this));
+
+  if (this.options.rtl) {
+    this.groupHammer = new Hammer(this.body.dom.rightContainer);
+  } else {
+    this.groupHammer = new Hammer(this.body.dom.leftContainer);
+  }
+
+  this.groupHammer.on('tap', this._onGroupClick.bind(this));
+  this.groupHammer.on('panstart', this._onGroupDragStart.bind(this));
+  this.groupHammer.on('panmove', this._onGroupDrag.bind(this));
+  this.groupHammer.on('panend', this._onGroupDragEnd.bind(this));
+  this.groupHammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_VERTICAL });
+
+  this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this));
+  this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this));
+  this.body.dom.centerContainer.addEventListener('mousemove', this._onMouseMove.bind(this));
+  // right-click on timeline 
+  this.body.dom.centerContainer.addEventListener('contextmenu', this._onDragEnd.bind(this));
+
+  this.body.dom.centerContainer.addEventListener('mousewheel', this._onMouseWheel.bind(this));
+
+  // attach to the DOM
+  this.show();
+};
+
+/**
+ * Set options for the ItemSet. Existing options will be extended/overwritten.
+ * @param {Object} [options] The following options are available:
+ *                           {string} type
+ *                              Default type for the items. Choose from 'box'
+ *                              (default), 'point', 'range', or 'background'.
+ *                              The default style can be overwritten by
+ *                              individual items.
+ *                           {string} align
+ *                              Alignment for the items, only applicable for
+ *                              BoxItem. Choose 'center' (default), 'left', or
+ *                              'right'.
+ *                           {string} orientation.item
+ *                              Orientation of the item set. Choose 'top' or
+ *                              'bottom' (default).
+ *                           {Function} groupOrder
+ *                              A sorting function for ordering groups
+ *                           {boolean} stack
+ *                              If true (default), items will be stacked on
+ *                              top of each other.
+ *                           {number} margin.axis
+ *                              Margin between the axis and the items in pixels.
+ *                              Default is 20.
+ *                           {number} margin.item.horizontal
+ *                              Horizontal margin between items in pixels.
+ *                              Default is 10.
+ *                           {number} margin.item.vertical
+ *                              Vertical Margin between items in pixels.
+ *                              Default is 10.
+ *                           {number} margin.item
+ *                              Margin between items in pixels in both horizontal
+ *                              and vertical direction. Default is 10.
+ *                           {number} margin
+ *                              Set margin for both axis and items in pixels.
+ *                           {boolean} selectable
+ *                              If true (default), items can be selected.
+ *                           {boolean} multiselect
+ *                              If true, multiple items can be selected.
+ *                              False by default.
+ *                           {boolean} editable
+ *                              Set all editable options to true or false
+ *                           {boolean} editable.updateTime
+ *                              Allow dragging an item to an other moment in time
+ *                           {boolean} editable.updateGroup
+ *                              Allow dragging an item to an other group
+ *                           {boolean} editable.add
+ *                              Allow creating new items on double tap
+ *                           {boolean} editable.remove
+ *                              Allow removing items by clicking the delete button
+ *                              top right of a selected item.
+ *                           {Function(item: Item, callback: Function)} onAdd
+ *                              Callback function triggered when an item is about to be added:
+ *                              when the user double taps an empty space in the Timeline.
+ *                           {Function(item: Item, callback: Function)} onUpdate
+ *                              Callback function fired when an item is about to be updated.
+ *                              This function typically has to show a dialog where the user
+ *                              change the item. If not implemented, nothing happens.
+ *                           {Function(item: Item, callback: Function)} onMove
+ *                              Fired when an item has been moved. If not implemented,
+ *                              the move action will be accepted.
+ *                           {Function(item: Item, callback: Function)} onRemove
+ *                              Fired when an item is about to be deleted.
+ *                              If not implemented, the item will be always removed.
+ */
+ItemSet.prototype.setOptions = function (options) {
+  if (options) {
+    // copy all options that we know
+    var fields = ['type', 'rtl', 'align', 'order', 'stack', 'stackSubgroups', 'selectable', 'multiselect', 'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'visibleFrameTemplate', 'hide', 'snap', 'groupOrderSwap', 'showTooltips', 'tooltip', 'tooltipOnItemUpdateTime'];
+    util.selectiveExtend(fields, this.options, options);
+
+    if ('itemsAlwaysDraggable' in options) {
+      if (typeof options.itemsAlwaysDraggable === 'boolean') {
+        this.options.itemsAlwaysDraggable.item = options.itemsAlwaysDraggable;
+        this.options.itemsAlwaysDraggable.range = false;
+      } else if ((0, _typeof3['default'])(options.itemsAlwaysDraggable) === 'object') {
+        util.selectiveExtend(['item', 'range'], this.options.itemsAlwaysDraggable, options.itemsAlwaysDraggable);
+        // only allow range always draggable when item is always draggable as well
+        if (!this.options.itemsAlwaysDraggable.item) {
+          this.options.itemsAlwaysDraggable.range = false;
+        }
+      }
+    }
+
+    if ('orientation' in options) {
+      if (typeof options.orientation === 'string') {
+        this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom';
+      } else if ((0, _typeof3['default'])(options.orientation) === 'object' && 'item' in options.orientation) {
+        this.options.orientation.item = options.orientation.item;
+      }
+    }
+
+    if ('margin' in options) {
+      if (typeof options.margin === 'number') {
+        this.options.margin.axis = options.margin;
+        this.options.margin.item.horizontal = options.margin;
+        this.options.margin.item.vertical = options.margin;
+      } else if ((0, _typeof3['default'])(options.margin) === 'object') {
+        util.selectiveExtend(['axis'], this.options.margin, options.margin);
+        if ('item' in options.margin) {
+          if (typeof options.margin.item === 'number') {
+            this.options.margin.item.horizontal = options.margin.item;
+            this.options.margin.item.vertical = options.margin.item;
+          } else if ((0, _typeof3['default'])(options.margin.item) === 'object') {
+            util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item);
+          }
+        }
+      }
+    }
+
+    if ('editable' in options) {
+      if (typeof options.editable === 'boolean') {
+        this.options.editable.updateTime = options.editable;
+        this.options.editable.updateGroup = options.editable;
+        this.options.editable.add = options.editable;
+        this.options.editable.remove = options.editable;
+        this.options.editable.overrideItems = false;
+      } else if ((0, _typeof3['default'])(options.editable) === 'object') {
+        util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove', 'overrideItems'], this.options.editable, options.editable);
+      }
+    }
+
+    if ('groupEditable' in options) {
+      if (typeof options.groupEditable === 'boolean') {
+        this.options.groupEditable.order = options.groupEditable;
+        this.options.groupEditable.add = options.groupEditable;
+        this.options.groupEditable.remove = options.groupEditable;
+      } else if ((0, _typeof3['default'])(options.groupEditable) === 'object') {
+        util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable);
+      }
+    }
+
+    // callback functions
+    var addCallback = function (name) {
+      var fn = options[name];
+      if (fn) {
+        if (!(fn instanceof Function)) {
+          throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)');
+        }
+        this.options[name] = fn;
+      }
+    }.bind(this);
+    ['onDropObjectOnItem', 'onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving', 'onAddGroup', 'onMoveGroup', 'onRemoveGroup'].forEach(addCallback);
+
+    // force the itemSet to refresh: options like orientation and margins may be changed
+    this.markDirty();
+  }
+};
+
+/**
+ * Mark the ItemSet dirty so it will refresh everything with next redraw.
+ * Optionally, all items can be marked as dirty and be refreshed.
+ * @param {{refreshItems: boolean}} [options]
+ */
+ItemSet.prototype.markDirty = function (options) {
+  this.groupIds = [];
+
+  if (options && options.refreshItems) {
+    util.forEach(this.items, function (item) {
+      item.dirty = true;
+      if (item.displayed) item.redraw();
+    });
+  }
+};
+
+/**
+ * Destroy the ItemSet
+ */
+ItemSet.prototype.destroy = function () {
+  this.hide();
+  this.setItems(null);
+  this.setGroups(null);
+
+  this.hammer = null;
+
+  this.body = null;
+  this.conversion = null;
+};
+
+/**
+ * Hide the component from the DOM
+ */
+ItemSet.prototype.hide = function () {
+  // remove the frame containing the items
+  if (this.dom.frame.parentNode) {
+    this.dom.frame.parentNode.removeChild(this.dom.frame);
+  }
+
+  // remove the axis with dots
+  if (this.dom.axis.parentNode) {
+    this.dom.axis.parentNode.removeChild(this.dom.axis);
+  }
+
+  // remove the labelset containing all group labels
+  if (this.dom.labelSet.parentNode) {
+    this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);
+  }
+};
+
+/**
+ * Show the component in the DOM (when not already visible).
+ */
+ItemSet.prototype.show = function () {
+  // show frame containing the items
+  if (!this.dom.frame.parentNode) {
+    this.body.dom.center.appendChild(this.dom.frame);
+  }
+
+  // show axis with dots
+  if (!this.dom.axis.parentNode) {
+    this.body.dom.backgroundVertical.appendChild(this.dom.axis);
+  }
+
+  // show labelset containing labels
+  if (!this.dom.labelSet.parentNode) {
+    if (this.options.rtl) {
+      this.body.dom.right.appendChild(this.dom.labelSet);
+    } else {
+      this.body.dom.left.appendChild(this.dom.labelSet);
+    }
+  }
+};
+
+/**
+ * Set selected items by their id. Replaces the current selection
+ * Unknown id's are silently ignored.
+ * @param {string[] | string} [ids] An array with zero or more id's of the items to be
+ *                                  selected, or a single item id. If ids is undefined
+ *                                  or an empty array, all items will be unselected.
+ */
+ItemSet.prototype.setSelection = function (ids) {
+  var i, ii, id, item;
+
+  if (ids == undefined) ids = [];
+  if (!Array.isArray(ids)) ids = [ids];
+
+  // unselect currently selected items
+  for (i = 0, ii = this.selection.length; i < ii; i++) {
+    id = this.selection[i];
+    item = this.items[id];
+    if (item) item.unselect();
+  }
+
+  // select items
+  this.selection = [];
+  for (i = 0, ii = ids.length; i < ii; i++) {
+    id = ids[i];
+    item = this.items[id];
+    if (item) {
+      this.selection.push(id);
+      item.select();
+    }
+  }
+};
+
+/**
+ * Get the selected items by their id
+ * @return {Array} ids  The ids of the selected items
+ */
+ItemSet.prototype.getSelection = function () {
+  return this.selection.concat([]);
+};
+
+/**
+ * Get the id's of the currently visible items.
+ * @returns {Array} The ids of the visible items
+ */
+ItemSet.prototype.getVisibleItems = function () {
+  var range = this.body.range.getRange();
+  var right, left;
+
+  if (this.options.rtl) {
+    right = this.body.util.toScreen(range.start);
+    left = this.body.util.toScreen(range.end);
+  } else {
+    left = this.body.util.toScreen(range.start);
+    right = this.body.util.toScreen(range.end);
+  }
+
+  var ids = [];
+  for (var groupId in this.groups) {
+    if (this.groups.hasOwnProperty(groupId)) {
+      var group = this.groups[groupId];
+      var rawVisibleItems = group.isVisible ? group.visibleItems : [];
+
+      // filter the "raw" set with visibleItems into a set which is really
+      // visible by pixels
+      for (var i = 0; i < rawVisibleItems.length; i++) {
+        var item = rawVisibleItems[i];
+        // TODO: also check whether visible vertically
+        if (this.options.rtl) {
+          if (item.right < left && item.right + item.width > right) {
+            ids.push(item.id);
+          }
+        } else {
+          if (item.left < right && item.left + item.width > left) {
+            ids.push(item.id);
+          }
+        }
+      }
+    }
+  }
+
+  return ids;
+};
+
+/**
+ * Deselect a selected item
+ * @param {string | number} id
+ * @private
+ */
+ItemSet.prototype._deselect = function (id) {
+  var selection = this.selection;
+  for (var i = 0, ii = selection.length; i < ii; i++) {
+    if (selection[i] == id) {
+      // non-strict comparison!
+      selection.splice(i, 1);
+      break;
+    }
+  }
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+ItemSet.prototype.redraw = function () {
+  var margin = this.options.margin,
+      range = this.body.range,
+      asSize = util.option.asSize,
+      options = this.options,
+      orientation = options.orientation.item,
+      resized = false,
+      frame = this.dom.frame;
+
+  // recalculate absolute position (before redrawing groups)
+  this.props.top = this.body.domProps.top.height + this.body.domProps.border.top;
+
+  if (this.options.rtl) {
+    this.props.right = this.body.domProps.right.width + this.body.domProps.border.right;
+  } else {
+    this.props.left = this.body.domProps.left.width + this.body.domProps.border.left;
+  }
+
+  // update class name
+  frame.className = 'vis-itemset';
+
+  // reorder the groups (if needed)
+  resized = this._orderGroups() || resized;
+
+  // check whether zoomed (in that case we need to re-stack everything)
+  // TODO: would be nicer to get this as a trigger from Range
+  var visibleInterval = range.end - range.start;
+  var zoomed = visibleInterval != this.lastVisibleInterval || this.props.width != this.props.lastWidth;
+  var scrolled = range.start != this.lastRangeStart;
+  var changedStackOption = options.stack != this.lastStack;
+  var changedStackSubgroupsOption = options.stackSubgroups != this.lastStackSubgroups;
+  var forceRestack = zoomed || scrolled || changedStackOption || changedStackSubgroupsOption;
+  this.lastVisibleInterval = visibleInterval;
+  this.lastRangeStart = range.start;
+  this.lastStack = options.stack;
+  this.lastStackSubgroups = options.stackSubgroups;
+
+  this.props.lastWidth = this.props.width;
+
+  var firstGroup = this._firstGroup();
+  var firstMargin = {
+    item: margin.item,
+    axis: margin.axis
+  };
+  var nonFirstMargin = {
+    item: margin.item,
+    axis: margin.item.vertical / 2
+  };
+  var height = 0;
+  var minHeight = margin.axis + margin.item.vertical;
+
+  // redraw the background group
+  this.groups[BACKGROUND].redraw(range, nonFirstMargin, forceRestack);
+
+  var redrawQueue = {};
+  var redrawQueueLength = 0;
+
+  // collect redraw functions
+  util.forEach(this.groups, function (group, key) {
+    if (key === BACKGROUND) return;
+    var groupMargin = group == firstGroup ? firstMargin : nonFirstMargin;
+    var returnQueue = true;
+    redrawQueue[key] = group.redraw(range, groupMargin, forceRestack, returnQueue);
+    redrawQueueLength = redrawQueue[key].length;
+  });
+
+  var needRedraw = redrawQueueLength > 0;
+  if (needRedraw) {
+    var redrawResults = {};
+
+    for (var i = 0; i < redrawQueueLength; i++) {
+      util.forEach(redrawQueue, function (fns, key) {
+        redrawResults[key] = fns[i]();
+      });
+    }
+
+    // redraw all regular groups
+    util.forEach(this.groups, function (group, key) {
+      if (key === BACKGROUND) return;
+      var groupResized = redrawResults[key];
+      resized = groupResized || resized;
+      height += group.height;
+    });
+    height = Math.max(height, minHeight);
+  }
+
+  height = Math.max(height, minHeight);
+
+  // update frame height
+  frame.style.height = asSize(height);
+
+  // calculate actual size
+  this.props.width = frame.offsetWidth;
+  this.props.height = height;
+
+  // reposition axis
+  this.dom.axis.style.top = asSize(orientation == 'top' ? this.body.domProps.top.height + this.body.domProps.border.top : this.body.domProps.top.height + this.body.domProps.centerContainer.height);
+  if (this.options.rtl) {
+    this.dom.axis.style.right = '0';
+  } else {
+    this.dom.axis.style.left = '0';
+  }
+
+  this.initialItemSetDrawn = true;
+  // check if this component is resized
+  resized = this._isResized() || resized;
+
+  return resized;
+};
+
+/**
+ * Get the first group, aligned with the axis
+ * @return {Group | null} firstGroup
+ * @private
+ */
+ItemSet.prototype._firstGroup = function () {
+  var firstGroupIndex = this.options.orientation.item == 'top' ? 0 : this.groupIds.length - 1;
+  var firstGroupId = this.groupIds[firstGroupIndex];
+  var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];
+
+  return firstGroup || null;
+};
+
+/**
+ * Create or delete the group holding all ungrouped items. This group is used when
+ * there are no groups specified.
+ * @protected
+ */
+ItemSet.prototype._updateUngrouped = function () {
+  var ungrouped = this.groups[UNGROUPED];
+  var item, itemId;
+
+  if (this.groupsData) {
+    // remove the group holding all ungrouped items
+    if (ungrouped) {
+      ungrouped.hide();
+      delete this.groups[UNGROUPED];
+
+      for (itemId in this.items) {
+        if (this.items.hasOwnProperty(itemId)) {
+          item = this.items[itemId];
+          item.parent && item.parent.remove(item);
+          var groupId = this._getGroupId(item.data);
+          var group = this.groups[groupId];
+          group && group.add(item) || item.hide();
+        }
+      }
+    }
+  } else {
+    // create a group holding all (unfiltered) items
+    if (!ungrouped) {
+      var id = null;
+      var data = null;
+      ungrouped = new Group(id, data, this);
+      this.groups[UNGROUPED] = ungrouped;
+
+      for (itemId in this.items) {
+        if (this.items.hasOwnProperty(itemId)) {
+          item = this.items[itemId];
+          ungrouped.add(item);
+        }
+      }
+
+      ungrouped.show();
+    }
+  }
+};
+
+/**
+ * Get the element for the labelset
+ * @return {HTMLElement} labelSet
+ */
+ItemSet.prototype.getLabelSet = function () {
+  return this.dom.labelSet;
+};
+
+/**
+ * Set items
+ * @param {vis.DataSet | null} items
+ */
+ItemSet.prototype.setItems = function (items) {
+  var me = this,
+      ids,
+      oldItemsData = this.itemsData;
+
+  // replace the dataset
+  if (!items) {
+    this.itemsData = null;
+  } else if (items instanceof DataSet || items instanceof DataView) {
+    this.itemsData = items;
+  } else {
+    throw new TypeError('Data must be an instance of DataSet or DataView');
+  }
+
+  if (oldItemsData) {
+    // unsubscribe from old dataset
+    util.forEach(this.itemListeners, function (callback, event) {
+      oldItemsData.off(event, callback);
+    });
+
+    // remove all drawn items
+    ids = oldItemsData.getIds();
+    this._onRemove(ids);
+  }
+
+  if (this.itemsData) {
+    // subscribe to new dataset
+    var id = this.id;
+    util.forEach(this.itemListeners, function (callback, event) {
+      me.itemsData.on(event, callback, id);
+    });
+
+    // add all new items
+    ids = this.itemsData.getIds();
+    this._onAdd(ids);
+
+    // update the group holding all ungrouped items
+    this._updateUngrouped();
+  }
+
+  this.body.emitter.emit('_change', { queue: true });
+};
+
+/**
+ * Get the current items
+ * @returns {vis.DataSet | null}
+ */
+ItemSet.prototype.getItems = function () {
+  return this.itemsData;
+};
+
+/**
+ * Set groups
+ * @param {vis.DataSet} groups
+ */
+ItemSet.prototype.setGroups = function (groups) {
+  var me = this,
+      ids;
+
+  // unsubscribe from current dataset
+  if (this.groupsData) {
+    util.forEach(this.groupListeners, function (callback, event) {
+      me.groupsData.off(event, callback);
+    });
+
+    // remove all drawn groups
+    ids = this.groupsData.getIds();
+    this.groupsData = null;
+    this._onRemoveGroups(ids); // note: this will cause a redraw
+  }
+
+  // replace the dataset
+  if (!groups) {
+    this.groupsData = null;
+  } else if (groups instanceof DataSet || groups instanceof DataView) {
+    this.groupsData = groups;
+  } else {
+    throw new TypeError('Data must be an instance of DataSet or DataView');
+  }
+
+  if (this.groupsData) {
+    // go over all groups nesting
+    var groupsData = this.groupsData;
+    if (this.groupsData instanceof DataView) {
+      groupsData = this.groupsData.getDataSet();
+    }
+
+    groupsData.get().forEach(function (group) {
+      if (group.nestedGroups) {
+        group.nestedGroups.forEach(function (nestedGroupId) {
+          var updatedNestedGroup = groupsData.get(nestedGroupId);
+          updatedNestedGroup.nestedInGroup = group.id;
+          if (group.showNested == false) {
+            updatedNestedGroup.visible = false;
+          }
+          groupsData.update(updatedNestedGroup);
+        });
+      }
+    });
+
+    // subscribe to new dataset
+    var id = this.id;
+    util.forEach(this.groupListeners, function (callback, event) {
+      me.groupsData.on(event, callback, id);
+    });
+
+    // draw all ms
+    ids = this.groupsData.getIds();
+    this._onAddGroups(ids);
+  }
+
+  // update the group holding all ungrouped items
+  this._updateUngrouped();
+
+  // update the order of all items in each group
+  this._order();
+
+  this.body.emitter.emit('_change', { queue: true });
+};
+
+/**
+ * Get the current groups
+ * @returns {vis.DataSet | null} groups
+ */
+ItemSet.prototype.getGroups = function () {
+  return this.groupsData;
+};
+
+/**
+ * Remove an item by its id
+ * @param {string | number} id
+ */
+ItemSet.prototype.removeItem = function (id) {
+  var item = this.itemsData.get(id),
+      dataset = this.itemsData.getDataSet();
+
+  if (item) {
+    // confirm deletion
+    this.options.onRemove(item, function (item) {
+      if (item) {
+        // remove by id here, it is possible that an item has no id defined
+        // itself, so better not delete by the item itself
+        dataset.remove(id);
+      }
+    });
+  }
+};
+
+/**
+ * Get the time of an item based on it's data and options.type
+ * @param {Object} itemData
+ * @returns {string} Returns the type
+ * @private
+ */
+ItemSet.prototype._getType = function (itemData) {
+  return itemData.type || this.options.type || (itemData.end ? 'range' : 'box');
+};
+
+/**
+ * Get the group id for an item
+ * @param {Object} itemData
+ * @returns {string} Returns the groupId
+ * @private
+ */
+ItemSet.prototype._getGroupId = function (itemData) {
+  var type = this._getType(itemData);
+  if (type == 'background' && itemData.group == undefined) {
+    return BACKGROUND;
+  } else {
+    return this.groupsData ? itemData.group : UNGROUPED;
+  }
+};
+
+/**
+ * Handle updated items
+ * @param {number[]} ids
+ * @protected
+ */
+ItemSet.prototype._onUpdate = function (ids) {
+  var me = this;
+
+  ids.forEach(function (id) {
+    var itemData = me.itemsData.get(id, me.itemOptions);
+    var item = me.items[id];
+    var type = itemData ? me._getType(itemData) : null;
+
+    var constructor = ItemSet.types[type];
+    var selected;
+
+    if (item) {
+      // update item   	
+      if (!constructor || !(item instanceof constructor)) {
+        // item type has changed, delete the item and recreate it
+        selected = item.selected; // preserve selection of this item
+        me._removeItem(item);
+        item = null;
+      } else {
+        me._updateItem(item, itemData);
+      }
+    }
+
+    if (!item && itemData) {
+      // create item
+      if (constructor) {
+        item = new constructor(itemData, me.conversion, me.options);
+        item.id = id; // TODO: not so nice setting id afterwards
+
+        me._addItem(item);
+        if (selected) {
+          this.selection.push(id);
+          item.select();
+        }
+      } else if (type == 'rangeoverflow') {
+        // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day
+        throw new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: ' + '.vis-item.vis-range .vis-item-content {overflow: visible;}');
+      } else {
+        throw new TypeError('Unknown item type "' + type + '"');
+      }
+    }
+  }.bind(this));
+
+  this._order();
+  this.body.emitter.emit('_change', { queue: true });
+};
+
+/**
+ * Handle added items
+ * @param {number[]} ids
+ * @protected
+ */
+ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;
+
+/**
+ * Handle removed items
+ * @param {number[]} ids
+ * @protected
+ */
+ItemSet.prototype._onRemove = function (ids) {
+  var count = 0;
+  var me = this;
+  ids.forEach(function (id) {
+    var item = me.items[id];
+    if (item) {
+      count++;
+      me._removeItem(item);
+    }
+  });
+
+  if (count) {
+    // update order
+    this._order();
+    this.body.emitter.emit('_change', { queue: true });
+  }
+};
+
+/**
+ * Update the order of item in all groups
+ * @private
+ */
+ItemSet.prototype._order = function () {
+  // reorder the items in all groups
+  // TODO: optimization: only reorder groups affected by the changed items
+  util.forEach(this.groups, function (group) {
+    group.order();
+  });
+};
+
+/**
+ * Handle updated groups
+ * @param {number[]} ids
+ * @private
+ */
+ItemSet.prototype._onUpdateGroups = function (ids) {
+  this._onAddGroups(ids);
+};
+
+/**
+ * Handle changed groups (added or updated)
+ * @param {number[]} ids
+ * @private
+ */
+ItemSet.prototype._onAddGroups = function (ids) {
+  var me = this;
+
+  ids.forEach(function (id) {
+    var groupData = me.groupsData.get(id);
+    var group = me.groups[id];
+
+    if (!group) {
+      // check for reserved ids
+      if (id == UNGROUPED || id == BACKGROUND) {
+        throw new Error('Illegal group id. ' + id + ' is a reserved id.');
+      }
+
+      var groupOptions = (0, _create2['default'])(me.options);
+      util.extend(groupOptions, {
+        height: null
+      });
+
+      group = new Group(id, groupData, me);
+      me.groups[id] = group;
+
+      // add items with this groupId to the new group
+      for (var itemId in me.items) {
+        if (me.items.hasOwnProperty(itemId)) {
+          var item = me.items[itemId];
+          if (item.data.group == id) {
+            group.add(item);
+          }
+        }
+      }
+
+      group.order();
+      group.show();
+    } else {
+      // update group
+      group.setData(groupData);
+    }
+  });
+
+  this.body.emitter.emit('_change', { queue: true });
+};
+
+/**
+ * Handle removed groups
+ * @param {number[]} ids
+ * @private
+ */
+ItemSet.prototype._onRemoveGroups = function (ids) {
+  var groups = this.groups;
+  ids.forEach(function (id) {
+    var group = groups[id];
+
+    if (group) {
+      group.hide();
+      delete groups[id];
+    }
+  });
+
+  this.markDirty();
+
+  this.body.emitter.emit('_change', { queue: true });
+};
+
+/**
+ * Reorder the groups if needed
+ * @return {boolean} changed
+ * @private
+ */
+ItemSet.prototype._orderGroups = function () {
+  if (this.groupsData) {
+    // reorder the groups
+    var groupIds = this.groupsData.getIds({
+      order: this.options.groupOrder
+    });
+
+    groupIds = this._orderNestedGroups(groupIds);
+
+    var changed = !util.equalArray(groupIds, this.groupIds);
+    if (changed) {
+      // hide all groups, removes them from the DOM
+      var groups = this.groups;
+      groupIds.forEach(function (groupId) {
+        groups[groupId].hide();
+      });
+
+      // show the groups again, attach them to the DOM in correct order
+      groupIds.forEach(function (groupId) {
+        groups[groupId].show();
+      });
+
+      this.groupIds = groupIds;
+    }
+
+    return changed;
+  } else {
+    return false;
+  }
+};
+
+/**
+ * Reorder the nested groups
+ *
+ * @param {Array.<number>} groupIds
+ * @returns {Array.<number>}
+ * @private
+ */
+ItemSet.prototype._orderNestedGroups = function (groupIds) {
+  var newGroupIdsOrder = [];
+
+  groupIds.forEach(function (groupId) {
+    var groupData = this.groupsData.get(groupId);
+    if (!groupData.nestedInGroup) {
+      newGroupIdsOrder.push(groupId);
+    }
+    if (groupData.nestedGroups) {
+      var nestedGroups = this.groupsData.get({
+        filter: function filter(nestedGroup) {
+          return nestedGroup.nestedInGroup == groupId;
+        },
+        order: this.options.groupOrder
+      });
+      var nestedGroupIds = nestedGroups.map(function (nestedGroup) {
+        return nestedGroup.id;
+      });
+      newGroupIdsOrder = newGroupIdsOrder.concat(nestedGroupIds);
+    }
+  }, this);
+  return newGroupIdsOrder;
+};
+
+/**
+ * Add a new item
+ * @param {Item} item
+ * @private
+ */
+ItemSet.prototype._addItem = function (item) {
+  this.items[item.id] = item;
+
+  // add to group
+  var groupId = this._getGroupId(item.data);
+  var group = this.groups[groupId];
+
+  if (!group) {
+    item.groupShowing = false;
+  } else if (group && group.data && group.data.showNested) {
+    item.groupShowing = true;
+  }
+
+  if (group) group.add(item);
+};
+
+/**
+ * Update an existing item
+ * @param {Item} item
+ * @param {Object} itemData
+ * @private
+ */
+ItemSet.prototype._updateItem = function (item, itemData) {
+  // update the items data (will redraw the item when displayed)
+  item.setData(itemData);
+
+  var groupId = this._getGroupId(item.data);
+  var group = this.groups[groupId];
+  if (!group) {
+    item.groupShowing = false;
+  } else if (group && group.data && group.data.showNested) {
+    item.groupShowing = true;
+  }
+};
+
+/**
+ * Delete an item from the ItemSet: remove it from the DOM, from the map
+ * with items, and from the map with visible items, and from the selection
+ * @param {Item} item
+ * @private
+ */
+ItemSet.prototype._removeItem = function (item) {
+  // remove from DOM
+  item.hide();
+
+  // remove from items
+  delete this.items[item.id];
+
+  // remove from selection
+  var index = this.selection.indexOf(item.id);
+  if (index != -1) this.selection.splice(index, 1);
+
+  // remove from group
+  item.parent && item.parent.remove(item);
+};
+
+/**
+ * Create an array containing all items being a range (having an end date)
+ * @param {Array.<Object>} array
+ * @returns {Array}
+ * @private
+ */
+ItemSet.prototype._constructByEndArray = function (array) {
+  var endArray = [];
+
+  for (var i = 0; i < array.length; i++) {
+    if (array[i] instanceof RangeItem) {
+      endArray.push(array[i]);
+    }
+  }
+  return endArray;
+};
+
+/**
+ * Register the clicked item on touch, before dragStart is initiated.
+ *
+ * dragStart is initiated from a mousemove event, AFTER the mouse/touch is
+ * already moving. Therefore, the mouse/touch can sometimes be above an other
+ * DOM element than the item itself.
+ *
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onTouch = function (event) {
+  // store the touched item, used in _onDragStart
+  this.touchParams.item = this.itemFromTarget(event);
+  this.touchParams.dragLeftItem = event.target.dragLeftItem || false;
+  this.touchParams.dragRightItem = event.target.dragRightItem || false;
+  this.touchParams.itemProps = null;
+};
+
+/**
+ * Given an group id, returns the index it has.
+ *
+ * @param {number} groupId
+ * @returns {number} index / groupId
+ * @private
+ */
+ItemSet.prototype._getGroupIndex = function (groupId) {
+  for (var i = 0; i < this.groupIds.length; i++) {
+    if (groupId == this.groupIds[i]) return i;
+  }
+};
+
+/**
+ * Start dragging the selected events
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onDragStart = function (event) {
+  if (this.touchParams.itemIsDragging) {
+    return;
+  }
+  var item = this.touchParams.item || null;
+  var me = this;
+  var props;
+
+  if (item && (item.selected || this.options.itemsAlwaysDraggable.item)) {
+
+    if (this.options.editable.overrideItems && !this.options.editable.updateTime && !this.options.editable.updateGroup) {
+      return;
+    }
+
+    // override options.editable
+    if (item.editable != null && !item.editable.updateTime && !item.editable.updateGroup && !this.options.editable.overrideItems) {
+      return;
+    }
+
+    var dragLeftItem = this.touchParams.dragLeftItem;
+    var dragRightItem = this.touchParams.dragRightItem;
+    this.touchParams.itemIsDragging = true;
+    this.touchParams.selectedItem = item;
+
+    if (dragLeftItem) {
+      props = {
+        item: dragLeftItem,
+        initialX: event.center.x,
+        dragLeft: true,
+        data: this._cloneItemData(item.data)
+      };
+
+      this.touchParams.itemProps = [props];
+    } else if (dragRightItem) {
+      props = {
+        item: dragRightItem,
+        initialX: event.center.x,
+        dragRight: true,
+        data: this._cloneItemData(item.data)
+      };
+
+      this.touchParams.itemProps = [props];
+    } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {
+      // create a new range item when dragging with ctrl key down
+      this._onDragStartAddItem(event);
+    } else {
+      if (this.groupIds.length < 1) {
+        // Mitigates a race condition if _onDragStart() is
+        // called after markDirty() without redraw() being called between.
+        this.redraw();
+      }
+
+      var baseGroupIndex = this._getGroupIndex(item.data.group);
+
+      var itemsToDrag = this.options.itemsAlwaysDraggable.item && !item.selected ? [item.id] : this.getSelection();
+
+      this.touchParams.itemProps = itemsToDrag.map(function (id) {
+        var item = me.items[id];
+        var groupIndex = me._getGroupIndex(item.data.group);
+        return {
+          item: item,
+          initialX: event.center.x,
+          groupOffset: baseGroupIndex - groupIndex,
+          data: this._cloneItemData(item.data)
+        };
+      }.bind(this));
+    }
+
+    event.stopPropagation();
+  } else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {
+    // create a new range item when dragging with ctrl key down
+    this._onDragStartAddItem(event);
+  }
+};
+
+/**
+ * Start creating a new range item by dragging.
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onDragStartAddItem = function (event) {
+  var xAbs;
+  var x;
+  var snap = this.options.snap || null;
+
+  if (this.options.rtl) {
+    xAbs = util.getAbsoluteRight(this.dom.frame);
+    x = xAbs - event.center.x + 10; // plus 10 to compensate for the drag starting as soon as you've moved 10px
+  } else {
+    xAbs = util.getAbsoluteLeft(this.dom.frame);
+    x = event.center.x - xAbs - 10; // minus 10 to compensate for the drag starting as soon as you've moved 10px
+  }
+
+  var time = this.body.util.toTime(x);
+  var scale = this.body.util.getScale();
+  var step = this.body.util.getStep();
+  var start = snap ? snap(time, scale, step) : time;
+  var end = start;
+
+  var itemData = {
+    type: 'range',
+    start: start,
+    end: end,
+    content: 'new item'
+  };
+
+  var id = util.randomUUID();
+  itemData[this.itemsData._fieldId] = id;
+
+  var group = this.groupFromTarget(event);
+  if (group) {
+    itemData.group = group.groupId;
+  }
+  var newItem = new RangeItem(itemData, this.conversion, this.options);
+  newItem.id = id; // TODO: not so nice setting id afterwards
+  newItem.data = this._cloneItemData(itemData);
+  this._addItem(newItem);
+  this.touchParams.selectedItem = newItem;
+
+  var props = {
+    item: newItem,
+    initialX: event.center.x,
+    data: newItem.data
+  };
+
+  if (this.options.rtl) {
+    props.dragLeft = true;
+  } else {
+    props.dragRight = true;
+  }
+  this.touchParams.itemProps = [props];
+
+  event.stopPropagation();
+};
+
+/**
+ * Drag selected items
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onDrag = function (event) {
+  if (this.touchParams.itemProps) {
+    event.stopPropagation();
+
+    var me = this;
+    var snap = this.options.snap || null;
+    var xOffset;
+
+    if (this.options.rtl) {
+      xOffset = this.body.dom.root.offsetLeft + this.body.domProps.right.width;
+    } else {
+      xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width;
+    }
+
+    var scale = this.body.util.getScale();
+    var step = this.body.util.getStep();
+
+    //only calculate the new group for the item that's actually dragged
+    var selectedItem = this.touchParams.selectedItem;
+    var updateGroupAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateGroup;
+    var newGroupBase = null;
+    if (updateGroupAllowed && selectedItem) {
+      if (selectedItem.data.group != undefined) {
+        // drag from one group to another
+        var group = me.groupFromTarget(event);
+        if (group) {
+          //we know the offset for all items, so the new group for all items
+          //will be relative to this one.
+          newGroupBase = this._getGroupIndex(group.groupId);
+        }
+      }
+    }
+
+    // move
+    this.touchParams.itemProps.forEach(function (props) {
+      var current = me.body.util.toTime(event.center.x - xOffset);
+      var initial = me.body.util.toTime(props.initialX - xOffset);
+      var offset;
+      var initialStart;
+      var initialEnd;
+      var start;
+      var end;
+
+      if (this.options.rtl) {
+        offset = -(current - initial); // ms
+      } else {
+        offset = current - initial; // ms
+      }
+
+      var itemData = this._cloneItemData(props.item.data); // clone the data
+      if (props.item.editable != null && !props.item.editable.updateTime && !props.item.editable.updateGroup && !me.options.editable.overrideItems) {
+        return;
+      }
+
+      var updateTimeAllowed = (this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime || !this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime;
+      if (updateTimeAllowed) {
+        if (props.dragLeft) {
+          // drag left side of a range item
+          if (this.options.rtl) {
+            if (itemData.end != undefined) {
+              initialEnd = util.convert(props.data.end, 'Date');
+              end = new Date(initialEnd.valueOf() + offset);
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.end = snap ? snap(end, scale, step) : end;
+            }
+          } else {
+            if (itemData.start != undefined) {
+              initialStart = util.convert(props.data.start, 'Date');
+              start = new Date(initialStart.valueOf() + offset);
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.start = snap ? snap(start, scale, step) : start;
+            }
+          }
+        } else if (props.dragRight) {
+          // drag right side of a range item
+          if (this.options.rtl) {
+            if (itemData.start != undefined) {
+              initialStart = util.convert(props.data.start, 'Date');
+              start = new Date(initialStart.valueOf() + offset);
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.start = snap ? snap(start, scale, step) : start;
+            }
+          } else {
+            if (itemData.end != undefined) {
+              initialEnd = util.convert(props.data.end, 'Date');
+              end = new Date(initialEnd.valueOf() + offset);
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.end = snap ? snap(end, scale, step) : end;
+            }
+          }
+        } else {
+          // drag both start and end
+          if (itemData.start != undefined) {
+
+            initialStart = util.convert(props.data.start, 'Date').valueOf();
+            start = new Date(initialStart + offset);
+
+            if (itemData.end != undefined) {
+              initialEnd = util.convert(props.data.end, 'Date');
+              var duration = initialEnd.valueOf() - initialStart.valueOf();
+
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.start = snap ? snap(start, scale, step) : start;
+              itemData.end = new Date(itemData.start.valueOf() + duration);
+            } else {
+              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)
+              itemData.start = snap ? snap(start, scale, step) : start;
+            }
+          }
+        }
+      }
+
+      if (updateGroupAllowed && !props.dragLeft && !props.dragRight && newGroupBase != null) {
+        if (itemData.group != undefined) {
+          var newOffset = newGroupBase - props.groupOffset;
+
+          //make sure we stay in bounds
+          newOffset = Math.max(0, newOffset);
+          newOffset = Math.min(me.groupIds.length - 1, newOffset);
+          itemData.group = me.groupIds[newOffset];
+        }
+      }
+
+      // confirm moving the item
+      itemData = this._cloneItemData(itemData); // convert start and end to the correct type
+      me.options.onMoving(itemData, function (itemData) {
+        if (itemData) {
+          props.item.setData(this._cloneItemData(itemData, 'Date'));
+        }
+      }.bind(this));
+    }.bind(this));
+
+    this.body.emitter.emit('_change');
+  }
+};
+
+/**
+ * Move an item to another group
+ * @param {Item} item
+ * @param {string | number} groupId
+ * @private
+ */
+ItemSet.prototype._moveToGroup = function (item, groupId) {
+  var group = this.groups[groupId];
+  if (group && group.groupId != item.data.group) {
+    var oldGroup = item.parent;
+    oldGroup.remove(item);
+    oldGroup.order();
+
+    item.data.group = group.groupId;
+
+    group.add(item);
+    group.order();
+  }
+};
+
+/**
+ * End of dragging selected items
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onDragEnd = function (event) {
+  this.touchParams.itemIsDragging = false;
+  if (this.touchParams.itemProps) {
+    event.stopPropagation();
+
+    var me = this;
+    var dataset = this.itemsData.getDataSet();
+    var itemProps = this.touchParams.itemProps;
+    this.touchParams.itemProps = null;
+
+    itemProps.forEach(function (props) {
+      var id = props.item.id;
+      var exists = me.itemsData.get(id, me.itemOptions) != null;
+
+      if (!exists) {
+        // add a new item
+        me.options.onAdd(props.item.data, function (itemData) {
+          me._removeItem(props.item); // remove temporary item
+          if (itemData) {
+            me.itemsData.getDataSet().add(itemData);
+          }
+
+          // force re-stacking of all items next redraw
+          me.body.emitter.emit('_change');
+        });
+      } else {
+        // update existing item
+        var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type
+        me.options.onMove(itemData, function (itemData) {
+          if (itemData) {
+            // apply changes
+            itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined)
+            dataset.update(itemData);
+          } else {
+            // restore original values
+            props.item.setData(props.data);
+
+            me.body.emitter.emit('_change');
+          }
+        });
+      }
+    }.bind(this));
+  }
+};
+
+ItemSet.prototype._onGroupClick = function (event) {
+  var group = this.groupFromTarget(event);
+
+  if (!group || !group.nestedGroups) return;
+
+  var groupsData = this.groupsData.getDataSet();
+
+  var nestingGroup = groupsData.get(group.groupId);
+  if (nestingGroup.showNested == undefined) {
+    nestingGroup.showNested = true;
+  }
+  nestingGroup.showNested = !nestingGroup.showNested;
+
+  var nestedGroups = groupsData.get(group.nestedGroups).map(function (nestedGroup) {
+    nestedGroup.visible = nestingGroup.showNested;
+    return nestedGroup;
+  });
+
+  groupsData.update(nestedGroups.concat(nestingGroup));
+
+  if (nestingGroup.showNested) {
+    util.removeClassName(group.dom.label, 'collapsed');
+    util.addClassName(group.dom.label, 'expanded');
+  } else {
+    util.removeClassName(group.dom.label, 'expanded');
+    var collapsedDirClassName = this.options.rtl ? 'collapsed-rtl' : 'collapsed';
+    util.addClassName(group.dom.label, collapsedDirClassName);
+  }
+};
+
+ItemSet.prototype._onGroupDragStart = function (event) {
+  if (this.options.groupEditable.order) {
+    this.groupTouchParams.group = this.groupFromTarget(event);
+
+    if (this.groupTouchParams.group) {
+      event.stopPropagation();
+
+      this.groupTouchParams.originalOrder = this.groupsData.getIds({
+        order: this.options.groupOrder
+      });
+    }
+  }
+};
+
+ItemSet.prototype._onGroupDrag = function (event) {
+  if (this.options.groupEditable.order && this.groupTouchParams.group) {
+    event.stopPropagation();
+
+    var groupsData = this.groupsData;
+    if (this.groupsData instanceof DataView) {
+      groupsData = this.groupsData.getDataSet();
+    }
+    // drag from one group to another
+    var group = this.groupFromTarget(event);
+
+    // try to avoid toggling when groups differ in height
+    if (group && group.height != this.groupTouchParams.group.height) {
+      var movingUp = group.top < this.groupTouchParams.group.top;
+      var clientY = event.center ? event.center.y : event.clientY;
+      var targetGroupTop = util.getAbsoluteTop(group.dom.foreground);
+      var draggedGroupHeight = this.groupTouchParams.group.height;
+      if (movingUp) {
+        // skip swapping the groups when the dragged group is not below clientY afterwards
+        if (targetGroupTop + draggedGroupHeight < clientY) {
+          return;
+        }
+      } else {
+        var targetGroupHeight = group.height;
+        // skip swapping the groups when the dragged group is not below clientY afterwards
+        if (targetGroupTop + targetGroupHeight - draggedGroupHeight > clientY) {
+          return;
+        }
+      }
+    }
+
+    if (group && group != this.groupTouchParams.group) {
+      var targetGroup = groupsData.get(group.groupId);
+      var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId);
+
+      // switch groups
+      if (draggedGroup && targetGroup) {
+        this.options.groupOrderSwap(draggedGroup, targetGroup, groupsData);
+        groupsData.update(draggedGroup);
+        groupsData.update(targetGroup);
+      }
+
+      // fetch current order of groups
+      var newOrder = groupsData.getIds({
+        order: this.options.groupOrder
+      });
+
+      // in case of changes since _onGroupDragStart
+      if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) {
+        var origOrder = this.groupTouchParams.originalOrder;
+        var draggedId = this.groupTouchParams.group.groupId;
+        var numGroups = Math.min(origOrder.length, newOrder.length);
+        var curPos = 0;
+        var newOffset = 0;
+        var orgOffset = 0;
+        while (curPos < numGroups) {
+          // as long as the groups are where they should be step down along the groups order
+          while (curPos + newOffset < numGroups && curPos + orgOffset < numGroups && newOrder[curPos + newOffset] == origOrder[curPos + orgOffset]) {
+            curPos++;
+          }
+
+          // all ok
+          if (curPos + newOffset >= numGroups) {
+            break;
+          }
+
+          // not all ok
+          // if dragged group was move upwards everything below should have an offset
+          if (newOrder[curPos + newOffset] == draggedId) {
+            newOffset = 1;
+          }
+          // if dragged group was move downwards everything above should have an offset
+          else if (origOrder[curPos + orgOffset] == draggedId) {
+              orgOffset = 1;
+            }
+            // found a group (apart from dragged group) that has the wrong position -> switch with the 
+            // group at the position where other one should be, fix index arrays and continue
+            else {
+                var slippedPosition = newOrder.indexOf(origOrder[curPos + orgOffset]);
+                var switchGroup = groupsData.get(newOrder[curPos + newOffset]);
+                var shouldBeGroup = groupsData.get(origOrder[curPos + orgOffset]);
+                this.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData);
+                groupsData.update(switchGroup);
+                groupsData.update(shouldBeGroup);
+
+                var switchGroupId = newOrder[curPos + newOffset];
+                newOrder[curPos + newOffset] = origOrder[curPos + orgOffset];
+                newOrder[slippedPosition] = switchGroupId;
+
+                curPos++;
+              }
+        }
+      }
+    }
+  }
+};
+
+ItemSet.prototype._onGroupDragEnd = function (event) {
+  if (this.options.groupEditable.order && this.groupTouchParams.group) {
+    event.stopPropagation();
+
+    // update existing group
+    var me = this;
+    var id = me.groupTouchParams.group.groupId;
+    var dataset = me.groupsData.getDataSet();
+    var groupData = util.extend({}, dataset.get(id)); // clone the data
+    me.options.onMoveGroup(groupData, function (groupData) {
+      if (groupData) {
+        // apply changes
+        groupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined)
+        dataset.update(groupData);
+      } else {
+
+        // fetch current order of groups
+        var newOrder = dataset.getIds({
+          order: me.options.groupOrder
+        });
+
+        // restore original order
+        if (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) {
+          var origOrder = me.groupTouchParams.originalOrder;
+          var numGroups = Math.min(origOrder.length, newOrder.length);
+          var curPos = 0;
+          while (curPos < numGroups) {
+            // as long as the groups are where they should be step down along the groups order
+            while (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) {
+              curPos++;
+            }
+
+            // all ok
+            if (curPos >= numGroups) {
+              break;
+            }
+
+            // found a group that has the wrong position -> switch with the
+            // group at the position where other one should be, fix index arrays and continue
+            var slippedPosition = newOrder.indexOf(origOrder[curPos]);
+            var switchGroup = dataset.get(newOrder[curPos]);
+            var shouldBeGroup = dataset.get(origOrder[curPos]);
+            me.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset);
+            dataset.update(switchGroup);
+            dataset.update(shouldBeGroup);
+
+            var switchGroupId = newOrder[curPos];
+            newOrder[curPos] = origOrder[curPos];
+            newOrder[slippedPosition] = switchGroupId;
+
+            curPos++;
+          }
+        }
+      }
+    });
+
+    me.body.emitter.emit('groupDragged', { groupId: id });
+  }
+};
+
+/**
+ * Handle selecting/deselecting an item when tapping it
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onSelectItem = function (event) {
+  if (!this.options.selectable) return;
+
+  var ctrlKey = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey);
+  var shiftKey = event.srcEvent && event.srcEvent.shiftKey;
+  if (ctrlKey || shiftKey) {
+    this._onMultiSelectItem(event);
+    return;
+  }
+
+  var oldSelection = this.getSelection();
+
+  var item = this.itemFromTarget(event);
+  var selection = item ? [item.id] : [];
+  this.setSelection(selection);
+
+  var newSelection = this.getSelection();
+
+  // emit a select event,
+  // except when old selection is empty and new selection is still empty
+  if (newSelection.length > 0 || oldSelection.length > 0) {
+    this.body.emitter.emit('select', {
+      items: newSelection,
+      event: event
+    });
+  }
+};
+
+/**
+ * Handle hovering an item
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onMouseOver = function (event) {
+  var item = this.itemFromTarget(event);
+  if (!item) return;
+
+  // Item we just left
+  var related = this.itemFromRelatedTarget(event);
+  if (item === related) {
+    // We haven't changed item, just element in the item
+    return;
+  }
+
+  var title = item.getTitle();
+  if (this.options.showTooltips && title) {
+    if (this.popup == null) {
+      this.popup = new Popup(this.body.dom.root, this.options.tooltip.overflowMethod || 'flip');
+    }
+
+    this.popup.setText(title);
+    var container = this.body.dom.centerContainer;
+    this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop);
+    this.popup.show();
+  } else {
+    // Hovering over item without a title, hide popup
+    // Needed instead of _just_ in _onMouseOut due to #2572
+    if (this.popup != null) {
+      this.popup.hide();
+    }
+  }
+
+  this.body.emitter.emit('itemover', {
+    item: item.id,
+    event: event
+  });
+};
+ItemSet.prototype._onMouseOut = function (event) {
+  var item = this.itemFromTarget(event);
+  if (!item) return;
+
+  // Item we are going to
+  var related = this.itemFromRelatedTarget(event);
+  if (item === related) {
+    // We aren't changing item, just element in the item
+    return;
+  }
+
+  if (this.popup != null) {
+    this.popup.hide();
+  }
+
+  this.body.emitter.emit('itemout', {
+    item: item.id,
+    event: event
+  });
+};
+ItemSet.prototype._onMouseMove = function (event) {
+  var item = this.itemFromTarget(event);
+  if (!item) return;
+
+  if (this.options.showTooltips && this.options.tooltip.followMouse) {
+    if (this.popup) {
+      if (!this.popup.hidden) {
+        var container = this.body.dom.centerContainer;
+        this.popup.setPosition(event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft, event.clientY - util.getAbsoluteTop(container) + container.offsetTop);
+        this.popup.show(); // Redraw
+      }
+    }
+  }
+};
+
+/**
+ * Handle mousewheel
+ * @param {Event}  event   The event
+ * @private
+ */
+ItemSet.prototype._onMouseWheel = function (event) {
+  if (this.touchParams.itemIsDragging) {
+    this._onDragEnd(event);
+  }
+};
+
+/**
+ * Handle updates of an item on double tap
+ * @param {vis.Item}  item   The item
+ * @private
+ */
+ItemSet.prototype._onUpdateItem = function (item) {
+  if (!this.options.selectable) return;
+  if (!this.options.editable.add) return;
+
+  var me = this;
+
+  if (item) {
+    // execute async handler to update the item (or cancel it)
+    var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset
+    this.options.onUpdate(itemData, function (itemData) {
+      if (itemData) {
+        me.itemsData.getDataSet().update(itemData);
+      }
+    });
+  }
+};
+
+/**
+ * Handle drop event of data on item
+ * Only called when `objectData.target === 'item'.
+ * @param {Event} event The event 
+ * @private
+ */
+ItemSet.prototype._onDropObjectOnItem = function (event) {
+  var item = this.itemFromTarget(event);
+  var objectData = JSON.parse(event.dataTransfer.getData("text"));
+  this.options.onDropObjectOnItem(objectData, item);
+};
+
+/**
+ * Handle creation of an item on double tap or drop of a drag event
+ * @param {Event} event   The event
+ * @private
+ */
+ItemSet.prototype._onAddItem = function (event) {
+  if (!this.options.selectable) return;
+  if (!this.options.editable.add) return;
+
+  var me = this;
+  var snap = this.options.snap || null;
+  var xAbs;
+  var x;
+  // add item
+  if (this.options.rtl) {
+    xAbs = util.getAbsoluteRight(this.dom.frame);
+    x = xAbs - event.center.x;
+  } else {
+    xAbs = util.getAbsoluteLeft(this.dom.frame);
+    x = event.center.x - xAbs;
+  }
+  // var xAbs = util.getAbsoluteLeft(this.dom.frame);
+  // var x = event.center.x - xAbs;
+  var start = this.body.util.toTime(x);
+  var scale = this.body.util.getScale();
+  var step = this.body.util.getStep();
+  var end;
+
+  var newItemData;
+  if (event.type == 'drop') {
+    newItemData = JSON.parse(event.dataTransfer.getData("text"));
+    newItemData.content = newItemData.content ? newItemData.content : 'new item';
+    newItemData.start = newItemData.start ? newItemData.start : snap ? snap(start, scale, step) : start;
+    newItemData.type = newItemData.type || 'box';
+    newItemData[this.itemsData._fieldId] = newItemData.id || util.randomUUID();
+
+    if (newItemData.type == 'range' && !newItemData.end) {
+      end = this.body.util.toTime(x + this.props.width / 5);
+      newItemData.end = snap ? snap(end, scale, step) : end;
+    }
+  } else {
+    newItemData = {
+      start: snap ? snap(start, scale, step) : start,
+      content: 'new item'
+    };
+    newItemData[this.itemsData._fieldId] = util.randomUUID();
+
+    // when default type is a range, add a default end date to the new item
+    if (this.options.type === 'range') {
+      end = this.body.util.toTime(x + this.props.width / 5);
+      newItemData.end = snap ? snap(end, scale, step) : end;
+    }
+  }
+
+  var group = this.groupFromTarget(event);
+  if (group) {
+    newItemData.group = group.groupId;
+  }
+
+  // execute async handler to customize (or cancel) adding an item
+  newItemData = this._cloneItemData(newItemData); // convert start and end to the correct type
+  this.options.onAdd(newItemData, function (item) {
+    if (item) {
+      me.itemsData.getDataSet().add(item);
+      if (event.type == 'drop') {
+        me.setSelection([item.id]);
+      }
+      // TODO: need to trigger a redraw?
+    }
+  });
+};
+
+/**
+ * Handle selecting/deselecting multiple items when holding an item
+ * @param {Event} event
+ * @private
+ */
+ItemSet.prototype._onMultiSelectItem = function (event) {
+  if (!this.options.selectable) return;
+
+  var item = this.itemFromTarget(event);
+
+  if (item) {
+    // multi select items (if allowed)
+
+    var selection = this.options.multiselect ? this.getSelection() // take current selection
+    : []; // deselect current selection
+
+    var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false;
+
+    if (shiftKey && this.options.multiselect) {
+      // select all items between the old selection and the tapped item
+      var itemGroup = this.itemsData.get(item.id).group;
+
+      // when filtering get the group of the last selected item
+      var lastSelectedGroup = undefined;
+      if (this.options.multiselectPerGroup) {
+        if (selection.length > 0) {
+          lastSelectedGroup = this.itemsData.get(selection[0]).group;
+        }
+      }
+
+      // determine the selection range
+      if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) {
+        selection.push(item.id);
+      }
+      var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions));
+
+      if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) {
+        // select all items within the selection range
+        selection = [];
+        for (var id in this.items) {
+          if (this.items.hasOwnProperty(id)) {
+            var _item = this.items[id];
+            var start = _item.data.start;
+            var end = _item.data.end !== undefined ? _item.data.end : start;
+
+            if (start >= range.min && end <= range.max && (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) && !(_item instanceof BackgroundItem)) {
+              selection.push(_item.id); // do not use id but item.id, id itself is stringified
+            }
+          }
+        }
+      }
+    } else {
+      // add/remove this item from the current selection
+      var index = selection.indexOf(item.id);
+      if (index == -1) {
+        // item is not yet selected -> select it
+        selection.push(item.id);
+      } else {
+        // item is already selected -> deselect it
+        selection.splice(index, 1);
+      }
+    }
+
+    this.setSelection(selection);
+
+    this.body.emitter.emit('select', {
+      items: this.getSelection(),
+      event: event
+    });
+  }
+};
+
+/**
+ * Calculate the time range of a list of items
+ * @param {Array.<Object>} itemsData
+ * @return {{min: Date, max: Date}} Returns the range of the provided items
+ * @private
+ */
+ItemSet._getItemRange = function (itemsData) {
+  var max = null;
+  var min = null;
+
+  itemsData.forEach(function (data) {
+    if (min == null || data.start < min) {
+      min = data.start;
+    }
+
+    if (data.end != undefined) {
+      if (max == null || data.end > max) {
+        max = data.end;
+      }
+    } else {
+      if (max == null || data.start > max) {
+        max = data.start;
+      }
+    }
+  });
+
+  return {
+    min: min,
+    max: max
+  };
+};
+
+/**
+ * Find an item from an element:
+ * searches for the attribute 'timeline-item' in the element's tree
+ * @param {HTMLElement} element
+ * @return {Item | null} item
+ */
+ItemSet.prototype.itemFromElement = function (element) {
+  var cur = element;
+  while (cur) {
+    if (cur.hasOwnProperty('timeline-item')) {
+      return cur['timeline-item'];
+    }
+    cur = cur.parentNode;
+  }
+
+  return null;
+};
+
+/**
+ * Find an item from an event target:
+ * searches for the attribute 'timeline-item' in the event target's element tree
+ * @param {Event} event
+ * @return {Item | null} item
+ */
+ItemSet.prototype.itemFromTarget = function (event) {
+  return this.itemFromElement(event.target);
+};
+
+/**
+ * Find an item from an event's related target:
+ * searches for the attribute 'timeline-item' in the related target's element tree
+ * @param {Event} event
+ * @return {Item | null} item
+ */
+ItemSet.prototype.itemFromRelatedTarget = function (event) {
+  return this.itemFromElement(event.relatedTarget);
+};
+
+/**
+ * Find the Group from an event target:
+ * searches for the attribute 'timeline-group' in the event target's element tree
+ * @param {Event} event
+ * @return {Group | null} group
+ */
+ItemSet.prototype.groupFromTarget = function (event) {
+  var clientY = event.center ? event.center.y : event.clientY;
+  var groupIds = this.groupIds;
+
+  if (groupIds.length <= 0 && this.groupsData) {
+    groupIds = this.groupsData.getIds({
+      order: this.options.groupOrder
+    });
+  }
+
+  for (var i = 0; i < groupIds.length; i++) {
+    var groupId = groupIds[i];
+    var group = this.groups[groupId];
+    var foreground = group.dom.foreground;
+    var top = util.getAbsoluteTop(foreground);
+    if (clientY > top && clientY < top + foreground.offsetHeight) {
+      return group;
+    }
+
+    if (this.options.orientation.item === 'top') {
+      if (i === this.groupIds.length - 1 && clientY > top) {
+        return group;
+      }
+    } else {
+      if (i === 0 && clientY < top + foreground.offset) {
+        return group;
+      }
+    }
+  }
+
+  return null;
+};
+
+/**
+ * Find the ItemSet from an event target:
+ * searches for the attribute 'timeline-itemset' in the event target's element tree
+ * @param {Event} event
+ * @return {ItemSet | null} item
+ */
+ItemSet.itemSetFromTarget = function (event) {
+  var target = event.target;
+  while (target) {
+    if (target.hasOwnProperty('timeline-itemset')) {
+      return target['timeline-itemset'];
+    }
+    target = target.parentNode;
+  }
+
+  return null;
+};
+
+/**
+ * Clone the data of an item, and "normalize" it: convert the start and end date
+ * to the type (Date, Moment, ...) configured in the DataSet. If not configured,
+ * start and end are converted to Date.
+ * @param {Object} itemData, typically `item.data`
+ * @param {string} [type]  Optional Date type. If not provided, the type from the DataSet is taken
+ * @return {Object} The cloned object
+ * @private
+ */
+ItemSet.prototype._cloneItemData = function (itemData, type) {
+  var clone = util.extend({}, itemData);
+
+  if (!type) {
+    // convert start and end date to the type (Date, Moment, ...) configured in the DataSet
+    type = this.itemsData.getDataSet()._options.type;
+  }
+
+  if (clone.start != undefined) {
+    clone.start = util.convert(clone.start, type && type.start || 'Date');
+  }
+  if (clone.end != undefined) {
+    clone.end = util.convert(clone.end, type && type.end || 'Date');
+  }
+
+  return clone;
+};
+
+module.exports = ItemSet;
+
+/***/ }),
+/* 100 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// Utility functions for ordering and stacking of items
+var EPSILON = 0.001; // used when checking collisions, to prevent round-off errors
+
+/**
+ * Order items by their start data
+ * @param {Item[]} items
+ */
+exports.orderByStart = function (items) {
+  items.sort(function (a, b) {
+    return a.data.start - b.data.start;
+  });
+};
+
+/**
+ * Order items by their end date. If they have no end date, their start date
+ * is used.
+ * @param {Item[]} items
+ */
+exports.orderByEnd = function (items) {
+  items.sort(function (a, b) {
+    var aTime = 'end' in a.data ? a.data.end : a.data.start,
+        bTime = 'end' in b.data ? b.data.end : b.data.start;
+
+    return aTime - bTime;
+  });
+};
+
+/**
+ * Adjust vertical positions of the items such that they don't overlap each
+ * other.
+ * @param {Item[]} items
+ *            All visible items
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ *            Margins between items and between items and the axis.
+ * @param {boolean} [force=false]
+ *            If true, all items will be repositioned. If false (default), only
+ *            items having a top===null will be re-stacked
+ */
+exports.stack = function (items, margin, force) {
+  if (force) {
+    // reset top position of all items
+    for (var i = 0; i < items.length; i++) {
+      items[i].top = null;
+    }
+  }
+
+  // calculate new, non-overlapping positions
+  for (var i = 0; i < items.length; i++) {
+    // eslint-disable-line no-redeclare
+    var item = items[i];
+    if (item.stack && item.top === null) {
+      // initialize top position
+      item.top = margin.axis;
+
+      do {
+        // TODO: optimize checking for overlap. when there is a gap without items,
+        //       you only need to check for items from the next item on, not from zero
+        var collidingItem = null;
+        for (var j = 0, jj = items.length; j < jj; j++) {
+          var other = items[j];
+          if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item, other.options.rtl)) {
+            collidingItem = other;
+            break;
+          }
+        }
+
+        if (collidingItem != null) {
+          // There is a collision. Reposition the items above the colliding element
+          item.top = collidingItem.top + collidingItem.height + margin.item.vertical;
+        }
+      } while (collidingItem);
+    }
+  }
+};
+
+/**
+ * Adjust vertical positions of the items within a single subgroup such that they 
+ * don't overlap each other.
+ * @param {Item[]} items
+ *            All items withina subgroup
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ *            Margins between items and between items and the axis.
+ * @param {subgroup} subgroup
+ *            The subgroup that is being stacked 
+ */
+exports.substack = function (items, margin, subgroup) {
+  for (var i = 0; i < items.length; i++) {
+    items[i].top = null;
+  }
+
+  // Set the initial height
+  var subgroupHeight = subgroup.height;
+
+  // calculate new, non-overlapping positions
+  for (i = 0; i < items.length; i++) {
+    var item = items[i];
+
+    if (item.stack && item.top === null) {
+      // initialize top position
+      item.top = item.baseTop; //margin.axis + item.baseTop;
+
+      do {
+        // TODO: optimize checking for overlap. when there is a gap without items,
+        //       you only need to check for items from the next item on, not from zero
+        var collidingItem = null;
+        for (var j = 0, jj = items.length; j < jj; j++) {
+          var other = items[j];
+          if (other.top !== null && other !== item /*&& other.stack*/ && exports.collision(item, other, margin.item, other.options.rtl)) {
+            collidingItem = other;
+            break;
+          }
+        }
+
+        if (collidingItem != null) {
+          // There is a collision. Reposition the items above the colliding element
+          item.top = collidingItem.top + collidingItem.height + margin.item.vertical; // + item.baseTop;
+        }
+
+        if (item.top + item.height > subgroupHeight) {
+          subgroupHeight = item.top + item.height;
+        }
+      } while (collidingItem);
+    }
+  }
+
+  // Set the new height
+  subgroup.height = subgroupHeight - subgroup.top + 0.5 * margin.item.vertical;
+};
+
+/**
+ * Adjust vertical positions of the items without stacking them
+ * @param {Item[]} items
+ *            All visible items
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ *            Margins between items and between items and the axis.
+ * @param {subgroups[]} subgroups
+ *            All subgroups
+ * @param {boolean} stackSubgroups
+ */
+exports.nostack = function (items, margin, subgroups, stackSubgroups) {
+  for (var i = 0; i < items.length; i++) {
+    if (items[i].data.subgroup == undefined) {
+      items[i].top = margin.item.vertical;
+    } else if (items[i].data.subgroup !== undefined && stackSubgroups) {
+      var newTop = 0;
+      for (var subgroup in subgroups) {
+        if (subgroups.hasOwnProperty(subgroup)) {
+          if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) {
+            newTop += subgroups[subgroup].height;
+            subgroups[items[i].data.subgroup].top = newTop;
+          }
+        }
+      }
+      items[i].top = newTop + 0.5 * margin.item.vertical;
+    }
+  }
+  if (!stackSubgroups) {
+    exports.stackSubgroups(items, margin, subgroups);
+  }
+};
+
+/**
+ * Adjust vertical positions of the subgroups such that they don't overlap each
+ * other.
+ * @param {Array.<vis.Item>} items
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin Margins between items and between items and the axis.
+ * @param {subgroups[]} subgroups
+ *            All subgroups
+ */
+exports.stackSubgroups = function (items, margin, subgroups) {
+  for (var subgroup in subgroups) {
+    if (subgroups.hasOwnProperty(subgroup)) {
+
+      subgroups[subgroup].top = 0;
+      do {
+        // TODO: optimize checking for overlap. when there is a gap without items,
+        //       you only need to check for items from the next item on, not from zero
+        var collidingItem = null;
+        for (var otherSubgroup in subgroups) {
+          if (subgroups[otherSubgroup].top !== null && otherSubgroup !== subgroup && subgroups[subgroup].index > subgroups[otherSubgroup].index && exports.collisionByTimes(subgroups[subgroup], subgroups[otherSubgroup])) {
+            collidingItem = subgroups[otherSubgroup];
+            break;
+          }
+        }
+
+        if (collidingItem != null) {
+          // There is a collision. Reposition the subgroups above the colliding element
+          subgroups[subgroup].top = collidingItem.top + collidingItem.height;
+        }
+      } while (collidingItem);
+    }
+  }
+  for (var i = 0; i < items.length; i++) {
+    if (items[i].data.subgroup !== undefined) {
+      items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;
+    }
+  }
+};
+
+/**
+ * Adjust vertical positions of the subgroups such that they don't overlap each
+ * other, then stacks the contents of each subgroup individually.
+ * @param {Item[]} subgroupItems
+ *            All the items in a subgroup
+ * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin
+ *            Margins between items and between items and the axis.
+ * @param {subgroups[]} subgroups
+ *            All subgroups 
+ */
+exports.stackSubgroupsWithInnerStack = function (subgroupItems, margin, subgroups) {
+  var doSubStack = false;
+
+  // Run subgroups in their order (if any)
+  var subgroupOrder = [];
+
+  for (var subgroup in subgroups) {
+    if (subgroups[subgroup].hasOwnProperty("index")) {
+      subgroupOrder[subgroups[subgroup].index] = subgroup;
+    } else {
+      subgroupOrder.push(subgroup);
+    }
+  }
+
+  for (var j = 0; j < subgroupOrder.length; j++) {
+    subgroup = subgroupOrder[j];
+    if (subgroups.hasOwnProperty(subgroup)) {
+
+      doSubStack = doSubStack || subgroups[subgroup].stack;
+      subgroups[subgroup].top = 0;
+
+      for (var otherSubgroup in subgroups) {
+        if (subgroups[otherSubgroup].visible && subgroups[subgroup].index > subgroups[otherSubgroup].index) {
+          subgroups[subgroup].top += subgroups[otherSubgroup].height;
+        }
+      }
+
+      var items = subgroupItems[subgroup];
+      for (var i = 0; i < items.length; i++) {
+        if (items[i].data.subgroup !== undefined) {
+          items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;
+
+          if (subgroups[subgroup].stack) {
+            items[i].baseTop = items[i].top;
+          }
+        }
+      }
+
+      if (doSubStack && subgroups[subgroup].stack) {
+        exports.substack(subgroupItems[subgroup], margin, subgroups[subgroup]);
+      }
+    }
+  }
+};
+
+/**
+ * Test if the two provided items collide
+ * The items must have parameters left, width, top, and height.
+ * @param {Item} a          The first item
+ * @param {Item} b          The second item
+ * @param {{horizontal: number, vertical: number}} margin
+ *                          An object containing a horizontal and vertical
+ *                          minimum required margin.
+ * @param {boolean} rtl
+ * @return {boolean}        true if a and b collide, else false
+ */
+exports.collision = function (a, b, margin, rtl) {
+  if (rtl) {
+    return a.right - margin.horizontal + EPSILON < b.right + b.width && a.right + a.width + margin.horizontal - EPSILON > b.right && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top;
+  } else {
+    return a.left - margin.horizontal + EPSILON < b.left + b.width && a.left + a.width + margin.horizontal - EPSILON > b.left && a.top - margin.vertical + EPSILON < b.top + b.height && a.top + a.height + margin.vertical - EPSILON > b.top;
+  }
+};
+
+/**
+ * Test if the two provided objects collide
+ * The objects must have parameters start, end, top, and height.
+ * @param {Object} a          The first Object
+ * @param {Object} b          The second Object
+ * @return {boolean}        true if a and b collide, else false
+ */
+exports.collisionByTimes = function (a, b) {
+  return a.start <= b.start && a.end >= b.start && a.top < b.top + b.height && a.top + a.height > b.top || b.start <= a.start && b.end >= a.start && b.top < a.top + a.height && b.top + b.height > a.top;
+};
+
+/***/ }),
+/* 101 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Item = __webpack_require__(38);
+
+/**
+ * @constructor BoxItem
+ * @extends Item
+ * @param {Object} data             Object containing parameters start
+ *                                  content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ *                                  Conversion functions from time to screen and vice versa
+ * @param {Object} [options]        Configuration options
+ *                                  // TODO: describe available options
+ */
+function BoxItem(data, conversion, options) {
+  this.props = {
+    dot: {
+      width: 0,
+      height: 0
+    },
+    line: {
+      width: 0,
+      height: 0
+    }
+  };
+  this.options = options;
+  // validate data
+  if (data) {
+    if (data.start == undefined) {
+      throw new Error('Property "start" missing in item ' + data);
+    }
+  }
+
+  Item.call(this, data, conversion, options);
+}
+
+BoxItem.prototype = new Item(null, null, null);
+
+/**
+ * Check whether this item is visible inside given range
+ * @param {{start: number, end: number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+BoxItem.prototype.isVisible = function (range) {
+  // determine visibility
+  var isVisible;
+  var align = this.options.align;
+  var widthInMs = this.width * range.getMillisecondsPerPixel();
+
+  if (align == 'right') {
+    isVisible = this.data.start.getTime() > range.start && this.data.start.getTime() - widthInMs < range.end;
+  } else if (align == 'left') {
+    isVisible = this.data.start.getTime() + widthInMs > range.start && this.data.start.getTime() < range.end;
+  } else {
+    // default or 'center'
+    isVisible = this.data.start.getTime() + widthInMs / 2 > range.start && this.data.start.getTime() - widthInMs / 2 < range.end;
+  }
+  return isVisible;
+};
+
+BoxItem.prototype._createDomElement = function () {
+  if (!this.dom) {
+    // create DOM
+    this.dom = {};
+
+    // create main box
+    this.dom.box = document.createElement('DIV');
+
+    // contents box (inside the background box). used for making margins
+    this.dom.content = document.createElement('DIV');
+    this.dom.content.className = 'vis-item-content';
+    this.dom.box.appendChild(this.dom.content);
+
+    // line to axis
+    this.dom.line = document.createElement('DIV');
+    this.dom.line.className = 'vis-line';
+
+    // dot on axis
+    this.dom.dot = document.createElement('DIV');
+    this.dom.dot.className = 'vis-dot';
+
+    // attach this item as attribute
+    this.dom.box['timeline-item'] = this;
+
+    this.dirty = true;
+  }
+};
+
+BoxItem.prototype._appendDomElement = function () {
+  if (!this.parent) {
+    throw new Error('Cannot redraw item: no parent attached');
+  }
+  if (!this.dom.box.parentNode) {
+    var foreground = this.parent.dom.foreground;
+    if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element');
+    foreground.appendChild(this.dom.box);
+  }
+  if (!this.dom.line.parentNode) {
+    var background = this.parent.dom.background;
+    if (!background) throw new Error('Cannot redraw item: parent has no background container element');
+    background.appendChild(this.dom.line);
+  }
+  if (!this.dom.dot.parentNode) {
+    var axis = this.parent.dom.axis;
+    if (!background) throw new Error('Cannot redraw item: parent has no axis container element');
+    axis.appendChild(this.dom.dot);
+  }
+  this.displayed = true;
+};
+
+BoxItem.prototype._updateDirtyDomComponents = function () {
+  // An item is marked dirty when:
+  // - the item is not yet rendered
+  // - the item's data is changed
+  // - the item is selected/deselected
+  if (this.dirty) {
+    this._updateContents(this.dom.content);
+    this._updateDataAttributes(this.dom.box);
+    this._updateStyle(this.dom.box);
+
+    var editable = this.editable.updateTime || this.editable.updateGroup;
+
+    // update class
+    var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly');
+    this.dom.box.className = 'vis-item vis-box' + className;
+    this.dom.line.className = 'vis-item vis-line' + className;
+    this.dom.dot.className = 'vis-item vis-dot' + className;
+  }
+};
+
+BoxItem.prototype._getDomComponentsSizes = function () {
+  return {
+    previous: {
+      right: this.dom.box.style.right,
+      left: this.dom.box.style.left
+    },
+    dot: {
+      height: this.dom.dot.offsetHeight,
+      width: this.dom.dot.offsetWidth
+    },
+    line: {
+      width: this.dom.line.offsetWidth
+    },
+    box: {
+      width: this.dom.box.offsetWidth,
+      height: this.dom.box.offsetHeight
+    }
+  };
+};
+
+BoxItem.prototype._updateDomComponentsSizes = function (sizes) {
+  if (this.options.rtl) {
+    this.dom.box.style.right = "0px";
+  } else {
+    this.dom.box.style.left = "0px";
+  }
+
+  // recalculate size
+  this.props.dot.height = sizes.dot.height;
+  this.props.dot.width = sizes.dot.width;
+  this.props.line.width = sizes.line.width;
+  this.width = sizes.box.width;
+  this.height = sizes.box.height;
+
+  // restore previous position
+  if (this.options.rtl) {
+    this.dom.box.style.right = sizes.previous.right;
+  } else {
+    this.dom.box.style.left = sizes.previous.left;
+  }
+
+  this.dirty = false;
+};
+
+BoxItem.prototype._repaintDomAdditionals = function () {
+  this._repaintOnItemUpdateTimeTooltip(this.dom.box);
+  this._repaintDragCenter();
+  this._repaintDeleteButton(this.dom.box);
+};
+
+/**
+ * Repaint the item
+ * @param {boolean} [returnQueue=false]  return the queue
+ * @return {boolean} the redraw queue if returnQueue=true
+ */
+BoxItem.prototype.redraw = function (returnQueue) {
+  var sizes;
+  var queue = [
+  // create item DOM
+  this._createDomElement.bind(this),
+
+  // append DOM to parent DOM
+  this._appendDomElement.bind(this),
+
+  // update dirty DOM
+  this._updateDirtyDomComponents.bind(this), function () {
+    if (this.dirty) {
+      sizes = this._getDomComponentsSizes();
+    }
+  }.bind(this), function () {
+    if (this.dirty) {
+      this._updateDomComponentsSizes.bind(this)(sizes);
+    }
+  }.bind(this),
+
+  // repaint DOM additionals
+  this._repaintDomAdditionals.bind(this)];
+
+  if (returnQueue) {
+    return queue;
+  } else {
+    var result;
+    queue.forEach(function (fn) {
+      result = fn();
+    });
+    return result;
+  }
+};
+
+/**
+ * Show the item in the DOM (when not already displayed). The items DOM will
+ * be created when needed.
+ */
+BoxItem.prototype.show = function () {
+  if (!this.displayed) {
+    this.redraw();
+  }
+};
+
+/**
+ * Hide the item from the DOM (when visible)
+ */
+BoxItem.prototype.hide = function () {
+  if (this.displayed) {
+    var dom = this.dom;
+
+    if (dom.box.parentNode) dom.box.parentNode.removeChild(dom.box);
+    if (dom.line.parentNode) dom.line.parentNode.removeChild(dom.line);
+    if (dom.dot.parentNode) dom.dot.parentNode.removeChild(dom.dot);
+
+    this.displayed = false;
+  }
+};
+
+/**
+ * Reposition the item horizontally
+ * @Override
+ */
+BoxItem.prototype.repositionX = function () {
+  var start = this.conversion.toScreen(this.data.start);
+  var align = this.options.align;
+
+  // calculate left position of the box
+  if (align == 'right') {
+    if (this.options.rtl) {
+      this.right = start - this.width;
+
+      // reposition box, line, and dot
+      this.dom.box.style.right = this.right + 'px';
+      this.dom.line.style.right = start - this.props.line.width + 'px';
+      this.dom.dot.style.right = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px';
+    } else {
+      this.left = start - this.width;
+
+      // reposition box, line, and dot
+      this.dom.box.style.left = this.left + 'px';
+      this.dom.line.style.left = start - this.props.line.width + 'px';
+      this.dom.dot.style.left = start - this.props.line.width / 2 - this.props.dot.width / 2 + 'px';
+    }
+  } else if (align == 'left') {
+    if (this.options.rtl) {
+      this.right = start;
+
+      // reposition box, line, and dot
+      this.dom.box.style.right = this.right + 'px';
+      this.dom.line.style.right = start + 'px';
+      this.dom.dot.style.right = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px';
+    } else {
+      this.left = start;
+
+      // reposition box, line, and dot
+      this.dom.box.style.left = this.left + 'px';
+      this.dom.line.style.left = start + 'px';
+      this.dom.dot.style.left = start + this.props.line.width / 2 - this.props.dot.width / 2 + 'px';
+    }
+  } else {
+    // default or 'center'
+    if (this.options.rtl) {
+      this.right = start - this.width / 2;
+
+      // reposition box, line, and dot
+      this.dom.box.style.right = this.right + 'px';
+      this.dom.line.style.right = start - this.props.line.width + 'px';
+      this.dom.dot.style.right = start - this.props.dot.width / 2 + 'px';
+    } else {
+      this.left = start - this.width / 2;
+
+      // reposition box, line, and dot
+      this.dom.box.style.left = this.left + 'px';
+      this.dom.line.style.left = start - this.props.line.width / 2 + 'px';
+      this.dom.dot.style.left = start - this.props.dot.width / 2 + 'px';
+    }
+  }
+};
+
+/**
+ * Reposition the item vertically
+ * @Override
+ */
+BoxItem.prototype.repositionY = function () {
+  var orientation = this.options.orientation.item;
+  var box = this.dom.box;
+  var line = this.dom.line;
+  var dot = this.dom.dot;
+
+  if (orientation == 'top') {
+    box.style.top = (this.top || 0) + 'px';
+
+    line.style.top = '0';
+    line.style.height = this.parent.top + this.top + 1 + 'px';
+    line.style.bottom = '';
+  } else {
+    // orientation 'bottom'
+    var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty
+    var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;
+
+    box.style.top = (this.parent.height - this.top - this.height || 0) + 'px';
+    line.style.top = itemSetHeight - lineHeight + 'px';
+    line.style.bottom = '0';
+  }
+
+  dot.style.top = -this.props.dot.height / 2 + 'px';
+};
+
+/**
+ * Return the width of the item left from its start date
+ * @return {number}
+ */
+BoxItem.prototype.getWidthLeft = function () {
+  return this.width / 2;
+};
+
+/**
+ * Return the width of the item right from its start date
+ * @return {number}
+ */
+BoxItem.prototype.getWidthRight = function () {
+  return this.width / 2;
+};
+
+module.exports = BoxItem;
+
+/***/ }),
+/* 102 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Item = __webpack_require__(38);
+
+/**
+ * @constructor PointItem
+ * @extends Item
+ * @param {Object} data             Object containing parameters start
+ *                                  content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ *                                  Conversion functions from time to screen and vice versa
+ * @param {Object} [options]        Configuration options
+ *                                  // TODO: describe available options
+ */
+function PointItem(data, conversion, options) {
+  this.props = {
+    dot: {
+      top: 0,
+      width: 0,
+      height: 0
+    },
+    content: {
+      height: 0,
+      marginLeft: 0,
+      marginRight: 0
+    }
+  };
+  this.options = options;
+  // validate data
+  if (data) {
+    if (data.start == undefined) {
+      throw new Error('Property "start" missing in item ' + data);
+    }
+  }
+
+  Item.call(this, data, conversion, options);
+}
+
+PointItem.prototype = new Item(null, null, null);
+
+/**
+ * Check whether this item is visible inside given range
+ * @param {{start: number, end: number}} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+PointItem.prototype.isVisible = function (range) {
+  // determine visibility
+  var widthInMs = this.width * range.getMillisecondsPerPixel();
+
+  return this.data.start.getTime() + widthInMs > range.start && this.data.start < range.end;
+};
+
+PointItem.prototype._createDomElement = function () {
+  if (!this.dom) {
+    // create DOM
+    this.dom = {};
+
+    // background box
+    this.dom.point = document.createElement('div');
+    // className is updated in redraw()
+
+    // contents box, right from the dot
+    this.dom.content = document.createElement('div');
+    this.dom.content.className = 'vis-item-content';
+    this.dom.point.appendChild(this.dom.content);
+
+    // dot at start
+    this.dom.dot = document.createElement('div');
+    this.dom.point.appendChild(this.dom.dot);
+
+    // attach this item as attribute
+    this.dom.point['timeline-item'] = this;
+
+    this.dirty = true;
+  }
+};
+
+PointItem.prototype._appendDomElement = function () {
+  if (!this.parent) {
+    throw new Error('Cannot redraw item: no parent attached');
+  }
+  if (!this.dom.point.parentNode) {
+    var foreground = this.parent.dom.foreground;
+    if (!foreground) {
+      throw new Error('Cannot redraw item: parent has no foreground container element');
+    }
+    foreground.appendChild(this.dom.point);
+  }
+  this.displayed = true;
+};
+
+PointItem.prototype._updateDirtyDomComponents = function () {
+  // An item is marked dirty when:
+  // - the item is not yet rendered
+  // - the item's data is changed
+  // - the item is selected/deselected
+  if (this.dirty) {
+    this._updateContents(this.dom.content);
+    this._updateDataAttributes(this.dom.point);
+    this._updateStyle(this.dom.point);
+
+    var editable = this.editable.updateTime || this.editable.updateGroup;
+    // update class
+    var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '') + (editable ? ' vis-editable' : ' vis-readonly');
+    this.dom.point.className = 'vis-item vis-point' + className;
+    this.dom.dot.className = 'vis-item vis-dot' + className;
+  }
+};
+
+PointItem.prototype._getDomComponentsSizes = function () {
+  return {
+    dot: {
+      width: this.dom.dot.offsetWidth,
+      height: this.dom.dot.offsetHeight
+    },
+    content: {
+      width: this.dom.content.offsetWidth,
+      height: this.dom.content.offsetHeight
+    },
+    point: {
+      width: this.dom.point.offsetWidth,
+      height: this.dom.point.offsetHeight
+    }
+  };
+};
+
+PointItem.prototype._updateDomComponentsSizes = function (sizes) {
+  // recalculate size of dot and contents
+  this.props.dot.width = sizes.dot.width;
+  this.props.dot.height = sizes.dot.height;
+  this.props.content.height = sizes.content.height;
+
+  // resize contents
+  if (this.options.rtl) {
+    this.dom.content.style.marginRight = 2 * this.props.dot.width + 'px';
+  } else {
+    this.dom.content.style.marginLeft = 2 * this.props.dot.width + 'px';
+  }
+  //this.dom.content.style.marginRight = ... + 'px'; // TODO: margin right
+
+  // recalculate size
+  this.width = sizes.point.width;
+  this.height = sizes.point.height;
+
+  // reposition the dot
+  this.dom.dot.style.top = (this.height - this.props.dot.height) / 2 + 'px';
+  if (this.options.rtl) {
+    this.dom.dot.style.right = this.props.dot.width / 2 + 'px';
+  } else {
+    this.dom.dot.style.left = this.props.dot.width / 2 + 'px';
+  }
+
+  this.dirty = false;
+};
+
+PointItem.prototype._repaintDomAdditionals = function () {
+  this._repaintOnItemUpdateTimeTooltip(this.dom.point);
+  this._repaintDragCenter();
+  this._repaintDeleteButton(this.dom.point);
+};
+
+/**
+ * Repaint the item
+ * @param {boolean} [returnQueue=false]  return the queue
+ * @return {boolean} the redraw queue if returnQueue=true
+ */
+PointItem.prototype.redraw = function (returnQueue) {
+  var sizes;
+  var queue = [
+  // create item DOM
+  this._createDomElement.bind(this),
+
+  // append DOM to parent DOM
+  this._appendDomElement.bind(this),
+
+  // update dirty DOM
+  this._updateDirtyDomComponents.bind(this), function () {
+    if (this.dirty) {
+      sizes = this._getDomComponentsSizes();
+    }
+  }.bind(this), function () {
+    if (this.dirty) {
+      this._updateDomComponentsSizes.bind(this)(sizes);
+    }
+  }.bind(this),
+
+  // repaint DOM additionals
+  this._repaintDomAdditionals.bind(this)];
+
+  if (returnQueue) {
+    return queue;
+  } else {
+    var result;
+    queue.forEach(function (fn) {
+      result = fn();
+    });
+    return result;
+  }
+};
+
+/**
+ * Show the item in the DOM (when not already visible). The items DOM will
+ * be created when needed.
+ */
+PointItem.prototype.show = function () {
+  if (!this.displayed) {
+    this.redraw();
+  }
+};
+
+/**
+ * Hide the item from the DOM (when visible)
+ */
+PointItem.prototype.hide = function () {
+  if (this.displayed) {
+    if (this.dom.point.parentNode) {
+      this.dom.point.parentNode.removeChild(this.dom.point);
+    }
+
+    this.displayed = false;
+  }
+};
+
+/**
+ * Reposition the item horizontally
+ * @Override
+ */
+PointItem.prototype.repositionX = function () {
+  var start = this.conversion.toScreen(this.data.start);
+
+  if (this.options.rtl) {
+    this.right = start - this.props.dot.width;
+
+    // reposition point
+    this.dom.point.style.right = this.right + 'px';
+  } else {
+    this.left = start - this.props.dot.width;
+
+    // reposition point
+    this.dom.point.style.left = this.left + 'px';
+  }
+};
+
+/**
+ * Reposition the item vertically
+ * @Override
+ */
+PointItem.prototype.repositionY = function () {
+  var orientation = this.options.orientation.item;
+  var point = this.dom.point;
+  if (orientation == 'top') {
+    point.style.top = this.top + 'px';
+  } else {
+    point.style.top = this.parent.height - this.top - this.height + 'px';
+  }
+};
+
+/**
+ * Return the width of the item left from its start date
+ * @return {number}
+ */
+PointItem.prototype.getWidthLeft = function () {
+  return this.props.dot.width;
+};
+
+/**
+ * Return the width of the item right from  its start date
+ * @return {number}
+ */
+PointItem.prototype.getWidthRight = function () {
+  return this.props.dot.width;
+};
+
+module.exports = PointItem;
+
+/***/ }),
+/* 103 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Item = __webpack_require__(38);
+var BackgroundGroup = __webpack_require__(69);
+var RangeItem = __webpack_require__(70);
+
+/**
+ * @constructor BackgroundItem
+ * @extends Item
+ * @param {Object} data             Object containing parameters start, end
+ *                                  content, className.
+ * @param {{toScreen: function, toTime: function}} conversion
+ *                                  Conversion functions from time to screen and vice versa
+ * @param {Object} [options]        Configuration options
+ *                                  // TODO: describe options
+ * // TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation
+ */
+function BackgroundItem(data, conversion, options) {
+  this.props = {
+    content: {
+      width: 0
+    }
+  };
+  this.overflow = false; // if contents can overflow (css styling), this flag is set to true
+
+  // validate data
+  if (data) {
+    if (data.start == undefined) {
+      throw new Error('Property "start" missing in item ' + data.id);
+    }
+    if (data.end == undefined) {
+      throw new Error('Property "end" missing in item ' + data.id);
+    }
+  }
+
+  Item.call(this, data, conversion, options);
+}
+
+BackgroundItem.prototype = new Item(null, null, null);
+
+BackgroundItem.prototype.baseClassName = 'vis-item vis-background';
+
+BackgroundItem.prototype.stack = false;
+
+/**
+ * Check whether this item is visible inside given range
+ * @param {vis.Range} range with a timestamp for start and end
+ * @returns {boolean} True if visible
+ */
+BackgroundItem.prototype.isVisible = function (range) {
+  // determine visibility
+  return this.data.start < range.end && this.data.end > range.start;
+};
+
+BackgroundItem.prototype._createDomElement = function () {
+  if (!this.dom) {
+    // create DOM
+    this.dom = {};
+
+    // background box
+    this.dom.box = document.createElement('div');
+    // className is updated in redraw()
+
+    // frame box (to prevent the item contents from overflowing
+    this.dom.frame = document.createElement('div');
+    this.dom.frame.className = 'vis-item-overflow';
+    this.dom.box.appendChild(this.dom.frame);
+
+    // contents box
+    this.dom.content = document.createElement('div');
+    this.dom.content.className = 'vis-item-content';
+    this.dom.frame.appendChild(this.dom.content);
+
+    // Note: we do NOT attach this item as attribute to the DOM,
+    //       such that background items cannot be selected
+    //this.dom.box['timeline-item'] = this;
+
+    this.dirty = true;
+  }
+};
+
+BackgroundItem.prototype._appendDomElement = function () {
+  if (!this.parent) {
+    throw new Error('Cannot redraw item: no parent attached');
+  }
+  if (!this.dom.box.parentNode) {
+    var background = this.parent.dom.background;
+    if (!background) {
+      throw new Error('Cannot redraw item: parent has no background container element');
+    }
+    background.appendChild(this.dom.box);
+  }
+  this.displayed = true;
+};
+
+BackgroundItem.prototype._updateDirtyDomComponents = function () {
+  // update dirty DOM. An item is marked dirty when:
+  // - the item is not yet rendered
+  // - the item's data is changed
+  // - the item is selected/deselected
+  if (this.dirty) {
+    this._updateContents(this.dom.content);
+    this._updateDataAttributes(this.dom.content);
+    this._updateStyle(this.dom.box);
+
+    // update class
+    var className = (this.data.className ? ' ' + this.data.className : '') + (this.selected ? ' vis-selected' : '');
+    this.dom.box.className = this.baseClassName + className;
+  }
+};
+
+BackgroundItem.prototype._getDomComponentsSizes = function () {
+  // determine from css whether this box has overflow
+  this.overflow = window.getComputedStyle(this.dom.content).overflow !== 'hidden';
+  return {
+    content: {
+      width: this.dom.content.offsetWidth
+    }
+  };
+};
+
+BackgroundItem.prototype._updateDomComponentsSizes = function (sizes) {
+  // recalculate size
+  this.props.content.width = sizes.content.width;
+  this.height = 0; // set height zero, so this item will be ignored when stacking items
+
+  this.dirty = false;
+};
+
+BackgroundItem.prototype._repaintDomAdditionals = function () {};
+
+/**
+ * Repaint the item
+ * @param {boolean} [returnQueue=false]  return the queue
+ * @return {boolean} the redraw result or the redraw queue if returnQueue=true
+ */
+BackgroundItem.prototype.redraw = function (returnQueue) {
+  var sizes;
+  var queue = [
+  // create item DOM
+  this._createDomElement.bind(this),
+
+  // append DOM to parent DOM
+  this._appendDomElement.bind(this), this._updateDirtyDomComponents.bind(this), function () {
+    if (this.dirty) {
+      sizes = this._getDomComponentsSizes.bind(this)();
+    }
+  }.bind(this), function () {
+    if (this.dirty) {
+      this._updateDomComponentsSizes.bind(this)(sizes);
+    }
+  }.bind(this),
+
+  // repaint DOM additionals
+  this._repaintDomAdditionals.bind(this)];
+
+  if (returnQueue) {
+    return queue;
+  } else {
+    var result;
+    queue.forEach(function (fn) {
+      result = fn();
+    });
+    return result;
+  }
+};
+
+/**
+ * Show the item in the DOM (when not already visible). The items DOM will
+ * be created when needed.
+ */
+BackgroundItem.prototype.show = RangeItem.prototype.show;
+
+/**
+ * Hide the item from the DOM (when visible)
+ * @return {Boolean} changed
+ */
+BackgroundItem.prototype.hide = RangeItem.prototype.hide;
+
+/**
+ * Reposition the item horizontally
+ * @Override
+ */
+BackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX;
+
+/**
+ * Reposition the item vertically
+ * @Override
+ */
+BackgroundItem.prototype.repositionY = function (margin) {
+  // eslint-disable-line no-unused-vars
+  var height;
+  var orientation = this.options.orientation.item;
+
+  // special positioning for subgroups
+  if (this.data.subgroup !== undefined) {
+    // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset
+    var itemSubgroup = this.data.subgroup;
+
+    this.dom.box.style.height = this.parent.subgroups[itemSubgroup].height + 'px';
+
+    if (orientation == 'top') {
+      this.dom.box.style.top = this.parent.top + this.parent.subgroups[itemSubgroup].top + 'px';
+    } else {
+      this.dom.box.style.top = this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height + 'px';
+    }
+    this.dom.box.style.bottom = '';
+  }
+  // and in the case of no subgroups:
+  else {
+      // we want backgrounds with groups to only show in groups.
+      if (this.parent instanceof BackgroundGroup) {
+        // if the item is not in a group:
+        height = Math.max(this.parent.height, this.parent.itemSet.body.domProps.center.height, this.parent.itemSet.body.domProps.centerContainer.height);
+        this.dom.box.style.bottom = orientation == 'bottom' ? '0' : '';
+        this.dom.box.style.top = orientation == 'top' ? '0' : '';
+      } else {
+        height = this.parent.height;
+        // same alignment for items when orientation is top or bottom
+        this.dom.box.style.top = this.parent.top + 'px';
+        this.dom.box.style.bottom = '';
+      }
+    }
+  this.dom.box.style.height = height + 'px';
+};
+
+module.exports = BackgroundItem;
+
+/***/ }),
+/* 104 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Popup is a class to create a popup window with some text
+ */
+var Popup = function () {
+  /**
+   * @param {Element} container       The container object.
+   * @param {string}  overflowMethod  How the popup should act to overflowing ('flip' or 'cap')
+   */
+  function Popup(container, overflowMethod) {
+    (0, _classCallCheck3['default'])(this, Popup);
+
+    this.container = container;
+    this.overflowMethod = overflowMethod || 'cap';
+
+    this.x = 0;
+    this.y = 0;
+    this.padding = 5;
+    this.hidden = false;
+
+    // create the frame
+    this.frame = document.createElement('div');
+    this.frame.className = 'vis-tooltip';
+    this.container.appendChild(this.frame);
+  }
+
+  /**
+   * @param {number} x   Horizontal position of the popup window
+   * @param {number} y   Vertical position of the popup window
+   */
+
+
+  (0, _createClass3['default'])(Popup, [{
+    key: 'setPosition',
+    value: function setPosition(x, y) {
+      this.x = parseInt(x);
+      this.y = parseInt(y);
+    }
+
+    /**
+     * Set the content for the popup window. This can be HTML code or text.
+     * @param {string | Element} content
+     */
+
+  }, {
+    key: 'setText',
+    value: function setText(content) {
+      if (content instanceof Element) {
+        this.frame.innerHTML = '';
+        this.frame.appendChild(content);
+      } else {
+        this.frame.innerHTML = content; // string containing text or HTML
+      }
+    }
+
+    /**
+     * Show the popup window
+     * @param {boolean} [doShow]    Show or hide the window
+     */
+
+  }, {
+    key: 'show',
+    value: function show(doShow) {
+      if (doShow === undefined) {
+        doShow = true;
+      }
+
+      if (doShow === true) {
+        var height = this.frame.clientHeight;
+        var width = this.frame.clientWidth;
+        var maxHeight = this.frame.parentNode.clientHeight;
+        var maxWidth = this.frame.parentNode.clientWidth;
+
+        var left = 0,
+            top = 0;
+
+        if (this.overflowMethod == 'flip') {
+          var isLeft = false,
+              isTop = true; // Where around the position it's located
+
+          if (this.y - height < this.padding) {
+            isTop = false;
+          }
+
+          if (this.x + width > maxWidth - this.padding) {
+            isLeft = true;
+          }
+
+          if (isLeft) {
+            left = this.x - width;
+          } else {
+            left = this.x;
+          }
+
+          if (isTop) {
+            top = this.y - height;
+          } else {
+            top = this.y;
+          }
+        } else {
+          top = this.y - height;
+          if (top + height + this.padding > maxHeight) {
+            top = maxHeight - height - this.padding;
+          }
+          if (top < this.padding) {
+            top = this.padding;
+          }
+
+          left = this.x;
+          if (left + width + this.padding > maxWidth) {
+            left = maxWidth - width - this.padding;
+          }
+          if (left < this.padding) {
+            left = this.padding;
+          }
+        }
+
+        this.frame.style.left = left + "px";
+        this.frame.style.top = top + "px";
+        this.frame.style.visibility = "visible";
+        this.hidden = false;
+      } else {
+        this.hide();
+      }
+    }
+
+    /**
+     * Hide the popup window
+     */
+
+  }, {
+    key: 'hide',
+    value: function hide() {
+      this.hidden = true;
+      this.frame.style.left = "0";
+      this.frame.style.top = "0";
+      this.frame.style.visibility = "hidden";
+    }
+
+    /**
+     * Remove the popup window
+     */
+
+  }, {
+    key: 'destroy',
+    value: function destroy() {
+      this.frame.parentNode.removeChild(this.frame); // Remove element from DOM
+    }
+  }]);
+  return Popup;
+}();
+
+exports['default'] = Popup;
+
+/***/ }),
+/* 105 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * This object contains all possible options. It will check if the types are correct, if required if the option is one
+ * of the allowed values.
+ *
+ * __any__ means that the name of the property does not matter.
+ * __type__ is a required field for all objects and contains the allowed types of all objects
+ */
+var string = 'string';
+var bool = 'boolean';
+var number = 'number';
+var array = 'array';
+var date = 'date';
+var object = 'object'; // should only be in a __type__ property
+var dom = 'dom';
+var moment = 'moment';
+var any = 'any';
+
+var allOptions = {
+  configure: {
+    enabled: { 'boolean': bool },
+    filter: { 'boolean': bool, 'function': 'function' },
+    container: { dom: dom },
+    __type__: { object: object, 'boolean': bool, 'function': 'function' }
+  },
+
+  //globals :
+  align: { string: string },
+  rtl: { 'boolean': bool, 'undefined': 'undefined' },
+  rollingMode: {
+    follow: { 'boolean': bool },
+    offset: { number: number, 'undefined': 'undefined' },
+    __type__: { object: object }
+  },
+  verticalScroll: { 'boolean': bool, 'undefined': 'undefined' },
+  horizontalScroll: { 'boolean': bool, 'undefined': 'undefined' },
+  autoResize: { 'boolean': bool },
+  throttleRedraw: { number: number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511
+  clickToUse: { 'boolean': bool },
+  dataAttributes: { string: string, array: array },
+  editable: {
+    add: { 'boolean': bool, 'undefined': 'undefined' },
+    remove: { 'boolean': bool, 'undefined': 'undefined' },
+    updateGroup: { 'boolean': bool, 'undefined': 'undefined' },
+    updateTime: { 'boolean': bool, 'undefined': 'undefined' },
+    overrideItems: { 'boolean': bool, 'undefined': 'undefined' },
+    __type__: { 'boolean': bool, object: object }
+  },
+  end: { number: number, date: date, string: string, moment: moment },
+  format: {
+    minorLabels: {
+      millisecond: { string: string, 'undefined': 'undefined' },
+      second: { string: string, 'undefined': 'undefined' },
+      minute: { string: string, 'undefined': 'undefined' },
+      hour: { string: string, 'undefined': 'undefined' },
+      weekday: { string: string, 'undefined': 'undefined' },
+      day: { string: string, 'undefined': 'undefined' },
+      week: { string: string, 'undefined': 'undefined' },
+      month: { string: string, 'undefined': 'undefined' },
+      year: { string: string, 'undefined': 'undefined' },
+      __type__: { object: object, 'function': 'function' }
+    },
+    majorLabels: {
+      millisecond: { string: string, 'undefined': 'undefined' },
+      second: { string: string, 'undefined': 'undefined' },
+      minute: { string: string, 'undefined': 'undefined' },
+      hour: { string: string, 'undefined': 'undefined' },
+      weekday: { string: string, 'undefined': 'undefined' },
+      day: { string: string, 'undefined': 'undefined' },
+      week: { string: string, 'undefined': 'undefined' },
+      month: { string: string, 'undefined': 'undefined' },
+      year: { string: string, 'undefined': 'undefined' },
+      __type__: { object: object, 'function': 'function' }
+    },
+    __type__: { object: object }
+  },
+  moment: { 'function': 'function' },
+  groupOrder: { string: string, 'function': 'function' },
+  groupEditable: {
+    add: { 'boolean': bool, 'undefined': 'undefined' },
+    remove: { 'boolean': bool, 'undefined': 'undefined' },
+    order: { 'boolean': bool, 'undefined': 'undefined' },
+    __type__: { 'boolean': bool, object: object }
+  },
+  groupOrderSwap: { 'function': 'function' },
+  height: { string: string, number: number },
+  hiddenDates: {
+    start: { date: date, number: number, string: string, moment: moment },
+    end: { date: date, number: number, string: string, moment: moment },
+    repeat: { string: string },
+    __type__: { object: object, array: array }
+  },
+  itemsAlwaysDraggable: {
+    item: { 'boolean': bool, 'undefined': 'undefined' },
+    range: { 'boolean': bool, 'undefined': 'undefined' },
+    __type__: { 'boolean': bool, object: object }
+  },
+  limitSize: { 'boolean': bool },
+  locale: { string: string },
+  locales: {
+    __any__: { any: any },
+    __type__: { object: object }
+  },
+  margin: {
+    axis: { number: number },
+    item: {
+      horizontal: { number: number, 'undefined': 'undefined' },
+      vertical: { number: number, 'undefined': 'undefined' },
+      __type__: { object: object, number: number }
+    },
+    __type__: { object: object, number: number }
+  },
+  max: { date: date, number: number, string: string, moment: moment },
+  maxHeight: { number: number, string: string },
+  maxMinorChars: { number: number },
+  min: { date: date, number: number, string: string, moment: moment },
+  minHeight: { number: number, string: string },
+  moveable: { 'boolean': bool },
+  multiselect: { 'boolean': bool },
+  multiselectPerGroup: { 'boolean': bool },
+  onAdd: { 'function': 'function' },
+  onDropObjectOnItem: { 'function': 'function' },
+  onUpdate: { 'function': 'function' },
+  onMove: { 'function': 'function' },
+  onMoving: { 'function': 'function' },
+  onRemove: { 'function': 'function' },
+  onAddGroup: { 'function': 'function' },
+  onMoveGroup: { 'function': 'function' },
+  onRemoveGroup: { 'function': 'function' },
+  onInitialDrawComplete: { 'function': 'function' },
+  order: { 'function': 'function' },
+  orientation: {
+    axis: { string: string, 'undefined': 'undefined' },
+    item: { string: string, 'undefined': 'undefined' },
+    __type__: { string: string, object: object }
+  },
+  selectable: { 'boolean': bool },
+  showCurrentTime: { 'boolean': bool },
+  showMajorLabels: { 'boolean': bool },
+  showMinorLabels: { 'boolean': bool },
+  stack: { 'boolean': bool },
+  stackSubgroups: { 'boolean': bool },
+  snap: { 'function': 'function', 'null': 'null' },
+  start: { date: date, number: number, string: string, moment: moment },
+  template: { 'function': 'function' },
+  groupTemplate: { 'function': 'function' },
+  visibleFrameTemplate: { string: string, 'function': 'function' },
+  showTooltips: { 'boolean': bool },
+  tooltip: {
+    followMouse: { 'boolean': bool },
+    overflowMethod: { 'string': ['cap', 'flip'] },
+    __type__: { object: object }
+  },
+  tooltipOnItemUpdateTime: {
+    template: { 'function': 'function' },
+    __type__: { 'boolean': bool, object: object }
+  },
+  timeAxis: {
+    scale: { string: string, 'undefined': 'undefined' },
+    step: { number: number, 'undefined': 'undefined' },
+    __type__: { object: object }
+  },
+  type: { string: string },
+  width: { string: string, number: number },
+  zoomable: { 'boolean': bool },
+  zoomKey: { string: ['ctrlKey', 'altKey', 'metaKey', ''] },
+  zoomMax: { number: number },
+  zoomMin: { number: number },
+
+  __type__: { object: object }
+};
+
+var configureOptions = {
+  global: {
+    align: ['center', 'left', 'right'],
+    direction: false,
+    autoResize: true,
+    clickToUse: false,
+    // dataAttributes: ['all'], // FIXME: can be 'all' or string[]
+    editable: {
+      add: false,
+      remove: false,
+      updateGroup: false,
+      updateTime: false
+    },
+    end: '',
+    format: {
+      minorLabels: {
+        millisecond: 'SSS',
+        second: 's',
+        minute: 'HH:mm',
+        hour: 'HH:mm',
+        weekday: 'ddd D',
+        day: 'D',
+        week: 'w',
+        month: 'MMM',
+        year: 'YYYY'
+      },
+      majorLabels: {
+        millisecond: 'HH:mm:ss',
+        second: 'D MMMM HH:mm',
+        minute: 'ddd D MMMM',
+        hour: 'ddd D MMMM',
+        weekday: 'MMMM YYYY',
+        day: 'MMMM YYYY',
+        week: 'MMMM YYYY',
+        month: 'YYYY',
+        year: ''
+      }
+    },
+
+    //groupOrder: {string, 'function': 'function'},
+    groupsDraggable: false,
+    height: '',
+    //hiddenDates: {object, array},
+    locale: '',
+    margin: {
+      axis: [20, 0, 100, 1],
+      item: {
+        horizontal: [10, 0, 100, 1],
+        vertical: [10, 0, 100, 1]
+      }
+    },
+    max: '',
+    maxHeight: '',
+    maxMinorChars: [7, 0, 20, 1],
+    min: '',
+    minHeight: '',
+    moveable: false,
+    multiselect: false,
+    multiselectPerGroup: false,
+    //onAdd: {'function': 'function'},
+    //onUpdate: {'function': 'function'},
+    //onMove: {'function': 'function'},
+    //onMoving: {'function': 'function'},
+    //onRename: {'function': 'function'},
+    //order: {'function': 'function'},
+    orientation: {
+      axis: ['both', 'bottom', 'top'],
+      item: ['bottom', 'top']
+    },
+    selectable: true,
+    showCurrentTime: false,
+    showMajorLabels: true,
+    showMinorLabels: true,
+    stack: true,
+    stackSubgroups: true,
+    //snap: {'function': 'function', nada},
+    start: '',
+    //template: {'function': 'function'},
+    //timeAxis: {
+    //  scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'week', 'month', 'year'],
+    //  step: [1, 1, 10, 1]
+    //},
+    showTooltips: true,
+    tooltip: {
+      followMouse: false,
+      overflowMethod: 'flip'
+    },
+    tooltipOnItemUpdateTime: false,
+    type: ['box', 'point', 'range', 'background'],
+    width: '100%',
+    zoomable: true,
+    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],
+    zoomMax: [315360000000000, 10, 315360000000000, 1],
+    zoomMin: [10, 10, 315360000000000, 1]
+  }
+};
+
+exports.allOptions = allOptions;
+exports.configureOptions = configureOptions;
+
+/***/ }),
+/* 106 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DOMutil = __webpack_require__(14);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Component = __webpack_require__(16);
+var DataAxis = __webpack_require__(107);
+var GraphGroup = __webpack_require__(109);
+var Legend = __webpack_require__(112);
+var Bars = __webpack_require__(110);
+var Lines = __webpack_require__(111);
+var Points = __webpack_require__(72);
+
+var UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items
+
+/**
+ * This is the constructor of the LineGraph. It requires a Timeline body and options.
+ *
+ * @param {vis.Timeline.body} body
+ * @param {Object} options
+ * @constructor LineGraph
+ * @extends Component
+ */
+function LineGraph(body, options) {
+  this.id = util.randomUUID();
+  this.body = body;
+
+  this.defaultOptions = {
+    yAxisOrientation: 'left',
+    defaultGroup: 'default',
+    sort: true,
+    sampling: true,
+    stack: false,
+    graphHeight: '400px',
+    shaded: {
+      enabled: false,
+      orientation: 'bottom' // top, bottom, zero
+    },
+    style: 'line', // line, bar
+    barChart: {
+      width: 50,
+      sideBySide: false,
+      align: 'center' // left, center, right
+    },
+    interpolation: {
+      enabled: true,
+      parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)
+      alpha: 0.5
+    },
+    drawPoints: {
+      enabled: true,
+      size: 6,
+      style: 'square' // square, circle
+    },
+    dataAxis: {}, //Defaults are done on DataAxis level
+    legend: {}, //Defaults are done on Legend level
+    groups: {
+      visibility: {}
+    }
+  };
+
+  // options is shared by this lineGraph and all its items
+  this.options = util.extend({}, this.defaultOptions);
+  this.dom = {};
+  this.props = {};
+  this.hammer = null;
+  this.groups = {};
+  this.abortedGraphUpdate = false;
+  this.updateSVGheight = false;
+  this.updateSVGheightOnResize = false;
+  this.forceGraphUpdate = true;
+
+  var me = this;
+  this.itemsData = null; // DataSet
+  this.groupsData = null; // DataSet
+
+  // listeners for the DataSet of the items
+  this.itemListeners = {
+    'add': function add(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onAdd(params.items);
+    },
+    'update': function update(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onUpdate(params.items);
+    },
+    'remove': function remove(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onRemove(params.items);
+    }
+  };
+
+  // listeners for the DataSet of the groups
+  this.groupListeners = {
+    'add': function add(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onAddGroups(params.items);
+    },
+    'update': function update(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onUpdateGroups(params.items);
+    },
+    'remove': function remove(event, params, senderId) {
+      // eslint-disable-line no-unused-vars
+      me._onRemoveGroups(params.items);
+    }
+  };
+
+  this.items = {}; // object with an Item for every data item
+  this.selection = []; // list with the ids of all selected nodes
+  this.lastStart = this.body.range.start;
+  this.touchParams = {}; // stores properties while dragging
+
+  this.svgElements = {};
+  this.setOptions(options);
+  this.groupsUsingDefaultStyles = [0];
+  this.body.emitter.on('rangechanged', function () {
+    me.lastStart = me.body.range.start;
+    me.svg.style.left = util.option.asSize(-me.props.width);
+
+    me.forceGraphUpdate = true;
+    //Is this local redraw necessary? (Core also does a change event!)
+    me.redraw.call(me);
+  });
+
+  // create the HTML DOM
+  this._create();
+  this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups };
+}
+
+LineGraph.prototype = new Component();
+
+/**
+ * Create the HTML DOM for the ItemSet
+ */
+LineGraph.prototype._create = function () {
+  var frame = document.createElement('div');
+  frame.className = 'vis-line-graph';
+  this.dom.frame = frame;
+
+  // create svg element for graph drawing.
+  this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+  this.svg.style.position = 'relative';
+  this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';
+  this.svg.style.display = 'block';
+  frame.appendChild(this.svg);
+
+  // data axis
+  this.options.dataAxis.orientation = 'left';
+  this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);
+
+  this.options.dataAxis.orientation = 'right';
+  this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);
+  delete this.options.dataAxis.orientation;
+
+  // legends
+  this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups);
+  this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups);
+
+  this.show();
+};
+
+/**
+ * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.
+ * @param {object} options
+ */
+LineGraph.prototype.setOptions = function (options) {
+  if (options) {
+    var fields = ['sampling', 'defaultGroup', 'stack', 'height', 'graphHeight', 'yAxisOrientation', 'style', 'barChart', 'dataAxis', 'sort', 'groups'];
+    if (options.graphHeight === undefined && options.height !== undefined) {
+      this.updateSVGheight = true;
+      this.updateSVGheightOnResize = true;
+    } else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) {
+      if (parseInt((options.graphHeight + '').replace("px", '')) < this.body.domProps.centerContainer.height) {
+        this.updateSVGheight = true;
+      }
+    }
+    util.selectiveDeepExtend(fields, this.options, options);
+    util.mergeOptions(this.options, options, 'interpolation');
+    util.mergeOptions(this.options, options, 'drawPoints');
+    util.mergeOptions(this.options, options, 'shaded');
+    util.mergeOptions(this.options, options, 'legend');
+
+    if (options.interpolation) {
+      if ((0, _typeof3['default'])(options.interpolation) == 'object') {
+        if (options.interpolation.parametrization) {
+          if (options.interpolation.parametrization == 'uniform') {
+            this.options.interpolation.alpha = 0;
+          } else if (options.interpolation.parametrization == 'chordal') {
+            this.options.interpolation.alpha = 1.0;
+          } else {
+            this.options.interpolation.parametrization = 'centripetal';
+            this.options.interpolation.alpha = 0.5;
+          }
+        }
+      }
+    }
+
+    if (this.yAxisLeft) {
+      if (options.dataAxis !== undefined) {
+        this.yAxisLeft.setOptions(this.options.dataAxis);
+        this.yAxisRight.setOptions(this.options.dataAxis);
+      }
+    }
+
+    if (this.legendLeft) {
+      if (options.legend !== undefined) {
+        this.legendLeft.setOptions(this.options.legend);
+        this.legendRight.setOptions(this.options.legend);
+      }
+    }
+
+    if (this.groups.hasOwnProperty(UNGROUPED)) {
+      this.groups[UNGROUPED].setOptions(options);
+    }
+  }
+
+  // this is used to redraw the graph if the visibility of the groups is changed.
+  if (this.dom.frame) {
+    //not on initial run?
+    this.forceGraphUpdate = true;
+    this.body.emitter.emit("_change", { queue: true });
+  }
+};
+
+/**
+ * Hide the component from the DOM
+ */
+LineGraph.prototype.hide = function () {
+  // remove the frame containing the items
+  if (this.dom.frame.parentNode) {
+    this.dom.frame.parentNode.removeChild(this.dom.frame);
+  }
+};
+
+/**
+ * Show the component in the DOM (when not already visible).
+ */
+LineGraph.prototype.show = function () {
+  // show frame containing the items
+  if (!this.dom.frame.parentNode) {
+    this.body.dom.center.appendChild(this.dom.frame);
+  }
+};
+
+/**
+ * Set items
+ * @param {vis.DataSet | null} items
+ */
+LineGraph.prototype.setItems = function (items) {
+  var me = this,
+      ids,
+      oldItemsData = this.itemsData;
+
+  // replace the dataset
+  if (!items) {
+    this.itemsData = null;
+  } else if (items instanceof DataSet || items instanceof DataView) {
+    this.itemsData = items;
+  } else {
+    throw new TypeError('Data must be an instance of DataSet or DataView');
+  }
+
+  if (oldItemsData) {
+    // unsubscribe from old dataset
+    util.forEach(this.itemListeners, function (callback, event) {
+      oldItemsData.off(event, callback);
+    });
+
+    // remove all drawn items
+    ids = oldItemsData.getIds();
+    this._onRemove(ids);
+  }
+
+  if (this.itemsData) {
+    // subscribe to new dataset
+    var id = this.id;
+    util.forEach(this.itemListeners, function (callback, event) {
+      me.itemsData.on(event, callback, id);
+    });
+
+    // add all new items
+    ids = this.itemsData.getIds();
+    this._onAdd(ids);
+  }
+};
+
+/**
+ * Set groups
+ * @param {vis.DataSet} groups
+ */
+LineGraph.prototype.setGroups = function (groups) {
+  var me = this;
+  var ids;
+
+  // unsubscribe from current dataset
+  if (this.groupsData) {
+    util.forEach(this.groupListeners, function (callback, event) {
+      me.groupsData.off(event, callback);
+    });
+
+    // remove all drawn groups
+    ids = this.groupsData.getIds();
+    this.groupsData = null;
+    for (var i = 0; i < ids.length; i++) {
+      this._removeGroup(ids[i]);
+    }
+  }
+
+  // replace the dataset
+  if (!groups) {
+    this.groupsData = null;
+  } else if (groups instanceof DataSet || groups instanceof DataView) {
+    this.groupsData = groups;
+  } else {
+    throw new TypeError('Data must be an instance of DataSet or DataView');
+  }
+
+  if (this.groupsData) {
+    // subscribe to new dataset
+    var id = this.id;
+    util.forEach(this.groupListeners, function (callback, event) {
+      me.groupsData.on(event, callback, id);
+    });
+
+    // draw all ms
+    ids = this.groupsData.getIds();
+    this._onAddGroups(ids);
+  }
+};
+
+LineGraph.prototype._onUpdate = function (ids) {
+  this._updateAllGroupData(ids);
+};
+LineGraph.prototype._onAdd = function (ids) {
+  this._onUpdate(ids);
+};
+LineGraph.prototype._onRemove = function (ids) {
+  this._onUpdate(ids);
+};
+LineGraph.prototype._onUpdateGroups = function (groupIds) {
+  this._updateAllGroupData(null, groupIds);
+};
+LineGraph.prototype._onAddGroups = function (groupIds) {
+  this._onUpdateGroups(groupIds);
+};
+
+/**
+ * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph
+ * @param {Array} groupIds
+ * @private
+ */
+LineGraph.prototype._onRemoveGroups = function (groupIds) {
+  for (var i = 0; i < groupIds.length; i++) {
+    this._removeGroup(groupIds[i]);
+  }
+  this.forceGraphUpdate = true;
+  this.body.emitter.emit("_change", { queue: true });
+};
+
+/**
+ * this cleans the group out off the legends and the dataaxis
+ * @param {vis.GraphGroup.id} groupId
+ * @private
+ */
+LineGraph.prototype._removeGroup = function (groupId) {
+  if (this.groups.hasOwnProperty(groupId)) {
+    if (this.groups[groupId].options.yAxisOrientation == 'right') {
+      this.yAxisRight.removeGroup(groupId);
+      this.legendRight.removeGroup(groupId);
+      this.legendRight.redraw();
+    } else {
+      this.yAxisLeft.removeGroup(groupId);
+      this.legendLeft.removeGroup(groupId);
+      this.legendLeft.redraw();
+    }
+    delete this.groups[groupId];
+  }
+};
+
+/**
+ * update a group object with the group dataset entree
+ *
+ * @param {vis.GraphGroup} group
+ * @param {vis.GraphGroup.id} groupId
+ * @private
+ */
+LineGraph.prototype._updateGroup = function (group, groupId) {
+  if (!this.groups.hasOwnProperty(groupId)) {
+    this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);
+    if (this.groups[groupId].options.yAxisOrientation == 'right') {
+      this.yAxisRight.addGroup(groupId, this.groups[groupId]);
+      this.legendRight.addGroup(groupId, this.groups[groupId]);
+    } else {
+      this.yAxisLeft.addGroup(groupId, this.groups[groupId]);
+      this.legendLeft.addGroup(groupId, this.groups[groupId]);
+    }
+  } else {
+    this.groups[groupId].update(group);
+    if (this.groups[groupId].options.yAxisOrientation == 'right') {
+      this.yAxisRight.updateGroup(groupId, this.groups[groupId]);
+      this.legendRight.updateGroup(groupId, this.groups[groupId]);
+      //If yAxisOrientation changed, clean out the group from the other axis.
+      this.yAxisLeft.removeGroup(groupId);
+      this.legendLeft.removeGroup(groupId);
+    } else {
+      this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);
+      this.legendLeft.updateGroup(groupId, this.groups[groupId]);
+      //If yAxisOrientation changed, clean out the group from the other axis.
+      this.yAxisRight.removeGroup(groupId);
+      this.legendRight.removeGroup(groupId);
+    }
+  }
+  this.legendLeft.redraw();
+  this.legendRight.redraw();
+};
+
+/**
+ * this updates all groups, it is used when there is an update the the itemset.
+ *
+ * @param  {Array} ids
+ * @param  {Array} groupIds
+ * @private
+ */
+LineGraph.prototype._updateAllGroupData = function (ids, groupIds) {
+  if (this.itemsData != null) {
+    var groupsContent = {};
+    var items = this.itemsData.get();
+    var fieldId = this.itemsData._fieldId;
+    var idMap = {};
+    if (ids) {
+      ids.map(function (id) {
+        idMap[id] = id;
+      });
+    }
+
+    //pre-Determine array sizes, for more efficient memory claim
+    var groupCounts = {};
+    for (var i = 0; i < items.length; i++) {
+      var item = items[i];
+      var groupId = item.group;
+      if (groupId === null || groupId === undefined) {
+        groupId = UNGROUPED;
+      }
+      groupCounts.hasOwnProperty(groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1;
+    }
+
+    //Pre-load arrays from existing groups if items are not changed (not in ids)
+    var existingItemsMap = {};
+    if (!groupIds && ids) {
+      for (groupId in this.groups) {
+        if (this.groups.hasOwnProperty(groupId)) {
+          group = this.groups[groupId];
+          var existing_items = group.getItems();
+
+          groupsContent[groupId] = existing_items.filter(function (item) {
+            existingItemsMap[item[fieldId]] = item[fieldId];
+            return item[fieldId] !== idMap[item[fieldId]];
+          });
+          var newLength = groupCounts[groupId];
+          groupCounts[groupId] -= groupsContent[groupId].length;
+          if (groupsContent[groupId].length < newLength) {
+            groupsContent[groupId][newLength - 1] = {};
+          }
+        }
+      }
+    }
+
+    //Now insert data into the arrays.
+    for (i = 0; i < items.length; i++) {
+      item = items[i];
+      groupId = item.group;
+      if (groupId === null || groupId === undefined) {
+        groupId = UNGROUPED;
+      }
+      if (!groupIds && ids && item[fieldId] !== idMap[item[fieldId]] && existingItemsMap.hasOwnProperty(item[fieldId])) {
+        continue;
+      }
+      if (!groupsContent.hasOwnProperty(groupId)) {
+        groupsContent[groupId] = new Array(groupCounts[groupId]);
+      }
+      //Copy data (because of unmodifiable DataView input.
+      var extended = util.bridgeObject(item);
+      extended.x = util.convert(item.x, 'Date');
+      extended.end = util.convert(item.end, 'Date');
+      extended.orginalY = item.y; //real Y
+      extended.y = Number(item.y);
+      extended[fieldId] = item[fieldId];
+
+      var index = groupsContent[groupId].length - groupCounts[groupId]--;
+      groupsContent[groupId][index] = extended;
+    }
+
+    //Make sure all groups are present, to allow removal of old groups
+    for (groupId in this.groups) {
+      if (this.groups.hasOwnProperty(groupId)) {
+        if (!groupsContent.hasOwnProperty(groupId)) {
+          groupsContent[groupId] = new Array(0);
+        }
+      }
+    }
+
+    //Update legendas, style and axis
+    for (groupId in groupsContent) {
+      if (groupsContent.hasOwnProperty(groupId)) {
+        if (groupsContent[groupId].length == 0) {
+          if (this.groups.hasOwnProperty(groupId)) {
+            this._removeGroup(groupId);
+          }
+        } else {
+          var group = undefined;
+          if (this.groupsData != undefined) {
+            group = this.groupsData.get(groupId);
+          }
+          if (group == undefined) {
+            group = { id: groupId, content: this.options.defaultGroup + groupId };
+          }
+          this._updateGroup(group, groupId);
+          this.groups[groupId].setItems(groupsContent[groupId]);
+        }
+      }
+    }
+    this.forceGraphUpdate = true;
+    this.body.emitter.emit("_change", { queue: true });
+  }
+};
+
+/**
+ * Redraw the component, mandatory function
+ * @return {boolean} Returns true if the component is resized
+ */
+LineGraph.prototype.redraw = function () {
+  var resized = false;
+
+  // calculate actual size and position
+  this.props.width = this.dom.frame.offsetWidth;
+  this.props.height = this.body.domProps.centerContainer.height - this.body.domProps.border.top - this.body.domProps.border.bottom;
+
+  // check if this component is resized
+  resized = this._isResized() || resized;
+
+  // check whether zoomed (in that case we need to re-stack everything)
+  var visibleInterval = this.body.range.end - this.body.range.start;
+  var zoomed = visibleInterval != this.lastVisibleInterval;
+  this.lastVisibleInterval = visibleInterval;
+
+  // the svg element is three times as big as the width, this allows for fully dragging left and right
+  // without reloading the graph. the controls for this are bound to events in the constructor
+  if (resized == true) {
+    this.svg.style.width = util.option.asSize(3 * this.props.width);
+    this.svg.style.left = util.option.asSize(-this.props.width);
+
+    // if the height of the graph is set as proportional, change the height of the svg
+    if ((this.options.height + '').indexOf("%") != -1 || this.updateSVGheightOnResize == true) {
+      this.updateSVGheight = true;
+    }
+  }
+
+  // update the height of the graph on each redraw of the graph.
+  if (this.updateSVGheight == true) {
+    if (this.options.graphHeight != this.props.height + 'px') {
+      this.options.graphHeight = this.props.height + 'px';
+      this.svg.style.height = this.props.height + 'px';
+    }
+    this.updateSVGheight = false;
+  } else {
+    this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';
+  }
+
+  // zoomed is here to ensure that animations are shown correctly.
+  if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) {
+    resized = this._updateGraph() || resized;
+    this.forceGraphUpdate = false;
+  } else {
+    // move the whole svg while dragging
+    if (this.lastStart != 0) {
+      var offset = this.body.range.start - this.lastStart;
+      var range = this.body.range.end - this.body.range.start;
+      if (this.props.width != 0) {
+        var rangePerPixelInv = this.props.width / range;
+        var xOffset = offset * rangePerPixelInv;
+        this.svg.style.left = -this.props.width - xOffset + 'px';
+      }
+    }
+  }
+  this.legendLeft.redraw();
+  this.legendRight.redraw();
+  return resized;
+};
+
+LineGraph.prototype._getSortedGroupIds = function () {
+  // getting group Ids
+  var grouplist = [];
+  for (var groupId in this.groups) {
+    if (this.groups.hasOwnProperty(groupId)) {
+      var group = this.groups[groupId];
+      if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) {
+        grouplist.push({ id: groupId, zIndex: group.options.zIndex });
+      }
+    }
+  }
+  util.insertSort(grouplist, function (a, b) {
+    var az = a.zIndex;
+    var bz = b.zIndex;
+    if (az === undefined) az = 0;
+    if (bz === undefined) bz = 0;
+    return az == bz ? 0 : az < bz ? -1 : 1;
+  });
+  var groupIds = new Array(grouplist.length);
+  for (var i = 0; i < grouplist.length; i++) {
+    groupIds[i] = grouplist[i].id;
+  }
+  return groupIds;
+};
+
+/**
+ * Update and redraw the graph.
+ *
+ * @returns {boolean}
+ * @private
+ */
+LineGraph.prototype._updateGraph = function () {
+  // reset the svg elements
+  DOMutil.prepareElements(this.svgElements);
+  if (this.props.width != 0 && this.itemsData != null) {
+    var group, i;
+    var groupRanges = {};
+    var changeCalled = false;
+    // this is the range of the SVG canvas
+    var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width);
+    var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);
+
+    // getting group Ids
+    var groupIds = this._getSortedGroupIds();
+    if (groupIds.length > 0) {
+      var groupsData = {};
+
+      // fill groups data, this only loads the data we require based on the timewindow
+      this._getRelevantData(groupIds, groupsData, minDate, maxDate);
+
+      // apply sampling, if disabled, it will pass through this function.
+      this._applySampling(groupIds, groupsData);
+
+      // we transform the X coordinates to detect collisions
+      for (i = 0; i < groupIds.length; i++) {
+        this._convertXcoordinates(groupsData[groupIds[i]]);
+      }
+
+      // now all needed data has been collected we start the processing.
+      this._getYRanges(groupIds, groupsData, groupRanges);
+
+      // update the Y axis first, we use this data to draw at the correct Y points
+      changeCalled = this._updateYAxis(groupIds, groupRanges);
+
+      //  at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container.
+      //  Cleanup SVG elements on abort.
+      if (changeCalled == true) {
+        DOMutil.cleanupElements(this.svgElements);
+        this.abortedGraphUpdate = true;
+        return true;
+      }
+      this.abortedGraphUpdate = false;
+
+      // With the yAxis scaled correctly, use this to get the Y values of the points.
+      var below = undefined;
+      for (i = 0; i < groupIds.length; i++) {
+        group = this.groups[groupIds[i]];
+        if (this.options.stack === true && this.options.style === 'line') {
+          if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) {
+            if (below != undefined) {
+              this._stack(groupsData[group.id], groupsData[below.id]);
+              if (group.options.shaded.enabled == true && group.options.shaded.orientation !== "group") {
+                if (group.options.shaded.orientation == "top" && below.options.shaded.orientation !== "group") {
+                  below.options.shaded.orientation = "group";
+                  below.options.shaded.groupId = group.id;
+                } else {
+                  group.options.shaded.orientation = "group";
+                  group.options.shaded.groupId = below.id;
+                }
+              }
+            }
+            below = group;
+          }
+        }
+        this._convertYcoordinates(groupsData[groupIds[i]], group);
+      }
+
+      //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines.
+      var paths = {};
+      for (i = 0; i < groupIds.length; i++) {
+        group = this.groups[groupIds[i]];
+        if (group.options.style === 'line' && group.options.shaded.enabled == true) {
+          var dataset = groupsData[groupIds[i]];
+          if (dataset == null || dataset.length == 0) {
+            continue;
+          }
+          if (!paths.hasOwnProperty(groupIds[i])) {
+            paths[groupIds[i]] = Lines.calcPath(dataset, group);
+          }
+          if (group.options.shaded.orientation === "group") {
+            var subGroupId = group.options.shaded.groupId;
+            if (groupIds.indexOf(subGroupId) === -1) {
+              console.log(group.id + ": Unknown shading group target given:" + subGroupId);
+              continue;
+            }
+            if (!paths.hasOwnProperty(subGroupId)) {
+              paths[subGroupId] = Lines.calcPath(groupsData[subGroupId], this.groups[subGroupId]);
+            }
+            Lines.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework);
+          } else {
+            Lines.drawShading(paths[groupIds[i]], group, undefined, this.framework);
+          }
+        }
+      }
+
+      // draw the groups, calculating paths if still necessary.
+      Bars.draw(groupIds, groupsData, this.framework);
+      for (i = 0; i < groupIds.length; i++) {
+        group = this.groups[groupIds[i]];
+        if (groupsData[groupIds[i]].length > 0) {
+          switch (group.options.style) {
+            case "line":
+              if (!paths.hasOwnProperty(groupIds[i])) {
+                paths[groupIds[i]] = Lines.calcPath(groupsData[groupIds[i]], group);
+              }
+              Lines.draw(paths[groupIds[i]], group, this.framework);
+            // eslint-disable-line no-fallthrough
+            case "point":
+            // eslint-disable-line no-fallthrough
+            case "points":
+              if (group.options.style == "point" || group.options.style == "points" || group.options.drawPoints.enabled == true) {
+                Points.draw(groupsData[groupIds[i]], group, this.framework);
+              }
+              break;
+            case "bar":
+            // bar needs to be drawn enmasse
+            // eslint-disable-line no-fallthrough
+            default:
+            //do nothing...
+          }
+        }
+      }
+    }
+  }
+
+  // cleanup unused svg elements
+  DOMutil.cleanupElements(this.svgElements);
+  return false;
+};
+
+LineGraph.prototype._stack = function (data, subData) {
+  var index, dx, dy, subPrevPoint, subNextPoint;
+  index = 0;
+  // for each data point we look for a matching on in the set below
+  for (var j = 0; j < data.length; j++) {
+    subPrevPoint = undefined;
+    subNextPoint = undefined;
+    // we look for time matches or a before-after point
+    for (var k = index; k < subData.length; k++) {
+      // if times match exactly
+      if (subData[k].x === data[j].x) {
+        subPrevPoint = subData[k];
+        subNextPoint = subData[k];
+        index = k;
+        break;
+      } else if (subData[k].x > data[j].x) {
+        // overshoot
+        subNextPoint = subData[k];
+        if (k == 0) {
+          subPrevPoint = subNextPoint;
+        } else {
+          subPrevPoint = subData[k - 1];
+        }
+        index = k;
+        break;
+      }
+    }
+    // in case the last data point has been used, we assume it stays like this.
+    if (subNextPoint === undefined) {
+      subPrevPoint = subData[subData.length - 1];
+      subNextPoint = subData[subData.length - 1];
+    }
+    // linear interpolation
+    dx = subNextPoint.x - subPrevPoint.x;
+    dy = subNextPoint.y - subPrevPoint.y;
+    if (dx == 0) {
+      data[j].y = data[j].orginalY + subNextPoint.y;
+    } else {
+      data[j].y = data[j].orginalY + dy / dx * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y
+    }
+  }
+};
+
+/**
+ * first select and preprocess the data from the datasets.
+ * the groups have their preselection of data, we now loop over this data to see
+ * what data we need to draw. Sorted data is much faster.
+ * more optimization is possible by doing the sampling before and using the binary search
+ * to find the end date to determine the increment.
+ *
+ * @param {array}  groupIds
+ * @param {object} groupsData
+ * @param {date}   minDate
+ * @param {date}   maxDate
+ * @private
+ */
+LineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) {
+  var group, i, j, item;
+  if (groupIds.length > 0) {
+    for (i = 0; i < groupIds.length; i++) {
+      group = this.groups[groupIds[i]];
+      var itemsData = group.getItems();
+      // optimization for sorted data
+      if (group.options.sort == true) {
+        var dateComparator = function dateComparator(a, b) {
+          return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1;
+        };
+        var first = Math.max(0, util.binarySearchValue(itemsData, minDate, 'x', 'before', dateComparator));
+        var last = Math.min(itemsData.length, util.binarySearchValue(itemsData, maxDate, 'x', 'after', dateComparator) + 1);
+        if (last <= 0) {
+          last = itemsData.length;
+        }
+        var dataContainer = new Array(last - first);
+        for (j = first; j < last; j++) {
+          item = group.itemsData[j];
+          dataContainer[j - first] = item;
+        }
+        groupsData[groupIds[i]] = dataContainer;
+      } else {
+        // If unsorted data, all data is relevant, just returning entire structure
+        groupsData[groupIds[i]] = group.itemsData;
+      }
+    }
+  }
+};
+
+/**
+ *
+ * @param {Array.<vis.GraphGroup.id>} groupIds
+ * @param {vis.DataSet} groupsData
+ * @private
+ */
+LineGraph.prototype._applySampling = function (groupIds, groupsData) {
+  var group;
+  if (groupIds.length > 0) {
+    for (var i = 0; i < groupIds.length; i++) {
+      group = this.groups[groupIds[i]];
+      if (group.options.sampling == true) {
+        var dataContainer = groupsData[groupIds[i]];
+        if (dataContainer.length > 0) {
+          var increment = 1;
+          var amountOfPoints = dataContainer.length;
+
+          // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop
+          // of width changing of the yAxis.
+          //TODO: This assumes sorted data, but that's not guaranteed!
+          var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x);
+          var pointsPerPixel = amountOfPoints / xDistance;
+          increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel)));
+
+          var sampledData = new Array(amountOfPoints);
+          for (var j = 0; j < amountOfPoints; j += increment) {
+            var idx = Math.round(j / increment);
+            sampledData[idx] = dataContainer[j];
+          }
+          groupsData[groupIds[i]] = sampledData.splice(0, Math.round(amountOfPoints / increment));
+        }
+      }
+    }
+  }
+};
+
+/**
+ *
+ * @param {Array.<vis.GraphGroup.id>} groupIds
+ * @param {vis.DataSet} groupsData
+ * @param {object} groupRanges  | this is being filled here
+ * @private
+ */
+LineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) {
+  var groupData, group, i;
+  var combinedDataLeft = [];
+  var combinedDataRight = [];
+  var options;
+  if (groupIds.length > 0) {
+    for (i = 0; i < groupIds.length; i++) {
+      groupData = groupsData[groupIds[i]];
+      options = this.groups[groupIds[i]].options;
+      if (groupData.length > 0) {
+        group = this.groups[groupIds[i]];
+        // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.
+        if (options.stack === true && options.style === 'bar') {
+          if (options.yAxisOrientation === 'left') {
+            combinedDataLeft = combinedDataLeft.concat(groupData);
+          } else {
+            combinedDataRight = combinedDataRight.concat(groupData);
+          }
+        } else {
+          groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]);
+        }
+      }
+    }
+
+    // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.
+    Bars.getStackedYRange(combinedDataLeft, groupRanges, groupIds, '__barStackLeft', 'left');
+    Bars.getStackedYRange(combinedDataRight, groupRanges, groupIds, '__barStackRight', 'right');
+  }
+};
+
+/**
+ * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.
+ * @param {Array.<vis.GraphGroup.id>} groupIds
+ * @param {Object} groupRanges
+ * @returns {boolean} resized
+ * @private
+ */
+LineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {
+  var resized = false;
+  var yAxisLeftUsed = false;
+  var yAxisRightUsed = false;
+  var minLeft = 1e9,
+      minRight = 1e9,
+      maxLeft = -1e9,
+      maxRight = -1e9,
+      minVal,
+      maxVal;
+  // if groups are present
+  if (groupIds.length > 0) {
+    // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop.
+    for (var i = 0; i < groupIds.length; i++) {
+      var group = this.groups[groupIds[i]];
+      if (group && group.options.yAxisOrientation != 'right') {
+        yAxisLeftUsed = true;
+        minLeft = 1e9;
+        maxLeft = -1e9;
+      } else if (group && group.options.yAxisOrientation) {
+        yAxisRightUsed = true;
+        minRight = 1e9;
+        maxRight = -1e9;
+      }
+    }
+
+    // if there are items:
+    for (i = 0; i < groupIds.length; i++) {
+      if (groupRanges.hasOwnProperty(groupIds[i])) {
+        if (groupRanges[groupIds[i]].ignore !== true) {
+          minVal = groupRanges[groupIds[i]].min;
+          maxVal = groupRanges[groupIds[i]].max;
+
+          if (groupRanges[groupIds[i]].yAxisOrientation != 'right') {
+            yAxisLeftUsed = true;
+            minLeft = minLeft > minVal ? minVal : minLeft;
+            maxLeft = maxLeft < maxVal ? maxVal : maxLeft;
+          } else {
+            yAxisRightUsed = true;
+            minRight = minRight > minVal ? minVal : minRight;
+            maxRight = maxRight < maxVal ? maxVal : maxRight;
+          }
+        }
+      }
+    }
+
+    if (yAxisLeftUsed == true) {
+      this.yAxisLeft.setRange(minLeft, maxLeft);
+    }
+    if (yAxisRightUsed == true) {
+      this.yAxisRight.setRange(minRight, maxRight);
+    }
+  }
+  resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized;
+  resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized;
+
+  if (yAxisRightUsed == true && yAxisLeftUsed == true) {
+    this.yAxisLeft.drawIcons = true;
+    this.yAxisRight.drawIcons = true;
+  } else {
+    this.yAxisLeft.drawIcons = false;
+    this.yAxisRight.drawIcons = false;
+  }
+  this.yAxisRight.master = !yAxisLeftUsed;
+  this.yAxisRight.masterAxis = this.yAxisLeft;
+
+  if (this.yAxisRight.master == false) {
+    if (yAxisRightUsed == true) {
+      this.yAxisLeft.lineOffset = this.yAxisRight.width;
+    } else {
+      this.yAxisLeft.lineOffset = 0;
+    }
+
+    resized = this.yAxisLeft.redraw() || resized;
+    resized = this.yAxisRight.redraw() || resized;
+  } else {
+    resized = this.yAxisRight.redraw() || resized;
+  }
+
+  // clean the accumulated lists
+  var tempGroups = ['__barStackLeft', '__barStackRight', '__lineStackLeft', '__lineStackRight'];
+  for (i = 0; i < tempGroups.length; i++) {
+    if (groupIds.indexOf(tempGroups[i]) != -1) {
+      groupIds.splice(groupIds.indexOf(tempGroups[i]), 1);
+    }
+  }
+
+  return resized;
+};
+
+/**
+ * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function
+ *
+ * @param {boolean} axisUsed
+ * @param {vis.DataAxis}  axis
+ * @returns {boolean}
+ * @private
+ */
+LineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {
+  var changed = false;
+  if (axisUsed == false) {
+    if (axis.dom.frame.parentNode && axis.hidden == false) {
+      axis.hide();
+      changed = true;
+    }
+  } else {
+    if (!axis.dom.frame.parentNode && axis.hidden == true) {
+      axis.show();
+      changed = true;
+    }
+  }
+  return changed;
+};
+
+/**
+ * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the
+ * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for
+ * the yAxis.
+ *
+ * @param {Array.<Object>} datapoints
+ * @private
+ */
+LineGraph.prototype._convertXcoordinates = function (datapoints) {
+  var toScreen = this.body.util.toScreen;
+  for (var i = 0; i < datapoints.length; i++) {
+    datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width;
+    datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations
+    if (datapoints[i].end != undefined) {
+      datapoints[i].screen_end = toScreen(datapoints[i].end) + this.props.width;
+    } else {
+      datapoints[i].screen_end = undefined;
+    }
+  }
+};
+
+/**
+ * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the
+ * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for
+ * the yAxis.
+ *
+ * @param {Array.<Object>} datapoints
+ * @param {vis.GraphGroup} group
+ * @private
+ */
+LineGraph.prototype._convertYcoordinates = function (datapoints, group) {
+  var axis = this.yAxisLeft;
+  var svgHeight = Number(this.svg.style.height.replace('px', ''));
+  if (group.options.yAxisOrientation == 'right') {
+    axis = this.yAxisRight;
+  }
+  for (var i = 0; i < datapoints.length; i++) {
+    datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y));
+  }
+  group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));
+};
+
+module.exports = LineGraph;
+
+/***/ }),
+/* 107 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DOMutil = __webpack_require__(14);
+var Component = __webpack_require__(16);
+var DataScale = __webpack_require__(108);
+/**
+ * A horizontal time axis
+ * @param {Object} body
+ * @param {Object} [options]        See DataAxis.setOptions for the available
+ *                                  options.
+ * @param {SVGElement} svg
+ * @param {vis.LineGraph.options} linegraphOptions
+ * @constructor DataAxis
+ * @extends Component
+ */
+function DataAxis(body, options, svg, linegraphOptions) {
+  this.id = util.randomUUID();
+  this.body = body;
+
+  this.defaultOptions = {
+    orientation: 'left', // supported: 'left', 'right'
+    showMinorLabels: true,
+    showMajorLabels: true,
+    icons: false,
+    majorLinesOffset: 7,
+    minorLinesOffset: 4,
+    labelOffsetX: 10,
+    labelOffsetY: 2,
+    iconWidth: 20,
+    width: '40px',
+    visible: true,
+    alignZeros: true,
+    left: {
+      range: { min: undefined, max: undefined },
+      format: function format(value) {
+        return '' + parseFloat(value.toPrecision(3));
+      },
+      title: { text: undefined, style: undefined }
+    },
+    right: {
+      range: { min: undefined, max: undefined },
+      format: function format(value) {
+        return '' + parseFloat(value.toPrecision(3));
+      },
+      title: { text: undefined, style: undefined }
+    }
+  };
+
+  this.linegraphOptions = linegraphOptions;
+  this.linegraphSVG = svg;
+  this.props = {};
+  this.DOMelements = { // dynamic elements
+    lines: {},
+    labels: {},
+    title: {}
+  };
+
+  this.dom = {};
+  this.scale = undefined;
+  this.range = { start: 0, end: 0 };
+
+  this.options = util.extend({}, this.defaultOptions);
+  this.conversionFactor = 1;
+
+  this.setOptions(options);
+  this.width = Number(('' + this.options.width).replace("px", ""));
+  this.minWidth = this.width;
+  this.height = this.linegraphSVG.getBoundingClientRect().height;
+  this.hidden = false;
+
+  this.stepPixels = 25;
+  this.zeroCrossing = -1;
+  this.amountOfSteps = -1;
+
+  this.lineOffset = 0;
+  this.master = true;
+  this.masterAxis = null;
+  this.svgElements = {};
+  this.iconsRemoved = false;
+
+  this.groups = {};
+  this.amountOfGroups = 0;
+
+  // create the HTML DOM
+  this._create();
+  this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups };
+
+  var me = this;
+  this.body.emitter.on("verticalDrag", function () {
+    me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px';
+  });
+}
+
+DataAxis.prototype = new Component();
+
+DataAxis.prototype.addGroup = function (label, graphOptions) {
+  if (!this.groups.hasOwnProperty(label)) {
+    this.groups[label] = graphOptions;
+  }
+  this.amountOfGroups += 1;
+};
+
+DataAxis.prototype.updateGroup = function (label, graphOptions) {
+  if (!this.groups.hasOwnProperty(label)) {
+    this.amountOfGroups += 1;
+  }
+  this.groups[label] = graphOptions;
+};
+
+DataAxis.prototype.removeGroup = function (label) {
+  if (this.groups.hasOwnProperty(label)) {
+    delete this.groups[label];
+    this.amountOfGroups -= 1;
+  }
+};
+
+DataAxis.prototype.setOptions = function (options) {
+  if (options) {
+    var redraw = false;
+    if (this.options.orientation != options.orientation && options.orientation !== undefined) {
+      redraw = true;
+    }
+    var fields = ['orientation', 'showMinorLabels', 'showMajorLabels', 'icons', 'majorLinesOffset', 'minorLinesOffset', 'labelOffsetX', 'labelOffsetY', 'iconWidth', 'width', 'visible', 'left', 'right', 'alignZeros'];
+    util.selectiveDeepExtend(fields, this.options, options);
+
+    this.minWidth = Number(('' + this.options.width).replace("px", ""));
+    if (redraw === true && this.dom.frame) {
+      this.hide();
+      this.show();
+    }
+  }
+};
+
+/**
+ * Create the HTML DOM for the DataAxis
+ */
+DataAxis.prototype._create = function () {
+  this.dom.frame = document.createElement('div');
+  this.dom.frame.style.width = this.options.width;
+  this.dom.frame.style.height = this.height;
+
+  this.dom.lineContainer = document.createElement('div');
+  this.dom.lineContainer.style.width = '100%';
+  this.dom.lineContainer.style.height = this.height;
+  this.dom.lineContainer.style.position = 'relative';
+
+  // create svg element for graph drawing.
+  this.svg = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+  this.svg.style.position = "absolute";
+  this.svg.style.top = '0px';
+  this.svg.style.height = '100%';
+  this.svg.style.width = '100%';
+  this.svg.style.display = "block";
+  this.dom.frame.appendChild(this.svg);
+};
+
+DataAxis.prototype._redrawGroupIcons = function () {
+  DOMutil.prepareElements(this.svgElements);
+
+  var x;
+  var iconWidth = this.options.iconWidth;
+  var iconHeight = 15;
+  var iconOffset = 4;
+  var y = iconOffset + 0.5 * iconHeight;
+
+  if (this.options.orientation === 'left') {
+    x = iconOffset;
+  } else {
+    x = this.width - iconWidth - iconOffset;
+  }
+
+  var groupArray = (0, _keys2['default'])(this.groups);
+  groupArray.sort(function (a, b) {
+    return a < b ? -1 : 1;
+  });
+
+  for (var i = 0; i < groupArray.length; i++) {
+    var groupId = groupArray[i];
+    if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {
+      this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);
+      y += iconHeight + iconOffset;
+    }
+  }
+
+  DOMutil.cleanupElements(this.svgElements);
+  this.iconsRemoved = false;
+};
+
+DataAxis.prototype._cleanupIcons = function () {
+  if (this.iconsRemoved === false) {
+    DOMutil.prepareElements(this.svgElements);
+    DOMutil.cleanupElements(this.svgElements);
+    this.iconsRemoved = true;
+  }
+};
+
+/**
+ * Create the HTML DOM for the DataAxis
+ */
+DataAxis.prototype.show = function () {
+  this.hidden = false;
+  if (!this.dom.frame.parentNode) {
+    if (this.options.orientation === 'left') {
+      this.body.dom.left.appendChild(this.dom.frame);
+    } else {
+      this.body.dom.right.appendChild(this.dom.frame);
+    }
+  }
+
+  if (!this.dom.lineContainer.parentNode) {
+    this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);
+  }
+};
+
+/**
+ * Create the HTML DOM for the DataAxis
+ */
+DataAxis.prototype.hide = function () {
+  this.hidden = true;
+  if (this.dom.frame.parentNode) {
+    this.dom.frame.parentNode.removeChild(this.dom.frame);
+  }
+
+  if (this.dom.lineContainer.parentNode) {
+    this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer);
+  }
+};
+
+/**
+ * Set a range (start and end)
+ * @param {number} start
+ * @param {number} end
+ */
+DataAxis.prototype.setRange = function (start, end) {
+  this.range.start = start;
+  this.range.end = end;
+};
+
+/**
+ * Repaint the component
+ * @return {boolean} Returns true if the component is resized
+ */
+DataAxis.prototype.redraw = function () {
+  var resized = false;
+  var activeGroups = 0;
+
+  // Make sure the line container adheres to the vertical scrolling.
+  this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px';
+
+  for (var groupId in this.groups) {
+    if (this.groups.hasOwnProperty(groupId)) {
+      if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {
+        activeGroups++;
+      }
+    }
+  }
+  if (this.amountOfGroups === 0 || activeGroups === 0) {
+    this.hide();
+  } else {
+    this.show();
+    this.height = Number(this.linegraphSVG.style.height.replace("px", ""));
+
+    // svg offsetheight did not work in firefox and explorer...
+    this.dom.lineContainer.style.height = this.height + 'px';
+    this.width = this.options.visible === true ? Number(('' + this.options.width).replace("px", "")) : 0;
+
+    var props = this.props;
+    var frame = this.dom.frame;
+
+    // update classname
+    frame.className = 'vis-data-axis';
+
+    // calculate character width and height
+    this._calculateCharSize();
+
+    var orientation = this.options.orientation;
+    var showMinorLabels = this.options.showMinorLabels;
+    var showMajorLabels = this.options.showMajorLabels;
+
+    // determine the width and height of the elements for the axis
+    props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;
+    props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;
+
+    props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;
+    props.minorLineHeight = 1;
+    props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;
+    props.majorLineHeight = 1;
+
+    //  take frame offline while updating (is almost twice as fast)
+    if (orientation === 'left') {
+      frame.style.top = '0';
+      frame.style.left = '0';
+      frame.style.bottom = '';
+      frame.style.width = this.width + 'px';
+      frame.style.height = this.height + "px";
+      this.props.width = this.body.domProps.left.width;
+      this.props.height = this.body.domProps.left.height;
+    } else {
+      // right
+      frame.style.top = '';
+      frame.style.bottom = '0';
+      frame.style.left = '0';
+      frame.style.width = this.width + 'px';
+      frame.style.height = this.height + "px";
+      this.props.width = this.body.domProps.right.width;
+      this.props.height = this.body.domProps.right.height;
+    }
+
+    resized = this._redrawLabels();
+    resized = this._isResized() || resized;
+
+    if (this.options.icons === true) {
+      this._redrawGroupIcons();
+    } else {
+      this._cleanupIcons();
+    }
+
+    this._redrawTitle(orientation);
+  }
+  return resized;
+};
+
+/**
+ * Repaint major and minor text labels and vertical grid lines
+ *
+ * @returns {boolean}
+ * @private
+ */
+DataAxis.prototype._redrawLabels = function () {
+  var _this = this;
+
+  var resized = false;
+  DOMutil.prepareElements(this.DOMelements.lines);
+  DOMutil.prepareElements(this.DOMelements.labels);
+  var orientation = this.options['orientation'];
+  var customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {};
+
+  //Override range with manual options:
+  var autoScaleEnd = true;
+  if (customRange.max != undefined) {
+    this.range.end = customRange.max;
+    autoScaleEnd = false;
+  }
+  var autoScaleStart = true;
+  if (customRange.min != undefined) {
+    this.range.start = customRange.min;
+    autoScaleStart = false;
+  }
+
+  this.scale = new DataScale(this.range.start, this.range.end, autoScaleStart, autoScaleEnd, this.dom.frame.offsetHeight, this.props.majorCharHeight, this.options.alignZeros, this.options[orientation].format);
+
+  if (this.master === false && this.masterAxis != undefined) {
+    this.scale.followScale(this.masterAxis.scale);
+  }
+
+  //Is updated in side-effect of _redrawLabel():
+  this.maxLabelSize = 0;
+
+  var lines = this.scale.getLines();
+  lines.forEach(function (line) {
+    var y = line.y;
+    var isMajor = line.major;
+    if (_this.options['showMinorLabels'] && isMajor === false) {
+      _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-minor', _this.props.minorCharHeight);
+    }
+    if (isMajor) {
+      if (y >= 0) {
+        _this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-major', _this.props.majorCharHeight);
+      }
+    }
+    if (_this.master === true) {
+      if (isMajor) {
+        _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-major', _this.options.majorLinesOffset, _this.props.majorLineWidth);
+      } else {
+        _this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-minor', _this.options.minorLinesOffset, _this.props.minorLineWidth);
+      }
+    }
+  });
+
+  // Note that title is rotated, so we're using the height, not width!
+  var titleWidth = 0;
+  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {
+    titleWidth = this.props.titleCharHeight;
+  }
+  var offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15;
+
+  // this will resize the yAxis to accommodate the labels.
+  if (this.maxLabelSize > this.width - offset && this.options.visible === true) {
+    this.width = this.maxLabelSize + offset;
+    this.options.width = this.width + "px";
+    DOMutil.cleanupElements(this.DOMelements.lines);
+    DOMutil.cleanupElements(this.DOMelements.labels);
+    this.redraw();
+    resized = true;
+  }
+  // this will resize the yAxis if it is too big for the labels.
+  else if (this.maxLabelSize < this.width - offset && this.options.visible === true && this.width > this.minWidth) {
+      this.width = Math.max(this.minWidth, this.maxLabelSize + offset);
+      this.options.width = this.width + "px";
+      DOMutil.cleanupElements(this.DOMelements.lines);
+      DOMutil.cleanupElements(this.DOMelements.labels);
+      this.redraw();
+      resized = true;
+    } else {
+      DOMutil.cleanupElements(this.DOMelements.lines);
+      DOMutil.cleanupElements(this.DOMelements.labels);
+      resized = false;
+    }
+
+  return resized;
+};
+
+DataAxis.prototype.convertValue = function (value) {
+  return this.scale.convertValue(value);
+};
+
+DataAxis.prototype.screenToValue = function (x) {
+  return this.scale.screenToValue(x);
+};
+
+/**
+ * Create a label for the axis at position x
+ *
+ * @param {number} y
+ * @param {string} text
+ * @param {'top'|'right'|'bottom'|'left'} orientation
+ * @param {string} className
+ * @param {number} characterHeight
+ * @private
+ */
+DataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) {
+  // reuse redundant label
+  var label = DOMutil.getDOMElement('div', this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift();
+  label.className = className;
+  label.innerHTML = text;
+  if (orientation === 'left') {
+    label.style.left = '-' + this.options.labelOffsetX + 'px';
+    label.style.textAlign = "right";
+  } else {
+    label.style.right = '-' + this.options.labelOffsetX + 'px';
+    label.style.textAlign = "left";
+  }
+
+  label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px';
+
+  text += '';
+
+  var largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth);
+  if (this.maxLabelSize < text.length * largestWidth) {
+    this.maxLabelSize = text.length * largestWidth;
+  }
+};
+
+/**
+ * Create a minor line for the axis at position y
+ * @param {number} y
+ * @param {'top'|'right'|'bottom'|'left'} orientation
+ * @param {string} className
+ * @param {number} offset
+ * @param {number} width
+ */
+DataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) {
+  if (this.master === true) {
+    var line = DOMutil.getDOMElement('div', this.DOMelements.lines, this.dom.lineContainer); //this.dom.redundant.lines.shift();
+    line.className = className;
+    line.innerHTML = '';
+
+    if (orientation === 'left') {
+      line.style.left = this.width - offset + 'px';
+    } else {
+      line.style.right = this.width - offset + 'px';
+    }
+
+    line.style.width = width + 'px';
+    line.style.top = y + 'px';
+  }
+};
+
+/**
+ * Create a title for the axis
+ * @private
+ * @param {'top'|'right'|'bottom'|'left'} orientation
+ */
+DataAxis.prototype._redrawTitle = function (orientation) {
+  DOMutil.prepareElements(this.DOMelements.title);
+
+  // Check if the title is defined for this axes
+  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {
+    var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame);
+    title.className = 'vis-y-axis vis-title vis-' + orientation;
+    title.innerHTML = this.options[orientation].title.text;
+
+    // Add style - if provided
+    if (this.options[orientation].title.style !== undefined) {
+      util.addCssText(title, this.options[orientation].title.style);
+    }
+
+    if (orientation === 'left') {
+      title.style.left = this.props.titleCharHeight + 'px';
+    } else {
+      title.style.right = this.props.titleCharHeight + 'px';
+    }
+
+    title.style.width = this.height + 'px';
+  }
+
+  // we need to clean up in case we did not use all elements.
+  DOMutil.cleanupElements(this.DOMelements.title);
+};
+
+/**
+ * Determine the size of text on the axis (both major and minor axis).
+ * The size is calculated only once and then cached in this.props.
+ * @private
+ */
+DataAxis.prototype._calculateCharSize = function () {
+  // determine the char width and height on the minor axis
+  if (!('minorCharHeight' in this.props)) {
+    var textMinor = document.createTextNode('0');
+    var measureCharMinor = document.createElement('div');
+    measureCharMinor.className = 'vis-y-axis vis-minor vis-measure';
+    measureCharMinor.appendChild(textMinor);
+    this.dom.frame.appendChild(measureCharMinor);
+
+    this.props.minorCharHeight = measureCharMinor.clientHeight;
+    this.props.minorCharWidth = measureCharMinor.clientWidth;
+
+    this.dom.frame.removeChild(measureCharMinor);
+  }
+
+  if (!('majorCharHeight' in this.props)) {
+    var textMajor = document.createTextNode('0');
+    var measureCharMajor = document.createElement('div');
+    measureCharMajor.className = 'vis-y-axis vis-major vis-measure';
+    measureCharMajor.appendChild(textMajor);
+    this.dom.frame.appendChild(measureCharMajor);
+
+    this.props.majorCharHeight = measureCharMajor.clientHeight;
+    this.props.majorCharWidth = measureCharMajor.clientWidth;
+
+    this.dom.frame.removeChild(measureCharMajor);
+  }
+
+  if (!('titleCharHeight' in this.props)) {
+    var textTitle = document.createTextNode('0');
+    var measureCharTitle = document.createElement('div');
+    measureCharTitle.className = 'vis-y-axis vis-title vis-measure';
+    measureCharTitle.appendChild(textTitle);
+    this.dom.frame.appendChild(measureCharTitle);
+
+    this.props.titleCharHeight = measureCharTitle.clientHeight;
+    this.props.titleCharWidth = measureCharTitle.clientWidth;
+
+    this.dom.frame.removeChild(measureCharTitle);
+  }
+};
+
+module.exports = DataAxis;
+
+/***/ }),
+/* 108 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ *
+ * @param {number} start
+ * @param {number} end
+ * @param {boolean} autoScaleStart
+ * @param {boolean} autoScaleEnd
+ * @param {number} containerHeight
+ * @param {number} majorCharHeight
+ * @param {boolean} zeroAlign
+ * @param {function} formattingFunction
+ * @constructor DataScale
+ */
+function DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight) {
+  var zeroAlign = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
+  var formattingFunction = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;
+
+  this.majorSteps = [1, 2, 5, 10];
+  this.minorSteps = [0.25, 0.5, 1, 2];
+  this.customLines = null;
+
+  this.containerHeight = containerHeight;
+  this.majorCharHeight = majorCharHeight;
+  this._start = start;
+  this._end = end;
+
+  this.scale = 1;
+  this.minorStepIdx = -1;
+  this.magnitudefactor = 1;
+  this.determineScale();
+
+  this.zeroAlign = zeroAlign;
+  this.autoScaleStart = autoScaleStart;
+  this.autoScaleEnd = autoScaleEnd;
+
+  this.formattingFunction = formattingFunction;
+
+  if (autoScaleStart || autoScaleEnd) {
+    var me = this;
+    var roundToMinor = function roundToMinor(value) {
+      var rounded = value - value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]);
+      if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) {
+        return rounded + me.magnitudefactor * me.minorSteps[me.minorStepIdx];
+      } else {
+        return rounded;
+      }
+    };
+    if (autoScaleStart) {
+      this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx];
+      this._start = roundToMinor(this._start);
+    }
+
+    if (autoScaleEnd) {
+      this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx];
+      this._end = roundToMinor(this._end);
+    }
+    this.determineScale();
+  }
+}
+
+DataScale.prototype.setCharHeight = function (majorCharHeight) {
+  this.majorCharHeight = majorCharHeight;
+};
+
+DataScale.prototype.setHeight = function (containerHeight) {
+  this.containerHeight = containerHeight;
+};
+
+DataScale.prototype.determineScale = function () {
+  var range = this._end - this._start;
+  this.scale = this.containerHeight / range;
+  var minimumStepValue = this.majorCharHeight / this.scale;
+  var orderOfMagnitude = range > 0 ? Math.round(Math.log(range) / Math.LN10) : 0;
+
+  this.minorStepIdx = -1;
+  this.magnitudefactor = Math.pow(10, orderOfMagnitude);
+
+  var start = 0;
+  if (orderOfMagnitude < 0) {
+    start = orderOfMagnitude;
+  }
+
+  var solutionFound = false;
+  for (var l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) {
+    this.magnitudefactor = Math.pow(10, l);
+    for (var j = 0; j < this.minorSteps.length; j++) {
+      var stepSize = this.magnitudefactor * this.minorSteps[j];
+      if (stepSize >= minimumStepValue) {
+        solutionFound = true;
+        this.minorStepIdx = j;
+        break;
+      }
+    }
+    if (solutionFound === true) {
+      break;
+    }
+  }
+};
+
+DataScale.prototype.is_major = function (value) {
+  return value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0;
+};
+
+DataScale.prototype.getStep = function () {
+  return this.magnitudefactor * this.minorSteps[this.minorStepIdx];
+};
+
+DataScale.prototype.getFirstMajor = function () {
+  var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];
+  return this.convertValue(this._start + (majorStep - this._start % majorStep) % majorStep);
+};
+
+DataScale.prototype.formatValue = function (current) {
+  var returnValue = current.toPrecision(5);
+  if (typeof this.formattingFunction === 'function') {
+    returnValue = this.formattingFunction(current);
+  }
+
+  if (typeof returnValue === 'number') {
+    return '' + returnValue;
+  } else if (typeof returnValue === 'string') {
+    return returnValue;
+  } else {
+    return current.toPrecision(5);
+  }
+};
+
+DataScale.prototype.getLines = function () {
+  var lines = [];
+  var step = this.getStep();
+  var bottomOffset = (step - this._start % step) % step;
+  for (var i = this._start + bottomOffset; this._end - i > 0.00001; i += step) {
+    if (i != this._start) {
+      //Skip the bottom line
+      lines.push({ major: this.is_major(i), y: this.convertValue(i), val: this.formatValue(i) });
+    }
+  }
+  return lines;
+};
+
+DataScale.prototype.followScale = function (other) {
+  var oldStepIdx = this.minorStepIdx;
+  var oldStart = this._start;
+  var oldEnd = this._end;
+
+  var me = this;
+  var increaseMagnitude = function increaseMagnitude() {
+    me.magnitudefactor *= 2;
+  };
+  var decreaseMagnitude = function decreaseMagnitude() {
+    me.magnitudefactor /= 2;
+  };
+
+  if (other.minorStepIdx <= 1 && this.minorStepIdx <= 1 || other.minorStepIdx > 1 && this.minorStepIdx > 1) {
+    //easy, no need to change stepIdx nor multiplication factor
+  } else if (other.minorStepIdx < this.minorStepIdx) {
+    //I'm 5, they are 4 per major.
+    this.minorStepIdx = 1;
+    if (oldStepIdx == 2) {
+      increaseMagnitude();
+    } else {
+      increaseMagnitude();
+      increaseMagnitude();
+    }
+  } else {
+    //I'm 4, they are 5 per major
+    this.minorStepIdx = 2;
+    if (oldStepIdx == 1) {
+      decreaseMagnitude();
+    } else {
+      decreaseMagnitude();
+      decreaseMagnitude();
+    }
+  }
+
+  //Get masters stats:
+  var otherZero = other.convertValue(0);
+  var otherStep = other.getStep() * other.scale;
+
+  var done = false;
+  var count = 0;
+  //Loop until magnitude is correct for given constrains.
+  while (!done && count++ < 5) {
+
+    //Get my stats:
+    this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor);
+    var newRange = this.containerHeight / this.scale;
+
+    //For the case the magnitudefactor has changed:
+    this._start = oldStart;
+    this._end = this._start + newRange;
+
+    var myOriginalZero = this._end * this.scale;
+    var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];
+    var majorOffset = this.getFirstMajor() - other.getFirstMajor();
+
+    if (this.zeroAlign) {
+      var zeroOffset = otherZero - myOriginalZero;
+      this._end += zeroOffset / this.scale;
+      this._start = this._end - newRange;
+    } else {
+      if (!this.autoScaleStart) {
+        this._start += majorStep - majorOffset / this.scale;
+        this._end = this._start + newRange;
+      } else {
+        this._start -= majorOffset / this.scale;
+        this._end = this._start + newRange;
+      }
+    }
+    if (!this.autoScaleEnd && this._end > oldEnd + 0.00001) {
+      //Need to decrease magnitude to prevent scale overshoot! (end)
+      decreaseMagnitude();
+      done = false;
+      continue;
+    }
+    if (!this.autoScaleStart && this._start < oldStart - 0.00001) {
+      if (this.zeroAlign && oldStart >= 0) {
+        console.warn("Can't adhere to given 'min' range, due to zeroalign");
+      } else {
+        //Need to decrease magnitude to prevent scale overshoot! (start)
+        decreaseMagnitude();
+        done = false;
+        continue;
+      }
+    }
+    if (this.autoScaleStart && this.autoScaleEnd && newRange < oldEnd - oldStart) {
+      increaseMagnitude();
+      done = false;
+      continue;
+    }
+    done = true;
+  }
+};
+
+DataScale.prototype.convertValue = function (value) {
+  return this.containerHeight - (value - this._start) * this.scale;
+};
+
+DataScale.prototype.screenToValue = function (pixels) {
+  return (this.containerHeight - pixels) / this.scale + this._start;
+};
+
+module.exports = DataScale;
+
+/***/ }),
+/* 109 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var Bars = __webpack_require__(110);
+var Lines = __webpack_require__(111);
+var Points = __webpack_require__(72);
+
+/**
+ * /**
+ * @param {object} group            | the object of the group from the dataset
+ * @param {string} groupId          | ID of the group
+ * @param {object} options          | the default options
+ * @param {array} groupsUsingDefaultStyles  | this array has one entree.
+ *                                            It is passed as an array so it is passed by reference.
+ *                                            It enumerates through the default styles
+ * @constructor GraphGroup
+ */
+function GraphGroup(group, groupId, options, groupsUsingDefaultStyles) {
+  this.id = groupId;
+  var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'drawPoints', 'shaded', 'interpolation', 'zIndex', 'excludeFromStacking', 'excludeFromLegend'];
+  this.options = util.selectiveBridgeObject(fields, options);
+  this.usingDefaultStyle = group.className === undefined;
+  this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;
+  this.zeroPosition = 0;
+  this.update(group);
+  if (this.usingDefaultStyle == true) {
+    this.groupsUsingDefaultStyles[0] += 1;
+  }
+  this.itemsData = [];
+  this.visible = group.visible === undefined ? true : group.visible;
+}
+
+/**
+ * this loads a reference to all items in this group into this group.
+ * @param {array} items
+ */
+GraphGroup.prototype.setItems = function (items) {
+  if (items != null) {
+    this.itemsData = items;
+    if (this.options.sort == true) {
+      util.insertSort(this.itemsData, function (a, b) {
+        return a.x > b.x ? 1 : -1;
+      });
+    }
+  } else {
+    this.itemsData = [];
+  }
+};
+
+GraphGroup.prototype.getItems = function () {
+  return this.itemsData;
+};
+
+/**
+ * this is used for barcharts and shading, this way, we only have to calculate it once.
+ * @param {number} pos
+ */
+GraphGroup.prototype.setZeroPosition = function (pos) {
+  this.zeroPosition = pos;
+};
+
+/**
+ * set the options of the graph group over the default options.
+ * @param {Object} options
+ */
+GraphGroup.prototype.setOptions = function (options) {
+  if (options !== undefined) {
+    var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'zIndex', 'excludeFromStacking', 'excludeFromLegend'];
+    util.selectiveDeepExtend(fields, this.options, options);
+
+    // if the group's drawPoints is a function delegate the callback to the onRender property
+    if (typeof options.drawPoints == 'function') {
+      options.drawPoints = {
+        onRender: options.drawPoints
+      };
+    }
+
+    util.mergeOptions(this.options, options, 'interpolation');
+    util.mergeOptions(this.options, options, 'drawPoints');
+    util.mergeOptions(this.options, options, 'shaded');
+
+    if (options.interpolation) {
+      if ((0, _typeof3['default'])(options.interpolation) == 'object') {
+        if (options.interpolation.parametrization) {
+          if (options.interpolation.parametrization == 'uniform') {
+            this.options.interpolation.alpha = 0;
+          } else if (options.interpolation.parametrization == 'chordal') {
+            this.options.interpolation.alpha = 1.0;
+          } else {
+            this.options.interpolation.parametrization = 'centripetal';
+            this.options.interpolation.alpha = 0.5;
+          }
+        }
+      }
+    }
+  }
+};
+
+/**
+ * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph
+ * @param {vis.Group} group
+ */
+GraphGroup.prototype.update = function (group) {
+  this.group = group;
+  this.content = group.content || 'graph';
+  this.className = group.className || this.className || 'vis-graph-group' + this.groupsUsingDefaultStyles[0] % 10;
+  this.visible = group.visible === undefined ? true : group.visible;
+  this.style = group.style;
+  this.setOptions(group.options);
+};
+
+/**
+ * return the legend entree for this group.
+ *
+ * @param {number} iconWidth
+ * @param {number} iconHeight
+ * @param {{svg: (*|Element), svgElements: Object, options: Object, groups: Array.<Object>}} framework
+ * @param {number} x
+ * @param {number} y
+ * @returns {{icon: (*|Element), label: (*|string), orientation: *}}
+ */
+GraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) {
+  if (framework == undefined || framework == null) {
+    var svg = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+    framework = { svg: svg, svgElements: {}, options: this.options, groups: [this] };
+  }
+  if (x == undefined || x == null) {
+    x = 0;
+  }
+  if (y == undefined || y == null) {
+    y = 0.5 * iconHeight;
+  }
+  switch (this.options.style) {
+    case "line":
+      Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework);
+      break;
+    case "points": //explicit no break
+    case "point":
+      Points.drawIcon(this, x, y, iconWidth, iconHeight, framework);
+      break;
+    case "bar":
+      Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework);
+      break;
+  }
+  return { icon: framework.svg, label: this.content, orientation: this.options.yAxisOrientation };
+};
+
+GraphGroup.prototype.getYRange = function (groupData) {
+  var yMin = groupData[0].y;
+  var yMax = groupData[0].y;
+  for (var j = 0; j < groupData.length; j++) {
+    yMin = yMin > groupData[j].y ? groupData[j].y : yMin;
+    yMax = yMax < groupData[j].y ? groupData[j].y : yMax;
+  }
+  return { min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation };
+};
+
+module.exports = GraphGroup;
+
+/***/ }),
+/* 110 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var DOMutil = __webpack_require__(14);
+var Points = __webpack_require__(72);
+
+/**
+ *
+ * @param {vis.GraphGroup.id} groupId
+ * @param {Object} options   // TODO: Describe options
+ * @constructor Bargraph
+ */
+function Bargraph(groupId, options) {// eslint-disable-line no-unused-vars
+}
+
+Bargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {
+  var fillHeight = iconHeight * 0.5;
+  var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg);
+  outline.setAttributeNS(null, "x", x);
+  outline.setAttributeNS(null, "y", y - fillHeight);
+  outline.setAttributeNS(null, "width", iconWidth);
+  outline.setAttributeNS(null, "height", 2 * fillHeight);
+  outline.setAttributeNS(null, "class", "vis-outline");
+
+  var barWidth = Math.round(0.3 * iconWidth);
+  var originalWidth = group.options.barChart.width;
+  var scale = originalWidth / barWidth;
+  var bar1Height = Math.round(0.4 * iconHeight);
+  var bar2Height = Math.round(0.75 * iconHeight);
+
+  var offset = Math.round((iconWidth - 2 * barWidth) / 3);
+
+  DOMutil.drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);
+  DOMutil.drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);
+
+  if (group.options.drawPoints.enabled == true) {
+    var groupTemplate = {
+      style: group.options.drawPoints.style,
+      styles: group.options.drawPoints.styles,
+      size: group.options.drawPoints.size / scale,
+      className: group.className
+    };
+    DOMutil.drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg);
+    DOMutil.drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg);
+  }
+};
+
+/**
+ * draw a bar graph
+ *
+ * @param {Array.<vis.GraphGroup.id>} groupIds
+ * @param {Object} processedGroupData
+ * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework
+ */
+Bargraph.draw = function (groupIds, processedGroupData, framework) {
+  var combinedData = [];
+  var intersections = {};
+  var coreDistance;
+  var key, drawData;
+  var group;
+  var i, j;
+  var barPoints = 0;
+
+  // combine all barchart data
+  for (i = 0; i < groupIds.length; i++) {
+    group = framework.groups[groupIds[i]];
+    if (group.options.style === 'bar') {
+      if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) {
+        for (j = 0; j < processedGroupData[groupIds[i]].length; j++) {
+          combinedData.push({
+            screen_x: processedGroupData[groupIds[i]][j].screen_x,
+            screen_end: processedGroupData[groupIds[i]][j].screen_end,
+            screen_y: processedGroupData[groupIds[i]][j].screen_y,
+            x: processedGroupData[groupIds[i]][j].x,
+            end: processedGroupData[groupIds[i]][j].end,
+            y: processedGroupData[groupIds[i]][j].y,
+            groupId: groupIds[i],
+            label: processedGroupData[groupIds[i]][j].label
+          });
+          barPoints += 1;
+        }
+      }
+    }
+  }
+
+  if (barPoints === 0) {
+    return;
+  }
+
+  // sort by time and by group
+  combinedData.sort(function (a, b) {
+    if (a.screen_x === b.screen_x) {
+      return a.groupId < b.groupId ? -1 : 1;
+    } else {
+      return a.screen_x - b.screen_x;
+    }
+  });
+
+  // get intersections
+  Bargraph._getDataIntersections(intersections, combinedData);
+
+  // plot barchart
+  for (i = 0; i < combinedData.length; i++) {
+    group = framework.groups[combinedData[i].groupId];
+    var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width;
+
+    key = combinedData[i].screen_x;
+    var heightOffset = 0;
+    if (intersections[key] === undefined) {
+      if (i + 1 < combinedData.length) {
+        coreDistance = Math.abs(combinedData[i + 1].screen_x - key);
+      }
+      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);
+    } else {
+      var nextKey = i + (intersections[key].amount - intersections[key].resolved);
+      if (nextKey < combinedData.length) {
+        coreDistance = Math.abs(combinedData[nextKey].screen_x - key);
+      }
+      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);
+      intersections[key].resolved += 1;
+
+      if (group.options.stack === true && group.options.excludeFromStacking !== true) {
+        if (combinedData[i].screen_y < group.zeroPosition) {
+          heightOffset = intersections[key].accumulatedNegative;
+          intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y;
+        } else {
+          heightOffset = intersections[key].accumulatedPositive;
+          intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y;
+        }
+      } else if (group.options.barChart.sideBySide === true) {
+        drawData.width = drawData.width / intersections[key].amount;
+        drawData.offset += intersections[key].resolved * drawData.width - 0.5 * drawData.width * (intersections[key].amount + 1);
+      }
+    }
+
+    var dataWidth = drawData.width;
+    var start = combinedData[i].screen_x;
+
+    // are we drawing explicit boxes? (we supplied an end value)
+    if (combinedData[i].screen_end != undefined) {
+      dataWidth = combinedData[i].screen_end - combinedData[i].screen_x;
+      start += dataWidth * 0.5;
+    } else {
+      start += drawData.offset;
+    }
+
+    DOMutil.drawBar(start, combinedData[i].screen_y - heightOffset, dataWidth, group.zeroPosition - combinedData[i].screen_y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);
+
+    // draw points
+    if (group.options.drawPoints.enabled === true) {
+      var pointData = {
+        screen_x: combinedData[i].screen_x,
+        screen_y: combinedData[i].screen_y - heightOffset,
+        x: combinedData[i].x,
+        y: combinedData[i].y,
+        groupId: combinedData[i].groupId,
+        label: combinedData[i].label
+      };
+      Points.draw([pointData], group, framework, drawData.offset);
+      //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg);
+    }
+  }
+};
+
+/**
+ * Fill the intersections object with counters of how many datapoints share the same x coordinates
+ * @param {Object} intersections
+ * @param {Array.<Object>} combinedData
+ * @private
+ */
+Bargraph._getDataIntersections = function (intersections, combinedData) {
+  // get intersections
+  var coreDistance;
+  for (var i = 0; i < combinedData.length; i++) {
+    if (i + 1 < combinedData.length) {
+      coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x);
+    }
+    if (i > 0) {
+      coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x));
+    }
+    if (coreDistance === 0) {
+      if (intersections[combinedData[i].screen_x] === undefined) {
+        intersections[combinedData[i].screen_x] = {
+          amount: 0,
+          resolved: 0,
+          accumulatedPositive: 0,
+          accumulatedNegative: 0
+        };
+      }
+      intersections[combinedData[i].screen_x].amount += 1;
+    }
+  }
+};
+
+/**
+ * Get the width and offset for bargraphs based on the coredistance between datapoints
+ *
+ * @param {number} coreDistance
+ * @param {vis.Group} group
+ * @param {number} minWidth
+ * @returns {{width: number, offset: number}}
+ * @private
+ */
+Bargraph._getSafeDrawData = function (coreDistance, group, minWidth) {
+  var width, offset;
+  if (coreDistance < group.options.barChart.width && coreDistance > 0) {
+    width = coreDistance < minWidth ? minWidth : coreDistance;
+
+    offset = 0; // recalculate offset with the new width;
+    if (group.options.barChart.align === 'left') {
+      offset -= 0.5 * coreDistance;
+    } else if (group.options.barChart.align === 'right') {
+      offset += 0.5 * coreDistance;
+    }
+  } else {
+    // default settings
+    width = group.options.barChart.width;
+    offset = 0;
+    if (group.options.barChart.align === 'left') {
+      offset -= 0.5 * group.options.barChart.width;
+    } else if (group.options.barChart.align === 'right') {
+      offset += 0.5 * group.options.barChart.width;
+    }
+  }
+
+  return { width: width, offset: offset };
+};
+
+Bargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) {
+  if (combinedData.length > 0) {
+    // sort by time and by group
+    combinedData.sort(function (a, b) {
+      if (a.screen_x === b.screen_x) {
+        return a.groupId < b.groupId ? -1 : 1;
+      } else {
+        return a.screen_x - b.screen_x;
+      }
+    });
+    var intersections = {};
+
+    Bargraph._getDataIntersections(intersections, combinedData);
+    groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData);
+    groupRanges[groupLabel].yAxisOrientation = orientation;
+    groupIds.push(groupLabel);
+  }
+};
+
+Bargraph._getStackedYRange = function (intersections, combinedData) {
+  var key;
+  var yMin = combinedData[0].screen_y;
+  var yMax = combinedData[0].screen_y;
+  for (var i = 0; i < combinedData.length; i++) {
+    key = combinedData[i].screen_x;
+    if (intersections[key] === undefined) {
+      yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin;
+      yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax;
+    } else {
+      if (combinedData[i].screen_y < 0) {
+        intersections[key].accumulatedNegative += combinedData[i].screen_y;
+      } else {
+        intersections[key].accumulatedPositive += combinedData[i].screen_y;
+      }
+    }
+  }
+  for (var xpos in intersections) {
+    if (intersections.hasOwnProperty(xpos)) {
+      yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin;
+      yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin;
+      yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax;
+      yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax;
+    }
+  }
+
+  return { min: yMin, max: yMax };
+};
+
+module.exports = Bargraph;
+
+/***/ }),
+/* 111 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var DOMutil = __webpack_require__(14);
+
+/**
+ *
+ * @param {vis.GraphGroup.id} groupId
+ * @param {Object} options   // TODO: Describe options
+ * @constructor Line
+ */
+function Line(groupId, options) {// eslint-disable-line no-unused-vars
+}
+
+Line.calcPath = function (dataset, group) {
+    if (dataset != null) {
+        if (dataset.length > 0) {
+            var d = [];
+
+            // construct path from dataset
+            if (group.options.interpolation.enabled == true) {
+                d = Line._catmullRom(dataset, group);
+            } else {
+                d = Line._linear(dataset);
+            }
+            return d;
+        }
+    }
+};
+
+Line.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {
+    var fillHeight = iconHeight * 0.5;
+    var path, fillPath;
+
+    var outline = DOMutil.getSVGElement("rect", framework.svgElements, framework.svg);
+    outline.setAttributeNS(null, "x", x);
+    outline.setAttributeNS(null, "y", y - fillHeight);
+    outline.setAttributeNS(null, "width", iconWidth);
+    outline.setAttributeNS(null, "height", 2 * fillHeight);
+    outline.setAttributeNS(null, "class", "vis-outline");
+
+    path = DOMutil.getSVGElement("path", framework.svgElements, framework.svg);
+    path.setAttributeNS(null, "class", group.className);
+    if (group.style !== undefined) {
+        path.setAttributeNS(null, "style", group.style);
+    }
+
+    path.setAttributeNS(null, "d", "M" + x + "," + y + " L" + (x + iconWidth) + "," + y + "");
+    if (group.options.shaded.enabled == true) {
+        fillPath = DOMutil.getSVGElement("path", framework.svgElements, framework.svg);
+        if (group.options.shaded.orientation == 'top') {
+            fillPath.setAttributeNS(null, "d", "M" + x + ", " + (y - fillHeight) + "L" + x + "," + y + " L" + (x + iconWidth) + "," + y + " L" + (x + iconWidth) + "," + (y - fillHeight));
+        } else {
+            fillPath.setAttributeNS(null, "d", "M" + x + "," + y + " " + "L" + x + "," + (y + fillHeight) + " " + "L" + (x + iconWidth) + "," + (y + fillHeight) + "L" + (x + iconWidth) + "," + y);
+        }
+        fillPath.setAttributeNS(null, "class", group.className + " vis-icon-fill");
+        if (group.options.shaded.style !== undefined && group.options.shaded.style !== "") {
+            fillPath.setAttributeNS(null, "style", group.options.shaded.style);
+        }
+    }
+
+    if (group.options.drawPoints.enabled == true) {
+        var groupTemplate = {
+            style: group.options.drawPoints.style,
+            styles: group.options.drawPoints.styles,
+            size: group.options.drawPoints.size,
+            className: group.className
+        };
+        DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg);
+    }
+};
+
+Line.drawShading = function (pathArray, group, subPathArray, framework) {
+    // append shading to the path
+    if (group.options.shaded.enabled == true) {
+        var svgHeight = Number(framework.svg.style.height.replace('px', ''));
+        var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);
+        var type = "L";
+        if (group.options.interpolation.enabled == true) {
+            type = "C";
+        }
+        var dFill;
+        var zero = 0;
+        if (group.options.shaded.orientation == 'top') {
+            zero = 0;
+        } else if (group.options.shaded.orientation == 'bottom') {
+            zero = svgHeight;
+        } else {
+            zero = Math.min(Math.max(0, group.zeroPosition), svgHeight);
+        }
+        if (group.options.shaded.orientation == 'group' && subPathArray != null && subPathArray != undefined) {
+            dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' L' + subPathArray[subPathArray.length - 1][0] + "," + subPathArray[subPathArray.length - 1][1] + " " + this.serializePath(subPathArray, type, true) + subPathArray[0][0] + "," + subPathArray[0][1] + " Z";
+        } else {
+            dFill = 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false) + ' V' + zero + ' H' + pathArray[0][0] + " Z";
+        }
+
+        fillPath.setAttributeNS(null, 'class', group.className + ' vis-fill');
+        if (group.options.shaded.style !== undefined) {
+            fillPath.setAttributeNS(null, 'style', group.options.shaded.style);
+        }
+        fillPath.setAttributeNS(null, 'd', dFill);
+    }
+};
+
+/**
+ * draw a line graph
+ *
+ * @param {Array.<Object>} pathArray
+ * @param {vis.Group} group
+ * @param {{svg: Object, svgElements: Array.<Object>, options: Object, groups: Array.<vis.Group>}} framework
+ */
+Line.draw = function (pathArray, group, framework) {
+    if (pathArray != null && pathArray != undefined) {
+        var path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);
+        path.setAttributeNS(null, "class", group.className);
+        if (group.style !== undefined) {
+            path.setAttributeNS(null, "style", group.style);
+        }
+
+        var type = "L";
+        if (group.options.interpolation.enabled == true) {
+            type = "C";
+        }
+        // copy properties to path for drawing.
+        path.setAttributeNS(null, 'd', 'M' + pathArray[0][0] + "," + pathArray[0][1] + " " + this.serializePath(pathArray, type, false));
+    }
+};
+
+Line.serializePath = function (pathArray, type, inverse) {
+    if (pathArray.length < 2) {
+        //Too little data to create a path.
+        return "";
+    }
+    var d = type;
+    var i;
+    if (inverse) {
+        for (i = pathArray.length - 2; i > 0; i--) {
+            d += pathArray[i][0] + "," + pathArray[i][1] + " ";
+        }
+    } else {
+        for (i = 1; i < pathArray.length; i++) {
+            d += pathArray[i][0] + "," + pathArray[i][1] + " ";
+        }
+    }
+    return d;
+};
+
+/**
+ * This uses an uniform parametrization of the interpolation algorithm:
+ * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al.
+ * @param {Array.<Object>} data
+ * @returns {string}
+ * @private
+ */
+Line._catmullRomUniform = function (data) {
+    // catmull rom
+    var p0, p1, p2, p3, bp1, bp2;
+    var d = [];
+    d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);
+    var normalization = 1 / 6;
+    var length = data.length;
+    for (var i = 0; i < length - 1; i++) {
+
+        p0 = i == 0 ? data[0] : data[i - 1];
+        p1 = data[i];
+        p2 = data[i + 1];
+        p3 = i + 2 < length ? data[i + 2] : p2;
+
+        // Catmull-Rom to Cubic Bezier conversion matrix
+        //    0       1       0       0
+        //  -1/6      1      1/6      0
+        //    0      1/6      1     -1/6
+        //    0       0       1       0
+
+        //    bp0 = { x: p1.x,                               y: p1.y };
+        bp1 = {
+            screen_x: (-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization,
+            screen_y: (-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization
+        };
+        bp2 = {
+            screen_x: (p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization,
+            screen_y: (p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization
+        };
+        //    bp0 = { x: p2.x,                               y: p2.y };
+
+        d.push([bp1.screen_x, bp1.screen_y]);
+        d.push([bp2.screen_x, bp2.screen_y]);
+        d.push([p2.screen_x, p2.screen_y]);
+    }
+
+    return d;
+};
+
+/**
+ * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.
+ * By default, the centripetal parameterization is used because this gives the nicest results.
+ * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.
+ *
+ * One optimization can be used to reuse distances since this is a sliding window approach.
+ * @param {Array.<Object>} data
+ * @param {vis.GraphGroup} group
+ * @returns {string}
+ * @private
+ */
+Line._catmullRom = function (data, group) {
+    var alpha = group.options.interpolation.alpha;
+    if (alpha == 0 || alpha === undefined) {
+        return this._catmullRomUniform(data);
+    } else {
+        var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;
+        var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;
+        var d = [];
+        d.push([Math.round(data[0].screen_x), Math.round(data[0].screen_y)]);
+        var length = data.length;
+        for (var i = 0; i < length - 1; i++) {
+
+            p0 = i == 0 ? data[0] : data[i - 1];
+            p1 = data[i];
+            p2 = data[i + 1];
+            p3 = i + 2 < length ? data[i + 2] : p2;
+
+            d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2));
+            d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2));
+            d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2));
+
+            // Catmull-Rom to Cubic Bezier conversion matrix
+
+            // A = 2d1^2a + 3d1^a * d2^a + d3^2a
+            // B = 2d3^2a + 3d3^a * d2^a + d2^2a
+
+            // [   0             1            0          0          ]
+            // [   -d2^2a /N     A/N          d1^2a /N   0          ]
+            // [   0             d3^2a /M     B/M        -d2^2a /M  ]
+            // [   0             0            1          0          ]
+
+            d3powA = Math.pow(d3, alpha);
+            d3pow2A = Math.pow(d3, 2 * alpha);
+            d2powA = Math.pow(d2, alpha);
+            d2pow2A = Math.pow(d2, 2 * alpha);
+            d1powA = Math.pow(d1, alpha);
+            d1pow2A = Math.pow(d1, 2 * alpha);
+
+            A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;
+            B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;
+            N = 3 * d1powA * (d1powA + d2powA);
+            if (N > 0) {
+                N = 1 / N;
+            }
+            M = 3 * d3powA * (d3powA + d2powA);
+            if (M > 0) {
+                M = 1 / M;
+            }
+
+            bp1 = {
+                screen_x: (-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N,
+                screen_y: (-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N
+            };
+
+            bp2 = {
+                screen_x: (d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M,
+                screen_y: (d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M
+            };
+
+            if (bp1.screen_x == 0 && bp1.screen_y == 0) {
+                bp1 = p1;
+            }
+            if (bp2.screen_x == 0 && bp2.screen_y == 0) {
+                bp2 = p2;
+            }
+            d.push([bp1.screen_x, bp1.screen_y]);
+            d.push([bp2.screen_x, bp2.screen_y]);
+            d.push([p2.screen_x, p2.screen_y]);
+        }
+
+        return d;
+    }
+};
+
+/**
+ * this generates the SVG path for a linear drawing between datapoints.
+ * @param {Array.<Object>} data
+ * @returns {string}
+ * @private
+ */
+Line._linear = function (data) {
+    // linear
+    var d = [];
+    for (var i = 0; i < data.length; i++) {
+        d.push([data[i].screen_x, data[i].screen_y]);
+    }
+    return d;
+};
+
+module.exports = Line;
+
+/***/ }),
+/* 112 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DOMutil = __webpack_require__(14);
+var Component = __webpack_require__(16);
+
+/**
+ * Legend for Graph2d
+ *
+ * @param {vis.Graph2d.body} body
+ * @param {vis.Graph2d.options} options
+ * @param {number} side
+ * @param {vis.LineGraph.options} linegraphOptions
+ * @constructor Legend
+ * @extends Component
+ */
+function Legend(body, options, side, linegraphOptions) {
+  this.body = body;
+  this.defaultOptions = {
+    enabled: false,
+    icons: true,
+    iconSize: 20,
+    iconSpacing: 6,
+    left: {
+      visible: true,
+      position: 'top-left' // top/bottom - left,center,right
+    },
+    right: {
+      visible: true,
+      position: 'top-right' // top/bottom - left,center,right
+    }
+  };
+
+  this.side = side;
+  this.options = util.extend({}, this.defaultOptions);
+  this.linegraphOptions = linegraphOptions;
+
+  this.svgElements = {};
+  this.dom = {};
+  this.groups = {};
+  this.amountOfGroups = 0;
+  this._create();
+  this.framework = { svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups };
+
+  this.setOptions(options);
+}
+
+Legend.prototype = new Component();
+
+Legend.prototype.clear = function () {
+  this.groups = {};
+  this.amountOfGroups = 0;
+};
+
+Legend.prototype.addGroup = function (label, graphOptions) {
+
+  // Include a group only if the group option 'excludeFromLegend: false' is not set.
+  if (graphOptions.options.excludeFromLegend != true) {
+    if (!this.groups.hasOwnProperty(label)) {
+      this.groups[label] = graphOptions;
+    }
+    this.amountOfGroups += 1;
+  }
+};
+
+Legend.prototype.updateGroup = function (label, graphOptions) {
+  this.groups[label] = graphOptions;
+};
+
+Legend.prototype.removeGroup = function (label) {
+  if (this.groups.hasOwnProperty(label)) {
+    delete this.groups[label];
+    this.amountOfGroups -= 1;
+  }
+};
+
+Legend.prototype._create = function () {
+  this.dom.frame = document.createElement('div');
+  this.dom.frame.className = 'vis-legend';
+  this.dom.frame.style.position = "absolute";
+  this.dom.frame.style.top = "10px";
+  this.dom.frame.style.display = "block";
+
+  this.dom.textArea = document.createElement('div');
+  this.dom.textArea.className = 'vis-legend-text';
+  this.dom.textArea.style.position = "relative";
+  this.dom.textArea.style.top = "0px";
+
+  this.svg = document.createElementNS('http://www.w3.org/2000/svg', "svg");
+  this.svg.style.position = 'absolute';
+  this.svg.style.top = 0 + 'px';
+  this.svg.style.width = this.options.iconSize + 5 + 'px';
+  this.svg.style.height = '100%';
+
+  this.dom.frame.appendChild(this.svg);
+  this.dom.frame.appendChild(this.dom.textArea);
+};
+
+/**
+ * Hide the component from the DOM
+ */
+Legend.prototype.hide = function () {
+  // remove the frame containing the items
+  if (this.dom.frame.parentNode) {
+    this.dom.frame.parentNode.removeChild(this.dom.frame);
+  }
+};
+
+/**
+ * Show the component in the DOM (when not already visible).
+ */
+Legend.prototype.show = function () {
+  // show frame containing the items
+  if (!this.dom.frame.parentNode) {
+    this.body.dom.center.appendChild(this.dom.frame);
+  }
+};
+
+Legend.prototype.setOptions = function (options) {
+  var fields = ['enabled', 'orientation', 'icons', 'left', 'right'];
+  util.selectiveDeepExtend(fields, this.options, options);
+};
+
+Legend.prototype.redraw = function () {
+  var activeGroups = 0;
+  var groupArray = (0, _keys2['default'])(this.groups);
+  groupArray.sort(function (a, b) {
+    return a < b ? -1 : 1;
+  });
+
+  for (var i = 0; i < groupArray.length; i++) {
+    var groupId = groupArray[i];
+    if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {
+      activeGroups++;
+    }
+  }
+
+  if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) {
+    this.hide();
+  } else {
+    this.show();
+    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') {
+      this.dom.frame.style.left = '4px';
+      this.dom.frame.style.textAlign = "left";
+      this.dom.textArea.style.textAlign = "left";
+      this.dom.textArea.style.left = this.options.iconSize + 15 + 'px';
+      this.dom.textArea.style.right = '';
+      this.svg.style.left = 0 + 'px';
+      this.svg.style.right = '';
+    } else {
+      this.dom.frame.style.right = '4px';
+      this.dom.frame.style.textAlign = "right";
+      this.dom.textArea.style.textAlign = "right";
+      this.dom.textArea.style.right = this.options.iconSize + 15 + 'px';
+      this.dom.textArea.style.left = '';
+      this.svg.style.right = 0 + 'px';
+      this.svg.style.left = '';
+    }
+
+    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') {
+      this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace("px", "")) + 'px';
+      this.dom.frame.style.bottom = '';
+    } else {
+      var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height;
+      this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace("px", "")) + 'px';
+      this.dom.frame.style.top = '';
+    }
+
+    if (this.options.icons == false) {
+      this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px';
+      this.dom.textArea.style.right = '';
+      this.dom.textArea.style.left = '';
+      this.svg.style.width = '0px';
+    } else {
+      this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px';
+      this.drawLegendIcons();
+    }
+
+    var content = '';
+    for (i = 0; i < groupArray.length; i++) {
+      groupId = groupArray[i];
+      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {
+        content += this.groups[groupId].content + '<br />';
+      }
+    }
+    this.dom.textArea.innerHTML = content;
+    this.dom.textArea.style.lineHeight = 0.75 * this.options.iconSize + this.options.iconSpacing + 'px';
+  }
+};
+
+Legend.prototype.drawLegendIcons = function () {
+  if (this.dom.frame.parentNode) {
+    var groupArray = (0, _keys2['default'])(this.groups);
+    groupArray.sort(function (a, b) {
+      return a < b ? -1 : 1;
+    });
+
+    // this resets the elements so the order is maintained
+    DOMutil.resetElements(this.svgElements);
+
+    var padding = window.getComputedStyle(this.dom.frame).paddingTop;
+    var iconOffset = Number(padding.replace('px', ''));
+    var x = iconOffset;
+    var iconWidth = this.options.iconSize;
+    var iconHeight = 0.75 * this.options.iconSize;
+    var y = iconOffset + 0.5 * iconHeight + 3;
+
+    this.svg.style.width = iconWidth + 5 + iconOffset + 'px';
+
+    for (var i = 0; i < groupArray.length; i++) {
+      var groupId = groupArray[i];
+      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {
+        this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);
+        y += iconHeight + this.options.iconSpacing;
+      }
+    }
+  }
+};
+
+module.exports = Legend;
+
+/***/ }),
+/* 113 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * This object contains all possible options. It will check if the types are correct, if required if the option is one
+ * of the allowed values.
+ *
+ * __any__ means that the name of the property does not matter.
+ * __type__ is a required field for all objects and contains the allowed types of all objects
+ */
+var string = 'string';
+var bool = 'boolean';
+var number = 'number';
+var array = 'array';
+var date = 'date';
+var object = 'object'; // should only be in a __type__ property
+var dom = 'dom';
+var moment = 'moment';
+var any = 'any';
+
+var allOptions = {
+  configure: {
+    enabled: { 'boolean': bool },
+    filter: { 'boolean': bool, 'function': 'function' },
+    container: { dom: dom },
+    __type__: { object: object, 'boolean': bool, 'function': 'function' }
+  },
+
+  //globals :
+  yAxisOrientation: { string: ['left', 'right'] },
+  defaultGroup: { string: string },
+  sort: { 'boolean': bool },
+  sampling: { 'boolean': bool },
+  stack: { 'boolean': bool },
+  graphHeight: { string: string, number: number },
+  shaded: {
+    enabled: { 'boolean': bool },
+    orientation: { string: ['bottom', 'top', 'zero', 'group'] }, // top, bottom, zero, group
+    groupId: { object: object },
+    __type__: { 'boolean': bool, object: object }
+  },
+  style: { string: ['line', 'bar', 'points'] }, // line, bar
+  barChart: {
+    width: { number: number },
+    minWidth: { number: number },
+    sideBySide: { 'boolean': bool },
+    align: { string: ['left', 'center', 'right'] },
+    __type__: { object: object }
+  },
+  interpolation: {
+    enabled: { 'boolean': bool },
+    parametrization: { string: ['centripetal', 'chordal', 'uniform'] }, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)
+    alpha: { number: number },
+    __type__: { object: object, 'boolean': bool }
+  },
+  drawPoints: {
+    enabled: { 'boolean': bool },
+    onRender: { 'function': 'function' },
+    size: { number: number },
+    style: { string: ['square', 'circle'] }, // square, circle
+    __type__: { object: object, 'boolean': bool, 'function': 'function' }
+  },
+  dataAxis: {
+    showMinorLabels: { 'boolean': bool },
+    showMajorLabels: { 'boolean': bool },
+    icons: { 'boolean': bool },
+    width: { string: string, number: number },
+    visible: { 'boolean': bool },
+    alignZeros: { 'boolean': bool },
+    left: {
+      range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } },
+      format: { 'function': 'function' },
+      title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } },
+      __type__: { object: object }
+    },
+    right: {
+      range: { min: { number: number, 'undefined': 'undefined' }, max: { number: number, 'undefined': 'undefined' }, __type__: { object: object } },
+      format: { 'function': 'function' },
+      title: { text: { string: string, number: number, 'undefined': 'undefined' }, style: { string: string, 'undefined': 'undefined' }, __type__: { object: object } },
+      __type__: { object: object }
+    },
+    __type__: { object: object }
+  },
+  legend: {
+    enabled: { 'boolean': bool },
+    icons: { 'boolean': bool },
+    left: {
+      visible: { 'boolean': bool },
+      position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] },
+      __type__: { object: object }
+    },
+    right: {
+      visible: { 'boolean': bool },
+      position: { string: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] },
+      __type__: { object: object }
+    },
+    __type__: { object: object, 'boolean': bool }
+  },
+  groups: {
+    visibility: { any: any },
+    __type__: { object: object }
+  },
+
+  autoResize: { 'boolean': bool },
+  throttleRedraw: { number: number }, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511
+  clickToUse: { 'boolean': bool },
+  end: { number: number, date: date, string: string, moment: moment },
+  format: {
+    minorLabels: {
+      millisecond: { string: string, 'undefined': 'undefined' },
+      second: { string: string, 'undefined': 'undefined' },
+      minute: { string: string, 'undefined': 'undefined' },
+      hour: { string: string, 'undefined': 'undefined' },
+      weekday: { string: string, 'undefined': 'undefined' },
+      day: { string: string, 'undefined': 'undefined' },
+      month: { string: string, 'undefined': 'undefined' },
+      year: { string: string, 'undefined': 'undefined' },
+      __type__: { object: object }
+    },
+    majorLabels: {
+      millisecond: { string: string, 'undefined': 'undefined' },
+      second: { string: string, 'undefined': 'undefined' },
+      minute: { string: string, 'undefined': 'undefined' },
+      hour: { string: string, 'undefined': 'undefined' },
+      weekday: { string: string, 'undefined': 'undefined' },
+      day: { string: string, 'undefined': 'undefined' },
+      month: { string: string, 'undefined': 'undefined' },
+      year: { string: string, 'undefined': 'undefined' },
+      __type__: { object: object }
+    },
+    __type__: { object: object }
+  },
+  moment: { 'function': 'function' },
+  height: { string: string, number: number },
+  hiddenDates: {
+    start: { date: date, number: number, string: string, moment: moment },
+    end: { date: date, number: number, string: string, moment: moment },
+    repeat: { string: string },
+    __type__: { object: object, array: array }
+  },
+  locale: { string: string },
+  locales: {
+    __any__: { any: any },
+    __type__: { object: object }
+  },
+  max: { date: date, number: number, string: string, moment: moment },
+  maxHeight: { number: number, string: string },
+  maxMinorChars: { number: number },
+  min: { date: date, number: number, string: string, moment: moment },
+  minHeight: { number: number, string: string },
+  moveable: { 'boolean': bool },
+  multiselect: { 'boolean': bool },
+  orientation: { string: string },
+  showCurrentTime: { 'boolean': bool },
+  showMajorLabels: { 'boolean': bool },
+  showMinorLabels: { 'boolean': bool },
+  start: { date: date, number: number, string: string, moment: moment },
+  timeAxis: {
+    scale: { string: string, 'undefined': 'undefined' },
+    step: { number: number, 'undefined': 'undefined' },
+    __type__: { object: object }
+  },
+  width: { string: string, number: number },
+  zoomable: { 'boolean': bool },
+  zoomKey: { string: ['ctrlKey', 'altKey', 'metaKey', ''] },
+  zoomMax: { number: number },
+  zoomMin: { number: number },
+  zIndex: { number: number },
+  __type__: { object: object }
+};
+
+var configureOptions = {
+  global: {
+    //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly
+    sort: true,
+    sampling: true,
+    stack: false,
+    shaded: {
+      enabled: false,
+      orientation: ['zero', 'top', 'bottom', 'group'] // zero, top, bottom
+    },
+    style: ['line', 'bar', 'points'], // line, bar
+    barChart: {
+      width: [50, 5, 100, 5],
+      minWidth: [50, 5, 100, 5],
+      sideBySide: false,
+      align: ['left', 'center', 'right'] // left, center, right
+    },
+    interpolation: {
+      enabled: true,
+      parametrization: ['centripetal', 'chordal', 'uniform'] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)
+    },
+    drawPoints: {
+      enabled: true,
+      size: [6, 2, 30, 1],
+      style: ['square', 'circle'] // square, circle
+    },
+    dataAxis: {
+      showMinorLabels: true,
+      showMajorLabels: true,
+      icons: false,
+      width: [40, 0, 200, 1],
+      visible: true,
+      alignZeros: true,
+      left: {
+        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},
+        //format: function (value) {return value;},
+        title: { text: '', style: '' }
+      },
+      right: {
+        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},
+        //format: function (value) {return value;},
+        title: { text: '', style: '' }
+      }
+    },
+    legend: {
+      enabled: false,
+      icons: true,
+      left: {
+        visible: true,
+        position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right
+      },
+      right: {
+        visible: true,
+        position: ['top-right', 'bottom-right', 'top-left', 'bottom-left'] // top/bottom - left,right
+      }
+    },
+
+    autoResize: true,
+    clickToUse: false,
+    end: '',
+    format: {
+      minorLabels: {
+        millisecond: 'SSS',
+        second: 's',
+        minute: 'HH:mm',
+        hour: 'HH:mm',
+        weekday: 'ddd D',
+        day: 'D',
+        month: 'MMM',
+        year: 'YYYY'
+      },
+      majorLabels: {
+        millisecond: 'HH:mm:ss',
+        second: 'D MMMM HH:mm',
+        minute: 'ddd D MMMM',
+        hour: 'ddd D MMMM',
+        weekday: 'MMMM YYYY',
+        day: 'MMMM YYYY',
+        month: 'YYYY',
+        year: ''
+      }
+    },
+
+    height: '',
+    locale: '',
+    max: '',
+    maxHeight: '',
+    maxMinorChars: [7, 0, 20, 1],
+    min: '',
+    minHeight: '',
+    moveable: true,
+    orientation: ['both', 'bottom', 'top'],
+    showCurrentTime: false,
+    showMajorLabels: true,
+    showMinorLabels: true,
+    start: '',
+    width: '100%',
+    zoomable: true,
+    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],
+    zoomMax: [315360000000000, 10, 315360000000000, 1],
+    zoomMin: [10, 10, 315360000000000, 1],
+    zIndex: 0
+  }
+};
+
+exports.allOptions = allOptions;
+exports.configureOptions = configureOptions;
+
+/***/ }),
+/* 114 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _create = __webpack_require__(29);
+
+var _create2 = _interopRequireDefault(_create);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Parse a text source containing data in DOT language into a JSON object.
+ * The object contains two lists: one with nodes and one with edges.
+ *
+ * DOT language reference: http://www.graphviz.org/doc/info/lang.html
+ *
+ * DOT language attributes: http://graphviz.org/content/attrs
+ *
+ * @param {string} data     Text containing a graph in DOT-notation
+ * @return {Object} graph   An object containing two parameters:
+ *                          {Object[]} nodes
+ *                          {Object[]} edges
+ *
+ * -------------------------------------------
+ * TODO
+ * ====
+ *
+ * For label handling, this is an incomplete implementation. From docs (quote #3015):
+ * 
+ * > the escape sequences "\n", "\l" and "\r" divide the label into lines, centered, 
+ * > left-justified, and right-justified, respectively.
+ *
+ * Source: http://www.graphviz.org/content/attrs#kescString
+ *
+ * > As another aid for readability, dot allows double-quoted strings to span multiple physical
+ * > lines using the standard C convention of a backslash immediately preceding a newline
+ * > character
+ * > In addition, double-quoted strings can be concatenated using a '+' operator.
+ * > As HTML strings can contain newline characters, which are used solely for formatting,
+ * > the language does not allow escaped newlines or concatenation operators to be used
+ * > within them.
+ *
+ * - Currently, only '\\n' is handled
+ * - Note that text explicitly says 'labels'; the dot parser currently handles escape
+ *   sequences in **all** strings.
+ */
+function parseDOT(data) {
+  dot = data;
+  return parseGraph();
+}
+
+// mapping of attributes from DOT (the keys) to vis.js (the values)
+var NODE_ATTR_MAPPING = {
+  'fontsize': 'font.size',
+  'fontcolor': 'font.color',
+  'labelfontcolor': 'font.color',
+  'fontname': 'font.face',
+  'color': ['color.border', 'color.background'],
+  'fillcolor': 'color.background',
+  'tooltip': 'title',
+  'labeltooltip': 'title'
+};
+var EDGE_ATTR_MAPPING = (0, _create2['default'])(NODE_ATTR_MAPPING);
+EDGE_ATTR_MAPPING.color = 'color.color';
+EDGE_ATTR_MAPPING.style = 'dashes';
+
+// token types enumeration
+var TOKENTYPE = {
+  NULL: 0,
+  DELIMITER: 1,
+  IDENTIFIER: 2,
+  UNKNOWN: 3
+};
+
+// map with all delimiters
+var DELIMITERS = {
+  '{': true,
+  '}': true,
+  '[': true,
+  ']': true,
+  ';': true,
+  '=': true,
+  ',': true,
+
+  '->': true,
+  '--': true
+};
+
+var dot = ''; // current dot file
+var index = 0; // current index in dot file
+var c = ''; // current token character in expr
+var token = ''; // current token
+var tokenType = TOKENTYPE.NULL; // type of the token
+
+/**
+ * Get the first character from the dot file.
+ * The character is stored into the char c. If the end of the dot file is
+ * reached, the function puts an empty string in c.
+ */
+function first() {
+  index = 0;
+  c = dot.charAt(0);
+}
+
+/**
+ * Get the next character from the dot file.
+ * The character is stored into the char c. If the end of the dot file is
+ * reached, the function puts an empty string in c.
+ */
+function next() {
+  index++;
+  c = dot.charAt(index);
+}
+
+/**
+ * Preview the next character from the dot file.
+ * @return {string} cNext
+ */
+function nextPreview() {
+  return dot.charAt(index + 1);
+}
+
+var regexAlphaNumeric = /[a-zA-Z_0-9.:#]/;
+/**
+ * Test whether given character is alphabetic or numeric
+ * @param {string} c
+ * @return {Boolean} isAlphaNumeric
+ */
+function isAlphaNumeric(c) {
+  return regexAlphaNumeric.test(c);
+}
+
+/**
+ * Merge all options of object b into object b
+ * @param {Object} a
+ * @param {Object} b
+ * @return {Object} a
+ */
+function merge(a, b) {
+  if (!a) {
+    a = {};
+  }
+
+  if (b) {
+    for (var name in b) {
+      if (b.hasOwnProperty(name)) {
+        a[name] = b[name];
+      }
+    }
+  }
+  return a;
+}
+
+/**
+ * Set a value in an object, where the provided parameter name can be a
+ * path with nested parameters. For example:
+ *
+ *     var obj = {a: 2};
+ *     setValue(obj, 'b.c', 3);     // obj = {a: 2, b: {c: 3}}
+ *
+ * @param {Object} obj
+ * @param {string} path  A parameter name or dot-separated parameter path,
+ *                      like "color.highlight.border".
+ * @param {*} value
+ */
+function setValue(obj, path, value) {
+  var keys = path.split('.');
+  var o = obj;
+  while (keys.length) {
+    var key = keys.shift();
+    if (keys.length) {
+      // this isn't the end point
+      if (!o[key]) {
+        o[key] = {};
+      }
+      o = o[key];
+    } else {
+      // this is the end point
+      o[key] = value;
+    }
+  }
+}
+
+/**
+ * Add a node to a graph object. If there is already a node with
+ * the same id, their attributes will be merged.
+ * @param {Object} graph
+ * @param {Object} node
+ */
+function addNode(graph, node) {
+  var i, len;
+  var current = null;
+
+  // find root graph (in case of subgraph)
+  var graphs = [graph]; // list with all graphs from current graph to root graph
+  var root = graph;
+  while (root.parent) {
+    graphs.push(root.parent);
+    root = root.parent;
+  }
+
+  // find existing node (at root level) by its id
+  if (root.nodes) {
+    for (i = 0, len = root.nodes.length; i < len; i++) {
+      if (node.id === root.nodes[i].id) {
+        current = root.nodes[i];
+        break;
+      }
+    }
+  }
+
+  if (!current) {
+    // this is a new node
+    current = {
+      id: node.id
+    };
+    if (graph.node) {
+      // clone default attributes
+      current.attr = merge(current.attr, graph.node);
+    }
+  }
+
+  // add node to this (sub)graph and all its parent graphs
+  for (i = graphs.length - 1; i >= 0; i--) {
+    var g = graphs[i];
+
+    if (!g.nodes) {
+      g.nodes = [];
+    }
+    if (g.nodes.indexOf(current) === -1) {
+      g.nodes.push(current);
+    }
+  }
+
+  // merge attributes
+  if (node.attr) {
+    current.attr = merge(current.attr, node.attr);
+  }
+}
+
+/**
+ * Add an edge to a graph object
+ * @param {Object} graph
+ * @param {Object} edge
+ */
+function addEdge(graph, edge) {
+  if (!graph.edges) {
+    graph.edges = [];
+  }
+  graph.edges.push(edge);
+  if (graph.edge) {
+    var attr = merge({}, graph.edge); // clone default attributes
+    edge.attr = merge(attr, edge.attr); // merge attributes
+  }
+}
+
+/**
+ * Create an edge to a graph object
+ * @param {Object} graph
+ * @param {string | number | Object} from
+ * @param {string | number | Object} to
+ * @param {string} type
+ * @param {Object | null} attr
+ * @return {Object} edge
+ */
+function createEdge(graph, from, to, type, attr) {
+  var edge = {
+    from: from,
+    to: to,
+    type: type
+  };
+
+  if (graph.edge) {
+    edge.attr = merge({}, graph.edge); // clone default attributes
+  }
+  edge.attr = merge(edge.attr || {}, attr); // merge attributes
+
+  return edge;
+}
+
+/**
+ * Get next token in the current dot file.
+ * The token and token type are available as token and tokenType
+ */
+function getToken() {
+  tokenType = TOKENTYPE.NULL;
+  token = '';
+
+  // skip over whitespaces
+  while (c === ' ' || c === '\t' || c === '\n' || c === '\r') {
+    // space, tab, enter
+    next();
+  }
+
+  do {
+    var isComment = false;
+
+    // skip comment
+    if (c === '#') {
+      // find the previous non-space character
+      var i = index - 1;
+      while (dot.charAt(i) === ' ' || dot.charAt(i) === '\t') {
+        i--;
+      }
+      if (dot.charAt(i) === '\n' || dot.charAt(i) === '') {
+        // the # is at the start of a line, this is indeed a line comment
+        while (c != '' && c != '\n') {
+          next();
+        }
+        isComment = true;
+      }
+    }
+    if (c === '/' && nextPreview() === '/') {
+      // skip line comment
+      while (c != '' && c != '\n') {
+        next();
+      }
+      isComment = true;
+    }
+    if (c === '/' && nextPreview() === '*') {
+      // skip block comment
+      while (c != '') {
+        if (c === '*' && nextPreview() === '/') {
+          // end of block comment found. skip these last two characters
+          next();
+          next();
+          break;
+        } else {
+          next();
+        }
+      }
+      isComment = true;
+    }
+
+    // skip over whitespaces
+    while (c === ' ' || c === '\t' || c === '\n' || c === '\r') {
+      // space, tab, enter
+      next();
+    }
+  } while (isComment);
+
+  // check for end of dot file
+  if (c === '') {
+    // token is still empty
+    tokenType = TOKENTYPE.DELIMITER;
+    return;
+  }
+
+  // check for delimiters consisting of 2 characters
+  var c2 = c + nextPreview();
+  if (DELIMITERS[c2]) {
+    tokenType = TOKENTYPE.DELIMITER;
+    token = c2;
+    next();
+    next();
+    return;
+  }
+
+  // check for delimiters consisting of 1 character
+  if (DELIMITERS[c]) {
+    tokenType = TOKENTYPE.DELIMITER;
+    token = c;
+    next();
+    return;
+  }
+
+  // check for an identifier (number or string)
+  // TODO: more precise parsing of numbers/strings (and the port separator ':')
+  if (isAlphaNumeric(c) || c === '-') {
+    token += c;
+    next();
+
+    while (isAlphaNumeric(c)) {
+      token += c;
+      next();
+    }
+    if (token === 'false') {
+      token = false; // convert to boolean
+    } else if (token === 'true') {
+      token = true; // convert to boolean
+    } else if (!isNaN(Number(token))) {
+      token = Number(token); // convert to number
+    }
+    tokenType = TOKENTYPE.IDENTIFIER;
+    return;
+  }
+
+  // check for a string enclosed by double quotes
+  if (c === '"') {
+    next();
+    while (c != '' && (c != '"' || c === '"' && nextPreview() === '"')) {
+      if (c === '"') {
+        // skip the escape character
+        token += c;
+        next();
+      } else if (c === '\\' && nextPreview() === 'n') {
+        // Honor a newline escape sequence
+        token += '\n';
+        next();
+      } else {
+        token += c;
+      }
+      next();
+    }
+    if (c != '"') {
+      throw newSyntaxError('End of string " expected');
+    }
+    next();
+    tokenType = TOKENTYPE.IDENTIFIER;
+    return;
+  }
+
+  // something unknown is found, wrong characters, a syntax error
+  tokenType = TOKENTYPE.UNKNOWN;
+  while (c != '') {
+    token += c;
+    next();
+  }
+  throw new SyntaxError('Syntax error in part "' + chop(token, 30) + '"');
+}
+
+/**
+ * Parse a graph.
+ * @returns {Object} graph
+ */
+function parseGraph() {
+  var graph = {};
+
+  first();
+  getToken();
+
+  // optional strict keyword
+  if (token === 'strict') {
+    graph.strict = true;
+    getToken();
+  }
+
+  // graph or digraph keyword
+  if (token === 'graph' || token === 'digraph') {
+    graph.type = token;
+    getToken();
+  }
+
+  // optional graph id
+  if (tokenType === TOKENTYPE.IDENTIFIER) {
+    graph.id = token;
+    getToken();
+  }
+
+  // open angle bracket
+  if (token != '{') {
+    throw newSyntaxError('Angle bracket { expected');
+  }
+  getToken();
+
+  // statements
+  parseStatements(graph);
+
+  // close angle bracket
+  if (token != '}') {
+    throw newSyntaxError('Angle bracket } expected');
+  }
+  getToken();
+
+  // end of file
+  if (token !== '') {
+    throw newSyntaxError('End of file expected');
+  }
+  getToken();
+
+  // remove temporary default options
+  delete graph.node;
+  delete graph.edge;
+  delete graph.graph;
+
+  return graph;
+}
+
+/**
+ * Parse a list with statements.
+ * @param {Object} graph
+ */
+function parseStatements(graph) {
+  while (token !== '' && token != '}') {
+    parseStatement(graph);
+    if (token === ';') {
+      getToken();
+    }
+  }
+}
+
+/**
+ * Parse a single statement. Can be a an attribute statement, node
+ * statement, a series of node statements and edge statements, or a
+ * parameter.
+ * @param {Object} graph
+ */
+function parseStatement(graph) {
+  // parse subgraph
+  var subgraph = parseSubgraph(graph);
+  if (subgraph) {
+    // edge statements
+    parseEdge(graph, subgraph);
+
+    return;
+  }
+
+  // parse an attribute statement
+  var attr = parseAttributeStatement(graph);
+  if (attr) {
+    return;
+  }
+
+  // parse node
+  if (tokenType != TOKENTYPE.IDENTIFIER) {
+    throw newSyntaxError('Identifier expected');
+  }
+  var id = token; // id can be a string or a number
+  getToken();
+
+  if (token === '=') {
+    // id statement
+    getToken();
+    if (tokenType != TOKENTYPE.IDENTIFIER) {
+      throw newSyntaxError('Identifier expected');
+    }
+    graph[id] = token;
+    getToken();
+    // TODO: implement comma separated list with "a_list: ID=ID [','] [a_list] "
+  } else {
+    parseNodeStatement(graph, id);
+  }
+}
+
+/**
+ * Parse a subgraph
+ * @param {Object} graph    parent graph object
+ * @return {Object | null} subgraph
+ */
+function parseSubgraph(graph) {
+  var subgraph = null;
+
+  // optional subgraph keyword
+  if (token === 'subgraph') {
+    subgraph = {};
+    subgraph.type = 'subgraph';
+    getToken();
+
+    // optional graph id
+    if (tokenType === TOKENTYPE.IDENTIFIER) {
+      subgraph.id = token;
+      getToken();
+    }
+  }
+
+  // open angle bracket
+  if (token === '{') {
+    getToken();
+
+    if (!subgraph) {
+      subgraph = {};
+    }
+    subgraph.parent = graph;
+    subgraph.node = graph.node;
+    subgraph.edge = graph.edge;
+    subgraph.graph = graph.graph;
+
+    // statements
+    parseStatements(subgraph);
+
+    // close angle bracket
+    if (token != '}') {
+      throw newSyntaxError('Angle bracket } expected');
+    }
+    getToken();
+
+    // remove temporary default options
+    delete subgraph.node;
+    delete subgraph.edge;
+    delete subgraph.graph;
+    delete subgraph.parent;
+
+    // register at the parent graph
+    if (!graph.subgraphs) {
+      graph.subgraphs = [];
+    }
+    graph.subgraphs.push(subgraph);
+  }
+
+  return subgraph;
+}
+
+/**
+ * parse an attribute statement like "node [shape=circle fontSize=16]".
+ * Available keywords are 'node', 'edge', 'graph'.
+ * The previous list with default attributes will be replaced
+ * @param {Object} graph
+ * @returns {String | null} keyword Returns the name of the parsed attribute
+ *                                  (node, edge, graph), or null if nothing
+ *                                  is parsed.
+ */
+function parseAttributeStatement(graph) {
+  // attribute statements
+  if (token === 'node') {
+    getToken();
+
+    // node attributes
+    graph.node = parseAttributeList();
+    return 'node';
+  } else if (token === 'edge') {
+    getToken();
+
+    // edge attributes
+    graph.edge = parseAttributeList();
+    return 'edge';
+  } else if (token === 'graph') {
+    getToken();
+
+    // graph attributes
+    graph.graph = parseAttributeList();
+    return 'graph';
+  }
+
+  return null;
+}
+
+/**
+ * parse a node statement
+ * @param {Object} graph
+ * @param {string | number} id
+ */
+function parseNodeStatement(graph, id) {
+  // node statement
+  var node = {
+    id: id
+  };
+  var attr = parseAttributeList();
+  if (attr) {
+    node.attr = attr;
+  }
+  addNode(graph, node);
+
+  // edge statements
+  parseEdge(graph, id);
+}
+
+/**
+ * Parse an edge or a series of edges
+ * @param {Object} graph
+ * @param {string | number} from        Id of the from node
+ */
+function parseEdge(graph, from) {
+  while (token === '->' || token === '--') {
+    var to;
+    var type = token;
+    getToken();
+
+    var subgraph = parseSubgraph(graph);
+    if (subgraph) {
+      to = subgraph;
+    } else {
+      if (tokenType != TOKENTYPE.IDENTIFIER) {
+        throw newSyntaxError('Identifier or subgraph expected');
+      }
+      to = token;
+      addNode(graph, {
+        id: to
+      });
+      getToken();
+    }
+
+    // parse edge attributes
+    var attr = parseAttributeList();
+
+    // create edge
+    var edge = createEdge(graph, from, to, type, attr);
+    addEdge(graph, edge);
+
+    from = to;
+  }
+}
+
+/**
+ * Parse a set with attributes,
+ * for example [label="1.000", shape=solid]
+ * @return {Object | null} attr
+ */
+function parseAttributeList() {
+  var attr = null;
+
+  // edge styles of dot and vis
+  var edgeStyles = {
+    'dashed': true,
+    'solid': false,
+    'dotted': [1, 5]
+  };
+
+  while (token === '[') {
+    getToken();
+    attr = {};
+    while (token !== '' && token != ']') {
+      if (tokenType != TOKENTYPE.IDENTIFIER) {
+        throw newSyntaxError('Attribute name expected');
+      }
+      var name = token;
+
+      getToken();
+      if (token != '=') {
+        throw newSyntaxError('Equal sign = expected');
+      }
+      getToken();
+
+      if (tokenType != TOKENTYPE.IDENTIFIER) {
+        throw newSyntaxError('Attribute value expected');
+      }
+      var value = token;
+
+      // convert from dot style to vis
+      if (name === 'style') {
+        value = edgeStyles[value];
+      }
+
+      setValue(attr, name, value); // name can be a path
+
+      getToken();
+      if (token == ',') {
+        getToken();
+      }
+    }
+
+    if (token != ']') {
+      throw newSyntaxError('Bracket ] expected');
+    }
+    getToken();
+  }
+
+  return attr;
+}
+
+/**
+ * Create a syntax error with extra information on current token and index.
+ * @param {string} message
+ * @returns {SyntaxError} err
+ */
+function newSyntaxError(message) {
+  return new SyntaxError(message + ', got "' + chop(token, 30) + '" (char ' + index + ')');
+}
+
+/**
+ * Chop off text after a maximum length
+ * @param {string} text
+ * @param {number} maxLength
+ * @returns {String}
+ */
+function chop(text, maxLength) {
+  return text.length <= maxLength ? text : text.substr(0, 27) + '...';
+}
+
+/**
+ * Execute a function fn for each pair of elements in two arrays
+ * @param {Array | *} array1
+ * @param {Array | *} array2
+ * @param {function} fn
+ */
+function forEach2(array1, array2, fn) {
+  if (Array.isArray(array1)) {
+    array1.forEach(function (elem1) {
+      if (Array.isArray(array2)) {
+        array2.forEach(function (elem2) {
+          fn(elem1, elem2);
+        });
+      } else {
+        fn(elem1, array2);
+      }
+    });
+  } else {
+    if (Array.isArray(array2)) {
+      array2.forEach(function (elem2) {
+        fn(array1, elem2);
+      });
+    } else {
+      fn(array1, array2);
+    }
+  }
+}
+
+/**
+ * Set a nested property on an object
+ * When nested objects are missing, they will be created.
+ * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}
+ * @param {Object} object
+ * @param {string} path   A dot separated string like 'font.color'
+ * @param {*} value       Value for the property
+ * @return {Object} Returns the original object, allows for chaining.
+ */
+function setProp(object, path, value) {
+  var names = path.split('.');
+  var prop = names.pop();
+
+  // traverse over the nested objects
+  var obj = object;
+  for (var i = 0; i < names.length; i++) {
+    var name = names[i];
+    if (!(name in obj)) {
+      obj[name] = {};
+    }
+    obj = obj[name];
+  }
+
+  // set the property value
+  obj[prop] = value;
+
+  return object;
+}
+
+/**
+ * Convert an object with DOT attributes to their vis.js equivalents.
+ * @param {Object} attr     Object with DOT attributes
+ * @param {Object} mapping
+ * @return {Object}         Returns an object with vis.js attributes
+ */
+function convertAttr(attr, mapping) {
+  var converted = {};
+
+  for (var prop in attr) {
+    if (attr.hasOwnProperty(prop)) {
+      var visProp = mapping[prop];
+      if (Array.isArray(visProp)) {
+        visProp.forEach(function (visPropI) {
+          setProp(converted, visPropI, attr[prop]);
+        });
+      } else if (typeof visProp === 'string') {
+        setProp(converted, visProp, attr[prop]);
+      } else {
+        setProp(converted, prop, attr[prop]);
+      }
+    }
+  }
+
+  return converted;
+}
+
+/**
+ * Convert a string containing a graph in DOT language into a map containing
+ * with nodes and edges in the format of graph.
+ * @param {string} data         Text containing a graph in DOT-notation
+ * @return {Object} graphData
+ */
+function DOTToGraph(data) {
+  // parse the DOT file
+  var dotData = parseDOT(data);
+  var graphData = {
+    nodes: [],
+    edges: [],
+    options: {}
+  };
+
+  // copy the nodes
+  if (dotData.nodes) {
+    dotData.nodes.forEach(function (dotNode) {
+      var graphNode = {
+        id: dotNode.id,
+        label: String(dotNode.label || dotNode.id)
+      };
+      merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));
+      if (graphNode.image) {
+        graphNode.shape = 'image';
+      }
+      graphData.nodes.push(graphNode);
+    });
+  }
+
+  // copy the edges
+  if (dotData.edges) {
+    /**
+     * Convert an edge in DOT format to an edge with VisGraph format
+     * @param {Object} dotEdge
+     * @returns {Object} graphEdge
+     */
+    var convertEdge = function convertEdge(dotEdge) {
+      var graphEdge = {
+        from: dotEdge.from,
+        to: dotEdge.to
+      };
+      merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));
+      graphEdge.arrows = dotEdge.type === '->' ? 'to' : undefined;
+
+      return graphEdge;
+    };
+
+    dotData.edges.forEach(function (dotEdge) {
+      var from, to;
+      if (dotEdge.from instanceof Object) {
+        from = dotEdge.from.nodes;
+      } else {
+        from = {
+          id: dotEdge.from
+        };
+      }
+
+      // TODO: support for attributes 'dir' and 'arrowhead' (edge arrows)
+
+      if (dotEdge.to instanceof Object) {
+        to = dotEdge.to.nodes;
+      } else {
+        to = {
+          id: dotEdge.to
+        };
+      }
+
+      if (dotEdge.from instanceof Object && dotEdge.from.edges) {
+        dotEdge.from.edges.forEach(function (subEdge) {
+          var graphEdge = convertEdge(subEdge);
+          graphData.edges.push(graphEdge);
+        });
+      }
+
+      forEach2(from, to, function (from, to) {
+        var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr);
+        var graphEdge = convertEdge(subEdge);
+        graphData.edges.push(graphEdge);
+      });
+
+      if (dotEdge.to instanceof Object && dotEdge.to.edges) {
+        dotEdge.to.edges.forEach(function (subEdge) {
+          var graphEdge = convertEdge(subEdge);
+          graphData.edges.push(graphEdge);
+        });
+      }
+    });
+  }
+
+  // copy the options
+  if (dotData.attr) {
+    graphData.options = dotData.attr;
+  }
+
+  return graphData;
+}
+
+// exports
+exports.parseDOT = parseDOT;
+exports.DOTToGraph = DOTToGraph;
+
+/***/ }),
+/* 115 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ *
+ * @param {json} gephiJSON
+ * @param {obj} optionsObj
+ * @returns {{nodes: Array, edges: Array}}
+ */
+function parseGephi(gephiJSON, optionsObj) {
+  var edges = [];
+  var nodes = [];
+  var options = {
+    edges: {
+      inheritColor: false
+    },
+    nodes: {
+      fixed: false,
+      parseColor: false
+    }
+  };
+
+  if (optionsObj !== undefined) {
+    if (optionsObj.fixed !== undefined) {
+      options.nodes.fixed = optionsObj.fixed;
+    }
+    if (optionsObj.parseColor !== undefined) {
+      options.nodes.parseColor = optionsObj.parseColor;
+    }
+    if (optionsObj.inheritColor !== undefined) {
+      options.edges.inheritColor = optionsObj.inheritColor;
+    }
+  }
+
+  var gEdges = gephiJSON.edges;
+  var gNodes = gephiJSON.nodes;
+  for (var i = 0; i < gEdges.length; i++) {
+    var edge = {};
+    var gEdge = gEdges[i];
+    edge['id'] = gEdge.id;
+    edge['from'] = gEdge.source;
+    edge['to'] = gEdge.target;
+    edge['attributes'] = gEdge.attributes;
+    edge['label'] = gEdge.label;
+    edge['title'] = gEdge.attributes !== undefined ? gEdge.attributes.title : undefined;
+    if (gEdge['type'] === 'Directed') {
+      edge['arrows'] = 'to';
+    }
+    //    edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined;
+    //    edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size;
+    if (gEdge.color && options.inheritColor === false) {
+      edge['color'] = gEdge.color;
+    }
+    edges.push(edge);
+  }
+
+  for (var j = 0; j < gNodes.length; j++) {
+    var node = {};
+    var gNode = gNodes[j];
+    node['id'] = gNode.id;
+    node['attributes'] = gNode.attributes;
+    node['x'] = gNode.x;
+    node['y'] = gNode.y;
+    node['label'] = gNode.label;
+    node['title'] = gNode.attributes !== undefined ? gNode.attributes.title : gNode.title;
+    if (options.nodes.parseColor === true) {
+      node['color'] = gNode.color;
+    } else {
+      node['color'] = gNode.color !== undefined ? { background: gNode.color, border: gNode.color, highlight: { background: gNode.color, border: gNode.color }, hover: { background: gNode.color, border: gNode.color } } : undefined;
+    }
+    node['size'] = gNode.size;
+    node['fixed'] = options.nodes.fixed && gNode.x !== undefined && gNode.y !== undefined;
+    nodes.push(node);
+  }
+
+  return { nodes: nodes, edges: edges };
+}
+
+exports.parseGephi = parseGephi;
+
+/***/ }),
+/* 116 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+    value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _CachedImage = __webpack_require__(185);
+
+var _CachedImage2 = _interopRequireDefault(_CachedImage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * This callback is a callback that accepts an Image.
+ * @callback ImageCallback
+ * @param {Image} image
+ */
+
+/**
+ * This class loads images and keeps them stored.
+ *
+ * @param {ImageCallback} callback
+ */
+var Images = function () {
+    /**
+     * @param {ImageCallback} callback
+     */
+    function Images(callback) {
+        (0, _classCallCheck3["default"])(this, Images);
+
+        this.images = {};
+        this.imageBroken = {};
+        this.callback = callback;
+    }
+
+    /**
+     * @param {string} url                      The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image
+     * @param {string} brokenUrl                Url the broken image to try and load
+     * @param {Image} imageToLoadBrokenUrlOn   The image object
+     */
+
+
+    (0, _createClass3["default"])(Images, [{
+        key: "_tryloadBrokenUrl",
+        value: function _tryloadBrokenUrl(url, brokenUrl, imageToLoadBrokenUrlOn) {
+            //If these parameters aren't specified then exit the function because nothing constructive can be done
+            if (url === undefined || imageToLoadBrokenUrlOn === undefined) return;
+            if (brokenUrl === undefined) {
+                console.warn("No broken url image defined");
+                return;
+            }
+
+            //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl
+            imageToLoadBrokenUrlOn.onerror = function () {
+                console.error("Could not load brokenImage:", brokenUrl);
+                // cache item will contain empty image, this should be OK for default
+            };
+
+            //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image
+            imageToLoadBrokenUrlOn.image.src = brokenUrl;
+        }
+
+        /**
+         *
+         * @param {vis.Image} imageToRedrawWith
+         * @private
+         */
+
+    }, {
+        key: "_redrawWithImage",
+        value: function _redrawWithImage(imageToRedrawWith) {
+            if (this.callback) {
+                this.callback(imageToRedrawWith);
+            }
+        }
+
+        /**
+         * @param {string} url          Url of the image
+         * @param {string} brokenUrl    Url of an image to use if the url image is not found
+         * @return {Image} img          The image object
+         */
+
+    }, {
+        key: "load",
+        value: function load(url, brokenUrl) {
+            var _this = this;
+
+            //Try and get the image from the cache, if successful then return the cached image   
+            var cachedImage = this.images[url];
+            if (cachedImage) return cachedImage;
+
+            //Create a new image
+            var img = new _CachedImage2["default"]();
+
+            // Need to add to cache here, otherwise final return will spawn different copies of the same image,
+            // Also, there will be multiple loads of the same image.
+            this.images[url] = img;
+
+            //Subscribe to the event that is raised if the image loads successfully 
+            img.image.onload = function () {
+                // Properly init the cached item and then request a redraw
+                _this._fixImageCoordinates(img.image);
+                img.init();
+                _this._redrawWithImage(img);
+            };
+
+            //Subscribe to the event that is raised if the image fails to load
+            img.image.onerror = function () {
+                console.error("Could not load image:", url);
+                //Try and load the image specified by the brokenUrl using
+                _this._tryloadBrokenUrl(url, brokenUrl, img);
+            };
+
+            //Set the source of the image to the url, this is what actually kicks off the loading of the image
+            img.image.src = url;
+
+            //Return the new image
+            return img;
+        }
+
+        /**
+         * IE11 fix -- thanks dponch!
+         *
+         * Local helper function
+         * @param {vis.Image} imageToCache
+         * @private
+         */
+
+    }, {
+        key: "_fixImageCoordinates",
+        value: function _fixImageCoordinates(imageToCache) {
+            if (imageToCache.width === 0) {
+                document.body.appendChild(imageToCache);
+                imageToCache.width = imageToCache.offsetWidth;
+                imageToCache.height = imageToCache.offsetHeight;
+                document.body.removeChild(imageToCache);
+            }
+        }
+    }]);
+    return Images;
+}();
+
+exports["default"] = Images;
+
+/***/ }),
+/* 117 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var ComponentUtil = __webpack_require__(48)['default'];
+var LabelSplitter = __webpack_require__(191)['default'];
+
+/**
+ * @typedef {'bold'|'ital'|'boldital'|'mono'|'normal'} MultiFontStyle
+ *
+ * The allowed specifiers of multi-fonts.
+ */
+
+/**
+ * @typedef {{color:string, size:number, face:string, mod:string, vadjust:number}} MultiFontOptions
+ *
+ * The full set of options of a given multi-font.
+ */
+
+/**
+ * @typedef {Array.<object>} Pile
+ *
+ * Sequence of option objects, the order is significant.
+ * The sequence is used to determine the value of a given option.
+ *
+ * Usage principles:
+ *
+ *  - All search is done in the sequence of the pile.
+ *  - As soon as a value is found, the searching stops.
+ *  - prototypes are totally ignored. The idea is to add option objects used as prototypes
+ *    to the pile, in the correct order.
+ */
+
+/**
+ * List of special styles for multi-fonts
+ * @private
+ */
+var multiFontStyle = ['bold', 'ital', 'boldital', 'mono'];
+
+/**
+ * A Label to be used for Nodes or Edges.
+ */
+
+var Label = function () {
+
+  /**
+   * @param {Object} body
+   * @param {Object} options
+   * @param {boolean} [edgelabel=false]
+   */
+  function Label(body, options) {
+    var edgelabel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+    (0, _classCallCheck3['default'])(this, Label);
+
+    this.body = body;
+    this.pointToSelf = false;
+    this.baseSize = undefined;
+    this.fontOptions = {}; // instance variable containing the *instance-local* font options
+    this.setOptions(options);
+    this.size = { top: 0, left: 0, width: 0, height: 0, yLine: 0 };
+    this.isEdgeLabel = edgelabel;
+  }
+
+  /**
+   * @param {Object} options the options of the parent Node-instance
+   */
+
+
+  (0, _createClass3['default'])(Label, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      this.elementOptions = options; // Reference to the options of the parent Node-instance 
+
+      this.initFontOptions(options.font);
+
+      if (ComponentUtil.isValidLabel(options.label)) {
+        this.labelDirty = true;
+      } else {
+        // Bad label! Change the option value to prevent bad stuff happening
+        options.label = '';
+      }
+
+      if (options.font !== undefined && options.font !== null) {
+        // font options can be deleted at various levels
+        if (typeof options.font === 'string') {
+          this.baseSize = this.fontOptions.size;
+        } else if ((0, _typeof3['default'])(options.font) === 'object') {
+          var size = options.font.size;
+
+          if (size !== undefined) {
+            this.baseSize = size;
+          }
+        }
+      }
+    }
+
+    /**
+     * Init the font Options structure.
+     *
+     * Member fontOptions serves as an accumulator for the current font options.
+     * As such, it needs to be completely separated from the node options.
+     *
+     * @param {Object} newFontOptions the new font options to process
+     * @private
+     */
+
+  }, {
+    key: 'initFontOptions',
+    value: function initFontOptions(newFontOptions) {
+      var _this = this;
+
+      // Prepare the multi-font option objects.
+      // These will be filled in propagateFonts(), if required
+      util.forEach(multiFontStyle, function (style) {
+        _this.fontOptions[style] = {};
+      });
+
+      // Handle shorthand option, if present
+      if (Label.parseFontString(this.fontOptions, newFontOptions)) {
+        this.fontOptions.vadjust = 0;
+        return;
+      }
+
+      // Copy over the non-multifont options, if specified
+      util.forEach(newFontOptions, function (prop, n) {
+        if (prop !== undefined && prop !== null && (typeof prop === 'undefined' ? 'undefined' : (0, _typeof3['default'])(prop)) !== 'object') {
+          _this.fontOptions[n] = prop;
+        }
+      });
+    }
+
+    /**
+     * If in-variable is a string, parse it as a font specifier.
+     *
+     * Note that following is not done here and have to be done after the call:
+     * - No number conversion (size)
+     * - Not all font options are set (vadjust, mod)
+     *
+     * @param {Object} outOptions  out-parameter, object in which to store the parse results (if any)
+     * @param {Object} inOptions  font options to parse
+     * @return {boolean} true if font parsed as string, false otherwise
+     * @static
+     */
+
+  }, {
+    key: 'constrain',
+
+
+    /**
+     * Set the width and height constraints based on 'nearest' value
+     *
+     * @param {Array} pile array of option objects to consider
+     * @returns {object} the actual constraint values to use
+     * @private
+     */
+    value: function constrain(pile) {
+      // NOTE: constrainWidth and  constrainHeight never set!
+      // NOTE: for edge labels, only 'maxWdt' set
+      // Node labels can set all the fields
+      var fontOptions = {
+        constrainWidth: false,
+        maxWdt: -1,
+        minWdt: -1,
+        constrainHeight: false,
+        minHgt: -1,
+        valign: 'middle'
+      };
+
+      var widthConstraint = util.topMost(pile, 'widthConstraint');
+      if (typeof widthConstraint === 'number') {
+        fontOptions.maxWdt = Number(widthConstraint);
+        fontOptions.minWdt = Number(widthConstraint);
+      } else if ((typeof widthConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(widthConstraint)) === 'object') {
+        var widthConstraintMaximum = util.topMost(pile, ['widthConstraint', 'maximum']);
+        if (typeof widthConstraintMaximum === 'number') {
+          fontOptions.maxWdt = Number(widthConstraintMaximum);
+        }
+        var widthConstraintMinimum = util.topMost(pile, ['widthConstraint', 'minimum']);
+        if (typeof widthConstraintMinimum === 'number') {
+          fontOptions.minWdt = Number(widthConstraintMinimum);
+        }
+      }
+
+      var heightConstraint = util.topMost(pile, 'heightConstraint');
+      if (typeof heightConstraint === 'number') {
+        fontOptions.minHgt = Number(heightConstraint);
+      } else if ((typeof heightConstraint === 'undefined' ? 'undefined' : (0, _typeof3['default'])(heightConstraint)) === 'object') {
+        var heightConstraintMinimum = util.topMost(pile, ['heightConstraint', 'minimum']);
+        if (typeof heightConstraintMinimum === 'number') {
+          fontOptions.minHgt = Number(heightConstraintMinimum);
+        }
+        var heightConstraintValign = util.topMost(pile, ['heightConstraint', 'valign']);
+        if (typeof heightConstraintValign === 'string') {
+          if (heightConstraintValign === 'top' || heightConstraintValign === 'bottom') {
+            fontOptions.valign = heightConstraintValign;
+          }
+        }
+      }
+
+      return fontOptions;
+    }
+
+    /**
+     * Set options and update internal state
+     *
+     * @param {Object} options  options to set
+     * @param {Array}  pile     array of option objects to consider for option 'chosen'
+     */
+
+  }, {
+    key: 'update',
+    value: function update(options, pile) {
+      this.setOptions(options, true);
+      this.propagateFonts(pile);
+      util.deepExtend(this.fontOptions, this.constrain(pile));
+      this.fontOptions.chooser = ComponentUtil.choosify('label', pile);
+    }
+
+    /**
+     * When margins are set in an element, adjust sizes is called to remove them
+     * from the width/height constraints. This must be done prior to label sizing.
+     *
+     * @param {{top: number, right: number, bottom: number, left: number}} margins
+     */
+
+  }, {
+    key: 'adjustSizes',
+    value: function adjustSizes(margins) {
+      var widthBias = margins ? margins.right + margins.left : 0;
+      if (this.fontOptions.constrainWidth) {
+        this.fontOptions.maxWdt -= widthBias;
+        this.fontOptions.minWdt -= widthBias;
+      }
+      var heightBias = margins ? margins.top + margins.bottom : 0;
+      if (this.fontOptions.constrainHeight) {
+        this.fontOptions.minHgt -= heightBias;
+      }
+    }
+
+    /////////////////////////////////////////////////////////
+    // Methods for handling options piles
+    // Eventually, these will be moved to a separate class
+    /////////////////////////////////////////////////////////
+
+    /**
+     * Add the font members of the passed list of option objects to the pile.
+     *
+     * @param {Pile} dstPile  pile of option objects add to 
+     * @param {Pile} srcPile  pile of option objects to take font options from
+     * @private
+     */
+
+  }, {
+    key: 'addFontOptionsToPile',
+    value: function addFontOptionsToPile(dstPile, srcPile) {
+      for (var i = 0; i < srcPile.length; ++i) {
+        this.addFontToPile(dstPile, srcPile[i]);
+      }
+    }
+
+    /**
+     * Add given font option object to the list of objects (the 'pile') to consider for determining
+     * multi-font option values.
+     *
+     * @param {Pile} pile  pile of option objects to use
+     * @param {object} options  instance to add to pile
+     * @private
+     */
+
+  }, {
+    key: 'addFontToPile',
+    value: function addFontToPile(pile, options) {
+      if (options === undefined) return;
+      if (options.font === undefined || options.font === null) return;
+
+      var item = options.font;
+      pile.push(item);
+    }
+
+    /**
+     * Collect all own-property values from the font pile that aren't multi-font option objectss.
+     *
+     * @param {Pile} pile  pile of option objects to use
+     * @returns {object} object with all current own basic font properties
+     * @private
+     */
+
+  }, {
+    key: 'getBasicOptions',
+    value: function getBasicOptions(pile) {
+      var ret = {};
+
+      // Scans the whole pile to get all options present
+      for (var n = 0; n < pile.length; ++n) {
+        var fontOptions = pile[n];
+
+        // Convert shorthand if necessary
+        var tmpShorthand = {};
+        if (Label.parseFontString(tmpShorthand, fontOptions)) {
+          fontOptions = tmpShorthand;
+        }
+
+        util.forEach(fontOptions, function (opt, name) {
+          if (opt === undefined) return; // multi-font option need not be present 
+          if (ret.hasOwnProperty(name)) return; // Keep first value we encounter
+
+          if (multiFontStyle.indexOf(name) !== -1) {
+            // Skip multi-font properties but we do need the structure
+            ret[name] = {};
+          } else {
+            ret[name] = opt;
+          }
+        });
+      }
+
+      return ret;
+    }
+
+    /**
+     * Return the value for given option for the given multi-font.
+     *
+     * All available option objects are trawled in the set order to construct the option values.
+     *
+     * ---------------------------------------------------------------------
+     * ## Traversal of pile for multi-fonts
+     *
+     * The determination of multi-font option values is a special case, because any values not
+     * present in the multi-font options should by definition be taken from the main font options,
+     * i.e. from the current 'parent' object of the multi-font option.
+     *
+     * ### Search order for multi-fonts
+     *
+     * 'bold' used as example:
+     *
+     *   - search in option group 'bold' in local properties
+     *   - search in main font option group in local properties
+     *
+     * ---------------------------------------------------------------------
+     *
+     * @param {Pile} pile  pile of option objects to use
+     * @param {MultiFontStyle} multiName sub path for the multi-font
+     * @param {string} option  the option to search for, for the given multi-font
+     * @returns {string|number} the value for the given option
+     * @private
+     */
+
+  }, {
+    key: 'getFontOption',
+    value: function getFontOption(pile, multiName, option) {
+      var multiFont = void 0;
+
+      // Search multi font in local properties
+      for (var n = 0; n < pile.length; ++n) {
+        var fontOptions = pile[n];
+
+        if (fontOptions.hasOwnProperty(multiName)) {
+          multiFont = fontOptions[multiName];
+          if (multiFont === undefined || multiFont === null) continue;
+
+          // Convert shorthand if necessary
+          // TODO: inefficient to do this conversion every time; find a better way.
+          var tmpShorthand = {};
+          if (Label.parseFontString(tmpShorthand, multiFont)) {
+            multiFont = tmpShorthand;
+          }
+
+          if (multiFont.hasOwnProperty(option)) {
+            return multiFont[option];
+          }
+        }
+      }
+
+      // Option is not mentioned in the multi font options; take it from the parent font options.
+      // These have already been converted with getBasicOptions(), so use the converted values.
+      if (this.fontOptions.hasOwnProperty(option)) {
+        return this.fontOptions[option];
+      }
+
+      // A value **must** be found; you should never get here.
+      throw new Error("Did not find value for multi-font for property: '" + option + "'");
+    }
+
+    /**
+     * Return all options values for the given multi-font.
+     *
+     * All available option objects are trawled in the set order to construct the option values.
+     *
+     * @param {Pile} pile  pile of option objects to use
+     * @param {MultiFontStyle} multiName sub path for the mod-font
+     * @returns {MultiFontOptions}
+     * @private
+     */
+
+  }, {
+    key: 'getFontOptions',
+    value: function getFontOptions(pile, multiName) {
+      var result = {};
+      var optionNames = ['color', 'size', 'face', 'mod', 'vadjust']; // List of allowed options per multi-font
+
+      for (var i = 0; i < optionNames.length; ++i) {
+        var mod = optionNames[i];
+        result[mod] = this.getFontOption(pile, multiName, mod);
+      }
+
+      return result;
+    }
+
+    /////////////////////////////////////////////////////////
+    // End methods for handling options piles
+    /////////////////////////////////////////////////////////
+
+
+    /**
+     * Collapse the font options for the multi-font to single objects, from
+     * the chain of option objects passed (the 'pile').
+     *
+     * @param {Pile} pile  sequence of option objects to consider.
+     *                     First item in list assumed to be the newly set options.
+     */
+
+  }, {
+    key: 'propagateFonts',
+    value: function propagateFonts(pile) {
+      var _this2 = this;
+
+      var fontPile = []; // sequence of font objects to consider, order important
+
+      // Note that this.elementOptions is not used here.
+      this.addFontOptionsToPile(fontPile, pile);
+      this.fontOptions = this.getBasicOptions(fontPile);
+
+      // We set multifont values even if multi === false, for consistency (things break otherwise)
+
+      var _loop = function _loop(i) {
+        var mod = multiFontStyle[i];
+        var modOptions = _this2.fontOptions[mod];
+        var tmpMultiFontOptions = _this2.getFontOptions(fontPile, mod);
+
+        // Copy over found values
+        util.forEach(tmpMultiFontOptions, function (option, n) {
+          modOptions[n] = option;
+        });
+
+        modOptions.size = Number(modOptions.size);
+        modOptions.vadjust = Number(modOptions.vadjust);
+      };
+
+      for (var i = 0; i < multiFontStyle.length; ++i) {
+        _loop(i);
+      }
+    }
+
+    /**
+     * Main function. This is called from anything that wants to draw a label.
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x
+     * @param {number} y
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {string} [baseline='middle']
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover) {
+      var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle';
+
+      // if no label, return
+      if (this.elementOptions.label === undefined) return;
+
+      // check if we have to render the label
+      var viewFontSize = this.fontOptions.size * this.body.view.scale;
+      if (this.elementOptions.label && viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) return;
+
+      // This ensures that there will not be HUGE letters on screen
+      // by setting an upper limit on the visible text size (regardless of zoomLevel)
+      if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {
+        viewFontSize = Number(this.elementOptions.scaling.label.maxVisible) / this.body.view.scale;
+      }
+
+      // update the size cache if required
+      this.calculateLabelSize(ctx, selected, hover, x, y, baseline);
+      this._drawBackground(ctx);
+      this._drawText(ctx, x, this.size.yLine, baseline, viewFontSize);
+    }
+
+    /**
+     * Draws the label background
+     * @param {CanvasRenderingContext2D} ctx
+     * @private
+     */
+
+  }, {
+    key: '_drawBackground',
+    value: function _drawBackground(ctx) {
+      if (this.fontOptions.background !== undefined && this.fontOptions.background !== "none") {
+        ctx.fillStyle = this.fontOptions.background;
+        var size = this.getSize();
+        ctx.fillRect(size.left, size.top, size.width, size.height);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x
+     * @param {number} y
+     * @param {string} [baseline='middle']
+     * @param {number} viewFontSize 
+     * @private
+     */
+
+  }, {
+    key: '_drawText',
+    value: function _drawText(ctx, x, y) {
+      var baseline = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'middle';
+      var viewFontSize = arguments[4];
+
+      var _setAlignment2 = this._setAlignment(ctx, x, y, baseline);
+
+      var _setAlignment3 = (0, _slicedToArray3['default'])(_setAlignment2, 2);
+
+      x = _setAlignment3[0];
+      y = _setAlignment3[1];
+
+
+      ctx.textAlign = 'left';
+      x = x - this.size.width / 2; // Shift label 1/2-distance to the left
+      if (this.fontOptions.valign && this.size.height > this.size.labelHeight) {
+        if (this.fontOptions.valign === 'top') {
+          y -= (this.size.height - this.size.labelHeight) / 2;
+        }
+        if (this.fontOptions.valign === 'bottom') {
+          y += (this.size.height - this.size.labelHeight) / 2;
+        }
+      }
+
+      // draw the text
+      for (var i = 0; i < this.lineCount; i++) {
+        var line = this.lines[i];
+        if (line && line.blocks) {
+          var width = 0;
+          if (this.isEdgeLabel || this.fontOptions.align === 'center') {
+            width += (this.size.width - line.width) / 2;
+          } else if (this.fontOptions.align === 'right') {
+            width += this.size.width - line.width;
+          }
+          for (var j = 0; j < line.blocks.length; j++) {
+            var block = line.blocks[j];
+            ctx.font = block.font;
+
+            var _getColor2 = this._getColor(block.color, viewFontSize, block.strokeColor),
+                _getColor3 = (0, _slicedToArray3['default'])(_getColor2, 2),
+                fontColor = _getColor3[0],
+                strokeColor = _getColor3[1];
+
+            if (block.strokeWidth > 0) {
+              ctx.lineWidth = block.strokeWidth;
+              ctx.strokeStyle = strokeColor;
+              ctx.lineJoin = 'round';
+            }
+            ctx.fillStyle = fontColor;
+
+            if (block.strokeWidth > 0) {
+              ctx.strokeText(block.text, x + width, y + block.vadjust);
+            }
+            ctx.fillText(block.text, x + width, y + block.vadjust);
+            width += block.width;
+          }
+          y += line.height;
+        }
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x
+     * @param {number} y
+     * @param {string} baseline
+     * @returns {Array.<number>}
+     * @private
+     */
+
+  }, {
+    key: '_setAlignment',
+    value: function _setAlignment(ctx, x, y, baseline) {
+      // check for label alignment (for edges)
+      // TODO: make alignment for nodes
+      if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) {
+        x = 0;
+        y = 0;
+
+        var lineMargin = 2;
+        if (this.fontOptions.align === 'top') {
+          ctx.textBaseline = 'alphabetic';
+          y -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers
+        } else if (this.fontOptions.align === 'bottom') {
+          ctx.textBaseline = 'hanging';
+          y += 2 * lineMargin; // distance from edge, required because we use hanging. Hanging has less difference between browsers
+        } else {
+          ctx.textBaseline = 'middle';
+        }
+      } else {
+        ctx.textBaseline = baseline;
+      }
+      return [x, y];
+    }
+
+    /**
+     * fade in when relative scale is between threshold and threshold - 1.
+     * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.
+     *
+     * @param {string} color  The font color to use
+     * @param {number} viewFontSize
+     * @param {string} initialStrokeColor
+     * @returns {Array.<string>} An array containing the font color and stroke color
+     * @private
+     */
+
+  }, {
+    key: '_getColor',
+    value: function _getColor(color, viewFontSize, initialStrokeColor) {
+      var fontColor = color || '#000000';
+      var strokeColor = initialStrokeColor || '#ffffff';
+      if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {
+        var opacity = Math.max(0, Math.min(1, 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)));
+        fontColor = util.overrideOpacity(fontColor, opacity);
+        strokeColor = util.overrideOpacity(strokeColor, opacity);
+      }
+      return [fontColor, strokeColor];
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @returns {{width: number, height: number}}
+     */
+
+  }, {
+    key: 'getTextSize',
+    value: function getTextSize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      this._processLabel(ctx, selected, hover);
+      return {
+        width: this.size.width,
+        height: this.size.height,
+        lineCount: this.lineCount
+      };
+    }
+
+    /**
+     * Get the current dimensions of the label
+     *
+     * @return {rect}
+     */
+
+  }, {
+    key: 'getSize',
+    value: function getSize() {
+      var lineMargin = 2;
+      var x = this.size.left; // default values which might be overridden below
+      var y = this.size.top - 0.5 * lineMargin; // idem
+
+      if (this.isEdgeLabel) {
+        var x2 = -this.size.width * 0.5;
+
+        switch (this.fontOptions.align) {
+          case 'middle':
+            x = x2;
+            y = -this.size.height * 0.5;
+            break;
+          case 'top':
+            x = x2;
+            y = -(this.size.height + lineMargin);
+            break;
+          case 'bottom':
+            x = x2;
+            y = lineMargin;
+            break;
+        }
+      }
+
+      var ret = {
+        left: x,
+        top: y,
+        width: this.size.width,
+        height: this.size.height
+      };
+
+      return ret;
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {number} [x=0]
+     * @param {number} [y=0]
+     * @param {'middle'|'hanging'} [baseline='middle']
+     */
+
+  }, {
+    key: 'calculateLabelSize',
+    value: function calculateLabelSize(ctx, selected, hover) {
+      var x = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
+      var y = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
+      var baseline = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'middle';
+
+      this._processLabel(ctx, selected, hover);
+      this.size.left = x - this.size.width * 0.5;
+      this.size.top = y - this.size.height * 0.5;
+      this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;
+      if (baseline === "hanging") {
+        this.size.top += 0.5 * this.fontOptions.size;
+        this.size.top += 4; // distance from node, required because we use hanging. Hanging has less difference between browsers
+        this.size.yLine += 4; // distance from node
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {string} mod
+     * @returns {{color, size, face, mod, vadjust, strokeWidth: *, strokeColor: (*|string|allOptions.edges.font.strokeColor|{string}|allOptions.nodes.font.strokeColor|Array)}}
+     */
+
+  }, {
+    key: 'getFormattingValues',
+    value: function getFormattingValues(ctx, selected, hover, mod) {
+      var getValue = function getValue(fontOptions, mod, option) {
+        if (mod === "normal") {
+          if (option === 'mod') return "";
+          return fontOptions[option];
+        }
+
+        if (fontOptions[mod][option] !== undefined) {
+          // Grumbl leaving out test on undefined equals false for "" 
+          return fontOptions[mod][option];
+        } else {
+          // Take from parent font option
+          return fontOptions[option];
+        }
+      };
+
+      var values = {
+        color: getValue(this.fontOptions, mod, 'color'),
+        size: getValue(this.fontOptions, mod, 'size'),
+        face: getValue(this.fontOptions, mod, 'face'),
+        mod: getValue(this.fontOptions, mod, 'mod'),
+        vadjust: getValue(this.fontOptions, mod, 'vadjust'),
+        strokeWidth: this.fontOptions.strokeWidth,
+        strokeColor: this.fontOptions.strokeColor
+      };
+      if (selected || hover) {
+        if (mod === "normal" && this.fontOptions.chooser === true && this.elementOptions.labelHighlightBold) {
+          values.mod = 'bold';
+        } else {
+          if (typeof this.fontOptions.chooser === 'function') {
+            this.fontOptions.chooser(values, this.elementOptions.id, selected, hover);
+          }
+        }
+      }
+
+      var fontString = "";
+      if (values.mod !== undefined && values.mod !== "") {
+        // safeguard for undefined - this happened
+        fontString += values.mod + " ";
+      }
+      fontString += values.size + "px " + values.face;
+
+      ctx.font = fontString.replace(/"/g, "");
+      values.font = ctx.font;
+      values.height = values.size;
+      return values;
+    }
+
+    /**
+     *
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'differentState',
+    value: function differentState(selected, hover) {
+      return selected !== this.selectedState || hover !== this.hoverState;
+    }
+
+    /**
+     * This explodes the passed text into lines and determines the width, height and number of lines.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {string} inText  the text to explode
+     * @returns {{width, height, lines}|*}
+     * @private
+     */
+
+  }, {
+    key: '_processLabelText',
+    value: function _processLabelText(ctx, selected, hover, inText) {
+      var splitter = new LabelSplitter(ctx, this, selected, hover);
+      return splitter.process(inText);
+    }
+
+    /**
+     * This explodes the label string into lines and sets the width, height and number of lines.
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @private
+     */
+
+  }, {
+    key: '_processLabel',
+    value: function _processLabel(ctx, selected, hover) {
+
+      if (this.labelDirty === false && !this.differentState(selected, hover)) return;
+
+      var state = this._processLabelText(ctx, selected, hover, this.elementOptions.label);
+
+      if (this.fontOptions.minWdt > 0 && state.width < this.fontOptions.minWdt) {
+        state.width = this.fontOptions.minWdt;
+      }
+
+      this.size.labelHeight = state.height;
+      if (this.fontOptions.minHgt > 0 && state.height < this.fontOptions.minHgt) {
+        state.height = this.fontOptions.minHgt;
+      }
+
+      this.lines = state.lines;
+      this.lineCount = state.lines.length;
+      this.size.width = state.width;
+      this.size.height = state.height;
+      this.selectedState = selected;
+      this.hoverState = hover;
+
+      this.labelDirty = false;
+    }
+
+    /**
+     * Check if this label is visible
+     *
+     * @return {boolean} true if this label will be show, false otherwise
+     */
+
+  }, {
+    key: 'visible',
+    value: function visible() {
+      if (this.size.width === 0 || this.size.height === 0 || this.elementOptions.label === undefined) {
+        return false; // nothing to display
+      }
+
+      var viewFontSize = this.fontOptions.size * this.body.view.scale;
+      if (viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1) {
+        return false; // Too small or too far away to show
+      }
+
+      return true;
+    }
+  }], [{
+    key: 'parseFontString',
+    value: function parseFontString(outOptions, inOptions) {
+      if (!inOptions || typeof inOptions !== 'string') return false;
+
+      var newOptionsArray = inOptions.split(" ");
+
+      outOptions.size = newOptionsArray[0].replace("px", '');
+      outOptions.face = newOptionsArray[1];
+      outOptions.color = newOptionsArray[2];
+
+      return true;
+    }
+  }]);
+  return Label;
+}();
+
+exports['default'] = Label;
+
+/***/ }),
+/* 118 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var util = __webpack_require__(2);
+var EndPoints = __webpack_require__(119)["default"];
+
+/**
+ * The Base Class for all edges.
+ *
+ */
+
+var EdgeBase = function () {
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function EdgeBase(options, body, labelModule) {
+    (0, _classCallCheck3["default"])(this, EdgeBase);
+
+    this.body = body;
+    this.labelModule = labelModule;
+    this.options = {};
+    this.setOptions(options);
+    this.colorDirty = true;
+    this.color = {};
+    this.selectionWidth = 2;
+    this.hoverWidth = 1.5;
+    this.fromPoint = this.from;
+    this.toPoint = this.to;
+  }
+
+  /**
+   * Connects a node to itself
+   */
+
+
+  (0, _createClass3["default"])(EdgeBase, [{
+    key: "connect",
+    value: function connect() {
+      this.from = this.body.nodes[this.options.from];
+      this.to = this.body.nodes[this.options.to];
+    }
+
+    /**
+     *
+     * @returns {boolean} always false
+     */
+
+  }, {
+    key: "cleanup",
+    value: function cleanup() {
+      return false;
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+      this.from = this.body.nodes[this.options.from];
+      this.to = this.body.nodes[this.options.to];
+      this.id = this.options.id;
+    }
+
+    /**
+     * Redraw a edge as a line
+     * Draw this edge in the given canvas
+     * The 2d context of a HTML canvas can be retrieved by canvas.getContext("2d");
+     *
+     * @param {CanvasRenderingContext2D}   ctx
+     * @param {Array} values
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {Node} viaNode
+     * @private
+     */
+
+  }, {
+    key: "drawLine",
+    value: function drawLine(ctx, values, selected, hover, viaNode) {
+      // set style
+      ctx.strokeStyle = this.getColor(ctx, values, selected, hover);
+      ctx.lineWidth = values.width;
+
+      if (values.dashes !== false) {
+        this._drawDashedLine(ctx, values, viaNode);
+      } else {
+        this._drawLine(ctx, values, viaNode);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D}   ctx
+     * @param {Array} values
+     * @param {Node} viaNode
+     * @param {{x: number, y: number}} [fromPoint]
+     * @param {{x: number, y: number}} [toPoint]
+     * @private
+     */
+
+  }, {
+    key: "_drawLine",
+    value: function _drawLine(ctx, values, viaNode, fromPoint, toPoint) {
+      if (this.from != this.to) {
+        // draw line
+        this._line(ctx, values, viaNode, fromPoint, toPoint);
+      } else {
+        var _getCircleData2 = this._getCircleData(ctx),
+            _getCircleData3 = (0, _slicedToArray3["default"])(_getCircleData2, 3),
+            x = _getCircleData3[0],
+            y = _getCircleData3[1],
+            radius = _getCircleData3[2];
+
+        this._circle(ctx, values, x, y, radius);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Array} values
+     * @param {Node} viaNode
+     * @param {{x: number, y: number}} [fromPoint]  TODO: Remove in next major release
+     * @param {{x: number, y: number}} [toPoint]    TODO: Remove in next major release
+     * @private
+     */
+
+  }, {
+    key: "_drawDashedLine",
+    value: function _drawDashedLine(ctx, values, viaNode, fromPoint, toPoint) {
+      // eslint-disable-line no-unused-vars
+      ctx.lineCap = 'round';
+      var pattern = [5, 5];
+      if (Array.isArray(values.dashes) === true) {
+        pattern = values.dashes;
+      }
+
+      // only firefox and chrome support this method, else we use the legacy one.
+      if (ctx.setLineDash !== undefined) {
+        ctx.save();
+
+        // set dash settings for chrome or firefox
+        ctx.setLineDash(pattern);
+        ctx.lineDashOffset = 0;
+
+        // draw the line
+        if (this.from != this.to) {
+          // draw line
+          this._line(ctx, values, viaNode);
+        } else {
+          var _getCircleData4 = this._getCircleData(ctx),
+              _getCircleData5 = (0, _slicedToArray3["default"])(_getCircleData4, 3),
+              x = _getCircleData5[0],
+              y = _getCircleData5[1],
+              radius = _getCircleData5[2];
+
+          this._circle(ctx, values, x, y, radius);
+        }
+
+        // restore the dash settings.
+        ctx.setLineDash([0]);
+        ctx.lineDashOffset = 0;
+        ctx.restore();
+      } else {
+        // unsupporting smooth lines
+        if (this.from != this.to) {
+          // draw line
+          ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern);
+        } else {
+          var _getCircleData6 = this._getCircleData(ctx),
+              _getCircleData7 = (0, _slicedToArray3["default"])(_getCircleData6, 3),
+              _x = _getCircleData7[0],
+              _y = _getCircleData7[1],
+              _radius = _getCircleData7[2];
+
+          this._circle(ctx, values, _x, _y, _radius);
+        }
+        // draw shadow if enabled
+        this.enableShadow(ctx, values);
+
+        ctx.stroke();
+
+        // disable shadows for other elements.
+        this.disableShadow(ctx, values);
+      }
+    }
+
+    /**
+     *
+     * @param {Node} nearNode
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Object} options
+     * @returns {{x: number, y: number}}
+     */
+
+  }, {
+    key: "findBorderPosition",
+    value: function findBorderPosition(nearNode, ctx, options) {
+      if (this.from != this.to) {
+        return this._findBorderPosition(nearNode, ctx, options);
+      } else {
+        return this._findBorderPositionCircle(nearNode, ctx, options);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @returns {{from: ({x: number, y: number, t: number}|*), to: ({x: number, y: number, t: number}|*)}}
+     */
+
+  }, {
+    key: "findBorderPositions",
+    value: function findBorderPositions(ctx) {
+      var from = {};
+      var to = {};
+      if (this.from != this.to) {
+        from = this._findBorderPosition(this.from, ctx);
+        to = this._findBorderPosition(this.to, ctx);
+      } else {
+        var _getCircleData$slice = this._getCircleData(ctx).slice(0, 2),
+            _getCircleData$slice2 = (0, _slicedToArray3["default"])(_getCircleData$slice, 2),
+            x = _getCircleData$slice2[0],
+            y = _getCircleData$slice2[1];
+
+        from = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 });
+        to = this._findBorderPositionCircle(this.from, ctx, { x: x, y: y, low: 0.6, high: 0.8, direction: 1 });
+      }
+      return { from: from, to: to };
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @returns {Array.<number>} x, y, radius
+     * @private
+     */
+
+  }, {
+    key: "_getCircleData",
+    value: function _getCircleData(ctx) {
+      var x = void 0,
+          y = void 0;
+      var node = this.from;
+      var radius = this.options.selfReferenceSize;
+
+      if (ctx !== undefined) {
+        if (node.shape.width === undefined) {
+          node.shape.resize(ctx);
+        }
+      }
+
+      // get circle coordinates
+      if (node.shape.width > node.shape.height) {
+        x = node.x + node.shape.width * 0.5;
+        y = node.y - radius;
+      } else {
+        x = node.x + radius;
+        y = node.y - node.shape.height * 0.5;
+      }
+      return [x, y, radius];
+    }
+
+    /**
+     * Get a point on a circle
+     * @param {number} x
+     * @param {number} y
+     * @param {number} radius
+     * @param {number} percentage - Value between 0 (line start) and 1 (line end)
+     * @return {Object} point
+     * @private
+     */
+
+  }, {
+    key: "_pointOnCircle",
+    value: function _pointOnCircle(x, y, radius, percentage) {
+      var angle = percentage * 2 * Math.PI;
+      return {
+        x: x + radius * Math.cos(angle),
+        y: y - radius * Math.sin(angle)
+      };
+    }
+
+    /**
+     * This function uses binary search to look for the point where the circle crosses the border of the node.
+     * @param {Node} node
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Object} options
+     * @returns {*}
+     * @private
+     */
+
+  }, {
+    key: "_findBorderPositionCircle",
+    value: function _findBorderPositionCircle(node, ctx, options) {
+      var x = options.x;
+      var y = options.y;
+      var low = options.low;
+      var high = options.high;
+      var direction = options.direction;
+
+      var maxIterations = 10;
+      var iteration = 0;
+      var radius = this.options.selfReferenceSize;
+      var pos = void 0,
+          angle = void 0,
+          distanceToBorder = void 0,
+          distanceToPoint = void 0,
+          difference = void 0;
+      var threshold = 0.05;
+      var middle = (low + high) * 0.5;
+
+      while (low <= high && iteration < maxIterations) {
+        middle = (low + high) * 0.5;
+
+        pos = this._pointOnCircle(x, y, radius, middle);
+        angle = Math.atan2(node.y - pos.y, node.x - pos.x);
+        distanceToBorder = node.distanceToBorder(ctx, angle);
+        distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));
+        difference = distanceToBorder - distanceToPoint;
+        if (Math.abs(difference) < threshold) {
+          break; // found
+        } else if (difference > 0) {
+          // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.
+          if (direction > 0) {
+            low = middle;
+          } else {
+            high = middle;
+          }
+        } else {
+          if (direction > 0) {
+            high = middle;
+          } else {
+            low = middle;
+          }
+        }
+        iteration++;
+      }
+      pos.t = middle;
+
+      return pos;
+    }
+
+    /**
+     * Get the line width of the edge. Depends on width and whether one of the
+     * connected nodes is selected.
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @returns {number} width
+     * @private
+     */
+
+  }, {
+    key: "getLineWidth",
+    value: function getLineWidth(selected, hover) {
+      if (selected === true) {
+        return Math.max(this.selectionWidth, 0.3 / this.body.view.scale);
+      } else {
+        if (hover === true) {
+          return Math.max(this.hoverWidth, 0.3 / this.body.view.scale);
+        } else {
+          return Math.max(this.options.width, 0.3 / this.body.view.scale);
+        }
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @param {boolean} selected - Unused
+     * @param {boolean} hover - Unused
+     * @returns {string}
+     */
+
+  }, {
+    key: "getColor",
+    value: function getColor(ctx, values, selected, hover) {
+      // eslint-disable-line no-unused-vars
+      if (values.inheritsColor !== false) {
+        // when this is a loop edge, just use the 'from' method
+        if (values.inheritsColor === 'both' && this.from.id !== this.to.id) {
+          var grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y);
+          var fromColor = void 0,
+              toColor = void 0;
+          fromColor = this.from.options.color.highlight.border;
+          toColor = this.to.options.color.highlight.border;
+
+          if (this.from.selected === false && this.to.selected === false) {
+            fromColor = util.overrideOpacity(this.from.options.color.border, values.opacity);
+            toColor = util.overrideOpacity(this.to.options.color.border, values.opacity);
+          } else if (this.from.selected === true && this.to.selected === false) {
+            toColor = this.to.options.color.border;
+          } else if (this.from.selected === false && this.to.selected === true) {
+            fromColor = this.from.options.color.border;
+          }
+          grd.addColorStop(0, fromColor);
+          grd.addColorStop(1, toColor);
+
+          // -------------------- this returns -------------------- //
+          return grd;
+        }
+
+        if (values.inheritsColor === "to") {
+          return util.overrideOpacity(this.to.options.color.border, values.opacity);
+        } else {
+          // "from"
+          return util.overrideOpacity(this.from.options.color.border, values.opacity);
+        }
+      } else {
+        return util.overrideOpacity(values.color, values.opacity);
+      }
+    }
+
+    /**
+     * Draw a line from a node to itself, a circle
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Array} values
+     * @param {number} x
+     * @param {number} y
+     * @param {number} radius
+     * @private
+     */
+
+  }, {
+    key: "_circle",
+    value: function _circle(ctx, values, x, y, radius) {
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+
+      // draw a circle
+      ctx.beginPath();
+      ctx.arc(x, y, radius, 0, 2 * Math.PI, false);
+      ctx.stroke();
+
+      // disable shadows for other elements.
+      this.disableShadow(ctx, values);
+    }
+
+    /**
+     * Calculate the distance between a point (x3,y3) and a line segment from (x1,y1) to (x2,y2).
+     * (x3,y3) is the point.
+     *
+     * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @param {Node} via
+     * @param {Array} values
+     * @returns {number}
+     */
+
+  }, {
+    key: "getDistanceToEdge",
+    value: function getDistanceToEdge(x1, y1, x2, y2, x3, y3, via, values) {
+      // eslint-disable-line no-unused-vars
+      var returnValue = 0;
+      if (this.from != this.to) {
+        returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via);
+      } else {
+        var _getCircleData8 = this._getCircleData(undefined),
+            _getCircleData9 = (0, _slicedToArray3["default"])(_getCircleData8, 3),
+            x = _getCircleData9[0],
+            y = _getCircleData9[1],
+            radius = _getCircleData9[2];
+
+        var dx = x - x3;
+        var dy = y - y3;
+        returnValue = Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);
+      }
+
+      return returnValue;
+    }
+
+    /**
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: "_getDistanceToLine",
+    value: function _getDistanceToLine(x1, y1, x2, y2, x3, y3) {
+      var px = x2 - x1;
+      var py = y2 - y1;
+      var something = px * px + py * py;
+      var u = ((x3 - x1) * px + (y3 - y1) * py) / something;
+
+      if (u > 1) {
+        u = 1;
+      } else if (u < 0) {
+        u = 0;
+      }
+
+      var x = x1 + u * px;
+      var y = y1 + u * py;
+      var dx = x - x3;
+      var dy = y - y3;
+
+      //# Note: If the actual distance does not matter,
+      //# if you only want to compare what this function
+      //# returns to other results of this function, you
+      //# can just return the squared distance instead
+      //# (i.e. remove the sqrt) to gain a little performance
+
+      return Math.sqrt(dx * dx + dy * dy);
+    }
+
+    /**
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {string} position
+     * @param {Node} viaNode
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {Array} values
+     * @returns {{point: *, core: {x: number, y: number}, angle: *, length: number, type: *}}
+     */
+
+  }, {
+    key: "getArrowData",
+    value: function getArrowData(ctx, position, viaNode, selected, hover, values) {
+      // set lets
+      var angle = void 0;
+      var arrowPoint = void 0;
+      var node1 = void 0;
+      var node2 = void 0;
+      var guideOffset = void 0;
+      var scaleFactor = void 0;
+      var type = void 0;
+      var lineWidth = values.width;
+
+      if (position === 'from') {
+        node1 = this.from;
+        node2 = this.to;
+        guideOffset = 0.1;
+        scaleFactor = values.fromArrowScale;
+        type = values.fromArrowType;
+      } else if (position === 'to') {
+        node1 = this.to;
+        node2 = this.from;
+        guideOffset = -0.1;
+        scaleFactor = values.toArrowScale;
+        type = values.toArrowType;
+      } else {
+        node1 = this.to;
+        node2 = this.from;
+        scaleFactor = values.middleArrowScale;
+        type = values.middleArrowType;
+      }
+
+      // if not connected to itself
+      if (node1 != node2) {
+        if (position !== 'middle') {
+          // draw arrow head
+          if (this.options.smooth.enabled === true) {
+            arrowPoint = this.findBorderPosition(node1, ctx, { via: viaNode });
+            var guidePos = this.getPoint(Math.max(0.0, Math.min(1.0, arrowPoint.t + guideOffset)), viaNode);
+            angle = Math.atan2(arrowPoint.y - guidePos.y, arrowPoint.x - guidePos.x);
+          } else {
+            angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);
+            arrowPoint = this.findBorderPosition(node1, ctx);
+          }
+        } else {
+          angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);
+          arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow.
+        }
+      } else {
+        // draw circle
+        var _getCircleData10 = this._getCircleData(ctx),
+            _getCircleData11 = (0, _slicedToArray3["default"])(_getCircleData10, 3),
+            x = _getCircleData11[0],
+            y = _getCircleData11[1],
+            radius = _getCircleData11[2];
+
+        if (position === 'from') {
+          arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.25, high: 0.6, direction: -1 });
+          angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;
+        } else if (position === 'to') {
+          arrowPoint = this.findBorderPosition(this.from, ctx, { x: x, y: y, low: 0.6, high: 1.0, direction: 1 });
+          angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;
+        } else {
+          arrowPoint = this._pointOnCircle(x, y, radius, 0.175);
+          angle = 3.9269908169872414; // === 0.175 * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;
+        }
+      }
+
+      if (position === 'middle' && scaleFactor < 0) lineWidth *= -1; // reversed middle arrow
+      var length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.
+
+      var xi = arrowPoint.x - length * 0.9 * Math.cos(angle);
+      var yi = arrowPoint.y - length * 0.9 * Math.sin(angle);
+      var arrowCore = { x: xi, y: yi };
+
+      return { point: arrowPoint, core: arrowCore, angle: angle, length: length, type: type };
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {Object} arrowData
+     */
+
+  }, {
+    key: "drawArrowHead",
+    value: function drawArrowHead(ctx, values, selected, hover, arrowData) {
+      // set style
+      ctx.strokeStyle = this.getColor(ctx, values, selected, hover);
+      ctx.fillStyle = ctx.strokeStyle;
+      ctx.lineWidth = values.width;
+
+      EndPoints.draw(ctx, arrowData);
+
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+      ctx.fill();
+      // disable shadows for other elements.
+      this.disableShadow(ctx, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: "enableShadow",
+    value: function enableShadow(ctx, values) {
+      if (values.shadow === true) {
+        ctx.shadowColor = values.shadowColor;
+        ctx.shadowBlur = values.shadowSize;
+        ctx.shadowOffsetX = values.shadowX;
+        ctx.shadowOffsetY = values.shadowY;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: "disableShadow",
+    value: function disableShadow(ctx, values) {
+      if (values.shadow === true) {
+        ctx.shadowColor = 'rgba(0,0,0,0)';
+        ctx.shadowBlur = 0;
+        ctx.shadowOffsetX = 0;
+        ctx.shadowOffsetY = 0;
+      }
+    }
+  }]);
+  return EdgeBase;
+}();
+
+exports["default"] = EdgeBase;
+
+/***/ }),
+/* 119 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/** ============================================================================
+ * Location of all the endpoint drawing routines.
+ *
+ * Every endpoint has its own drawing routine, which contains an endpoint definition.
+ *
+ * The endpoint definitions must have the following properies:
+ *
+ * - (0,0) is the connection point to the node it attaches to
+ * - The endpoints are orientated to the positive x-direction
+ * - The length of the endpoint is at most 1
+ *
+ * As long as the endpoint classes remain simple and not too numerous, they will
+ * be contained within this module.
+ * All classes here except `EndPoints` should be considered as private to this module.
+ *
+ * -----------------------------------------------------------------------------
+ * ### Further Actions
+ *
+ * After adding a new endpoint here, you also need to do the following things:
+ *
+ * - Add the new endpoint name to `network/options.js` in array `endPoints`.
+ * - Add the new endpoint name to the documentation.
+ *   Scan for 'arrows.to.type` and add it to the description.
+ * - Add the endpoint to the examples. At the very least, add it to example
+ *   `edgeStyles/arrowTypes`.
+ * ============================================================================= */
+
+// NOTE: When a typedef is isolated in a separate comment block, an actual description is generated for it,
+//       using the rest of the commenting in the code block. Usage of typedef in other comments then
+//       link to there. TIL.
+//
+//       Also noteworthy, all typedef's set up in this manner are collected in a single, global page 'global.html'.
+//       In other words, it doesn't matter *where* the typedef's are defined in the code.
+//
+//
+// TODO: add descriptive commenting to given typedef's
+
+/**
+ * @typedef {{type:string, point:Point, angle:number, length:number}} ArrowData
+ *
+ * Object containing instantiation data for a given endpoint.
+ */
+
+/**
+ * @typedef {{x:number, y:number}} Point
+ * 
+ * A point in view-coordinates.
+ */
+
+/**
+ * Common methods for endpoints
+ *
+ * @class
+ */
+var EndPoint = function () {
+  function EndPoint() {
+    (0, _classCallCheck3['default'])(this, EndPoint);
+  }
+
+  (0, _createClass3['default'])(EndPoint, null, [{
+    key: 'transform',
+
+
+    /**
+     * Apply transformation on points for display.
+     *
+     * The following is done:
+     * - rotate by the specified angle
+     * - multiply the (normalized) coordinates by the passed length
+     * - offset by the target coordinates
+     *
+     * @param {Array<Point>} points
+     * @param {ArrowData} arrowData
+     * @static
+     */
+    value: function transform(points, arrowData) {
+      if (!(points instanceof Array)) {
+        points = [points];
+      }
+
+      var x = arrowData.point.x;
+      var y = arrowData.point.y;
+      var angle = arrowData.angle;
+      var length = arrowData.length;
+
+      for (var i = 0; i < points.length; ++i) {
+        var p = points[i];
+        var xt = p.x * Math.cos(angle) - p.y * Math.sin(angle);
+        var yt = p.x * Math.sin(angle) + p.y * Math.cos(angle);
+
+        p.x = x + length * xt;
+        p.y = y + length * yt;
+      }
+    }
+
+    /**
+     * Draw a closed path using the given real coordinates.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Array.<Point>} points
+     * @static
+     */
+
+  }, {
+    key: 'drawPath',
+    value: function drawPath(ctx, points) {
+      ctx.beginPath();
+      ctx.moveTo(points[0].x, points[0].y);
+      for (var i = 1; i < points.length; ++i) {
+        ctx.lineTo(points[i].x, points[i].y);
+      }
+      ctx.closePath();
+    }
+  }]);
+  return EndPoint;
+}();
+
+/**
+ * Drawing methods for the arrow endpoint.
+ * @extends EndPoint
+ */
+
+
+var Arrow = function (_EndPoint) {
+  (0, _inherits3['default'])(Arrow, _EndPoint);
+
+  function Arrow() {
+    (0, _classCallCheck3['default'])(this, Arrow);
+    return (0, _possibleConstructorReturn3['default'])(this, (Arrow.__proto__ || (0, _getPrototypeOf2['default'])(Arrow)).apply(this, arguments));
+  }
+
+  (0, _createClass3['default'])(Arrow, null, [{
+    key: 'draw',
+
+
+    /**
+     * Draw this shape at the end of a line.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {ArrowData} arrowData
+     * @static
+     */
+    value: function draw(ctx, arrowData) {
+      // Normalized points of closed path, in the order that they should be drawn.
+      // (0, 0) is the attachment point, and the point around which should be rotated
+      var points = [{ x: 0, y: 0 }, { x: -1, y: 0.3 }, { x: -0.9, y: 0 }, { x: -1, y: -0.3 }];
+
+      EndPoint.transform(points, arrowData);
+      EndPoint.drawPath(ctx, points);
+    }
+  }]);
+  return Arrow;
+}(EndPoint);
+
+/**
+ * Drawing methods for the circle endpoint.
+ */
+
+
+var Circle = function () {
+  function Circle() {
+    (0, _classCallCheck3['default'])(this, Circle);
+  }
+
+  (0, _createClass3['default'])(Circle, null, [{
+    key: 'draw',
+
+
+    /**
+     * Draw this shape at the end of a line.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {ArrowData} arrowData
+     * @static
+     */
+    value: function draw(ctx, arrowData) {
+      var point = { x: -0.4, y: 0 };
+
+      EndPoint.transform(point, arrowData);
+      ctx.circle(point.x, point.y, arrowData.length * 0.4);
+    }
+  }]);
+  return Circle;
+}();
+
+/**
+ * Drawing methods for the bar endpoint.
+ */
+
+
+var Bar = function () {
+  function Bar() {
+    (0, _classCallCheck3['default'])(this, Bar);
+  }
+
+  (0, _createClass3['default'])(Bar, null, [{
+    key: 'draw',
+
+
+    /**
+     * Draw this shape at the end of a line.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {ArrowData} arrowData
+     * @static
+     */
+    value: function draw(ctx, arrowData) {
+      /*
+          var points = [
+            {x:0, y:0.5},
+            {x:0, y:-0.5}
+          ];
+      
+          EndPoint.transform(points, arrowData);
+          ctx.beginPath();
+          ctx.moveTo(points[0].x, points[0].y);
+          ctx.lineTo(points[1].x, points[1].y);
+          ctx.stroke();
+      */
+
+      var points = [{ x: 0, y: 0.5 }, { x: 0, y: -0.5 }, { x: -0.15, y: -0.5 }, { x: -0.15, y: 0.5 }];
+
+      EndPoint.transform(points, arrowData);
+      EndPoint.drawPath(ctx, points);
+    }
+  }]);
+  return Bar;
+}();
+
+/**
+ * Drawing methods for the endpoints.
+ */
+
+
+var EndPoints = function () {
+  function EndPoints() {
+    (0, _classCallCheck3['default'])(this, EndPoints);
+  }
+
+  (0, _createClass3['default'])(EndPoints, null, [{
+    key: 'draw',
+
+
+    /**
+     * Draw an endpoint
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {ArrowData} arrowData
+     * @static
+     */
+    value: function draw(ctx, arrowData) {
+      var type;
+      if (arrowData.type) {
+        type = arrowData.type.toLowerCase();
+      }
+
+      switch (type) {
+        case 'circle':
+          Circle.draw(ctx, arrowData);
+          break;
+        case 'bar':
+          Bar.draw(ctx, arrowData);
+          break;
+        case 'arrow': // fall-through
+        default:
+          Arrow.draw(ctx, arrowData);
+      }
+    }
+  }]);
+  return EndPoints;
+}();
+
+exports['default'] = EndPoints;
+
+/***/ }),
+/* 120 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Barnes Hut Solver
+ */
+var BarnesHutSolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function BarnesHutSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, BarnesHutSolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.barnesHutTree;
+    this.setOptions(options);
+    this.randomSeed = 5;
+
+    // debug: show grid
+    // this.body.emitter.on("afterDrawing", (ctx) => {this._debug(ctx,'#ff0000')})
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(BarnesHutSolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+      this.thetaInversed = 1 / this.options.theta;
+
+      // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius
+      this.overlapAvoidanceFactor = 1 - Math.max(0, Math.min(1, this.options.avoidOverlap));
+    }
+
+    /**
+     *
+     * @returns {number} random integer
+     */
+
+  }, {
+    key: "seededRandom",
+    value: function seededRandom() {
+      var x = Math.sin(this.randomSeed++) * 10000;
+      return x - Math.floor(x);
+    }
+
+    /**
+     * This function calculates the forces the nodes apply on each other based on a gravitational model.
+     * The Barnes Hut method is used to speed up this N-body simulation.
+     *
+     * @private
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) {
+        var node = void 0;
+        var nodes = this.body.nodes;
+        var nodeIndices = this.physicsBody.physicsNodeIndices;
+        var nodeCount = nodeIndices.length;
+
+        // create the tree
+        var barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);
+
+        // for debugging
+        this.barnesHutTree = barnesHutTree;
+
+        // place the nodes one by one recursively
+        for (var i = 0; i < nodeCount; i++) {
+          node = nodes[nodeIndices[i]];
+          if (node.options.mass > 0) {
+            // starting with root is irrelevant, it never passes the BarnesHutSolver condition
+            this._getForceContributions(barnesHutTree.root, node);
+          }
+        }
+      }
+    }
+
+    /**
+     * @param {Object} parentBranch
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: "_getForceContributions",
+    value: function _getForceContributions(parentBranch, node) {
+      this._getForceContribution(parentBranch.children.NW, node);
+      this._getForceContribution(parentBranch.children.NE, node);
+      this._getForceContribution(parentBranch.children.SW, node);
+      this._getForceContribution(parentBranch.children.SE, node);
+    }
+
+    /**
+     * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.
+     * If a region contains a single node, we check if it is not itself, then we apply the force.
+     *
+     * @param {Object} parentBranch
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: "_getForceContribution",
+    value: function _getForceContribution(parentBranch, node) {
+      // we get no force contribution from an empty region
+      if (parentBranch.childrenCount > 0) {
+        var dx = void 0,
+            dy = void 0,
+            distance = void 0;
+
+        // get the distance from the center of mass to the node.
+        dx = parentBranch.centerOfMass.x - node.x;
+        dy = parentBranch.centerOfMass.y - node.y;
+        distance = Math.sqrt(dx * dx + dy * dy);
+
+        // BarnesHutSolver condition
+        // original condition : s/d < theta = passed  ===  d/s > 1/theta = passed
+        // calcSize = 1/s --> d * 1/s > 1/theta = passed
+        if (distance * parentBranch.calcSize > this.thetaInversed) {
+          this._calculateForces(distance, dx, dy, node, parentBranch);
+        } else {
+          // Did not pass the condition, go into children if available
+          if (parentBranch.childrenCount === 4) {
+            this._getForceContributions(parentBranch, node);
+          } else {
+            // parentBranch must have only one node, if it was empty we wouldnt be here
+            if (parentBranch.children.data.id != node.id) {
+              // if it is not self
+              this._calculateForces(distance, dx, dy, node, parentBranch);
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * Calculate the forces based on the distance.
+     *
+     * @param {number} distance
+     * @param {number} dx
+     * @param {number} dy
+     * @param {Node} node
+     * @param {Object} parentBranch
+     * @private
+     */
+
+  }, {
+    key: "_calculateForces",
+    value: function _calculateForces(distance, dx, dy, node, parentBranch) {
+      if (distance === 0) {
+        distance = 0.1;
+        dx = distance;
+      }
+
+      if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {
+        distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius);
+      }
+
+      // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines
+      // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce
+      var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass / Math.pow(distance, 3);
+      var fx = dx * gravityForce;
+      var fy = dy * gravityForce;
+
+      this.physicsBody.forces[node.id].x += fx;
+      this.physicsBody.forces[node.id].y += fy;
+    }
+
+    /**
+     * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.
+     *
+     * @param {Array.<Node>} nodes
+     * @param {Array.<number>} nodeIndices
+     * @returns {{root: {centerOfMass: {x: number, y: number}, mass: number, range: {minX: number, maxX: number, minY: number, maxY: number}, size: number, calcSize: number, children: {data: null}, maxWidth: number, level: number, childrenCount: number}}} BarnesHutTree
+     * @private
+     */
+
+  }, {
+    key: "_formBarnesHutTree",
+    value: function _formBarnesHutTree(nodes, nodeIndices) {
+      var node = void 0;
+      var nodeCount = nodeIndices.length;
+
+      var minX = nodes[nodeIndices[0]].x;
+      var minY = nodes[nodeIndices[0]].y;
+      var maxX = nodes[nodeIndices[0]].x;
+      var maxY = nodes[nodeIndices[0]].y;
+
+      // get the range of the nodes
+      for (var i = 1; i < nodeCount; i++) {
+        var _node = nodes[nodeIndices[i]];
+        var x = _node.x;
+        var y = _node.y;
+        if (_node.options.mass > 0) {
+          if (x < minX) {
+            minX = x;
+          }
+          if (x > maxX) {
+            maxX = x;
+          }
+          if (y < minY) {
+            minY = y;
+          }
+          if (y > maxY) {
+            maxY = y;
+          }
+        }
+      }
+      // make the range a square
+      var sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y
+      if (sizeDiff > 0) {
+        minY -= 0.5 * sizeDiff;
+        maxY += 0.5 * sizeDiff;
+      } // xSize > ySize
+      else {
+          minX += 0.5 * sizeDiff;
+          maxX -= 0.5 * sizeDiff;
+        } // xSize < ySize
+
+
+      var minimumTreeSize = 1e-5;
+      var rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));
+      var halfRootSize = 0.5 * rootSize;
+      var centerX = 0.5 * (minX + maxX),
+          centerY = 0.5 * (minY + maxY);
+
+      // construct the barnesHutTree
+      var barnesHutTree = {
+        root: {
+          centerOfMass: { x: 0, y: 0 },
+          mass: 0,
+          range: {
+            minX: centerX - halfRootSize, maxX: centerX + halfRootSize,
+            minY: centerY - halfRootSize, maxY: centerY + halfRootSize
+          },
+          size: rootSize,
+          calcSize: 1 / rootSize,
+          children: { data: null },
+          maxWidth: 0,
+          level: 0,
+          childrenCount: 4
+        }
+      };
+      this._splitBranch(barnesHutTree.root);
+
+      // place the nodes one by one recursively
+      for (var _i = 0; _i < nodeCount; _i++) {
+        node = nodes[nodeIndices[_i]];
+        if (node.options.mass > 0) {
+          this._placeInTree(barnesHutTree.root, node);
+        }
+      }
+
+      // make global
+      return barnesHutTree;
+    }
+
+    /**
+     * this updates the mass of a branch. this is increased by adding a node.
+     *
+     * @param {Object} parentBranch
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: "_updateBranchMass",
+    value: function _updateBranchMass(parentBranch, node) {
+      var centerOfMass = parentBranch.centerOfMass;
+      var totalMass = parentBranch.mass + node.options.mass;
+      var totalMassInv = 1 / totalMass;
+
+      centerOfMass.x = centerOfMass.x * parentBranch.mass + node.x * node.options.mass;
+      centerOfMass.x *= totalMassInv;
+
+      centerOfMass.y = centerOfMass.y * parentBranch.mass + node.y * node.options.mass;
+      centerOfMass.y *= totalMassInv;
+
+      parentBranch.mass = totalMass;
+      var biggestSize = Math.max(Math.max(node.height, node.radius), node.width);
+      parentBranch.maxWidth = parentBranch.maxWidth < biggestSize ? biggestSize : parentBranch.maxWidth;
+    }
+
+    /**
+     * determine in which branch the node will be placed.
+     *
+     * @param {Object} parentBranch
+     * @param {Node} node
+     * @param {boolean} skipMassUpdate
+     * @private
+     */
+
+  }, {
+    key: "_placeInTree",
+    value: function _placeInTree(parentBranch, node, skipMassUpdate) {
+      if (skipMassUpdate != true || skipMassUpdate === undefined) {
+        // update the mass of the branch.
+        this._updateBranchMass(parentBranch, node);
+      }
+
+      var range = parentBranch.children.NW.range;
+      var region = void 0;
+      if (range.maxX > node.x) {
+        // in NW or SW
+        if (range.maxY > node.y) {
+          region = "NW";
+        } else {
+          region = "SW";
+        }
+      } else {
+        // in NE or SE
+        if (range.maxY > node.y) {
+          region = "NE";
+        } else {
+          region = "SE";
+        }
+      }
+
+      this._placeInRegion(parentBranch, node, region);
+    }
+
+    /**
+     * actually place the node in a region (or branch)
+     *
+     * @param {Object} parentBranch
+     * @param {Node} node
+     * @param {'NW'| 'NE' | 'SW' | 'SE'} region
+     * @private
+     */
+
+  }, {
+    key: "_placeInRegion",
+    value: function _placeInRegion(parentBranch, node, region) {
+      var children = parentBranch.children[region];
+
+      switch (children.childrenCount) {
+        case 0:
+          // place node here
+          children.children.data = node;
+          children.childrenCount = 1;
+          this._updateBranchMass(children, node);
+          break;
+        case 1:
+          // convert into children
+          // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)
+          // we move one node a little bit and we do not put it in the tree.
+          if (children.children.data.x === node.x && children.children.data.y === node.y) {
+            node.x += this.seededRandom();
+            node.y += this.seededRandom();
+          } else {
+            this._splitBranch(children);
+            this._placeInTree(children, node);
+          }
+          break;
+        case 4:
+          // place in branch
+          this._placeInTree(children, node);
+          break;
+      }
+    }
+
+    /**
+     * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch
+     * after the split is complete.
+     *
+     * @param {Object} parentBranch
+     * @private
+     */
+
+  }, {
+    key: "_splitBranch",
+    value: function _splitBranch(parentBranch) {
+      // if the branch is shaded with a node, replace the node in the new subset.
+      var containedNode = null;
+      if (parentBranch.childrenCount === 1) {
+        containedNode = parentBranch.children.data;
+        parentBranch.mass = 0;
+        parentBranch.centerOfMass.x = 0;
+        parentBranch.centerOfMass.y = 0;
+      }
+      parentBranch.childrenCount = 4;
+      parentBranch.children.data = null;
+      this._insertRegion(parentBranch, "NW");
+      this._insertRegion(parentBranch, "NE");
+      this._insertRegion(parentBranch, "SW");
+      this._insertRegion(parentBranch, "SE");
+
+      if (containedNode != null) {
+        this._placeInTree(parentBranch, containedNode);
+      }
+    }
+
+    /**
+     * This function subdivides the region into four new segments.
+     * Specifically, this inserts a single new segment.
+     * It fills the children section of the parentBranch
+     *
+     * @param {Object} parentBranch
+     * @param {'NW'| 'NE' | 'SW' | 'SE'} region
+     * @private
+     */
+
+  }, {
+    key: "_insertRegion",
+    value: function _insertRegion(parentBranch, region) {
+      var minX = void 0,
+          maxX = void 0,
+          minY = void 0,
+          maxY = void 0;
+      var childSize = 0.5 * parentBranch.size;
+      switch (region) {
+        case "NW":
+          minX = parentBranch.range.minX;
+          maxX = parentBranch.range.minX + childSize;
+          minY = parentBranch.range.minY;
+          maxY = parentBranch.range.minY + childSize;
+          break;
+        case "NE":
+          minX = parentBranch.range.minX + childSize;
+          maxX = parentBranch.range.maxX;
+          minY = parentBranch.range.minY;
+          maxY = parentBranch.range.minY + childSize;
+          break;
+        case "SW":
+          minX = parentBranch.range.minX;
+          maxX = parentBranch.range.minX + childSize;
+          minY = parentBranch.range.minY + childSize;
+          maxY = parentBranch.range.maxY;
+          break;
+        case "SE":
+          minX = parentBranch.range.minX + childSize;
+          maxX = parentBranch.range.maxX;
+          minY = parentBranch.range.minY + childSize;
+          maxY = parentBranch.range.maxY;
+          break;
+      }
+
+      parentBranch.children[region] = {
+        centerOfMass: { x: 0, y: 0 },
+        mass: 0,
+        range: { minX: minX, maxX: maxX, minY: minY, maxY: maxY },
+        size: 0.5 * parentBranch.size,
+        calcSize: 2 * parentBranch.calcSize,
+        children: { data: null },
+        maxWidth: 0,
+        level: parentBranch.level + 1,
+        childrenCount: 0
+      };
+    }
+
+    //---------------------------  DEBUGGING BELOW  ---------------------------//
+
+
+    /**
+     * This function is for debugging purposed, it draws the tree.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {string} color
+     * @private
+     */
+
+  }, {
+    key: "_debug",
+    value: function _debug(ctx, color) {
+      if (this.barnesHutTree !== undefined) {
+
+        ctx.lineWidth = 1;
+
+        this._drawBranch(this.barnesHutTree.root, ctx, color);
+      }
+    }
+
+    /**
+     * This function is for debugging purposes. It draws the branches recursively.
+     *
+     * @param {Object} branch
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {string} color
+     * @private
+     */
+
+  }, {
+    key: "_drawBranch",
+    value: function _drawBranch(branch, ctx, color) {
+      if (color === undefined) {
+        color = "#FF0000";
+      }
+
+      if (branch.childrenCount === 4) {
+        this._drawBranch(branch.children.NW, ctx);
+        this._drawBranch(branch.children.NE, ctx);
+        this._drawBranch(branch.children.SE, ctx);
+        this._drawBranch(branch.children.SW, ctx);
+      }
+      ctx.strokeStyle = color;
+      ctx.beginPath();
+      ctx.moveTo(branch.range.minX, branch.range.minY);
+      ctx.lineTo(branch.range.maxX, branch.range.minY);
+      ctx.stroke();
+
+      ctx.beginPath();
+      ctx.moveTo(branch.range.maxX, branch.range.minY);
+      ctx.lineTo(branch.range.maxX, branch.range.maxY);
+      ctx.stroke();
+
+      ctx.beginPath();
+      ctx.moveTo(branch.range.maxX, branch.range.maxY);
+      ctx.lineTo(branch.range.minX, branch.range.maxY);
+      ctx.stroke();
+
+      ctx.beginPath();
+      ctx.moveTo(branch.range.minX, branch.range.maxY);
+      ctx.lineTo(branch.range.minX, branch.range.minY);
+      ctx.stroke();
+
+      /*
+       if (branch.mass > 0) {
+       ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);
+       ctx.stroke();
+       }
+       */
+    }
+  }]);
+  return BarnesHutSolver;
+}();
+
+exports["default"] = BarnesHutSolver;
+
+/***/ }),
+/* 121 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Central Gravity Solver
+ */
+var CentralGravitySolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function CentralGravitySolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, CentralGravitySolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.setOptions(options);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(CentralGravitySolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     * Calculates forces for each node
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      var dx = void 0,
+          dy = void 0,
+          distance = void 0,
+          node = void 0;
+      var nodes = this.body.nodes;
+      var nodeIndices = this.physicsBody.physicsNodeIndices;
+      var forces = this.physicsBody.forces;
+
+      for (var i = 0; i < nodeIndices.length; i++) {
+        var nodeId = nodeIndices[i];
+        node = nodes[nodeId];
+        dx = -node.x;
+        dy = -node.y;
+        distance = Math.sqrt(dx * dx + dy * dy);
+
+        this._calculateForces(distance, dx, dy, forces, node);
+      }
+    }
+
+    /**
+     * Calculate the forces based on the distance.
+     * @param {number} distance
+     * @param {number} dx
+     * @param {number} dy
+     * @param {Object<Node.id, vis.Node>} forces
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: "_calculateForces",
+    value: function _calculateForces(distance, dx, dy, forces, node) {
+      var gravityForce = distance === 0 ? 0 : this.options.centralGravity / distance;
+      forces[node.id].x = dx * gravityForce;
+      forces[node.id].y = dy * gravityForce;
+    }
+  }]);
+  return CentralGravitySolver;
+}();
+
+exports["default"] = CentralGravitySolver;
+
+/***/ }),
+/* 122 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * This object contains all possible options. It will check if the types are correct, if required if the option is one
+ * of the allowed values.
+ *
+ * __any__ means that the name of the property does not matter.
+ * __type__ is a required field for all objects and contains the allowed types of all objects
+ */
+var string = 'string';
+var bool = 'boolean';
+var number = 'number';
+var array = 'array';
+var object = 'object'; // should only be in a __type__ property
+var dom = 'dom';
+var any = 'any';
+
+// List of endpoints
+var endPoints = ['arrow', 'circle', 'bar'];
+
+var allOptions = {
+  configure: {
+    enabled: { boolean: bool },
+    filter: { boolean: bool, string: string, array: array, 'function': 'function' },
+    container: { dom: dom },
+    showButton: { boolean: bool },
+    __type__: { object: object, boolean: bool, string: string, array: array, 'function': 'function' }
+  },
+  edges: {
+    arrows: {
+      to: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: endPoints }, __type__: { object: object, boolean: bool } },
+      middle: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: endPoints }, __type__: { object: object, boolean: bool } },
+      from: { enabled: { boolean: bool }, scaleFactor: { number: number }, type: { string: endPoints }, __type__: { object: object, boolean: bool } },
+      __type__: { string: ['from', 'to', 'middle'], object: object }
+    },
+    arrowStrikethrough: { boolean: bool },
+    chosen: {
+      label: { boolean: bool, 'function': 'function' },
+      edge: { boolean: bool, 'function': 'function' },
+      __type__: { object: object, boolean: bool }
+    },
+    color: {
+      color: { string: string },
+      highlight: { string: string },
+      hover: { string: string },
+      inherit: { string: ['from', 'to', 'both'], boolean: bool },
+      opacity: { number: number },
+      __type__: { object: object, string: string }
+    },
+    dashes: { boolean: bool, array: array },
+    font: {
+      color: { string: string },
+      size: { number: number }, // px
+      face: { string: string },
+      background: { string: string },
+      strokeWidth: { number: number }, // px
+      strokeColor: { string: string },
+      align: { string: ['horizontal', 'top', 'middle', 'bottom'] },
+      vadjust: { number: number },
+      multi: { boolean: bool, string: string },
+      bold: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      boldital: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      ital: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      mono: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      __type__: { object: object, string: string }
+    },
+    hidden: { boolean: bool },
+    hoverWidth: { 'function': 'function', number: number },
+    label: { string: string, 'undefined': 'undefined' },
+    labelHighlightBold: { boolean: bool },
+    length: { number: number, 'undefined': 'undefined' },
+    physics: { boolean: bool },
+    scaling: {
+      min: { number: number },
+      max: { number: number },
+      label: {
+        enabled: { boolean: bool },
+        min: { number: number },
+        max: { number: number },
+        maxVisible: { number: number },
+        drawThreshold: { number: number },
+        __type__: { object: object, boolean: bool }
+      },
+      customScalingFunction: { 'function': 'function' },
+      __type__: { object: object }
+    },
+    selectionWidth: { 'function': 'function', number: number },
+    selfReferenceSize: { number: number },
+    shadow: {
+      enabled: { boolean: bool },
+      color: { string: string },
+      size: { number: number },
+      x: { number: number },
+      y: { number: number },
+      __type__: { object: object, boolean: bool }
+    },
+    smooth: {
+      enabled: { boolean: bool },
+      type: { string: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'] },
+      roundness: { number: number },
+      forceDirection: { string: ['horizontal', 'vertical', 'none'], boolean: bool },
+      __type__: { object: object, boolean: bool }
+    },
+    title: { string: string, 'undefined': 'undefined' },
+    width: { number: number },
+    widthConstraint: {
+      maximum: { number: number },
+      __type__: { object: object, boolean: bool, number: number }
+    },
+    value: { number: number, 'undefined': 'undefined' },
+    __type__: { object: object }
+  },
+  groups: {
+    useDefaultGroups: { boolean: bool },
+    __any__: 'get from nodes, will be overwritten below',
+    __type__: { object: object }
+  },
+  interaction: {
+    dragNodes: { boolean: bool },
+    dragView: { boolean: bool },
+    hideEdgesOnDrag: { boolean: bool },
+    hideNodesOnDrag: { boolean: bool },
+    hover: { boolean: bool },
+    keyboard: {
+      enabled: { boolean: bool },
+      speed: { x: { number: number }, y: { number: number }, zoom: { number: number }, __type__: { object: object } },
+      bindToWindow: { boolean: bool },
+      __type__: { object: object, boolean: bool }
+    },
+    multiselect: { boolean: bool },
+    navigationButtons: { boolean: bool },
+    selectable: { boolean: bool },
+    selectConnectedEdges: { boolean: bool },
+    hoverConnectedEdges: { boolean: bool },
+    tooltipDelay: { number: number },
+    zoomView: { boolean: bool },
+    __type__: { object: object }
+  },
+  layout: {
+    randomSeed: { 'undefined': 'undefined', number: number },
+    improvedLayout: { boolean: bool },
+    hierarchical: {
+      enabled: { boolean: bool },
+      levelSeparation: { number: number },
+      nodeSpacing: { number: number },
+      treeSpacing: { number: number },
+      blockShifting: { boolean: bool },
+      edgeMinimization: { boolean: bool },
+      parentCentralization: { boolean: bool },
+      direction: { string: ['UD', 'DU', 'LR', 'RL'] }, // UD, DU, LR, RL
+      sortMethod: { string: ['hubsize', 'directed'] }, // hubsize, directed
+      __type__: { object: object, boolean: bool }
+    },
+    __type__: { object: object }
+  },
+  manipulation: {
+    enabled: { boolean: bool },
+    initiallyActive: { boolean: bool },
+    addNode: { boolean: bool, 'function': 'function' },
+    addEdge: { boolean: bool, 'function': 'function' },
+    editNode: { 'function': 'function' },
+    editEdge: {
+      editWithoutDrag: { 'function': 'function' },
+      __type__: { object: object, boolean: bool, 'function': 'function' }
+    },
+    deleteNode: { boolean: bool, 'function': 'function' },
+    deleteEdge: { boolean: bool, 'function': 'function' },
+    controlNodeStyle: 'get from nodes, will be overwritten below',
+    __type__: { object: object, boolean: bool }
+  },
+  nodes: {
+    borderWidth: { number: number },
+    borderWidthSelected: { number: number, 'undefined': 'undefined' },
+    brokenImage: { string: string, 'undefined': 'undefined' },
+    chosen: {
+      label: { boolean: bool, 'function': 'function' },
+      node: { boolean: bool, 'function': 'function' },
+      __type__: { object: object, boolean: bool }
+    },
+    color: {
+      border: { string: string },
+      background: { string: string },
+      highlight: {
+        border: { string: string },
+        background: { string: string },
+        __type__: { object: object, string: string }
+      },
+      hover: {
+        border: { string: string },
+        background: { string: string },
+        __type__: { object: object, string: string }
+      },
+      __type__: { object: object, string: string }
+    },
+    fixed: {
+      x: { boolean: bool },
+      y: { boolean: bool },
+      __type__: { object: object, boolean: bool }
+    },
+    font: {
+      align: { string: string },
+      color: { string: string },
+      size: { number: number }, // px
+      face: { string: string },
+      background: { string: string },
+      strokeWidth: { number: number }, // px
+      strokeColor: { string: string },
+      vadjust: { number: number },
+      multi: { boolean: bool, string: string },
+      bold: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      boldital: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      ital: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      mono: {
+        color: { string: string },
+        size: { number: number }, // px
+        face: { string: string },
+        mod: { string: string },
+        vadjust: { number: number },
+        __type__: { object: object, string: string }
+      },
+      __type__: { object: object, string: string }
+    },
+    group: { string: string, number: number, 'undefined': 'undefined' },
+    heightConstraint: {
+      minimum: { number: number },
+      valign: { string: string },
+      __type__: { object: object, boolean: bool, number: number }
+    },
+    hidden: { boolean: bool },
+    icon: {
+      face: { string: string },
+      code: { string: string }, //'\uf007',
+      size: { number: number }, //50,
+      color: { string: string },
+      __type__: { object: object }
+    },
+    id: { string: string, number: number },
+    image: {
+      selected: { string: string, 'undefined': 'undefined' }, // --> URL
+      unselected: { string: string, 'undefined': 'undefined' }, // --> URL
+      __type__: { object: object, string: string }
+    },
+    label: { string: string, 'undefined': 'undefined' },
+    labelHighlightBold: { boolean: bool },
+    level: { number: number, 'undefined': 'undefined' },
+    margin: {
+      top: { number: number },
+      right: { number: number },
+      bottom: { number: number },
+      left: { number: number },
+      __type__: { object: object, number: number }
+    },
+    mass: { number: number },
+    physics: { boolean: bool },
+    scaling: {
+      min: { number: number },
+      max: { number: number },
+      label: {
+        enabled: { boolean: bool },
+        min: { number: number },
+        max: { number: number },
+        maxVisible: { number: number },
+        drawThreshold: { number: number },
+        __type__: { object: object, boolean: bool }
+      },
+      customScalingFunction: { 'function': 'function' },
+      __type__: { object: object }
+    },
+    shadow: {
+      enabled: { boolean: bool },
+      color: { string: string },
+      size: { number: number },
+      x: { number: number },
+      y: { number: number },
+      __type__: { object: object, boolean: bool }
+    },
+    shape: { string: ['ellipse', 'circle', 'database', 'box', 'text', 'image', 'circularImage', 'diamond', 'dot', 'star', 'triangle', 'triangleDown', 'square', 'icon', 'hexagon'] },
+    shapeProperties: {
+      borderDashes: { boolean: bool, array: array },
+      borderRadius: { number: number },
+      interpolation: { boolean: bool },
+      useImageSize: { boolean: bool },
+      useBorderWithImage: { boolean: bool },
+      __type__: { object: object }
+    },
+    size: { number: number },
+    title: { string: string, dom: dom, 'undefined': 'undefined' },
+    value: { number: number, 'undefined': 'undefined' },
+    widthConstraint: {
+      minimum: { number: number },
+      maximum: { number: number },
+      __type__: { object: object, boolean: bool, number: number }
+    },
+    x: { number: number },
+    y: { number: number },
+    __type__: { object: object }
+  },
+  physics: {
+    enabled: { boolean: bool },
+    barnesHut: {
+      gravitationalConstant: { number: number },
+      centralGravity: { number: number },
+      springLength: { number: number },
+      springConstant: { number: number },
+      damping: { number: number },
+      avoidOverlap: { number: number },
+      __type__: { object: object }
+    },
+    forceAtlas2Based: {
+      gravitationalConstant: { number: number },
+      centralGravity: { number: number },
+      springLength: { number: number },
+      springConstant: { number: number },
+      damping: { number: number },
+      avoidOverlap: { number: number },
+      __type__: { object: object }
+    },
+    repulsion: {
+      centralGravity: { number: number },
+      springLength: { number: number },
+      springConstant: { number: number },
+      nodeDistance: { number: number },
+      damping: { number: number },
+      __type__: { object: object }
+    },
+    hierarchicalRepulsion: {
+      centralGravity: { number: number },
+      springLength: { number: number },
+      springConstant: { number: number },
+      nodeDistance: { number: number },
+      damping: { number: number },
+      __type__: { object: object }
+    },
+    maxVelocity: { number: number },
+    minVelocity: { number: number }, // px/s
+    solver: { string: ['barnesHut', 'repulsion', 'hierarchicalRepulsion', 'forceAtlas2Based'] },
+    stabilization: {
+      enabled: { boolean: bool },
+      iterations: { number: number }, // maximum number of iteration to stabilize
+      updateInterval: { number: number },
+      onlyDynamicEdges: { boolean: bool },
+      fit: { boolean: bool },
+      __type__: { object: object, boolean: bool }
+    },
+    timestep: { number: number },
+    adaptiveTimestep: { boolean: bool },
+    __type__: { object: object, boolean: bool }
+  },
+
+  //globals :
+  autoResize: { boolean: bool },
+  clickToUse: { boolean: bool },
+  locale: { string: string },
+  locales: {
+    __any__: { any: any },
+    __type__: { object: object }
+  },
+  height: { string: string },
+  width: { string: string },
+  __type__: { object: object }
+};
+
+allOptions.groups.__any__ = allOptions.nodes;
+allOptions.manipulation.controlNodeStyle = allOptions.nodes;
+
+var configureOptions = {
+  nodes: {
+    borderWidth: [1, 0, 10, 1],
+    borderWidthSelected: [2, 0, 10, 1],
+    color: {
+      border: ['color', '#2B7CE9'],
+      background: ['color', '#97C2FC'],
+      highlight: {
+        border: ['color', '#2B7CE9'],
+        background: ['color', '#D2E5FF']
+      },
+      hover: {
+        border: ['color', '#2B7CE9'],
+        background: ['color', '#D2E5FF']
+      }
+    },
+    fixed: {
+      x: false,
+      y: false
+    },
+    font: {
+      color: ['color', '#343434'],
+      size: [14, 0, 100, 1], // px
+      face: ['arial', 'verdana', 'tahoma'],
+      background: ['color', 'none'],
+      strokeWidth: [0, 0, 50, 1], // px
+      strokeColor: ['color', '#ffffff']
+    },
+    //group: 'string',
+    hidden: false,
+    labelHighlightBold: true,
+    //icon: {
+    //  face: 'string',  //'FontAwesome',
+    //  code: 'string',  //'\uf007',
+    //  size: [50, 0, 200, 1],  //50,
+    //  color: ['color','#2B7CE9']   //'#aa00ff'
+    //},
+    //image: 'string', // --> URL
+    physics: true,
+    scaling: {
+      min: [10, 0, 200, 1],
+      max: [30, 0, 200, 1],
+      label: {
+        enabled: false,
+        min: [14, 0, 200, 1],
+        max: [30, 0, 200, 1],
+        maxVisible: [30, 0, 200, 1],
+        drawThreshold: [5, 0, 20, 1]
+      }
+    },
+    shadow: {
+      enabled: false,
+      color: 'rgba(0,0,0,0.5)',
+      size: [10, 0, 20, 1],
+      x: [5, -30, 30, 1],
+      y: [5, -30, 30, 1]
+    },
+    shape: ['ellipse', 'box', 'circle', 'database', 'diamond', 'dot', 'square', 'star', 'text', 'triangle', 'triangleDown', 'hexagon'],
+    shapeProperties: {
+      borderDashes: false,
+      borderRadius: [6, 0, 20, 1],
+      interpolation: true,
+      useImageSize: false
+    },
+    size: [25, 0, 200, 1]
+  },
+  edges: {
+    arrows: {
+      to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },
+      middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },
+      from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }
+    },
+    arrowStrikethrough: true,
+    color: {
+      color: ['color', '#848484'],
+      highlight: ['color', '#848484'],
+      hover: ['color', '#848484'],
+      inherit: ['from', 'to', 'both', true, false],
+      opacity: [1, 0, 1, 0.05]
+    },
+    dashes: false,
+    font: {
+      color: ['color', '#343434'],
+      size: [14, 0, 100, 1], // px
+      face: ['arial', 'verdana', 'tahoma'],
+      background: ['color', 'none'],
+      strokeWidth: [2, 0, 50, 1], // px
+      strokeColor: ['color', '#ffffff'],
+      align: ['horizontal', 'top', 'middle', 'bottom']
+    },
+    hidden: false,
+    hoverWidth: [1.5, 0, 5, 0.1],
+    labelHighlightBold: true,
+    physics: true,
+    scaling: {
+      min: [1, 0, 100, 1],
+      max: [15, 0, 100, 1],
+      label: {
+        enabled: true,
+        min: [14, 0, 200, 1],
+        max: [30, 0, 200, 1],
+        maxVisible: [30, 0, 200, 1],
+        drawThreshold: [5, 0, 20, 1]
+      }
+    },
+    selectionWidth: [1.5, 0, 5, 0.1],
+    selfReferenceSize: [20, 0, 200, 1],
+    shadow: {
+      enabled: false,
+      color: 'rgba(0,0,0,0.5)',
+      size: [10, 0, 20, 1],
+      x: [5, -30, 30, 1],
+      y: [5, -30, 30, 1]
+    },
+    smooth: {
+      enabled: true,
+      type: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'],
+      forceDirection: ['horizontal', 'vertical', 'none'],
+      roundness: [0.5, 0, 1, 0.05]
+    },
+    width: [1, 0, 30, 1]
+  },
+  layout: {
+    //randomSeed: [0, 0, 500, 1],
+    //improvedLayout: true,
+    hierarchical: {
+      enabled: false,
+      levelSeparation: [150, 20, 500, 5],
+      nodeSpacing: [100, 20, 500, 5],
+      treeSpacing: [200, 20, 500, 5],
+      blockShifting: true,
+      edgeMinimization: true,
+      parentCentralization: true,
+      direction: ['UD', 'DU', 'LR', 'RL'], // UD, DU, LR, RL
+      sortMethod: ['hubsize', 'directed'] // hubsize, directed
+    }
+  },
+  interaction: {
+    dragNodes: true,
+    dragView: true,
+    hideEdgesOnDrag: false,
+    hideNodesOnDrag: false,
+    hover: false,
+    keyboard: {
+      enabled: false,
+      speed: { x: [10, 0, 40, 1], y: [10, 0, 40, 1], zoom: [0.02, 0, 0.1, 0.005] },
+      bindToWindow: true
+    },
+    multiselect: false,
+    navigationButtons: false,
+    selectable: true,
+    selectConnectedEdges: true,
+    hoverConnectedEdges: true,
+    tooltipDelay: [300, 0, 1000, 25],
+    zoomView: true
+  },
+  manipulation: {
+    enabled: false,
+    initiallyActive: false
+  },
+  physics: {
+    enabled: true,
+    barnesHut: {
+      //theta: [0.5, 0.1, 1, 0.05],
+      gravitationalConstant: [-2000, -30000, 0, 50],
+      centralGravity: [0.3, 0, 10, 0.05],
+      springLength: [95, 0, 500, 5],
+      springConstant: [0.04, 0, 1.2, 0.005],
+      damping: [0.09, 0, 1, 0.01],
+      avoidOverlap: [0, 0, 1, 0.01]
+    },
+    forceAtlas2Based: {
+      //theta: [0.5, 0.1, 1, 0.05],
+      gravitationalConstant: [-50, -500, 0, 1],
+      centralGravity: [0.01, 0, 1, 0.005],
+      springLength: [95, 0, 500, 5],
+      springConstant: [0.08, 0, 1.2, 0.005],
+      damping: [0.4, 0, 1, 0.01],
+      avoidOverlap: [0, 0, 1, 0.01]
+    },
+    repulsion: {
+      centralGravity: [0.2, 0, 10, 0.05],
+      springLength: [200, 0, 500, 5],
+      springConstant: [0.05, 0, 1.2, 0.005],
+      nodeDistance: [100, 0, 500, 5],
+      damping: [0.09, 0, 1, 0.01]
+    },
+    hierarchicalRepulsion: {
+      centralGravity: [0.2, 0, 10, 0.05],
+      springLength: [100, 0, 500, 5],
+      springConstant: [0.01, 0, 1.2, 0.005],
+      nodeDistance: [120, 0, 500, 5],
+      damping: [0.09, 0, 1, 0.01]
+    },
+    maxVelocity: [50, 0, 150, 1],
+    minVelocity: [0.1, 0.01, 0.5, 0.01],
+    solver: ['barnesHut', 'forceAtlas2Based', 'repulsion', 'hierarchicalRepulsion'],
+    timestep: [0.5, 0.01, 1, 0.01]
+    //adaptiveTimestep: true
+  }
+};
+
+exports.allOptions = allOptions;
+exports.configureOptions = configureOptions;
+
+/***/ }),
+/* 123 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var util = __webpack_require__(2);
+
+// Graph3d
+util.extend(exports, __webpack_require__(159));
+
+// Timeline & Graph2d
+util.extend(exports, __webpack_require__(177));
+
+// Network
+util.extend(exports, __webpack_require__(181));
+
+/***/ }),
+/* 124 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(49);
+__webpack_require__(60);
+module.exports = __webpack_require__(136);
+
+
+/***/ }),
+/* 125 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var addToUnscopables = __webpack_require__(126);
+var step = __webpack_require__(127);
+var Iterators = __webpack_require__(31);
+var toIObject = __webpack_require__(25);
+
+// 22.1.3.4 Array.prototype.entries()
+// 22.1.3.13 Array.prototype.keys()
+// 22.1.3.29 Array.prototype.values()
+// 22.1.3.30 Array.prototype[@@iterator]()
+module.exports = __webpack_require__(79)(Array, 'Array', function (iterated, kind) {
+  this._t = toIObject(iterated); // target
+  this._i = 0;                   // next index
+  this._k = kind;                // kind
+// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+}, function () {
+  var O = this._t;
+  var kind = this._k;
+  var index = this._i++;
+  if (!O || index >= O.length) {
+    this._t = undefined;
+    return step(1);
+  }
+  if (kind == 'keys') return step(0, index);
+  if (kind == 'values') return step(0, O[index]);
+  return step(0, [index, O[index]]);
+}, 'values');
+
+// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+Iterators.Arguments = Iterators.Array;
+
+addToUnscopables('keys');
+addToUnscopables('values');
+addToUnscopables('entries');
+
+
+/***/ }),
+/* 126 */
+/***/ (function(module, exports) {
+
+module.exports = function () { /* empty */ };
+
+
+/***/ }),
+/* 127 */
+/***/ (function(module, exports) {
+
+module.exports = function (done, value) {
+  return { value: value, done: !!done };
+};
+
+
+/***/ }),
+/* 128 */
+/***/ (function(module, exports) {
+
+module.exports = function (it) {
+  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
+  return it;
+};
+
+
+/***/ }),
+/* 129 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var create = __webpack_require__(54);
+var descriptor = __webpack_require__(39);
+var setToStringTag = __webpack_require__(59);
+var IteratorPrototype = {};
+
+// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+__webpack_require__(26)(IteratorPrototype, __webpack_require__(13)('iterator'), function () { return this; });
+
+module.exports = function (Constructor, NAME, next) {
+  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
+  setToStringTag(Constructor, NAME + ' Iterator');
+};
+
+
+/***/ }),
+/* 130 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var dP = __webpack_require__(20);
+var anObject = __webpack_require__(27);
+var getKeys = __webpack_require__(33);
+
+module.exports = __webpack_require__(21) ? Object.defineProperties : function defineProperties(O, Properties) {
+  anObject(O);
+  var keys = getKeys(Properties);
+  var length = keys.length;
+  var i = 0;
+  var P;
+  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
+  return O;
+};
+
+
+/***/ }),
+/* 131 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// false -> Array#indexOf
+// true  -> Array#includes
+var toIObject = __webpack_require__(25);
+var toLength = __webpack_require__(132);
+var toAbsoluteIndex = __webpack_require__(133);
+module.exports = function (IS_INCLUDES) {
+  return function ($this, el, fromIndex) {
+    var O = toIObject($this);
+    var length = toLength(O.length);
+    var index = toAbsoluteIndex(fromIndex, length);
+    var value;
+    // Array#includes uses SameValueZero equality algorithm
+    // eslint-disable-next-line no-self-compare
+    if (IS_INCLUDES && el != el) while (length > index) {
+      value = O[index++];
+      // eslint-disable-next-line no-self-compare
+      if (value != value) return true;
+    // Array#indexOf ignores holes, Array#includes - not
+    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
+      if (O[index] === el) return IS_INCLUDES || index || 0;
+    } return !IS_INCLUDES && -1;
+  };
+};
+
+
+/***/ }),
+/* 132 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.1.15 ToLength
+var toInteger = __webpack_require__(55);
+var min = Math.min;
+module.exports = function (it) {
+  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+};
+
+
+/***/ }),
+/* 133 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(55);
+var max = Math.max;
+var min = Math.min;
+module.exports = function (index, length) {
+  index = toInteger(index);
+  return index < 0 ? max(index + length, 0) : min(index, length);
+};
+
+
+/***/ }),
+/* 134 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var document = __webpack_require__(18).document;
+module.exports = document && document.documentElement;
+
+
+/***/ }),
+/* 135 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var toInteger = __webpack_require__(55);
+var defined = __webpack_require__(51);
+// true  -> String#at
+// false -> String#codePointAt
+module.exports = function (TO_STRING) {
+  return function (that, pos) {
+    var s = String(defined(that));
+    var i = toInteger(pos);
+    var l = s.length;
+    var a, b;
+    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
+    a = s.charCodeAt(i);
+    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+      ? TO_STRING ? s.charAt(i) : a
+      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+  };
+};
+
+
+/***/ }),
+/* 136 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var anObject = __webpack_require__(27);
+var get = __webpack_require__(137);
+module.exports = __webpack_require__(7).getIterator = function (it) {
+  var iterFn = get(it);
+  if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');
+  return anObject(iterFn.call(it));
+};
+
+
+/***/ }),
+/* 137 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var classof = __webpack_require__(86);
+var ITERATOR = __webpack_require__(13)('iterator');
+var Iterators = __webpack_require__(31);
+module.exports = __webpack_require__(7).getIteratorMethod = function (it) {
+  if (it != undefined) return it[ITERATOR]
+    || it['@@iterator']
+    || Iterators[classof(it)];
+};
+
+
+/***/ }),
+/* 138 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(139);
+var $Object = __webpack_require__(7).Object;
+module.exports = function create(P, D) {
+  return $Object.create(P, D);
+};
+
+
+/***/ }),
+/* 139 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__(17);
+// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+$export($export.S, 'Object', { create: __webpack_require__(54) });
+
+
+/***/ }),
+/* 140 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(141);
+module.exports = __webpack_require__(7).Object.keys;
+
+
+/***/ }),
+/* 141 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.14 Object.keys(O)
+var toObject = __webpack_require__(41);
+var $keys = __webpack_require__(33);
+
+__webpack_require__(87)('keys', function () {
+  return function keys(it) {
+    return $keys(toObject(it));
+  };
+});
+
+
+/***/ }),
+/* 142 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(143), __esModule: true };
+
+/***/ }),
+/* 143 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(60);
+__webpack_require__(49);
+module.exports = __webpack_require__(61).f('iterator');
+
+
+/***/ }),
+/* 144 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(145), __esModule: true };
+
+/***/ }),
+/* 145 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(146);
+__webpack_require__(151);
+__webpack_require__(152);
+__webpack_require__(153);
+module.exports = __webpack_require__(7).Symbol;
+
+
+/***/ }),
+/* 146 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// ECMAScript 6 symbols shim
+var global = __webpack_require__(18);
+var has = __webpack_require__(22);
+var DESCRIPTORS = __webpack_require__(21);
+var $export = __webpack_require__(17);
+var redefine = __webpack_require__(83);
+var META = __webpack_require__(147).KEY;
+var $fails = __webpack_require__(28);
+var shared = __webpack_require__(57);
+var setToStringTag = __webpack_require__(59);
+var uid = __webpack_require__(40);
+var wks = __webpack_require__(13);
+var wksExt = __webpack_require__(61);
+var wksDefine = __webpack_require__(62);
+var enumKeys = __webpack_require__(148);
+var isArray = __webpack_require__(149);
+var anObject = __webpack_require__(27);
+var toIObject = __webpack_require__(25);
+var toPrimitive = __webpack_require__(53);
+var createDesc = __webpack_require__(39);
+var _create = __webpack_require__(54);
+var gOPNExt = __webpack_require__(150);
+var $GOPD = __webpack_require__(89);
+var $DP = __webpack_require__(20);
+var $keys = __webpack_require__(33);
+var gOPD = $GOPD.f;
+var dP = $DP.f;
+var gOPN = gOPNExt.f;
+var $Symbol = global.Symbol;
+var $JSON = global.JSON;
+var _stringify = $JSON && $JSON.stringify;
+var PROTOTYPE = 'prototype';
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
+var isEnum = {}.propertyIsEnumerable;
+var SymbolRegistry = shared('symbol-registry');
+var AllSymbols = shared('symbols');
+var OPSymbols = shared('op-symbols');
+var ObjectProto = Object[PROTOTYPE];
+var USE_NATIVE = typeof $Symbol == 'function';
+var QObject = global.QObject;
+// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+var setSymbolDesc = DESCRIPTORS && $fails(function () {
+  return _create(dP({}, 'a', {
+    get: function () { return dP(this, 'a', { value: 7 }).a; }
+  })).a != 7;
+}) ? function (it, key, D) {
+  var protoDesc = gOPD(ObjectProto, key);
+  if (protoDesc) delete ObjectProto[key];
+  dP(it, key, D);
+  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
+} : dP;
+
+var wrap = function (tag) {
+  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+  sym._k = tag;
+  return sym;
+};
+
+var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
+  return typeof it == 'symbol';
+} : function (it) {
+  return it instanceof $Symbol;
+};
+
+var $defineProperty = function defineProperty(it, key, D) {
+  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
+  anObject(it);
+  key = toPrimitive(key, true);
+  anObject(D);
+  if (has(AllSymbols, key)) {
+    if (!D.enumerable) {
+      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
+      it[HIDDEN][key] = true;
+    } else {
+      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+      D = _create(D, { enumerable: createDesc(0, false) });
+    } return setSymbolDesc(it, key, D);
+  } return dP(it, key, D);
+};
+var $defineProperties = function defineProperties(it, P) {
+  anObject(it);
+  var keys = enumKeys(P = toIObject(P));
+  var i = 0;
+  var l = keys.length;
+  var key;
+  while (l > i) $defineProperty(it, key = keys[i++], P[key]);
+  return it;
+};
+var $create = function create(it, P) {
+  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+};
+var $propertyIsEnumerable = function propertyIsEnumerable(key) {
+  var E = isEnum.call(this, key = toPrimitive(key, true));
+  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+};
+var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
+  it = toIObject(it);
+  key = toPrimitive(key, true);
+  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
+  var D = gOPD(it, key);
+  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+  return D;
+};
+var $getOwnPropertyNames = function getOwnPropertyNames(it) {
+  var names = gOPN(toIObject(it));
+  var result = [];
+  var i = 0;
+  var key;
+  while (names.length > i) {
+    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+  } return result;
+};
+var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
+  var IS_OP = it === ObjectProto;
+  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
+  var result = [];
+  var i = 0;
+  var key;
+  while (names.length > i) {
+    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
+  } return result;
+};
+
+// 19.4.1.1 Symbol([description])
+if (!USE_NATIVE) {
+  $Symbol = function Symbol() {
+    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
+    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+    var $set = function (value) {
+      if (this === ObjectProto) $set.call(OPSymbols, value);
+      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+      setSymbolDesc(this, tag, createDesc(1, value));
+    };
+    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
+    return wrap(tag);
+  };
+  redefine($Symbol[PROTOTYPE], 'toString', function toString() {
+    return this._k;
+  });
+
+  $GOPD.f = $getOwnPropertyDescriptor;
+  $DP.f = $defineProperty;
+  __webpack_require__(88).f = gOPNExt.f = $getOwnPropertyNames;
+  __webpack_require__(42).f = $propertyIsEnumerable;
+  __webpack_require__(63).f = $getOwnPropertySymbols;
+
+  if (DESCRIPTORS && !__webpack_require__(52)) {
+    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+  }
+
+  wksExt.f = function (name) {
+    return wrap(wks(name));
+  };
+}
+
+$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
+
+for (var es6Symbols = (
+  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
+
+for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
+
+$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+  // 19.4.2.1 Symbol.for(key)
+  'for': function (key) {
+    return has(SymbolRegistry, key += '')
+      ? SymbolRegistry[key]
+      : SymbolRegistry[key] = $Symbol(key);
+  },
+  // 19.4.2.5 Symbol.keyFor(sym)
+  keyFor: function keyFor(sym) {
+    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
+    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
+  },
+  useSetter: function () { setter = true; },
+  useSimple: function () { setter = false; }
+});
+
+$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+  // 19.1.2.2 Object.create(O [, Properties])
+  create: $create,
+  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+  defineProperty: $defineProperty,
+  // 19.1.2.3 Object.defineProperties(O, Properties)
+  defineProperties: $defineProperties,
+  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+  // 19.1.2.7 Object.getOwnPropertyNames(O)
+  getOwnPropertyNames: $getOwnPropertyNames,
+  // 19.1.2.8 Object.getOwnPropertySymbols(O)
+  getOwnPropertySymbols: $getOwnPropertySymbols
+});
+
+// 24.3.2 JSON.stringify(value [, replacer [, space]])
+$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
+  var S = $Symbol();
+  // MS Edge converts symbol values to JSON as {}
+  // WebKit converts symbol values to JSON as null
+  // V8 throws on boxed symbols
+  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
+})), 'JSON', {
+  stringify: function stringify(it) {
+    if (it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+    var args = [it];
+    var i = 1;
+    var replacer, $replacer;
+    while (arguments.length > i) args.push(arguments[i++]);
+    replacer = args[1];
+    if (typeof replacer == 'function') $replacer = replacer;
+    if ($replacer || !isArray(replacer)) replacer = function (key, value) {
+      if ($replacer) value = $replacer.call(this, key, value);
+      if (!isSymbol(value)) return value;
+    };
+    args[1] = replacer;
+    return _stringify.apply($JSON, args);
+  }
+});
+
+// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(26)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+// 19.4.3.5 Symbol.prototype[@@toStringTag]
+setToStringTag($Symbol, 'Symbol');
+// 20.2.1.9 Math[@@toStringTag]
+setToStringTag(Math, 'Math', true);
+// 24.3.3 JSON[@@toStringTag]
+setToStringTag(global.JSON, 'JSON', true);
+
+
+/***/ }),
+/* 147 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var META = __webpack_require__(40)('meta');
+var isObject = __webpack_require__(32);
+var has = __webpack_require__(22);
+var setDesc = __webpack_require__(20).f;
+var id = 0;
+var isExtensible = Object.isExtensible || function () {
+  return true;
+};
+var FREEZE = !__webpack_require__(28)(function () {
+  return isExtensible(Object.preventExtensions({}));
+});
+var setMeta = function (it) {
+  setDesc(it, META, { value: {
+    i: 'O' + ++id, // object ID
+    w: {}          // weak collections IDs
+  } });
+};
+var fastKey = function (it, create) {
+  // return primitive with prefix
+  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return 'F';
+    // not necessary to add metadata
+    if (!create) return 'E';
+    // add missing metadata
+    setMeta(it);
+  // return object ID
+  } return it[META].i;
+};
+var getWeak = function (it, create) {
+  if (!has(it, META)) {
+    // can't set metadata to uncaught frozen object
+    if (!isExtensible(it)) return true;
+    // not necessary to add metadata
+    if (!create) return false;
+    // add missing metadata
+    setMeta(it);
+  // return hash weak collections IDs
+  } return it[META].w;
+};
+// add metadata on freeze-family methods calling
+var onFreeze = function (it) {
+  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
+  return it;
+};
+var meta = module.exports = {
+  KEY: META,
+  NEED: false,
+  fastKey: fastKey,
+  getWeak: getWeak,
+  onFreeze: onFreeze
+};
+
+
+/***/ }),
+/* 148 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// all enumerable object keys, includes symbols
+var getKeys = __webpack_require__(33);
+var gOPS = __webpack_require__(63);
+var pIE = __webpack_require__(42);
+module.exports = function (it) {
+  var result = getKeys(it);
+  var getSymbols = gOPS.f;
+  if (getSymbols) {
+    var symbols = getSymbols(it);
+    var isEnum = pIE.f;
+    var i = 0;
+    var key;
+    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
+  } return result;
+};
+
+
+/***/ }),
+/* 149 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 7.2.2 IsArray(argument)
+var cof = __webpack_require__(50);
+module.exports = Array.isArray || function isArray(arg) {
+  return cof(arg) == 'Array';
+};
+
+
+/***/ }),
+/* 150 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+var toIObject = __webpack_require__(25);
+var gOPN = __webpack_require__(88).f;
+var toString = {}.toString;
+
+var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+  ? Object.getOwnPropertyNames(window) : [];
+
+var getWindowNames = function (it) {
+  try {
+    return gOPN(it);
+  } catch (e) {
+    return windowNames.slice();
+  }
+};
+
+module.exports.f = function getOwnPropertyNames(it) {
+  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+};
+
+
+/***/ }),
+/* 151 */
+/***/ (function(module, exports) {
+
+
+
+/***/ }),
+/* 152 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(62)('asyncIterator');
+
+
+/***/ }),
+/* 153 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(62)('observable');
+
+
+/***/ }),
+/* 154 */
+/***/ (function(module, exports, __webpack_require__) {
+
+/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js
+//! version : 2.19.1
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+;(function (global, factory) {
+     true ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.moment = factory()
+}(this, (function () { 'use strict';
+
+var hookCallback;
+
+function hooks () {
+    return hookCallback.apply(null, arguments);
+}
+
+// This is done to register the method called with moment()
+// without creating circular dependencies.
+function setHookCallback (callback) {
+    hookCallback = callback;
+}
+
+function isArray(input) {
+    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
+}
+
+function isObject(input) {
+    // IE8 will treat undefined and null as object if it wasn't for
+    // input != null
+    return input != null && Object.prototype.toString.call(input) === '[object Object]';
+}
+
+function isObjectEmpty(obj) {
+    if (Object.getOwnPropertyNames) {
+        return (Object.getOwnPropertyNames(obj).length === 0);
+    } else {
+        var k;
+        for (k in obj) {
+            if (obj.hasOwnProperty(k)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
+
+function isUndefined(input) {
+    return input === void 0;
+}
+
+function isNumber(input) {
+    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
+
+function isDate(input) {
+    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+}
+
+function map(arr, fn) {
+    var res = [], i;
+    for (i = 0; i < arr.length; ++i) {
+        res.push(fn(arr[i], i));
+    }
+    return res;
+}
+
+function hasOwnProp(a, b) {
+    return Object.prototype.hasOwnProperty.call(a, b);
+}
+
+function extend(a, b) {
+    for (var i in b) {
+        if (hasOwnProp(b, i)) {
+            a[i] = b[i];
+        }
+    }
+
+    if (hasOwnProp(b, 'toString')) {
+        a.toString = b.toString;
+    }
+
+    if (hasOwnProp(b, 'valueOf')) {
+        a.valueOf = b.valueOf;
+    }
+
+    return a;
+}
+
+function createUTC (input, format, locale, strict) {
+    return createLocalOrUTC(input, format, locale, strict, true).utc();
+}
+
+function defaultParsingFlags() {
+    // We need to deep clone this object.
+    return {
+        empty           : false,
+        unusedTokens    : [],
+        unusedInput     : [],
+        overflow        : -2,
+        charsLeftOver   : 0,
+        nullInput       : false,
+        invalidMonth    : null,
+        invalidFormat   : false,
+        userInvalidated : false,
+        iso             : false,
+        parsedDateParts : [],
+        meridiem        : null,
+        rfc2822         : false,
+        weekdayMismatch : false
+    };
+}
+
+function getParsingFlags(m) {
+    if (m._pf == null) {
+        m._pf = defaultParsingFlags();
+    }
+    return m._pf;
+}
+
+var some;
+if (Array.prototype.some) {
+    some = Array.prototype.some;
+} else {
+    some = function (fun) {
+        var t = Object(this);
+        var len = t.length >>> 0;
+
+        for (var i = 0; i < len; i++) {
+            if (i in t && fun.call(this, t[i], i, t)) {
+                return true;
+            }
+        }
+
+        return false;
+    };
+}
+
+function isValid(m) {
+    if (m._isValid == null) {
+        var flags = getParsingFlags(m);
+        var parsedParts = some.call(flags.parsedDateParts, function (i) {
+            return i != null;
+        });
+        var isNowValid = !isNaN(m._d.getTime()) &&
+            flags.overflow < 0 &&
+            !flags.empty &&
+            !flags.invalidMonth &&
+            !flags.invalidWeekday &&
+            !flags.weekdayMismatch &&
+            !flags.nullInput &&
+            !flags.invalidFormat &&
+            !flags.userInvalidated &&
+            (!flags.meridiem || (flags.meridiem && parsedParts));
+
+        if (m._strict) {
+            isNowValid = isNowValid &&
+                flags.charsLeftOver === 0 &&
+                flags.unusedTokens.length === 0 &&
+                flags.bigHour === undefined;
+        }
+
+        if (Object.isFrozen == null || !Object.isFrozen(m)) {
+            m._isValid = isNowValid;
+        }
+        else {
+            return isNowValid;
+        }
+    }
+    return m._isValid;
+}
+
+function createInvalid (flags) {
+    var m = createUTC(NaN);
+    if (flags != null) {
+        extend(getParsingFlags(m), flags);
+    }
+    else {
+        getParsingFlags(m).userInvalidated = true;
+    }
+
+    return m;
+}
+
+// Plugins that add properties should also add the key here (null value),
+// so we can properly clone ourselves.
+var momentProperties = hooks.momentProperties = [];
+
+function copyConfig(to, from) {
+    var i, prop, val;
+
+    if (!isUndefined(from._isAMomentObject)) {
+        to._isAMomentObject = from._isAMomentObject;
+    }
+    if (!isUndefined(from._i)) {
+        to._i = from._i;
+    }
+    if (!isUndefined(from._f)) {
+        to._f = from._f;
+    }
+    if (!isUndefined(from._l)) {
+        to._l = from._l;
+    }
+    if (!isUndefined(from._strict)) {
+        to._strict = from._strict;
+    }
+    if (!isUndefined(from._tzm)) {
+        to._tzm = from._tzm;
+    }
+    if (!isUndefined(from._isUTC)) {
+        to._isUTC = from._isUTC;
+    }
+    if (!isUndefined(from._offset)) {
+        to._offset = from._offset;
+    }
+    if (!isUndefined(from._pf)) {
+        to._pf = getParsingFlags(from);
+    }
+    if (!isUndefined(from._locale)) {
+        to._locale = from._locale;
+    }
+
+    if (momentProperties.length > 0) {
+        for (i = 0; i < momentProperties.length; i++) {
+            prop = momentProperties[i];
+            val = from[prop];
+            if (!isUndefined(val)) {
+                to[prop] = val;
+            }
+        }
+    }
+
+    return to;
+}
+
+var updateInProgress = false;
+
+// Moment prototype object
+function Moment(config) {
+    copyConfig(this, config);
+    this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+    if (!this.isValid()) {
+        this._d = new Date(NaN);
+    }
+    // Prevent infinite loop in case updateOffset creates new moment
+    // objects.
+    if (updateInProgress === false) {
+        updateInProgress = true;
+        hooks.updateOffset(this);
+        updateInProgress = false;
+    }
+}
+
+function isMoment (obj) {
+    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+}
+
+function absFloor (number) {
+    if (number < 0) {
+        // -0 -> 0
+        return Math.ceil(number) || 0;
+    } else {
+        return Math.floor(number);
+    }
+}
+
+function toInt(argumentForCoercion) {
+    var coercedNumber = +argumentForCoercion,
+        value = 0;
+
+    if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+        value = absFloor(coercedNumber);
+    }
+
+    return value;
+}
+
+// compare two arrays, return the number of differences
+function compareArrays(array1, array2, dontConvert) {
+    var len = Math.min(array1.length, array2.length),
+        lengthDiff = Math.abs(array1.length - array2.length),
+        diffs = 0,
+        i;
+    for (i = 0; i < len; i++) {
+        if ((dontConvert && array1[i] !== array2[i]) ||
+            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+            diffs++;
+        }
+    }
+    return diffs + lengthDiff;
+}
+
+function warn(msg) {
+    if (hooks.suppressDeprecationWarnings === false &&
+            (typeof console !==  'undefined') && console.warn) {
+        console.warn('Deprecation warning: ' + msg);
+    }
+}
+
+function deprecate(msg, fn) {
+    var firstTime = true;
+
+    return extend(function () {
+        if (hooks.deprecationHandler != null) {
+            hooks.deprecationHandler(null, msg);
+        }
+        if (firstTime) {
+            var args = [];
+            var arg;
+            for (var i = 0; i < arguments.length; i++) {
+                arg = '';
+                if (typeof arguments[i] === 'object') {
+                    arg += '\n[' + i + '] ';
+                    for (var key in arguments[0]) {
+                        arg += key + ': ' + arguments[0][key] + ', ';
+                    }
+                    arg = arg.slice(0, -2); // Remove trailing comma and space
+                } else {
+                    arg = arguments[i];
+                }
+                args.push(arg);
+            }
+            warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
+            firstTime = false;
+        }
+        return fn.apply(this, arguments);
+    }, fn);
+}
+
+var deprecations = {};
+
+function deprecateSimple(name, msg) {
+    if (hooks.deprecationHandler != null) {
+        hooks.deprecationHandler(name, msg);
+    }
+    if (!deprecations[name]) {
+        warn(msg);
+        deprecations[name] = true;
+    }
+}
+
+hooks.suppressDeprecationWarnings = false;
+hooks.deprecationHandler = null;
+
+function isFunction(input) {
+    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
+}
+
+function set (config) {
+    var prop, i;
+    for (i in config) {
+        prop = config[i];
+        if (isFunction(prop)) {
+            this[i] = prop;
+        } else {
+            this['_' + i] = prop;
+        }
+    }
+    this._config = config;
+    // Lenient ordinal parsing accepts just a number in addition to
+    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
+    // TODO: Remove "ordinalParse" fallback in next major release.
+    this._dayOfMonthOrdinalParseLenient = new RegExp(
+        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
+            '|' + (/\d{1,2}/).source);
+}
+
+function mergeConfigs(parentConfig, childConfig) {
+    var res = extend({}, parentConfig), prop;
+    for (prop in childConfig) {
+        if (hasOwnProp(childConfig, prop)) {
+            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
+                res[prop] = {};
+                extend(res[prop], parentConfig[prop]);
+                extend(res[prop], childConfig[prop]);
+            } else if (childConfig[prop] != null) {
+                res[prop] = childConfig[prop];
+            } else {
+                delete res[prop];
+            }
+        }
+    }
+    for (prop in parentConfig) {
+        if (hasOwnProp(parentConfig, prop) &&
+                !hasOwnProp(childConfig, prop) &&
+                isObject(parentConfig[prop])) {
+            // make sure changes to properties don't modify parent config
+            res[prop] = extend({}, res[prop]);
+        }
+    }
+    return res;
+}
+
+function Locale(config) {
+    if (config != null) {
+        this.set(config);
+    }
+}
+
+var keys;
+
+if (Object.keys) {
+    keys = Object.keys;
+} else {
+    keys = function (obj) {
+        var i, res = [];
+        for (i in obj) {
+            if (hasOwnProp(obj, i)) {
+                res.push(i);
+            }
+        }
+        return res;
+    };
+}
+
+var defaultCalendar = {
+    sameDay : '[Today at] LT',
+    nextDay : '[Tomorrow at] LT',
+    nextWeek : 'dddd [at] LT',
+    lastDay : '[Yesterday at] LT',
+    lastWeek : '[Last] dddd [at] LT',
+    sameElse : 'L'
+};
+
+function calendar (key, mom, now) {
+    var output = this._calendar[key] || this._calendar['sameElse'];
+    return isFunction(output) ? output.call(mom, now) : output;
+}
+
+var defaultLongDateFormat = {
+    LTS  : 'h:mm:ss A',
+    LT   : 'h:mm A',
+    L    : 'MM/DD/YYYY',
+    LL   : 'MMMM D, YYYY',
+    LLL  : 'MMMM D, YYYY h:mm A',
+    LLLL : 'dddd, MMMM D, YYYY h:mm A'
+};
+
+function longDateFormat (key) {
+    var format = this._longDateFormat[key],
+        formatUpper = this._longDateFormat[key.toUpperCase()];
+
+    if (format || !formatUpper) {
+        return format;
+    }
+
+    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+        return val.slice(1);
+    });
+
+    return this._longDateFormat[key];
+}
+
+var defaultInvalidDate = 'Invalid date';
+
+function invalidDate () {
+    return this._invalidDate;
+}
+
+var defaultOrdinal = '%d';
+var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
+
+function ordinal (number) {
+    return this._ordinal.replace('%d', number);
+}
+
+var defaultRelativeTime = {
+    future : 'in %s',
+    past   : '%s ago',
+    s  : 'a few seconds',
+    ss : '%d seconds',
+    m  : 'a minute',
+    mm : '%d minutes',
+    h  : 'an hour',
+    hh : '%d hours',
+    d  : 'a day',
+    dd : '%d days',
+    M  : 'a month',
+    MM : '%d months',
+    y  : 'a year',
+    yy : '%d years'
+};
+
+function relativeTime (number, withoutSuffix, string, isFuture) {
+    var output = this._relativeTime[string];
+    return (isFunction(output)) ?
+        output(number, withoutSuffix, string, isFuture) :
+        output.replace(/%d/i, number);
+}
+
+function pastFuture (diff, output) {
+    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+    return isFunction(format) ? format(output) : format.replace(/%s/i, output);
+}
+
+var aliases = {};
+
+function addUnitAlias (unit, shorthand) {
+    var lowerCase = unit.toLowerCase();
+    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+}
+
+function normalizeUnits(units) {
+    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+}
+
+function normalizeObjectUnits(inputObject) {
+    var normalizedInput = {},
+        normalizedProp,
+        prop;
+
+    for (prop in inputObject) {
+        if (hasOwnProp(inputObject, prop)) {
+            normalizedProp = normalizeUnits(prop);
+            if (normalizedProp) {
+                normalizedInput[normalizedProp] = inputObject[prop];
+            }
+        }
+    }
+
+    return normalizedInput;
+}
+
+var priorities = {};
+
+function addUnitPriority(unit, priority) {
+    priorities[unit] = priority;
+}
+
+function getPrioritizedUnits(unitsObj) {
+    var units = [];
+    for (var u in unitsObj) {
+        units.push({unit: u, priority: priorities[u]});
+    }
+    units.sort(function (a, b) {
+        return a.priority - b.priority;
+    });
+    return units;
+}
+
+function zeroFill(number, targetLength, forceSign) {
+    var absNumber = '' + Math.abs(number),
+        zerosToFill = targetLength - absNumber.length,
+        sign = number >= 0;
+    return (sign ? (forceSign ? '+' : '') : '-') +
+        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+}
+
+var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+var formatFunctions = {};
+
+var formatTokenFunctions = {};
+
+// token:    'M'
+// padded:   ['MM', 2]
+// ordinal:  'Mo'
+// callback: function () { this.month() + 1 }
+function addFormatToken (token, padded, ordinal, callback) {
+    var func = callback;
+    if (typeof callback === 'string') {
+        func = function () {
+            return this[callback]();
+        };
+    }
+    if (token) {
+        formatTokenFunctions[token] = func;
+    }
+    if (padded) {
+        formatTokenFunctions[padded[0]] = function () {
+            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+        };
+    }
+    if (ordinal) {
+        formatTokenFunctions[ordinal] = function () {
+            return this.localeData().ordinal(func.apply(this, arguments), token);
+        };
+    }
+}
+
+function removeFormattingTokens(input) {
+    if (input.match(/\[[\s\S]/)) {
+        return input.replace(/^\[|\]$/g, '');
+    }
+    return input.replace(/\\/g, '');
+}
+
+function makeFormatFunction(format) {
+    var array = format.match(formattingTokens), i, length;
+
+    for (i = 0, length = array.length; i < length; i++) {
+        if (formatTokenFunctions[array[i]]) {
+            array[i] = formatTokenFunctions[array[i]];
+        } else {
+            array[i] = removeFormattingTokens(array[i]);
+        }
+    }
+
+    return function (mom) {
+        var output = '', i;
+        for (i = 0; i < length; i++) {
+            output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
+        }
+        return output;
+    };
+}
+
+// format date using native date object
+function formatMoment(m, format) {
+    if (!m.isValid()) {
+        return m.localeData().invalidDate();
+    }
+
+    format = expandFormat(format, m.localeData());
+    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+    return formatFunctions[format](m);
+}
+
+function expandFormat(format, locale) {
+    var i = 5;
+
+    function replaceLongDateFormatTokens(input) {
+        return locale.longDateFormat(input) || input;
+    }
+
+    localFormattingTokens.lastIndex = 0;
+    while (i >= 0 && localFormattingTokens.test(format)) {
+        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+        localFormattingTokens.lastIndex = 0;
+        i -= 1;
+    }
+
+    return format;
+}
+
+var match1         = /\d/;            //       0 - 9
+var match2         = /\d\d/;          //      00 - 99
+var match3         = /\d{3}/;         //     000 - 999
+var match4         = /\d{4}/;         //    0000 - 9999
+var match6         = /[+-]?\d{6}/;    // -999999 - 999999
+var match1to2      = /\d\d?/;         //       0 - 99
+var match3to4      = /\d\d\d\d?/;     //     999 - 9999
+var match5to6      = /\d\d\d\d\d\d?/; //   99999 - 999999
+var match1to3      = /\d{1,3}/;       //       0 - 999
+var match1to4      = /\d{1,4}/;       //       0 - 9999
+var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
+
+var matchUnsigned  = /\d+/;           //       0 - inf
+var matchSigned    = /[+-]?\d+/;      //    -inf - inf
+
+var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
+
+var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+// any word (or two) characters or numbers including two/three word month in arabic.
+// includes scottish gaelic two word and hyphenated months
+var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
+
+var regexes = {};
+
+function addRegexToken (token, regex, strictRegex) {
+    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
+        return (isStrict && strictRegex) ? strictRegex : regex;
+    };
+}
+
+function getParseRegexForToken (token, config) {
+    if (!hasOwnProp(regexes, token)) {
+        return new RegExp(unescapeFormat(token));
+    }
+
+    return regexes[token](config._strict, config._locale);
+}
+
+// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+function unescapeFormat(s) {
+    return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+        return p1 || p2 || p3 || p4;
+    }));
+}
+
+function regexEscape(s) {
+    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+}
+
+var tokens = {};
+
+function addParseToken (token, callback) {
+    var i, func = callback;
+    if (typeof token === 'string') {
+        token = [token];
+    }
+    if (isNumber(callback)) {
+        func = function (input, array) {
+            array[callback] = toInt(input);
+        };
+    }
+    for (i = 0; i < token.length; i++) {
+        tokens[token[i]] = func;
+    }
+}
+
+function addWeekParseToken (token, callback) {
+    addParseToken(token, function (input, array, config, token) {
+        config._w = config._w || {};
+        callback(input, config._w, config, token);
+    });
+}
+
+function addTimeToArrayFromToken(token, input, config) {
+    if (input != null && hasOwnProp(tokens, token)) {
+        tokens[token](input, config._a, config, token);
+    }
+}
+
+var YEAR = 0;
+var MONTH = 1;
+var DATE = 2;
+var HOUR = 3;
+var MINUTE = 4;
+var SECOND = 5;
+var MILLISECOND = 6;
+var WEEK = 7;
+var WEEKDAY = 8;
+
+// FORMATTING
+
+addFormatToken('Y', 0, 0, function () {
+    var y = this.year();
+    return y <= 9999 ? '' + y : '+' + y;
+});
+
+addFormatToken(0, ['YY', 2], 0, function () {
+    return this.year() % 100;
+});
+
+addFormatToken(0, ['YYYY',   4],       0, 'year');
+addFormatToken(0, ['YYYYY',  5],       0, 'year');
+addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+// ALIASES
+
+addUnitAlias('year', 'y');
+
+// PRIORITIES
+
+addUnitPriority('year', 1);
+
+// PARSING
+
+addRegexToken('Y',      matchSigned);
+addRegexToken('YY',     match1to2, match2);
+addRegexToken('YYYY',   match1to4, match4);
+addRegexToken('YYYYY',  match1to6, match6);
+addRegexToken('YYYYYY', match1to6, match6);
+
+addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+addParseToken('YYYY', function (input, array) {
+    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
+});
+addParseToken('YY', function (input, array) {
+    array[YEAR] = hooks.parseTwoDigitYear(input);
+});
+addParseToken('Y', function (input, array) {
+    array[YEAR] = parseInt(input, 10);
+});
+
+// HELPERS
+
+function daysInYear(year) {
+    return isLeapYear(year) ? 366 : 365;
+}
+
+function isLeapYear(year) {
+    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+}
+
+// HOOKS
+
+hooks.parseTwoDigitYear = function (input) {
+    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+};
+
+// MOMENTS
+
+var getSetYear = makeGetSet('FullYear', true);
+
+function getIsLeapYear () {
+    return isLeapYear(this.year());
+}
+
+function makeGetSet (unit, keepTime) {
+    return function (value) {
+        if (value != null) {
+            set$1(this, unit, value);
+            hooks.updateOffset(this, keepTime);
+            return this;
+        } else {
+            return get(this, unit);
+        }
+    };
+}
+
+function get (mom, unit) {
+    return mom.isValid() ?
+        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
+}
+
+function set$1 (mom, unit, value) {
+    if (mom.isValid() && !isNaN(value)) {
+        if (unit === 'FullYear' && isLeapYear(mom.year())) {
+            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
+        }
+        else {
+            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+        }
+    }
+}
+
+// MOMENTS
+
+function stringGet (units) {
+    units = normalizeUnits(units);
+    if (isFunction(this[units])) {
+        return this[units]();
+    }
+    return this;
+}
+
+
+function stringSet (units, value) {
+    if (typeof units === 'object') {
+        units = normalizeObjectUnits(units);
+        var prioritized = getPrioritizedUnits(units);
+        for (var i = 0; i < prioritized.length; i++) {
+            this[prioritized[i].unit](units[prioritized[i].unit]);
+        }
+    } else {
+        units = normalizeUnits(units);
+        if (isFunction(this[units])) {
+            return this[units](value);
+        }
+    }
+    return this;
+}
+
+function mod(n, x) {
+    return ((n % x) + x) % x;
+}
+
+var indexOf;
+
+if (Array.prototype.indexOf) {
+    indexOf = Array.prototype.indexOf;
+} else {
+    indexOf = function (o) {
+        // I know
+        var i;
+        for (i = 0; i < this.length; ++i) {
+            if (this[i] === o) {
+                return i;
+            }
+        }
+        return -1;
+    };
+}
+
+function daysInMonth(year, month) {
+    if (isNaN(year) || isNaN(month)) {
+        return NaN;
+    }
+    var modMonth = mod(month, 12);
+    year += (month - modMonth) / 12;
+    return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
+}
+
+// FORMATTING
+
+addFormatToken('M', ['MM', 2], 'Mo', function () {
+    return this.month() + 1;
+});
+
+addFormatToken('MMM', 0, 0, function (format) {
+    return this.localeData().monthsShort(this, format);
+});
+
+addFormatToken('MMMM', 0, 0, function (format) {
+    return this.localeData().months(this, format);
+});
+
+// ALIASES
+
+addUnitAlias('month', 'M');
+
+// PRIORITY
+
+addUnitPriority('month', 8);
+
+// PARSING
+
+addRegexToken('M',    match1to2);
+addRegexToken('MM',   match1to2, match2);
+addRegexToken('MMM',  function (isStrict, locale) {
+    return locale.monthsShortRegex(isStrict);
+});
+addRegexToken('MMMM', function (isStrict, locale) {
+    return locale.monthsRegex(isStrict);
+});
+
+addParseToken(['M', 'MM'], function (input, array) {
+    array[MONTH] = toInt(input) - 1;
+});
+
+addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+    var month = config._locale.monthsParse(input, token, config._strict);
+    // if we didn't find a month name, mark the date as invalid.
+    if (month != null) {
+        array[MONTH] = month;
+    } else {
+        getParsingFlags(config).invalidMonth = input;
+    }
+});
+
+// LOCALES
+
+var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
+var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+function localeMonths (m, format) {
+    if (!m) {
+        return isArray(this._months) ? this._months :
+            this._months['standalone'];
+    }
+    return isArray(this._months) ? this._months[m.month()] :
+        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+function localeMonthsShort (m, format) {
+    if (!m) {
+        return isArray(this._monthsShort) ? this._monthsShort :
+            this._monthsShort['standalone'];
+    }
+    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
+        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
+}
+
+function handleStrictParse(monthName, format, strict) {
+    var i, ii, mom, llc = monthName.toLocaleLowerCase();
+    if (!this._monthsParse) {
+        // this is not used
+        this._monthsParse = [];
+        this._longMonthsParse = [];
+        this._shortMonthsParse = [];
+        for (i = 0; i < 12; ++i) {
+            mom = createUTC([2000, i]);
+            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
+            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
+        }
+    }
+
+    if (strict) {
+        if (format === 'MMM') {
+            ii = indexOf.call(this._shortMonthsParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._longMonthsParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    } else {
+        if (format === 'MMM') {
+            ii = indexOf.call(this._shortMonthsParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._longMonthsParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._longMonthsParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._shortMonthsParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    }
+}
+
+function localeMonthsParse (monthName, format, strict) {
+    var i, mom, regex;
+
+    if (this._monthsParseExact) {
+        return handleStrictParse.call(this, monthName, format, strict);
+    }
+
+    if (!this._monthsParse) {
+        this._monthsParse = [];
+        this._longMonthsParse = [];
+        this._shortMonthsParse = [];
+    }
+
+    // TODO: add sorting
+    // Sorting makes sure if one month (or abbr) is a prefix of another
+    // see sorting in computeMonthsParse
+    for (i = 0; i < 12; i++) {
+        // make the regex if we don't have it already
+        mom = createUTC([2000, i]);
+        if (strict && !this._longMonthsParse[i]) {
+            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+        }
+        if (!strict && !this._monthsParse[i]) {
+            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+        }
+        // test the regex
+        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+            return i;
+        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+            return i;
+        } else if (!strict && this._monthsParse[i].test(monthName)) {
+            return i;
+        }
+    }
+}
+
+// MOMENTS
+
+function setMonth (mom, value) {
+    var dayOfMonth;
+
+    if (!mom.isValid()) {
+        // No op
+        return mom;
+    }
+
+    if (typeof value === 'string') {
+        if (/^\d+$/.test(value)) {
+            value = toInt(value);
+        } else {
+            value = mom.localeData().monthsParse(value);
+            // TODO: Another silent failure?
+            if (!isNumber(value)) {
+                return mom;
+            }
+        }
+    }
+
+    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+    return mom;
+}
+
+function getSetMonth (value) {
+    if (value != null) {
+        setMonth(this, value);
+        hooks.updateOffset(this, true);
+        return this;
+    } else {
+        return get(this, 'Month');
+    }
+}
+
+function getDaysInMonth () {
+    return daysInMonth(this.year(), this.month());
+}
+
+var defaultMonthsShortRegex = matchWord;
+function monthsShortRegex (isStrict) {
+    if (this._monthsParseExact) {
+        if (!hasOwnProp(this, '_monthsRegex')) {
+            computeMonthsParse.call(this);
+        }
+        if (isStrict) {
+            return this._monthsShortStrictRegex;
+        } else {
+            return this._monthsShortRegex;
+        }
+    } else {
+        if (!hasOwnProp(this, '_monthsShortRegex')) {
+            this._monthsShortRegex = defaultMonthsShortRegex;
+        }
+        return this._monthsShortStrictRegex && isStrict ?
+            this._monthsShortStrictRegex : this._monthsShortRegex;
+    }
+}
+
+var defaultMonthsRegex = matchWord;
+function monthsRegex (isStrict) {
+    if (this._monthsParseExact) {
+        if (!hasOwnProp(this, '_monthsRegex')) {
+            computeMonthsParse.call(this);
+        }
+        if (isStrict) {
+            return this._monthsStrictRegex;
+        } else {
+            return this._monthsRegex;
+        }
+    } else {
+        if (!hasOwnProp(this, '_monthsRegex')) {
+            this._monthsRegex = defaultMonthsRegex;
+        }
+        return this._monthsStrictRegex && isStrict ?
+            this._monthsStrictRegex : this._monthsRegex;
+    }
+}
+
+function computeMonthsParse () {
+    function cmpLenRev(a, b) {
+        return b.length - a.length;
+    }
+
+    var shortPieces = [], longPieces = [], mixedPieces = [],
+        i, mom;
+    for (i = 0; i < 12; i++) {
+        // make the regex if we don't have it already
+        mom = createUTC([2000, i]);
+        shortPieces.push(this.monthsShort(mom, ''));
+        longPieces.push(this.months(mom, ''));
+        mixedPieces.push(this.months(mom, ''));
+        mixedPieces.push(this.monthsShort(mom, ''));
+    }
+    // Sorting makes sure if one month (or abbr) is a prefix of another it
+    // will match the longer piece.
+    shortPieces.sort(cmpLenRev);
+    longPieces.sort(cmpLenRev);
+    mixedPieces.sort(cmpLenRev);
+    for (i = 0; i < 12; i++) {
+        shortPieces[i] = regexEscape(shortPieces[i]);
+        longPieces[i] = regexEscape(longPieces[i]);
+    }
+    for (i = 0; i < 24; i++) {
+        mixedPieces[i] = regexEscape(mixedPieces[i]);
+    }
+
+    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+    this._monthsShortRegex = this._monthsRegex;
+    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+}
+
+function createDate (y, m, d, h, M, s, ms) {
+    // can't just apply() to create a date:
+    // https://stackoverflow.com/q/181348
+    var date = new Date(y, m, d, h, M, s, ms);
+
+    // the date constructor remaps years 0-99 to 1900-1999
+    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
+        date.setFullYear(y);
+    }
+    return date;
+}
+
+function createUTCDate (y) {
+    var date = new Date(Date.UTC.apply(null, arguments));
+
+    // the Date.UTC function remaps years 0-99 to 1900-1999
+    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
+        date.setUTCFullYear(y);
+    }
+    return date;
+}
+
+// start-of-first-week - start-of-year
+function firstWeekOffset(year, dow, doy) {
+    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+        fwd = 7 + dow - doy,
+        // first-week day local weekday -- which local weekday is fwd
+        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
+
+    return -fwdlw + fwd - 1;
+}
+
+// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
+    var localWeekday = (7 + weekday - dow) % 7,
+        weekOffset = firstWeekOffset(year, dow, doy),
+        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
+        resYear, resDayOfYear;
+
+    if (dayOfYear <= 0) {
+        resYear = year - 1;
+        resDayOfYear = daysInYear(resYear) + dayOfYear;
+    } else if (dayOfYear > daysInYear(year)) {
+        resYear = year + 1;
+        resDayOfYear = dayOfYear - daysInYear(year);
+    } else {
+        resYear = year;
+        resDayOfYear = dayOfYear;
+    }
+
+    return {
+        year: resYear,
+        dayOfYear: resDayOfYear
+    };
+}
+
+function weekOfYear(mom, dow, doy) {
+    var weekOffset = firstWeekOffset(mom.year(), dow, doy),
+        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
+        resWeek, resYear;
+
+    if (week < 1) {
+        resYear = mom.year() - 1;
+        resWeek = week + weeksInYear(resYear, dow, doy);
+    } else if (week > weeksInYear(mom.year(), dow, doy)) {
+        resWeek = week - weeksInYear(mom.year(), dow, doy);
+        resYear = mom.year() + 1;
+    } else {
+        resYear = mom.year();
+        resWeek = week;
+    }
+
+    return {
+        week: resWeek,
+        year: resYear
+    };
+}
+
+function weeksInYear(year, dow, doy) {
+    var weekOffset = firstWeekOffset(year, dow, doy),
+        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
+    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
+}
+
+// FORMATTING
+
+addFormatToken('w', ['ww', 2], 'wo', 'week');
+addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+// ALIASES
+
+addUnitAlias('week', 'w');
+addUnitAlias('isoWeek', 'W');
+
+// PRIORITIES
+
+addUnitPriority('week', 5);
+addUnitPriority('isoWeek', 5);
+
+// PARSING
+
+addRegexToken('w',  match1to2);
+addRegexToken('ww', match1to2, match2);
+addRegexToken('W',  match1to2);
+addRegexToken('WW', match1to2, match2);
+
+addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+    week[token.substr(0, 1)] = toInt(input);
+});
+
+// HELPERS
+
+// LOCALES
+
+function localeWeek (mom) {
+    return weekOfYear(mom, this._week.dow, this._week.doy).week;
+}
+
+var defaultLocaleWeek = {
+    dow : 0, // Sunday is the first day of the week.
+    doy : 6  // The week that contains Jan 1st is the first week of the year.
+};
+
+function localeFirstDayOfWeek () {
+    return this._week.dow;
+}
+
+function localeFirstDayOfYear () {
+    return this._week.doy;
+}
+
+// MOMENTS
+
+function getSetWeek (input) {
+    var week = this.localeData().week(this);
+    return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+function getSetISOWeek (input) {
+    var week = weekOfYear(this, 1, 4).week;
+    return input == null ? week : this.add((input - week) * 7, 'd');
+}
+
+// FORMATTING
+
+addFormatToken('d', 0, 'do', 'day');
+
+addFormatToken('dd', 0, 0, function (format) {
+    return this.localeData().weekdaysMin(this, format);
+});
+
+addFormatToken('ddd', 0, 0, function (format) {
+    return this.localeData().weekdaysShort(this, format);
+});
+
+addFormatToken('dddd', 0, 0, function (format) {
+    return this.localeData().weekdays(this, format);
+});
+
+addFormatToken('e', 0, 0, 'weekday');
+addFormatToken('E', 0, 0, 'isoWeekday');
+
+// ALIASES
+
+addUnitAlias('day', 'd');
+addUnitAlias('weekday', 'e');
+addUnitAlias('isoWeekday', 'E');
+
+// PRIORITY
+addUnitPriority('day', 11);
+addUnitPriority('weekday', 11);
+addUnitPriority('isoWeekday', 11);
+
+// PARSING
+
+addRegexToken('d',    match1to2);
+addRegexToken('e',    match1to2);
+addRegexToken('E',    match1to2);
+addRegexToken('dd',   function (isStrict, locale) {
+    return locale.weekdaysMinRegex(isStrict);
+});
+addRegexToken('ddd',   function (isStrict, locale) {
+    return locale.weekdaysShortRegex(isStrict);
+});
+addRegexToken('dddd',   function (isStrict, locale) {
+    return locale.weekdaysRegex(isStrict);
+});
+
+addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
+    var weekday = config._locale.weekdaysParse(input, token, config._strict);
+    // if we didn't get a weekday name, mark the date as invalid
+    if (weekday != null) {
+        week.d = weekday;
+    } else {
+        getParsingFlags(config).invalidWeekday = input;
+    }
+});
+
+addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+    week[token] = toInt(input);
+});
+
+// HELPERS
+
+function parseWeekday(input, locale) {
+    if (typeof input !== 'string') {
+        return input;
+    }
+
+    if (!isNaN(input)) {
+        return parseInt(input, 10);
+    }
+
+    input = locale.weekdaysParse(input);
+    if (typeof input === 'number') {
+        return input;
+    }
+
+    return null;
+}
+
+function parseIsoWeekday(input, locale) {
+    if (typeof input === 'string') {
+        return locale.weekdaysParse(input) % 7 || 7;
+    }
+    return isNaN(input) ? null : input;
+}
+
+// LOCALES
+
+var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+function localeWeekdays (m, format) {
+    if (!m) {
+        return isArray(this._weekdays) ? this._weekdays :
+            this._weekdays['standalone'];
+    }
+    return isArray(this._weekdays) ? this._weekdays[m.day()] :
+        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
+}
+
+var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+function localeWeekdaysShort (m) {
+    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
+}
+
+var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+function localeWeekdaysMin (m) {
+    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
+}
+
+function handleStrictParse$1(weekdayName, format, strict) {
+    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
+    if (!this._weekdaysParse) {
+        this._weekdaysParse = [];
+        this._shortWeekdaysParse = [];
+        this._minWeekdaysParse = [];
+
+        for (i = 0; i < 7; ++i) {
+            mom = createUTC([2000, 1]).day(i);
+            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
+            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
+            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
+        }
+    }
+
+    if (strict) {
+        if (format === 'dddd') {
+            ii = indexOf.call(this._weekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else if (format === 'ddd') {
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    } else {
+        if (format === 'dddd') {
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else if (format === 'ddd') {
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        } else {
+            ii = indexOf.call(this._minWeekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._weekdaysParse, llc);
+            if (ii !== -1) {
+                return ii;
+            }
+            ii = indexOf.call(this._shortWeekdaysParse, llc);
+            return ii !== -1 ? ii : null;
+        }
+    }
+}
+
+function localeWeekdaysParse (weekdayName, format, strict) {
+    var i, mom, regex;
+
+    if (this._weekdaysParseExact) {
+        return handleStrictParse$1.call(this, weekdayName, format, strict);
+    }
+
+    if (!this._weekdaysParse) {
+        this._weekdaysParse = [];
+        this._minWeekdaysParse = [];
+        this._shortWeekdaysParse = [];
+        this._fullWeekdaysParse = [];
+    }
+
+    for (i = 0; i < 7; i++) {
+        // make the regex if we don't have it already
+
+        mom = createUTC([2000, 1]).day(i);
+        if (strict && !this._fullWeekdaysParse[i]) {
+            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
+            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
+            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
+        }
+        if (!this._weekdaysParse[i]) {
+            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+        }
+        // test the regex
+        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
+            return i;
+        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
+            return i;
+        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
+            return i;
+        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
+            return i;
+        }
+    }
+}
+
+// MOMENTS
+
+function getSetDayOfWeek (input) {
+    if (!this.isValid()) {
+        return input != null ? this : NaN;
+    }
+    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+    if (input != null) {
+        input = parseWeekday(input, this.localeData());
+        return this.add(input - day, 'd');
+    } else {
+        return day;
+    }
+}
+
+function getSetLocaleDayOfWeek (input) {
+    if (!this.isValid()) {
+        return input != null ? this : NaN;
+    }
+    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+    return input == null ? weekday : this.add(input - weekday, 'd');
+}
+
+function getSetISODayOfWeek (input) {
+    if (!this.isValid()) {
+        return input != null ? this : NaN;
+    }
+
+    // behaves the same as moment#day except
+    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+    // as a setter, sunday should belong to the previous week.
+
+    if (input != null) {
+        var weekday = parseIsoWeekday(input, this.localeData());
+        return this.day(this.day() % 7 ? weekday : weekday - 7);
+    } else {
+        return this.day() || 7;
+    }
+}
+
+var defaultWeekdaysRegex = matchWord;
+function weekdaysRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysStrictRegex;
+        } else {
+            return this._weekdaysRegex;
+        }
+    } else {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            this._weekdaysRegex = defaultWeekdaysRegex;
+        }
+        return this._weekdaysStrictRegex && isStrict ?
+            this._weekdaysStrictRegex : this._weekdaysRegex;
+    }
+}
+
+var defaultWeekdaysShortRegex = matchWord;
+function weekdaysShortRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysShortStrictRegex;
+        } else {
+            return this._weekdaysShortRegex;
+        }
+    } else {
+        if (!hasOwnProp(this, '_weekdaysShortRegex')) {
+            this._weekdaysShortRegex = defaultWeekdaysShortRegex;
+        }
+        return this._weekdaysShortStrictRegex && isStrict ?
+            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
+    }
+}
+
+var defaultWeekdaysMinRegex = matchWord;
+function weekdaysMinRegex (isStrict) {
+    if (this._weekdaysParseExact) {
+        if (!hasOwnProp(this, '_weekdaysRegex')) {
+            computeWeekdaysParse.call(this);
+        }
+        if (isStrict) {
+            return this._weekdaysMinStrictRegex;
+        } else {
+            return this._weekdaysMinRegex;
+        }
+    } else {
+        if (!hasOwnProp(this, '_weekdaysMinRegex')) {
+            this._weekdaysMinRegex = defaultWeekdaysMinRegex;
+        }
+        return this._weekdaysMinStrictRegex && isStrict ?
+            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
+    }
+}
+
+
+function computeWeekdaysParse () {
+    function cmpLenRev(a, b) {
+        return b.length - a.length;
+    }
+
+    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
+        i, mom, minp, shortp, longp;
+    for (i = 0; i < 7; i++) {
+        // make the regex if we don't have it already
+        mom = createUTC([2000, 1]).day(i);
+        minp = this.weekdaysMin(mom, '');
+        shortp = this.weekdaysShort(mom, '');
+        longp = this.weekdays(mom, '');
+        minPieces.push(minp);
+        shortPieces.push(shortp);
+        longPieces.push(longp);
+        mixedPieces.push(minp);
+        mixedPieces.push(shortp);
+        mixedPieces.push(longp);
+    }
+    // Sorting makes sure if one weekday (or abbr) is a prefix of another it
+    // will match the longer piece.
+    minPieces.sort(cmpLenRev);
+    shortPieces.sort(cmpLenRev);
+    longPieces.sort(cmpLenRev);
+    mixedPieces.sort(cmpLenRev);
+    for (i = 0; i < 7; i++) {
+        shortPieces[i] = regexEscape(shortPieces[i]);
+        longPieces[i] = regexEscape(longPieces[i]);
+        mixedPieces[i] = regexEscape(mixedPieces[i]);
+    }
+
+    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
+    this._weekdaysShortRegex = this._weekdaysRegex;
+    this._weekdaysMinRegex = this._weekdaysRegex;
+
+    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
+    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
+    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
+}
+
+// FORMATTING
+
+function hFormat() {
+    return this.hours() % 12 || 12;
+}
+
+function kFormat() {
+    return this.hours() || 24;
+}
+
+addFormatToken('H', ['HH', 2], 0, 'hour');
+addFormatToken('h', ['hh', 2], 0, hFormat);
+addFormatToken('k', ['kk', 2], 0, kFormat);
+
+addFormatToken('hmm', 0, 0, function () {
+    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('hmmss', 0, 0, function () {
+    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
+        zeroFill(this.seconds(), 2);
+});
+
+addFormatToken('Hmm', 0, 0, function () {
+    return '' + this.hours() + zeroFill(this.minutes(), 2);
+});
+
+addFormatToken('Hmmss', 0, 0, function () {
+    return '' + this.hours() + zeroFill(this.minutes(), 2) +
+        zeroFill(this.seconds(), 2);
+});
+
+function meridiem (token, lowercase) {
+    addFormatToken(token, 0, 0, function () {
+        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+    });
+}
+
+meridiem('a', true);
+meridiem('A', false);
+
+// ALIASES
+
+addUnitAlias('hour', 'h');
+
+// PRIORITY
+addUnitPriority('hour', 13);
+
+// PARSING
+
+function matchMeridiem (isStrict, locale) {
+    return locale._meridiemParse;
+}
+
+addRegexToken('a',  matchMeridiem);
+addRegexToken('A',  matchMeridiem);
+addRegexToken('H',  match1to2);
+addRegexToken('h',  match1to2);
+addRegexToken('k',  match1to2);
+addRegexToken('HH', match1to2, match2);
+addRegexToken('hh', match1to2, match2);
+addRegexToken('kk', match1to2, match2);
+
+addRegexToken('hmm', match3to4);
+addRegexToken('hmmss', match5to6);
+addRegexToken('Hmm', match3to4);
+addRegexToken('Hmmss', match5to6);
+
+addParseToken(['H', 'HH'], HOUR);
+addParseToken(['k', 'kk'], function (input, array, config) {
+    var kInput = toInt(input);
+    array[HOUR] = kInput === 24 ? 0 : kInput;
+});
+addParseToken(['a', 'A'], function (input, array, config) {
+    config._isPm = config._locale.isPM(input);
+    config._meridiem = input;
+});
+addParseToken(['h', 'hh'], function (input, array, config) {
+    array[HOUR] = toInt(input);
+    getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmm', function (input, array, config) {
+    var pos = input.length - 2;
+    array[HOUR] = toInt(input.substr(0, pos));
+    array[MINUTE] = toInt(input.substr(pos));
+    getParsingFlags(config).bigHour = true;
+});
+addParseToken('hmmss', function (input, array, config) {
+    var pos1 = input.length - 4;
+    var pos2 = input.length - 2;
+    array[HOUR] = toInt(input.substr(0, pos1));
+    array[MINUTE] = toInt(input.substr(pos1, 2));
+    array[SECOND] = toInt(input.substr(pos2));
+    getParsingFlags(config).bigHour = true;
+});
+addParseToken('Hmm', function (input, array, config) {
+    var pos = input.length - 2;
+    array[HOUR] = toInt(input.substr(0, pos));
+    array[MINUTE] = toInt(input.substr(pos));
+});
+addParseToken('Hmmss', function (input, array, config) {
+    var pos1 = input.length - 4;
+    var pos2 = input.length - 2;
+    array[HOUR] = toInt(input.substr(0, pos1));
+    array[MINUTE] = toInt(input.substr(pos1, 2));
+    array[SECOND] = toInt(input.substr(pos2));
+});
+
+// LOCALES
+
+function localeIsPM (input) {
+    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+    // Using charAt should be more compatible.
+    return ((input + '').toLowerCase().charAt(0) === 'p');
+}
+
+var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+function localeMeridiem (hours, minutes, isLower) {
+    if (hours > 11) {
+        return isLower ? 'pm' : 'PM';
+    } else {
+        return isLower ? 'am' : 'AM';
+    }
+}
+
+
+// MOMENTS
+
+// Setting the hour should keep the time, because the user explicitly
+// specified which hour he wants. So trying to maintain the same hour (in
+// a new timezone) makes sense. Adding/subtracting hours does not follow
+// this rule.
+var getSetHour = makeGetSet('Hours', true);
+
+// months
+// week
+// weekdays
+// meridiem
+var baseConfig = {
+    calendar: defaultCalendar,
+    longDateFormat: defaultLongDateFormat,
+    invalidDate: defaultInvalidDate,
+    ordinal: defaultOrdinal,
+    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
+    relativeTime: defaultRelativeTime,
+
+    months: defaultLocaleMonths,
+    monthsShort: defaultLocaleMonthsShort,
+
+    week: defaultLocaleWeek,
+
+    weekdays: defaultLocaleWeekdays,
+    weekdaysMin: defaultLocaleWeekdaysMin,
+    weekdaysShort: defaultLocaleWeekdaysShort,
+
+    meridiemParse: defaultLocaleMeridiemParse
+};
+
+// internal storage for locale config files
+var locales = {};
+var localeFamilies = {};
+var globalLocale;
+
+function normalizeLocale(key) {
+    return key ? key.toLowerCase().replace('_', '-') : key;
+}
+
+// pick the locale from the array
+// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+function chooseLocale(names) {
+    var i = 0, j, next, locale, split;
+
+    while (i < names.length) {
+        split = normalizeLocale(names[i]).split('-');
+        j = split.length;
+        next = normalizeLocale(names[i + 1]);
+        next = next ? next.split('-') : null;
+        while (j > 0) {
+            locale = loadLocale(split.slice(0, j).join('-'));
+            if (locale) {
+                return locale;
+            }
+            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                //the next array item is better than a shallower substring of this one
+                break;
+            }
+            j--;
+        }
+        i++;
+    }
+    return null;
+}
+
+function loadLocale(name) {
+    var oldLocale = null;
+    // TODO: Find a better way to register and load all the locales in Node
+    if (!locales[name] && (typeof module !== 'undefined') &&
+            module && module.exports) {
+        try {
+            oldLocale = globalLocale._abbr;
+            var aliasedRequire = require;
+            !(function webpackMissingModule() { var e = new Error("Cannot find module \"./locale\""); e.code = 'MODULE_NOT_FOUND'; throw e; }());
+            getSetGlobalLocale(oldLocale);
+        } catch (e) {}
+    }
+    return locales[name];
+}
+
+// This function will load locale and then set the global locale.  If
+// no arguments are passed in, it will simply return the current global
+// locale key.
+function getSetGlobalLocale (key, values) {
+    var data;
+    if (key) {
+        if (isUndefined(values)) {
+            data = getLocale(key);
+        }
+        else {
+            data = defineLocale(key, values);
+        }
+
+        if (data) {
+            // moment.duration._locale = moment._locale = data;
+            globalLocale = data;
+        }
+    }
+
+    return globalLocale._abbr;
+}
+
+function defineLocale (name, config) {
+    if (config !== null) {
+        var parentConfig = baseConfig;
+        config.abbr = name;
+        if (locales[name] != null) {
+            deprecateSimple('defineLocaleOverride',
+                    'use moment.updateLocale(localeName, config) to change ' +
+                    'an existing locale. moment.defineLocale(localeName, ' +
+                    'config) should only be used for creating a new locale ' +
+                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
+            parentConfig = locales[name]._config;
+        } else if (config.parentLocale != null) {
+            if (locales[config.parentLocale] != null) {
+                parentConfig = locales[config.parentLocale]._config;
+            } else {
+                if (!localeFamilies[config.parentLocale]) {
+                    localeFamilies[config.parentLocale] = [];
+                }
+                localeFamilies[config.parentLocale].push({
+                    name: name,
+                    config: config
+                });
+                return null;
+            }
+        }
+        locales[name] = new Locale(mergeConfigs(parentConfig, config));
+
+        if (localeFamilies[name]) {
+            localeFamilies[name].forEach(function (x) {
+                defineLocale(x.name, x.config);
+            });
+        }
+
+        // backwards compat for now: also set the locale
+        // make sure we set the locale AFTER all child locales have been
+        // created, so we won't end up with the child locale set.
+        getSetGlobalLocale(name);
+
+
+        return locales[name];
+    } else {
+        // useful for testing
+        delete locales[name];
+        return null;
+    }
+}
+
+function updateLocale(name, config) {
+    if (config != null) {
+        var locale, parentConfig = baseConfig;
+        // MERGE
+        if (locales[name] != null) {
+            parentConfig = locales[name]._config;
+        }
+        config = mergeConfigs(parentConfig, config);
+        locale = new Locale(config);
+        locale.parentLocale = locales[name];
+        locales[name] = locale;
+
+        // backwards compat for now: also set the locale
+        getSetGlobalLocale(name);
+    } else {
+        // pass null for config to unupdate, useful for tests
+        if (locales[name] != null) {
+            if (locales[name].parentLocale != null) {
+                locales[name] = locales[name].parentLocale;
+            } else if (locales[name] != null) {
+                delete locales[name];
+            }
+        }
+    }
+    return locales[name];
+}
+
+// returns locale data
+function getLocale (key) {
+    var locale;
+
+    if (key && key._locale && key._locale._abbr) {
+        key = key._locale._abbr;
+    }
+
+    if (!key) {
+        return globalLocale;
+    }
+
+    if (!isArray(key)) {
+        //short-circuit everything else
+        locale = loadLocale(key);
+        if (locale) {
+            return locale;
+        }
+        key = [key];
+    }
+
+    return chooseLocale(key);
+}
+
+function listLocales() {
+    return keys(locales);
+}
+
+function checkOverflow (m) {
+    var overflow;
+    var a = m._a;
+
+    if (a && getParsingFlags(m).overflow === -2) {
+        overflow =
+            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
+            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
+            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
+            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+            -1;
+
+        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+            overflow = DATE;
+        }
+        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+            overflow = WEEK;
+        }
+        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
+            overflow = WEEKDAY;
+        }
+
+        getParsingFlags(m).overflow = overflow;
+    }
+
+    return m;
+}
+
+// Pick the first defined of two or three arguments.
+function defaults(a, b, c) {
+    if (a != null) {
+        return a;
+    }
+    if (b != null) {
+        return b;
+    }
+    return c;
+}
+
+function currentDateArray(config) {
+    // hooks is actually the exported moment object
+    var nowValue = new Date(hooks.now());
+    if (config._useUTC) {
+        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
+    }
+    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
+}
+
+// convert an array to a date.
+// the array should mirror the parameters below
+// note: all values past the year are optional and will default to the lowest possible value.
+// [year, month, day , hour, minute, second, millisecond]
+function configFromArray (config) {
+    var i, date, input = [], currentDate, yearToUse;
+
+    if (config._d) {
+        return;
+    }
+
+    currentDate = currentDateArray(config);
+
+    //compute day of the year from weeks and weekdays
+    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+        dayOfYearFromWeekInfo(config);
+    }
+
+    //if the day of the year is set, figure out what it is
+    if (config._dayOfYear != null) {
+        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
+            getParsingFlags(config)._overflowDayOfYear = true;
+        }
+
+        date = createUTCDate(yearToUse, 0, config._dayOfYear);
+        config._a[MONTH] = date.getUTCMonth();
+        config._a[DATE] = date.getUTCDate();
+    }
+
+    // Default to current date.
+    // * if no year, month, day of month are given, default to today
+    // * if day of month is given, default month and year
+    // * if month is given, default only year
+    // * if year is given, don't default anything
+    for (i = 0; i < 3 && config._a[i] == null; ++i) {
+        config._a[i] = input[i] = currentDate[i];
+    }
+
+    // Zero out whatever was not defaulted, including time
+    for (; i < 7; i++) {
+        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+    }
+
+    // Check for 24:00:00.000
+    if (config._a[HOUR] === 24 &&
+            config._a[MINUTE] === 0 &&
+            config._a[SECOND] === 0 &&
+            config._a[MILLISECOND] === 0) {
+        config._nextDay = true;
+        config._a[HOUR] = 0;
+    }
+
+    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+    // Apply timezone offset from input. The actual utcOffset can be changed
+    // with parseZone.
+    if (config._tzm != null) {
+        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+    }
+
+    if (config._nextDay) {
+        config._a[HOUR] = 24;
+    }
+
+    // check for mismatching day of week
+    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== config._d.getDay()) {
+        getParsingFlags(config).weekdayMismatch = true;
+    }
+}
+
+function dayOfYearFromWeekInfo(config) {
+    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
+
+    w = config._w;
+    if (w.GG != null || w.W != null || w.E != null) {
+        dow = 1;
+        doy = 4;
+
+        // TODO: We need to take the current isoWeekYear, but that depends on
+        // how we interpret now (local, utc, fixed offset). So create
+        // a now version of current config (take local/utc/offset flags, and
+        // create now).
+        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
+        week = defaults(w.W, 1);
+        weekday = defaults(w.E, 1);
+        if (weekday < 1 || weekday > 7) {
+            weekdayOverflow = true;
+        }
+    } else {
+        dow = config._locale._week.dow;
+        doy = config._locale._week.doy;
+
+        var curWeek = weekOfYear(createLocal(), dow, doy);
+
+        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
+
+        // Default to current week.
+        week = defaults(w.w, curWeek.week);
+
+        if (w.d != null) {
+            // weekday -- low day numbers are considered next week
+            weekday = w.d;
+            if (weekday < 0 || weekday > 6) {
+                weekdayOverflow = true;
+            }
+        } else if (w.e != null) {
+            // local weekday -- counting starts from begining of week
+            weekday = w.e + dow;
+            if (w.e < 0 || w.e > 6) {
+                weekdayOverflow = true;
+            }
+        } else {
+            // default to begining of week
+            weekday = dow;
+        }
+    }
+    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
+        getParsingFlags(config)._overflowWeeks = true;
+    } else if (weekdayOverflow != null) {
+        getParsingFlags(config)._overflowWeekday = true;
+    } else {
+        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
+        config._a[YEAR] = temp.year;
+        config._dayOfYear = temp.dayOfYear;
+    }
+}
+
+// iso 8601 regex
+// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
+var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
+
+var isoDates = [
+    ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
+    ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
+    ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
+    ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
+    ['YYYY-DDD', /\d{4}-\d{3}/],
+    ['YYYY-MM', /\d{4}-\d\d/, false],
+    ['YYYYYYMMDD', /[+-]\d{10}/],
+    ['YYYYMMDD', /\d{8}/],
+    // YYYYMM is NOT allowed by the standard
+    ['GGGG[W]WWE', /\d{4}W\d{3}/],
+    ['GGGG[W]WW', /\d{4}W\d{2}/, false],
+    ['YYYYDDD', /\d{7}/]
+];
+
+// iso time formats and regexes
+var isoTimes = [
+    ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
+    ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
+    ['HH:mm:ss', /\d\d:\d\d:\d\d/],
+    ['HH:mm', /\d\d:\d\d/],
+    ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
+    ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
+    ['HHmmss', /\d\d\d\d\d\d/],
+    ['HHmm', /\d\d\d\d/],
+    ['HH', /\d\d/]
+];
+
+var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+// date from iso format
+function configFromISO(config) {
+    var i, l,
+        string = config._i,
+        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
+        allowTime, dateFormat, timeFormat, tzFormat;
+
+    if (match) {
+        getParsingFlags(config).iso = true;
+
+        for (i = 0, l = isoDates.length; i < l; i++) {
+            if (isoDates[i][1].exec(match[1])) {
+                dateFormat = isoDates[i][0];
+                allowTime = isoDates[i][2] !== false;
+                break;
+            }
+        }
+        if (dateFormat == null) {
+            config._isValid = false;
+            return;
+        }
+        if (match[3]) {
+            for (i = 0, l = isoTimes.length; i < l; i++) {
+                if (isoTimes[i][1].exec(match[3])) {
+                    // match[2] should be 'T' or space
+                    timeFormat = (match[2] || ' ') + isoTimes[i][0];
+                    break;
+                }
+            }
+            if (timeFormat == null) {
+                config._isValid = false;
+                return;
+            }
+        }
+        if (!allowTime && timeFormat != null) {
+            config._isValid = false;
+            return;
+        }
+        if (match[4]) {
+            if (tzRegex.exec(match[4])) {
+                tzFormat = 'Z';
+            } else {
+                config._isValid = false;
+                return;
+            }
+        }
+        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
+        configFromStringAndFormat(config);
+    } else {
+        config._isValid = false;
+    }
+}
+
+// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
+var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;
+
+function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
+    var result = [
+        untruncateYear(yearStr),
+        defaultLocaleMonthsShort.indexOf(monthStr),
+        parseInt(dayStr, 10),
+        parseInt(hourStr, 10),
+        parseInt(minuteStr, 10)
+    ];
+
+    if (secondStr) {
+        result.push(parseInt(secondStr, 10));
+    }
+
+    return result;
+}
+
+function untruncateYear(yearStr) {
+    var year = parseInt(yearStr, 10);
+    if (year <= 49) {
+        return 2000 + year;
+    } else if (year <= 999) {
+        return 1900 + year;
+    }
+    return year;
+}
+
+function preprocessRFC2822(s) {
+    // Remove comments and folding whitespace and replace multiple-spaces with a single space
+    return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').trim();
+}
+
+function checkWeekday(weekdayStr, parsedInput, config) {
+    if (weekdayStr) {
+        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
+        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
+            weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
+        if (weekdayProvided !== weekdayActual) {
+            getParsingFlags(config).weekdayMismatch = true;
+            config._isValid = false;
+            return false;
+        }
+    }
+    return true;
+}
+
+var obsOffsets = {
+    UT: 0,
+    GMT: 0,
+    EDT: -4 * 60,
+    EST: -5 * 60,
+    CDT: -5 * 60,
+    CST: -6 * 60,
+    MDT: -6 * 60,
+    MST: -7 * 60,
+    PDT: -7 * 60,
+    PST: -8 * 60
+};
+
+function calculateOffset(obsOffset, militaryOffset, numOffset) {
+    if (obsOffset) {
+        return obsOffsets[obsOffset];
+    } else if (militaryOffset) {
+        // the only allowed military tz is Z
+        return 0;
+    } else {
+        var hm = parseInt(numOffset, 10);
+        var m = hm % 100, h = (hm - m) / 100;
+        return h * 60 + m;
+    }
+}
+
+// date and time from ref 2822 format
+function configFromRFC2822(config) {
+    var match = rfc2822.exec(preprocessRFC2822(config._i));
+    if (match) {
+        var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
+        if (!checkWeekday(match[1], parsedArray, config)) {
+            return;
+        }
+
+        config._a = parsedArray;
+        config._tzm = calculateOffset(match[8], match[9], match[10]);
+
+        config._d = createUTCDate.apply(null, config._a);
+        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+
+        getParsingFlags(config).rfc2822 = true;
+    } else {
+        config._isValid = false;
+    }
+}
+
+// date from iso format or fallback
+function configFromString(config) {
+    var matched = aspNetJsonRegex.exec(config._i);
+
+    if (matched !== null) {
+        config._d = new Date(+matched[1]);
+        return;
+    }
+
+    configFromISO(config);
+    if (config._isValid === false) {
+        delete config._isValid;
+    } else {
+        return;
+    }
+
+    configFromRFC2822(config);
+    if (config._isValid === false) {
+        delete config._isValid;
+    } else {
+        return;
+    }
+
+    // Final attempt, use Input Fallback
+    hooks.createFromInputFallback(config);
+}
+
+hooks.createFromInputFallback = deprecate(
+    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
+    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
+    'discouraged and will be removed in an upcoming major release. Please refer to ' +
+    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
+    function (config) {
+        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+    }
+);
+
+// constant that refers to the ISO standard
+hooks.ISO_8601 = function () {};
+
+// constant that refers to the RFC 2822 form
+hooks.RFC_2822 = function () {};
+
+// date from string and format string
+function configFromStringAndFormat(config) {
+    // TODO: Move this to another part of the creation flow to prevent circular deps
+    if (config._f === hooks.ISO_8601) {
+        configFromISO(config);
+        return;
+    }
+    if (config._f === hooks.RFC_2822) {
+        configFromRFC2822(config);
+        return;
+    }
+    config._a = [];
+    getParsingFlags(config).empty = true;
+
+    // This array is used to make a Date, either with `new Date` or `Date.UTC`
+    var string = '' + config._i,
+        i, parsedInput, tokens, token, skipped,
+        stringLength = string.length,
+        totalParsedInputLength = 0;
+
+    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+    for (i = 0; i < tokens.length; i++) {
+        token = tokens[i];
+        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+        // console.log('token', token, 'parsedInput', parsedInput,
+        //         'regex', getParseRegexForToken(token, config));
+        if (parsedInput) {
+            skipped = string.substr(0, string.indexOf(parsedInput));
+            if (skipped.length > 0) {
+                getParsingFlags(config).unusedInput.push(skipped);
+            }
+            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+            totalParsedInputLength += parsedInput.length;
+        }
+        // don't parse if it's not a known token
+        if (formatTokenFunctions[token]) {
+            if (parsedInput) {
+                getParsingFlags(config).empty = false;
+            }
+            else {
+                getParsingFlags(config).unusedTokens.push(token);
+            }
+            addTimeToArrayFromToken(token, parsedInput, config);
+        }
+        else if (config._strict && !parsedInput) {
+            getParsingFlags(config).unusedTokens.push(token);
+        }
+    }
+
+    // add remaining unparsed input length to the string
+    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+    if (string.length > 0) {
+        getParsingFlags(config).unusedInput.push(string);
+    }
+
+    // clear _12h flag if hour is <= 12
+    if (config._a[HOUR] <= 12 &&
+        getParsingFlags(config).bigHour === true &&
+        config._a[HOUR] > 0) {
+        getParsingFlags(config).bigHour = undefined;
+    }
+
+    getParsingFlags(config).parsedDateParts = config._a.slice(0);
+    getParsingFlags(config).meridiem = config._meridiem;
+    // handle meridiem
+    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+    configFromArray(config);
+    checkOverflow(config);
+}
+
+
+function meridiemFixWrap (locale, hour, meridiem) {
+    var isPm;
+
+    if (meridiem == null) {
+        // nothing to do
+        return hour;
+    }
+    if (locale.meridiemHour != null) {
+        return locale.meridiemHour(hour, meridiem);
+    } else if (locale.isPM != null) {
+        // Fallback
+        isPm = locale.isPM(meridiem);
+        if (isPm && hour < 12) {
+            hour += 12;
+        }
+        if (!isPm && hour === 12) {
+            hour = 0;
+        }
+        return hour;
+    } else {
+        // this is not supposed to happen
+        return hour;
+    }
+}
+
+// date from string and array of format strings
+function configFromStringAndArray(config) {
+    var tempConfig,
+        bestMoment,
+
+        scoreToBeat,
+        i,
+        currentScore;
+
+    if (config._f.length === 0) {
+        getParsingFlags(config).invalidFormat = true;
+        config._d = new Date(NaN);
+        return;
+    }
+
+    for (i = 0; i < config._f.length; i++) {
+        currentScore = 0;
+        tempConfig = copyConfig({}, config);
+        if (config._useUTC != null) {
+            tempConfig._useUTC = config._useUTC;
+        }
+        tempConfig._f = config._f[i];
+        configFromStringAndFormat(tempConfig);
+
+        if (!isValid(tempConfig)) {
+            continue;
+        }
+
+        // if there is any input that was not parsed add a penalty for that format
+        currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+        //or tokens
+        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+        getParsingFlags(tempConfig).score = currentScore;
+
+        if (scoreToBeat == null || currentScore < scoreToBeat) {
+            scoreToBeat = currentScore;
+            bestMoment = tempConfig;
+        }
+    }
+
+    extend(config, bestMoment || tempConfig);
+}
+
+function configFromObject(config) {
+    if (config._d) {
+        return;
+    }
+
+    var i = normalizeObjectUnits(config._i);
+    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
+        return obj && parseInt(obj, 10);
+    });
+
+    configFromArray(config);
+}
+
+function createFromConfig (config) {
+    var res = new Moment(checkOverflow(prepareConfig(config)));
+    if (res._nextDay) {
+        // Adding is smart enough around DST
+        res.add(1, 'd');
+        res._nextDay = undefined;
+    }
+
+    return res;
+}
+
+function prepareConfig (config) {
+    var input = config._i,
+        format = config._f;
+
+    config._locale = config._locale || getLocale(config._l);
+
+    if (input === null || (format === undefined && input === '')) {
+        return createInvalid({nullInput: true});
+    }
+
+    if (typeof input === 'string') {
+        config._i = input = config._locale.preparse(input);
+    }
+
+    if (isMoment(input)) {
+        return new Moment(checkOverflow(input));
+    } else if (isDate(input)) {
+        config._d = input;
+    } else if (isArray(format)) {
+        configFromStringAndArray(config);
+    } else if (format) {
+        configFromStringAndFormat(config);
+    }  else {
+        configFromInput(config);
+    }
+
+    if (!isValid(config)) {
+        config._d = null;
+    }
+
+    return config;
+}
+
+function configFromInput(config) {
+    var input = config._i;
+    if (isUndefined(input)) {
+        config._d = new Date(hooks.now());
+    } else if (isDate(input)) {
+        config._d = new Date(input.valueOf());
+    } else if (typeof input === 'string') {
+        configFromString(config);
+    } else if (isArray(input)) {
+        config._a = map(input.slice(0), function (obj) {
+            return parseInt(obj, 10);
+        });
+        configFromArray(config);
+    } else if (isObject(input)) {
+        configFromObject(config);
+    } else if (isNumber(input)) {
+        // from milliseconds
+        config._d = new Date(input);
+    } else {
+        hooks.createFromInputFallback(config);
+    }
+}
+
+function createLocalOrUTC (input, format, locale, strict, isUTC) {
+    var c = {};
+
+    if (locale === true || locale === false) {
+        strict = locale;
+        locale = undefined;
+    }
+
+    if ((isObject(input) && isObjectEmpty(input)) ||
+            (isArray(input) && input.length === 0)) {
+        input = undefined;
+    }
+    // object construction must be done this way.
+    // https://github.com/moment/moment/issues/1423
+    c._isAMomentObject = true;
+    c._useUTC = c._isUTC = isUTC;
+    c._l = locale;
+    c._i = input;
+    c._f = format;
+    c._strict = strict;
+
+    return createFromConfig(c);
+}
+
+function createLocal (input, format, locale, strict) {
+    return createLocalOrUTC(input, format, locale, strict, false);
+}
+
+var prototypeMin = deprecate(
+    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
+    function () {
+        var other = createLocal.apply(null, arguments);
+        if (this.isValid() && other.isValid()) {
+            return other < this ? this : other;
+        } else {
+            return createInvalid();
+        }
+    }
+);
+
+var prototypeMax = deprecate(
+    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
+    function () {
+        var other = createLocal.apply(null, arguments);
+        if (this.isValid() && other.isValid()) {
+            return other > this ? this : other;
+        } else {
+            return createInvalid();
+        }
+    }
+);
+
+// Pick a moment m from moments so that m[fn](other) is true for all
+// other. This relies on the function fn to be transitive.
+//
+// moments should either be an array of moment objects or an array, whose
+// first element is an array of moment objects.
+function pickBy(fn, moments) {
+    var res, i;
+    if (moments.length === 1 && isArray(moments[0])) {
+        moments = moments[0];
+    }
+    if (!moments.length) {
+        return createLocal();
+    }
+    res = moments[0];
+    for (i = 1; i < moments.length; ++i) {
+        if (!moments[i].isValid() || moments[i][fn](res)) {
+            res = moments[i];
+        }
+    }
+    return res;
+}
+
+// TODO: Use [].sort instead?
+function min () {
+    var args = [].slice.call(arguments, 0);
+
+    return pickBy('isBefore', args);
+}
+
+function max () {
+    var args = [].slice.call(arguments, 0);
+
+    return pickBy('isAfter', args);
+}
+
+var now = function () {
+    return Date.now ? Date.now() : +(new Date());
+};
+
+var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
+
+function isDurationValid(m) {
+    for (var key in m) {
+        if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
+            return false;
+        }
+    }
+
+    var unitHasDecimal = false;
+    for (var i = 0; i < ordering.length; ++i) {
+        if (m[ordering[i]]) {
+            if (unitHasDecimal) {
+                return false; // only allow non-integers for smallest unit
+            }
+            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
+                unitHasDecimal = true;
+            }
+        }
+    }
+
+    return true;
+}
+
+function isValid$1() {
+    return this._isValid;
+}
+
+function createInvalid$1() {
+    return createDuration(NaN);
+}
+
+function Duration (duration) {
+    var normalizedInput = normalizeObjectUnits(duration),
+        years = normalizedInput.year || 0,
+        quarters = normalizedInput.quarter || 0,
+        months = normalizedInput.month || 0,
+        weeks = normalizedInput.week || 0,
+        days = normalizedInput.day || 0,
+        hours = normalizedInput.hour || 0,
+        minutes = normalizedInput.minute || 0,
+        seconds = normalizedInput.second || 0,
+        milliseconds = normalizedInput.millisecond || 0;
+
+    this._isValid = isDurationValid(normalizedInput);
+
+    // representation for dateAddRemove
+    this._milliseconds = +milliseconds +
+        seconds * 1e3 + // 1000
+        minutes * 6e4 + // 1000 * 60
+        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
+    // Because of dateAddRemove treats 24 hours as different from a
+    // day when working around DST, we need to store them separately
+    this._days = +days +
+        weeks * 7;
+    // It is impossible to translate months into days without knowing
+    // which months you are are talking about, so we have to store
+    // it separately.
+    this._months = +months +
+        quarters * 3 +
+        years * 12;
+
+    this._data = {};
+
+    this._locale = getLocale();
+
+    this._bubble();
+}
+
+function isDuration (obj) {
+    return obj instanceof Duration;
+}
+
+function absRound (number) {
+    if (number < 0) {
+        return Math.round(-1 * number) * -1;
+    } else {
+        return Math.round(number);
+    }
+}
+
+// FORMATTING
+
+function offset (token, separator) {
+    addFormatToken(token, 0, 0, function () {
+        var offset = this.utcOffset();
+        var sign = '+';
+        if (offset < 0) {
+            offset = -offset;
+            sign = '-';
+        }
+        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+    });
+}
+
+offset('Z', ':');
+offset('ZZ', '');
+
+// PARSING
+
+addRegexToken('Z',  matchShortOffset);
+addRegexToken('ZZ', matchShortOffset);
+addParseToken(['Z', 'ZZ'], function (input, array, config) {
+    config._useUTC = true;
+    config._tzm = offsetFromString(matchShortOffset, input);
+});
+
+// HELPERS
+
+// timezone chunker
+// '+10:00' > ['10',  '00']
+// '-1530'  > ['-15', '30']
+var chunkOffset = /([\+\-]|\d\d)/gi;
+
+function offsetFromString(matcher, string) {
+    var matches = (string || '').match(matcher);
+
+    if (matches === null) {
+        return null;
+    }
+
+    var chunk   = matches[matches.length - 1] || [];
+    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+    var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+    return minutes === 0 ?
+      0 :
+      parts[0] === '+' ? minutes : -minutes;
+}
+
+// Return a moment from input, that is local/utc/zone equivalent to model.
+function cloneWithOffset(input, model) {
+    var res, diff;
+    if (model._isUTC) {
+        res = model.clone();
+        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
+        // Use low-level api, because this fn is low-level api.
+        res._d.setTime(res._d.valueOf() + diff);
+        hooks.updateOffset(res, false);
+        return res;
+    } else {
+        return createLocal(input).local();
+    }
+}
+
+function getDateOffset (m) {
+    // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+    // https://github.com/moment/moment/pull/1871
+    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+}
+
+// HOOKS
+
+// This function will be called whenever a moment is mutated.
+// It is intended to keep the offset in sync with the timezone.
+hooks.updateOffset = function () {};
+
+// MOMENTS
+
+// keepLocalTime = true means only change the timezone, without
+// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+// +0200, so we adjust the time as needed, to be valid.
+//
+// Keeping the time actually adds/subtracts (one hour)
+// from the actual represented time. That is why we call updateOffset
+// a second time. In case it wants us to change the offset again
+// _changeInProgress == true case, then we have to adjust, because
+// there is no such time in the given timezone.
+function getSetOffset (input, keepLocalTime, keepMinutes) {
+    var offset = this._offset || 0,
+        localAdjust;
+    if (!this.isValid()) {
+        return input != null ? this : NaN;
+    }
+    if (input != null) {
+        if (typeof input === 'string') {
+            input = offsetFromString(matchShortOffset, input);
+            if (input === null) {
+                return this;
+            }
+        } else if (Math.abs(input) < 16 && !keepMinutes) {
+            input = input * 60;
+        }
+        if (!this._isUTC && keepLocalTime) {
+            localAdjust = getDateOffset(this);
+        }
+        this._offset = input;
+        this._isUTC = true;
+        if (localAdjust != null) {
+            this.add(localAdjust, 'm');
+        }
+        if (offset !== input) {
+            if (!keepLocalTime || this._changeInProgress) {
+                addSubtract(this, createDuration(input - offset, 'm'), 1, false);
+            } else if (!this._changeInProgress) {
+                this._changeInProgress = true;
+                hooks.updateOffset(this, true);
+                this._changeInProgress = null;
+            }
+        }
+        return this;
+    } else {
+        return this._isUTC ? offset : getDateOffset(this);
+    }
+}
+
+function getSetZone (input, keepLocalTime) {
+    if (input != null) {
+        if (typeof input !== 'string') {
+            input = -input;
+        }
+
+        this.utcOffset(input, keepLocalTime);
+
+        return this;
+    } else {
+        return -this.utcOffset();
+    }
+}
+
+function setOffsetToUTC (keepLocalTime) {
+    return this.utcOffset(0, keepLocalTime);
+}
+
+function setOffsetToLocal (keepLocalTime) {
+    if (this._isUTC) {
+        this.utcOffset(0, keepLocalTime);
+        this._isUTC = false;
+
+        if (keepLocalTime) {
+            this.subtract(getDateOffset(this), 'm');
+        }
+    }
+    return this;
+}
+
+function setOffsetToParsedOffset () {
+    if (this._tzm != null) {
+        this.utcOffset(this._tzm, false, true);
+    } else if (typeof this._i === 'string') {
+        var tZone = offsetFromString(matchOffset, this._i);
+        if (tZone != null) {
+            this.utcOffset(tZone);
+        }
+        else {
+            this.utcOffset(0, true);
+        }
+    }
+    return this;
+}
+
+function hasAlignedHourOffset (input) {
+    if (!this.isValid()) {
+        return false;
+    }
+    input = input ? createLocal(input).utcOffset() : 0;
+
+    return (this.utcOffset() - input) % 60 === 0;
+}
+
+function isDaylightSavingTime () {
+    return (
+        this.utcOffset() > this.clone().month(0).utcOffset() ||
+        this.utcOffset() > this.clone().month(5).utcOffset()
+    );
+}
+
+function isDaylightSavingTimeShifted () {
+    if (!isUndefined(this._isDSTShifted)) {
+        return this._isDSTShifted;
+    }
+
+    var c = {};
+
+    copyConfig(c, this);
+    c = prepareConfig(c);
+
+    if (c._a) {
+        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
+        this._isDSTShifted = this.isValid() &&
+            compareArrays(c._a, other.toArray()) > 0;
+    } else {
+        this._isDSTShifted = false;
+    }
+
+    return this._isDSTShifted;
+}
+
+function isLocal () {
+    return this.isValid() ? !this._isUTC : false;
+}
+
+function isUtcOffset () {
+    return this.isValid() ? this._isUTC : false;
+}
+
+function isUtc () {
+    return this.isValid() ? this._isUTC && this._offset === 0 : false;
+}
+
+// ASP.NET json date format regex
+var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
+
+// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+// and further modified to allow for strings containing both week and day
+var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
+
+function createDuration (input, key) {
+    var duration = input,
+        // matching against regexp is expensive, do it on demand
+        match = null,
+        sign,
+        ret,
+        diffRes;
+
+    if (isDuration(input)) {
+        duration = {
+            ms : input._milliseconds,
+            d  : input._days,
+            M  : input._months
+        };
+    } else if (isNumber(input)) {
+        duration = {};
+        if (key) {
+            duration[key] = input;
+        } else {
+            duration.milliseconds = input;
+        }
+    } else if (!!(match = aspNetRegex.exec(input))) {
+        sign = (match[1] === '-') ? -1 : 1;
+        duration = {
+            y  : 0,
+            d  : toInt(match[DATE])                         * sign,
+            h  : toInt(match[HOUR])                         * sign,
+            m  : toInt(match[MINUTE])                       * sign,
+            s  : toInt(match[SECOND])                       * sign,
+            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
+        };
+    } else if (!!(match = isoRegex.exec(input))) {
+        sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;
+        duration = {
+            y : parseIso(match[2], sign),
+            M : parseIso(match[3], sign),
+            w : parseIso(match[4], sign),
+            d : parseIso(match[5], sign),
+            h : parseIso(match[6], sign),
+            m : parseIso(match[7], sign),
+            s : parseIso(match[8], sign)
+        };
+    } else if (duration == null) {// checks for null or undefined
+        duration = {};
+    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
+
+        duration = {};
+        duration.ms = diffRes.milliseconds;
+        duration.M = diffRes.months;
+    }
+
+    ret = new Duration(duration);
+
+    if (isDuration(input) && hasOwnProp(input, '_locale')) {
+        ret._locale = input._locale;
+    }
+
+    return ret;
+}
+
+createDuration.fn = Duration.prototype;
+createDuration.invalid = createInvalid$1;
+
+function parseIso (inp, sign) {
+    // We'd normally use ~~inp for this, but unfortunately it also
+    // converts floats to ints.
+    // inp may be undefined, so careful calling replace on it.
+    var res = inp && parseFloat(inp.replace(',', '.'));
+    // apply sign while we're at it
+    return (isNaN(res) ? 0 : res) * sign;
+}
+
+function positiveMomentsDifference(base, other) {
+    var res = {milliseconds: 0, months: 0};
+
+    res.months = other.month() - base.month() +
+        (other.year() - base.year()) * 12;
+    if (base.clone().add(res.months, 'M').isAfter(other)) {
+        --res.months;
+    }
+
+    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+    return res;
+}
+
+function momentsDifference(base, other) {
+    var res;
+    if (!(base.isValid() && other.isValid())) {
+        return {milliseconds: 0, months: 0};
+    }
+
+    other = cloneWithOffset(other, base);
+    if (base.isBefore(other)) {
+        res = positiveMomentsDifference(base, other);
+    } else {
+        res = positiveMomentsDifference(other, base);
+        res.milliseconds = -res.milliseconds;
+        res.months = -res.months;
+    }
+
+    return res;
+}
+
+// TODO: remove 'name' arg after deprecation is removed
+function createAdder(direction, name) {
+    return function (val, period) {
+        var dur, tmp;
+        //invert the arguments, but complain about it
+        if (period !== null && !isNaN(+period)) {
+            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
+            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
+            tmp = val; val = period; period = tmp;
+        }
+
+        val = typeof val === 'string' ? +val : val;
+        dur = createDuration(val, period);
+        addSubtract(this, dur, direction);
+        return this;
+    };
+}
+
+function addSubtract (mom, duration, isAdding, updateOffset) {
+    var milliseconds = duration._milliseconds,
+        days = absRound(duration._days),
+        months = absRound(duration._months);
+
+    if (!mom.isValid()) {
+        // No op
+        return;
+    }
+
+    updateOffset = updateOffset == null ? true : updateOffset;
+
+    if (months) {
+        setMonth(mom, get(mom, 'Month') + months * isAdding);
+    }
+    if (days) {
+        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
+    }
+    if (milliseconds) {
+        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
+    }
+    if (updateOffset) {
+        hooks.updateOffset(mom, days || months);
+    }
+}
+
+var add      = createAdder(1, 'add');
+var subtract = createAdder(-1, 'subtract');
+
+function getCalendarFormat(myMoment, now) {
+    var diff = myMoment.diff(now, 'days', true);
+    return diff < -6 ? 'sameElse' :
+            diff < -1 ? 'lastWeek' :
+            diff < 0 ? 'lastDay' :
+            diff < 1 ? 'sameDay' :
+            diff < 2 ? 'nextDay' :
+            diff < 7 ? 'nextWeek' : 'sameElse';
+}
+
+function calendar$1 (time, formats) {
+    // We want to compare the start of today, vs this.
+    // Getting start-of-today depends on whether we're local/utc/offset or not.
+    var now = time || createLocal(),
+        sod = cloneWithOffset(now, this).startOf('day'),
+        format = hooks.calendarFormat(this, sod) || 'sameElse';
+
+    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
+
+    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
+}
+
+function clone () {
+    return new Moment(this);
+}
+
+function isAfter (input, units) {
+    var localInput = isMoment(input) ? input : createLocal(input);
+    if (!(this.isValid() && localInput.isValid())) {
+        return false;
+    }
+    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+    if (units === 'millisecond') {
+        return this.valueOf() > localInput.valueOf();
+    } else {
+        return localInput.valueOf() < this.clone().startOf(units).valueOf();
+    }
+}
+
+function isBefore (input, units) {
+    var localInput = isMoment(input) ? input : createLocal(input);
+    if (!(this.isValid() && localInput.isValid())) {
+        return false;
+    }
+    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
+    if (units === 'millisecond') {
+        return this.valueOf() < localInput.valueOf();
+    } else {
+        return this.clone().endOf(units).valueOf() < localInput.valueOf();
+    }
+}
+
+function isBetween (from, to, units, inclusivity) {
+    inclusivity = inclusivity || '()';
+    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
+        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
+}
+
+function isSame (input, units) {
+    var localInput = isMoment(input) ? input : createLocal(input),
+        inputMs;
+    if (!(this.isValid() && localInput.isValid())) {
+        return false;
+    }
+    units = normalizeUnits(units || 'millisecond');
+    if (units === 'millisecond') {
+        return this.valueOf() === localInput.valueOf();
+    } else {
+        inputMs = localInput.valueOf();
+        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
+    }
+}
+
+function isSameOrAfter (input, units) {
+    return this.isSame(input, units) || this.isAfter(input,units);
+}
+
+function isSameOrBefore (input, units) {
+    return this.isSame(input, units) || this.isBefore(input,units);
+}
+
+function diff (input, units, asFloat) {
+    var that,
+        zoneDelta,
+        delta, output;
+
+    if (!this.isValid()) {
+        return NaN;
+    }
+
+    that = cloneWithOffset(input, this);
+
+    if (!that.isValid()) {
+        return NaN;
+    }
+
+    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
+
+    units = normalizeUnits(units);
+
+    switch (units) {
+        case 'year': output = monthDiff(this, that) / 12; break;
+        case 'month': output = monthDiff(this, that); break;
+        case 'quarter': output = monthDiff(this, that) / 3; break;
+        case 'second': output = (this - that) / 1e3; break; // 1000
+        case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
+        case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
+        case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
+        case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
+        default: output = this - that;
+    }
+
+    return asFloat ? output : absFloor(output);
+}
+
+function monthDiff (a, b) {
+    // difference in months
+    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+        // b is in (anchor - 1 month, anchor + 1 month)
+        anchor = a.clone().add(wholeMonthDiff, 'months'),
+        anchor2, adjust;
+
+    if (b - anchor < 0) {
+        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+        // linear across the month
+        adjust = (b - anchor) / (anchor - anchor2);
+    } else {
+        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+        // linear across the month
+        adjust = (b - anchor) / (anchor2 - anchor);
+    }
+
+    //check for negative zero, return zero if negative zero
+    return -(wholeMonthDiff + adjust) || 0;
+}
+
+hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
+
+function toString () {
+    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+}
+
+function toISOString() {
+    if (!this.isValid()) {
+        return null;
+    }
+    var m = this.clone().utc();
+    if (m.year() < 0 || m.year() > 9999) {
+        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+    }
+    if (isFunction(Date.prototype.toISOString)) {
+        // native implementation is ~50x faster, use it when we can
+        return this.toDate().toISOString();
+    }
+    return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+}
+
+/**
+ * Return a human readable representation of a moment that can
+ * also be evaluated to get a new moment which is the same
+ *
+ * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
+ */
+function inspect () {
+    if (!this.isValid()) {
+        return 'moment.invalid(/* ' + this._i + ' */)';
+    }
+    var func = 'moment';
+    var zone = '';
+    if (!this.isLocal()) {
+        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
+        zone = 'Z';
+    }
+    var prefix = '[' + func + '("]';
+    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
+    var datetime = '-MM-DD[T]HH:mm:ss.SSS';
+    var suffix = zone + '[")]';
+
+    return this.format(prefix + year + datetime + suffix);
+}
+
+function format (inputString) {
+    if (!inputString) {
+        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
+    }
+    var output = formatMoment(this, inputString);
+    return this.localeData().postformat(output);
+}
+
+function from (time, withoutSuffix) {
+    if (this.isValid() &&
+            ((isMoment(time) && time.isValid()) ||
+             createLocal(time).isValid())) {
+        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+    } else {
+        return this.localeData().invalidDate();
+    }
+}
+
+function fromNow (withoutSuffix) {
+    return this.from(createLocal(), withoutSuffix);
+}
+
+function to (time, withoutSuffix) {
+    if (this.isValid() &&
+            ((isMoment(time) && time.isValid()) ||
+             createLocal(time).isValid())) {
+        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+    } else {
+        return this.localeData().invalidDate();
+    }
+}
+
+function toNow (withoutSuffix) {
+    return this.to(createLocal(), withoutSuffix);
+}
+
+// If passed a locale key, it will set the locale for this
+// instance.  Otherwise, it will return the locale configuration
+// variables for this instance.
+function locale (key) {
+    var newLocaleData;
+
+    if (key === undefined) {
+        return this._locale._abbr;
+    } else {
+        newLocaleData = getLocale(key);
+        if (newLocaleData != null) {
+            this._locale = newLocaleData;
+        }
+        return this;
+    }
+}
+
+var lang = deprecate(
+    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+    function (key) {
+        if (key === undefined) {
+            return this.localeData();
+        } else {
+            return this.locale(key);
+        }
+    }
+);
+
+function localeData () {
+    return this._locale;
+}
+
+function startOf (units) {
+    units = normalizeUnits(units);
+    // the following switch intentionally omits break keywords
+    // to utilize falling through the cases.
+    switch (units) {
+        case 'year':
+            this.month(0);
+            /* falls through */
+        case 'quarter':
+        case 'month':
+            this.date(1);
+            /* falls through */
+        case 'week':
+        case 'isoWeek':
+        case 'day':
+        case 'date':
+            this.hours(0);
+            /* falls through */
+        case 'hour':
+            this.minutes(0);
+            /* falls through */
+        case 'minute':
+            this.seconds(0);
+            /* falls through */
+        case 'second':
+            this.milliseconds(0);
+    }
+
+    // weeks are a special case
+    if (units === 'week') {
+        this.weekday(0);
+    }
+    if (units === 'isoWeek') {
+        this.isoWeekday(1);
+    }
+
+    // quarters are also special
+    if (units === 'quarter') {
+        this.month(Math.floor(this.month() / 3) * 3);
+    }
+
+    return this;
+}
+
+function endOf (units) {
+    units = normalizeUnits(units);
+    if (units === undefined || units === 'millisecond') {
+        return this;
+    }
+
+    // 'date' is an alias for 'day', so it should be considered as such.
+    if (units === 'date') {
+        units = 'day';
+    }
+
+    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+}
+
+function valueOf () {
+    return this._d.valueOf() - ((this._offset || 0) * 60000);
+}
+
+function unix () {
+    return Math.floor(this.valueOf() / 1000);
+}
+
+function toDate () {
+    return new Date(this.valueOf());
+}
+
+function toArray () {
+    var m = this;
+    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+}
+
+function toObject () {
+    var m = this;
+    return {
+        years: m.year(),
+        months: m.month(),
+        date: m.date(),
+        hours: m.hours(),
+        minutes: m.minutes(),
+        seconds: m.seconds(),
+        milliseconds: m.milliseconds()
+    };
+}
+
+function toJSON () {
+    // new Date(NaN).toJSON() === null
+    return this.isValid() ? this.toISOString() : null;
+}
+
+function isValid$2 () {
+    return isValid(this);
+}
+
+function parsingFlags () {
+    return extend({}, getParsingFlags(this));
+}
+
+function invalidAt () {
+    return getParsingFlags(this).overflow;
+}
+
+function creationData() {
+    return {
+        input: this._i,
+        format: this._f,
+        locale: this._locale,
+        isUTC: this._isUTC,
+        strict: this._strict
+    };
+}
+
+// FORMATTING
+
+addFormatToken(0, ['gg', 2], 0, function () {
+    return this.weekYear() % 100;
+});
+
+addFormatToken(0, ['GG', 2], 0, function () {
+    return this.isoWeekYear() % 100;
+});
+
+function addWeekYearFormatToken (token, getter) {
+    addFormatToken(0, [token, token.length], 0, getter);
+}
+
+addWeekYearFormatToken('gggg',     'weekYear');
+addWeekYearFormatToken('ggggg',    'weekYear');
+addWeekYearFormatToken('GGGG',  'isoWeekYear');
+addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+// ALIASES
+
+addUnitAlias('weekYear', 'gg');
+addUnitAlias('isoWeekYear', 'GG');
+
+// PRIORITY
+
+addUnitPriority('weekYear', 1);
+addUnitPriority('isoWeekYear', 1);
+
+
+// PARSING
+
+addRegexToken('G',      matchSigned);
+addRegexToken('g',      matchSigned);
+addRegexToken('GG',     match1to2, match2);
+addRegexToken('gg',     match1to2, match2);
+addRegexToken('GGGG',   match1to4, match4);
+addRegexToken('gggg',   match1to4, match4);
+addRegexToken('GGGGG',  match1to6, match6);
+addRegexToken('ggggg',  match1to6, match6);
+
+addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+    week[token.substr(0, 2)] = toInt(input);
+});
+
+addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+    week[token] = hooks.parseTwoDigitYear(input);
+});
+
+// MOMENTS
+
+function getSetWeekYear (input) {
+    return getSetWeekYearHelper.call(this,
+            input,
+            this.week(),
+            this.weekday(),
+            this.localeData()._week.dow,
+            this.localeData()._week.doy);
+}
+
+function getSetISOWeekYear (input) {
+    return getSetWeekYearHelper.call(this,
+            input, this.isoWeek(), this.isoWeekday(), 1, 4);
+}
+
+function getISOWeeksInYear () {
+    return weeksInYear(this.year(), 1, 4);
+}
+
+function getWeeksInYear () {
+    var weekInfo = this.localeData()._week;
+    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+}
+
+function getSetWeekYearHelper(input, week, weekday, dow, doy) {
+    var weeksTarget;
+    if (input == null) {
+        return weekOfYear(this, dow, doy).year;
+    } else {
+        weeksTarget = weeksInYear(input, dow, doy);
+        if (week > weeksTarget) {
+            week = weeksTarget;
+        }
+        return setWeekAll.call(this, input, week, weekday, dow, doy);
+    }
+}
+
+function setWeekAll(weekYear, week, weekday, dow, doy) {
+    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
+        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
+
+    this.year(date.getUTCFullYear());
+    this.month(date.getUTCMonth());
+    this.date(date.getUTCDate());
+    return this;
+}
+
+// FORMATTING
+
+addFormatToken('Q', 0, 'Qo', 'quarter');
+
+// ALIASES
+
+addUnitAlias('quarter', 'Q');
+
+// PRIORITY
+
+addUnitPriority('quarter', 7);
+
+// PARSING
+
+addRegexToken('Q', match1);
+addParseToken('Q', function (input, array) {
+    array[MONTH] = (toInt(input) - 1) * 3;
+});
+
+// MOMENTS
+
+function getSetQuarter (input) {
+    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+}
+
+// FORMATTING
+
+addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+// ALIASES
+
+addUnitAlias('date', 'D');
+
+// PRIOROITY
+addUnitPriority('date', 9);
+
+// PARSING
+
+addRegexToken('D',  match1to2);
+addRegexToken('DD', match1to2, match2);
+addRegexToken('Do', function (isStrict, locale) {
+    // TODO: Remove "ordinalParse" fallback in next major release.
+    return isStrict ?
+      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
+      locale._dayOfMonthOrdinalParseLenient;
+});
+
+addParseToken(['D', 'DD'], DATE);
+addParseToken('Do', function (input, array) {
+    array[DATE] = toInt(input.match(match1to2)[0], 10);
+});
+
+// MOMENTS
+
+var getSetDayOfMonth = makeGetSet('Date', true);
+
+// FORMATTING
+
+addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+// ALIASES
+
+addUnitAlias('dayOfYear', 'DDD');
+
+// PRIORITY
+addUnitPriority('dayOfYear', 4);
+
+// PARSING
+
+addRegexToken('DDD',  match1to3);
+addRegexToken('DDDD', match3);
+addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+    config._dayOfYear = toInt(input);
+});
+
+// HELPERS
+
+// MOMENTS
+
+function getSetDayOfYear (input) {
+    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+}
+
+// FORMATTING
+
+addFormatToken('m', ['mm', 2], 0, 'minute');
+
+// ALIASES
+
+addUnitAlias('minute', 'm');
+
+// PRIORITY
+
+addUnitPriority('minute', 14);
+
+// PARSING
+
+addRegexToken('m',  match1to2);
+addRegexToken('mm', match1to2, match2);
+addParseToken(['m', 'mm'], MINUTE);
+
+// MOMENTS
+
+var getSetMinute = makeGetSet('Minutes', false);
+
+// FORMATTING
+
+addFormatToken('s', ['ss', 2], 0, 'second');
+
+// ALIASES
+
+addUnitAlias('second', 's');
+
+// PRIORITY
+
+addUnitPriority('second', 15);
+
+// PARSING
+
+addRegexToken('s',  match1to2);
+addRegexToken('ss', match1to2, match2);
+addParseToken(['s', 'ss'], SECOND);
+
+// MOMENTS
+
+var getSetSecond = makeGetSet('Seconds', false);
+
+// FORMATTING
+
+addFormatToken('S', 0, 0, function () {
+    return ~~(this.millisecond() / 100);
+});
+
+addFormatToken(0, ['SS', 2], 0, function () {
+    return ~~(this.millisecond() / 10);
+});
+
+addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+addFormatToken(0, ['SSSS', 4], 0, function () {
+    return this.millisecond() * 10;
+});
+addFormatToken(0, ['SSSSS', 5], 0, function () {
+    return this.millisecond() * 100;
+});
+addFormatToken(0, ['SSSSSS', 6], 0, function () {
+    return this.millisecond() * 1000;
+});
+addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+    return this.millisecond() * 10000;
+});
+addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+    return this.millisecond() * 100000;
+});
+addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+    return this.millisecond() * 1000000;
+});
+
+
+// ALIASES
+
+addUnitAlias('millisecond', 'ms');
+
+// PRIORITY
+
+addUnitPriority('millisecond', 16);
+
+// PARSING
+
+addRegexToken('S',    match1to3, match1);
+addRegexToken('SS',   match1to3, match2);
+addRegexToken('SSS',  match1to3, match3);
+
+var token;
+for (token = 'SSSS'; token.length <= 9; token += 'S') {
+    addRegexToken(token, matchUnsigned);
+}
+
+function parseMs(input, array) {
+    array[MILLISECOND] = toInt(('0.' + input) * 1000);
+}
+
+for (token = 'S'; token.length <= 9; token += 'S') {
+    addParseToken(token, parseMs);
+}
+// MOMENTS
+
+var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+// FORMATTING
+
+addFormatToken('z',  0, 0, 'zoneAbbr');
+addFormatToken('zz', 0, 0, 'zoneName');
+
+// MOMENTS
+
+function getZoneAbbr () {
+    return this._isUTC ? 'UTC' : '';
+}
+
+function getZoneName () {
+    return this._isUTC ? 'Coordinated Universal Time' : '';
+}
+
+var proto = Moment.prototype;
+
+proto.add               = add;
+proto.calendar          = calendar$1;
+proto.clone             = clone;
+proto.diff              = diff;
+proto.endOf             = endOf;
+proto.format            = format;
+proto.from              = from;
+proto.fromNow           = fromNow;
+proto.to                = to;
+proto.toNow             = toNow;
+proto.get               = stringGet;
+proto.invalidAt         = invalidAt;
+proto.isAfter           = isAfter;
+proto.isBefore          = isBefore;
+proto.isBetween         = isBetween;
+proto.isSame            = isSame;
+proto.isSameOrAfter     = isSameOrAfter;
+proto.isSameOrBefore    = isSameOrBefore;
+proto.isValid           = isValid$2;
+proto.lang              = lang;
+proto.locale            = locale;
+proto.localeData        = localeData;
+proto.max               = prototypeMax;
+proto.min               = prototypeMin;
+proto.parsingFlags      = parsingFlags;
+proto.set               = stringSet;
+proto.startOf           = startOf;
+proto.subtract          = subtract;
+proto.toArray           = toArray;
+proto.toObject          = toObject;
+proto.toDate            = toDate;
+proto.toISOString       = toISOString;
+proto.inspect           = inspect;
+proto.toJSON            = toJSON;
+proto.toString          = toString;
+proto.unix              = unix;
+proto.valueOf           = valueOf;
+proto.creationData      = creationData;
+
+// Year
+proto.year       = getSetYear;
+proto.isLeapYear = getIsLeapYear;
+
+// Week Year
+proto.weekYear    = getSetWeekYear;
+proto.isoWeekYear = getSetISOWeekYear;
+
+// Quarter
+proto.quarter = proto.quarters = getSetQuarter;
+
+// Month
+proto.month       = getSetMonth;
+proto.daysInMonth = getDaysInMonth;
+
+// Week
+proto.week           = proto.weeks        = getSetWeek;
+proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;
+proto.weeksInYear    = getWeeksInYear;
+proto.isoWeeksInYear = getISOWeeksInYear;
+
+// Day
+proto.date       = getSetDayOfMonth;
+proto.day        = proto.days             = getSetDayOfWeek;
+proto.weekday    = getSetLocaleDayOfWeek;
+proto.isoWeekday = getSetISODayOfWeek;
+proto.dayOfYear  = getSetDayOfYear;
+
+// Hour
+proto.hour = proto.hours = getSetHour;
+
+// Minute
+proto.minute = proto.minutes = getSetMinute;
+
+// Second
+proto.second = proto.seconds = getSetSecond;
+
+// Millisecond
+proto.millisecond = proto.milliseconds = getSetMillisecond;
+
+// Offset
+proto.utcOffset            = getSetOffset;
+proto.utc                  = setOffsetToUTC;
+proto.local                = setOffsetToLocal;
+proto.parseZone            = setOffsetToParsedOffset;
+proto.hasAlignedHourOffset = hasAlignedHourOffset;
+proto.isDST                = isDaylightSavingTime;
+proto.isLocal              = isLocal;
+proto.isUtcOffset          = isUtcOffset;
+proto.isUtc                = isUtc;
+proto.isUTC                = isUtc;
+
+// Timezone
+proto.zoneAbbr = getZoneAbbr;
+proto.zoneName = getZoneName;
+
+// Deprecations
+proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
+proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
+
+function createUnix (input) {
+    return createLocal(input * 1000);
+}
+
+function createInZone () {
+    return createLocal.apply(null, arguments).parseZone();
+}
+
+function preParsePostFormat (string) {
+    return string;
+}
+
+var proto$1 = Locale.prototype;
+
+proto$1.calendar        = calendar;
+proto$1.longDateFormat  = longDateFormat;
+proto$1.invalidDate     = invalidDate;
+proto$1.ordinal         = ordinal;
+proto$1.preparse        = preParsePostFormat;
+proto$1.postformat      = preParsePostFormat;
+proto$1.relativeTime    = relativeTime;
+proto$1.pastFuture      = pastFuture;
+proto$1.set             = set;
+
+// Month
+proto$1.months            =        localeMonths;
+proto$1.monthsShort       =        localeMonthsShort;
+proto$1.monthsParse       =        localeMonthsParse;
+proto$1.monthsRegex       = monthsRegex;
+proto$1.monthsShortRegex  = monthsShortRegex;
+
+// Week
+proto$1.week = localeWeek;
+proto$1.firstDayOfYear = localeFirstDayOfYear;
+proto$1.firstDayOfWeek = localeFirstDayOfWeek;
+
+// Day of Week
+proto$1.weekdays       =        localeWeekdays;
+proto$1.weekdaysMin    =        localeWeekdaysMin;
+proto$1.weekdaysShort  =        localeWeekdaysShort;
+proto$1.weekdaysParse  =        localeWeekdaysParse;
+
+proto$1.weekdaysRegex       =        weekdaysRegex;
+proto$1.weekdaysShortRegex  =        weekdaysShortRegex;
+proto$1.weekdaysMinRegex    =        weekdaysMinRegex;
+
+// Hours
+proto$1.isPM = localeIsPM;
+proto$1.meridiem = localeMeridiem;
+
+function get$1 (format, index, field, setter) {
+    var locale = getLocale();
+    var utc = createUTC().set(setter, index);
+    return locale[field](utc, format);
+}
+
+function listMonthsImpl (format, index, field) {
+    if (isNumber(format)) {
+        index = format;
+        format = undefined;
+    }
+
+    format = format || '';
+
+    if (index != null) {
+        return get$1(format, index, field, 'month');
+    }
+
+    var i;
+    var out = [];
+    for (i = 0; i < 12; i++) {
+        out[i] = get$1(format, i, field, 'month');
+    }
+    return out;
+}
+
+// ()
+// (5)
+// (fmt, 5)
+// (fmt)
+// (true)
+// (true, 5)
+// (true, fmt, 5)
+// (true, fmt)
+function listWeekdaysImpl (localeSorted, format, index, field) {
+    if (typeof localeSorted === 'boolean') {
+        if (isNumber(format)) {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+    } else {
+        format = localeSorted;
+        index = format;
+        localeSorted = false;
+
+        if (isNumber(format)) {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+    }
+
+    var locale = getLocale(),
+        shift = localeSorted ? locale._week.dow : 0;
+
+    if (index != null) {
+        return get$1(format, (index + shift) % 7, field, 'day');
+    }
+
+    var i;
+    var out = [];
+    for (i = 0; i < 7; i++) {
+        out[i] = get$1(format, (i + shift) % 7, field, 'day');
+    }
+    return out;
+}
+
+function listMonths (format, index) {
+    return listMonthsImpl(format, index, 'months');
+}
+
+function listMonthsShort (format, index) {
+    return listMonthsImpl(format, index, 'monthsShort');
+}
+
+function listWeekdays (localeSorted, format, index) {
+    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
+}
+
+function listWeekdaysShort (localeSorted, format, index) {
+    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
+}
+
+function listWeekdaysMin (localeSorted, format, index) {
+    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
+}
+
+getSetGlobalLocale('en', {
+    dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
+    ordinal : function (number) {
+        var b = number % 10,
+            output = (toInt(number % 100 / 10) === 1) ? 'th' :
+            (b === 1) ? 'st' :
+            (b === 2) ? 'nd' :
+            (b === 3) ? 'rd' : 'th';
+        return number + output;
+    }
+});
+
+// Side effect imports
+hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
+hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
+
+var mathAbs = Math.abs;
+
+function abs () {
+    var data           = this._data;
+
+    this._milliseconds = mathAbs(this._milliseconds);
+    this._days         = mathAbs(this._days);
+    this._months       = mathAbs(this._months);
+
+    data.milliseconds  = mathAbs(data.milliseconds);
+    data.seconds       = mathAbs(data.seconds);
+    data.minutes       = mathAbs(data.minutes);
+    data.hours         = mathAbs(data.hours);
+    data.months        = mathAbs(data.months);
+    data.years         = mathAbs(data.years);
+
+    return this;
+}
+
+function addSubtract$1 (duration, input, value, direction) {
+    var other = createDuration(input, value);
+
+    duration._milliseconds += direction * other._milliseconds;
+    duration._days         += direction * other._days;
+    duration._months       += direction * other._months;
+
+    return duration._bubble();
+}
+
+// supports only 2.0-style add(1, 's') or add(duration)
+function add$1 (input, value) {
+    return addSubtract$1(this, input, value, 1);
+}
+
+// supports only 2.0-style subtract(1, 's') or subtract(duration)
+function subtract$1 (input, value) {
+    return addSubtract$1(this, input, value, -1);
+}
+
+function absCeil (number) {
+    if (number < 0) {
+        return Math.floor(number);
+    } else {
+        return Math.ceil(number);
+    }
+}
+
+function bubble () {
+    var milliseconds = this._milliseconds;
+    var days         = this._days;
+    var months       = this._months;
+    var data         = this._data;
+    var seconds, minutes, hours, years, monthsFromDays;
+
+    // if we have a mix of positive and negative values, bubble down first
+    // check: https://github.com/moment/moment/issues/2166
+    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+            (milliseconds <= 0 && days <= 0 && months <= 0))) {
+        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+        days = 0;
+        months = 0;
+    }
+
+    // The following code bubbles up values, see the tests for
+    // examples of what that means.
+    data.milliseconds = milliseconds % 1000;
+
+    seconds           = absFloor(milliseconds / 1000);
+    data.seconds      = seconds % 60;
+
+    minutes           = absFloor(seconds / 60);
+    data.minutes      = minutes % 60;
+
+    hours             = absFloor(minutes / 60);
+    data.hours        = hours % 24;
+
+    days += absFloor(hours / 24);
+
+    // convert days to months
+    monthsFromDays = absFloor(daysToMonths(days));
+    months += monthsFromDays;
+    days -= absCeil(monthsToDays(monthsFromDays));
+
+    // 12 months -> 1 year
+    years = absFloor(months / 12);
+    months %= 12;
+
+    data.days   = days;
+    data.months = months;
+    data.years  = years;
+
+    return this;
+}
+
+function daysToMonths (days) {
+    // 400 years have 146097 days (taking into account leap year rules)
+    // 400 years have 12 months === 4800
+    return days * 4800 / 146097;
+}
+
+function monthsToDays (months) {
+    // the reverse of daysToMonths
+    return months * 146097 / 4800;
+}
+
+function as (units) {
+    if (!this.isValid()) {
+        return NaN;
+    }
+    var days;
+    var months;
+    var milliseconds = this._milliseconds;
+
+    units = normalizeUnits(units);
+
+    if (units === 'month' || units === 'year') {
+        days   = this._days   + milliseconds / 864e5;
+        months = this._months + daysToMonths(days);
+        return units === 'month' ? months : months / 12;
+    } else {
+        // handle milliseconds separately because of floating point math errors (issue #1867)
+        days = this._days + Math.round(monthsToDays(this._months));
+        switch (units) {
+            case 'week'   : return days / 7     + milliseconds / 6048e5;
+            case 'day'    : return days         + milliseconds / 864e5;
+            case 'hour'   : return days * 24    + milliseconds / 36e5;
+            case 'minute' : return days * 1440  + milliseconds / 6e4;
+            case 'second' : return days * 86400 + milliseconds / 1000;
+            // Math.floor prevents floating point math errors here
+            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+            default: throw new Error('Unknown unit ' + units);
+        }
+    }
+}
+
+// TODO: Use this.as('ms')?
+function valueOf$1 () {
+    if (!this.isValid()) {
+        return NaN;
+    }
+    return (
+        this._milliseconds +
+        this._days * 864e5 +
+        (this._months % 12) * 2592e6 +
+        toInt(this._months / 12) * 31536e6
+    );
+}
+
+function makeAs (alias) {
+    return function () {
+        return this.as(alias);
+    };
+}
+
+var asMilliseconds = makeAs('ms');
+var asSeconds      = makeAs('s');
+var asMinutes      = makeAs('m');
+var asHours        = makeAs('h');
+var asDays         = makeAs('d');
+var asWeeks        = makeAs('w');
+var asMonths       = makeAs('M');
+var asYears        = makeAs('y');
+
+function clone$1 () {
+    return createDuration(this);
+}
+
+function get$2 (units) {
+    units = normalizeUnits(units);
+    return this.isValid() ? this[units + 's']() : NaN;
+}
+
+function makeGetter(name) {
+    return function () {
+        return this.isValid() ? this._data[name] : NaN;
+    };
+}
+
+var milliseconds = makeGetter('milliseconds');
+var seconds      = makeGetter('seconds');
+var minutes      = makeGetter('minutes');
+var hours        = makeGetter('hours');
+var days         = makeGetter('days');
+var months       = makeGetter('months');
+var years        = makeGetter('years');
+
+function weeks () {
+    return absFloor(this.days() / 7);
+}
+
+var round = Math.round;
+var thresholds = {
+    ss: 44,         // a few seconds to seconds
+    s : 45,         // seconds to minute
+    m : 45,         // minutes to hour
+    h : 22,         // hours to day
+    d : 26,         // days to month
+    M : 11          // months to year
+};
+
+// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+}
+
+function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
+    var duration = createDuration(posNegDuration).abs();
+    var seconds  = round(duration.as('s'));
+    var minutes  = round(duration.as('m'));
+    var hours    = round(duration.as('h'));
+    var days     = round(duration.as('d'));
+    var months   = round(duration.as('M'));
+    var years    = round(duration.as('y'));
+
+    var a = seconds <= thresholds.ss && ['s', seconds]  ||
+            seconds < thresholds.s   && ['ss', seconds] ||
+            minutes <= 1             && ['m']           ||
+            minutes < thresholds.m   && ['mm', minutes] ||
+            hours   <= 1             && ['h']           ||
+            hours   < thresholds.h   && ['hh', hours]   ||
+            days    <= 1             && ['d']           ||
+            days    < thresholds.d   && ['dd', days]    ||
+            months  <= 1             && ['M']           ||
+            months  < thresholds.M   && ['MM', months]  ||
+            years   <= 1             && ['y']           || ['yy', years];
+
+    a[2] = withoutSuffix;
+    a[3] = +posNegDuration > 0;
+    a[4] = locale;
+    return substituteTimeAgo.apply(null, a);
+}
+
+// This function allows you to set the rounding function for relative time strings
+function getSetRelativeTimeRounding (roundingFunction) {
+    if (roundingFunction === undefined) {
+        return round;
+    }
+    if (typeof(roundingFunction) === 'function') {
+        round = roundingFunction;
+        return true;
+    }
+    return false;
+}
+
+// This function allows you to set a threshold for relative time strings
+function getSetRelativeTimeThreshold (threshold, limit) {
+    if (thresholds[threshold] === undefined) {
+        return false;
+    }
+    if (limit === undefined) {
+        return thresholds[threshold];
+    }
+    thresholds[threshold] = limit;
+    if (threshold === 's') {
+        thresholds.ss = limit - 1;
+    }
+    return true;
+}
+
+function humanize (withSuffix) {
+    if (!this.isValid()) {
+        return this.localeData().invalidDate();
+    }
+
+    var locale = this.localeData();
+    var output = relativeTime$1(this, !withSuffix, locale);
+
+    if (withSuffix) {
+        output = locale.pastFuture(+this, output);
+    }
+
+    return locale.postformat(output);
+}
+
+var abs$1 = Math.abs;
+
+function sign(x) {
+    return ((x > 0) - (x < 0)) || +x;
+}
+
+function toISOString$1() {
+    // for ISO strings we do not use the normal bubbling rules:
+    //  * milliseconds bubble up until they become hours
+    //  * days do not bubble at all
+    //  * months bubble up until they become years
+    // This is because there is no context-free conversion between hours and days
+    // (think of clock changes)
+    // and also not between days and months (28-31 days per month)
+    if (!this.isValid()) {
+        return this.localeData().invalidDate();
+    }
+
+    var seconds = abs$1(this._milliseconds) / 1000;
+    var days         = abs$1(this._days);
+    var months       = abs$1(this._months);
+    var minutes, hours, years;
+
+    // 3600 seconds -> 60 minutes -> 1 hour
+    minutes           = absFloor(seconds / 60);
+    hours             = absFloor(minutes / 60);
+    seconds %= 60;
+    minutes %= 60;
+
+    // 12 months -> 1 year
+    years  = absFloor(months / 12);
+    months %= 12;
+
+
+    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+    var Y = years;
+    var M = months;
+    var D = days;
+    var h = hours;
+    var m = minutes;
+    var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
+    var total = this.asSeconds();
+
+    if (!total) {
+        // this is the same as C#'s (Noda) and python (isodate)...
+        // but not other JS (goog.date)
+        return 'P0D';
+    }
+
+    var totalSign = total < 0 ? '-' : '';
+    var ymSign = sign(this._months) !== sign(total) ? '-' : '';
+    var daysSign = sign(this._days) !== sign(total) ? '-' : '';
+    var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
+
+    return totalSign + 'P' +
+        (Y ? ymSign + Y + 'Y' : '') +
+        (M ? ymSign + M + 'M' : '') +
+        (D ? daysSign + D + 'D' : '') +
+        ((h || m || s) ? 'T' : '') +
+        (h ? hmsSign + h + 'H' : '') +
+        (m ? hmsSign + m + 'M' : '') +
+        (s ? hmsSign + s + 'S' : '');
+}
+
+var proto$2 = Duration.prototype;
+
+proto$2.isValid        = isValid$1;
+proto$2.abs            = abs;
+proto$2.add            = add$1;
+proto$2.subtract       = subtract$1;
+proto$2.as             = as;
+proto$2.asMilliseconds = asMilliseconds;
+proto$2.asSeconds      = asSeconds;
+proto$2.asMinutes      = asMinutes;
+proto$2.asHours        = asHours;
+proto$2.asDays         = asDays;
+proto$2.asWeeks        = asWeeks;
+proto$2.asMonths       = asMonths;
+proto$2.asYears        = asYears;
+proto$2.valueOf        = valueOf$1;
+proto$2._bubble        = bubble;
+proto$2.clone          = clone$1;
+proto$2.get            = get$2;
+proto$2.milliseconds   = milliseconds;
+proto$2.seconds        = seconds;
+proto$2.minutes        = minutes;
+proto$2.hours          = hours;
+proto$2.days           = days;
+proto$2.weeks          = weeks;
+proto$2.months         = months;
+proto$2.years          = years;
+proto$2.humanize       = humanize;
+proto$2.toISOString    = toISOString$1;
+proto$2.toString       = toISOString$1;
+proto$2.toJSON         = toISOString$1;
+proto$2.locale         = locale;
+proto$2.localeData     = localeData;
+
+// Deprecations
+proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
+proto$2.lang = lang;
+
+// Side effect imports
+
+// FORMATTING
+
+addFormatToken('X', 0, 0, 'unix');
+addFormatToken('x', 0, 0, 'valueOf');
+
+// PARSING
+
+addRegexToken('x', matchSigned);
+addRegexToken('X', matchTimestamp);
+addParseToken('X', function (input, array, config) {
+    config._d = new Date(parseFloat(input, 10) * 1000);
+});
+addParseToken('x', function (input, array, config) {
+    config._d = new Date(toInt(input));
+});
+
+// Side effect imports
+
+
+hooks.version = '2.19.1';
+
+setHookCallback(createLocal);
+
+hooks.fn                    = proto;
+hooks.min                   = min;
+hooks.max                   = max;
+hooks.now                   = now;
+hooks.utc                   = createUTC;
+hooks.unix                  = createUnix;
+hooks.months                = listMonths;
+hooks.isDate                = isDate;
+hooks.locale                = getSetGlobalLocale;
+hooks.invalid               = createInvalid;
+hooks.duration              = createDuration;
+hooks.isMoment              = isMoment;
+hooks.weekdays              = listWeekdays;
+hooks.parseZone             = createInZone;
+hooks.localeData            = getLocale;
+hooks.isDuration            = isDuration;
+hooks.monthsShort           = listMonthsShort;
+hooks.weekdaysMin           = listWeekdaysMin;
+hooks.defineLocale          = defineLocale;
+hooks.updateLocale          = updateLocale;
+hooks.locales               = listLocales;
+hooks.weekdaysShort         = listWeekdaysShort;
+hooks.normalizeUnits        = normalizeUnits;
+hooks.relativeTimeRounding  = getSetRelativeTimeRounding;
+hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
+hooks.calendarFormat        = getCalendarFormat;
+hooks.prototype             = proto;
+
+return hooks;
+
+})));
+
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(155)(module)))
+
+/***/ }),
+/* 155 */
+/***/ (function(module, exports) {
+
+module.exports = function(module) {
+	if(!module.webpackPolyfill) {
+		module.deprecate = function() {};
+		module.paths = [];
+		// module.parent = undefined by default
+		if(!module.children) module.children = [];
+		Object.defineProperty(module, "loaded", {
+			enumerable: true,
+			get: function() {
+				return module.l;
+			}
+		});
+		Object.defineProperty(module, "id", {
+			enumerable: true,
+			get: function() {
+				return module.i;
+			}
+		});
+		module.webpackPolyfill = 1;
+	}
+	return module;
+};
+
+
+/***/ }),
+/* 156 */
+/***/ (function(module, exports) {
+
+function webpackEmptyContext(req) {
+	throw new Error("Cannot find module '" + req + "'.");
+}
+webpackEmptyContext.keys = function() { return []; };
+webpackEmptyContext.resolve = webpackEmptyContext;
+module.exports = webpackEmptyContext;
+webpackEmptyContext.id = 156;
+
+/***/ }),
+/* 157 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* WEBPACK VAR INJECTION */(function(global) {
+
+/* eslint-disable require-jsdoc */
+
+var _rng;
+
+var globalVar = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : null;
+
+if (globalVar && globalVar.crypto && crypto.getRandomValues) {
+  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
+  // Moderately fast, high quality
+  var _rnds8 = new Uint8Array(16);
+  _rng = function whatwgRNG() {
+    crypto.getRandomValues(_rnds8);
+    return _rnds8;
+  };
+}
+
+if (!_rng) {
+  // Math.random()-based (RNG)
+  //
+  // If all else fails, use Math.random().  It's fast, but is of unspecified
+  // quality.
+  var _rnds = new Array(16);
+  _rng = function _rng() {
+    for (var i = 0, r; i < 16; i++) {
+      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;
+      _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
+    }
+
+    return _rnds;
+  };
+}
+
+//     uuid.js
+//
+//     Copyright (c) 2010-2012 Robert Kieffer
+//     MIT License - http://opensource.org/licenses/mit-license.php
+
+// Unique ID creation requires a high quality random # generator.  We feature
+// detect to determine the best RNG source, normalizing to a function that
+// returns 128-bits of randomness, since that's what's usually required
+
+//var _rng = require('./rng');
+
+// Maps for number <-> hex string conversion
+var _byteToHex = [];
+var _hexToByte = {};
+for (var i = 0; i < 256; i++) {
+  _byteToHex[i] = (i + 0x100).toString(16).substr(1);
+  _hexToByte[_byteToHex[i]] = i;
+}
+
+// **`parse()` - Parse a UUID into it's component bytes**
+function parse(s, buf, offset) {
+  var i = buf && offset || 0,
+      ii = 0;
+
+  buf = buf || [];
+  s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) {
+    if (ii < 16) {
+      // Don't overflow!
+      buf[i + ii++] = _hexToByte[oct];
+    }
+  });
+
+  // Zero out remaining bytes if string was short
+  while (ii < 16) {
+    buf[i + ii++] = 0;
+  }
+
+  return buf;
+}
+
+// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
+function unparse(buf, offset) {
+  var i = offset || 0,
+      bth = _byteToHex;
+  return bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + '-' + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]] + bth[buf[i++]];
+}
+
+// **`v1()` - Generate time-based UUID**
+//
+// Inspired by https://github.com/LiosK/UUID.js
+// and http://docs.python.org/library/uuid.html
+
+// random #'s we need to init node and clockseq
+var _seedBytes = _rng();
+
+// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
+var _nodeId = [_seedBytes[0] | 0x01, _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]];
+
+// Per 4.2.2, randomize (14 bit) clockseq
+var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
+
+// Previous uuid creation time
+var _lastMSecs = 0,
+    _lastNSecs = 0;
+
+// See https://github.com/broofa/node-uuid for API details
+function v1(options, buf, offset) {
+  var i = buf && offset || 0;
+  var b = buf || [];
+
+  options = options || {};
+
+  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;
+
+  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
+  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
+  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
+  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
+  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();
+
+  // Per 4.2.1.2, use count of uuid's generated during the current clock
+  // cycle to simulate higher resolution clock
+  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;
+
+  // Time since last uuid creation (in msecs)
+  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000;
+
+  // Per 4.2.1.2, Bump clockseq on clock regression
+  if (dt < 0 && options.clockseq === undefined) {
+    clockseq = clockseq + 1 & 0x3fff;
+  }
+
+  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
+  // time interval
+  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
+    nsecs = 0;
+  }
+
+  // Per 4.2.1.2 Throw error if too many uuids are requested
+  if (nsecs >= 10000) {
+    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
+  }
+
+  _lastMSecs = msecs;
+  _lastNSecs = nsecs;
+  _clockseq = clockseq;
+
+  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
+  msecs += 12219292800000;
+
+  // `time_low`
+  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+  b[i++] = tl >>> 24 & 0xff;
+  b[i++] = tl >>> 16 & 0xff;
+  b[i++] = tl >>> 8 & 0xff;
+  b[i++] = tl & 0xff;
+
+  // `time_mid`
+  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
+  b[i++] = tmh >>> 8 & 0xff;
+  b[i++] = tmh & 0xff;
+
+  // `time_high_and_version`
+  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
+  b[i++] = tmh >>> 16 & 0xff;
+
+  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
+  b[i++] = clockseq >>> 8 | 0x80;
+
+  // `clock_seq_low`
+  b[i++] = clockseq & 0xff;
+
+  // `node`
+  var node = options.node || _nodeId;
+  for (var n = 0; n < 6; n++) {
+    b[i + n] = node[n];
+  }
+
+  return buf ? buf : unparse(b);
+}
+
+// **`v4()` - Generate random UUID**
+
+// See https://github.com/broofa/node-uuid for API details
+function v4(options, buf, offset) {
+  // Deprecated - 'format' argument, as supported in v1.2
+  var i = buf && offset || 0;
+
+  if (typeof options == 'string') {
+    buf = options == 'binary' ? new Array(16) : null;
+    options = null;
+  }
+  options = options || {};
+
+  var rnds = options.random || (options.rng || _rng)();
+
+  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
+  rnds[6] = rnds[6] & 0x0f | 0x40;
+  rnds[8] = rnds[8] & 0x3f | 0x80;
+
+  // Copy bytes to buffer, if provided
+  if (buf) {
+    for (var ii = 0; ii < 16; ii++) {
+      buf[i + ii] = rnds[ii];
+    }
+  }
+
+  return buf || unparse(rnds);
+}
+
+// Export public API
+var uuid = v4;
+uuid.v1 = v1;
+uuid.v4 = v4;
+uuid.parse = parse;
+uuid.unparse = unparse;
+
+module.exports = uuid;
+/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(158)))
+
+/***/ }),
+/* 158 */
+/***/ (function(module, exports) {
+
+var g;
+
+// This works in non-strict mode
+g = (function() {
+	return this;
+})();
+
+try {
+	// This works if eval is allowed (see CSP)
+	g = g || Function("return this")() || (1,eval)("this");
+} catch(e) {
+	// This works if the window reference is available
+	if(typeof window === "object")
+		g = window;
+}
+
+// g can still be undefined, but nothing to do about it...
+// We return undefined, instead of nothing here, so it's
+// easier to handle this case. if(!global) { ...}
+
+module.exports = g;
+
+
+/***/ }),
+/* 159 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// utils
+exports.util = __webpack_require__(2);
+exports.DOMutil = __webpack_require__(14);
+
+// data
+exports.DataSet = __webpack_require__(11);
+exports.DataView = __webpack_require__(12);
+exports.Queue = __webpack_require__(43);
+
+// Graph3d
+exports.Graph3d = __webpack_require__(161);
+exports.graph3d = {
+  Camera: __webpack_require__(95),
+  Filter: __webpack_require__(96),
+  Point2d: __webpack_require__(91),
+  Point3d: __webpack_require__(34),
+  Slider: __webpack_require__(92),
+  StepNumber: __webpack_require__(93)
+};
+
+// bundled external libraries
+exports.moment = __webpack_require__(9);
+exports.Hammer = __webpack_require__(10);
+exports.keycharm = __webpack_require__(35);
+
+/***/ }),
+/* 160 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var core = __webpack_require__(7);
+var $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });
+module.exports = function stringify(it) { // eslint-disable-line no-unused-vars
+  return $JSON.stringify.apply($JSON, arguments);
+};
+
+
+/***/ }),
+/* 161 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _assign = __webpack_require__(90);
+
+var _assign2 = _interopRequireDefault(_assign);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Emitter = __webpack_require__(44);
+var util = __webpack_require__(2);
+var Point3d = __webpack_require__(34);
+var Point2d = __webpack_require__(91);
+var Slider = __webpack_require__(92);
+var StepNumber = __webpack_require__(93);
+var Settings = __webpack_require__(94);
+var Validator = __webpack_require__(15)['default'];
+
+var _require = __webpack_require__(15),
+    printStyle = _require.printStyle;
+
+var _require2 = __webpack_require__(172),
+    allOptions = _require2.allOptions;
+
+var DataGroup = __webpack_require__(173);
+
+/// enumerate the available styles
+Graph3d.STYLE = Settings.STYLE;
+
+/**
+ * Following label is used in the settings to describe values which should be
+ * determined by the code while running, from the current data and graph style.
+ *
+ * Using 'undefined' directly achieves the same thing, but this is more
+ * descriptive by describing the intent.
+ */
+var autoByDefault = undefined;
+
+/**
+ * Default values for option settings.
+ *
+ * These are the values used when a Graph3d instance is initialized without
+ * custom settings.
+ *
+ * If a field is not in this list, a default value of 'autoByDefault' is assumed,
+ * which is just an alias for 'undefined'.
+ */
+Graph3d.DEFAULTS = {
+  width: '400px',
+  height: '400px',
+  filterLabel: 'time',
+  legendLabel: 'value',
+  xLabel: 'x',
+  yLabel: 'y',
+  zLabel: 'z',
+  xValueLabel: function xValueLabel(v) {
+    return v;
+  },
+  yValueLabel: function yValueLabel(v) {
+    return v;
+  },
+  zValueLabel: function zValueLabel(v) {
+    return v;
+  },
+  showXAxis: true,
+  showYAxis: true,
+  showZAxis: true,
+  showGrid: true,
+  showPerspective: true,
+  showShadow: false,
+  keepAspectRatio: true,
+  verticalRatio: 0.5, // 0.1 to 1.0, where 1.0 results in a 'cube'
+
+  dotSizeRatio: 0.02, // size of the dots as a fraction of the graph width
+  dotSizeMinFraction: 0.5, // size of min-value dot as a fraction of dotSizeRatio	
+  dotSizeMaxFraction: 2.5, // size of max-value dot as a fraction of dotSizeRatio	
+
+  showAnimationControls: autoByDefault,
+  animationInterval: 1000, // milliseconds
+  animationPreload: false,
+  animationAutoStart: autoByDefault,
+
+  axisColor: '#4D4D4D',
+  gridColor: '#D3D3D3',
+  xCenter: '55%',
+  yCenter: '50%',
+
+  style: Graph3d.STYLE.DOT,
+  tooltip: false,
+
+  tooltipStyle: {
+    content: {
+      padding: '10px',
+      border: '1px solid #4d4d4d',
+      color: '#1a1a1a',
+      background: 'rgba(255,255,255,0.7)',
+      borderRadius: '2px',
+      boxShadow: '5px 5px 10px rgba(128,128,128,0.5)'
+    },
+    line: {
+      height: '40px',
+      width: '0',
+      borderLeft: '1px solid #4d4d4d'
+    },
+    dot: {
+      height: '0',
+      width: '0',
+      border: '5px solid #4d4d4d',
+      borderRadius: '5px'
+    }
+  },
+
+  dataColor: {
+    fill: '#7DC1FF',
+    stroke: '#3267D2',
+    strokeWidth: 1 // px
+  },
+
+  cameraPosition: {
+    horizontal: 1.0,
+    vertical: 0.5,
+    distance: 1.7
+  },
+
+  /*
+    The following fields are 'auto by default', see above.
+   */
+  showLegend: autoByDefault, // determined by graph style
+  backgroundColor: autoByDefault,
+
+  xBarWidth: autoByDefault,
+  yBarWidth: autoByDefault,
+  valueMin: autoByDefault,
+  valueMax: autoByDefault,
+  xMin: autoByDefault,
+  xMax: autoByDefault,
+  xStep: autoByDefault,
+  yMin: autoByDefault,
+  yMax: autoByDefault,
+  yStep: autoByDefault,
+  zMin: autoByDefault,
+  zMax: autoByDefault,
+  zStep: autoByDefault
+};
+
+// -----------------------------------------------------------------------------
+// Class Graph3d
+// -----------------------------------------------------------------------------
+
+
+/**
+ * Graph3d displays data in 3d.
+ *
+ * Graph3d is developed in javascript as a Google Visualization Chart.
+ *
+ * @constructor Graph3d
+ * @param {Element} container   The DOM element in which the Graph3d will
+ *                              be created. Normally a div element.
+ * @param {DataSet | DataView | Array} [data]
+ * @param {Object} [options]
+ */
+function Graph3d(container, data, options) {
+  if (!(this instanceof Graph3d)) {
+    throw new SyntaxError('Constructor must be called with the new operator');
+  }
+
+  // create variables and set default values
+  this.containerElement = container;
+
+  this.dataGroup = new DataGroup();
+  this.dataPoints = null; // The table with point objects
+
+  // create a frame and canvas
+  this.create();
+
+  Settings.setDefaults(Graph3d.DEFAULTS, this);
+
+  // the column indexes
+  this.colX = undefined;
+  this.colY = undefined;
+  this.colZ = undefined;
+  this.colValue = undefined;
+
+  // TODO: customize axis range
+
+  // apply options (also when undefined)
+  this.setOptions(options);
+
+  // apply data
+  this.setData(data);
+}
+
+// Extend Graph3d with an Emitter mixin
+Emitter(Graph3d.prototype);
+
+/**
+ * Calculate the scaling values, dependent on the range in x, y, and z direction
+ */
+Graph3d.prototype._setScale = function () {
+  this.scale = new Point3d(1 / this.xRange.range(), 1 / this.yRange.range(), 1 / this.zRange.range());
+
+  // keep aspect ration between x and y scale if desired
+  if (this.keepAspectRatio) {
+    if (this.scale.x < this.scale.y) {
+      //noinspection JSSuspiciousNameCombination
+      this.scale.y = this.scale.x;
+    } else {
+      //noinspection JSSuspiciousNameCombination
+      this.scale.x = this.scale.y;
+    }
+  }
+
+  // scale the vertical axis
+  this.scale.z *= this.verticalRatio;
+  // TODO: can this be automated? verticalRatio?
+
+  // determine scale for (optional) value
+  if (this.valueRange !== undefined) {
+    this.scale.value = 1 / this.valueRange.range();
+  }
+
+  // position the camera arm
+  var xCenter = this.xRange.center() * this.scale.x;
+  var yCenter = this.yRange.center() * this.scale.y;
+  var zCenter = this.zRange.center() * this.scale.z;
+  this.camera.setArmLocation(xCenter, yCenter, zCenter);
+};
+
+/**
+ * Convert a 3D location to a 2D location on screen
+ * Source: ttp://en.wikipedia.org/wiki/3D_projection
+ *
+ * @param   {Point3d} point3d  A 3D point with parameters x, y, z
+ * @returns {Point2d} point2d  A 2D point with parameters x, y
+ */
+Graph3d.prototype._convert3Dto2D = function (point3d) {
+  var translation = this._convertPointToTranslation(point3d);
+  return this._convertTranslationToScreen(translation);
+};
+
+/**
+ * Convert a 3D location its translation seen from the camera
+ * Source: http://en.wikipedia.org/wiki/3D_projection
+ *
+ * @param   {Point3d} point3d     A 3D point with parameters x, y, z
+ * @returns {Point3d} translation A 3D point with parameters x, y, z This is
+ *                                the translation of the point, seen from the
+ *                                camera.
+ */
+Graph3d.prototype._convertPointToTranslation = function (point3d) {
+  var cameraLocation = this.camera.getCameraLocation(),
+      cameraRotation = this.camera.getCameraRotation(),
+      ax = point3d.x * this.scale.x,
+      ay = point3d.y * this.scale.y,
+      az = point3d.z * this.scale.z,
+      cx = cameraLocation.x,
+      cy = cameraLocation.y,
+      cz = cameraLocation.z,
+
+
+  // calculate angles
+  sinTx = Math.sin(cameraRotation.x),
+      cosTx = Math.cos(cameraRotation.x),
+      sinTy = Math.sin(cameraRotation.y),
+      cosTy = Math.cos(cameraRotation.y),
+      sinTz = Math.sin(cameraRotation.z),
+      cosTz = Math.cos(cameraRotation.z),
+
+
+  // calculate translation
+  dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz),
+      dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax - cx)),
+      dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax - cx));
+
+  return new Point3d(dx, dy, dz);
+};
+
+/**
+ * Convert a translation point to a point on the screen
+ *
+ * @param   {Point3d} translation A 3D point with parameters x, y, z This is
+ *                                the translation of the point, seen from the
+ *                                camera.
+ * @returns {Point2d} point2d     A 2D point with parameters x, y
+ */
+Graph3d.prototype._convertTranslationToScreen = function (translation) {
+  var ex = this.eye.x,
+      ey = this.eye.y,
+      ez = this.eye.z,
+      dx = translation.x,
+      dy = translation.y,
+      dz = translation.z;
+
+  // calculate position on screen from translation
+  var bx;
+  var by;
+  if (this.showPerspective) {
+    bx = (dx - ex) * (ez / dz);
+    by = (dy - ey) * (ez / dz);
+  } else {
+    bx = dx * -(ez / this.camera.getArmLength());
+    by = dy * -(ez / this.camera.getArmLength());
+  }
+
+  // shift and scale the point to the center of the screen
+  // use the width of the graph to scale both horizontally and vertically.
+  return new Point2d(this.currentXCenter + bx * this.frame.canvas.clientWidth, this.currentYCenter - by * this.frame.canvas.clientWidth);
+};
+
+/**
+ * Calculate the translations and screen positions of all points
+ *
+ * @param {Array.<Point3d>} points
+ * @private
+ */
+Graph3d.prototype._calcTranslations = function (points) {
+  for (var i = 0; i < points.length; i++) {
+    var point = points[i];
+    point.trans = this._convertPointToTranslation(point.point);
+    point.screen = this._convertTranslationToScreen(point.trans);
+
+    // calculate the translation of the point at the bottom (needed for sorting)
+    var transBottom = this._convertPointToTranslation(point.bottom);
+    point.dist = this.showPerspective ? transBottom.length() : -transBottom.z;
+  }
+
+  // sort the points on depth of their (x,y) position (not on z)
+  var sortDepth = function sortDepth(a, b) {
+    return b.dist - a.dist;
+  };
+  points.sort(sortDepth);
+};
+
+/**
+ * Transfer min/max values to the Graph3d instance.
+ */
+Graph3d.prototype._initializeRanges = function () {
+  // TODO: later on, all min/maxes of all datagroups will be combined here
+  var dg = this.dataGroup;
+  this.xRange = dg.xRange;
+  this.yRange = dg.yRange;
+  this.zRange = dg.zRange;
+  this.valueRange = dg.valueRange;
+
+  // Values currently needed but which need to be sorted out for
+  // the multiple graph case.
+  this.xStep = dg.xStep;
+  this.yStep = dg.yStep;
+  this.zStep = dg.zStep;
+  this.xBarWidth = dg.xBarWidth;
+  this.yBarWidth = dg.yBarWidth;
+  this.colX = dg.colX;
+  this.colY = dg.colY;
+  this.colZ = dg.colZ;
+  this.colValue = dg.colValue;
+
+  // set the scale dependent on the ranges.
+  this._setScale();
+};
+
+/**
+ * Return all data values as a list of Point3d objects
+ *
+ * @param {vis.DataSet} data
+ * @returns {Array.<Object>}
+ */
+Graph3d.prototype.getDataPoints = function (data) {
+  var dataPoints = [];
+
+  for (var i = 0; i < data.length; i++) {
+    var point = new Point3d();
+    point.x = data[i][this.colX] || 0;
+    point.y = data[i][this.colY] || 0;
+    point.z = data[i][this.colZ] || 0;
+    point.data = data[i];
+
+    if (this.colValue !== undefined) {
+      point.value = data[i][this.colValue] || 0;
+    }
+
+    var obj = {};
+    obj.point = point;
+    obj.bottom = new Point3d(point.x, point.y, this.zRange.min);
+    obj.trans = undefined;
+    obj.screen = undefined;
+
+    dataPoints.push(obj);
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Filter the data based on the current filter
+ *
+ * @param   {Array} data
+ * @returns {Array} dataPoints Array with point objects which can be drawn on
+ *                             screen
+ */
+Graph3d.prototype._getDataPoints = function (data) {
+  // TODO: store the created matrix dataPoints in the filters instead of
+  //       reloading each time.
+  var x, y, i, obj;
+
+  var dataPoints = [];
+
+  if (this.style === Graph3d.STYLE.GRID || this.style === Graph3d.STYLE.SURFACE) {
+    // copy all values from the data table to a matrix
+    // the provided values are supposed to form a grid of (x,y) positions
+
+    // create two lists with all present x and y values
+    var dataX = this.dataGroup.getDistinctValues(this.colX, data);
+    var dataY = this.dataGroup.getDistinctValues(this.colY, data);
+
+    dataPoints = this.getDataPoints(data);
+
+    // create a grid, a 2d matrix, with all values.
+    var dataMatrix = []; // temporary data matrix
+    for (i = 0; i < dataPoints.length; i++) {
+      obj = dataPoints[i];
+
+      // TODO: implement Array().indexOf() for Internet Explorer
+      var xIndex = dataX.indexOf(obj.point.x);
+      var yIndex = dataY.indexOf(obj.point.y);
+
+      if (dataMatrix[xIndex] === undefined) {
+        dataMatrix[xIndex] = [];
+      }
+
+      dataMatrix[xIndex][yIndex] = obj;
+    }
+
+    // fill in the pointers to the neighbors.
+    for (x = 0; x < dataMatrix.length; x++) {
+      for (y = 0; y < dataMatrix[x].length; y++) {
+        if (dataMatrix[x][y]) {
+          dataMatrix[x][y].pointRight = x < dataMatrix.length - 1 ? dataMatrix[x + 1][y] : undefined;
+          dataMatrix[x][y].pointTop = y < dataMatrix[x].length - 1 ? dataMatrix[x][y + 1] : undefined;
+          dataMatrix[x][y].pointCross = x < dataMatrix.length - 1 && y < dataMatrix[x].length - 1 ? dataMatrix[x + 1][y + 1] : undefined;
+        }
+      }
+    }
+  } else {
+    // 'dot', 'dot-line', etc.
+    this._checkValueField(data);
+    dataPoints = this.getDataPoints(data);
+
+    if (this.style === Graph3d.STYLE.LINE) {
+      // Add next member points for line drawing
+      for (i = 0; i < dataPoints.length; i++) {
+        if (i > 0) {
+          dataPoints[i - 1].pointNext = dataPoints[i];
+        }
+      }
+    }
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Create the main frame for the Graph3d.
+ *
+ * This function is executed once when a Graph3d object is created. The frame
+ * contains a canvas, and this canvas contains all objects like the axis and
+ * nodes.
+ */
+Graph3d.prototype.create = function () {
+  // remove all elements from the container element.
+  while (this.containerElement.hasChildNodes()) {
+    this.containerElement.removeChild(this.containerElement.firstChild);
+  }
+
+  this.frame = document.createElement('div');
+  this.frame.style.position = 'relative';
+  this.frame.style.overflow = 'hidden';
+
+  // create the graph canvas (HTML canvas element)
+  this.frame.canvas = document.createElement('canvas');
+  this.frame.canvas.style.position = 'relative';
+  this.frame.appendChild(this.frame.canvas);
+  //if (!this.frame.canvas.getContext) {
+  {
+    var noCanvas = document.createElement('DIV');
+    noCanvas.style.color = 'red';
+    noCanvas.style.fontWeight = 'bold';
+    noCanvas.style.padding = '10px';
+    noCanvas.innerHTML = 'Error: your browser does not support HTML canvas';
+    this.frame.canvas.appendChild(noCanvas);
+  }
+
+  this.frame.filter = document.createElement('div');
+  this.frame.filter.style.position = 'absolute';
+  this.frame.filter.style.bottom = '0px';
+  this.frame.filter.style.left = '0px';
+  this.frame.filter.style.width = '100%';
+  this.frame.appendChild(this.frame.filter);
+
+  // add event listeners to handle moving and zooming the contents
+  var me = this;
+  var onmousedown = function onmousedown(event) {
+    me._onMouseDown(event);
+  };
+  var ontouchstart = function ontouchstart(event) {
+    me._onTouchStart(event);
+  };
+  var onmousewheel = function onmousewheel(event) {
+    me._onWheel(event);
+  };
+  var ontooltip = function ontooltip(event) {
+    me._onTooltip(event);
+  };
+  var onclick = function onclick(event) {
+    me._onClick(event);
+  };
+  // TODO: these events are never cleaned up... can give a 'memory leakage'
+
+  util.addEventListener(this.frame.canvas, 'mousedown', onmousedown);
+  util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart);
+  util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel);
+  util.addEventListener(this.frame.canvas, 'mousemove', ontooltip);
+  util.addEventListener(this.frame.canvas, 'click', onclick);
+
+  // add the new graph to the container element
+  this.containerElement.appendChild(this.frame);
+};
+
+/**
+ * Set a new size for the graph
+ *
+ * @param {number} width
+ * @param {number} height
+ * @private
+ */
+Graph3d.prototype._setSize = function (width, height) {
+  this.frame.style.width = width;
+  this.frame.style.height = height;
+
+  this._resizeCanvas();
+};
+
+/**
+ * Resize the canvas to the current size of the frame
+ */
+Graph3d.prototype._resizeCanvas = function () {
+  this.frame.canvas.style.width = '100%';
+  this.frame.canvas.style.height = '100%';
+
+  this.frame.canvas.width = this.frame.canvas.clientWidth;
+  this.frame.canvas.height = this.frame.canvas.clientHeight;
+
+  // adjust with for margin
+  this.frame.filter.style.width = this.frame.canvas.clientWidth - 2 * 10 + 'px';
+};
+
+/**
+ * Start playing the animation, if requested and filter present. Only applicable
+ * when animation data is available.
+ */
+Graph3d.prototype.animationStart = function () {
+  // start animation when option is true
+  if (!this.animationAutoStart || !this.dataGroup.dataFilter) return;
+
+  if (!this.frame.filter || !this.frame.filter.slider) throw new Error('No animation available');
+
+  this.frame.filter.slider.play();
+};
+
+/**
+ * Stop animation
+ */
+Graph3d.prototype.animationStop = function () {
+  if (!this.frame.filter || !this.frame.filter.slider) return;
+
+  this.frame.filter.slider.stop();
+};
+
+/**
+ * Resize the center position based on the current values in this.xCenter
+ * and this.yCenter (which are strings with a percentage or a value
+ * in pixels). The center positions are the variables this.currentXCenter
+ * and this.currentYCenter
+ */
+Graph3d.prototype._resizeCenter = function () {
+  // calculate the horizontal center position
+  if (this.xCenter.charAt(this.xCenter.length - 1) === '%') {
+    this.currentXCenter = parseFloat(this.xCenter) / 100 * this.frame.canvas.clientWidth;
+  } else {
+    this.currentXCenter = parseFloat(this.xCenter); // supposed to be in px
+  }
+
+  // calculate the vertical center position
+  if (this.yCenter.charAt(this.yCenter.length - 1) === '%') {
+    this.currentYCenter = parseFloat(this.yCenter) / 100 * (this.frame.canvas.clientHeight - this.frame.filter.clientHeight);
+  } else {
+    this.currentYCenter = parseFloat(this.yCenter); // supposed to be in px
+  }
+};
+
+/**
+ * Retrieve the current camera rotation
+ *
+ * @returns {object} An object with parameters horizontal, vertical, and
+ *                   distance
+ */
+Graph3d.prototype.getCameraPosition = function () {
+  var pos = this.camera.getArmRotation();
+  pos.distance = this.camera.getArmLength();
+  return pos;
+};
+
+/**
+ * Load data into the 3D Graph
+ *
+ * @param {vis.DataSet} data
+ * @private
+ */
+Graph3d.prototype._readData = function (data) {
+  // read the data
+  this.dataPoints = this.dataGroup.initializeData(this, data, this.style);
+
+  this._initializeRanges();
+  this._redrawFilter();
+};
+
+/**
+ * Replace the dataset of the Graph3d
+ *
+ * @param {Array | DataSet | DataView} data
+ */
+Graph3d.prototype.setData = function (data) {
+  if (data === undefined || data === null) return;
+
+  this._readData(data);
+  this.redraw();
+  this.animationStart();
+};
+
+/**
+ * Update the options. Options will be merged with current options
+ *
+ * @param {Object} options
+ */
+Graph3d.prototype.setOptions = function (options) {
+  if (options === undefined) return;
+
+  var errorFound = Validator.validate(options, allOptions);
+  if (errorFound === true) {
+    console.log('%cErrors have been found in the supplied options object.', printStyle);
+  }
+
+  this.animationStop();
+
+  Settings.setOptions(options, this);
+  this.setPointDrawingMethod();
+  this._setSize(this.width, this.height);
+
+  this.setData(this.dataGroup.getDataTable());
+  this.animationStart();
+};
+
+/**
+ * Determine which point drawing method to use for the current graph style.
+ */
+Graph3d.prototype.setPointDrawingMethod = function () {
+  var method = undefined;
+
+  switch (this.style) {
+    case Graph3d.STYLE.BAR:
+      method = Graph3d.prototype._redrawBarGraphPoint;
+      break;
+    case Graph3d.STYLE.BARCOLOR:
+      method = Graph3d.prototype._redrawBarColorGraphPoint;
+      break;
+    case Graph3d.STYLE.BARSIZE:
+      method = Graph3d.prototype._redrawBarSizeGraphPoint;
+      break;
+    case Graph3d.STYLE.DOT:
+      method = Graph3d.prototype._redrawDotGraphPoint;
+      break;
+    case Graph3d.STYLE.DOTLINE:
+      method = Graph3d.prototype._redrawDotLineGraphPoint;
+      break;
+    case Graph3d.STYLE.DOTCOLOR:
+      method = Graph3d.prototype._redrawDotColorGraphPoint;
+      break;
+    case Graph3d.STYLE.DOTSIZE:
+      method = Graph3d.prototype._redrawDotSizeGraphPoint;
+      break;
+    case Graph3d.STYLE.SURFACE:
+      method = Graph3d.prototype._redrawSurfaceGraphPoint;
+      break;
+    case Graph3d.STYLE.GRID:
+      method = Graph3d.prototype._redrawGridGraphPoint;
+      break;
+    case Graph3d.STYLE.LINE:
+      method = Graph3d.prototype._redrawLineGraphPoint;
+      break;
+    default:
+      throw new Error('Can not determine point drawing method ' + 'for graph style \'' + this.style + '\'');
+  }
+
+  this._pointDrawingMethod = method;
+};
+
+/**
+ * Redraw the Graph.
+ */
+Graph3d.prototype.redraw = function () {
+  if (this.dataPoints === undefined) {
+    throw new Error('Graph data not initialized');
+  }
+
+  this._resizeCanvas();
+  this._resizeCenter();
+  this._redrawSlider();
+  this._redrawClear();
+  this._redrawAxis();
+
+  this._redrawDataGraph();
+
+  this._redrawInfo();
+  this._redrawLegend();
+};
+
+/**
+ * Get drawing context without exposing canvas
+ *
+ * @returns {CanvasRenderingContext2D}
+ * @private
+ */
+Graph3d.prototype._getContext = function () {
+  var canvas = this.frame.canvas;
+  var ctx = canvas.getContext('2d');
+
+  ctx.lineJoin = 'round';
+  ctx.lineCap = 'round';
+
+  return ctx;
+};
+
+/**
+ * Clear the canvas before redrawing
+ */
+Graph3d.prototype._redrawClear = function () {
+  var canvas = this.frame.canvas;
+  var ctx = canvas.getContext('2d');
+
+  ctx.clearRect(0, 0, canvas.width, canvas.height);
+};
+
+Graph3d.prototype._dotSize = function () {
+  return this.frame.clientWidth * this.dotSizeRatio;
+};
+
+/**
+ * Get legend width
+ *
+ * @returns {*}
+ * @private
+ */
+Graph3d.prototype._getLegendWidth = function () {
+  var width;
+
+  if (this.style === Graph3d.STYLE.DOTSIZE) {
+    var dotSize = this._dotSize();
+    //width =  dotSize / 2 + dotSize * 2;
+    width = dotSize * this.dotSizeMaxFraction;
+  } else if (this.style === Graph3d.STYLE.BARSIZE) {
+    width = this.xBarWidth;
+  } else {
+    width = 20;
+  }
+  return width;
+};
+
+/**
+ * Redraw the legend based on size, dot color, or surface height
+ */
+Graph3d.prototype._redrawLegend = function () {
+
+  //Return without drawing anything, if no legend is specified
+  if (this.showLegend !== true) {
+    return;
+  }
+
+  // Do not draw legend when graph style does not support
+  if (this.style === Graph3d.STYLE.LINE || this.style === Graph3d.STYLE.BARSIZE //TODO add legend support for BARSIZE
+  ) {
+      return;
+    }
+
+  // Legend types - size and color. Determine if size legend.
+  var isSizeLegend = this.style === Graph3d.STYLE.BARSIZE || this.style === Graph3d.STYLE.DOTSIZE;
+
+  // Legend is either tracking z values or style values. This flag if false means use z values.
+  var isValueLegend = this.style === Graph3d.STYLE.DOTSIZE || this.style === Graph3d.STYLE.DOTCOLOR || this.style === Graph3d.STYLE.BARCOLOR;
+
+  var height = Math.max(this.frame.clientHeight * 0.25, 100);
+  var top = this.margin;
+  var width = this._getLegendWidth(); // px - overwritten by size legend
+  var right = this.frame.clientWidth - this.margin;
+  var left = right - width;
+  var bottom = top + height;
+
+  var ctx = this._getContext();
+  ctx.lineWidth = 1;
+  ctx.font = '14px arial'; // TODO: put in options
+
+  if (isSizeLegend === false) {
+    // draw the color bar
+    var ymin = 0;
+    var ymax = height; // Todo: make height customizable
+    var y;
+
+    for (y = ymin; y < ymax; y++) {
+      var f = (y - ymin) / (ymax - ymin);
+      var hue = f * 240;
+      var color = this._hsv2rgb(hue, 1, 1);
+
+      ctx.strokeStyle = color;
+      ctx.beginPath();
+      ctx.moveTo(left, top + y);
+      ctx.lineTo(right, top + y);
+      ctx.stroke();
+    }
+    ctx.strokeStyle = this.axisColor;
+    ctx.strokeRect(left, top, width, height);
+  } else {
+
+    // draw the size legend box
+    var widthMin;
+    if (this.style === Graph3d.STYLE.DOTSIZE) {
+      // Get the proportion to max and min right
+      widthMin = width * (this.dotSizeMinFraction / this.dotSizeMaxFraction);
+    } else if (this.style === Graph3d.STYLE.BARSIZE) {
+      //widthMin = this.xBarWidth * 0.2 this is wrong - barwidth measures in terms of xvalues
+    }
+    ctx.strokeStyle = this.axisColor;
+    ctx.fillStyle = this.dataColor.fill;
+    ctx.beginPath();
+    ctx.moveTo(left, top);
+    ctx.lineTo(right, top);
+    ctx.lineTo(left + widthMin, bottom);
+    ctx.lineTo(left, bottom);
+    ctx.closePath();
+    ctx.fill();
+    ctx.stroke();
+  }
+
+  // print value text along the legend edge
+  var gridLineLen = 5; // px
+
+  var legendMin = isValueLegend ? this.valueRange.min : this.zRange.min;
+  var legendMax = isValueLegend ? this.valueRange.max : this.zRange.max;
+  var step = new StepNumber(legendMin, legendMax, (legendMax - legendMin) / 5, true);
+  step.start(true);
+
+  var from;
+  var to;
+  while (!step.end()) {
+    y = bottom - (step.getCurrent() - legendMin) / (legendMax - legendMin) * height;
+    from = new Point2d(left - gridLineLen, y);
+    to = new Point2d(left, y);
+    this._line(ctx, from, to);
+
+    ctx.textAlign = 'right';
+    ctx.textBaseline = 'middle';
+    ctx.fillStyle = this.axisColor;
+    ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y);
+
+    step.next();
+  }
+
+  ctx.textAlign = 'right';
+  ctx.textBaseline = 'top';
+  var label = this.legendLabel;
+  ctx.fillText(label, right, bottom + this.margin);
+};
+
+/**
+ * Redraw the filter
+ */
+Graph3d.prototype._redrawFilter = function () {
+  var dataFilter = this.dataGroup.dataFilter;
+  var filter = this.frame.filter;
+  filter.innerHTML = '';
+
+  if (!dataFilter) {
+    filter.slider = undefined;
+    return;
+  }
+
+  var options = {
+    'visible': this.showAnimationControls
+  };
+  var slider = new Slider(filter, options);
+  filter.slider = slider;
+
+  // TODO: css here is not nice here...
+  filter.style.padding = '10px';
+  //this.frame.filter.style.backgroundColor = '#EFEFEF';
+
+  slider.setValues(dataFilter.values);
+  slider.setPlayInterval(this.animationInterval);
+
+  // create an event handler
+  var me = this;
+  var onchange = function onchange() {
+    var dataFilter = me.dataGroup.dataFilter;
+    var index = slider.getIndex();
+
+    dataFilter.selectValue(index);
+    me.dataPoints = dataFilter._getDataPoints();
+
+    me.redraw();
+  };
+
+  slider.setOnChangeCallback(onchange);
+};
+
+/**
+ * Redraw the slider
+ */
+Graph3d.prototype._redrawSlider = function () {
+  if (this.frame.filter.slider !== undefined) {
+    this.frame.filter.slider.redraw();
+  }
+};
+
+/**
+ * Redraw common information
+ */
+Graph3d.prototype._redrawInfo = function () {
+  var info = this.dataGroup.getInfo();
+  if (info === undefined) return;
+
+  var ctx = this._getContext();
+
+  ctx.font = '14px arial'; // TODO: put in options
+  ctx.lineStyle = 'gray';
+  ctx.fillStyle = 'gray';
+  ctx.textAlign = 'left';
+  ctx.textBaseline = 'top';
+
+  var x = this.margin;
+  var y = this.margin;
+  ctx.fillText(info, x, y);
+};
+
+/**
+ * Draw a line between 2d points 'from' and 'to'.
+ *
+ * If stroke style specified, set that as well.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {vis.Point2d} from
+ * @param {vis.Point2d} to
+ * @param {string} [strokeStyle]
+ * @private
+ */
+Graph3d.prototype._line = function (ctx, from, to, strokeStyle) {
+  if (strokeStyle !== undefined) {
+    ctx.strokeStyle = strokeStyle;
+  }
+
+  ctx.beginPath();
+  ctx.moveTo(from.x, from.y);
+  ctx.lineTo(to.x, to.y);
+  ctx.stroke();
+};
+
+/**
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {vis.Point3d} point3d
+ * @param {string} text
+ * @param {number} armAngle
+ * @param {number} [yMargin=0]
+ */
+Graph3d.prototype.drawAxisLabelX = function (ctx, point3d, text, armAngle, yMargin) {
+  if (yMargin === undefined) {
+    yMargin = 0;
+  }
+
+  var point2d = this._convert3Dto2D(point3d);
+
+  if (Math.cos(armAngle * 2) > 0) {
+    ctx.textAlign = 'center';
+    ctx.textBaseline = 'top';
+    point2d.y += yMargin;
+  } else if (Math.sin(armAngle * 2) < 0) {
+    ctx.textAlign = 'right';
+    ctx.textBaseline = 'middle';
+  } else {
+    ctx.textAlign = 'left';
+    ctx.textBaseline = 'middle';
+  }
+
+  ctx.fillStyle = this.axisColor;
+  ctx.fillText(text, point2d.x, point2d.y);
+};
+
+/**
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {vis.Point3d} point3d
+ * @param {string} text
+ * @param {number} armAngle
+ * @param {number} [yMargin=0]
+ */
+Graph3d.prototype.drawAxisLabelY = function (ctx, point3d, text, armAngle, yMargin) {
+  if (yMargin === undefined) {
+    yMargin = 0;
+  }
+
+  var point2d = this._convert3Dto2D(point3d);
+
+  if (Math.cos(armAngle * 2) < 0) {
+    ctx.textAlign = 'center';
+    ctx.textBaseline = 'top';
+    point2d.y += yMargin;
+  } else if (Math.sin(armAngle * 2) > 0) {
+    ctx.textAlign = 'right';
+    ctx.textBaseline = 'middle';
+  } else {
+    ctx.textAlign = 'left';
+    ctx.textBaseline = 'middle';
+  }
+
+  ctx.fillStyle = this.axisColor;
+  ctx.fillText(text, point2d.x, point2d.y);
+};
+
+/**
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {vis.Point3d} point3d
+ * @param {string} text
+ * @param {number} [offset=0]
+ */
+Graph3d.prototype.drawAxisLabelZ = function (ctx, point3d, text, offset) {
+  if (offset === undefined) {
+    offset = 0;
+  }
+
+  var point2d = this._convert3Dto2D(point3d);
+  ctx.textAlign = 'right';
+  ctx.textBaseline = 'middle';
+  ctx.fillStyle = this.axisColor;
+  ctx.fillText(text, point2d.x - offset, point2d.y);
+};
+
+/**
+
+
+/**
+ * Draw a line between 2d points 'from' and 'to'.
+ *
+ * If stroke style specified, set that as well.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {vis.Point2d} from
+ * @param {vis.Point2d} to
+ * @param {string} [strokeStyle]
+ * @private
+ */
+Graph3d.prototype._line3d = function (ctx, from, to, strokeStyle) {
+  var from2d = this._convert3Dto2D(from);
+  var to2d = this._convert3Dto2D(to);
+
+  this._line(ctx, from2d, to2d, strokeStyle);
+};
+
+/**
+ * Redraw the axis
+ */
+Graph3d.prototype._redrawAxis = function () {
+  var ctx = this._getContext(),
+      from,
+      to,
+      step,
+      prettyStep,
+      text,
+      xText,
+      yText,
+      zText,
+      offset,
+      xOffset,
+      yOffset;
+
+  // TODO: get the actual rendered style of the containerElement
+  //ctx.font = this.containerElement.style.font;
+  ctx.font = 24 / this.camera.getArmLength() + 'px arial';
+
+  // calculate the length for the short grid lines
+  var gridLenX = 0.025 / this.scale.x;
+  var gridLenY = 0.025 / this.scale.y;
+  var textMargin = 5 / this.camera.getArmLength(); // px
+  var armAngle = this.camera.getArmRotation().horizontal;
+  var armVector = new Point2d(Math.cos(armAngle), Math.sin(armAngle));
+
+  var xRange = this.xRange;
+  var yRange = this.yRange;
+  var zRange = this.zRange;
+  var point3d;
+
+  // draw x-grid lines
+  ctx.lineWidth = 1;
+  prettyStep = this.defaultXStep === undefined;
+  step = new StepNumber(xRange.min, xRange.max, this.xStep, prettyStep);
+  step.start(true);
+
+  while (!step.end()) {
+    var x = step.getCurrent();
+
+    if (this.showGrid) {
+      from = new Point3d(x, yRange.min, zRange.min);
+      to = new Point3d(x, yRange.max, zRange.min);
+      this._line3d(ctx, from, to, this.gridColor);
+    } else if (this.showXAxis) {
+      from = new Point3d(x, yRange.min, zRange.min);
+      to = new Point3d(x, yRange.min + gridLenX, zRange.min);
+      this._line3d(ctx, from, to, this.axisColor);
+
+      from = new Point3d(x, yRange.max, zRange.min);
+      to = new Point3d(x, yRange.max - gridLenX, zRange.min);
+      this._line3d(ctx, from, to, this.axisColor);
+    }
+
+    if (this.showXAxis) {
+      yText = armVector.x > 0 ? yRange.min : yRange.max;
+      point3d = new Point3d(x, yText, zRange.min);
+      var msg = '  ' + this.xValueLabel(x) + '  ';
+      this.drawAxisLabelX(ctx, point3d, msg, armAngle, textMargin);
+    }
+
+    step.next();
+  }
+
+  // draw y-grid lines
+  ctx.lineWidth = 1;
+  prettyStep = this.defaultYStep === undefined;
+  step = new StepNumber(yRange.min, yRange.max, this.yStep, prettyStep);
+  step.start(true);
+
+  while (!step.end()) {
+    var y = step.getCurrent();
+
+    if (this.showGrid) {
+      from = new Point3d(xRange.min, y, zRange.min);
+      to = new Point3d(xRange.max, y, zRange.min);
+      this._line3d(ctx, from, to, this.gridColor);
+    } else if (this.showYAxis) {
+      from = new Point3d(xRange.min, y, zRange.min);
+      to = new Point3d(xRange.min + gridLenY, y, zRange.min);
+      this._line3d(ctx, from, to, this.axisColor);
+
+      from = new Point3d(xRange.max, y, zRange.min);
+      to = new Point3d(xRange.max - gridLenY, y, zRange.min);
+      this._line3d(ctx, from, to, this.axisColor);
+    }
+
+    if (this.showYAxis) {
+      xText = armVector.y > 0 ? xRange.min : xRange.max;
+      point3d = new Point3d(xText, y, zRange.min);
+      var _msg = '  ' + this.yValueLabel(y) + '  ';
+      this.drawAxisLabelY(ctx, point3d, _msg, armAngle, textMargin);
+    }
+
+    step.next();
+  }
+
+  // draw z-grid lines and axis
+  if (this.showZAxis) {
+    ctx.lineWidth = 1;
+    prettyStep = this.defaultZStep === undefined;
+    step = new StepNumber(zRange.min, zRange.max, this.zStep, prettyStep);
+    step.start(true);
+
+    xText = armVector.x > 0 ? xRange.min : xRange.max;
+    yText = armVector.y < 0 ? yRange.min : yRange.max;
+
+    while (!step.end()) {
+      var z = step.getCurrent();
+
+      // TODO: make z-grid lines really 3d?
+      var from3d = new Point3d(xText, yText, z);
+      var from2d = this._convert3Dto2D(from3d);
+      to = new Point2d(from2d.x - textMargin, from2d.y);
+      this._line(ctx, from2d, to, this.axisColor);
+
+      var _msg2 = this.zValueLabel(z) + ' ';
+      this.drawAxisLabelZ(ctx, from3d, _msg2, 5);
+
+      step.next();
+    }
+
+    ctx.lineWidth = 1;
+    from = new Point3d(xText, yText, zRange.min);
+    to = new Point3d(xText, yText, zRange.max);
+    this._line3d(ctx, from, to, this.axisColor);
+  }
+
+  // draw x-axis
+  if (this.showXAxis) {
+    var xMin2d;
+    var xMax2d;
+    ctx.lineWidth = 1;
+
+    // line at yMin
+    xMin2d = new Point3d(xRange.min, yRange.min, zRange.min);
+    xMax2d = new Point3d(xRange.max, yRange.min, zRange.min);
+    this._line3d(ctx, xMin2d, xMax2d, this.axisColor);
+    // line at ymax
+    xMin2d = new Point3d(xRange.min, yRange.max, zRange.min);
+    xMax2d = new Point3d(xRange.max, yRange.max, zRange.min);
+    this._line3d(ctx, xMin2d, xMax2d, this.axisColor);
+  }
+
+  // draw y-axis
+  if (this.showYAxis) {
+    ctx.lineWidth = 1;
+    // line at xMin
+    from = new Point3d(xRange.min, yRange.min, zRange.min);
+    to = new Point3d(xRange.min, yRange.max, zRange.min);
+    this._line3d(ctx, from, to, this.axisColor);
+    // line at xMax
+    from = new Point3d(xRange.max, yRange.min, zRange.min);
+    to = new Point3d(xRange.max, yRange.max, zRange.min);
+    this._line3d(ctx, from, to, this.axisColor);
+  }
+
+  // draw x-label
+  var xLabel = this.xLabel;
+  if (xLabel.length > 0 && this.showXAxis) {
+    yOffset = 0.1 / this.scale.y;
+    xText = (xRange.max + 3 * xRange.min) / 4;
+    yText = armVector.x > 0 ? yRange.min - yOffset : yRange.max + yOffset;
+    text = new Point3d(xText, yText, zRange.min);
+    this.drawAxisLabelX(ctx, text, xLabel, armAngle);
+  }
+
+  // draw y-label
+  var yLabel = this.yLabel;
+  if (yLabel.length > 0 && this.showYAxis) {
+    xOffset = 0.1 / this.scale.x;
+    xText = armVector.y > 0 ? xRange.min - xOffset : xRange.max + xOffset;
+    yText = (yRange.max + 3 * yRange.min) / 4;
+    text = new Point3d(xText, yText, zRange.min);
+
+    this.drawAxisLabelY(ctx, text, yLabel, armAngle);
+  }
+
+  // draw z-label
+  var zLabel = this.zLabel;
+  if (zLabel.length > 0 && this.showZAxis) {
+    offset = 30; // pixels.  // TODO: relate to the max width of the values on the z axis?
+    xText = armVector.x > 0 ? xRange.min : xRange.max;
+    yText = armVector.y < 0 ? yRange.min : yRange.max;
+    zText = (zRange.max + 3 * zRange.min) / 4;
+    text = new Point3d(xText, yText, zText);
+
+    this.drawAxisLabelZ(ctx, text, zLabel, offset);
+  }
+};
+
+/**
+ * Calculate the color based on the given value.
+ * @param {number} H   Hue, a value be between 0 and 360
+ * @param {number} S   Saturation, a value between 0 and 1
+ * @param {number} V   Value, a value between 0 and 1
+ * @returns {string}
+ * @private
+ */
+Graph3d.prototype._hsv2rgb = function (H, S, V) {
+  var R, G, B, C, Hi, X;
+
+  C = V * S;
+  Hi = Math.floor(H / 60); // hi = 0,1,2,3,4,5
+  X = C * (1 - Math.abs(H / 60 % 2 - 1));
+
+  switch (Hi) {
+    case 0:
+      R = C;G = X;B = 0;break;
+    case 1:
+      R = X;G = C;B = 0;break;
+    case 2:
+      R = 0;G = C;B = X;break;
+    case 3:
+      R = 0;G = X;B = C;break;
+    case 4:
+      R = X;G = 0;B = C;break;
+    case 5:
+      R = C;G = 0;B = X;break;
+
+    default:
+      R = 0;G = 0;B = 0;break;
+  }
+
+  return 'RGB(' + parseInt(R * 255) + ',' + parseInt(G * 255) + ',' + parseInt(B * 255) + ')';
+};
+
+/**
+ *
+ * @param {vis.Point3d} point
+ * @returns {*}
+ * @private
+ */
+Graph3d.prototype._getStrokeWidth = function (point) {
+  if (point !== undefined) {
+    if (this.showPerspective) {
+      return 1 / -point.trans.z * this.dataColor.strokeWidth;
+    } else {
+      return -(this.eye.z / this.camera.getArmLength()) * this.dataColor.strokeWidth;
+    }
+  }
+
+  return this.dataColor.strokeWidth;
+};
+
+// -----------------------------------------------------------------------------
+// Drawing primitives for the graphs
+// -----------------------------------------------------------------------------
+
+
+/**
+ * Draw a bar element in the view with the given properties.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @param {number} xWidth
+ * @param {number} yWidth
+ * @param {string} color
+ * @param {string} borderColor
+ * @private
+ */
+Graph3d.prototype._redrawBar = function (ctx, point, xWidth, yWidth, color, borderColor) {
+  var surface;
+
+  // calculate all corner points
+  var me = this;
+  var point3d = point.point;
+  var zMin = this.zRange.min;
+  var top = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z) }];
+  var bottom = [{ point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, zMin) }, { point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, zMin) }, { point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, zMin) }];
+
+  // calculate screen location of the points
+  top.forEach(function (obj) {
+    obj.screen = me._convert3Dto2D(obj.point);
+  });
+  bottom.forEach(function (obj) {
+    obj.screen = me._convert3Dto2D(obj.point);
+  });
+
+  // create five sides, calculate both corner points and center points
+  var surfaces = [{ corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point) }, { corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point) }, { corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point) }, { corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point) }, { corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point) }];
+  point.surfaces = surfaces;
+
+  // calculate the distance of each of the surface centers to the camera
+  for (var j = 0; j < surfaces.length; j++) {
+    surface = surfaces[j];
+    var transCenter = this._convertPointToTranslation(surface.center);
+    surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z;
+    // TODO: this dept calculation doesn't work 100% of the cases due to perspective,
+    //     but the current solution is fast/simple and works in 99.9% of all cases
+    //     the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9})
+  }
+
+  // order the surfaces by their (translated) depth
+  surfaces.sort(function (a, b) {
+    var diff = b.dist - a.dist;
+    if (diff) return diff;
+
+    // if equal depth, sort the top surface last
+    if (a.corners === top) return 1;
+    if (b.corners === top) return -1;
+
+    // both are equal
+    return 0;
+  });
+
+  // draw the ordered surfaces
+  ctx.lineWidth = this._getStrokeWidth(point);
+  ctx.strokeStyle = borderColor;
+  ctx.fillStyle = color;
+  // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside
+  for (var _j = 2; _j < surfaces.length; _j++) {
+    surface = surfaces[_j];
+    this._polygon(ctx, surface.corners);
+  }
+};
+
+/**
+ * Draw a polygon using the passed points and fill it with the passed style and stroke.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Array.<vis.Point3d>} points      an array of points.
+ * @param {string} [fillStyle] the fill style to set
+ * @param {string} [strokeStyle] the stroke style to set
+ */
+Graph3d.prototype._polygon = function (ctx, points, fillStyle, strokeStyle) {
+  if (points.length < 2) {
+    return;
+  }
+
+  if (fillStyle !== undefined) {
+    ctx.fillStyle = fillStyle;
+  }
+  if (strokeStyle !== undefined) {
+    ctx.strokeStyle = strokeStyle;
+  }
+  ctx.beginPath();
+  ctx.moveTo(points[0].screen.x, points[0].screen.y);
+
+  for (var i = 1; i < points.length; ++i) {
+    var point = points[i];
+    ctx.lineTo(point.screen.x, point.screen.y);
+  }
+
+  ctx.closePath();
+  ctx.fill();
+  ctx.stroke(); // TODO: only draw stroke when strokeWidth > 0
+};
+
+/**
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {object} point
+ * @param {string} color
+ * @param {string} borderColor
+ * @param {number} [size=this._dotSize()]
+ * @private
+ */
+Graph3d.prototype._drawCircle = function (ctx, point, color, borderColor, size) {
+  var radius = this._calcRadius(point, size);
+
+  ctx.lineWidth = this._getStrokeWidth(point);
+  ctx.strokeStyle = borderColor;
+  ctx.fillStyle = color;
+  ctx.beginPath();
+  ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI * 2, true);
+  ctx.fill();
+  ctx.stroke();
+};
+
+/**
+ * Determine the colors for the 'regular' graph styles.
+ *
+ * @param {object} point
+ * @returns {{fill, border}}
+ * @private
+ */
+Graph3d.prototype._getColorsRegular = function (point) {
+  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0
+  var hue = (1 - (point.point.z - this.zRange.min) * this.scale.z / this.verticalRatio) * 240;
+  var color = this._hsv2rgb(hue, 1, 1);
+  var borderColor = this._hsv2rgb(hue, 1, 0.8);
+
+  return {
+    fill: color,
+    border: borderColor
+  };
+};
+
+/**
+ * Get the colors for the 'color' graph styles.
+ * These styles are currently: 'bar-color' and 'dot-color'
+ * Color may be set as a string representation of HTML color, like #ff00ff,
+ * or calculated from a number, for example, distance from this point
+ * The first option is useful when we have some pre-given legend, to which we have to adjust ourselves
+ * The second option is useful when we are interested in automatically setting the color, from some value,
+ * using some color scale
+ * @param {object} point
+ * @returns {{fill: *, border: *}}
+ * @private
+ */
+Graph3d.prototype._getColorsColor = function (point) {
+  // calculate the color based on the value
+  var color, borderColor;
+
+  if (typeof point.point.value === "string") {
+    color = point.point.value;
+    borderColor = point.point.value;
+  } else {
+    var hue = (1 - (point.point.value - this.valueRange.min) * this.scale.value) * 240;
+    color = this._hsv2rgb(hue, 1, 1);
+    borderColor = this._hsv2rgb(hue, 1, 0.8);
+  }
+  return {
+    fill: color,
+    border: borderColor
+  };
+};
+
+/**
+ * Get the colors for the 'size' graph styles.
+ * These styles are currently: 'bar-size' and 'dot-size'
+ *
+ * @returns {{fill: *, border: (string|colorOptions.stroke|{string, undefined}|string|colorOptions.stroke|{string}|*)}}
+ * @private
+ */
+Graph3d.prototype._getColorsSize = function () {
+  return {
+    fill: this.dataColor.fill,
+    border: this.dataColor.stroke
+  };
+};
+
+/**
+ * Determine the size of a point on-screen, as determined by the
+ * distance to the camera.
+ *
+ * @param {Object} point
+ * @param {number} [size=this._dotSize()] the size that needs to be translated to screen coordinates.
+ *             optional; if not passed, use the default point size.
+ * @returns {number}
+ * @private
+ */
+Graph3d.prototype._calcRadius = function (point, size) {
+  if (size === undefined) {
+    size = this._dotSize();
+  }
+
+  var radius;
+  if (this.showPerspective) {
+    radius = size / -point.trans.z;
+  } else {
+    radius = size * -(this.eye.z / this.camera.getArmLength());
+  }
+  if (radius < 0) {
+    radius = 0;
+  }
+
+  return radius;
+};
+
+// -----------------------------------------------------------------------------
+// Methods for drawing points per graph style.
+// -----------------------------------------------------------------------------
+
+
+/**
+ * Draw single datapoint for graph style 'bar'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawBarGraphPoint = function (ctx, point) {
+  var xWidth = this.xBarWidth / 2;
+  var yWidth = this.yBarWidth / 2;
+  var colors = this._getColorsRegular(point);
+
+  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);
+};
+
+/**
+ * Draw single datapoint for graph style 'bar-color'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawBarColorGraphPoint = function (ctx, point) {
+  var xWidth = this.xBarWidth / 2;
+  var yWidth = this.yBarWidth / 2;
+  var colors = this._getColorsColor(point);
+
+  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);
+};
+
+/**
+ * Draw single datapoint for graph style 'bar-size'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawBarSizeGraphPoint = function (ctx, point) {
+  // calculate size for the bar
+  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();
+  var xWidth = this.xBarWidth / 2 * (fraction * 0.8 + 0.2);
+  var yWidth = this.yBarWidth / 2 * (fraction * 0.8 + 0.2);
+
+  var colors = this._getColorsSize();
+
+  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);
+};
+
+/**
+ * Draw single datapoint for graph style 'dot'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawDotGraphPoint = function (ctx, point) {
+  var colors = this._getColorsRegular(point);
+
+  this._drawCircle(ctx, point, colors.fill, colors.border);
+};
+
+/**
+ * Draw single datapoint for graph style 'dot-line'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawDotLineGraphPoint = function (ctx, point) {
+  // draw a vertical line from the XY-plane to the graph value
+  var from = this._convert3Dto2D(point.bottom);
+  ctx.lineWidth = 1;
+  this._line(ctx, from, point.screen, this.gridColor);
+
+  this._redrawDotGraphPoint(ctx, point);
+};
+
+/**
+ * Draw single datapoint for graph style 'dot-color'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawDotColorGraphPoint = function (ctx, point) {
+  var colors = this._getColorsColor(point);
+
+  this._drawCircle(ctx, point, colors.fill, colors.border);
+};
+
+/**
+ * Draw single datapoint for graph style 'dot-size'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawDotSizeGraphPoint = function (ctx, point) {
+  var dotSize = this._dotSize();
+  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();
+
+  var sizeMin = dotSize * this.dotSizeMinFraction;
+  var sizeRange = dotSize * this.dotSizeMaxFraction - sizeMin;
+  var size = sizeMin + sizeRange * fraction;
+
+  var colors = this._getColorsSize();
+
+  this._drawCircle(ctx, point, colors.fill, colors.border, size);
+};
+
+/**
+ * Draw single datapoint for graph style 'surface'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawSurfaceGraphPoint = function (ctx, point) {
+  var right = point.pointRight;
+  var top = point.pointTop;
+  var cross = point.pointCross;
+
+  if (point === undefined || right === undefined || top === undefined || cross === undefined) {
+    return;
+  }
+
+  var topSideVisible = true;
+  var fillStyle;
+  var strokeStyle;
+
+  if (this.showGrayBottom || this.showShadow) {
+    // calculate the cross product of the two vectors from center
+    // to left and right, in order to know whether we are looking at the
+    // bottom or at the top side. We can also use the cross product
+    // for calculating light intensity
+    var aDiff = Point3d.subtract(cross.trans, point.trans);
+    var bDiff = Point3d.subtract(top.trans, right.trans);
+    var crossproduct = Point3d.crossProduct(aDiff, bDiff);
+    var len = crossproduct.length();
+    // FIXME: there is a bug with determining the surface side (shadow or colored)
+
+    topSideVisible = crossproduct.z > 0;
+  }
+
+  if (topSideVisible) {
+
+    // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0
+    var zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4;
+    var h = (1 - (zAvg - this.zRange.min) * this.scale.z / this.verticalRatio) * 240;
+    var s = 1; // saturation
+    var v;
+
+    if (this.showShadow) {
+      v = Math.min(1 + crossproduct.x / len / 2, 1); // value. TODO: scale
+      fillStyle = this._hsv2rgb(h, s, v);
+      strokeStyle = fillStyle;
+    } else {
+      v = 1;
+      fillStyle = this._hsv2rgb(h, s, v);
+      strokeStyle = this.axisColor; // TODO: should be customizable
+    }
+  } else {
+    fillStyle = 'gray';
+    strokeStyle = this.axisColor;
+  }
+
+  ctx.lineWidth = this._getStrokeWidth(point);
+  // TODO: only draw stroke when strokeWidth > 0
+
+  var points = [point, right, cross, top];
+  this._polygon(ctx, points, fillStyle, strokeStyle);
+};
+
+/**
+ * Helper method for _redrawGridGraphPoint()
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} from
+ * @param {Object} to
+ * @private
+ */
+Graph3d.prototype._drawGridLine = function (ctx, from, to) {
+  if (from === undefined || to === undefined) {
+    return;
+  }
+
+  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0
+  var zAvg = (from.point.z + to.point.z) / 2;
+  var h = (1 - (zAvg - this.zRange.min) * this.scale.z / this.verticalRatio) * 240;
+
+  ctx.lineWidth = this._getStrokeWidth(from) * 2;
+  ctx.strokeStyle = this._hsv2rgb(h, 1, 1);
+  this._line(ctx, from.screen, to.screen);
+};
+
+/**
+ * Draw single datapoint for graph style 'Grid'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawGridGraphPoint = function (ctx, point) {
+  this._drawGridLine(ctx, point, point.pointRight);
+  this._drawGridLine(ctx, point, point.pointTop);
+};
+
+/**
+ * Draw single datapoint for graph style 'line'.
+ *
+ * @param {CanvasRenderingContext2D} ctx
+ * @param {Object} point
+ * @private
+ */
+Graph3d.prototype._redrawLineGraphPoint = function (ctx, point) {
+  if (point.pointNext === undefined) {
+    return;
+  }
+
+  ctx.lineWidth = this._getStrokeWidth(point);
+  ctx.strokeStyle = this.dataColor.stroke;
+
+  this._line(ctx, point.screen, point.pointNext.screen);
+};
+
+/**
+ * Draw all datapoints for currently selected graph style.
+ *
+ */
+Graph3d.prototype._redrawDataGraph = function () {
+  var ctx = this._getContext();
+  var i;
+
+  if (this.dataPoints === undefined || this.dataPoints.length <= 0) return; // TODO: throw exception?
+
+  this._calcTranslations(this.dataPoints);
+
+  for (i = 0; i < this.dataPoints.length; i++) {
+    var point = this.dataPoints[i];
+
+    // Using call() ensures that the correct context is used
+    this._pointDrawingMethod.call(this, ctx, point);
+  }
+};
+
+// -----------------------------------------------------------------------------
+// End methods for drawing points per graph style.
+// -----------------------------------------------------------------------------
+
+/**
+ * Store startX, startY and startOffset for mouse operations
+ *
+ * @param {Event}     event     The event that occurred
+ */
+Graph3d.prototype._storeMousePosition = function (event) {
+  // get mouse position (different code for IE and all other browsers)
+  this.startMouseX = getMouseX(event);
+  this.startMouseY = getMouseY(event);
+
+  this._startCameraOffset = this.camera.getOffset();
+};
+
+/**
+ * Start a moving operation inside the provided parent element
+ * @param {Event}     event     The event that occurred (required for
+ *                  retrieving the  mouse position)
+ */
+Graph3d.prototype._onMouseDown = function (event) {
+  event = event || window.event;
+
+  // check if mouse is still down (may be up when focus is lost for example
+  // in an iframe)
+  if (this.leftButtonDown) {
+    this._onMouseUp(event);
+  }
+
+  // only react on left mouse button down
+  this.leftButtonDown = event.which ? event.which === 1 : event.button === 1;
+  if (!this.leftButtonDown && !this.touchDown) return;
+
+  this._storeMousePosition(event);
+
+  this.startStart = new Date(this.start);
+  this.startEnd = new Date(this.end);
+  this.startArmRotation = this.camera.getArmRotation();
+
+  this.frame.style.cursor = 'move';
+
+  // add event listeners to handle moving the contents
+  // we store the function onmousemove and onmouseup in the graph, so we can
+  // remove the eventlisteners lateron in the function mouseUp()
+  var me = this;
+  this.onmousemove = function (event) {
+    me._onMouseMove(event);
+  };
+  this.onmouseup = function (event) {
+    me._onMouseUp(event);
+  };
+  util.addEventListener(document, 'mousemove', me.onmousemove);
+  util.addEventListener(document, 'mouseup', me.onmouseup);
+  util.preventDefault(event);
+};
+
+/**
+ * Perform moving operating.
+ * This function activated from within the funcion Graph.mouseDown().
+ * @param {Event}   event  Well, eehh, the event
+ */
+Graph3d.prototype._onMouseMove = function (event) {
+  this.moving = true;
+  event = event || window.event;
+
+  // calculate change in mouse position
+  var diffX = parseFloat(getMouseX(event)) - this.startMouseX;
+  var diffY = parseFloat(getMouseY(event)) - this.startMouseY;
+
+  // move with ctrl or rotate by other
+  if (event && event.ctrlKey === true) {
+    // calculate change in mouse position
+    var scaleX = this.frame.clientWidth * 0.5;
+    var scaleY = this.frame.clientHeight * 0.5;
+
+    var offXNew = (this._startCameraOffset.x || 0) - diffX / scaleX * this.camera.armLength * 0.8;
+    var offYNew = (this._startCameraOffset.y || 0) + diffY / scaleY * this.camera.armLength * 0.8;
+
+    this.camera.setOffset(offXNew, offYNew);
+    this._storeMousePosition(event);
+  } else {
+    var horizontalNew = this.startArmRotation.horizontal + diffX / 200;
+    var verticalNew = this.startArmRotation.vertical + diffY / 200;
+
+    var snapAngle = 4; // degrees
+    var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI);
+
+    // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc...
+    // the -0.001 is to take care that the vertical axis is always drawn at the left front corner
+    if (Math.abs(Math.sin(horizontalNew)) < snapValue) {
+      horizontalNew = Math.round(horizontalNew / Math.PI) * Math.PI - 0.001;
+    }
+    if (Math.abs(Math.cos(horizontalNew)) < snapValue) {
+      horizontalNew = (Math.round(horizontalNew / Math.PI - 0.5) + 0.5) * Math.PI - 0.001;
+    }
+
+    // snap vertically to nice angles
+    if (Math.abs(Math.sin(verticalNew)) < snapValue) {
+      verticalNew = Math.round(verticalNew / Math.PI) * Math.PI;
+    }
+    if (Math.abs(Math.cos(verticalNew)) < snapValue) {
+      verticalNew = (Math.round(verticalNew / Math.PI - 0.5) + 0.5) * Math.PI;
+    }
+    this.camera.setArmRotation(horizontalNew, verticalNew);
+  }
+
+  this.redraw();
+
+  // fire a cameraPositionChange event
+  var parameters = this.getCameraPosition();
+  this.emit('cameraPositionChange', parameters);
+
+  util.preventDefault(event);
+};
+
+/**
+ * Stop moving operating.
+ * This function activated from within the funcion Graph.mouseDown().
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onMouseUp = function (event) {
+  this.frame.style.cursor = 'auto';
+  this.leftButtonDown = false;
+
+  // remove event listeners here
+  util.removeEventListener(document, 'mousemove', this.onmousemove);
+  util.removeEventListener(document, 'mouseup', this.onmouseup);
+  util.preventDefault(event);
+};
+
+/**
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onClick = function (event) {
+  if (!this.onclick_callback) return;
+  if (!this.moving) {
+    var boundingRect = this.frame.getBoundingClientRect();
+    var mouseX = getMouseX(event) - boundingRect.left;
+    var mouseY = getMouseY(event) - boundingRect.top;
+    var dataPoint = this._dataPointFromXY(mouseX, mouseY);
+    if (dataPoint) this.onclick_callback(dataPoint.point.data);
+  } else {
+    // disable onclick callback, if it came immediately after rotate/pan
+    this.moving = false;
+  }
+  util.preventDefault(event);
+};
+
+/**
+ * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point
+ * @param {Event}  event   A mouse move event
+ */
+Graph3d.prototype._onTooltip = function (event) {
+  var delay = 300; // ms
+  var boundingRect = this.frame.getBoundingClientRect();
+  var mouseX = getMouseX(event) - boundingRect.left;
+  var mouseY = getMouseY(event) - boundingRect.top;
+
+  if (!this.showTooltip) {
+    return;
+  }
+
+  if (this.tooltipTimeout) {
+    clearTimeout(this.tooltipTimeout);
+  }
+
+  // (delayed) display of a tooltip only if no mouse button is down
+  if (this.leftButtonDown) {
+    this._hideTooltip();
+    return;
+  }
+
+  if (this.tooltip && this.tooltip.dataPoint) {
+    // tooltip is currently visible
+    var dataPoint = this._dataPointFromXY(mouseX, mouseY);
+    if (dataPoint !== this.tooltip.dataPoint) {
+      // datapoint changed
+      if (dataPoint) {
+        this._showTooltip(dataPoint);
+      } else {
+        this._hideTooltip();
+      }
+    }
+  } else {
+    // tooltip is currently not visible
+    var me = this;
+    this.tooltipTimeout = setTimeout(function () {
+      me.tooltipTimeout = null;
+
+      // show a tooltip if we have a data point
+      var dataPoint = me._dataPointFromXY(mouseX, mouseY);
+      if (dataPoint) {
+        me._showTooltip(dataPoint);
+      }
+    }, delay);
+  }
+};
+
+/**
+ * Event handler for touchstart event on mobile devices
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onTouchStart = function (event) {
+  this.touchDown = true;
+
+  var me = this;
+  this.ontouchmove = function (event) {
+    me._onTouchMove(event);
+  };
+  this.ontouchend = function (event) {
+    me._onTouchEnd(event);
+  };
+  util.addEventListener(document, 'touchmove', me.ontouchmove);
+  util.addEventListener(document, 'touchend', me.ontouchend);
+
+  this._onMouseDown(event);
+};
+
+/**
+ * Event handler for touchmove event on mobile devices
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onTouchMove = function (event) {
+  this._onMouseMove(event);
+};
+
+/**
+ * Event handler for touchend event on mobile devices
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onTouchEnd = function (event) {
+  this.touchDown = false;
+
+  util.removeEventListener(document, 'touchmove', this.ontouchmove);
+  util.removeEventListener(document, 'touchend', this.ontouchend);
+
+  this._onMouseUp(event);
+};
+
+/**
+ * Event handler for mouse wheel event, used to zoom the graph
+ * Code from http://adomas.org/javascript-mouse-wheel/
+ * @param {Event}  event   The event
+ */
+Graph3d.prototype._onWheel = function (event) {
+  if (!event) /* For IE. */
+    event = window.event;
+
+  // retrieve delta
+  var delta = 0;
+  if (event.wheelDelta) {
+    /* IE/Opera. */
+    delta = event.wheelDelta / 120;
+  } else if (event.detail) {
+    /* Mozilla case. */
+    // In Mozilla, sign of delta is different than in IE.
+    // Also, delta is multiple of 3.
+    delta = -event.detail / 3;
+  }
+
+  // If delta is nonzero, handle it.
+  // Basically, delta is now positive if wheel was scrolled up,
+  // and negative, if wheel was scrolled down.
+  if (delta) {
+    var oldLength = this.camera.getArmLength();
+    var newLength = oldLength * (1 - delta / 10);
+
+    this.camera.setArmLength(newLength);
+    this.redraw();
+
+    this._hideTooltip();
+  }
+
+  // fire a cameraPositionChange event
+  var parameters = this.getCameraPosition();
+  this.emit('cameraPositionChange', parameters);
+
+  // Prevent default actions caused by mouse wheel.
+  // That might be ugly, but we handle scrolls somehow
+  // anyway, so don't bother here..
+  util.preventDefault(event);
+};
+
+/**
+ * Test whether a point lies inside given 2D triangle
+ *
+ * @param   {vis.Point2d}   point
+ * @param   {vis.Point2d[]} triangle
+ * @returns {boolean}   true if given point lies inside or on the edge of the
+ *                      triangle, false otherwise
+ * @private
+ */
+Graph3d.prototype._insideTriangle = function (point, triangle) {
+  var a = triangle[0],
+      b = triangle[1],
+      c = triangle[2];
+
+  /**
+   *
+   * @param {number} x
+   * @returns {number}
+   */
+  function sign(x) {
+    return x > 0 ? 1 : x < 0 ? -1 : 0;
+  }
+
+  var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x));
+  var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x));
+  var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x));
+
+  // each of the three signs must be either equal to each other or zero
+  return (as == 0 || bs == 0 || as == bs) && (bs == 0 || cs == 0 || bs == cs) && (as == 0 || cs == 0 || as == cs);
+};
+
+/**
+ * Find a data point close to given screen position (x, y)
+ *
+ * @param   {number} x
+ * @param   {number} y
+ * @returns {Object | null} The closest data point or null if not close to any
+ *                          data point
+ * @private
+ */
+Graph3d.prototype._dataPointFromXY = function (x, y) {
+  var i,
+      distMax = 100,
+      // px
+  dataPoint = null,
+      closestDataPoint = null,
+      closestDist = null,
+      center = new Point2d(x, y);
+
+  if (this.style === Graph3d.STYLE.BAR || this.style === Graph3d.STYLE.BARCOLOR || this.style === Graph3d.STYLE.BARSIZE) {
+    // the data points are ordered from far away to closest
+    for (i = this.dataPoints.length - 1; i >= 0; i--) {
+      dataPoint = this.dataPoints[i];
+      var surfaces = dataPoint.surfaces;
+      if (surfaces) {
+        for (var s = surfaces.length - 1; s >= 0; s--) {
+          // split each surface in two triangles, and see if the center point is inside one of these
+          var surface = surfaces[s];
+          var corners = surface.corners;
+          var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen];
+          var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen];
+          if (this._insideTriangle(center, triangle1) || this._insideTriangle(center, triangle2)) {
+            // return immediately at the first hit
+            return dataPoint;
+          }
+        }
+      }
+    }
+  } else {
+    // find the closest data point, using distance to the center of the point on 2d screen
+    for (i = 0; i < this.dataPoints.length; i++) {
+      dataPoint = this.dataPoints[i];
+      var point = dataPoint.screen;
+      if (point) {
+        var distX = Math.abs(x - point.x);
+        var distY = Math.abs(y - point.y);
+        var dist = Math.sqrt(distX * distX + distY * distY);
+
+        if ((closestDist === null || dist < closestDist) && dist < distMax) {
+          closestDist = dist;
+          closestDataPoint = dataPoint;
+        }
+      }
+    }
+  }
+
+  return closestDataPoint;
+};
+
+/**
+ * Determine if the given style has bars
+ *
+ * @param   {number} style the style to check
+ * @returns {boolean} true if bar style, false otherwise
+ */
+Graph3d.prototype.hasBars = function (style) {
+  return style == Graph3d.STYLE.BAR || style == Graph3d.STYLE.BARCOLOR || style == Graph3d.STYLE.BARSIZE;
+};
+
+/**
+ * Display a tooltip for given data point
+ * @param {Object} dataPoint
+ * @private
+ */
+Graph3d.prototype._showTooltip = function (dataPoint) {
+  var content, line, dot;
+
+  if (!this.tooltip) {
+    content = document.createElement('div');
+    (0, _assign2['default'])(content.style, {}, this.tooltipStyle.content);
+    content.style.position = 'absolute';
+
+    line = document.createElement('div');
+    (0, _assign2['default'])(line.style, {}, this.tooltipStyle.line);
+    line.style.position = 'absolute';
+
+    dot = document.createElement('div');
+    (0, _assign2['default'])(dot.style, {}, this.tooltipStyle.dot);
+    dot.style.position = 'absolute';
+
+    this.tooltip = {
+      dataPoint: null,
+      dom: {
+        content: content,
+        line: line,
+        dot: dot
+      }
+    };
+  } else {
+    content = this.tooltip.dom.content;
+    line = this.tooltip.dom.line;
+    dot = this.tooltip.dom.dot;
+  }
+
+  this._hideTooltip();
+
+  this.tooltip.dataPoint = dataPoint;
+  if (typeof this.showTooltip === 'function') {
+    content.innerHTML = this.showTooltip(dataPoint.point);
+  } else {
+    content.innerHTML = '<table>' + '<tr><td>' + this.xLabel + ':</td><td>' + dataPoint.point.x + '</td></tr>' + '<tr><td>' + this.yLabel + ':</td><td>' + dataPoint.point.y + '</td></tr>' + '<tr><td>' + this.zLabel + ':</td><td>' + dataPoint.point.z + '</td></tr>' + '</table>';
+  }
+
+  content.style.left = '0';
+  content.style.top = '0';
+  this.frame.appendChild(content);
+  this.frame.appendChild(line);
+  this.frame.appendChild(dot);
+
+  // calculate sizes
+  var contentWidth = content.offsetWidth;
+  var contentHeight = content.offsetHeight;
+  var lineHeight = line.offsetHeight;
+  var dotWidth = dot.offsetWidth;
+  var dotHeight = dot.offsetHeight;
+
+  var left = dataPoint.screen.x - contentWidth / 2;
+  left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth);
+
+  line.style.left = dataPoint.screen.x + 'px';
+  line.style.top = dataPoint.screen.y - lineHeight + 'px';
+  content.style.left = left + 'px';
+  content.style.top = dataPoint.screen.y - lineHeight - contentHeight + 'px';
+  dot.style.left = dataPoint.screen.x - dotWidth / 2 + 'px';
+  dot.style.top = dataPoint.screen.y - dotHeight / 2 + 'px';
+};
+
+/**
+ * Hide the tooltip when displayed
+ * @private
+ */
+Graph3d.prototype._hideTooltip = function () {
+  if (this.tooltip) {
+    this.tooltip.dataPoint = null;
+
+    for (var prop in this.tooltip.dom) {
+      if (this.tooltip.dom.hasOwnProperty(prop)) {
+        var elem = this.tooltip.dom[prop];
+        if (elem && elem.parentNode) {
+          elem.parentNode.removeChild(elem);
+        }
+      }
+    }
+  }
+};
+
+/**--------------------------------------------------------------------------**/
+
+/**
+ * Get the horizontal mouse position from a mouse event
+ *
+ * @param   {Event}  event
+ * @returns {number} mouse x
+ */
+function getMouseX(event) {
+  if ('clientX' in event) return event.clientX;
+  return event.targetTouches[0] && event.targetTouches[0].clientX || 0;
+}
+
+/**
+ * Get the vertical mouse position from a mouse event
+ *
+ * @param   {Event}  event
+ * @returns {number} mouse y
+ */
+function getMouseY(event) {
+  if ('clientY' in event) return event.clientY;
+  return event.targetTouches[0] && event.targetTouches[0].clientY || 0;
+}
+
+// -----------------------------------------------------------------------------
+//  Public methods for specific settings
+// -----------------------------------------------------------------------------
+
+/**
+ * Set the rotation and distance of the camera
+ *
+ * @param {Object}  pos            An object with the camera position
+ * @param {number} [pos.horizontal] The horizontal rotation, between 0 and 2*PI.
+ *                                 Optional, can be left undefined.
+ * @param {number} [pos.vertical]  The vertical rotation, between 0 and 0.5*PI.
+ *                                 if vertical=0.5*PI, the graph is shown from
+ *                                 the top. Optional, can be left undefined.
+ * @param {number} [pos.distance]  The (normalized) distance of the camera to the
+ *                                 center of the graph, a value between 0.71 and
+ *                                 5.0. Optional, can be left undefined.
+ */
+Graph3d.prototype.setCameraPosition = function (pos) {
+  Settings.setCameraPosition(pos, this);
+  this.redraw();
+};
+
+/**
+ * Set a new size for the graph
+ *
+ * @param {string} width  Width in pixels or percentage (for example '800px'
+ *                        or '50%')
+ * @param {string} height Height in pixels or percentage  (for example '400px'
+ *                        or '30%')
+ */
+Graph3d.prototype.setSize = function (width, height) {
+  this._setSize(width, height);
+  this.redraw();
+};
+
+// -----------------------------------------------------------------------------
+//  End public methods for specific settings
+// -----------------------------------------------------------------------------
+
+
+module.exports = Graph3d;
+
+/***/ }),
+/* 162 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(163);
+module.exports = __webpack_require__(7).Object.assign;
+
+
+/***/ }),
+/* 163 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.3.1 Object.assign(target, source)
+var $export = __webpack_require__(17);
+
+$export($export.S + $export.F, 'Object', { assign: __webpack_require__(164) });
+
+
+/***/ }),
+/* 164 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+// 19.1.2.1 Object.assign(target, source, ...)
+var getKeys = __webpack_require__(33);
+var gOPS = __webpack_require__(63);
+var pIE = __webpack_require__(42);
+var toObject = __webpack_require__(41);
+var IObject = __webpack_require__(78);
+var $assign = Object.assign;
+
+// should work with symbols and should have deterministic property order (V8 bug)
+module.exports = !$assign || __webpack_require__(28)(function () {
+  var A = {};
+  var B = {};
+  // eslint-disable-next-line no-undef
+  var S = Symbol();
+  var K = 'abcdefghijklmnopqrst';
+  A[S] = 7;
+  K.split('').forEach(function (k) { B[k] = k; });
+  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
+  var T = toObject(target);
+  var aLen = arguments.length;
+  var index = 1;
+  var getSymbols = gOPS.f;
+  var isEnum = pIE.f;
+  while (aLen > index) {
+    var S = IObject(arguments[index++]);
+    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
+    var length = keys.length;
+    var j = 0;
+    var key;
+    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
+  } return T;
+} : $assign;
+
+
+/***/ }),
+/* 165 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(166), __esModule: true };
+
+/***/ }),
+/* 166 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(167);
+module.exports = __webpack_require__(7).Math.sign;
+
+
+/***/ }),
+/* 167 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 20.2.2.28 Math.sign(x)
+var $export = __webpack_require__(17);
+
+$export($export.S, 'Math', { sign: __webpack_require__(168) });
+
+
+/***/ }),
+/* 168 */
+/***/ (function(module, exports) {
+
+// 20.2.2.28 Math.sign(x)
+module.exports = Math.sign || function sign(x) {
+  // eslint-disable-next-line no-self-compare
+  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
+};
+
+
+/***/ }),
+/* 169 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(170), __esModule: true };
+
+/***/ }),
+/* 170 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(171);
+var $Object = __webpack_require__(7).Object;
+module.exports = function defineProperty(it, key, desc) {
+  return $Object.defineProperty(it, key, desc);
+};
+
+
+/***/ }),
+/* 171 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var $export = __webpack_require__(17);
+// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+$export($export.S + $export.F * !__webpack_require__(21), 'Object', { defineProperty: __webpack_require__(20).f });
+
+
+/***/ }),
+/* 172 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+/**
+ * This object contains all possible options. It will check if the types are correct, if required if the option is one
+ * of the allowed values.
+ *
+ * __any__ means that the name of the property does not matter.
+ * __type__ is a required field for all objects and contains the allowed types of all objects
+ */
+var string = 'string';
+var bool = 'boolean';
+var number = 'number';
+var object = 'object'; // should only be in a __type__ property
+// Following not used here, but useful for reference
+//let array    = 'array';
+//let dom      = 'dom';
+//let any      = 'any';
+
+
+var colorOptions = {
+  fill: { string: string },
+  stroke: { string: string },
+  strokeWidth: { number: number },
+  __type__: { string: string, object: object, 'undefined': 'undefined' }
+};
+
+/**
+ * Order attempted to be alphabetical.
+ *   - x/y/z-prefixes ignored in sorting
+ *   - __type__ always at end
+ *   - globals at end
+ */
+var allOptions = {
+  animationAutoStart: { boolean: bool, 'undefined': 'undefined' },
+  animationInterval: { number: number },
+  animationPreload: { boolean: bool },
+  axisColor: { string: string },
+  backgroundColor: colorOptions,
+  xBarWidth: { number: number, 'undefined': 'undefined' },
+  yBarWidth: { number: number, 'undefined': 'undefined' },
+  cameraPosition: {
+    distance: { number: number },
+    horizontal: { number: number },
+    vertical: { number: number },
+    __type__: { object: object }
+  },
+  xCenter: { string: string },
+  yCenter: { string: string },
+  dataColor: colorOptions,
+  dotSizeMinFraction: { number: number },
+  dotSizeMaxFraction: { number: number },
+  dotSizeRatio: { number: number },
+  filterLabel: { string: string },
+  gridColor: { string: string },
+  onclick: { 'function': 'function' },
+  keepAspectRatio: { boolean: bool },
+  xLabel: { string: string },
+  yLabel: { string: string },
+  zLabel: { string: string },
+  legendLabel: { string: string },
+  xMin: { number: number, 'undefined': 'undefined' },
+  yMin: { number: number, 'undefined': 'undefined' },
+  zMin: { number: number, 'undefined': 'undefined' },
+  xMax: { number: number, 'undefined': 'undefined' },
+  yMax: { number: number, 'undefined': 'undefined' },
+  zMax: { number: number, 'undefined': 'undefined' },
+  showAnimationControls: { boolean: bool, 'undefined': 'undefined' },
+  showGrid: { boolean: bool },
+  showLegend: { boolean: bool, 'undefined': 'undefined' },
+  showPerspective: { boolean: bool },
+  showShadow: { boolean: bool },
+  showXAxis: { boolean: bool },
+  showYAxis: { boolean: bool },
+  showZAxis: { boolean: bool },
+  xStep: { number: number, 'undefined': 'undefined' },
+  yStep: { number: number, 'undefined': 'undefined' },
+  zStep: { number: number, 'undefined': 'undefined' },
+  style: {
+    number: number, // TODO: either Graph3d.DEFAULT has string, or number allowed in documentation
+    string: ['bar', 'bar-color', 'bar-size', 'dot', 'dot-line', 'dot-color', 'dot-size', 'line', 'grid', 'surface']
+  },
+  tooltip: { boolean: bool, 'function': 'function' },
+  tooltipStyle: {
+    content: {
+      color: { string: string },
+      background: { string: string },
+      border: { string: string },
+      borderRadius: { string: string },
+      boxShadow: { string: string },
+      padding: { string: string },
+      __type__: { object: object }
+    },
+    line: {
+      borderLeft: { string: string },
+      height: { string: string },
+      width: { string: string },
+      __type__: { object: object }
+    },
+    dot: {
+      border: { string: string },
+      borderRadius: { string: string },
+      height: { string: string },
+      width: { string: string },
+      __type__: { object: object }
+    },
+    __type__: { object: object }
+  },
+  xValueLabel: { 'function': 'function' },
+  yValueLabel: { 'function': 'function' },
+  zValueLabel: { 'function': 'function' },
+  valueMax: { number: number, 'undefined': 'undefined' },
+  valueMin: { number: number, 'undefined': 'undefined' },
+  verticalRatio: { number: number },
+
+  //globals :
+  height: { string: string },
+  width: { string: string },
+  __type__: { object: object }
+};
+
+exports.allOptions = allOptions;
+
+/***/ }),
+/* 173 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Range = __webpack_require__(174);
+var Filter = __webpack_require__(96);
+var Settings = __webpack_require__(94);
+var Point3d = __webpack_require__(34);
+
+/**
+ * Creates a container for all data of one specific 3D-graph.
+ *
+ * On construction, the container is totally empty; the data
+ * needs to be initialized with method initializeData().
+ * Failure to do so will result in the following exception begin thrown
+ * on instantiation of Graph3D:
+ *
+ *     Error: Array, DataSet, or DataView expected
+ *
+ * @constructor DataGroup
+ */
+function DataGroup() {
+  this.dataTable = null; // The original data table
+}
+
+/**
+ * Initializes the instance from the passed data.
+ *
+ * Calculates minimum and maximum values and column index values.
+ *
+ * The graph3d instance is used internally to access the settings for
+ * the given instance.
+ * TODO: Pass settings only instead.
+ *
+ * @param {vis.Graph3d}  graph3d Reference to the calling Graph3D instance.
+ * @param {Array | DataSet | DataView} rawData The data containing the items for
+ *                                             the Graph.
+ * @param {number}   style   Style Number
+ * @returns {Array.<Object>}
+ */
+DataGroup.prototype.initializeData = function (graph3d, rawData, style) {
+  if (rawData === undefined) return;
+
+  if (Array.isArray(rawData)) {
+    rawData = new DataSet(rawData);
+  }
+
+  var data;
+  if (rawData instanceof DataSet || rawData instanceof DataView) {
+    data = rawData.get();
+  } else {
+    throw new Error('Array, DataSet, or DataView expected');
+  }
+
+  if (data.length == 0) return;
+
+  this.style = style;
+
+  // unsubscribe from the dataTable
+  if (this.dataSet) {
+    this.dataSet.off('*', this._onChange);
+  }
+
+  this.dataSet = rawData;
+  this.dataTable = data;
+
+  // subscribe to changes in the dataset
+  var me = this;
+  this._onChange = function () {
+    graph3d.setData(me.dataSet);
+  };
+  this.dataSet.on('*', this._onChange);
+
+  // determine the location of x,y,z,value,filter columns
+  this.colX = 'x';
+  this.colY = 'y';
+  this.colZ = 'z';
+
+  var withBars = graph3d.hasBars(style);
+
+  // determine barWidth from data
+  if (withBars) {
+    if (graph3d.defaultXBarWidth !== undefined) {
+      this.xBarWidth = graph3d.defaultXBarWidth;
+    } else {
+      this.xBarWidth = this.getSmallestDifference(data, this.colX) || 1;
+    }
+
+    if (graph3d.defaultYBarWidth !== undefined) {
+      this.yBarWidth = graph3d.defaultYBarWidth;
+    } else {
+      this.yBarWidth = this.getSmallestDifference(data, this.colY) || 1;
+    }
+  }
+
+  // calculate minima and maxima
+  this._initializeRange(data, this.colX, graph3d, withBars);
+  this._initializeRange(data, this.colY, graph3d, withBars);
+  this._initializeRange(data, this.colZ, graph3d, false);
+
+  if (data[0].hasOwnProperty('style')) {
+    this.colValue = 'style';
+    var valueRange = this.getColumnRange(data, this.colValue);
+    this._setRangeDefaults(valueRange, graph3d.defaultValueMin, graph3d.defaultValueMax);
+    this.valueRange = valueRange;
+  }
+
+  // Initialize data filter if a filter column is provided
+  var table = this.getDataTable();
+  if (table[0].hasOwnProperty('filter')) {
+    if (this.dataFilter === undefined) {
+      this.dataFilter = new Filter(this, 'filter', graph3d);
+      this.dataFilter.setOnLoadCallback(function () {
+        graph3d.redraw();
+      });
+    }
+  }
+
+  var dataPoints;
+  if (this.dataFilter) {
+    // apply filtering
+    dataPoints = this.dataFilter._getDataPoints();
+  } else {
+    // no filtering. load all data
+    dataPoints = this._getDataPoints(this.getDataTable());
+  }
+  return dataPoints;
+};
+
+/**
+ * Collect the range settings for the given data column.
+ *
+ * This internal method is intended to make the range 
+ * initalization more generic.
+ *
+ * TODO: if/when combined settings per axis defined, get rid of this.
+ *
+ * @private
+ *
+ * @param {'x'|'y'|'z'} column  The data column to process
+ * @param {vis.Graph3d} graph3d Reference to the calling Graph3D instance;
+ *                              required for access to settings
+ * @returns {Object}
+ */
+DataGroup.prototype._collectRangeSettings = function (column, graph3d) {
+  var index = ['x', 'y', 'z'].indexOf(column);
+
+  if (index == -1) {
+    throw new Error('Column \'' + column + '\' invalid');
+  }
+
+  var upper = column.toUpperCase();
+
+  return {
+    barWidth: this[column + 'BarWidth'],
+    min: graph3d['default' + upper + 'Min'],
+    max: graph3d['default' + upper + 'Max'],
+    step: graph3d['default' + upper + 'Step'],
+    range_label: column + 'Range', // Name of instance field to write to
+    step_label: column + 'Step' // Name of instance field to write to
+  };
+};
+
+/**
+ * Initializes the settings per given column.
+ *
+ * TODO: if/when combined settings per axis defined, rewrite this.
+ *
+ * @private
+ *
+ * @param {DataSet | DataView} data     The data containing the items for the Graph
+ * @param {'x'|'y'|'z'}        column   The data column to process
+ * @param {vis.Graph3d}        graph3d  Reference to the calling Graph3D instance;
+ *                                      required for access to settings
+ * @param {boolean}            withBars True if initializing for bar graph
+ */
+DataGroup.prototype._initializeRange = function (data, column, graph3d, withBars) {
+  var NUMSTEPS = 5;
+  var settings = this._collectRangeSettings(column, graph3d);
+
+  var range = this.getColumnRange(data, column);
+  if (withBars && column != 'z') {
+    // Safeguard for 'z'; it doesn't have a bar width
+    range.expand(settings.barWidth / 2);
+  }
+
+  this._setRangeDefaults(range, settings.min, settings.max);
+  this[settings.range_label] = range;
+  this[settings.step_label] = settings.step !== undefined ? settings.step : range.range() / NUMSTEPS;
+};
+
+/**
+ * Creates a list with all the different values in the data for the given column.
+ *
+ * If no data passed, use the internal data of this instance.
+ *
+ * @param {'x'|'y'|'z'}                column The data column to process
+ * @param {DataSet|DataView|undefined} data   The data containing the items for the Graph
+ *
+ * @returns {Array} All distinct values in the given column data, sorted ascending.
+ */
+DataGroup.prototype.getDistinctValues = function (column, data) {
+  if (data === undefined) {
+    data = this.dataTable;
+  }
+
+  var values = [];
+
+  for (var i = 0; i < data.length; i++) {
+    var value = data[i][column] || 0;
+    if (values.indexOf(value) === -1) {
+      values.push(value);
+    }
+  }
+
+  return values.sort(function (a, b) {
+    return a - b;
+  });
+};
+
+/**
+ * Determine the smallest difference between the values for given
+ * column in the passed data set.
+ *
+ * @param {DataSet|DataView|undefined} data   The data containing the items for the Graph
+ * @param {'x'|'y'|'z'}                column The data column to process
+ *
+ * @returns {number|null} Smallest difference value or
+ *                        null, if it can't be determined.
+ */
+DataGroup.prototype.getSmallestDifference = function (data, column) {
+  var values = this.getDistinctValues(data, column);
+
+  // Get all the distinct diffs
+  // Array values is assumed to be sorted here
+  var smallest_diff = null;
+
+  for (var i = 1; i < values.length; i++) {
+    var diff = values[i] - values[i - 1];
+
+    if (smallest_diff == null || smallest_diff > diff) {
+      smallest_diff = diff;
+    }
+  }
+
+  return smallest_diff;
+};
+
+/**
+ * Get the absolute min/max values for the passed data column.
+ *
+ * @param {DataSet|DataView|undefined} data   The data containing the items for the Graph
+ * @param {'x'|'y'|'z'}                column The data column to process
+ *
+ * @returns {Range} A Range instance with min/max members properly set.
+ */
+DataGroup.prototype.getColumnRange = function (data, column) {
+  var range = new Range();
+
+  // Adjust the range so that it covers all values in the passed data elements.
+  for (var i = 0; i < data.length; i++) {
+    var item = data[i][column];
+    range.adjust(item);
+  }
+
+  return range;
+};
+
+/**
+ * Determines the number of rows in the current data.
+ *
+ * @returns {number}
+ */
+DataGroup.prototype.getNumberOfRows = function () {
+  return this.dataTable.length;
+};
+
+/**
+ * Set default values for range
+ *
+ * The default values override the range values, if defined.
+ *
+ * Because it's possible that only defaultMin or defaultMax is set, it's better
+ * to pass in a range already set with the min/max set from the data. Otherwise,
+ * it's quite hard to process the min/max properly.
+ *
+ * @param {vis.Range} range
+ * @param {number} [defaultMin=range.min]
+ * @param {number} [defaultMax=range.max]
+ * @private
+ */
+DataGroup.prototype._setRangeDefaults = function (range, defaultMin, defaultMax) {
+  if (defaultMin !== undefined) {
+    range.min = defaultMin;
+  }
+
+  if (defaultMax !== undefined) {
+    range.max = defaultMax;
+  }
+
+  // This is the original way that the default min/max values were adjusted.
+  // TODO: Perhaps it's better if an error is thrown if the values do not agree.
+  //       But this will change the behaviour.
+  if (range.max <= range.min) range.max = range.min + 1;
+};
+
+DataGroup.prototype.getDataTable = function () {
+  return this.dataTable;
+};
+
+DataGroup.prototype.getDataSet = function () {
+  return this.dataSet;
+};
+
+/**
+ * Return all data values as a list of Point3d objects
+ * @param {Array.<Object>} data
+ * @returns {Array.<Object>}
+ */
+DataGroup.prototype.getDataPoints = function (data) {
+  var dataPoints = [];
+
+  for (var i = 0; i < data.length; i++) {
+    var point = new Point3d();
+    point.x = data[i][this.colX] || 0;
+    point.y = data[i][this.colY] || 0;
+    point.z = data[i][this.colZ] || 0;
+    point.data = data[i];
+
+    if (this.colValue !== undefined) {
+      point.value = data[i][this.colValue] || 0;
+    }
+
+    var obj = {};
+    obj.point = point;
+    obj.bottom = new Point3d(point.x, point.y, this.zRange.min);
+    obj.trans = undefined;
+    obj.screen = undefined;
+
+    dataPoints.push(obj);
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Copy all values from the data table to a matrix.
+ *
+ * The provided values are supposed to form a grid of (x,y) positions.
+ * @param {Array.<Object>} data
+ * @returns {Array.<Object>}
+ * @private
+ */
+DataGroup.prototype.initDataAsMatrix = function (data) {
+  // TODO: store the created matrix dataPoints in the filters instead of
+  //       reloading each time.
+  var x, y, i, obj;
+
+  // create two lists with all present x and y values
+  var dataX = this.getDistinctValues(this.colX, data);
+  var dataY = this.getDistinctValues(this.colY, data);
+
+  var dataPoints = this.getDataPoints(data);
+
+  // create a grid, a 2d matrix, with all values.
+  var dataMatrix = []; // temporary data matrix
+  for (i = 0; i < dataPoints.length; i++) {
+    obj = dataPoints[i];
+
+    // TODO: implement Array().indexOf() for Internet Explorer
+    var xIndex = dataX.indexOf(obj.point.x);
+    var yIndex = dataY.indexOf(obj.point.y);
+
+    if (dataMatrix[xIndex] === undefined) {
+      dataMatrix[xIndex] = [];
+    }
+
+    dataMatrix[xIndex][yIndex] = obj;
+  }
+
+  // fill in the pointers to the neighbors.
+  for (x = 0; x < dataMatrix.length; x++) {
+    for (y = 0; y < dataMatrix[x].length; y++) {
+      if (dataMatrix[x][y]) {
+        dataMatrix[x][y].pointRight = x < dataMatrix.length - 1 ? dataMatrix[x + 1][y] : undefined;
+        dataMatrix[x][y].pointTop = y < dataMatrix[x].length - 1 ? dataMatrix[x][y + 1] : undefined;
+        dataMatrix[x][y].pointCross = x < dataMatrix.length - 1 && y < dataMatrix[x].length - 1 ? dataMatrix[x + 1][y + 1] : undefined;
+      }
+    }
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Return common information, if present
+ *
+ * @returns {string}
+ */
+DataGroup.prototype.getInfo = function () {
+  var dataFilter = this.dataFilter;
+  if (!dataFilter) return undefined;
+
+  return dataFilter.getLabel() + ': ' + dataFilter.getSelectedValue();
+};
+
+/**
+ * Reload the data
+ */
+DataGroup.prototype.reload = function () {
+  if (this.dataTable) {
+    this.setData(this.dataTable);
+  }
+};
+
+/**
+ * Filter the data based on the current filter
+ *
+ * @param   {Array} data
+ * @returns {Array} dataPoints Array with point objects which can be drawn on
+ *                             screen
+ */
+DataGroup.prototype._getDataPoints = function (data) {
+  var dataPoints = [];
+
+  if (this.style === Settings.STYLE.GRID || this.style === Settings.STYLE.SURFACE) {
+    dataPoints = this.initDataAsMatrix(data);
+  } else {
+    // 'dot', 'dot-line', etc.
+    this._checkValueField(data);
+    dataPoints = this.getDataPoints(data);
+
+    if (this.style === Settings.STYLE.LINE) {
+      // Add next member points for line drawing
+      for (var i = 0; i < dataPoints.length; i++) {
+        if (i > 0) {
+          dataPoints[i - 1].pointNext = dataPoints[i];
+        }
+      }
+    }
+  }
+
+  return dataPoints;
+};
+
+/**
+ * Check if the state is consistent for the use of the value field.
+ *
+ * Throws if a problem is detected.
+ *
+ * @param {Array.<Object>} data
+ * @private
+ */
+DataGroup.prototype._checkValueField = function (data) {
+
+  var hasValueField = this.style === Settings.STYLE.BARCOLOR || this.style === Settings.STYLE.BARSIZE || this.style === Settings.STYLE.DOTCOLOR || this.style === Settings.STYLE.DOTSIZE;
+
+  if (!hasValueField) {
+    return; // No need to check further
+  }
+
+  // Following field must be present for the current graph style
+  if (this.colValue === undefined) {
+    throw new Error('Expected data to have ' + ' field \'style\' ' + ' for graph style \'' + this.style + '\'');
+  }
+
+  // The data must also contain this field.
+  // Note that only first data element is checked.
+  if (data[0][this.colValue] === undefined) {
+    throw new Error('Expected data to have ' + ' field \'' + this.colValue + '\' ' + ' for graph style \'' + this.style + '\'');
+  }
+};
+
+module.exports = DataGroup;
+
+/***/ }),
+/* 174 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * @prototype Range
+ *
+ * Helper class to make working with related min and max values easier.
+ *
+ * The range is inclusive; a given value is considered part of the range if:
+ *
+ *    this.min <= value <= this.max
+ */
+function Range() {
+  this.min = undefined;
+  this.max = undefined;
+}
+
+/**
+ * Adjust the range so that the passed value fits in it.
+ *
+ * If the value is outside of the current extremes, adjust
+ * the min or max so that the value is within the range.
+ *
+ * @param {number} value Numeric value to fit in range
+ */
+Range.prototype.adjust = function (value) {
+  if (value === undefined) return;
+
+  if (this.min === undefined || this.min > value) {
+    this.min = value;
+  }
+
+  if (this.max === undefined || this.max < value) {
+    this.max = value;
+  }
+};
+
+/**
+ * Adjust the current range so that the passed range fits in it.
+ *
+ * @param {Range} range Range instance to fit in current instance
+ */
+Range.prototype.combine = function (range) {
+  this.add(range.min);
+  this.add(range.max);
+};
+
+/**
+ * Expand the range by the given value
+ *
+ * min will be lowered by given value;
+ * max will be raised by given value
+ *
+ * Shrinking by passing a negative value is allowed.
+ *
+ * @param {number} val Amount by which to expand or shrink current range with
+ */
+Range.prototype.expand = function (val) {
+  if (val === undefined) {
+    return;
+  }
+
+  var newMin = this.min - val;
+  var newMax = this.max + val;
+
+  // Note that following allows newMin === newMax.
+  // This should be OK, since method expand() allows this also.
+  if (newMin > newMax) {
+    throw new Error('Passed expansion value makes range invalid');
+  }
+
+  this.min = newMin;
+  this.max = newMax;
+};
+
+/**
+ * Determine the full range width of current instance.
+ *
+ * @returns {num} The calculated width of this range
+ */
+Range.prototype.range = function () {
+  return this.max - this.min;
+};
+
+/**
+ * Determine the central point of current instance.
+ *
+ * @returns {number} the value in the middle of min and max
+ */
+Range.prototype.center = function () {
+  return (this.min + this.max) / 2;
+};
+
+module.exports = Range;
+
+/***/ }),
+/* 175 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
+
+(function (factory) {
+  if (true) {
+    // AMD. Register as an anonymous module.
+    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
+				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
+				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    // Browser globals (root is window)
+    window.propagating = factory();
+  }
+}(function () {
+  var _firstTarget = null; // singleton, will contain the target element where the touch event started
+
+  /**
+   * Extend an Hammer.js instance with event propagation.
+   *
+   * Features:
+   * - Events emitted by hammer will propagate in order from child to parent
+   *   elements.
+   * - Events are extended with a function `event.stopPropagation()` to stop
+   *   propagation to parent elements.
+   * - An option `preventDefault` to stop all default browser behavior.
+   *
+   * Usage:
+   *   var hammer = propagatingHammer(new Hammer(element));
+   *   var hammer = propagatingHammer(new Hammer(element), {preventDefault: true});
+   *
+   * @param {Hammer.Manager} hammer   An hammer instance.
+   * @param {Object} [options]        Available options:
+   *                                  - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`.
+   *                                    Enforce preventing the default browser behavior.
+   *                                    Cannot be set to `false`.
+   * @return {Hammer.Manager} Returns the same hammer instance with extended
+   *                          functionality
+   */
+  return function propagating(hammer, options) {
+    var _options = options || {
+      preventDefault: false
+    };
+
+    if (hammer.Manager) {
+      // This looks like the Hammer constructor.
+      // Overload the constructors with our own.
+      var Hammer = hammer;
+
+      var PropagatingHammer = function(element, options) {
+        var o = Object.create(_options);
+        if (options) Hammer.assign(o, options);
+        return propagating(new Hammer(element, o), o);
+      };
+      Hammer.assign(PropagatingHammer, Hammer);
+
+      PropagatingHammer.Manager = function (element, options) {
+        var o = Object.create(_options);
+        if (options) Hammer.assign(o, options);
+        return propagating(new Hammer.Manager(element, o), o);
+      };
+
+      return PropagatingHammer;
+    }
+
+    // create a wrapper object which will override the functions
+    // `on`, `off`, `destroy`, and `emit` of the hammer instance
+    var wrapper = Object.create(hammer);
+
+    // attach to DOM element
+    var element = hammer.element;
+
+    if(!element.hammer) element.hammer = [];
+    element.hammer.push(wrapper);
+
+    // register an event to catch the start of a gesture and store the
+    // target in a singleton
+    hammer.on('hammer.input', function (event) {
+      if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {
+        event.preventDefault();
+      }
+      if (event.isFirst) {
+        _firstTarget = event.target;
+      }
+    });
+
+    /** @type {Object.<String, Array.<function>>} */
+    wrapper._handlers = {};
+
+    /**
+     * Register a handler for one or multiple events
+     * @param {String} events    A space separated string with events
+     * @param {function} handler A callback function, called as handler(event)
+     * @returns {Hammer.Manager} Returns the hammer instance
+     */
+    wrapper.on = function (events, handler) {
+      // register the handler
+      split(events).forEach(function (event) {
+        var _handlers = wrapper._handlers[event];
+        if (!_handlers) {
+          wrapper._handlers[event] = _handlers = [];
+
+          // register the static, propagated handler
+          hammer.on(event, propagatedHandler);
+        }
+        _handlers.push(handler);
+      });
+
+      return wrapper;
+    };
+
+    /**
+     * Unregister a handler for one or multiple events
+     * @param {String} events      A space separated string with events
+     * @param {function} [handler] Optional. The registered handler. If not
+     *                             provided, all handlers for given events
+     *                             are removed.
+     * @returns {Hammer.Manager}   Returns the hammer instance
+     */
+    wrapper.off = function (events, handler) {
+      // unregister the handler
+      split(events).forEach(function (event) {
+        var _handlers = wrapper._handlers[event];
+        if (_handlers) {
+          _handlers = handler ? _handlers.filter(function (h) {
+            return h !== handler;
+          }) : [];
+
+          if (_handlers.length > 0) {
+            wrapper._handlers[event] = _handlers;
+          }
+          else {
+            // remove static, propagated handler
+            hammer.off(event, propagatedHandler);
+            delete wrapper._handlers[event];
+          }
+        }
+      });
+
+      return wrapper;
+    };
+
+    /**
+     * Emit to the event listeners
+     * @param {string} eventType
+     * @param {Event} event
+     */
+    wrapper.emit = function(eventType, event) {
+      _firstTarget = event.target;
+      hammer.emit(eventType, event);
+    };
+
+    wrapper.destroy = function () {
+      // Detach from DOM element
+      var hammers = hammer.element.hammer;
+      var idx = hammers.indexOf(wrapper);
+      if(idx !== -1) hammers.splice(idx,1);
+      if(!hammers.length) delete hammer.element.hammer;
+
+      // clear all handlers
+      wrapper._handlers = {};
+
+      // call original hammer destroy
+      hammer.destroy();
+    };
+
+    // split a string with space separated words
+    function split(events) {
+      return events.match(/[^ ]+/g);
+    }
+
+    /**
+     * A static event handler, applying event propagation.
+     * @param {Object} event
+     */
+    function propagatedHandler(event) {
+      // let only a single hammer instance handle this event
+      if (event.type !== 'hammer.input') {
+        // it is possible that the same srcEvent is used with multiple hammer events,
+        // we keep track on which events are handled in an object _handled
+        if (!event.srcEvent._handled) {
+          event.srcEvent._handled = {};
+        }
+
+        if (event.srcEvent._handled[event.type]) {
+          return;
+        }
+        else {
+          event.srcEvent._handled[event.type] = true;
+        }
+      }
+
+      // attach a stopPropagation function to the event
+      var stopped = false;
+      event.stopPropagation = function () {
+        stopped = true;
+      };
+
+      //wrap the srcEvent's stopPropagation to also stop hammer propagation:
+      var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);
+      if(typeof srcStop == "function") {
+        event.srcEvent.stopPropagation = function(){
+          srcStop();
+          event.stopPropagation();
+        }
+      }
+
+      // attach firstTarget property to the event
+      event.firstTarget = _firstTarget;
+
+      // propagate over all elements (until stopped)
+      var elem = _firstTarget;
+      while (elem && !stopped) {
+        var elemHammer = elem.hammer;
+        if(elemHammer){
+          var _handlers;
+          for(var k = 0; k < elemHammer.length; k++){
+            _handlers = elemHammer[k]._handlers[event.type];
+            if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {
+              _handlers[i](event);
+            }
+          }
+        }
+        elem = elem.parentNode;
+      }
+    }
+
+    return wrapper;
+  };
+}));
+
+
+/***/ }),
+/* 176 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var __WEBPACK_AMD_DEFINE_RESULT__;/*! Hammer.JS - v2.0.7 - 2016-04-22
+ * http://hammerjs.github.io/
+ *
+ * Copyright (c) 2016 Jorik Tangelder;
+ * Licensed under the MIT license */
+(function(window, document, exportName, undefined) {
+  'use strict';
+
+var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];
+var TEST_ELEMENT = document.createElement('div');
+
+var TYPE_FUNCTION = 'function';
+
+var round = Math.round;
+var abs = Math.abs;
+var now = Date.now;
+
+/**
+ * set a timeout with a given scope
+ * @param {Function} fn
+ * @param {Number} timeout
+ * @param {Object} context
+ * @returns {number}
+ */
+function setTimeoutContext(fn, timeout, context) {
+    return setTimeout(bindFn(fn, context), timeout);
+}
+
+/**
+ * if the argument is an array, we want to execute the fn on each entry
+ * if it aint an array we don't want to do a thing.
+ * this is used by all the methods that accept a single and array argument.
+ * @param {*|Array} arg
+ * @param {String} fn
+ * @param {Object} [context]
+ * @returns {Boolean}
+ */
+function invokeArrayArg(arg, fn, context) {
+    if (Array.isArray(arg)) {
+        each(arg, context[fn], context);
+        return true;
+    }
+    return false;
+}
+
+/**
+ * walk objects and arrays
+ * @param {Object} obj
+ * @param {Function} iterator
+ * @param {Object} context
+ */
+function each(obj, iterator, context) {
+    var i;
+
+    if (!obj) {
+        return;
+    }
+
+    if (obj.forEach) {
+        obj.forEach(iterator, context);
+    } else if (obj.length !== undefined) {
+        i = 0;
+        while (i < obj.length) {
+            iterator.call(context, obj[i], i, obj);
+            i++;
+        }
+    } else {
+        for (i in obj) {
+            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);
+        }
+    }
+}
+
+/**
+ * wrap a method with a deprecation warning and stack trace
+ * @param {Function} method
+ * @param {String} name
+ * @param {String} message
+ * @returns {Function} A new function wrapping the supplied method.
+ */
+function deprecate(method, name, message) {
+    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\n' + message + ' AT \n';
+    return function() {
+        var e = new Error('get-stack-trace');
+        var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '')
+            .replace(/^\s+at\s+/gm, '')
+            .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';
+
+        var log = window.console && (window.console.warn || window.console.log);
+        if (log) {
+            log.call(window.console, deprecationMessage, stack);
+        }
+        return method.apply(this, arguments);
+    };
+}
+
+/**
+ * extend object.
+ * means that properties in dest will be overwritten by the ones in src.
+ * @param {Object} target
+ * @param {...Object} objects_to_assign
+ * @returns {Object} target
+ */
+var assign;
+if (typeof Object.assign !== 'function') {
+    assign = function assign(target) {
+        if (target === undefined || target === null) {
+            throw new TypeError('Cannot convert undefined or null to object');
+        }
+
+        var output = Object(target);
+        for (var index = 1; index < arguments.length; index++) {
+            var source = arguments[index];
+            if (source !== undefined && source !== null) {
+                for (var nextKey in source) {
+                    if (source.hasOwnProperty(nextKey)) {
+                        output[nextKey] = source[nextKey];
+                    }
+                }
+            }
+        }
+        return output;
+    };
+} else {
+    assign = Object.assign;
+}
+
+/**
+ * extend object.
+ * means that properties in dest will be overwritten by the ones in src.
+ * @param {Object} dest
+ * @param {Object} src
+ * @param {Boolean} [merge=false]
+ * @returns {Object} dest
+ */
+var extend = deprecate(function extend(dest, src, merge) {
+    var keys = Object.keys(src);
+    var i = 0;
+    while (i < keys.length) {
+        if (!merge || (merge && dest[keys[i]] === undefined)) {
+            dest[keys[i]] = src[keys[i]];
+        }
+        i++;
+    }
+    return dest;
+}, 'extend', 'Use `assign`.');
+
+/**
+ * merge the values from src in the dest.
+ * means that properties that exist in dest will not be overwritten by src
+ * @param {Object} dest
+ * @param {Object} src
+ * @returns {Object} dest
+ */
+var merge = deprecate(function merge(dest, src) {
+    return extend(dest, src, true);
+}, 'merge', 'Use `assign`.');
+
+/**
+ * simple class inheritance
+ * @param {Function} child
+ * @param {Function} base
+ * @param {Object} [properties]
+ */
+function inherit(child, base, properties) {
+    var baseP = base.prototype,
+        childP;
+
+    childP = child.prototype = Object.create(baseP);
+    childP.constructor = child;
+    childP._super = baseP;
+
+    if (properties) {
+        assign(childP, properties);
+    }
+}
+
+/**
+ * simple function bind
+ * @param {Function} fn
+ * @param {Object} context
+ * @returns {Function}
+ */
+function bindFn(fn, context) {
+    return function boundFn() {
+        return fn.apply(context, arguments);
+    };
+}
+
+/**
+ * let a boolean value also be a function that must return a boolean
+ * this first item in args will be used as the context
+ * @param {Boolean|Function} val
+ * @param {Array} [args]
+ * @returns {Boolean}
+ */
+function boolOrFn(val, args) {
+    if (typeof val == TYPE_FUNCTION) {
+        return val.apply(args ? args[0] || undefined : undefined, args);
+    }
+    return val;
+}
+
+/**
+ * use the val2 when val1 is undefined
+ * @param {*} val1
+ * @param {*} val2
+ * @returns {*}
+ */
+function ifUndefined(val1, val2) {
+    return (val1 === undefined) ? val2 : val1;
+}
+
+/**
+ * addEventListener with multiple events at once
+ * @param {EventTarget} target
+ * @param {String} types
+ * @param {Function} handler
+ */
+function addEventListeners(target, types, handler) {
+    each(splitStr(types), function(type) {
+        target.addEventListener(type, handler, false);
+    });
+}
+
+/**
+ * removeEventListener with multiple events at once
+ * @param {EventTarget} target
+ * @param {String} types
+ * @param {Function} handler
+ */
+function removeEventListeners(target, types, handler) {
+    each(splitStr(types), function(type) {
+        target.removeEventListener(type, handler, false);
+    });
+}
+
+/**
+ * find if a node is in the given parent
+ * @method hasParent
+ * @param {HTMLElement} node
+ * @param {HTMLElement} parent
+ * @return {Boolean} found
+ */
+function hasParent(node, parent) {
+    while (node) {
+        if (node == parent) {
+            return true;
+        }
+        node = node.parentNode;
+    }
+    return false;
+}
+
+/**
+ * small indexOf wrapper
+ * @param {String} str
+ * @param {String} find
+ * @returns {Boolean} found
+ */
+function inStr(str, find) {
+    return str.indexOf(find) > -1;
+}
+
+/**
+ * split string on whitespace
+ * @param {String} str
+ * @returns {Array} words
+ */
+function splitStr(str) {
+    return str.trim().split(/\s+/g);
+}
+
+/**
+ * find if a array contains the object using indexOf or a simple polyFill
+ * @param {Array} src
+ * @param {String} find
+ * @param {String} [findByKey]
+ * @return {Boolean|Number} false when not found, or the index
+ */
+function inArray(src, find, findByKey) {
+    if (src.indexOf && !findByKey) {
+        return src.indexOf(find);
+    } else {
+        var i = 0;
+        while (i < src.length) {
+            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {
+                return i;
+            }
+            i++;
+        }
+        return -1;
+    }
+}
+
+/**
+ * convert array-like objects to real arrays
+ * @param {Object} obj
+ * @returns {Array}
+ */
+function toArray(obj) {
+    return Array.prototype.slice.call(obj, 0);
+}
+
+/**
+ * unique array with objects based on a key (like 'id') or just by the array's value
+ * @param {Array} src [{id:1},{id:2},{id:1}]
+ * @param {String} [key]
+ * @param {Boolean} [sort=False]
+ * @returns {Array} [{id:1},{id:2}]
+ */
+function uniqueArray(src, key, sort) {
+    var results = [];
+    var values = [];
+    var i = 0;
+
+    while (i < src.length) {
+        var val = key ? src[i][key] : src[i];
+        if (inArray(values, val) < 0) {
+            results.push(src[i]);
+        }
+        values[i] = val;
+        i++;
+    }
+
+    if (sort) {
+        if (!key) {
+            results = results.sort();
+        } else {
+            results = results.sort(function sortUniqueArray(a, b) {
+                return a[key] > b[key];
+            });
+        }
+    }
+
+    return results;
+}
+
+/**
+ * get the prefixed property
+ * @param {Object} obj
+ * @param {String} property
+ * @returns {String|Undefined} prefixed
+ */
+function prefixed(obj, property) {
+    var prefix, prop;
+    var camelProp = property[0].toUpperCase() + property.slice(1);
+
+    var i = 0;
+    while (i < VENDOR_PREFIXES.length) {
+        prefix = VENDOR_PREFIXES[i];
+        prop = (prefix) ? prefix + camelProp : property;
+
+        if (prop in obj) {
+            return prop;
+        }
+        i++;
+    }
+    return undefined;
+}
+
+/**
+ * get a unique id
+ * @returns {number} uniqueId
+ */
+var _uniqueId = 1;
+function uniqueId() {
+    return _uniqueId++;
+}
+
+/**
+ * get the window object of an element
+ * @param {HTMLElement} element
+ * @returns {DocumentView|Window}
+ */
+function getWindowForElement(element) {
+    var doc = element.ownerDocument || element;
+    return (doc.defaultView || doc.parentWindow || window);
+}
+
+var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;
+
+var SUPPORT_TOUCH = ('ontouchstart' in window);
+var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;
+var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);
+
+var INPUT_TYPE_TOUCH = 'touch';
+var INPUT_TYPE_PEN = 'pen';
+var INPUT_TYPE_MOUSE = 'mouse';
+var INPUT_TYPE_KINECT = 'kinect';
+
+var COMPUTE_INTERVAL = 25;
+
+var INPUT_START = 1;
+var INPUT_MOVE = 2;
+var INPUT_END = 4;
+var INPUT_CANCEL = 8;
+
+var DIRECTION_NONE = 1;
+var DIRECTION_LEFT = 2;
+var DIRECTION_RIGHT = 4;
+var DIRECTION_UP = 8;
+var DIRECTION_DOWN = 16;
+
+var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;
+var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;
+var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
+
+var PROPS_XY = ['x', 'y'];
+var PROPS_CLIENT_XY = ['clientX', 'clientY'];
+
+/**
+ * create new input type manager
+ * @param {Manager} manager
+ * @param {Function} callback
+ * @returns {Input}
+ * @constructor
+ */
+function Input(manager, callback) {
+    var self = this;
+    this.manager = manager;
+    this.callback = callback;
+    this.element = manager.element;
+    this.target = manager.options.inputTarget;
+
+    // smaller wrapper around the handler, for the scope and the enabled state of the manager,
+    // so when disabled the input events are completely bypassed.
+    this.domHandler = function(ev) {
+        if (boolOrFn(manager.options.enable, [manager])) {
+            self.handler(ev);
+        }
+    };
+
+    this.init();
+
+}
+
+Input.prototype = {
+    /**
+     * should handle the inputEvent data and trigger the callback
+     * @virtual
+     */
+    handler: function() { },
+
+    /**
+     * bind the events
+     */
+    init: function() {
+        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);
+        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);
+        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
+    },
+
+    /**
+     * unbind the events
+     */
+    destroy: function() {
+        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);
+        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);
+        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);
+    }
+};
+
+/**
+ * create new input type manager
+ * called by the Manager constructor
+ * @param {Hammer} manager
+ * @returns {Input}
+ */
+function createInputInstance(manager) {
+    var Type;
+    var inputClass = manager.options.inputClass;
+
+    if (inputClass) {
+        Type = inputClass;
+    } else if (SUPPORT_POINTER_EVENTS) {
+        Type = PointerEventInput;
+    } else if (SUPPORT_ONLY_TOUCH) {
+        Type = TouchInput;
+    } else if (!SUPPORT_TOUCH) {
+        Type = MouseInput;
+    } else {
+        Type = TouchMouseInput;
+    }
+    return new (Type)(manager, inputHandler);
+}
+
+/**
+ * handle input events
+ * @param {Manager} manager
+ * @param {String} eventType
+ * @param {Object} input
+ */
+function inputHandler(manager, eventType, input) {
+    var pointersLen = input.pointers.length;
+    var changedPointersLen = input.changedPointers.length;
+    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));
+    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));
+
+    input.isFirst = !!isFirst;
+    input.isFinal = !!isFinal;
+
+    if (isFirst) {
+        manager.session = {};
+    }
+
+    // source event is the normalized value of the domEvents
+    // like 'touchstart, mouseup, pointerdown'
+    input.eventType = eventType;
+
+    // compute scale, rotation etc
+    computeInputData(manager, input);
+
+    // emit secret event
+    manager.emit('hammer.input', input);
+
+    manager.recognize(input);
+    manager.session.prevInput = input;
+}
+
+/**
+ * extend the data with some usable properties like scale, rotate, velocity etc
+ * @param {Object} manager
+ * @param {Object} input
+ */
+function computeInputData(manager, input) {
+    var session = manager.session;
+    var pointers = input.pointers;
+    var pointersLength = pointers.length;
+
+    // store the first input to calculate the distance and direction
+    if (!session.firstInput) {
+        session.firstInput = simpleCloneInputData(input);
+    }
+
+    // to compute scale and rotation we need to store the multiple touches
+    if (pointersLength > 1 && !session.firstMultiple) {
+        session.firstMultiple = simpleCloneInputData(input);
+    } else if (pointersLength === 1) {
+        session.firstMultiple = false;
+    }
+
+    var firstInput = session.firstInput;
+    var firstMultiple = session.firstMultiple;
+    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;
+
+    var center = input.center = getCenter(pointers);
+    input.timeStamp = now();
+    input.deltaTime = input.timeStamp - firstInput.timeStamp;
+
+    input.angle = getAngle(offsetCenter, center);
+    input.distance = getDistance(offsetCenter, center);
+
+    computeDeltaXY(session, input);
+    input.offsetDirection = getDirection(input.deltaX, input.deltaY);
+
+    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);
+    input.overallVelocityX = overallVelocity.x;
+    input.overallVelocityY = overallVelocity.y;
+    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;
+
+    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;
+    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;
+
+    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >
+        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);
+
+    computeIntervalInputData(session, input);
+
+    // find the correct target
+    var target = manager.element;
+    if (hasParent(input.srcEvent.target, target)) {
+        target = input.srcEvent.target;
+    }
+    input.target = target;
+}
+
+function computeDeltaXY(session, input) {
+    var center = input.center;
+    var offset = session.offsetDelta || {};
+    var prevDelta = session.prevDelta || {};
+    var prevInput = session.prevInput || {};
+
+    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {
+        prevDelta = session.prevDelta = {
+            x: prevInput.deltaX || 0,
+            y: prevInput.deltaY || 0
+        };
+
+        offset = session.offsetDelta = {
+            x: center.x,
+            y: center.y
+        };
+    }
+
+    input.deltaX = prevDelta.x + (center.x - offset.x);
+    input.deltaY = prevDelta.y + (center.y - offset.y);
+}
+
+/**
+ * velocity is calculated every x ms
+ * @param {Object} session
+ * @param {Object} input
+ */
+function computeIntervalInputData(session, input) {
+    var last = session.lastInterval || input,
+        deltaTime = input.timeStamp - last.timeStamp,
+        velocity, velocityX, velocityY, direction;
+
+    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {
+        var deltaX = input.deltaX - last.deltaX;
+        var deltaY = input.deltaY - last.deltaY;
+
+        var v = getVelocity(deltaTime, deltaX, deltaY);
+        velocityX = v.x;
+        velocityY = v.y;
+        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;
+        direction = getDirection(deltaX, deltaY);
+
+        session.lastInterval = input;
+    } else {
+        // use latest velocity info if it doesn't overtake a minimum period
+        velocity = last.velocity;
+        velocityX = last.velocityX;
+        velocityY = last.velocityY;
+        direction = last.direction;
+    }
+
+    input.velocity = velocity;
+    input.velocityX = velocityX;
+    input.velocityY = velocityY;
+    input.direction = direction;
+}
+
+/**
+ * create a simple clone from the input used for storage of firstInput and firstMultiple
+ * @param {Object} input
+ * @returns {Object} clonedInputData
+ */
+function simpleCloneInputData(input) {
+    // make a simple copy of the pointers because we will get a reference if we don't
+    // we only need clientXY for the calculations
+    var pointers = [];
+    var i = 0;
+    while (i < input.pointers.length) {
+        pointers[i] = {
+            clientX: round(input.pointers[i].clientX),
+            clientY: round(input.pointers[i].clientY)
+        };
+        i++;
+    }
+
+    return {
+        timeStamp: now(),
+        pointers: pointers,
+        center: getCenter(pointers),
+        deltaX: input.deltaX,
+        deltaY: input.deltaY
+    };
+}
+
+/**
+ * get the center of all the pointers
+ * @param {Array} pointers
+ * @return {Object} center contains `x` and `y` properties
+ */
+function getCenter(pointers) {
+    var pointersLength = pointers.length;
+
+    // no need to loop when only one touch
+    if (pointersLength === 1) {
+        return {
+            x: round(pointers[0].clientX),
+            y: round(pointers[0].clientY)
+        };
+    }
+
+    var x = 0, y = 0, i = 0;
+    while (i < pointersLength) {
+        x += pointers[i].clientX;
+        y += pointers[i].clientY;
+        i++;
+    }
+
+    return {
+        x: round(x / pointersLength),
+        y: round(y / pointersLength)
+    };
+}
+
+/**
+ * calculate the velocity between two points. unit is in px per ms.
+ * @param {Number} deltaTime
+ * @param {Number} x
+ * @param {Number} y
+ * @return {Object} velocity `x` and `y`
+ */
+function getVelocity(deltaTime, x, y) {
+    return {
+        x: x / deltaTime || 0,
+        y: y / deltaTime || 0
+    };
+}
+
+/**
+ * get the direction between two points
+ * @param {Number} x
+ * @param {Number} y
+ * @return {Number} direction
+ */
+function getDirection(x, y) {
+    if (x === y) {
+        return DIRECTION_NONE;
+    }
+
+    if (abs(x) >= abs(y)) {
+        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;
+    }
+    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;
+}
+
+/**
+ * calculate the absolute distance between two points
+ * @param {Object} p1 {x, y}
+ * @param {Object} p2 {x, y}
+ * @param {Array} [props] containing x and y keys
+ * @return {Number} distance
+ */
+function getDistance(p1, p2, props) {
+    if (!props) {
+        props = PROPS_XY;
+    }
+    var x = p2[props[0]] - p1[props[0]],
+        y = p2[props[1]] - p1[props[1]];
+
+    return Math.sqrt((x * x) + (y * y));
+}
+
+/**
+ * calculate the angle between two coordinates
+ * @param {Object} p1
+ * @param {Object} p2
+ * @param {Array} [props] containing x and y keys
+ * @return {Number} angle
+ */
+function getAngle(p1, p2, props) {
+    if (!props) {
+        props = PROPS_XY;
+    }
+    var x = p2[props[0]] - p1[props[0]],
+        y = p2[props[1]] - p1[props[1]];
+    return Math.atan2(y, x) * 180 / Math.PI;
+}
+
+/**
+ * calculate the rotation degrees between two pointersets
+ * @param {Array} start array of pointers
+ * @param {Array} end array of pointers
+ * @return {Number} rotation
+ */
+function getRotation(start, end) {
+    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);
+}
+
+/**
+ * calculate the scale factor between two pointersets
+ * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out
+ * @param {Array} start array of pointers
+ * @param {Array} end array of pointers
+ * @return {Number} scale
+ */
+function getScale(start, end) {
+    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);
+}
+
+var MOUSE_INPUT_MAP = {
+    mousedown: INPUT_START,
+    mousemove: INPUT_MOVE,
+    mouseup: INPUT_END
+};
+
+var MOUSE_ELEMENT_EVENTS = 'mousedown';
+var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';
+
+/**
+ * Mouse events input
+ * @constructor
+ * @extends Input
+ */
+function MouseInput() {
+    this.evEl = MOUSE_ELEMENT_EVENTS;
+    this.evWin = MOUSE_WINDOW_EVENTS;
+
+    this.pressed = false; // mousedown state
+
+    Input.apply(this, arguments);
+}
+
+inherit(MouseInput, Input, {
+    /**
+     * handle mouse events
+     * @param {Object} ev
+     */
+    handler: function MEhandler(ev) {
+        var eventType = MOUSE_INPUT_MAP[ev.type];
+
+        // on start we want to have the left mouse button down
+        if (eventType & INPUT_START && ev.button === 0) {
+            this.pressed = true;
+        }
+
+        if (eventType & INPUT_MOVE && ev.which !== 1) {
+            eventType = INPUT_END;
+        }
+
+        // mouse must be down
+        if (!this.pressed) {
+            return;
+        }
+
+        if (eventType & INPUT_END) {
+            this.pressed = false;
+        }
+
+        this.callback(this.manager, eventType, {
+            pointers: [ev],
+            changedPointers: [ev],
+            pointerType: INPUT_TYPE_MOUSE,
+            srcEvent: ev
+        });
+    }
+});
+
+var POINTER_INPUT_MAP = {
+    pointerdown: INPUT_START,
+    pointermove: INPUT_MOVE,
+    pointerup: INPUT_END,
+    pointercancel: INPUT_CANCEL,
+    pointerout: INPUT_CANCEL
+};
+
+// in IE10 the pointer types is defined as an enum
+var IE10_POINTER_TYPE_ENUM = {
+    2: INPUT_TYPE_TOUCH,
+    3: INPUT_TYPE_PEN,
+    4: INPUT_TYPE_MOUSE,
+    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816
+};
+
+var POINTER_ELEMENT_EVENTS = 'pointerdown';
+var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';
+
+// IE10 has prefixed support, and case-sensitive
+if (window.MSPointerEvent && !window.PointerEvent) {
+    POINTER_ELEMENT_EVENTS = 'MSPointerDown';
+    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';
+}
+
+/**
+ * Pointer events input
+ * @constructor
+ * @extends Input
+ */
+function PointerEventInput() {
+    this.evEl = POINTER_ELEMENT_EVENTS;
+    this.evWin = POINTER_WINDOW_EVENTS;
+
+    Input.apply(this, arguments);
+
+    this.store = (this.manager.session.pointerEvents = []);
+}
+
+inherit(PointerEventInput, Input, {
+    /**
+     * handle mouse events
+     * @param {Object} ev
+     */
+    handler: function PEhandler(ev) {
+        var store = this.store;
+        var removePointer = false;
+
+        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');
+        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];
+        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;
+
+        var isTouch = (pointerType == INPUT_TYPE_TOUCH);
+
+        // get index of the event in the store
+        var storeIndex = inArray(store, ev.pointerId, 'pointerId');
+
+        // start and mouse must be down
+        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {
+            if (storeIndex < 0) {
+                store.push(ev);
+                storeIndex = store.length - 1;
+            }
+        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
+            removePointer = true;
+        }
+
+        // it not found, so the pointer hasn't been down (so it's probably a hover)
+        if (storeIndex < 0) {
+            return;
+        }
+
+        // update the event in the store
+        store[storeIndex] = ev;
+
+        this.callback(this.manager, eventType, {
+            pointers: store,
+            changedPointers: [ev],
+            pointerType: pointerType,
+            srcEvent: ev
+        });
+
+        if (removePointer) {
+            // remove from the store
+            store.splice(storeIndex, 1);
+        }
+    }
+});
+
+var SINGLE_TOUCH_INPUT_MAP = {
+    touchstart: INPUT_START,
+    touchmove: INPUT_MOVE,
+    touchend: INPUT_END,
+    touchcancel: INPUT_CANCEL
+};
+
+var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';
+var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';
+
+/**
+ * Touch events input
+ * @constructor
+ * @extends Input
+ */
+function SingleTouchInput() {
+    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;
+    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;
+    this.started = false;
+
+    Input.apply(this, arguments);
+}
+
+inherit(SingleTouchInput, Input, {
+    handler: function TEhandler(ev) {
+        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];
+
+        // should we handle the touch events?
+        if (type === INPUT_START) {
+            this.started = true;
+        }
+
+        if (!this.started) {
+            return;
+        }
+
+        var touches = normalizeSingleTouches.call(this, ev, type);
+
+        // when done, reset the started state
+        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {
+            this.started = false;
+        }
+
+        this.callback(this.manager, type, {
+            pointers: touches[0],
+            changedPointers: touches[1],
+            pointerType: INPUT_TYPE_TOUCH,
+            srcEvent: ev
+        });
+    }
+});
+
+/**
+ * @this {TouchInput}
+ * @param {Object} ev
+ * @param {Number} type flag
+ * @returns {undefined|Array} [all, changed]
+ */
+function normalizeSingleTouches(ev, type) {
+    var all = toArray(ev.touches);
+    var changed = toArray(ev.changedTouches);
+
+    if (type & (INPUT_END | INPUT_CANCEL)) {
+        all = uniqueArray(all.concat(changed), 'identifier', true);
+    }
+
+    return [all, changed];
+}
+
+var TOUCH_INPUT_MAP = {
+    touchstart: INPUT_START,
+    touchmove: INPUT_MOVE,
+    touchend: INPUT_END,
+    touchcancel: INPUT_CANCEL
+};
+
+var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';
+
+/**
+ * Multi-user touch events input
+ * @constructor
+ * @extends Input
+ */
+function TouchInput() {
+    this.evTarget = TOUCH_TARGET_EVENTS;
+    this.targetIds = {};
+
+    Input.apply(this, arguments);
+}
+
+inherit(TouchInput, Input, {
+    handler: function MTEhandler(ev) {
+        var type = TOUCH_INPUT_MAP[ev.type];
+        var touches = getTouches.call(this, ev, type);
+        if (!touches) {
+            return;
+        }
+
+        this.callback(this.manager, type, {
+            pointers: touches[0],
+            changedPointers: touches[1],
+            pointerType: INPUT_TYPE_TOUCH,
+            srcEvent: ev
+        });
+    }
+});
+
+/**
+ * @this {TouchInput}
+ * @param {Object} ev
+ * @param {Number} type flag
+ * @returns {undefined|Array} [all, changed]
+ */
+function getTouches(ev, type) {
+    var allTouches = toArray(ev.touches);
+    var targetIds = this.targetIds;
+
+    // when there is only one touch, the process can be simplified
+    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
+        targetIds[allTouches[0].identifier] = true;
+        return [allTouches, allTouches];
+    }
+
+    var i,
+        targetTouches,
+        changedTouches = toArray(ev.changedTouches),
+        changedTargetTouches = [],
+        target = this.target;
+
+    // get target touches from touches
+    targetTouches = allTouches.filter(function(touch) {
+        return hasParent(touch.target, target);
+    });
+
+    // collect touches
+    if (type === INPUT_START) {
+        i = 0;
+        while (i < targetTouches.length) {
+            targetIds[targetTouches[i].identifier] = true;
+            i++;
+        }
+    }
+
+    // filter changed touches to only contain touches that exist in the collected target ids
+    i = 0;
+    while (i < changedTouches.length) {
+        if (targetIds[changedTouches[i].identifier]) {
+            changedTargetTouches.push(changedTouches[i]);
+        }
+
+        // cleanup removed touches
+        if (type & (INPUT_END | INPUT_CANCEL)) {
+            delete targetIds[changedTouches[i].identifier];
+        }
+        i++;
+    }
+
+    if (!changedTargetTouches.length) {
+        return;
+    }
+
+    return [
+        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
+        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
+        changedTargetTouches
+    ];
+}
+
+/**
+ * Combined touch and mouse input
+ *
+ * Touch has a higher priority then mouse, and while touching no mouse events are allowed.
+ * This because touch devices also emit mouse events while doing a touch.
+ *
+ * @constructor
+ * @extends Input
+ */
+
+var DEDUP_TIMEOUT = 2500;
+var DEDUP_DISTANCE = 25;
+
+function TouchMouseInput() {
+    Input.apply(this, arguments);
+
+    var handler = bindFn(this.handler, this);
+    this.touch = new TouchInput(this.manager, handler);
+    this.mouse = new MouseInput(this.manager, handler);
+
+    this.primaryTouch = null;
+    this.lastTouches = [];
+}
+
+inherit(TouchMouseInput, Input, {
+    /**
+     * handle mouse and touch events
+     * @param {Hammer} manager
+     * @param {String} inputEvent
+     * @param {Object} inputData
+     */
+    handler: function TMEhandler(manager, inputEvent, inputData) {
+        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),
+            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);
+
+        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {
+            return;
+        }
+
+        // when we're in a touch event, record touches to  de-dupe synthetic mouse event
+        if (isTouch) {
+            recordTouches.call(this, inputEvent, inputData);
+        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {
+            return;
+        }
+
+        this.callback(manager, inputEvent, inputData);
+    },
+
+    /**
+     * remove the event listeners
+     */
+    destroy: function destroy() {
+        this.touch.destroy();
+        this.mouse.destroy();
+    }
+});
+
+function recordTouches(eventType, eventData) {
+    if (eventType & INPUT_START) {
+        this.primaryTouch = eventData.changedPointers[0].identifier;
+        setLastTouch.call(this, eventData);
+    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {
+        setLastTouch.call(this, eventData);
+    }
+}
+
+function setLastTouch(eventData) {
+    var touch = eventData.changedPointers[0];
+
+    if (touch.identifier === this.primaryTouch) {
+        var lastTouch = {x: touch.clientX, y: touch.clientY};
+        this.lastTouches.push(lastTouch);
+        var lts = this.lastTouches;
+        var removeLastTouch = function() {
+            var i = lts.indexOf(lastTouch);
+            if (i > -1) {
+                lts.splice(i, 1);
+            }
+        };
+        setTimeout(removeLastTouch, DEDUP_TIMEOUT);
+    }
+}
+
+function isSyntheticEvent(eventData) {
+    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;
+    for (var i = 0; i < this.lastTouches.length; i++) {
+        var t = this.lastTouches[i];
+        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
+        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {
+            return true;
+        }
+    }
+    return false;
+}
+
+var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');
+var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;
+
+// magical touchAction value
+var TOUCH_ACTION_COMPUTE = 'compute';
+var TOUCH_ACTION_AUTO = 'auto';
+var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented
+var TOUCH_ACTION_NONE = 'none';
+var TOUCH_ACTION_PAN_X = 'pan-x';
+var TOUCH_ACTION_PAN_Y = 'pan-y';
+var TOUCH_ACTION_MAP = getTouchActionProps();
+
+/**
+ * Touch Action
+ * sets the touchAction property or uses the js alternative
+ * @param {Manager} manager
+ * @param {String} value
+ * @constructor
+ */
+function TouchAction(manager, value) {
+    this.manager = manager;
+    this.set(value);
+}
+
+TouchAction.prototype = {
+    /**
+     * set the touchAction value on the element or enable the polyfill
+     * @param {String} value
+     */
+    set: function(value) {
+        // find out the touch-action by the event handlers
+        if (value == TOUCH_ACTION_COMPUTE) {
+            value = this.compute();
+        }
+
+        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {
+            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;
+        }
+        this.actions = value.toLowerCase().trim();
+    },
+
+    /**
+     * just re-set the touchAction value
+     */
+    update: function() {
+        this.set(this.manager.options.touchAction);
+    },
+
+    /**
+     * compute the value for the touchAction property based on the recognizer's settings
+     * @returns {String} value
+     */
+    compute: function() {
+        var actions = [];
+        each(this.manager.recognizers, function(recognizer) {
+            if (boolOrFn(recognizer.options.enable, [recognizer])) {
+                actions = actions.concat(recognizer.getTouchAction());
+            }
+        });
+        return cleanTouchActions(actions.join(' '));
+    },
+
+    /**
+     * this method is called on each input cycle and provides the preventing of the browser behavior
+     * @param {Object} input
+     */
+    preventDefaults: function(input) {
+        var srcEvent = input.srcEvent;
+        var direction = input.offsetDirection;
+
+        // if the touch action did prevented once this session
+        if (this.manager.session.prevented) {
+            srcEvent.preventDefault();
+            return;
+        }
+
+        var actions = this.actions;
+        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];
+        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];
+        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];
+
+        if (hasNone) {
+            //do not prevent defaults if this is a tap gesture
+
+            var isTapPointer = input.pointers.length === 1;
+            var isTapMovement = input.distance < 2;
+            var isTapTouchTime = input.deltaTime < 250;
+
+            if (isTapPointer && isTapMovement && isTapTouchTime) {
+                return;
+            }
+        }
+
+        if (hasPanX && hasPanY) {
+            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent
+            return;
+        }
+
+        if (hasNone ||
+            (hasPanY && direction & DIRECTION_HORIZONTAL) ||
+            (hasPanX && direction & DIRECTION_VERTICAL)) {
+            return this.preventSrc(srcEvent);
+        }
+    },
+
+    /**
+     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)
+     * @param {Object} srcEvent
+     */
+    preventSrc: function(srcEvent) {
+        this.manager.session.prevented = true;
+        srcEvent.preventDefault();
+    }
+};
+
+/**
+ * when the touchActions are collected they are not a valid value, so we need to clean things up. *
+ * @param {String} actions
+ * @returns {*}
+ */
+function cleanTouchActions(actions) {
+    // none
+    if (inStr(actions, TOUCH_ACTION_NONE)) {
+        return TOUCH_ACTION_NONE;
+    }
+
+    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);
+    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);
+
+    // if both pan-x and pan-y are set (different recognizers
+    // for different directions, e.g. horizontal pan but vertical swipe?)
+    // we need none (as otherwise with pan-x pan-y combined none of these
+    // recognizers will work, since the browser would handle all panning
+    if (hasPanX && hasPanY) {
+        return TOUCH_ACTION_NONE;
+    }
+
+    // pan-x OR pan-y
+    if (hasPanX || hasPanY) {
+        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;
+    }
+
+    // manipulation
+    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {
+        return TOUCH_ACTION_MANIPULATION;
+    }
+
+    return TOUCH_ACTION_AUTO;
+}
+
+function getTouchActionProps() {
+    if (!NATIVE_TOUCH_ACTION) {
+        return false;
+    }
+    var touchMap = {};
+    var cssSupports = window.CSS && window.CSS.supports;
+    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {
+
+        // If css.supports is not supported but there is native touch-action assume it supports
+        // all values. This is the case for IE 10 and 11.
+        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;
+    });
+    return touchMap;
+}
+
+/**
+ * Recognizer flow explained; *
+ * All recognizers have the initial state of POSSIBLE when a input session starts.
+ * The definition of a input session is from the first input until the last input, with all it's movement in it. *
+ * Example session for mouse-input: mousedown -> mousemove -> mouseup
+ *
+ * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed
+ * which determines with state it should be.
+ *
+ * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to
+ * POSSIBLE to give it another change on the next cycle.
+ *
+ *               Possible
+ *                  |
+ *            +-----+---------------+
+ *            |                     |
+ *      +-----+-----+               |
+ *      |           |               |
+ *   Failed      Cancelled          |
+ *                          +-------+------+
+ *                          |              |
+ *                      Recognized       Began
+ *                                         |
+ *                                      Changed
+ *                                         |
+ *                                  Ended/Recognized
+ */
+var STATE_POSSIBLE = 1;
+var STATE_BEGAN = 2;
+var STATE_CHANGED = 4;
+var STATE_ENDED = 8;
+var STATE_RECOGNIZED = STATE_ENDED;
+var STATE_CANCELLED = 16;
+var STATE_FAILED = 32;
+
+/**
+ * Recognizer
+ * Every recognizer needs to extend from this class.
+ * @constructor
+ * @param {Object} options
+ */
+function Recognizer(options) {
+    this.options = assign({}, this.defaults, options || {});
+
+    this.id = uniqueId();
+
+    this.manager = null;
+
+    // default is enable true
+    this.options.enable = ifUndefined(this.options.enable, true);
+
+    this.state = STATE_POSSIBLE;
+
+    this.simultaneous = {};
+    this.requireFail = [];
+}
+
+Recognizer.prototype = {
+    /**
+     * @virtual
+     * @type {Object}
+     */
+    defaults: {},
+
+    /**
+     * set options
+     * @param {Object} options
+     * @return {Recognizer}
+     */
+    set: function(options) {
+        assign(this.options, options);
+
+        // also update the touchAction, in case something changed about the directions/enabled state
+        this.manager && this.manager.touchAction.update();
+        return this;
+    },
+
+    /**
+     * recognize simultaneous with an other recognizer.
+     * @param {Recognizer} otherRecognizer
+     * @returns {Recognizer} this
+     */
+    recognizeWith: function(otherRecognizer) {
+        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {
+            return this;
+        }
+
+        var simultaneous = this.simultaneous;
+        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
+        if (!simultaneous[otherRecognizer.id]) {
+            simultaneous[otherRecognizer.id] = otherRecognizer;
+            otherRecognizer.recognizeWith(this);
+        }
+        return this;
+    },
+
+    /**
+     * drop the simultaneous link. it doesnt remove the link on the other recognizer.
+     * @param {Recognizer} otherRecognizer
+     * @returns {Recognizer} this
+     */
+    dropRecognizeWith: function(otherRecognizer) {
+        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {
+            return this;
+        }
+
+        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
+        delete this.simultaneous[otherRecognizer.id];
+        return this;
+    },
+
+    /**
+     * recognizer can only run when an other is failing
+     * @param {Recognizer} otherRecognizer
+     * @returns {Recognizer} this
+     */
+    requireFailure: function(otherRecognizer) {
+        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
+            return this;
+        }
+
+        var requireFail = this.requireFail;
+        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
+        if (inArray(requireFail, otherRecognizer) === -1) {
+            requireFail.push(otherRecognizer);
+            otherRecognizer.requireFailure(this);
+        }
+        return this;
+    },
+
+    /**
+     * drop the requireFailure link. it does not remove the link on the other recognizer.
+     * @param {Recognizer} otherRecognizer
+     * @returns {Recognizer} this
+     */
+    dropRequireFailure: function(otherRecognizer) {
+        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {
+            return this;
+        }
+
+        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
+        var index = inArray(this.requireFail, otherRecognizer);
+        if (index > -1) {
+            this.requireFail.splice(index, 1);
+        }
+        return this;
+    },
+
+    /**
+     * has require failures boolean
+     * @returns {boolean}
+     */
+    hasRequireFailures: function() {
+        return this.requireFail.length > 0;
+    },
+
+    /**
+     * if the recognizer can recognize simultaneous with an other recognizer
+     * @param {Recognizer} otherRecognizer
+     * @returns {Boolean}
+     */
+    canRecognizeWith: function(otherRecognizer) {
+        return !!this.simultaneous[otherRecognizer.id];
+    },
+
+    /**
+     * You should use `tryEmit` instead of `emit` directly to check
+     * that all the needed recognizers has failed before emitting.
+     * @param {Object} input
+     */
+    emit: function(input) {
+        var self = this;
+        var state = this.state;
+
+        function emit(event) {
+            self.manager.emit(event, input);
+        }
+
+        // 'panstart' and 'panmove'
+        if (state < STATE_ENDED) {
+            emit(self.options.event + stateStr(state));
+        }
+
+        emit(self.options.event); // simple 'eventName' events
+
+        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)
+            emit(input.additionalEvent);
+        }
+
+        // panend and pancancel
+        if (state >= STATE_ENDED) {
+            emit(self.options.event + stateStr(state));
+        }
+    },
+
+    /**
+     * Check that all the require failure recognizers has failed,
+     * if true, it emits a gesture event,
+     * otherwise, setup the state to FAILED.
+     * @param {Object} input
+     */
+    tryEmit: function(input) {
+        if (this.canEmit()) {
+            return this.emit(input);
+        }
+        // it's failing anyway
+        this.state = STATE_FAILED;
+    },
+
+    /**
+     * can we emit?
+     * @returns {boolean}
+     */
+    canEmit: function() {
+        var i = 0;
+        while (i < this.requireFail.length) {
+            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {
+                return false;
+            }
+            i++;
+        }
+        return true;
+    },
+
+    /**
+     * update the recognizer
+     * @param {Object} inputData
+     */
+    recognize: function(inputData) {
+        // make a new copy of the inputData
+        // so we can change the inputData without messing up the other recognizers
+        var inputDataClone = assign({}, inputData);
+
+        // is is enabled and allow recognizing?
+        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {
+            this.reset();
+            this.state = STATE_FAILED;
+            return;
+        }
+
+        // reset when we've reached the end
+        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {
+            this.state = STATE_POSSIBLE;
+        }
+
+        this.state = this.process(inputDataClone);
+
+        // the recognizer has recognized a gesture
+        // so trigger an event
+        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {
+            this.tryEmit(inputDataClone);
+        }
+    },
+
+    /**
+     * return the state of the recognizer
+     * the actual recognizing happens in this method
+     * @virtual
+     * @param {Object} inputData
+     * @returns {Const} STATE
+     */
+    process: function(inputData) { }, // jshint ignore:line
+
+    /**
+     * return the preferred touch-action
+     * @virtual
+     * @returns {Array}
+     */
+    getTouchAction: function() { },
+
+    /**
+     * called when the gesture isn't allowed to recognize
+     * like when another is being recognized or it is disabled
+     * @virtual
+     */
+    reset: function() { }
+};
+
+/**
+ * get a usable string, used as event postfix
+ * @param {Const} state
+ * @returns {String} state
+ */
+function stateStr(state) {
+    if (state & STATE_CANCELLED) {
+        return 'cancel';
+    } else if (state & STATE_ENDED) {
+        return 'end';
+    } else if (state & STATE_CHANGED) {
+        return 'move';
+    } else if (state & STATE_BEGAN) {
+        return 'start';
+    }
+    return '';
+}
+
+/**
+ * direction cons to string
+ * @param {Const} direction
+ * @returns {String}
+ */
+function directionStr(direction) {
+    if (direction == DIRECTION_DOWN) {
+        return 'down';
+    } else if (direction == DIRECTION_UP) {
+        return 'up';
+    } else if (direction == DIRECTION_LEFT) {
+        return 'left';
+    } else if (direction == DIRECTION_RIGHT) {
+        return 'right';
+    }
+    return '';
+}
+
+/**
+ * get a recognizer by name if it is bound to a manager
+ * @param {Recognizer|String} otherRecognizer
+ * @param {Recognizer} recognizer
+ * @returns {Recognizer}
+ */
+function getRecognizerByNameIfManager(otherRecognizer, recognizer) {
+    var manager = recognizer.manager;
+    if (manager) {
+        return manager.get(otherRecognizer);
+    }
+    return otherRecognizer;
+}
+
+/**
+ * This recognizer is just used as a base for the simple attribute recognizers.
+ * @constructor
+ * @extends Recognizer
+ */
+function AttrRecognizer() {
+    Recognizer.apply(this, arguments);
+}
+
+inherit(AttrRecognizer, Recognizer, {
+    /**
+     * @namespace
+     * @memberof AttrRecognizer
+     */
+    defaults: {
+        /**
+         * @type {Number}
+         * @default 1
+         */
+        pointers: 1
+    },
+
+    /**
+     * Used to check if it the recognizer receives valid input, like input.distance > 10.
+     * @memberof AttrRecognizer
+     * @param {Object} input
+     * @returns {Boolean} recognized
+     */
+    attrTest: function(input) {
+        var optionPointers = this.options.pointers;
+        return optionPointers === 0 || input.pointers.length === optionPointers;
+    },
+
+    /**
+     * Process the input and return the state for the recognizer
+     * @memberof AttrRecognizer
+     * @param {Object} input
+     * @returns {*} State
+     */
+    process: function(input) {
+        var state = this.state;
+        var eventType = input.eventType;
+
+        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);
+        var isValid = this.attrTest(input);
+
+        // on cancel input and we've recognized before, return STATE_CANCELLED
+        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {
+            return state | STATE_CANCELLED;
+        } else if (isRecognized || isValid) {
+            if (eventType & INPUT_END) {
+                return state | STATE_ENDED;
+            } else if (!(state & STATE_BEGAN)) {
+                return STATE_BEGAN;
+            }
+            return state | STATE_CHANGED;
+        }
+        return STATE_FAILED;
+    }
+});
+
+/**
+ * Pan
+ * Recognized when the pointer is down and moved in the allowed direction.
+ * @constructor
+ * @extends AttrRecognizer
+ */
+function PanRecognizer() {
+    AttrRecognizer.apply(this, arguments);
+
+    this.pX = null;
+    this.pY = null;
+}
+
+inherit(PanRecognizer, AttrRecognizer, {
+    /**
+     * @namespace
+     * @memberof PanRecognizer
+     */
+    defaults: {
+        event: 'pan',
+        threshold: 10,
+        pointers: 1,
+        direction: DIRECTION_ALL
+    },
+
+    getTouchAction: function() {
+        var direction = this.options.direction;
+        var actions = [];
+        if (direction & DIRECTION_HORIZONTAL) {
+            actions.push(TOUCH_ACTION_PAN_Y);
+        }
+        if (direction & DIRECTION_VERTICAL) {
+            actions.push(TOUCH_ACTION_PAN_X);
+        }
+        return actions;
+    },
+
+    directionTest: function(input) {
+        var options = this.options;
+        var hasMoved = true;
+        var distance = input.distance;
+        var direction = input.direction;
+        var x = input.deltaX;
+        var y = input.deltaY;
+
+        // lock to axis?
+        if (!(direction & options.direction)) {
+            if (options.direction & DIRECTION_HORIZONTAL) {
+                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;
+                hasMoved = x != this.pX;
+                distance = Math.abs(input.deltaX);
+            } else {
+                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;
+                hasMoved = y != this.pY;
+                distance = Math.abs(input.deltaY);
+            }
+        }
+        input.direction = direction;
+        return hasMoved && distance > options.threshold && direction & options.direction;
+    },
+
+    attrTest: function(input) {
+        return AttrRecognizer.prototype.attrTest.call(this, input) &&
+            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));
+    },
+
+    emit: function(input) {
+
+        this.pX = input.deltaX;
+        this.pY = input.deltaY;
+
+        var direction = directionStr(input.direction);
+
+        if (direction) {
+            input.additionalEvent = this.options.event + direction;
+        }
+        this._super.emit.call(this, input);
+    }
+});
+
+/**
+ * Pinch
+ * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).
+ * @constructor
+ * @extends AttrRecognizer
+ */
+function PinchRecognizer() {
+    AttrRecognizer.apply(this, arguments);
+}
+
+inherit(PinchRecognizer, AttrRecognizer, {
+    /**
+     * @namespace
+     * @memberof PinchRecognizer
+     */
+    defaults: {
+        event: 'pinch',
+        threshold: 0,
+        pointers: 2
+    },
+
+    getTouchAction: function() {
+        return [TOUCH_ACTION_NONE];
+    },
+
+    attrTest: function(input) {
+        return this._super.attrTest.call(this, input) &&
+            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);
+    },
+
+    emit: function(input) {
+        if (input.scale !== 1) {
+            var inOut = input.scale < 1 ? 'in' : 'out';
+            input.additionalEvent = this.options.event + inOut;
+        }
+        this._super.emit.call(this, input);
+    }
+});
+
+/**
+ * Press
+ * Recognized when the pointer is down for x ms without any movement.
+ * @constructor
+ * @extends Recognizer
+ */
+function PressRecognizer() {
+    Recognizer.apply(this, arguments);
+
+    this._timer = null;
+    this._input = null;
+}
+
+inherit(PressRecognizer, Recognizer, {
+    /**
+     * @namespace
+     * @memberof PressRecognizer
+     */
+    defaults: {
+        event: 'press',
+        pointers: 1,
+        time: 251, // minimal time of the pointer to be pressed
+        threshold: 9 // a minimal movement is ok, but keep it low
+    },
+
+    getTouchAction: function() {
+        return [TOUCH_ACTION_AUTO];
+    },
+
+    process: function(input) {
+        var options = this.options;
+        var validPointers = input.pointers.length === options.pointers;
+        var validMovement = input.distance < options.threshold;
+        var validTime = input.deltaTime > options.time;
+
+        this._input = input;
+
+        // we only allow little movement
+        // and we've reached an end event, so a tap is possible
+        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {
+            this.reset();
+        } else if (input.eventType & INPUT_START) {
+            this.reset();
+            this._timer = setTimeoutContext(function() {
+                this.state = STATE_RECOGNIZED;
+                this.tryEmit();
+            }, options.time, this);
+        } else if (input.eventType & INPUT_END) {
+            return STATE_RECOGNIZED;
+        }
+        return STATE_FAILED;
+    },
+
+    reset: function() {
+        clearTimeout(this._timer);
+    },
+
+    emit: function(input) {
+        if (this.state !== STATE_RECOGNIZED) {
+            return;
+        }
+
+        if (input && (input.eventType & INPUT_END)) {
+            this.manager.emit(this.options.event + 'up', input);
+        } else {
+            this._input.timeStamp = now();
+            this.manager.emit(this.options.event, this._input);
+        }
+    }
+});
+
+/**
+ * Rotate
+ * Recognized when two or more pointer are moving in a circular motion.
+ * @constructor
+ * @extends AttrRecognizer
+ */
+function RotateRecognizer() {
+    AttrRecognizer.apply(this, arguments);
+}
+
+inherit(RotateRecognizer, AttrRecognizer, {
+    /**
+     * @namespace
+     * @memberof RotateRecognizer
+     */
+    defaults: {
+        event: 'rotate',
+        threshold: 0,
+        pointers: 2
+    },
+
+    getTouchAction: function() {
+        return [TOUCH_ACTION_NONE];
+    },
+
+    attrTest: function(input) {
+        return this._super.attrTest.call(this, input) &&
+            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);
+    }
+});
+
+/**
+ * Swipe
+ * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.
+ * @constructor
+ * @extends AttrRecognizer
+ */
+function SwipeRecognizer() {
+    AttrRecognizer.apply(this, arguments);
+}
+
+inherit(SwipeRecognizer, AttrRecognizer, {
+    /**
+     * @namespace
+     * @memberof SwipeRecognizer
+     */
+    defaults: {
+        event: 'swipe',
+        threshold: 10,
+        velocity: 0.3,
+        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,
+        pointers: 1
+    },
+
+    getTouchAction: function() {
+        return PanRecognizer.prototype.getTouchAction.call(this);
+    },
+
+    attrTest: function(input) {
+        var direction = this.options.direction;
+        var velocity;
+
+        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {
+            velocity = input.overallVelocity;
+        } else if (direction & DIRECTION_HORIZONTAL) {
+            velocity = input.overallVelocityX;
+        } else if (direction & DIRECTION_VERTICAL) {
+            velocity = input.overallVelocityY;
+        }
+
+        return this._super.attrTest.call(this, input) &&
+            direction & input.offsetDirection &&
+            input.distance > this.options.threshold &&
+            input.maxPointers == this.options.pointers &&
+            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;
+    },
+
+    emit: function(input) {
+        var direction = directionStr(input.offsetDirection);
+        if (direction) {
+            this.manager.emit(this.options.event + direction, input);
+        }
+
+        this.manager.emit(this.options.event, input);
+    }
+});
+
+/**
+ * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur
+ * between the given interval and position. The delay option can be used to recognize multi-taps without firing
+ * a single tap.
+ *
+ * The eventData from the emitted event contains the property `tapCount`, which contains the amount of
+ * multi-taps being recognized.
+ * @constructor
+ * @extends Recognizer
+ */
+function TapRecognizer() {
+    Recognizer.apply(this, arguments);
+
+    // previous time and center,
+    // used for tap counting
+    this.pTime = false;
+    this.pCenter = false;
+
+    this._timer = null;
+    this._input = null;
+    this.count = 0;
+}
+
+inherit(TapRecognizer, Recognizer, {
+    /**
+     * @namespace
+     * @memberof PinchRecognizer
+     */
+    defaults: {
+        event: 'tap',
+        pointers: 1,
+        taps: 1,
+        interval: 300, // max time between the multi-tap taps
+        time: 250, // max time of the pointer to be down (like finger on the screen)
+        threshold: 9, // a minimal movement is ok, but keep it low
+        posThreshold: 10 // a multi-tap can be a bit off the initial position
+    },
+
+    getTouchAction: function() {
+        return [TOUCH_ACTION_MANIPULATION];
+    },
+
+    process: function(input) {
+        var options = this.options;
+
+        var validPointers = input.pointers.length === options.pointers;
+        var validMovement = input.distance < options.threshold;
+        var validTouchTime = input.deltaTime < options.time;
+
+        this.reset();
+
+        if ((input.eventType & INPUT_START) && (this.count === 0)) {
+            return this.failTimeout();
+        }
+
+        // we only allow little movement
+        // and we've reached an end event, so a tap is possible
+        if (validMovement && validTouchTime && validPointers) {
+            if (input.eventType != INPUT_END) {
+                return this.failTimeout();
+            }
+
+            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;
+            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;
+
+            this.pTime = input.timeStamp;
+            this.pCenter = input.center;
+
+            if (!validMultiTap || !validInterval) {
+                this.count = 1;
+            } else {
+                this.count += 1;
+            }
+
+            this._input = input;
+
+            // if tap count matches we have recognized it,
+            // else it has began recognizing...
+            var tapCount = this.count % options.taps;
+            if (tapCount === 0) {
+                // no failing requirements, immediately trigger the tap event
+                // or wait as long as the multitap interval to trigger
+                if (!this.hasRequireFailures()) {
+                    return STATE_RECOGNIZED;
+                } else {
+                    this._timer = setTimeoutContext(function() {
+                        this.state = STATE_RECOGNIZED;
+                        this.tryEmit();
+                    }, options.interval, this);
+                    return STATE_BEGAN;
+                }
+            }
+        }
+        return STATE_FAILED;
+    },
+
+    failTimeout: function() {
+        this._timer = setTimeoutContext(function() {
+            this.state = STATE_FAILED;
+        }, this.options.interval, this);
+        return STATE_FAILED;
+    },
+
+    reset: function() {
+        clearTimeout(this._timer);
+    },
+
+    emit: function() {
+        if (this.state == STATE_RECOGNIZED) {
+            this._input.tapCount = this.count;
+            this.manager.emit(this.options.event, this._input);
+        }
+    }
+});
+
+/**
+ * Simple way to create a manager with a default set of recognizers.
+ * @param {HTMLElement} element
+ * @param {Object} [options]
+ * @constructor
+ */
+function Hammer(element, options) {
+    options = options || {};
+    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);
+    return new Manager(element, options);
+}
+
+/**
+ * @const {string}
+ */
+Hammer.VERSION = '2.0.7';
+
+/**
+ * default settings
+ * @namespace
+ */
+Hammer.defaults = {
+    /**
+     * set if DOM events are being triggered.
+     * But this is slower and unused by simple implementations, so disabled by default.
+     * @type {Boolean}
+     * @default false
+     */
+    domEvents: false,
+
+    /**
+     * The value for the touchAction property/fallback.
+     * When set to `compute` it will magically set the correct value based on the added recognizers.
+     * @type {String}
+     * @default compute
+     */
+    touchAction: TOUCH_ACTION_COMPUTE,
+
+    /**
+     * @type {Boolean}
+     * @default true
+     */
+    enable: true,
+
+    /**
+     * EXPERIMENTAL FEATURE -- can be removed/changed
+     * Change the parent input target element.
+     * If Null, then it is being set the to main element.
+     * @type {Null|EventTarget}
+     * @default null
+     */
+    inputTarget: null,
+
+    /**
+     * force an input class
+     * @type {Null|Function}
+     * @default null
+     */
+    inputClass: null,
+
+    /**
+     * Default recognizer setup when calling `Hammer()`
+     * When creating a new Manager these will be skipped.
+     * @type {Array}
+     */
+    preset: [
+        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]
+        [RotateRecognizer, {enable: false}],
+        [PinchRecognizer, {enable: false}, ['rotate']],
+        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],
+        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],
+        [TapRecognizer],
+        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],
+        [PressRecognizer]
+    ],
+
+    /**
+     * Some CSS properties can be used to improve the working of Hammer.
+     * Add them to this method and they will be set when creating a new Manager.
+     * @namespace
+     */
+    cssProps: {
+        /**
+         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.
+         * @type {String}
+         * @default 'none'
+         */
+        userSelect: 'none',
+
+        /**
+         * Disable the Windows Phone grippers when pressing an element.
+         * @type {String}
+         * @default 'none'
+         */
+        touchSelect: 'none',
+
+        /**
+         * Disables the default callout shown when you touch and hold a touch target.
+         * On iOS, when you touch and hold a touch target such as a link, Safari displays
+         * a callout containing information about the link. This property allows you to disable that callout.
+         * @type {String}
+         * @default 'none'
+         */
+        touchCallout: 'none',
+
+        /**
+         * Specifies whether zooming is enabled. Used by IE10>
+         * @type {String}
+         * @default 'none'
+         */
+        contentZooming: 'none',
+
+        /**
+         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.
+         * @type {String}
+         * @default 'none'
+         */
+        userDrag: 'none',
+
+        /**
+         * Overrides the highlight color shown when the user taps a link or a JavaScript
+         * clickable element in iOS. This property obeys the alpha value, if specified.
+         * @type {String}
+         * @default 'rgba(0,0,0,0)'
+         */
+        tapHighlightColor: 'rgba(0,0,0,0)'
+    }
+};
+
+var STOP = 1;
+var FORCED_STOP = 2;
+
+/**
+ * Manager
+ * @param {HTMLElement} element
+ * @param {Object} [options]
+ * @constructor
+ */
+function Manager(element, options) {
+    this.options = assign({}, Hammer.defaults, options || {});
+
+    this.options.inputTarget = this.options.inputTarget || element;
+
+    this.handlers = {};
+    this.session = {};
+    this.recognizers = [];
+    this.oldCssProps = {};
+
+    this.element = element;
+    this.input = createInputInstance(this);
+    this.touchAction = new TouchAction(this, this.options.touchAction);
+
+    toggleCssProps(this, true);
+
+    each(this.options.recognizers, function(item) {
+        var recognizer = this.add(new (item[0])(item[1]));
+        item[2] && recognizer.recognizeWith(item[2]);
+        item[3] && recognizer.requireFailure(item[3]);
+    }, this);
+}
+
+Manager.prototype = {
+    /**
+     * set options
+     * @param {Object} options
+     * @returns {Manager}
+     */
+    set: function(options) {
+        assign(this.options, options);
+
+        // Options that need a little more setup
+        if (options.touchAction) {
+            this.touchAction.update();
+        }
+        if (options.inputTarget) {
+            // Clean up existing event listeners and reinitialize
+            this.input.destroy();
+            this.input.target = options.inputTarget;
+            this.input.init();
+        }
+        return this;
+    },
+
+    /**
+     * stop recognizing for this session.
+     * This session will be discarded, when a new [input]start event is fired.
+     * When forced, the recognizer cycle is stopped immediately.
+     * @param {Boolean} [force]
+     */
+    stop: function(force) {
+        this.session.stopped = force ? FORCED_STOP : STOP;
+    },
+
+    /**
+     * run the recognizers!
+     * called by the inputHandler function on every movement of the pointers (touches)
+     * it walks through all the recognizers and tries to detect the gesture that is being made
+     * @param {Object} inputData
+     */
+    recognize: function(inputData) {
+        var session = this.session;
+        if (session.stopped) {
+            return;
+        }
+
+        // run the touch-action polyfill
+        this.touchAction.preventDefaults(inputData);
+
+        var recognizer;
+        var recognizers = this.recognizers;
+
+        // this holds the recognizer that is being recognized.
+        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED
+        // if no recognizer is detecting a thing, it is set to `null`
+        var curRecognizer = session.curRecognizer;
+
+        // reset when the last recognizer is recognized
+        // or when we're in a new session
+        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {
+            curRecognizer = session.curRecognizer = null;
+        }
+
+        var i = 0;
+        while (i < recognizers.length) {
+            recognizer = recognizers[i];
+
+            // find out if we are allowed try to recognize the input for this one.
+            // 1.   allow if the session is NOT forced stopped (see the .stop() method)
+            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one
+            //      that is being recognized.
+            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.
+            //      this can be setup with the `recognizeWith()` method on the recognizer.
+            if (session.stopped !== FORCED_STOP && ( // 1
+                    !curRecognizer || recognizer == curRecognizer || // 2
+                    recognizer.canRecognizeWith(curRecognizer))) { // 3
+                recognizer.recognize(inputData);
+            } else {
+                recognizer.reset();
+            }
+
+            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the
+            // current active recognizer. but only if we don't already have an active recognizer
+            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {
+                curRecognizer = session.curRecognizer = recognizer;
+            }
+            i++;
+        }
+    },
+
+    /**
+     * get a recognizer by its event name.
+     * @param {Recognizer|String} recognizer
+     * @returns {Recognizer|Null}
+     */
+    get: function(recognizer) {
+        if (recognizer instanceof Recognizer) {
+            return recognizer;
+        }
+
+        var recognizers = this.recognizers;
+        for (var i = 0; i < recognizers.length; i++) {
+            if (recognizers[i].options.event == recognizer) {
+                return recognizers[i];
+            }
+        }
+        return null;
+    },
+
+    /**
+     * add a recognizer to the manager
+     * existing recognizers with the same event name will be removed
+     * @param {Recognizer} recognizer
+     * @returns {Recognizer|Manager}
+     */
+    add: function(recognizer) {
+        if (invokeArrayArg(recognizer, 'add', this)) {
+            return this;
+        }
+
+        // remove existing
+        var existing = this.get(recognizer.options.event);
+        if (existing) {
+            this.remove(existing);
+        }
+
+        this.recognizers.push(recognizer);
+        recognizer.manager = this;
+
+        this.touchAction.update();
+        return recognizer;
+    },
+
+    /**
+     * remove a recognizer by name or instance
+     * @param {Recognizer|String} recognizer
+     * @returns {Manager}
+     */
+    remove: function(recognizer) {
+        if (invokeArrayArg(recognizer, 'remove', this)) {
+            return this;
+        }
+
+        recognizer = this.get(recognizer);
+
+        // let's make sure this recognizer exists
+        if (recognizer) {
+            var recognizers = this.recognizers;
+            var index = inArray(recognizers, recognizer);
+
+            if (index !== -1) {
+                recognizers.splice(index, 1);
+                this.touchAction.update();
+            }
+        }
+
+        return this;
+    },
+
+    /**
+     * bind event
+     * @param {String} events
+     * @param {Function} handler
+     * @returns {EventEmitter} this
+     */
+    on: function(events, handler) {
+        if (events === undefined) {
+            return;
+        }
+        if (handler === undefined) {
+            return;
+        }
+
+        var handlers = this.handlers;
+        each(splitStr(events), function(event) {
+            handlers[event] = handlers[event] || [];
+            handlers[event].push(handler);
+        });
+        return this;
+    },
+
+    /**
+     * unbind event, leave emit blank to remove all handlers
+     * @param {String} events
+     * @param {Function} [handler]
+     * @returns {EventEmitter} this
+     */
+    off: function(events, handler) {
+        if (events === undefined) {
+            return;
+        }
+
+        var handlers = this.handlers;
+        each(splitStr(events), function(event) {
+            if (!handler) {
+                delete handlers[event];
+            } else {
+                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);
+            }
+        });
+        return this;
+    },
+
+    /**
+     * emit event to the listeners
+     * @param {String} event
+     * @param {Object} data
+     */
+    emit: function(event, data) {
+        // we also want to trigger dom events
+        if (this.options.domEvents) {
+            triggerDomEvent(event, data);
+        }
+
+        // no handlers, so skip it all
+        var handlers = this.handlers[event] && this.handlers[event].slice();
+        if (!handlers || !handlers.length) {
+            return;
+        }
+
+        data.type = event;
+        data.preventDefault = function() {
+            data.srcEvent.preventDefault();
+        };
+
+        var i = 0;
+        while (i < handlers.length) {
+            handlers[i](data);
+            i++;
+        }
+    },
+
+    /**
+     * destroy the manager and unbinds all events
+     * it doesn't unbind dom events, that is the user own responsibility
+     */
+    destroy: function() {
+        this.element && toggleCssProps(this, false);
+
+        this.handlers = {};
+        this.session = {};
+        this.input.destroy();
+        this.element = null;
+    }
+};
+
+/**
+ * add/remove the css properties as defined in manager.options.cssProps
+ * @param {Manager} manager
+ * @param {Boolean} add
+ */
+function toggleCssProps(manager, add) {
+    var element = manager.element;
+    if (!element.style) {
+        return;
+    }
+    var prop;
+    each(manager.options.cssProps, function(value, name) {
+        prop = prefixed(element.style, name);
+        if (add) {
+            manager.oldCssProps[prop] = element.style[prop];
+            element.style[prop] = value;
+        } else {
+            element.style[prop] = manager.oldCssProps[prop] || '';
+        }
+    });
+    if (!add) {
+        manager.oldCssProps = {};
+    }
+}
+
+/**
+ * trigger dom event
+ * @param {String} event
+ * @param {Object} data
+ */
+function triggerDomEvent(event, data) {
+    var gestureEvent = document.createEvent('Event');
+    gestureEvent.initEvent(event, true, true);
+    gestureEvent.gesture = data;
+    data.target.dispatchEvent(gestureEvent);
+}
+
+assign(Hammer, {
+    INPUT_START: INPUT_START,
+    INPUT_MOVE: INPUT_MOVE,
+    INPUT_END: INPUT_END,
+    INPUT_CANCEL: INPUT_CANCEL,
+
+    STATE_POSSIBLE: STATE_POSSIBLE,
+    STATE_BEGAN: STATE_BEGAN,
+    STATE_CHANGED: STATE_CHANGED,
+    STATE_ENDED: STATE_ENDED,
+    STATE_RECOGNIZED: STATE_RECOGNIZED,
+    STATE_CANCELLED: STATE_CANCELLED,
+    STATE_FAILED: STATE_FAILED,
+
+    DIRECTION_NONE: DIRECTION_NONE,
+    DIRECTION_LEFT: DIRECTION_LEFT,
+    DIRECTION_RIGHT: DIRECTION_RIGHT,
+    DIRECTION_UP: DIRECTION_UP,
+    DIRECTION_DOWN: DIRECTION_DOWN,
+    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,
+    DIRECTION_VERTICAL: DIRECTION_VERTICAL,
+    DIRECTION_ALL: DIRECTION_ALL,
+
+    Manager: Manager,
+    Input: Input,
+    TouchAction: TouchAction,
+
+    TouchInput: TouchInput,
+    MouseInput: MouseInput,
+    PointerEventInput: PointerEventInput,
+    TouchMouseInput: TouchMouseInput,
+    SingleTouchInput: SingleTouchInput,
+
+    Recognizer: Recognizer,
+    AttrRecognizer: AttrRecognizer,
+    Tap: TapRecognizer,
+    Pan: PanRecognizer,
+    Swipe: SwipeRecognizer,
+    Pinch: PinchRecognizer,
+    Rotate: RotateRecognizer,
+    Press: PressRecognizer,
+
+    on: addEventListeners,
+    off: removeEventListeners,
+    each: each,
+    merge: merge,
+    extend: extend,
+    assign: assign,
+    inherit: inherit,
+    bindFn: bindFn,
+    prefixed: prefixed
+});
+
+// this prevents errors when Hammer is loaded in the presence of an AMD
+//  style loader but by script tag, not by the loader.
+var freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line
+freeGlobal.Hammer = Hammer;
+
+if (true) {
+    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+        return Hammer;
+    }.call(exports, __webpack_require__, exports, module),
+				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+} else if (typeof module != 'undefined' && module.exports) {
+    module.exports = Hammer;
+} else {
+    window[exportName] = Hammer;
+}
+
+})(window, document, 'Hammer');
+
+
+/***/ }),
+/* 177 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// utils
+exports.util = __webpack_require__(2);
+exports.DOMutil = __webpack_require__(14);
+
+// data
+exports.DataSet = __webpack_require__(11);
+exports.DataView = __webpack_require__(12);
+exports.Queue = __webpack_require__(43);
+
+// Timeline
+exports.Timeline = __webpack_require__(178);
+exports.Graph2d = __webpack_require__(180);
+exports.timeline = {
+  Core: __webpack_require__(65),
+  DateUtil: __webpack_require__(36),
+  Range: __webpack_require__(64),
+  stack: __webpack_require__(100),
+  TimeStep: __webpack_require__(66),
+
+  components: {
+    items: {
+      Item: __webpack_require__(38),
+      BackgroundItem: __webpack_require__(103),
+      BoxItem: __webpack_require__(101),
+      PointItem: __webpack_require__(102),
+      RangeItem: __webpack_require__(70)
+    },
+
+    BackgroundGroup: __webpack_require__(69),
+    Component: __webpack_require__(16),
+    CurrentTime: __webpack_require__(67),
+    CustomTime: __webpack_require__(46),
+    DataAxis: __webpack_require__(107),
+    DataScale: __webpack_require__(108),
+    GraphGroup: __webpack_require__(109),
+    Group: __webpack_require__(68),
+    ItemSet: __webpack_require__(99),
+    Legend: __webpack_require__(112),
+    LineGraph: __webpack_require__(106),
+    TimeAxis: __webpack_require__(45)
+  }
+};
+
+// bundled external libraries
+exports.moment = __webpack_require__(9);
+exports.Hammer = __webpack_require__(10);
+exports.keycharm = __webpack_require__(35);
+
+/***/ }),
+/* 178 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var moment = __webpack_require__(9);
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Range = __webpack_require__(64);
+var Core = __webpack_require__(65);
+var TimeAxis = __webpack_require__(45);
+var CurrentTime = __webpack_require__(67);
+var CustomTime = __webpack_require__(46);
+var ItemSet = __webpack_require__(99);
+
+var printStyle = __webpack_require__(15).printStyle;
+var allOptions = __webpack_require__(105).allOptions;
+var configureOptions = __webpack_require__(105).configureOptions;
+
+var Configurator = __webpack_require__(71)['default'];
+var Validator = __webpack_require__(15)['default'];
+
+/**
+ * Create a timeline visualization
+ * @param {HTMLElement} container
+ * @param {vis.DataSet | vis.DataView | Array} [items]
+ * @param {vis.DataSet | vis.DataView | Array} [groups]
+ * @param {Object} [options]  See Timeline.setOptions for the available options.
+ * @constructor Timeline
+ * @extends Core
+ */
+function Timeline(container, items, groups, options) {
+
+  if (!(this instanceof Timeline)) {
+    throw new SyntaxError('Constructor must be called with the new operator');
+  }
+
+  // if the third element is options, the forth is groups (optionally);
+  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {
+    var forthArgument = options;
+    options = groups;
+    groups = forthArgument;
+  }
+
+  // TODO: REMOVE THIS in the next MAJOR release
+  // see https://github.com/almende/vis/issues/2511
+  if (options && options.throttleRedraw) {
+    console.warn("Timeline option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.");
+  }
+
+  var me = this;
+  this.defaultOptions = {
+    start: null,
+    end: null,
+    autoResize: true,
+    orientation: {
+      axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both'
+      item: 'bottom' // not relevant
+    },
+    moment: moment,
+    width: null,
+    height: null,
+    maxHeight: null,
+    minHeight: null
+  };
+  this.options = util.deepExtend({}, this.defaultOptions);
+
+  // Create the DOM, props, and emitter
+  this._create(container);
+  if (!options || options && typeof options.rtl == "undefined") {
+    this.dom.root.style.visibility = 'hidden';
+    var directionFromDom,
+        domNode = this.dom.root;
+    while (!directionFromDom && domNode) {
+      directionFromDom = window.getComputedStyle(domNode, null).direction;
+      domNode = domNode.parentElement;
+    }
+    this.options.rtl = directionFromDom && directionFromDom.toLowerCase() == "rtl";
+  } else {
+    this.options.rtl = options.rtl;
+  }
+
+  this.options.rollingMode = options && options.rollingMode;
+  this.options.onInitialDrawComplete = options && options.onInitialDrawComplete;
+
+  // all components listed here will be repainted automatically
+  this.components = [];
+
+  this.body = {
+    dom: this.dom,
+    domProps: this.props,
+    emitter: {
+      on: this.on.bind(this),
+      off: this.off.bind(this),
+      emit: this.emit.bind(this)
+    },
+    hiddenDates: [],
+    util: {
+      getScale: function getScale() {
+        return me.timeAxis.step.scale;
+      },
+      getStep: function getStep() {
+        return me.timeAxis.step.step;
+      },
+
+      toScreen: me._toScreen.bind(me),
+      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width
+      toTime: me._toTime.bind(me),
+      toGlobalTime: me._toGlobalTime.bind(me)
+    }
+  };
+
+  // range
+  this.range = new Range(this.body, this.options);
+  this.components.push(this.range);
+  this.body.range = this.range;
+
+  // time axis
+  this.timeAxis = new TimeAxis(this.body, this.options);
+  this.timeAxis2 = null; // used in case of orientation option 'both'
+  this.components.push(this.timeAxis);
+
+  // current time bar
+  this.currentTime = new CurrentTime(this.body, this.options);
+  this.components.push(this.currentTime);
+
+  // item set
+  this.itemSet = new ItemSet(this.body, this.options);
+  this.components.push(this.itemSet);
+
+  this.itemsData = null; // DataSet
+  this.groupsData = null; // DataSet
+
+  this.dom.root.onclick = function (event) {
+    me.emit('click', me.getEventProperties(event));
+  };
+  this.dom.root.ondblclick = function (event) {
+    me.emit('doubleClick', me.getEventProperties(event));
+  };
+  this.dom.root.oncontextmenu = function (event) {
+    me.emit('contextmenu', me.getEventProperties(event));
+  };
+  this.dom.root.onmouseover = function (event) {
+    me.emit('mouseOver', me.getEventProperties(event));
+  };
+  if (window.PointerEvent) {
+    this.dom.root.onpointerdown = function (event) {
+      me.emit('mouseDown', me.getEventProperties(event));
+    };
+    this.dom.root.onpointermove = function (event) {
+      me.emit('mouseMove', me.getEventProperties(event));
+    };
+    this.dom.root.onpointerup = function (event) {
+      me.emit('mouseUp', me.getEventProperties(event));
+    };
+  } else {
+    this.dom.root.onmousemove = function (event) {
+      me.emit('mouseMove', me.getEventProperties(event));
+    };
+    this.dom.root.onmousedown = function (event) {
+      me.emit('mouseDown', me.getEventProperties(event));
+    };
+    this.dom.root.onmouseup = function (event) {
+      me.emit('mouseUp', me.getEventProperties(event));
+    };
+  }
+
+  //Single time autoscale/fit
+  this.initialFitDone = false;
+  this.on('changed', function () {
+    if (this.itemsData == null || this.options.rollingMode) return;
+    if (!me.initialFitDone) {
+      me.initialFitDone = true;
+      if (me.options.start != undefined || me.options.end != undefined) {
+        if (me.options.start == undefined || me.options.end == undefined) {
+          var range = me.getItemRange();
+        }
+
+        var start = me.options.start != undefined ? me.options.start : range.min;
+        var end = me.options.end != undefined ? me.options.end : range.max;
+        me.setWindow(start, end, { animation: false });
+      } else {
+        me.fit({ animation: false });
+      }
+    }
+
+    if (!me.initialDrawDone && me.initialRangeChangeDone) {
+      me.initialDrawDone = true;
+      me.dom.root.style.visibility = 'visible';
+      if (me.options.onInitialDrawComplete) {
+        setTimeout(function () {
+          return me.options.onInitialDrawComplete();
+        }, 0);
+      }
+    }
+  });
+
+  // apply options
+  if (options) {
+    this.setOptions(options);
+  }
+
+  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!
+  if (groups) {
+    this.setGroups(groups);
+  }
+
+  // create itemset
+  if (items) {
+    this.setItems(items);
+  }
+
+  // draw for the first time
+  this._redraw();
+}
+
+// Extend the functionality from Core
+Timeline.prototype = new Core();
+
+/**
+ * Load a configurator
+ * @return {Object}
+ * @private
+ */
+Timeline.prototype._createConfigurator = function () {
+  return new Configurator(this, this.dom.container, configureOptions);
+};
+
+/**
+ * Force a redraw. The size of all items will be recalculated.
+ * Can be useful to manually redraw when option autoResize=false and the window
+ * has been resized, or when the items CSS has been changed.
+ *
+ * Note: this function will be overridden on construction with a trottled version
+ */
+Timeline.prototype.redraw = function () {
+  this.itemSet && this.itemSet.markDirty({ refreshItems: true });
+  this._redraw();
+};
+
+Timeline.prototype.setOptions = function (options) {
+  // validate options
+  var errorFound = Validator.validate(options, allOptions);
+
+  if (errorFound === true) {
+    console.log('%cErrors have been found in the supplied options object.', printStyle);
+  }
+  Core.prototype.setOptions.call(this, options);
+
+  if ('type' in options) {
+    if (options.type !== this.options.type) {
+      this.options.type = options.type;
+
+      // force recreation of all items
+      var itemsData = this.itemsData;
+      if (itemsData) {
+        var selection = this.getSelection();
+        this.setItems(null); // remove all
+        this.setItems(itemsData); // add all
+        this.setSelection(selection); // restore selection
+      }
+    }
+  }
+};
+
+/**
+ * Set items
+ * @param {vis.DataSet | Array | null} items
+ */
+Timeline.prototype.setItems = function (items) {
+  // convert to type DataSet when needed
+  var newDataSet;
+  if (!items) {
+    newDataSet = null;
+  } else if (items instanceof DataSet || items instanceof DataView) {
+    newDataSet = items;
+  } else {
+    // turn an array into a dataset
+    newDataSet = new DataSet(items, {
+      type: {
+        start: 'Date',
+        end: 'Date'
+      }
+    });
+  }
+
+  // set items
+  this.itemsData = newDataSet;
+  this.itemSet && this.itemSet.setItems(newDataSet);
+};
+
+/**
+ * Set groups
+ * @param {vis.DataSet | Array} groups
+ */
+Timeline.prototype.setGroups = function (groups) {
+  // convert to type DataSet when needed
+  var newDataSet;
+  if (!groups) {
+    newDataSet = null;
+  } else {
+    var filter = function filter(group) {
+      return group.visible !== false;
+    };
+    if (groups instanceof DataSet || groups instanceof DataView) {
+      newDataSet = new DataView(groups, { filter: filter });
+    } else {
+      // turn an array into a dataset
+      newDataSet = new DataSet(groups.filter(filter));
+    }
+  }
+
+  this.groupsData = newDataSet;
+  this.itemSet.setGroups(newDataSet);
+};
+
+/**
+ * Set both items and groups in one go
+ * @param {{items: (Array | vis.DataSet), groups: (Array | vis.DataSet)}} data
+ */
+Timeline.prototype.setData = function (data) {
+  if (data && data.groups) {
+    this.setGroups(data.groups);
+  }
+
+  if (data && data.items) {
+    this.setItems(data.items);
+  }
+};
+
+/**
+ * Set selected items by their id. Replaces the current selection
+ * Unknown id's are silently ignored.
+ * @param {string[] | string} [ids]  An array with zero or more id's of the items to be
+ *                                selected. If ids is an empty array, all items will be
+ *                                unselected.
+ * @param {Object} [options]      Available options:
+ *                                `focus: boolean`
+ *                                    If true, focus will be set to the selected item(s)
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ *                                    Only applicable when option focus is true.
+ */
+Timeline.prototype.setSelection = function (ids, options) {
+  this.itemSet && this.itemSet.setSelection(ids);
+
+  if (options && options.focus) {
+    this.focus(ids, options);
+  }
+};
+
+/**
+ * Get the selected items by their id
+ * @return {Array} ids  The ids of the selected items
+ */
+Timeline.prototype.getSelection = function () {
+  return this.itemSet && this.itemSet.getSelection() || [];
+};
+
+/**
+ * Adjust the visible window such that the selected item (or multiple items)
+ * are centered on screen.
+ * @param {string | String[]} id     An item id or array with item ids
+ * @param {Object} [options]      Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ */
+Timeline.prototype.focus = function (id, options) {
+  if (!this.itemsData || id == undefined) return;
+
+  var ids = Array.isArray(id) ? id : [id];
+
+  // get the specified item(s)
+  var itemsData = this.itemsData.getDataSet().get(ids, {
+    type: {
+      start: 'Date',
+      end: 'Date'
+    }
+  });
+
+  // calculate minimum start and maximum end of specified items
+  var start = null;
+  var end = null;
+  itemsData.forEach(function (itemData) {
+    var s = itemData.start.valueOf();
+    var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf();
+
+    if (start === null || s < start) {
+      start = s;
+    }
+
+    if (end === null || e > end) {
+      end = e;
+    }
+  });
+
+  if (start !== null && end !== null) {
+    var me = this;
+    // Use the first item for the vertical focus
+    var item = this.itemSet.items[ids[0]];
+    var startPos = this._getScrollTop() * -1;
+    var initialVerticalScroll = null;
+
+    // Setup a handler for each frame of the vertical scroll
+    var verticalAnimationFrame = function verticalAnimationFrame(ease, willDraw, done) {
+      var verticalScroll = getItemVerticalScroll(me, item);
+
+      if (!initialVerticalScroll) {
+        initialVerticalScroll = verticalScroll;
+      }
+
+      if (initialVerticalScroll.itemTop == verticalScroll.itemTop && !initialVerticalScroll.shouldScroll) {
+        return; // We don't need to scroll, so do nothing
+      } else if (initialVerticalScroll.itemTop != verticalScroll.itemTop && verticalScroll.shouldScroll) {
+        // The redraw shifted elements, so reset the animation to correct
+        initialVerticalScroll = verticalScroll;
+        startPos = me._getScrollTop() * -1;
+      }
+
+      var from = startPos;
+      var to = initialVerticalScroll.scrollOffset;
+      var scrollTop = done ? to : from + (to - from) * ease;
+
+      me._setScrollTop(-scrollTop);
+
+      if (!willDraw) {
+        me._redraw();
+      }
+    };
+
+    // Enforces the final vertical scroll position
+    var setFinalVerticalPosition = function setFinalVerticalPosition() {
+      var finalVerticalScroll = getItemVerticalScroll(me, item);
+
+      if (finalVerticalScroll.shouldScroll && finalVerticalScroll.itemTop != initialVerticalScroll.itemTop) {
+        me._setScrollTop(-finalVerticalScroll.scrollOffset);
+        me._redraw();
+      }
+    };
+
+    // Perform one last check at the end to make sure the final vertical
+    // position is correct
+    var finalVerticalCallback = function finalVerticalCallback() {
+      // Double check we ended at the proper scroll position
+      setFinalVerticalPosition();
+
+      // Let the redraw settle and finalize the position.      
+      setTimeout(setFinalVerticalPosition, 100);
+    };
+
+    // calculate the new middle and interval for the window
+    var middle = (start + end) / 2;
+    var interval = Math.max(this.range.end - this.range.start, (end - start) * 1.1);
+
+    var animation = options && options.animation !== undefined ? options.animation : true;
+
+    if (!animation) {
+      // We aren't animating so set a default so that the final callback forces the vertical location
+      initialVerticalScroll = { shouldScroll: false, scrollOffset: -1, itemTop: -1 };
+    }
+
+    this.range.setRange(middle - interval / 2, middle + interval / 2, { animation: animation }, finalVerticalCallback, verticalAnimationFrame);
+  }
+};
+
+/**
+ * Set Timeline window such that it fits all items
+ * @param {Object} [options]  Available options:
+ *                                `animation: boolean | {duration: number, easingFunction: string}`
+ *                                    If true (default), the range is animated
+ *                                    smoothly to the new window. An object can be
+ *                                    provided to specify duration and easing function.
+ *                                    Default duration is 500 ms, and default easing
+ *                                    function is 'easeInOutQuad'.
+ * @param {function} [callback]
+ */
+Timeline.prototype.fit = function (options, callback) {
+  var animation = options && options.animation !== undefined ? options.animation : true;
+  var range;
+
+  var dataset = this.itemsData && this.itemsData.getDataSet();
+  if (dataset.length === 1 && dataset.get()[0].end === undefined) {
+    // a single item -> don't fit, just show a range around the item from -4 to +3 days
+    range = this.getDataRange();
+    this.moveTo(range.min.valueOf(), { animation: animation }, callback);
+  } else {
+    // exactly fit the items (plus a small margin)
+    range = this.getItemRange();
+    this.range.setRange(range.min, range.max, { animation: animation }, callback);
+  }
+};
+
+/**
+ *
+ * @param {vis.Item} item
+ * @returns {number}
+ */
+function getStart(item) {
+  return util.convert(item.data.start, 'Date').valueOf();
+}
+
+/**
+ *
+ * @param {vis.Item} item
+ * @returns {number}
+ */
+function getEnd(item) {
+  var end = item.data.end != undefined ? item.data.end : item.data.start;
+  return util.convert(end, 'Date').valueOf();
+}
+
+/**
+ * @param {vis.Timeline} timeline
+ * @param {vis.Item} item
+ * @return {{shouldScroll: bool, scrollOffset: number, itemTop: number}}
+ */
+function getItemVerticalScroll(timeline, item) {
+  var leftHeight = timeline.props.leftContainer.height;
+  var contentHeight = timeline.props.left.height;
+
+  var group = item.parent;
+  var offset = group.top;
+  var shouldScroll = true;
+  var orientation = timeline.timeAxis.options.orientation.axis;
+
+  var itemTop = function itemTop() {
+    if (orientation == "bottom") {
+      return group.height - item.top - item.height;
+    } else {
+      return item.top;
+    }
+  };
+
+  var currentScrollHeight = timeline._getScrollTop() * -1;
+  var targetOffset = offset + itemTop();
+  var height = item.height;
+
+  if (targetOffset < currentScrollHeight) {
+    if (offset + leftHeight <= offset + itemTop() + height) {
+      offset += itemTop() - timeline.itemSet.options.margin.item.vertical;
+    }
+  } else if (targetOffset + height > currentScrollHeight + leftHeight) {
+    offset += itemTop() + height - leftHeight + timeline.itemSet.options.margin.item.vertical;
+  } else {
+    shouldScroll = false;
+  }
+
+  offset = Math.min(offset, contentHeight - leftHeight);
+
+  return { shouldScroll: shouldScroll, scrollOffset: offset, itemTop: targetOffset };
+}
+
+/**
+ * Determine the range of the items, taking into account their actual width
+ * and a margin of 10 pixels on both sides.
+ *
+ * @returns {{min: Date, max: Date}}
+ */
+Timeline.prototype.getItemRange = function () {
+  // get a rough approximation for the range based on the items start and end dates
+  var range = this.getDataRange();
+  var min = range.min !== null ? range.min.valueOf() : null;
+  var max = range.max !== null ? range.max.valueOf() : null;
+  var minItem = null;
+  var maxItem = null;
+
+  if (min != null && max != null) {
+    var interval = max - min; // ms
+    if (interval <= 0) {
+      interval = 10;
+    }
+    var factor = interval / this.props.center.width;
+
+    var redrawQueue = {};
+    var redrawQueueLength = 0;
+
+    // collect redraw functions
+    util.forEach(this.itemSet.items, function (item, key) {
+      if (item.groupShowing) {
+        var returnQueue = true;
+        redrawQueue[key] = item.redraw(returnQueue);
+        redrawQueueLength = redrawQueue[key].length;
+      }
+    });
+
+    var needRedraw = redrawQueueLength > 0;
+    if (needRedraw) {
+      // redraw all regular items
+      for (var i = 0; i < redrawQueueLength; i++) {
+        util.forEach(redrawQueue, function (fns) {
+          fns[i]();
+        });
+      }
+    }
+
+    // calculate the date of the left side and right side of the items given
+    util.forEach(this.itemSet.items, function (item) {
+      var start = getStart(item);
+      var end = getEnd(item);
+      var startSide;
+      var endSide;
+
+      if (this.options.rtl) {
+        startSide = start - (item.getWidthRight() + 10) * factor;
+        endSide = end + (item.getWidthLeft() + 10) * factor;
+      } else {
+        startSide = start - (item.getWidthLeft() + 10) * factor;
+        endSide = end + (item.getWidthRight() + 10) * factor;
+      }
+
+      if (startSide < min) {
+        min = startSide;
+        minItem = item;
+      }
+      if (endSide > max) {
+        max = endSide;
+        maxItem = item;
+      }
+    }.bind(this));
+
+    if (minItem && maxItem) {
+      var lhs = minItem.getWidthLeft() + 10;
+      var rhs = maxItem.getWidthRight() + 10;
+      var delta = this.props.center.width - lhs - rhs; // px
+
+      if (delta > 0) {
+        if (this.options.rtl) {
+          min = getStart(minItem) - rhs * interval / delta; // ms
+          max = getEnd(maxItem) + lhs * interval / delta; // ms
+        } else {
+          min = getStart(minItem) - lhs * interval / delta; // ms
+          max = getEnd(maxItem) + rhs * interval / delta; // ms
+        }
+      }
+    }
+  }
+
+  return {
+    min: min != null ? new Date(min) : null,
+    max: max != null ? new Date(max) : null
+  };
+};
+
+/**
+ * Calculate the data range of the items start and end dates
+ * @returns {{min: Date, max: Date}}
+ */
+Timeline.prototype.getDataRange = function () {
+  var min = null;
+  var max = null;
+
+  var dataset = this.itemsData && this.itemsData.getDataSet();
+  if (dataset) {
+    dataset.forEach(function (item) {
+      var start = util.convert(item.start, 'Date').valueOf();
+      var end = util.convert(item.end != undefined ? item.end : item.start, 'Date').valueOf();
+      if (min === null || start < min) {
+        min = start;
+      }
+      if (max === null || end > max) {
+        max = end;
+      }
+    });
+  }
+
+  return {
+    min: min != null ? new Date(min) : null,
+    max: max != null ? new Date(max) : null
+  };
+};
+
+/**
+ * Generate Timeline related information from an event
+ * @param {Event} event
+ * @return {Object} An object with related information, like on which area
+ *                  The event happened, whether clicked on an item, etc.
+ */
+Timeline.prototype.getEventProperties = function (event) {
+  var clientX = event.center ? event.center.x : event.clientX;
+  var clientY = event.center ? event.center.y : event.clientY;
+  var x;
+  if (this.options.rtl) {
+    x = util.getAbsoluteRight(this.dom.centerContainer) - clientX;
+  } else {
+    x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);
+  }
+  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);
+
+  var item = this.itemSet.itemFromTarget(event);
+  var group = this.itemSet.groupFromTarget(event);
+  var customTime = CustomTime.customTimeFromTarget(event);
+
+  var snap = this.itemSet.options.snap || null;
+  var scale = this.body.util.getScale();
+  var step = this.body.util.getStep();
+  var time = this._toTime(x);
+  var snappedTime = snap ? snap(time, scale, step) : time;
+
+  var element = util.getTarget(event);
+  var what = null;
+  if (item != null) {
+    what = 'item';
+  } else if (customTime != null) {
+    what = 'custom-time';
+  } else if (util.hasParent(element, this.timeAxis.dom.foreground)) {
+    what = 'axis';
+  } else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {
+    what = 'axis';
+  } else if (util.hasParent(element, this.itemSet.dom.labelSet)) {
+    what = 'group-label';
+  } else if (util.hasParent(element, this.currentTime.bar)) {
+    what = 'current-time';
+  } else if (util.hasParent(element, this.dom.center)) {
+    what = 'background';
+  }
+
+  return {
+    event: event,
+    item: item ? item.id : null,
+    group: group ? group.groupId : null,
+    what: what,
+    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,
+    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,
+    x: x,
+    y: y,
+    time: time,
+    snappedTime: snappedTime
+  };
+};
+
+/**
+ * Toggle Timeline rolling mode
+ */
+
+Timeline.prototype.toggleRollingMode = function () {
+  if (this.range.rolling) {
+    this.range.stopRolling();
+  } else {
+    if (this.options.rollingMode == undefined) {
+      this.setOptions(this.options);
+    }
+    this.range.startRolling();
+  }
+};
+
+module.exports = Timeline;
+
+/***/ }),
+/* 179 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Hammer = __webpack_require__(10);
+var hammerUtil = __webpack_require__(37);
+var util = __webpack_require__(2);
+
+/**
+ * @param {number} [pixelRatio=1]
+ */
+
+var ColorPicker = function () {
+  /**
+   * @param {number} [pixelRatio=1]
+   */
+  function ColorPicker() {
+    var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
+    (0, _classCallCheck3['default'])(this, ColorPicker);
+
+    this.pixelRatio = pixelRatio;
+    this.generated = false;
+    this.centerCoordinates = { x: 289 / 2, y: 289 / 2 };
+    this.r = 289 * 0.49;
+    this.color = { r: 255, g: 255, b: 255, a: 1.0 };
+    this.hueCircle = undefined;
+    this.initialColor = { r: 255, g: 255, b: 255, a: 1.0 };
+    this.previousColor = undefined;
+    this.applied = false;
+
+    // bound by
+    this.updateCallback = function () {};
+    this.closeCallback = function () {};
+
+    // create all DOM elements
+    this._create();
+  }
+
+  /**
+   * this inserts the colorPicker into a div from the DOM
+   * @param {Element} container
+   */
+
+
+  (0, _createClass3['default'])(ColorPicker, [{
+    key: 'insertTo',
+    value: function insertTo(container) {
+      if (this.hammer !== undefined) {
+        this.hammer.destroy();
+        this.hammer = undefined;
+      }
+      this.container = container;
+      this.container.appendChild(this.frame);
+      this._bindHammer();
+
+      this._setSize();
+    }
+
+    /**
+     * the callback is executed on apply and save. Bind it to the application
+     * @param {function} callback
+     */
+
+  }, {
+    key: 'setUpdateCallback',
+    value: function setUpdateCallback(callback) {
+      if (typeof callback === 'function') {
+        this.updateCallback = callback;
+      } else {
+        throw new Error("Function attempted to set as colorPicker update callback is not a function.");
+      }
+    }
+
+    /**
+     * the callback is executed on apply and save. Bind it to the application
+     * @param {function} callback
+     */
+
+  }, {
+    key: 'setCloseCallback',
+    value: function setCloseCallback(callback) {
+      if (typeof callback === 'function') {
+        this.closeCallback = callback;
+      } else {
+        throw new Error("Function attempted to set as colorPicker closing callback is not a function.");
+      }
+    }
+
+    /**
+     *
+     * @param {string} color
+     * @returns {String}
+     * @private
+     */
+
+  }, {
+    key: '_isColorString',
+    value: function _isColorString(color) {
+      var htmlColors = { black: '#000000', navy: '#000080', darkblue: '#00008B', mediumblue: '#0000CD', blue: '#0000FF', darkgreen: '#006400', green: '#008000', teal: '#008080', darkcyan: '#008B8B', deepskyblue: '#00BFFF', darkturquoise: '#00CED1', mediumspringgreen: '#00FA9A', lime: '#00FF00', springgreen: '#00FF7F', aqua: '#00FFFF', cyan: '#00FFFF', midnightblue: '#191970', dodgerblue: '#1E90FF', lightseagreen: '#20B2AA', forestgreen: '#228B22', seagreen: '#2E8B57', darkslategray: '#2F4F4F', limegreen: '#32CD32', mediumseagreen: '#3CB371', turquoise: '#40E0D0', royalblue: '#4169E1', steelblue: '#4682B4', darkslateblue: '#483D8B', mediumturquoise: '#48D1CC', indigo: '#4B0082', darkolivegreen: '#556B2F', cadetblue: '#5F9EA0', cornflowerblue: '#6495ED', mediumaquamarine: '#66CDAA', dimgray: '#696969', slateblue: '#6A5ACD', olivedrab: '#6B8E23', slategray: '#708090', lightslategray: '#778899', mediumslateblue: '#7B68EE', lawngreen: '#7CFC00', chartreuse: '#7FFF00', aquamarine: '#7FFFD4', maroon: '#800000', purple: '#800080', olive: '#808000', gray: '#808080', skyblue: '#87CEEB', lightskyblue: '#87CEFA', blueviolet: '#8A2BE2', darkred: '#8B0000', darkmagenta: '#8B008B', saddlebrown: '#8B4513', darkseagreen: '#8FBC8F', lightgreen: '#90EE90', mediumpurple: '#9370D8', darkviolet: '#9400D3', palegreen: '#98FB98', darkorchid: '#9932CC', yellowgreen: '#9ACD32', sienna: '#A0522D', brown: '#A52A2A', darkgray: '#A9A9A9', lightblue: '#ADD8E6', greenyellow: '#ADFF2F', paleturquoise: '#AFEEEE', lightsteelblue: '#B0C4DE', powderblue: '#B0E0E6', firebrick: '#B22222', darkgoldenrod: '#B8860B', mediumorchid: '#BA55D3', rosybrown: '#BC8F8F', darkkhaki: '#BDB76B', silver: '#C0C0C0', mediumvioletred: '#C71585', indianred: '#CD5C5C', peru: '#CD853F', chocolate: '#D2691E', tan: '#D2B48C', lightgrey: '#D3D3D3', palevioletred: '#D87093', thistle: '#D8BFD8', orchid: '#DA70D6', goldenrod: '#DAA520', crimson: '#DC143C', gainsboro: '#DCDCDC', plum: '#DDA0DD', burlywood: '#DEB887', lightcyan: '#E0FFFF', lavender: '#E6E6FA', darksalmon: '#E9967A', violet: '#EE82EE', palegoldenrod: '#EEE8AA', lightcoral: '#F08080', khaki: '#F0E68C', aliceblue: '#F0F8FF', honeydew: '#F0FFF0', azure: '#F0FFFF', sandybrown: '#F4A460', wheat: '#F5DEB3', beige: '#F5F5DC', whitesmoke: '#F5F5F5', mintcream: '#F5FFFA', ghostwhite: '#F8F8FF', salmon: '#FA8072', antiquewhite: '#FAEBD7', linen: '#FAF0E6', lightgoldenrodyellow: '#FAFAD2', oldlace: '#FDF5E6', red: '#FF0000', fuchsia: '#FF00FF', magenta: '#FF00FF', deeppink: '#FF1493', orangered: '#FF4500', tomato: '#FF6347', hotpink: '#FF69B4', coral: '#FF7F50', darkorange: '#FF8C00', lightsalmon: '#FFA07A', orange: '#FFA500', lightpink: '#FFB6C1', pink: '#FFC0CB', gold: '#FFD700', peachpuff: '#FFDAB9', navajowhite: '#FFDEAD', moccasin: '#FFE4B5', bisque: '#FFE4C4', mistyrose: '#FFE4E1', blanchedalmond: '#FFEBCD', papayawhip: '#FFEFD5', lavenderblush: '#FFF0F5', seashell: '#FFF5EE', cornsilk: '#FFF8DC', lemonchiffon: '#FFFACD', floralwhite: '#FFFAF0', snow: '#FFFAFA', yellow: '#FFFF00', lightyellow: '#FFFFE0', ivory: '#FFFFF0', white: '#FFFFFF' };
+      if (typeof color === 'string') {
+        return htmlColors[color];
+      }
+    }
+
+    /**
+     * Set the color of the colorPicker
+     * Supported formats:
+     * 'red'                   --> HTML color string
+     * '#ffffff'               --> hex string
+     * 'rbg(255,255,255)'      --> rgb string
+     * 'rgba(255,255,255,1.0)' --> rgba string
+     * {r:255,g:255,b:255}     --> rgb object
+     * {r:255,g:255,b:255,a:1.0} --> rgba object
+     * @param {string|Object} color
+     * @param {boolean} [setInitial=true]
+     */
+
+  }, {
+    key: 'setColor',
+    value: function setColor(color) {
+      var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      if (color === 'none') {
+        return;
+      }
+
+      var rgba = void 0;
+
+      // if a html color shorthand is used, convert to hex
+      var htmlColor = this._isColorString(color);
+      if (htmlColor !== undefined) {
+        color = htmlColor;
+      }
+
+      // check format
+      if (util.isString(color) === true) {
+        if (util.isValidRGB(color) === true) {
+          var rgbaArray = color.substr(4).substr(0, color.length - 5).split(',');
+          rgba = { r: rgbaArray[0], g: rgbaArray[1], b: rgbaArray[2], a: 1.0 };
+        } else if (util.isValidRGBA(color) === true) {
+          var _rgbaArray = color.substr(5).substr(0, color.length - 6).split(',');
+          rgba = { r: _rgbaArray[0], g: _rgbaArray[1], b: _rgbaArray[2], a: _rgbaArray[3] };
+        } else if (util.isValidHex(color) === true) {
+          var rgbObj = util.hexToRGB(color);
+          rgba = { r: rgbObj.r, g: rgbObj.g, b: rgbObj.b, a: 1.0 };
+        }
+      } else {
+        if (color instanceof Object) {
+          if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {
+            var alpha = color.a !== undefined ? color.a : '1.0';
+            rgba = { r: color.r, g: color.g, b: color.b, a: alpha };
+          }
+        }
+      }
+
+      // set color
+      if (rgba === undefined) {
+        throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: " + (0, _stringify2['default'])(color));
+      } else {
+        this._setColor(rgba, setInitial);
+      }
+    }
+
+    /**
+     * this shows the color picker.
+     * The hue circle is constructed once and stored.
+     */
+
+  }, {
+    key: 'show',
+    value: function show() {
+      if (this.closeCallback !== undefined) {
+        this.closeCallback();
+        this.closeCallback = undefined;
+      }
+
+      this.applied = false;
+      this.frame.style.display = 'block';
+      this._generateHueCircle();
+    }
+
+    // ------------------------------------------ PRIVATE ----------------------------- //
+
+    /**
+     * Hide the picker. Is called by the cancel button.
+     * Optional boolean to store the previous color for easy access later on.
+     * @param {boolean} [storePrevious=true]
+     * @private
+     */
+
+  }, {
+    key: '_hide',
+    value: function _hide() {
+      var _this = this;
+
+      var storePrevious = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      // store the previous color for next time;
+      if (storePrevious === true) {
+        this.previousColor = util.extend({}, this.color);
+      }
+
+      if (this.applied === true) {
+        this.updateCallback(this.initialColor);
+      }
+
+      this.frame.style.display = 'none';
+
+      // call the closing callback, restoring the onclick method.
+      // this is in a setTimeout because it will trigger the show again before the click is done.
+      setTimeout(function () {
+        if (_this.closeCallback !== undefined) {
+          _this.closeCallback();
+          _this.closeCallback = undefined;
+        }
+      }, 0);
+    }
+
+    /**
+     * bound to the save button. Saves and hides.
+     * @private
+     */
+
+  }, {
+    key: '_save',
+    value: function _save() {
+      this.updateCallback(this.color);
+      this.applied = false;
+      this._hide();
+    }
+
+    /**
+     * Bound to apply button. Saves but does not close. Is undone by the cancel button.
+     * @private
+     */
+
+  }, {
+    key: '_apply',
+    value: function _apply() {
+      this.applied = true;
+      this.updateCallback(this.color);
+      this._updatePicker(this.color);
+    }
+
+    /**
+     * load the color from the previous session.
+     * @private
+     */
+
+  }, {
+    key: '_loadLast',
+    value: function _loadLast() {
+      if (this.previousColor !== undefined) {
+        this.setColor(this.previousColor, false);
+      } else {
+        alert("There is no last color to load...");
+      }
+    }
+
+    /**
+     * set the color, place the picker
+     * @param {Object} rgba
+     * @param {boolean} [setInitial=true]
+     * @private
+     */
+
+  }, {
+    key: '_setColor',
+    value: function _setColor(rgba) {
+      var setInitial = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      // store the initial color
+      if (setInitial === true) {
+        this.initialColor = util.extend({}, rgba);
+      }
+
+      this.color = rgba;
+      var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);
+
+      var angleConvert = 2 * Math.PI;
+      var radius = this.r * hsv.s;
+      var x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);
+      var y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);
+
+      this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px';
+      this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px';
+
+      this._updatePicker(rgba);
+    }
+
+    /**
+     * bound to opacity control
+     * @param {number} value
+     * @private
+     */
+
+  }, {
+    key: '_setOpacity',
+    value: function _setOpacity(value) {
+      this.color.a = value / 100;
+      this._updatePicker(this.color);
+    }
+
+    /**
+     * bound to brightness control
+     * @param {number} value
+     * @private
+     */
+
+  }, {
+    key: '_setBrightness',
+    value: function _setBrightness(value) {
+      var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);
+      hsv.v = value / 100;
+      var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);
+      rgba['a'] = this.color.a;
+      this.color = rgba;
+      this._updatePicker();
+    }
+
+    /**
+     * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.
+     * @param {Object} rgba
+     * @private
+     */
+
+  }, {
+    key: '_updatePicker',
+    value: function _updatePicker() {
+      var rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.color;
+
+      var hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);
+      var ctx = this.colorPickerCanvas.getContext('2d');
+      if (this.pixelRation === undefined) {
+        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);
+      }
+      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);
+
+      // clear the canvas
+      var w = this.colorPickerCanvas.clientWidth;
+      var h = this.colorPickerCanvas.clientHeight;
+      ctx.clearRect(0, 0, w, h);
+
+      ctx.putImageData(this.hueCircle, 0, 0);
+      ctx.fillStyle = 'rgba(0,0,0,' + (1 - hsv.v) + ')';
+      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);
+      ctx.fill();
+
+      this.brightnessRange.value = 100 * hsv.v;
+      this.opacityRange.value = 100 * rgba.a;
+
+      this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';
+      this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';
+    }
+
+    /**
+     * used by create to set the size of the canvas.
+     * @private
+     */
+
+  }, {
+    key: '_setSize',
+    value: function _setSize() {
+      this.colorPickerCanvas.style.width = '100%';
+      this.colorPickerCanvas.style.height = '100%';
+
+      this.colorPickerCanvas.width = 289 * this.pixelRatio;
+      this.colorPickerCanvas.height = 289 * this.pixelRatio;
+    }
+
+    /**
+     * create all dom elements
+     * TODO: cleanup, lots of similar dom elements
+     * @private
+     */
+
+  }, {
+    key: '_create',
+    value: function _create() {
+      this.frame = document.createElement('div');
+      this.frame.className = 'vis-color-picker';
+
+      this.colorPickerDiv = document.createElement('div');
+      this.colorPickerSelector = document.createElement('div');
+      this.colorPickerSelector.className = 'vis-selector';
+      this.colorPickerDiv.appendChild(this.colorPickerSelector);
+
+      this.colorPickerCanvas = document.createElement('canvas');
+      this.colorPickerDiv.appendChild(this.colorPickerCanvas);
+
+      if (!this.colorPickerCanvas.getContext) {
+        var noCanvas = document.createElement('DIV');
+        noCanvas.style.color = 'red';
+        noCanvas.style.fontWeight = 'bold';
+        noCanvas.style.padding = '10px';
+        noCanvas.innerHTML = 'Error: your browser does not support HTML canvas';
+        this.colorPickerCanvas.appendChild(noCanvas);
+      } else {
+        var ctx = this.colorPickerCanvas.getContext("2d");
+        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);
+
+        this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);
+      }
+
+      this.colorPickerDiv.className = 'vis-color';
+
+      this.opacityDiv = document.createElement('div');
+      this.opacityDiv.className = 'vis-opacity';
+
+      this.brightnessDiv = document.createElement('div');
+      this.brightnessDiv.className = 'vis-brightness';
+
+      this.arrowDiv = document.createElement('div');
+      this.arrowDiv.className = 'vis-arrow';
+
+      this.opacityRange = document.createElement('input');
+      try {
+        this.opacityRange.type = 'range'; // Not supported on IE9
+        this.opacityRange.min = '0';
+        this.opacityRange.max = '100';
+      }
+      // TODO: Add some error handling and remove this lint exception
+      catch (err) {} // eslint-disable-line no-empty
+      this.opacityRange.value = '100';
+      this.opacityRange.className = 'vis-range';
+
+      this.brightnessRange = document.createElement('input');
+      try {
+        this.brightnessRange.type = 'range'; // Not supported on IE9
+        this.brightnessRange.min = '0';
+        this.brightnessRange.max = '100';
+      }
+      // TODO: Add some error handling and remove this lint exception
+      catch (err) {} // eslint-disable-line no-empty
+      this.brightnessRange.value = '100';
+      this.brightnessRange.className = 'vis-range';
+
+      this.opacityDiv.appendChild(this.opacityRange);
+      this.brightnessDiv.appendChild(this.brightnessRange);
+
+      var me = this;
+      this.opacityRange.onchange = function () {
+        me._setOpacity(this.value);
+      };
+      this.opacityRange.oninput = function () {
+        me._setOpacity(this.value);
+      };
+      this.brightnessRange.onchange = function () {
+        me._setBrightness(this.value);
+      };
+      this.brightnessRange.oninput = function () {
+        me._setBrightness(this.value);
+      };
+
+      this.brightnessLabel = document.createElement("div");
+      this.brightnessLabel.className = "vis-label vis-brightness";
+      this.brightnessLabel.innerHTML = 'brightness:';
+
+      this.opacityLabel = document.createElement("div");
+      this.opacityLabel.className = "vis-label vis-opacity";
+      this.opacityLabel.innerHTML = 'opacity:';
+
+      this.newColorDiv = document.createElement("div");
+      this.newColorDiv.className = "vis-new-color";
+      this.newColorDiv.innerHTML = 'new';
+
+      this.initialColorDiv = document.createElement("div");
+      this.initialColorDiv.className = "vis-initial-color";
+      this.initialColorDiv.innerHTML = 'initial';
+
+      this.cancelButton = document.createElement("div");
+      this.cancelButton.className = "vis-button vis-cancel";
+      this.cancelButton.innerHTML = 'cancel';
+      this.cancelButton.onclick = this._hide.bind(this, false);
+
+      this.applyButton = document.createElement("div");
+      this.applyButton.className = "vis-button vis-apply";
+      this.applyButton.innerHTML = 'apply';
+      this.applyButton.onclick = this._apply.bind(this);
+
+      this.saveButton = document.createElement("div");
+      this.saveButton.className = "vis-button vis-save";
+      this.saveButton.innerHTML = 'save';
+      this.saveButton.onclick = this._save.bind(this);
+
+      this.loadButton = document.createElement("div");
+      this.loadButton.className = "vis-button vis-load";
+      this.loadButton.innerHTML = 'load last';
+      this.loadButton.onclick = this._loadLast.bind(this);
+
+      this.frame.appendChild(this.colorPickerDiv);
+      this.frame.appendChild(this.arrowDiv);
+      this.frame.appendChild(this.brightnessLabel);
+      this.frame.appendChild(this.brightnessDiv);
+      this.frame.appendChild(this.opacityLabel);
+      this.frame.appendChild(this.opacityDiv);
+      this.frame.appendChild(this.newColorDiv);
+      this.frame.appendChild(this.initialColorDiv);
+
+      this.frame.appendChild(this.cancelButton);
+      this.frame.appendChild(this.applyButton);
+      this.frame.appendChild(this.saveButton);
+      this.frame.appendChild(this.loadButton);
+    }
+
+    /**
+     * bind hammer to the color picker
+     * @private
+     */
+
+  }, {
+    key: '_bindHammer',
+    value: function _bindHammer() {
+      var _this2 = this;
+
+      this.drag = {};
+      this.pinch = {};
+      this.hammer = new Hammer(this.colorPickerCanvas);
+      this.hammer.get('pinch').set({ enable: true });
+
+      hammerUtil.onTouch(this.hammer, function (event) {
+        _this2._moveSelector(event);
+      });
+      this.hammer.on('tap', function (event) {
+        _this2._moveSelector(event);
+      });
+      this.hammer.on('panstart', function (event) {
+        _this2._moveSelector(event);
+      });
+      this.hammer.on('panmove', function (event) {
+        _this2._moveSelector(event);
+      });
+      this.hammer.on('panend', function (event) {
+        _this2._moveSelector(event);
+      });
+    }
+
+    /**
+     * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.
+     * @private
+     */
+
+  }, {
+    key: '_generateHueCircle',
+    value: function _generateHueCircle() {
+      if (this.generated === false) {
+        var ctx = this.colorPickerCanvas.getContext('2d');
+        if (this.pixelRation === undefined) {
+          this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1);
+        }
+        ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);
+
+        // clear the canvas
+        var w = this.colorPickerCanvas.clientWidth;
+        var h = this.colorPickerCanvas.clientHeight;
+        ctx.clearRect(0, 0, w, h);
+
+        // draw hue circle
+        var x = void 0,
+            y = void 0,
+            hue = void 0,
+            sat = void 0;
+        this.centerCoordinates = { x: w * 0.5, y: h * 0.5 };
+        this.r = 0.49 * w;
+        var angleConvert = 2 * Math.PI / 360;
+        var hfac = 1 / 360;
+        var sfac = 1 / this.r;
+        var rgb = void 0;
+        for (hue = 0; hue < 360; hue++) {
+          for (sat = 0; sat < this.r; sat++) {
+            x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);
+            y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);
+            rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1);
+            ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')';
+            ctx.fillRect(x - 0.5, y - 0.5, 2, 2);
+          }
+        }
+        ctx.strokeStyle = 'rgba(0,0,0,1)';
+        ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);
+        ctx.stroke();
+
+        this.hueCircle = ctx.getImageData(0, 0, w, h);
+      }
+      this.generated = true;
+    }
+
+    /**
+     * move the selector. This is called by hammer functions.
+     *
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_moveSelector',
+    value: function _moveSelector(event) {
+      var rect = this.colorPickerDiv.getBoundingClientRect();
+      var left = event.center.x - rect.left;
+      var top = event.center.y - rect.top;
+
+      var centerY = 0.5 * this.colorPickerDiv.clientHeight;
+      var centerX = 0.5 * this.colorPickerDiv.clientWidth;
+
+      var x = left - centerX;
+      var y = top - centerY;
+
+      var angle = Math.atan2(x, y);
+      var radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);
+
+      var newTop = Math.cos(angle) * radius + centerY;
+      var newLeft = Math.sin(angle) * radius + centerX;
+
+      this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px';
+      this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px';
+
+      // set color
+      var h = angle / (2 * Math.PI);
+      h = h < 0 ? h + 1 : h;
+      var s = radius / this.r;
+      var hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);
+      hsv.h = h;
+      hsv.s = s;
+      var rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);
+      rgba['a'] = this.color.a;
+      this.color = rgba;
+
+      // update previews
+      this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';
+      this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';
+    }
+  }]);
+  return ColorPicker;
+}();
+
+exports['default'] = ColorPicker;
+
+/***/ }),
+/* 180 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var moment = __webpack_require__(9);
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Range = __webpack_require__(64);
+var Core = __webpack_require__(65);
+var TimeAxis = __webpack_require__(45);
+var CurrentTime = __webpack_require__(67);
+var CustomTime = __webpack_require__(46);
+var LineGraph = __webpack_require__(106);
+
+var printStyle = __webpack_require__(15).printStyle;
+var allOptions = __webpack_require__(113).allOptions;
+var configureOptions = __webpack_require__(113).configureOptions;
+
+var Configurator = __webpack_require__(71)['default'];
+var Validator = __webpack_require__(15)['default'];
+
+/**
+ * Create a timeline visualization
+ * @param {HTMLElement} container
+ * @param {vis.DataSet | Array} [items]
+ * @param {vis.DataSet | Array | vis.DataView | Object} [groups]
+ * @param {Object} [options]  See Graph2d.setOptions for the available options.
+ * @constructor Graph2d
+ * @extends Core
+ */
+function Graph2d(container, items, groups, options) {
+  // if the third element is options, the forth is groups (optionally);
+  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {
+    var forthArgument = options;
+    options = groups;
+    groups = forthArgument;
+  }
+
+  // TODO: REMOVE THIS in the next MAJOR release
+  // see https://github.com/almende/vis/issues/2511
+  if (options && options.throttleRedraw) {
+    console.warn("Graph2d option \"throttleRedraw\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.");
+  }
+
+  var me = this;
+  this.defaultOptions = {
+    start: null,
+    end: null,
+
+    autoResize: true,
+
+    orientation: {
+      axis: 'bottom', // axis orientation: 'bottom', 'top', or 'both'
+      item: 'bottom' // not relevant for Graph2d
+    },
+
+    moment: moment,
+
+    width: null,
+    height: null,
+    maxHeight: null,
+    minHeight: null
+  };
+  this.options = util.deepExtend({}, this.defaultOptions);
+
+  // Create the DOM, props, and emitter
+  this._create(container);
+
+  // all components listed here will be repainted automatically
+  this.components = [];
+
+  this.body = {
+    dom: this.dom,
+    domProps: this.props,
+    emitter: {
+      on: this.on.bind(this),
+      off: this.off.bind(this),
+      emit: this.emit.bind(this)
+    },
+    hiddenDates: [],
+    util: {
+      toScreen: me._toScreen.bind(me),
+      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width
+      toTime: me._toTime.bind(me),
+      toGlobalTime: me._toGlobalTime.bind(me)
+    }
+  };
+
+  // range
+  this.range = new Range(this.body);
+  this.components.push(this.range);
+  this.body.range = this.range;
+
+  // time axis
+  this.timeAxis = new TimeAxis(this.body);
+  this.components.push(this.timeAxis);
+  //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis);
+
+  // current time bar
+  this.currentTime = new CurrentTime(this.body);
+  this.components.push(this.currentTime);
+
+  // item set
+  this.linegraph = new LineGraph(this.body);
+
+  this.components.push(this.linegraph);
+
+  this.itemsData = null; // DataSet
+  this.groupsData = null; // DataSet
+
+
+  this.on('tap', function (event) {
+    me.emit('click', me.getEventProperties(event));
+  });
+  this.on('doubletap', function (event) {
+    me.emit('doubleClick', me.getEventProperties(event));
+  });
+  this.dom.root.oncontextmenu = function (event) {
+    me.emit('contextmenu', me.getEventProperties(event));
+  };
+
+  // apply options
+  if (options) {
+    this.setOptions(options);
+  }
+
+  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!
+  if (groups) {
+    this.setGroups(groups);
+  }
+
+  // create itemset
+  if (items) {
+    this.setItems(items);
+  }
+
+  // draw for the first time
+  this._redraw();
+}
+
+// Extend the functionality from Core
+Graph2d.prototype = new Core();
+
+Graph2d.prototype.setOptions = function (options) {
+  // validate options
+  var errorFound = Validator.validate(options, allOptions);
+  if (errorFound === true) {
+    console.log('%cErrors have been found in the supplied options object.', printStyle);
+  }
+
+  Core.prototype.setOptions.call(this, options);
+};
+
+/**
+ * Set items
+ * @param {vis.DataSet | Array | null} items
+ */
+Graph2d.prototype.setItems = function (items) {
+  var initialLoad = this.itemsData == null;
+
+  // convert to type DataSet when needed
+  var newDataSet;
+  if (!items) {
+    newDataSet = null;
+  } else if (items instanceof DataSet || items instanceof DataView) {
+    newDataSet = items;
+  } else {
+    // turn an array into a dataset
+    newDataSet = new DataSet(items, {
+      type: {
+        start: 'Date',
+        end: 'Date'
+      }
+    });
+  }
+
+  // set items
+  this.itemsData = newDataSet;
+  this.linegraph && this.linegraph.setItems(newDataSet);
+
+  if (initialLoad) {
+    if (this.options.start != undefined || this.options.end != undefined) {
+      var start = this.options.start != undefined ? this.options.start : null;
+      var end = this.options.end != undefined ? this.options.end : null;
+      this.setWindow(start, end, { animation: false });
+    } else {
+      this.fit({ animation: false });
+    }
+  }
+};
+
+/**
+ * Set groups
+ * @param {vis.DataSet | Array} groups
+ */
+Graph2d.prototype.setGroups = function (groups) {
+  // convert to type DataSet when needed
+  var newDataSet;
+  if (!groups) {
+    newDataSet = null;
+  } else if (groups instanceof DataSet || groups instanceof DataView) {
+    newDataSet = groups;
+  } else {
+    // turn an array into a dataset
+    newDataSet = new DataSet(groups);
+  }
+
+  this.groupsData = newDataSet;
+  this.linegraph.setGroups(newDataSet);
+};
+
+/**
+ * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right).
+ * @param {vis.GraphGroup.id} groupId
+ * @param {number} width
+ * @param {number} height
+ * @returns {{icon: SVGElement, label: string, orientation: string}|string}
+ */
+Graph2d.prototype.getLegend = function (groupId, width, height) {
+  if (width === undefined) {
+    width = 15;
+  }
+  if (height === undefined) {
+    height = 15;
+  }
+  if (this.linegraph.groups[groupId] !== undefined) {
+    return this.linegraph.groups[groupId].getLegend(width, height);
+  } else {
+    return "cannot find group:'" + groupId + "'";
+  }
+};
+
+/**
+ * This checks if the visible option of the supplied group (by ID) is true or false.
+ * @param {vis.GraphGroup.id} groupId
+ * @returns {boolean}
+ */
+Graph2d.prototype.isGroupVisible = function (groupId) {
+  if (this.linegraph.groups[groupId] !== undefined) {
+    return this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true);
+  } else {
+    return false;
+  }
+};
+
+/**
+ * Get the data range of the item set.
+ * @returns {{min: Date, max: Date}} range  A range with a start and end Date.
+ *                                          When no minimum is found, min==null
+ *                                          When no maximum is found, max==null
+ */
+Graph2d.prototype.getDataRange = function () {
+  var min = null;
+  var max = null;
+
+  // calculate min from start filed
+  for (var groupId in this.linegraph.groups) {
+    if (this.linegraph.groups.hasOwnProperty(groupId)) {
+      if (this.linegraph.groups[groupId].visible == true) {
+        for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) {
+          var item = this.linegraph.groups[groupId].itemsData[i];
+          var value = util.convert(item.x, 'Date').valueOf();
+          min = min == null ? value : min > value ? value : min;
+          max = max == null ? value : max < value ? value : max;
+        }
+      }
+    }
+  }
+
+  return {
+    min: min != null ? new Date(min) : null,
+    max: max != null ? new Date(max) : null
+  };
+};
+
+/**
+ * Generate Timeline related information from an event
+ * @param {Event} event
+ * @return {Object} An object with related information, like on which area
+ *                  The event happened, whether clicked on an item, etc.
+ */
+Graph2d.prototype.getEventProperties = function (event) {
+  var clientX = event.center ? event.center.x : event.clientX;
+  var clientY = event.center ? event.center.y : event.clientY;
+  var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);
+  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);
+  var time = this._toTime(x);
+
+  var customTime = CustomTime.customTimeFromTarget(event);
+
+  var element = util.getTarget(event);
+  var what = null;
+  if (util.hasParent(element, this.timeAxis.dom.foreground)) {
+    what = 'axis';
+  } else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {
+    what = 'axis';
+  } else if (util.hasParent(element, this.linegraph.yAxisLeft.dom.frame)) {
+    what = 'data-axis';
+  } else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame)) {
+    what = 'data-axis';
+  } else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame)) {
+    what = 'legend';
+  } else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) {
+    what = 'legend';
+  } else if (customTime != null) {
+    what = 'custom-time';
+  } else if (util.hasParent(element, this.currentTime.bar)) {
+    what = 'current-time';
+  } else if (util.hasParent(element, this.dom.center)) {
+    what = 'background';
+  }
+
+  var value = [];
+  var yAxisLeft = this.linegraph.yAxisLeft;
+  var yAxisRight = this.linegraph.yAxisRight;
+  if (!yAxisLeft.hidden && this.itemsData.length > 0) {
+    value.push(yAxisLeft.screenToValue(y));
+  }
+  if (!yAxisRight.hidden && this.itemsData.length > 0) {
+    value.push(yAxisRight.screenToValue(y));
+  }
+
+  return {
+    event: event,
+    what: what,
+    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,
+    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,
+    x: x,
+    y: y,
+    time: time,
+    value: value
+  };
+};
+
+/**
+ * Load a configurator
+ * @return {Object}
+ * @private
+ */
+Graph2d.prototype._createConfigurator = function () {
+  return new Configurator(this, this.dom.container, configureOptions);
+};
+
+module.exports = Graph2d;
+
+/***/ }),
+/* 181 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// utils
+exports.util = __webpack_require__(2);
+exports.DOMutil = __webpack_require__(14);
+
+// data
+exports.DataSet = __webpack_require__(11);
+exports.DataView = __webpack_require__(12);
+exports.Queue = __webpack_require__(43);
+
+// Network
+exports.Network = __webpack_require__(182);
+exports.network = {
+  Images: __webpack_require__(116),
+  dotparser: __webpack_require__(114),
+  gephiParser: __webpack_require__(115),
+  allOptions: __webpack_require__(122)
+};
+exports.network.convertDot = function (input) {
+  return exports.network.dotparser.DOTToGraph(input);
+};
+exports.network.convertGephi = function (input, options) {
+  return exports.network.gephiParser.parseGephi(input, options);
+};
+
+// bundled external libraries
+exports.moment = __webpack_require__(9);
+exports.Hammer = __webpack_require__(10);
+exports.keycharm = __webpack_require__(35);
+
+/***/ }),
+/* 182 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// Load custom shapes into CanvasRenderingContext2D
+__webpack_require__(183);
+
+var Emitter = __webpack_require__(44);
+var util = __webpack_require__(2);
+var dotparser = __webpack_require__(114);
+var gephiParser = __webpack_require__(115);
+var Activator = __webpack_require__(97);
+var locales = __webpack_require__(184);
+
+var Images = __webpack_require__(116)['default'];
+var Groups = __webpack_require__(186)['default'];
+var NodesHandler = __webpack_require__(187)['default'];
+var EdgesHandler = __webpack_require__(214)['default'];
+var PhysicsEngine = __webpack_require__(220)['default'];
+var ClusterEngine = __webpack_require__(227)['default'];
+var CanvasRenderer = __webpack_require__(229)['default'];
+var Canvas = __webpack_require__(230)['default'];
+var View = __webpack_require__(231)['default'];
+var InteractionHandler = __webpack_require__(232)['default'];
+var SelectionHandler = __webpack_require__(234)['default'];
+var LayoutEngine = __webpack_require__(235)['default'];
+var ManipulationSystem = __webpack_require__(237)['default'];
+var Configurator = __webpack_require__(71)['default'];
+var Validator = __webpack_require__(15)['default'];
+
+var _require = __webpack_require__(15),
+    printStyle = _require.printStyle;
+
+var _require2 = __webpack_require__(122),
+    allOptions = _require2.allOptions,
+    configureOptions = _require2.configureOptions;
+
+var KamadaKawai = __webpack_require__(238)['default'];
+
+/**
+ * Create a network visualization, displaying nodes and edges.
+ *
+ * @param {Element} container   The DOM element in which the Network will
+ *                                  be created. Normally a div element.
+ * @param {Object} data         An object containing parameters
+ *                              {Array} nodes
+ *                              {Array} edges
+ * @param {Object} options      Options
+ * @constructor Network
+ */
+function Network(container, data, options) {
+  var _this = this;
+
+  if (!(this instanceof Network)) {
+    throw new SyntaxError('Constructor must be called with the new operator');
+  }
+
+  // set constant values
+  this.options = {};
+  this.defaultOptions = {
+    locale: 'en',
+    locales: locales,
+    clickToUse: false
+  };
+  util.extend(this.options, this.defaultOptions);
+
+  /**
+   * Containers for nodes and edges.
+   *
+   * 'edges' and 'nodes' contain the full definitions of all the network elements.
+   * 'nodeIndices' and 'edgeIndices' contain the id's of the active elements.
+   *
+   * The distinction is important, because a defined node need not be active, i.e.
+   * visible on the canvas. This happens in particular when clusters are defined, in
+   * that case there will be nodes and edges not displayed.
+   * The bottom line is that all code with actions related to visibility, *must* use
+   * 'nodeIndices' and 'edgeIndices', not 'nodes' and 'edges' directly.
+   */
+  this.body = {
+    container: container,
+
+    // See comment above for following fields
+    nodes: {},
+    nodeIndices: [],
+    edges: {},
+    edgeIndices: [],
+
+    emitter: {
+      on: this.on.bind(this),
+      off: this.off.bind(this),
+      emit: this.emit.bind(this),
+      once: this.once.bind(this)
+    },
+    eventListeners: {
+      onTap: function onTap() {},
+      onTouch: function onTouch() {},
+      onDoubleTap: function onDoubleTap() {},
+      onHold: function onHold() {},
+      onDragStart: function onDragStart() {},
+      onDrag: function onDrag() {},
+      onDragEnd: function onDragEnd() {},
+      onMouseWheel: function onMouseWheel() {},
+      onPinch: function onPinch() {},
+      onMouseMove: function onMouseMove() {},
+      onRelease: function onRelease() {},
+      onContext: function onContext() {}
+    },
+    data: {
+      nodes: null, // A DataSet or DataView
+      edges: null // A DataSet or DataView
+    },
+    functions: {
+      createNode: function createNode() {},
+      createEdge: function createEdge() {},
+      getPointer: function getPointer() {}
+    },
+    modules: {},
+    view: {
+      scale: 1,
+      translation: { x: 0, y: 0 }
+    }
+  };
+
+  // bind the event listeners
+  this.bindEventListeners();
+
+  // setting up all modules
+  this.images = new Images(function () {
+    return _this.body.emitter.emit("_requestRedraw");
+  }); // object with images
+  this.groups = new Groups(); // object with groups
+  this.canvas = new Canvas(this.body); // DOM handler
+  this.selectionHandler = new SelectionHandler(this.body, this.canvas); // Selection handler
+  this.interactionHandler = new InteractionHandler(this.body, this.canvas, this.selectionHandler); // Interaction handler handles all the hammer bindings (that are bound by canvas), key
+  this.view = new View(this.body, this.canvas); // camera handler, does animations and zooms
+  this.renderer = new CanvasRenderer(this.body, this.canvas); // renderer, starts renderloop, has events that modules can hook into
+  this.physics = new PhysicsEngine(this.body); // physics engine, does all the simulations
+  this.layoutEngine = new LayoutEngine(this.body); // layout engine for inital layout and hierarchical layout
+  this.clustering = new ClusterEngine(this.body); // clustering api
+  this.manipulation = new ManipulationSystem(this.body, this.canvas, this.selectionHandler); // data manipulation system
+
+  this.nodesHandler = new NodesHandler(this.body, this.images, this.groups, this.layoutEngine); // Handle adding, deleting and updating of nodes as well as global options
+  this.edgesHandler = new EdgesHandler(this.body, this.images, this.groups); // Handle adding, deleting and updating of edges as well as global options
+
+  this.body.modules["kamadaKawai"] = new KamadaKawai(this.body, 150, 0.05); // Layouting algorithm.
+  this.body.modules["clustering"] = this.clustering;
+
+  // create the DOM elements
+  this.canvas._create();
+
+  // apply options
+  this.setOptions(options);
+
+  // load data (the disable start variable will be the same as the enabled clustering)
+  this.setData(data);
+}
+
+// Extend Network with an Emitter mixin
+Emitter(Network.prototype);
+
+/**
+ * Set options
+ * @param {Object} options
+ */
+Network.prototype.setOptions = function (options) {
+  var _this2 = this;
+
+  if (options !== undefined) {
+    var errorFound = Validator.validate(options, allOptions);
+    if (errorFound === true) {
+      console.log('%cErrors have been found in the supplied options object.', printStyle);
+    }
+
+    // copy the global fields over
+    var fields = ['locale', 'locales', 'clickToUse'];
+    util.selectiveDeepExtend(fields, this.options, options);
+
+    // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.
+    options = this.layoutEngine.setOptions(options.layout, options);
+
+    this.canvas.setOptions(options); // options for canvas are in globals
+
+    // pass the options to the modules
+    this.groups.setOptions(options.groups);
+    this.nodesHandler.setOptions(options.nodes);
+    this.edgesHandler.setOptions(options.edges);
+    this.physics.setOptions(options.physics);
+    this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals
+
+    this.interactionHandler.setOptions(options.interaction);
+    this.renderer.setOptions(options.interaction); // options for rendering are in interaction
+    this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction
+
+    // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.
+    if (options.groups !== undefined) {
+      this.body.emitter.emit("refreshNodes");
+    }
+    // these two do not have options at the moment, here for completeness
+    //this.view.setOptions(options.view);
+    //this.clustering.setOptions(options.clustering);
+
+    if ('configure' in options) {
+      if (!this.configurator) {
+        this.configurator = new Configurator(this, this.body.container, configureOptions, this.canvas.pixelRatio);
+      }
+
+      this.configurator.setOptions(options.configure);
+    }
+
+    // if the configuration system is enabled, copy all options and put them into the config system
+    if (this.configurator && this.configurator.options.enabled === true) {
+      var networkOptions = { nodes: {}, edges: {}, layout: {}, interaction: {}, manipulation: {}, physics: {}, global: {} };
+      util.deepExtend(networkOptions.nodes, this.nodesHandler.options);
+      util.deepExtend(networkOptions.edges, this.edgesHandler.options);
+      util.deepExtend(networkOptions.layout, this.layoutEngine.options);
+      // load the selectionHandler and render default options in to the interaction group
+      util.deepExtend(networkOptions.interaction, this.selectionHandler.options);
+      util.deepExtend(networkOptions.interaction, this.renderer.options);
+
+      util.deepExtend(networkOptions.interaction, this.interactionHandler.options);
+      util.deepExtend(networkOptions.manipulation, this.manipulation.options);
+      util.deepExtend(networkOptions.physics, this.physics.options);
+
+      // load globals into the global object
+      util.deepExtend(networkOptions.global, this.canvas.options);
+      util.deepExtend(networkOptions.global, this.options);
+
+      this.configurator.setModuleOptions(networkOptions);
+    }
+
+    // handle network global options
+    if (options.clickToUse !== undefined) {
+      if (options.clickToUse === true) {
+        if (this.activator === undefined) {
+          this.activator = new Activator(this.canvas.frame);
+          this.activator.on('change', function () {
+            _this2.body.emitter.emit("activate");
+          });
+        }
+      } else {
+        if (this.activator !== undefined) {
+          this.activator.destroy();
+          delete this.activator;
+        }
+        this.body.emitter.emit("activate");
+      }
+    } else {
+      this.body.emitter.emit("activate");
+    }
+
+    this.canvas.setSize();
+    // start the physics simulation. Can be safely called multiple times.
+    this.body.emitter.emit("startSimulation");
+  }
+};
+
+/**
+ * Update the visible nodes and edges list with the most recent node state.
+ *
+ * Visible nodes are stored in this.body.nodeIndices.
+ * Visible edges are stored in this.body.edgeIndices.
+ * A node or edges is visible if it is not hidden or clustered.
+ *
+ * @private
+ */
+Network.prototype._updateVisibleIndices = function () {
+  var nodes = this.body.nodes;
+  var edges = this.body.edges;
+  this.body.nodeIndices = [];
+  this.body.edgeIndices = [];
+
+  for (var nodeId in nodes) {
+    if (nodes.hasOwnProperty(nodeId)) {
+      if (!this.clustering._isClusteredNode(nodeId) && nodes[nodeId].options.hidden === false) {
+        this.body.nodeIndices.push(nodes[nodeId].id);
+      }
+    }
+  }
+
+  for (var edgeId in edges) {
+    if (edges.hasOwnProperty(edgeId)) {
+      var edge = edges[edgeId];
+
+      // It can happen that this is executed *after* a node edge has been removed,
+      // but *before* the edge itself has been removed. Taking this into account.
+      var fromNode = nodes[edge.fromId];
+      var toNode = nodes[edge.toId];
+      var edgeNodesPresent = fromNode !== undefined && toNode !== undefined;
+
+      var isVisible = !this.clustering._isClusteredEdge(edgeId) && edge.options.hidden === false && edgeNodesPresent && fromNode.options.hidden === false // Also hidden if any of its connecting nodes are hidden
+      && toNode.options.hidden === false; // idem
+
+      if (isVisible) {
+        this.body.edgeIndices.push(edge.id);
+      }
+    }
+  }
+};
+
+/**
+ * Bind all events
+ */
+Network.prototype.bindEventListeners = function () {
+  var _this3 = this;
+
+  // This event will trigger a rebuilding of the cache everything.
+  // Used when nodes or edges have been added or removed.
+  this.body.emitter.on("_dataChanged", function () {
+    _this3.edgesHandler._updateState();
+    _this3.body.emitter.emit("_dataUpdated");
+  });
+
+  // this is called when options of EXISTING nodes or edges have changed.
+  this.body.emitter.on("_dataUpdated", function () {
+    // Order important in following block
+    _this3.clustering._updateState();
+    _this3._updateVisibleIndices();
+
+    _this3._updateValueRange(_this3.body.nodes);
+    _this3._updateValueRange(_this3.body.edges);
+    // start simulation (can be called safely, even if already running)
+    _this3.body.emitter.emit("startSimulation");
+    _this3.body.emitter.emit("_requestRedraw");
+  });
+};
+
+/**
+ * Set nodes and edges, and optionally options as well.
+ *
+ * @param {Object} data              Object containing parameters:
+ *                                   {Array | DataSet | DataView} [nodes] Array with nodes
+ *                                   {Array | DataSet | DataView} [edges] Array with edges
+ *                                   {String} [dot] String containing data in DOT format
+ *                                   {String} [gephi] String containing data in gephi JSON format
+ *                                   {Options} [options] Object with options
+ */
+Network.prototype.setData = function (data) {
+  // reset the physics engine.
+  this.body.emitter.emit("resetPhysics");
+  this.body.emitter.emit("_resetData");
+
+  // unselect all to ensure no selections from old data are carried over.
+  this.selectionHandler.unselectAll();
+
+  if (data && data.dot && (data.nodes || data.edges)) {
+    throw new SyntaxError('Data must contain either parameter "dot" or ' + ' parameter pair "nodes" and "edges", but not both.');
+  }
+
+  // set options
+  this.setOptions(data && data.options);
+  // set all data
+  if (data && data.dot) {
+    console.log('The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);');
+    // parse DOT file
+    var dotData = dotparser.DOTToGraph(data.dot);
+    this.setData(dotData);
+    return;
+  } else if (data && data.gephi) {
+    // parse DOT file
+    console.log('The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);');
+    var gephiData = gephiParser.parseGephi(data.gephi);
+    this.setData(gephiData);
+    return;
+  } else {
+    this.nodesHandler.setData(data && data.nodes, true);
+    this.edgesHandler.setData(data && data.edges, true);
+  }
+
+  // emit change in data
+  this.body.emitter.emit("_dataChanged");
+
+  // emit data loaded
+  this.body.emitter.emit("_dataLoaded");
+
+  // find a stable position or start animating to a stable position
+  this.body.emitter.emit("initPhysics");
+};
+
+/**
+ * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.
+ * var network = new vis.Network(..);
+ * network.destroy();
+ * network = null;
+ */
+Network.prototype.destroy = function () {
+  this.body.emitter.emit("destroy");
+  // clear events
+  this.body.emitter.off();
+  this.off();
+
+  // delete modules
+  delete this.groups;
+  delete this.canvas;
+  delete this.selectionHandler;
+  delete this.interactionHandler;
+  delete this.view;
+  delete this.renderer;
+  delete this.physics;
+  delete this.layoutEngine;
+  delete this.clustering;
+  delete this.manipulation;
+  delete this.nodesHandler;
+  delete this.edgesHandler;
+  delete this.configurator;
+  delete this.images;
+
+  for (var nodeId in this.body.nodes) {
+    if (!this.body.nodes.hasOwnProperty(nodeId)) continue;
+    delete this.body.nodes[nodeId];
+  }
+
+  for (var edgeId in this.body.edges) {
+    if (!this.body.edges.hasOwnProperty(edgeId)) continue;
+    delete this.body.edges[edgeId];
+  }
+
+  // remove the container and everything inside it recursively
+  util.recursiveDOMDelete(this.body.container);
+};
+
+/**
+ * Update the values of all object in the given array according to the current
+ * value range of the objects in the array.
+ * @param {Object} obj    An object containing a set of Edges or Nodes
+ *                        The objects must have a method getValue() and
+ *                        setValueRange(min, max).
+ * @private
+ */
+Network.prototype._updateValueRange = function (obj) {
+  var id;
+
+  // determine the range of the objects
+  var valueMin = undefined;
+  var valueMax = undefined;
+  var valueTotal = 0;
+  for (id in obj) {
+    if (obj.hasOwnProperty(id)) {
+      var value = obj[id].getValue();
+      if (value !== undefined) {
+        valueMin = valueMin === undefined ? value : Math.min(value, valueMin);
+        valueMax = valueMax === undefined ? value : Math.max(value, valueMax);
+        valueTotal += value;
+      }
+    }
+  }
+
+  // adjust the range of all objects
+  if (valueMin !== undefined && valueMax !== undefined) {
+    for (id in obj) {
+      if (obj.hasOwnProperty(id)) {
+        obj[id].setValueRange(valueMin, valueMax, valueTotal);
+      }
+    }
+  }
+};
+
+/**
+ * Returns true when the Network is active.
+ * @returns {boolean}
+ */
+Network.prototype.isActive = function () {
+  return !this.activator || this.activator.active;
+};
+
+Network.prototype.setSize = function () {
+  return this.canvas.setSize.apply(this.canvas, arguments);
+};
+Network.prototype.canvasToDOM = function () {
+  return this.canvas.canvasToDOM.apply(this.canvas, arguments);
+};
+Network.prototype.DOMtoCanvas = function () {
+  return this.canvas.DOMtoCanvas.apply(this.canvas, arguments);
+};
+Network.prototype.findNode = function () {
+  return this.clustering.findNode.apply(this.clustering, arguments);
+};
+Network.prototype.isCluster = function () {
+  return this.clustering.isCluster.apply(this.clustering, arguments);
+};
+Network.prototype.openCluster = function () {
+  return this.clustering.openCluster.apply(this.clustering, arguments);
+};
+Network.prototype.cluster = function () {
+  return this.clustering.cluster.apply(this.clustering, arguments);
+};
+Network.prototype.getNodesInCluster = function () {
+  return this.clustering.getNodesInCluster.apply(this.clustering, arguments);
+};
+Network.prototype.clusterByConnection = function () {
+  return this.clustering.clusterByConnection.apply(this.clustering, arguments);
+};
+Network.prototype.clusterByHubsize = function () {
+  return this.clustering.clusterByHubsize.apply(this.clustering, arguments);
+};
+Network.prototype.clusterOutliers = function () {
+  return this.clustering.clusterOutliers.apply(this.clustering, arguments);
+};
+Network.prototype.getSeed = function () {
+  return this.layoutEngine.getSeed.apply(this.layoutEngine, arguments);
+};
+Network.prototype.enableEditMode = function () {
+  return this.manipulation.enableEditMode.apply(this.manipulation, arguments);
+};
+Network.prototype.disableEditMode = function () {
+  return this.manipulation.disableEditMode.apply(this.manipulation, arguments);
+};
+Network.prototype.addNodeMode = function () {
+  return this.manipulation.addNodeMode.apply(this.manipulation, arguments);
+};
+Network.prototype.editNode = function () {
+  return this.manipulation.editNode.apply(this.manipulation, arguments);
+};
+Network.prototype.editNodeMode = function () {
+  console.log("Deprecated: Please use editNode instead of editNodeMode.");return this.manipulation.editNode.apply(this.manipulation, arguments);
+};
+Network.prototype.addEdgeMode = function () {
+  return this.manipulation.addEdgeMode.apply(this.manipulation, arguments);
+};
+Network.prototype.editEdgeMode = function () {
+  return this.manipulation.editEdgeMode.apply(this.manipulation, arguments);
+};
+Network.prototype.deleteSelected = function () {
+  return this.manipulation.deleteSelected.apply(this.manipulation, arguments);
+};
+Network.prototype.getPositions = function () {
+  return this.nodesHandler.getPositions.apply(this.nodesHandler, arguments);
+};
+Network.prototype.storePositions = function () {
+  return this.nodesHandler.storePositions.apply(this.nodesHandler, arguments);
+};
+Network.prototype.moveNode = function () {
+  return this.nodesHandler.moveNode.apply(this.nodesHandler, arguments);
+};
+Network.prototype.getBoundingBox = function () {
+  return this.nodesHandler.getBoundingBox.apply(this.nodesHandler, arguments);
+};
+Network.prototype.getConnectedNodes = function (objectId) {
+  if (this.body.nodes[objectId] !== undefined) {
+    return this.nodesHandler.getConnectedNodes.apply(this.nodesHandler, arguments);
+  } else {
+    return this.edgesHandler.getConnectedNodes.apply(this.edgesHandler, arguments);
+  }
+};
+Network.prototype.getConnectedEdges = function () {
+  return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler, arguments);
+};
+Network.prototype.startSimulation = function () {
+  return this.physics.startSimulation.apply(this.physics, arguments);
+};
+Network.prototype.stopSimulation = function () {
+  return this.physics.stopSimulation.apply(this.physics, arguments);
+};
+Network.prototype.stabilize = function () {
+  return this.physics.stabilize.apply(this.physics, arguments);
+};
+Network.prototype.getSelection = function () {
+  return this.selectionHandler.getSelection.apply(this.selectionHandler, arguments);
+};
+Network.prototype.setSelection = function () {
+  return this.selectionHandler.setSelection.apply(this.selectionHandler, arguments);
+};
+Network.prototype.getSelectedNodes = function () {
+  return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler, arguments);
+};
+Network.prototype.getSelectedEdges = function () {
+  return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler, arguments);
+};
+Network.prototype.getNodeAt = function () {
+  var node = this.selectionHandler.getNodeAt.apply(this.selectionHandler, arguments);
+  if (node !== undefined && node.id !== undefined) {
+    return node.id;
+  }
+  return node;
+};
+Network.prototype.getEdgeAt = function () {
+  var edge = this.selectionHandler.getEdgeAt.apply(this.selectionHandler, arguments);
+  if (edge !== undefined && edge.id !== undefined) {
+    return edge.id;
+  }
+  return edge;
+};
+Network.prototype.selectNodes = function () {
+  return this.selectionHandler.selectNodes.apply(this.selectionHandler, arguments);
+};
+Network.prototype.selectEdges = function () {
+  return this.selectionHandler.selectEdges.apply(this.selectionHandler, arguments);
+};
+Network.prototype.unselectAll = function () {
+  this.selectionHandler.unselectAll.apply(this.selectionHandler, arguments);
+  this.redraw();
+};
+Network.prototype.redraw = function () {
+  return this.renderer.redraw.apply(this.renderer, arguments);
+};
+Network.prototype.getScale = function () {
+  return this.view.getScale.apply(this.view, arguments);
+};
+Network.prototype.getViewPosition = function () {
+  return this.view.getViewPosition.apply(this.view, arguments);
+};
+Network.prototype.fit = function () {
+  return this.view.fit.apply(this.view, arguments);
+};
+Network.prototype.moveTo = function () {
+  return this.view.moveTo.apply(this.view, arguments);
+};
+Network.prototype.focus = function () {
+  return this.view.focus.apply(this.view, arguments);
+};
+Network.prototype.releaseNode = function () {
+  return this.view.releaseNode.apply(this.view, arguments);
+};
+Network.prototype.getOptionsFromConfigurator = function () {
+  var options = {};
+  if (this.configurator) {
+    options = this.configurator.getOptions.apply(this.configurator);
+  }
+  return options;
+};
+
+module.exports = Network;
+
+/***/ }),
+/* 183 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * Canvas shapes used by Network
+ */
+if (typeof CanvasRenderingContext2D !== 'undefined') {
+
+  /**
+   * Draw a circle shape
+   *
+   * @param {number} x
+   * @param {number} y
+   * @param {number} r
+   */
+  CanvasRenderingContext2D.prototype.circle = function (x, y, r) {
+    this.beginPath();
+    this.arc(x, y, r, 0, 2 * Math.PI, false);
+    this.closePath();
+  };
+
+  /**
+   * Draw a square shape
+   * @param {number} x horizontal center
+   * @param {number} y vertical center
+   * @param {number} r   size, width and height of the square
+   */
+  CanvasRenderingContext2D.prototype.square = function (x, y, r) {
+    this.beginPath();
+    this.rect(x - r, y - r, r * 2, r * 2);
+    this.closePath();
+  };
+
+  /**
+   * Draw a triangle shape
+   * @param {number} x horizontal center
+   * @param {number} y vertical center
+   * @param {number} r   radius, half the length of the sides of the triangle
+   */
+  CanvasRenderingContext2D.prototype.triangle = function (x, y, r) {
+    // http://en.wikipedia.org/wiki/Equilateral_triangle
+    this.beginPath();
+
+    // the change in radius and the offset is here to center the shape
+    r *= 1.15;
+    y += 0.275 * r;
+
+    var s = r * 2;
+    var s2 = s / 2;
+    var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
+    var h = Math.sqrt(s * s - s2 * s2); // height
+
+
+    this.moveTo(x, y - (h - ir));
+    this.lineTo(x + s2, y + ir);
+    this.lineTo(x - s2, y + ir);
+    this.lineTo(x, y - (h - ir));
+    this.closePath();
+  };
+
+  /**
+   * Draw a triangle shape in downward orientation
+   * @param {number} x horizontal center
+   * @param {number} y vertical center
+   * @param {number} r radius
+   */
+  CanvasRenderingContext2D.prototype.triangleDown = function (x, y, r) {
+    // http://en.wikipedia.org/wiki/Equilateral_triangle
+    this.beginPath();
+
+    // the change in radius and the offset is here to center the shape
+    r *= 1.15;
+    y -= 0.275 * r;
+
+    var s = r * 2;
+    var s2 = s / 2;
+    var ir = Math.sqrt(3) / 6 * s; // radius of inner circle
+    var h = Math.sqrt(s * s - s2 * s2); // height
+
+    this.moveTo(x, y + (h - ir));
+    this.lineTo(x + s2, y - ir);
+    this.lineTo(x - s2, y - ir);
+    this.lineTo(x, y + (h - ir));
+    this.closePath();
+  };
+
+  /**
+   * Draw a star shape, a star with 5 points
+   * @param {number} x horizontal center
+   * @param {number} y vertical center
+   * @param {number} r   radius, half the length of the sides of the triangle
+   */
+  CanvasRenderingContext2D.prototype.star = function (x, y, r) {
+    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/
+    this.beginPath();
+
+    // the change in radius and the offset is here to center the shape
+    r *= 0.82;
+    y += 0.1 * r;
+
+    for (var n = 0; n < 10; n++) {
+      var radius = n % 2 === 0 ? r * 1.3 : r * 0.5;
+      this.lineTo(x + radius * Math.sin(n * 2 * Math.PI / 10), y - radius * Math.cos(n * 2 * Math.PI / 10));
+    }
+
+    this.closePath();
+  };
+
+  /**
+   * Draw a Diamond shape
+   * @param {number} x horizontal center
+   * @param {number} y vertical center
+   * @param {number} r   radius, half the length of the sides of the triangle
+   */
+  CanvasRenderingContext2D.prototype.diamond = function (x, y, r) {
+    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/
+    this.beginPath();
+
+    this.lineTo(x, y + r);
+    this.lineTo(x + r, y);
+    this.lineTo(x, y - r);
+    this.lineTo(x - r, y);
+
+    this.closePath();
+  };
+
+  /**
+   * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas
+   *
+   * @param {number} x
+   * @param {number} y
+   * @param {number} w
+   * @param {number} h
+   * @param {number} r
+   */
+  CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {
+    var r2d = Math.PI / 180;
+    if (w - 2 * r < 0) {
+      r = w / 2;
+    } //ensure that the radius isn't too large for x
+    if (h - 2 * r < 0) {
+      r = h / 2;
+    } //ensure that the radius isn't too large for y
+    this.beginPath();
+    this.moveTo(x + r, y);
+    this.lineTo(x + w - r, y);
+    this.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);
+    this.lineTo(x + w, y + h - r);
+    this.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);
+    this.lineTo(x + r, y + h);
+    this.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);
+    this.lineTo(x, y + r);
+    this.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);
+    this.closePath();
+  };
+
+  /**
+   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
+   *
+   * Postfix '_vis' added to discern it from standard method ellipse().
+   *
+   * @param {number} x
+   * @param {number} y
+   * @param {number} w
+   * @param {number} h
+   */
+  CanvasRenderingContext2D.prototype.ellipse_vis = function (x, y, w, h) {
+    var kappa = .5522848,
+        ox = w / 2 * kappa,
+        // control point offset horizontal
+    oy = h / 2 * kappa,
+        // control point offset vertical
+    xe = x + w,
+        // x-end
+    ye = y + h,
+        // y-end
+    xm = x + w / 2,
+        // x-middle
+    ym = y + h / 2; // y-middle
+
+    this.beginPath();
+    this.moveTo(x, ym);
+    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
+    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
+    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
+    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
+    this.closePath();
+  };
+
+  /**
+   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas
+   *
+   * @param {number} x
+   * @param {number} y
+   * @param {number} w
+   * @param {number} h
+   */
+  CanvasRenderingContext2D.prototype.database = function (x, y, w, h) {
+    var f = 1 / 3;
+    var wEllipse = w;
+    var hEllipse = h * f;
+
+    var kappa = .5522848,
+        ox = wEllipse / 2 * kappa,
+        // control point offset horizontal
+    oy = hEllipse / 2 * kappa,
+        // control point offset vertical
+    xe = x + wEllipse,
+        // x-end
+    ye = y + hEllipse,
+        // y-end
+    xm = x + wEllipse / 2,
+        // x-middle
+    ym = y + hEllipse / 2,
+        // y-middle
+    ymb = y + (h - hEllipse / 2),
+        // y-midlle, bottom ellipse
+    yeb = y + h; // y-end, bottom ellipse
+
+    this.beginPath();
+    this.moveTo(xe, ym);
+
+    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
+    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
+
+    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
+    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
+
+    this.lineTo(xe, ymb);
+
+    this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);
+    this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);
+
+    this.lineTo(x, ym);
+  };
+
+  /**
+   * Sets up the dashedLine functionality for drawing
+   * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas
+   * @author David Jordan
+   * @date 2012-08-08
+   *
+   * @param {number} x
+   * @param {number} y
+   * @param {number} x2
+   * @param {number} y2
+   * @param {string} pattern
+   */
+  CanvasRenderingContext2D.prototype.dashedLine = function (x, y, x2, y2, pattern) {
+    this.beginPath();
+    this.moveTo(x, y);
+
+    var patternLength = pattern.length;
+    var dx = x2 - x;
+    var dy = y2 - y;
+    var slope = dy / dx;
+    var distRemaining = Math.sqrt(dx * dx + dy * dy);
+    var patternIndex = 0;
+    var draw = true;
+    var xStep = 0;
+    var dashLength = pattern[0];
+
+    while (distRemaining >= 0.1) {
+      dashLength = pattern[patternIndex++ % patternLength];
+      if (dashLength > distRemaining) {
+        dashLength = distRemaining;
+      }
+
+      xStep = Math.sqrt(dashLength * dashLength / (1 + slope * slope));
+      xStep = dx < 0 ? -xStep : xStep;
+      x += xStep;
+      y += slope * xStep;
+
+      if (draw === true) {
+        this.lineTo(x, y);
+      } else {
+        this.moveTo(x, y);
+      }
+
+      distRemaining -= dashLength;
+      draw = !draw;
+    }
+  };
+
+  /**
+   * Draw a Hexagon shape with 6 sides
+   * @param {Number} x horizontal center
+   * @param {Number} y vertical center
+   * @param {Number} r   radius
+   */
+  CanvasRenderingContext2D.prototype.hexagon = function (x, y, r) {
+    this.beginPath();
+    var sides = 6;
+    var a = Math.PI * 2 / sides;
+    this.moveTo(x + r, y);
+    for (var i = 1; i < sides; i++) {
+      this.lineTo(x + r * Math.cos(a * i), y + r * Math.sin(a * i));
+    }
+    this.closePath();
+  };
+}
+
+/***/ }),
+/* 184 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+// English
+exports['en'] = {
+  edit: 'Edit',
+  del: 'Delete selected',
+  back: 'Back',
+  addNode: 'Add Node',
+  addEdge: 'Add Edge',
+  editNode: 'Edit Node',
+  editEdge: 'Edit Edge',
+  addDescription: 'Click in an empty space to place a new node.',
+  edgeDescription: 'Click on a node and drag the edge to another node to connect them.',
+  editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.',
+  createEdgeError: 'Cannot link edges to a cluster.',
+  deleteClusterError: 'Clusters cannot be deleted.',
+  editClusterError: 'Clusters cannot be edited.'
+};
+exports['en_EN'] = exports['en'];
+exports['en_US'] = exports['en'];
+
+// German
+exports['de'] = {
+  edit: 'Editieren',
+  del: 'L\xF6sche Auswahl',
+  back: 'Zur\xFCck',
+  addNode: 'Knoten hinzuf\xFCgen',
+  addEdge: 'Kante hinzuf\xFCgen',
+  editNode: 'Knoten editieren',
+  editEdge: 'Kante editieren',
+  addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.',
+  edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.',
+  editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.',
+  createEdgeError: 'Es ist nicht m\xF6glich, Kanten mit Clustern zu verbinden.',
+  deleteClusterError: 'Cluster k\xF6nnen nicht gel\xF6scht werden.',
+  editClusterError: 'Cluster k\xF6nnen nicht editiert werden.'
+};
+exports['de_DE'] = exports['de'];
+
+// Spanish
+exports['es'] = {
+  edit: 'Editar',
+  del: 'Eliminar selecci\xF3n',
+  back: '\xC1tras',
+  addNode: 'A\xF1adir nodo',
+  addEdge: 'A\xF1adir arista',
+  editNode: 'Editar nodo',
+  editEdge: 'Editar arista',
+  addDescription: 'Haga clic en un lugar vac\xEDo para colocar un nuevo nodo.',
+  edgeDescription: 'Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.',
+  editEdgeDescription: 'Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.',
+  createEdgeError: 'No se puede conectar una arista a un grupo.',
+  deleteClusterError: 'No es posible eliminar grupos.',
+  editClusterError: 'No es posible editar grupos.'
+};
+exports['es_ES'] = exports['es'];
+
+//Italiano
+exports['it'] = {
+  edit: 'Modifica',
+  del: 'Cancella la selezione',
+  back: 'Indietro',
+  addNode: 'Aggiungi un nodo',
+  addEdge: 'Aggiungi un vertice',
+  editNode: 'Modifica il nodo',
+  editEdge: 'Modifica il vertice',
+  addDescription: 'Clicca per aggiungere un nuovo nodo',
+  edgeDescription: 'Clicca su un nodo e trascinalo ad un altro nodo per connetterli.',
+  editEdgeDescription: 'Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.',
+  createEdgeError: 'Non si possono collegare vertici ad un cluster',
+  deleteClusterError: 'I cluster non possono essere cancellati',
+  editClusterError: 'I clusters non possono essere modificati.'
+};
+exports['it_IT'] = exports['it'];
+
+// Dutch
+exports['nl'] = {
+  edit: 'Wijzigen',
+  del: 'Selectie verwijderen',
+  back: 'Terug',
+  addNode: 'Node toevoegen',
+  addEdge: 'Link toevoegen',
+  editNode: 'Node wijzigen',
+  editEdge: 'Link wijzigen',
+  addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.',
+  edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.',
+  editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.',
+  createEdgeError: 'Kan geen link maken naar een cluster.',
+  deleteClusterError: 'Clusters kunnen niet worden verwijderd.',
+  editClusterError: 'Clusters kunnen niet worden aangepast.'
+};
+exports['nl_NL'] = exports['nl'];
+exports['nl_BE'] = exports['nl'];
+
+// Portuguese Brazil
+exports['pt-br'] = {
+  edit: 'Editar',
+  del: 'Remover selecionado',
+  back: 'Voltar',
+  addNode: 'Adicionar nó',
+  addEdge: 'Adicionar aresta',
+  editNode: 'Editar nó',
+  editEdge: 'Editar aresta',
+  addDescription: 'Clique em um espaço em branco para adicionar um novo nó',
+  edgeDescription: 'Clique em um nó e arraste a aresta até outro nó para conectá-los',
+  editEdgeDescription: 'Clique nos pontos de controle e os arraste para um nó para conectá-los',
+  createEdgeError: 'Não foi possível linkar arestas a um cluster.',
+  deleteClusterError: 'Clusters não puderam ser removidos.',
+  editClusterError: 'Clusters não puderam ser editados.'
+};
+exports['pt-BR'] = exports['pt-br'];
+exports['pt_BR'] = exports['pt-br'];
+exports['pt_br'] = exports['pt-br'];
+
+// Russian
+exports['ru'] = {
+  edit: 'Редактировать',
+  del: 'Удалить выбранное',
+  back: 'Назад',
+  addNode: 'Добавить узел',
+  addEdge: 'Добавить ребро',
+  editNode: 'Редактировать узел',
+  editEdge: 'Редактировать ребро',
+  addDescription: 'Кликните в свободное место, чтобы добавить новый узел.',
+  edgeDescription: 'Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.',
+  editEdgeDescription: 'Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.',
+  createEdgeError: 'Невозможно соединить ребра в кластер.',
+  deleteClusterError: 'Кластеры не могут быть удалены',
+  editClusterError: 'Кластеры недоступны для редактирования.'
+};
+exports['ru_RU'] = exports['ru'];
+
+// Chinese
+exports['cn'] = {
+  edit: '编辑',
+  del: '删除选定',
+  back: '返回',
+  addNode: '添加节点',
+  addEdge: '添加连接线',
+  editNode: '编辑节点',
+  editEdge: '编辑连接线',
+  addDescription: '单击空白处放置新节点。',
+  edgeDescription: '单击某个节点并将该连接线拖动到另一个节点以连接它们。',
+  editEdgeDescription: '单击控制节点并将它们拖到节点上连接。',
+  createEdgeError: '无法将连接线连接到群集。',
+  deleteClusterError: '无法删除群集。',
+  editClusterError: '无法编辑群集。'
+};
+exports['zh_CN'] = exports['cn'];
+
+/***/ }),
+/* 185 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Associates a canvas to a given image, containing a number of renderings
+ * of the image at various sizes.
+ *
+ * This technique is known as 'mipmapping'.
+ *
+ * NOTE: Images can also be of type 'data:svg+xml`. This code also works
+ *       for svg, but the mipmapping may not be necessary.
+ *
+ * @param {Image} image
+ */
+var CachedImage = function () {
+  /**
+   * @ignore
+   */
+  function CachedImage() {
+    (0, _classCallCheck3['default'])(this, CachedImage);
+    // eslint-disable-line no-unused-vars
+    this.NUM_ITERATIONS = 4; // Number of items in the coordinates array
+
+    this.image = new Image();
+    this.canvas = document.createElement('canvas');
+  }
+
+  /**
+   * Called when the image has been successfully loaded.
+   */
+
+
+  (0, _createClass3['default'])(CachedImage, [{
+    key: 'init',
+    value: function init() {
+      if (this.initialized()) return;
+
+      this.src = this.image.src; // For same interface with Image
+      var w = this.image.width;
+      var h = this.image.height;
+
+      // Ease external access
+      this.width = w;
+      this.height = h;
+
+      var h2 = Math.floor(h / 2);
+      var h4 = Math.floor(h / 4);
+      var h8 = Math.floor(h / 8);
+      var h16 = Math.floor(h / 16);
+
+      var w2 = Math.floor(w / 2);
+      var w4 = Math.floor(w / 4);
+      var w8 = Math.floor(w / 8);
+      var w16 = Math.floor(w / 16);
+
+      // Make canvas as small as possible
+      this.canvas.width = 3 * w4;
+      this.canvas.height = h2;
+
+      // Coordinates and sizes of images contained in the canvas
+      // Values per row:  [top x, left y, width, height]
+
+      this.coordinates = [[0, 0, w2, h2], [w2, 0, w4, h4], [w2, h4, w8, h8], [5 * w8, h4, w16, h16]];
+
+      this._fillMipMap();
+    }
+
+    /**
+     * @return {Boolean} true if init() has been called, false otherwise.
+     */
+
+  }, {
+    key: 'initialized',
+    value: function initialized() {
+      return this.coordinates !== undefined;
+    }
+
+    /**
+     * Redraw main image in various sizes to the context.
+     *
+     * The rationale behind this is to reduce artefacts due to interpolation
+     * at differing zoom levels.
+     *
+     * Source: http://stackoverflow.com/q/18761404/1223531
+     *
+     * This methods takes the resizing out of the drawing loop, in order to
+     * reduce performance overhead.
+     *
+     * TODO: The code assumes that a 2D context can always be gotten. This is
+     *       not necessarily true! OTOH, if not true then usage of this class
+     *       is senseless.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_fillMipMap',
+    value: function _fillMipMap() {
+      var ctx = this.canvas.getContext('2d');
+
+      // First zoom-level comes from the image
+      var to = this.coordinates[0];
+      ctx.drawImage(this.image, to[0], to[1], to[2], to[3]);
+
+      // The rest are copy actions internal to the canvas/context
+      for (var iterations = 1; iterations < this.NUM_ITERATIONS; iterations++) {
+        var from = this.coordinates[iterations - 1];
+        var _to = this.coordinates[iterations];
+
+        ctx.drawImage(this.canvas, from[0], from[1], from[2], from[3], _to[0], _to[1], _to[2], _to[3]);
+      }
+    }
+
+    /**
+     * Draw the image, using the mipmap if necessary.
+     *
+     * MipMap is only used if param factor > 2; otherwise, original bitmap
+     * is resized. This is also used to skip mipmap usage, e.g. by setting factor = 1
+     *
+     * Credits to 'Alex de Mulder' for original implementation.
+     *
+     * @param {CanvasRenderingContext2D} ctx  context on which to draw zoomed image
+     * @param {Float} factor scale factor at which to draw
+     * @param {number} left
+     * @param {number} top
+     * @param {number} width
+     * @param {number} height
+     */
+
+  }, {
+    key: 'drawImageAtPosition',
+    value: function drawImageAtPosition(ctx, factor, left, top, width, height) {
+
+      if (!this.initialized()) return; //can't draw image yet not intialized
+
+      if (factor > 2) {
+        // Determine which zoomed image to use
+        factor *= 0.5;
+        var iterations = 0;
+        while (factor > 2 && iterations < this.NUM_ITERATIONS) {
+          factor *= 0.5;
+          iterations += 1;
+        }
+
+        if (iterations >= this.NUM_ITERATIONS) {
+          iterations = this.NUM_ITERATIONS - 1;
+        }
+        //console.log("iterations: " + iterations);
+
+        var from = this.coordinates[iterations];
+        ctx.drawImage(this.canvas, from[0], from[1], from[2], from[3], left, top, width, height);
+      } else {
+        // Draw image directly
+        ctx.drawImage(this.image, left, top, width, height);
+      }
+    }
+  }]);
+  return CachedImage;
+}();
+
+exports['default'] = CachedImage;
+
+/***/ }),
+/* 186 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var util = __webpack_require__(2);
+
+/**
+ * This class can store groups and options specific for groups.
+ */
+
+var Groups = function () {
+  /**
+   * @ignore
+   */
+  function Groups() {
+    (0, _classCallCheck3["default"])(this, Groups);
+
+    this.clear();
+    this.defaultIndex = 0;
+    this.groupsArray = [];
+    this.groupIndex = 0;
+
+    this.defaultGroups = [{ border: "#2B7CE9", background: "#97C2FC", highlight: { border: "#2B7CE9", background: "#D2E5FF" }, hover: { border: "#2B7CE9", background: "#D2E5FF" } }, // 0: blue
+    { border: "#FFA500", background: "#FFFF00", highlight: { border: "#FFA500", background: "#FFFFA3" }, hover: { border: "#FFA500", background: "#FFFFA3" } }, // 1: yellow
+    { border: "#FA0A10", background: "#FB7E81", highlight: { border: "#FA0A10", background: "#FFAFB1" }, hover: { border: "#FA0A10", background: "#FFAFB1" } }, // 2: red
+    { border: "#41A906", background: "#7BE141", highlight: { border: "#41A906", background: "#A1EC76" }, hover: { border: "#41A906", background: "#A1EC76" } }, // 3: green
+    { border: "#E129F0", background: "#EB7DF4", highlight: { border: "#E129F0", background: "#F0B3F5" }, hover: { border: "#E129F0", background: "#F0B3F5" } }, // 4: magenta
+    { border: "#7C29F0", background: "#AD85E4", highlight: { border: "#7C29F0", background: "#D3BDF0" }, hover: { border: "#7C29F0", background: "#D3BDF0" } }, // 5: purple
+    { border: "#C37F00", background: "#FFA807", highlight: { border: "#C37F00", background: "#FFCA66" }, hover: { border: "#C37F00", background: "#FFCA66" } }, // 6: orange
+    { border: "#4220FB", background: "#6E6EFD", highlight: { border: "#4220FB", background: "#9B9BFD" }, hover: { border: "#4220FB", background: "#9B9BFD" } }, // 7: darkblue
+    { border: "#FD5A77", background: "#FFC0CB", highlight: { border: "#FD5A77", background: "#FFD1D9" }, hover: { border: "#FD5A77", background: "#FFD1D9" } }, // 8: pink
+    { border: "#4AD63A", background: "#C2FABC", highlight: { border: "#4AD63A", background: "#E6FFE3" }, hover: { border: "#4AD63A", background: "#E6FFE3" } }, // 9: mint
+
+    { border: "#990000", background: "#EE0000", highlight: { border: "#BB0000", background: "#FF3333" }, hover: { border: "#BB0000", background: "#FF3333" } }, // 10:bright red
+
+    { border: "#FF6000", background: "#FF6000", highlight: { border: "#FF6000", background: "#FF6000" }, hover: { border: "#FF6000", background: "#FF6000" } }, // 12: real orange
+    { border: "#97C2FC", background: "#2B7CE9", highlight: { border: "#D2E5FF", background: "#2B7CE9" }, hover: { border: "#D2E5FF", background: "#2B7CE9" } }, // 13: blue
+    { border: "#399605", background: "#255C03", highlight: { border: "#399605", background: "#255C03" }, hover: { border: "#399605", background: "#255C03" } }, // 14: green
+    { border: "#B70054", background: "#FF007E", highlight: { border: "#B70054", background: "#FF007E" }, hover: { border: "#B70054", background: "#FF007E" } }, // 15: magenta
+    { border: "#AD85E4", background: "#7C29F0", highlight: { border: "#D3BDF0", background: "#7C29F0" }, hover: { border: "#D3BDF0", background: "#7C29F0" } }, // 16: purple
+    { border: "#4557FA", background: "#000EA1", highlight: { border: "#6E6EFD", background: "#000EA1" }, hover: { border: "#6E6EFD", background: "#000EA1" } }, // 17: darkblue
+    { border: "#FFC0CB", background: "#FD5A77", highlight: { border: "#FFD1D9", background: "#FD5A77" }, hover: { border: "#FFD1D9", background: "#FD5A77" } }, // 18: pink
+    { border: "#C2FABC", background: "#74D66A", highlight: { border: "#E6FFE3", background: "#74D66A" }, hover: { border: "#E6FFE3", background: "#74D66A" } }, // 19: mint
+
+    { border: "#EE0000", background: "#990000", highlight: { border: "#FF3333", background: "#BB0000" }, hover: { border: "#FF3333", background: "#BB0000" } // 20:bright red
+    }];
+
+    this.options = {};
+    this.defaultOptions = {
+      useDefaultGroups: true
+    };
+    util.extend(this.options, this.defaultOptions);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(Groups, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      var optionFields = ['useDefaultGroups'];
+
+      if (options !== undefined) {
+        for (var groupName in options) {
+          if (options.hasOwnProperty(groupName)) {
+            if (optionFields.indexOf(groupName) === -1) {
+              var group = options[groupName];
+              this.add(groupName, group);
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * Clear all groups
+     */
+
+  }, {
+    key: "clear",
+    value: function clear() {
+      this.groups = {};
+      this.groupsArray = [];
+    }
+
+    /**
+     * Get group options of a groupname.
+     * If groupname is not found, a new group may be created.
+     *
+     * @param {*}       groupname     Can be a number, string, Date, etc.
+     * @param {boolean} [shouldCreate=true] If true, create a new group
+     * @return {Object} The found or created group
+     */
+
+  }, {
+    key: "get",
+    value: function get(groupname) {
+      var shouldCreate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      var group = this.groups[groupname];
+
+      if (group === undefined && shouldCreate) {
+        if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) {
+          // create new group
+          var index = this.groupIndex % this.groupsArray.length;
+          this.groupIndex++;
+          group = {};
+          group.color = this.groups[this.groupsArray[index]];
+          this.groups[groupname] = group;
+        } else {
+          // create new group
+          var _index = this.defaultIndex % this.defaultGroups.length;
+          this.defaultIndex++;
+          group = {};
+          group.color = this.defaultGroups[_index];
+          this.groups[groupname] = group;
+        }
+      }
+
+      return group;
+    }
+
+    /**
+     * Add a custom group style
+     * @param {string} groupName
+     * @param {Object} style       An object containing borderColor,
+     *                             backgroundColor, etc.
+     * @return {Object} group      The created group object
+     */
+
+  }, {
+    key: "add",
+    value: function add(groupName, style) {
+      this.groups[groupName] = style;
+      this.groupsArray.push(groupName);
+      return style;
+    }
+  }]);
+  return Groups;
+}();
+
+exports["default"] = Groups;
+
+/***/ }),
+/* 187 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Node = __webpack_require__(47)['default'];
+
+/**
+ * Handler for Nodes
+ */
+
+var NodesHandler = function () {
+  /**
+   * @param {Object} body
+   * @param {Images} images
+   * @param {Array.<Group>} groups
+   * @param {LayoutEngine} layoutEngine
+   */
+  function NodesHandler(body, images, groups, layoutEngine) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, NodesHandler);
+
+    this.body = body;
+    this.images = images;
+    this.groups = groups;
+    this.layoutEngine = layoutEngine;
+
+    // create the node API in the body container
+    this.body.functions.createNode = this.create.bind(this);
+
+    this.nodesListeners = {
+      add: function add(event, params) {
+        _this.add(params.items);
+      },
+      update: function update(event, params) {
+        _this.update(params.items, params.data, params.oldData);
+      },
+      remove: function remove(event, params) {
+        _this.remove(params.items);
+      }
+    };
+
+    this.defaultOptions = {
+      borderWidth: 1,
+      borderWidthSelected: 2,
+      brokenImage: undefined,
+      color: {
+        border: '#2B7CE9',
+        background: '#97C2FC',
+        highlight: {
+          border: '#2B7CE9',
+          background: '#D2E5FF'
+        },
+        hover: {
+          border: '#2B7CE9',
+          background: '#D2E5FF'
+        }
+      },
+      fixed: {
+        x: false,
+        y: false
+      },
+      font: {
+        color: '#343434',
+        size: 14, // px
+        face: 'arial',
+        background: 'none',
+        strokeWidth: 0, // px
+        strokeColor: '#ffffff',
+        align: 'center',
+        vadjust: 0,
+        multi: false,
+        bold: {
+          mod: 'bold'
+        },
+        boldital: {
+          mod: 'bold italic'
+        },
+        ital: {
+          mod: 'italic'
+        },
+        mono: {
+          mod: '',
+          size: 15, // px
+          face: 'monospace',
+          vadjust: 2
+        }
+      },
+      group: undefined,
+      hidden: false,
+      icon: {
+        face: 'FontAwesome', //'FontAwesome',
+        code: undefined, //'\uf007',
+        size: 50, //50,
+        color: '#2B7CE9' //'#aa00ff'
+      },
+      image: undefined, // --> URL
+      label: undefined,
+      labelHighlightBold: true,
+      level: undefined,
+      margin: {
+        top: 5,
+        right: 5,
+        bottom: 5,
+        left: 5
+      },
+      mass: 1,
+      physics: true,
+      scaling: {
+        min: 10,
+        max: 30,
+        label: {
+          enabled: false,
+          min: 14,
+          max: 30,
+          maxVisible: 30,
+          drawThreshold: 5
+        },
+        customScalingFunction: function customScalingFunction(min, max, total, value) {
+          if (max === min) {
+            return 0.5;
+          } else {
+            var scale = 1 / (max - min);
+            return Math.max(0, (value - min) * scale);
+          }
+        }
+      },
+      shadow: {
+        enabled: false,
+        color: 'rgba(0,0,0,0.5)',
+        size: 10,
+        x: 5,
+        y: 5
+      },
+      shape: 'ellipse',
+      shapeProperties: {
+        borderDashes: false, // only for borders
+        borderRadius: 6, // only for box shape
+        interpolation: true, // only for image and circularImage shapes
+        useImageSize: false, // only for image and circularImage shapes
+        useBorderWithImage: false // only for image shape
+      },
+      size: 25,
+      title: undefined,
+      value: undefined,
+      x: undefined,
+      y: undefined
+    };
+
+    // Protect from idiocy
+    if (this.defaultOptions.mass <= 0) {
+      throw 'Internal error: mass in defaultOptions of NodesHandler may not be zero or negative';
+    }
+
+    this.options = util.bridgeObject(this.defaultOptions);
+
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(NodesHandler, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this2 = this;
+
+      // refresh the nodes. Used when reverting from hierarchical layout
+      this.body.emitter.on('refreshNodes', this.refresh.bind(this));
+      this.body.emitter.on('refresh', this.refresh.bind(this));
+      this.body.emitter.on('destroy', function () {
+        util.forEach(_this2.nodesListeners, function (callback, event) {
+          if (_this2.body.data.nodes) _this2.body.data.nodes.off(event, callback);
+        });
+        delete _this2.body.functions.createNode;
+        delete _this2.nodesListeners.add;
+        delete _this2.nodesListeners.update;
+        delete _this2.nodesListeners.remove;
+        delete _this2.nodesListeners;
+      });
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        Node.parseOptions(this.options, options);
+
+        // update the shape in all nodes
+        if (options.shape !== undefined) {
+          for (var nodeId in this.body.nodes) {
+            if (this.body.nodes.hasOwnProperty(nodeId)) {
+              this.body.nodes[nodeId].updateShape();
+            }
+          }
+        }
+
+        // update the font in all nodes
+        if (options.font !== undefined) {
+          for (var _nodeId in this.body.nodes) {
+            if (this.body.nodes.hasOwnProperty(_nodeId)) {
+              this.body.nodes[_nodeId].updateLabelModule();
+              this.body.nodes[_nodeId].needsRefresh();
+            }
+          }
+        }
+
+        // update the shape size in all nodes
+        if (options.size !== undefined) {
+          for (var _nodeId2 in this.body.nodes) {
+            if (this.body.nodes.hasOwnProperty(_nodeId2)) {
+              this.body.nodes[_nodeId2].needsRefresh();
+            }
+          }
+        }
+
+        // update the state of the variables if needed
+        if (options.hidden !== undefined || options.physics !== undefined) {
+          this.body.emitter.emit('_dataChanged');
+        }
+      }
+    }
+
+    /**
+     * Set a data set with nodes for the network
+     * @param {Array | DataSet | DataView} nodes         The data containing the nodes.
+     * @param {boolean} [doNotEmit=false]
+     * @private
+     */
+
+  }, {
+    key: 'setData',
+    value: function setData(nodes) {
+      var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var oldNodesData = this.body.data.nodes;
+
+      if (nodes instanceof DataSet || nodes instanceof DataView) {
+        this.body.data.nodes = nodes;
+      } else if (Array.isArray(nodes)) {
+        this.body.data.nodes = new DataSet();
+        this.body.data.nodes.add(nodes);
+      } else if (!nodes) {
+        this.body.data.nodes = new DataSet();
+      } else {
+        throw new TypeError('Array or DataSet expected');
+      }
+
+      if (oldNodesData) {
+        // unsubscribe from old dataset
+        util.forEach(this.nodesListeners, function (callback, event) {
+          oldNodesData.off(event, callback);
+        });
+      }
+
+      // remove drawn nodes
+      this.body.nodes = {};
+
+      if (this.body.data.nodes) {
+        // subscribe to new dataset
+        var me = this;
+        util.forEach(this.nodesListeners, function (callback, event) {
+          me.body.data.nodes.on(event, callback);
+        });
+
+        // draw all new nodes
+        var ids = this.body.data.nodes.getIds();
+        this.add(ids, true);
+      }
+
+      if (doNotEmit === false) {
+        this.body.emitter.emit("_dataChanged");
+      }
+    }
+
+    /**
+     * Add nodes
+     * @param {number[] | string[]} ids
+     * @param {boolean} [doNotEmit=false]
+     * @private
+     */
+
+  }, {
+    key: 'add',
+    value: function add(ids) {
+      var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var id = void 0;
+      var newNodes = [];
+      for (var i = 0; i < ids.length; i++) {
+        id = ids[i];
+        var properties = this.body.data.nodes.get(id);
+        var node = this.create(properties);
+        newNodes.push(node);
+        this.body.nodes[id] = node; // note: this may replace an existing node
+      }
+
+      this.layoutEngine.positionInitially(newNodes);
+
+      if (doNotEmit === false) {
+        this.body.emitter.emit("_dataChanged");
+      }
+    }
+
+    /**
+     * Update existing nodes, or create them when not yet existing
+     * @param {number[] | string[]} ids id's of changed nodes
+     * @param {Array} changedData array with changed data
+     * @param {Array|undefined} oldData optional; array with previous data
+     * @private
+     */
+
+  }, {
+    key: 'update',
+    value: function update(ids, changedData, oldData) {
+      var nodes = this.body.nodes;
+      var dataChanged = false;
+      for (var i = 0; i < ids.length; i++) {
+        var id = ids[i];
+        var node = nodes[id];
+        var data = changedData[i];
+        if (node !== undefined) {
+          // update node
+          if (node.setOptions(data)) {
+            dataChanged = true;
+          }
+        } else {
+          dataChanged = true;
+          // create node
+          node = this.create(data);
+          nodes[id] = node;
+        }
+      }
+
+      if (!dataChanged && oldData !== undefined) {
+        // Check for any changes which should trigger a layout recalculation
+        // For now, this is just 'level' for hierarchical layout
+        // Assumption: old and new data arranged in same order; at time of writing, this holds.
+        dataChanged = changedData.some(function (newValue, index) {
+          var oldValue = oldData[index];
+          return oldValue && oldValue.level !== newValue.level;
+        });
+      }
+
+      if (dataChanged === true) {
+        this.body.emitter.emit("_dataChanged");
+      } else {
+        this.body.emitter.emit("_dataUpdated");
+      }
+    }
+
+    /**
+     * Remove existing nodes. If nodes do not exist, the method will just ignore it.
+     * @param {number[] | string[]} ids
+     * @private
+     */
+
+  }, {
+    key: 'remove',
+    value: function remove(ids) {
+      var nodes = this.body.nodes;
+
+      for (var i = 0; i < ids.length; i++) {
+        var id = ids[i];
+        delete nodes[id];
+      }
+
+      this.body.emitter.emit("_dataChanged");
+    }
+
+    /**
+     * create a node
+     * @param {Object} properties
+     * @param {class} [constructorClass=Node.default]
+     * @returns {*}
+     */
+
+  }, {
+    key: 'create',
+    value: function create(properties) {
+      var constructorClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Node;
+
+      return new constructorClass(properties, this.body, this.images, this.groups, this.options, this.defaultOptions);
+    }
+
+    /**
+     *
+     * @param {boolean} [clearPositions=false]
+     */
+
+  }, {
+    key: 'refresh',
+    value: function refresh() {
+      var _this3 = this;
+
+      var clearPositions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      util.forEach(this.body.nodes, function (node, nodeId) {
+        var data = _this3.body.data.nodes.get(nodeId);
+        if (data !== undefined) {
+          if (clearPositions === true) {
+            node.setOptions({ x: null, y: null });
+          }
+          node.setOptions({ fixed: false });
+          node.setOptions(data);
+        }
+      });
+    }
+
+    /**
+     * Returns the positions of the nodes.
+     * @param {Array.<Node.id>|String} [ids]  --> optional, can be array of nodeIds, can be string
+     * @returns {{}}
+     */
+
+  }, {
+    key: 'getPositions',
+    value: function getPositions(ids) {
+      var dataArray = {};
+      if (ids !== undefined) {
+        if (Array.isArray(ids) === true) {
+          for (var i = 0; i < ids.length; i++) {
+            if (this.body.nodes[ids[i]] !== undefined) {
+              var node = this.body.nodes[ids[i]];
+              dataArray[ids[i]] = { x: Math.round(node.x), y: Math.round(node.y) };
+            }
+          }
+        } else {
+          if (this.body.nodes[ids] !== undefined) {
+            var _node = this.body.nodes[ids];
+            dataArray[ids] = { x: Math.round(_node.x), y: Math.round(_node.y) };
+          }
+        }
+      } else {
+        for (var _i = 0; _i < this.body.nodeIndices.length; _i++) {
+          var _node2 = this.body.nodes[this.body.nodeIndices[_i]];
+          dataArray[this.body.nodeIndices[_i]] = { x: Math.round(_node2.x), y: Math.round(_node2.y) };
+        }
+      }
+      return dataArray;
+    }
+
+    /**
+     * Load the XY positions of the nodes into the dataset.
+     */
+
+  }, {
+    key: 'storePositions',
+    value: function storePositions() {
+      // todo: add support for clusters and hierarchical.
+      var dataArray = [];
+      var dataset = this.body.data.nodes.getDataSet();
+
+      for (var nodeId in dataset._data) {
+        if (dataset._data.hasOwnProperty(nodeId)) {
+          var node = this.body.nodes[nodeId];
+          if (dataset._data[nodeId].x != Math.round(node.x) || dataset._data[nodeId].y != Math.round(node.y)) {
+            dataArray.push({ id: node.id, x: Math.round(node.x), y: Math.round(node.y) });
+          }
+        }
+      }
+      dataset.update(dataArray);
+    }
+
+    /**
+     * get the bounding box of a node.
+     * @param {Node.id} nodeId
+     * @returns {j|*}
+     */
+
+  }, {
+    key: 'getBoundingBox',
+    value: function getBoundingBox(nodeId) {
+      if (this.body.nodes[nodeId] !== undefined) {
+        return this.body.nodes[nodeId].shape.boundingBox;
+      }
+    }
+
+    /**
+     * Get the Ids of nodes connected to this node.
+     * @param {Node.id} nodeId
+     * @param {'to'|'from'|undefined} direction values 'from' and 'to' select respectively parent and child nodes only.
+     *                                          Any other value returns both parent and child nodes.
+     * @returns {Array}
+     */
+
+  }, {
+    key: 'getConnectedNodes',
+    value: function getConnectedNodes(nodeId, direction) {
+      var nodeList = [];
+      if (this.body.nodes[nodeId] !== undefined) {
+        var node = this.body.nodes[nodeId];
+        var nodeObj = {}; // used to quickly check if node already exists
+        for (var i = 0; i < node.edges.length; i++) {
+          var edge = node.edges[i];
+          if (direction !== 'to' && edge.toId == node.id) {
+            // these are double equals since ids can be numeric or string
+            if (nodeObj[edge.fromId] === undefined) {
+              nodeList.push(edge.fromId);
+              nodeObj[edge.fromId] = true;
+            }
+          } else if (direction !== 'from' && edge.fromId == node.id) {
+            // these are double equals since ids can be numeric or string
+            if (nodeObj[edge.toId] === undefined) {
+              nodeList.push(edge.toId);
+              nodeObj[edge.toId] = true;
+            }
+          }
+        }
+      }
+      return nodeList;
+    }
+
+    /**
+     * Get the ids of the edges connected to this node.
+     * @param {Node.id} nodeId
+     * @returns {*}
+     */
+
+  }, {
+    key: 'getConnectedEdges',
+    value: function getConnectedEdges(nodeId) {
+      var edgeList = [];
+      if (this.body.nodes[nodeId] !== undefined) {
+        var node = this.body.nodes[nodeId];
+        for (var i = 0; i < node.edges.length; i++) {
+          edgeList.push(node.edges[i].id);
+        }
+      } else {
+        console.log("NodeId provided for getConnectedEdges does not exist. Provided: ", nodeId);
+      }
+      return edgeList;
+    }
+
+    /**
+     * Move a node.
+     *
+     * @param {Node.id} nodeId
+     * @param {number} x
+     * @param {number} y
+     */
+
+  }, {
+    key: 'moveNode',
+    value: function moveNode(nodeId, x, y) {
+      var _this4 = this;
+
+      if (this.body.nodes[nodeId] !== undefined) {
+        this.body.nodes[nodeId].x = Number(x);
+        this.body.nodes[nodeId].y = Number(y);
+        setTimeout(function () {
+          _this4.body.emitter.emit("startSimulation");
+        }, 0);
+      } else {
+        console.log("Node id supplied to moveNode does not exist. Provided: ", nodeId);
+      }
+    }
+  }]);
+  return NodesHandler;
+}();
+
+exports['default'] = NodesHandler;
+
+/***/ }),
+/* 188 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(189), __esModule: true };
+
+/***/ }),
+/* 189 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(49);
+__webpack_require__(60);
+module.exports = __webpack_require__(190);
+
+
+/***/ }),
+/* 190 */
+/***/ (function(module, exports, __webpack_require__) {
+
+var classof = __webpack_require__(86);
+var ITERATOR = __webpack_require__(13)('iterator');
+var Iterators = __webpack_require__(31);
+module.exports = __webpack_require__(7).isIterable = function (it) {
+  var O = Object(it);
+  return O[ITERATOR] !== undefined
+    || '@@iterator' in O
+    // eslint-disable-next-line no-prototype-builtins
+    || Iterators.hasOwnProperty(classof(O));
+};
+
+
+/***/ }),
+/* 191 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var LabelAccumulator = __webpack_require__(192)['default'];
+var ComponentUtil = __webpack_require__(48)['default'];
+
+/**
+ * Helper class for Label which explodes the label text into lines and blocks within lines
+ *
+ * @private
+ */
+
+var LabelSplitter = function () {
+
+  /**
+   * @param {CanvasRenderingContext2D} ctx Canvas rendering context
+   * @param {Label} parent reference to the Label instance using current instance
+   * @param {boolean} selected 
+   * @param {boolean} hover
+   */
+  function LabelSplitter(ctx, parent, selected, hover) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, LabelSplitter);
+
+    this.ctx = ctx;
+    this.parent = parent;
+
+    /**
+     * Callback to determine text width; passed to LabelAccumulator instance
+     *
+     * @param  {String} text string to determine width of
+     * @param  {String} mod  font type to use for this text
+     * @return {Object} { width, values} width in pixels and font attributes
+     */
+    var textWidth = function textWidth(text, mod) {
+      if (text === undefined) return 0;
+
+      // TODO: This can be done more efficiently with caching
+      var values = _this.parent.getFormattingValues(ctx, selected, hover, mod);
+
+      var width = 0;
+      if (text !== '') {
+        // NOTE: The following may actually be *incorrect* for the mod fonts!
+        //       This returns the size with a regular font, bold etc. may
+        //       have different sizes.
+        var measure = _this.ctx.measureText(text);
+        width = measure.width;
+      }
+
+      return { width: width, values: values };
+    };
+
+    this.lines = new LabelAccumulator(textWidth);
+  }
+
+  /**
+   * Split passed text of a label into lines and blocks.
+   *
+   * # NOTE
+   *
+   * The handling of spacing is option dependent:
+   *
+   * - if `font.multi : false`, all spaces are retained
+   * - if `font.multi : true`, every sequence of spaces is compressed to a single space
+   *
+   * This might not be the best way to do it, but this is as it has been working till now.
+   * In order not to break existing functionality, for the time being this behaviour will
+   * be retained in any code changes. 
+   *
+   * @param {string} text  text to split
+   * @returns {Array<line>}
+   */
+
+
+  (0, _createClass3['default'])(LabelSplitter, [{
+    key: 'process',
+    value: function process(text) {
+      if (!ComponentUtil.isValidLabel(text)) {
+        return this.lines.finalize();
+      }
+
+      var font = this.parent.fontOptions;
+
+      // Normalize the end-of-line's to a single representation - order important
+      text = text.replace(/\r\n/g, '\n'); // Dos EOL's
+      text = text.replace(/\r/g, '\n'); // Mac EOL's
+
+      // Note that at this point, there can be no \r's in the text.
+      // This is used later on splitStringIntoLines() to split multifont texts.
+
+      var nlLines = String(text).split('\n');
+      var lineCount = nlLines.length;
+
+      if (font.multi) {
+        // Multi-font case: styling tags active
+        for (var i = 0; i < lineCount; i++) {
+          var blocks = this.splitBlocks(nlLines[i], font.multi);
+          // Post: Sequences of tabs and spaces are reduced to single space
+
+          if (blocks === undefined) continue;
+
+          if (blocks.length === 0) {
+            this.lines.newLine("");
+            continue;
+          }
+
+          if (font.maxWdt > 0) {
+            // widthConstraint.maximum defined
+            //console.log('Running widthConstraint multi, max: ' + this.fontOptions.maxWdt);
+            for (var j = 0; j < blocks.length; j++) {
+              var mod = blocks[j].mod;
+              var _text = blocks[j].text;
+              this.splitStringIntoLines(_text, mod, true);
+            }
+          } else {
+            // widthConstraint.maximum NOT defined
+            for (var _j = 0; _j < blocks.length; _j++) {
+              var _mod = blocks[_j].mod;
+              var _text2 = blocks[_j].text;
+              this.lines.append(_text2, _mod);
+            }
+          }
+
+          this.lines.newLine();
+        }
+      } else {
+        // Single-font case
+        if (font.maxWdt > 0) {
+          // widthConstraint.maximum defined
+          // console.log('Running widthConstraint normal, max: ' + this.fontOptions.maxWdt);
+          for (var _i = 0; _i < lineCount; _i++) {
+            this.splitStringIntoLines(nlLines[_i]);
+          }
+        } else {
+          // widthConstraint.maximum NOT defined
+          for (var _i2 = 0; _i2 < lineCount; _i2++) {
+            this.lines.newLine(nlLines[_i2]);
+          }
+        }
+      }
+
+      return this.lines.finalize();
+    }
+
+    /**
+     * normalize the markup system
+     *
+     * @param {boolean|'md'|'markdown'|'html'} markupSystem
+     * @returns {string}
+     */
+
+  }, {
+    key: 'decodeMarkupSystem',
+    value: function decodeMarkupSystem(markupSystem) {
+      var system = 'none';
+      if (markupSystem === 'markdown' || markupSystem === 'md') {
+        system = 'markdown';
+      } else if (markupSystem === true || markupSystem === 'html') {
+        system = 'html';
+      }
+      return system;
+    }
+
+    /**
+     *
+     * @param {string} text
+     * @returns {Array}
+     */
+
+  }, {
+    key: 'splitHtmlBlocks',
+    value: function splitHtmlBlocks(text) {
+      var blocks = [];
+
+      // TODO: consolidate following + methods/closures with splitMarkdownBlocks()
+      // NOTE: sequences of tabs and spaces are reduced to single space; scan usage of `this.spacing` within method
+      var s = {
+        bold: false,
+        ital: false,
+        mono: false,
+        spacing: false,
+        position: 0,
+        buffer: "",
+        modStack: []
+      };
+
+      s.mod = function () {
+        return this.modStack.length === 0 ? 'normal' : this.modStack[0];
+      };
+
+      s.modName = function () {
+        if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else {
+          if (s.bold && s.ital) {
+            return 'boldital';
+          } else if (s.bold) {
+            return 'bold';
+          } else if (s.ital) {
+            return 'ital';
+          }
+        }
+      };
+
+      s.emitBlock = function () {
+        var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+        // eslint-disable-line no-unused-vars
+        if (this.spacing) {
+          this.add(" ");
+          this.spacing = false;
+        }
+        if (this.buffer.length > 0) {
+          blocks.push({ text: this.buffer, mod: this.modName() });
+          this.buffer = "";
+        }
+      };
+
+      s.add = function (text) {
+        if (text === " ") {
+          s.spacing = true;
+        }
+        if (s.spacing) {
+          this.buffer += " ";
+          this.spacing = false;
+        }
+        if (text != " ") {
+          this.buffer += text;
+        }
+      };
+
+      while (s.position < text.length) {
+        var ch = text.charAt(s.position);
+        if (/[ \t]/.test(ch)) {
+          if (!s.mono) {
+            s.spacing = true;
+          } else {
+            s.add(ch);
+          }
+        } else if (/</.test(ch)) {
+          if (!s.mono && !s.bold && /<b>/.test(text.substr(s.position, 3))) {
+            s.emitBlock();
+            s.bold = true;
+            s.modStack.unshift("bold");
+            s.position += 2;
+          } else if (!s.mono && !s.ital && /<i>/.test(text.substr(s.position, 3))) {
+            s.emitBlock();
+            s.ital = true;
+            s.modStack.unshift("ital");
+            s.position += 2;
+          } else if (!s.mono && /<code>/.test(text.substr(s.position, 6))) {
+            s.emitBlock();
+            s.mono = true;
+            s.modStack.unshift("mono");
+            s.position += 5;
+          } else if (!s.mono && s.mod() === 'bold' && /<\/b>/.test(text.substr(s.position, 4))) {
+            s.emitBlock();
+            s.bold = false;
+            s.modStack.shift();
+            s.position += 3;
+          } else if (!s.mono && s.mod() === 'ital' && /<\/i>/.test(text.substr(s.position, 4))) {
+            s.emitBlock();
+            s.ital = false;
+            s.modStack.shift();
+            s.position += 3;
+          } else if (s.mod() === 'mono' && /<\/code>/.test(text.substr(s.position, 7))) {
+            s.emitBlock();
+            s.mono = false;
+            s.modStack.shift();
+            s.position += 6;
+          } else {
+            s.add(ch);
+          }
+        } else if (/&/.test(ch)) {
+          if (/&lt;/.test(text.substr(s.position, 4))) {
+            s.add("<");
+            s.position += 3;
+          } else if (/&amp;/.test(text.substr(s.position, 5))) {
+            s.add("&");
+            s.position += 4;
+          } else {
+            s.add("&");
+          }
+        } else {
+          s.add(ch);
+        }
+        s.position++;
+      }
+      s.emitBlock();
+      return blocks;
+    }
+
+    /**
+     *
+     * @param {string} text
+     * @returns {Array}
+     */
+
+  }, {
+    key: 'splitMarkdownBlocks',
+    value: function splitMarkdownBlocks(text) {
+      var blocks = [];
+
+      // TODO: consolidate following + methods/closures with splitHtmlBlocks()
+      // NOTE: sequences of tabs and spaces are reduced to single space; scan usage of `this.spacing` within method
+      var s = {
+        bold: false,
+        ital: false,
+        mono: false,
+        beginable: true,
+        spacing: false,
+        position: 0,
+        buffer: "",
+        modStack: []
+      };
+
+      s.mod = function () {
+        return this.modStack.length === 0 ? 'normal' : this.modStack[0];
+      };
+
+      s.modName = function () {
+        if (this.modStack.length === 0) return 'normal';else if (this.modStack[0] === 'mono') return 'mono';else {
+          if (s.bold && s.ital) {
+            return 'boldital';
+          } else if (s.bold) {
+            return 'bold';
+          } else if (s.ital) {
+            return 'ital';
+          }
+        }
+      };
+
+      s.emitBlock = function () {
+        var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+        // eslint-disable-line no-unused-vars
+        if (this.spacing) {
+          this.add(" ");
+          this.spacing = false;
+        }
+        if (this.buffer.length > 0) {
+          blocks.push({ text: this.buffer, mod: this.modName() });
+          this.buffer = "";
+        }
+      };
+
+      s.add = function (text) {
+        if (text === " ") {
+          s.spacing = true;
+        }
+        if (s.spacing) {
+          this.buffer += " ";
+          this.spacing = false;
+        }
+        if (text != " ") {
+          this.buffer += text;
+        }
+      };
+
+      while (s.position < text.length) {
+        var ch = text.charAt(s.position);
+        if (/[ \t]/.test(ch)) {
+          if (!s.mono) {
+            s.spacing = true;
+          } else {
+            s.add(ch);
+          }
+          s.beginable = true;
+        } else if (/\\/.test(ch)) {
+          if (s.position < text.length + 1) {
+            s.position++;
+            ch = text.charAt(s.position);
+            if (/ \t/.test(ch)) {
+              s.spacing = true;
+            } else {
+              s.add(ch);
+              s.beginable = false;
+            }
+          }
+        } else if (!s.mono && !s.bold && (s.beginable || s.spacing) && /\*/.test(ch)) {
+          s.emitBlock();
+          s.bold = true;
+          s.modStack.unshift("bold");
+        } else if (!s.mono && !s.ital && (s.beginable || s.spacing) && /\_/.test(ch)) {
+          s.emitBlock();
+          s.ital = true;
+          s.modStack.unshift("ital");
+        } else if (!s.mono && (s.beginable || s.spacing) && /`/.test(ch)) {
+          s.emitBlock();
+          s.mono = true;
+          s.modStack.unshift("mono");
+        } else if (!s.mono && s.mod() === "bold" && /\*/.test(ch)) {
+          if (s.position === text.length - 1 || /[.,_` \t\n]/.test(text.charAt(s.position + 1))) {
+            s.emitBlock();
+            s.bold = false;
+            s.modStack.shift();
+          } else {
+            s.add(ch);
+          }
+        } else if (!s.mono && s.mod() === "ital" && /\_/.test(ch)) {
+          if (s.position === text.length - 1 || /[.,*` \t\n]/.test(text.charAt(s.position + 1))) {
+            s.emitBlock();
+            s.ital = false;
+            s.modStack.shift();
+          } else {
+            s.add(ch);
+          }
+        } else if (s.mono && s.mod() === "mono" && /`/.test(ch)) {
+          if (s.position === text.length - 1 || /[.,*_ \t\n]/.test(text.charAt(s.position + 1))) {
+            s.emitBlock();
+            s.mono = false;
+            s.modStack.shift();
+          } else {
+            s.add(ch);
+          }
+        } else {
+          s.add(ch);
+          s.beginable = false;
+        }
+        s.position++;
+      }
+      s.emitBlock();
+      return blocks;
+    }
+
+    /**
+     * Explodes a piece of text into single-font blocks using a given markup
+     *
+     * @param {string} text
+     * @param {boolean|'md'|'markdown'|'html'} markupSystem
+     * @returns {Array.<{text: string, mod: string}>}
+     * @private
+     */
+
+  }, {
+    key: 'splitBlocks',
+    value: function splitBlocks(text, markupSystem) {
+      var system = this.decodeMarkupSystem(markupSystem);
+      if (system === 'none') {
+        return [{
+          text: text,
+          mod: 'normal'
+        }];
+      } else if (system === 'markdown') {
+        return this.splitMarkdownBlocks(text);
+      } else if (system === 'html') {
+        return this.splitHtmlBlocks(text);
+      }
+    }
+
+    /**
+     * @param {string} text
+     * @returns {boolean} true if text length over the current max with
+     * @private
+     */
+
+  }, {
+    key: 'overMaxWidth',
+    value: function overMaxWidth(text) {
+      var width = this.ctx.measureText(text).width;
+      return this.lines.curWidth() + width > this.parent.fontOptions.maxWdt;
+    }
+
+    /**
+     * Determine the longest part of the sentence which still fits in the 
+     * current max width.
+     * 
+     * @param {Array} words  Array of strings signifying a text lines
+     * @return {number}      index of first item in string making string go over max
+     * @private
+     */
+
+  }, {
+    key: 'getLongestFit',
+    value: function getLongestFit(words) {
+      var text = '';
+      var w = 0;
+
+      while (w < words.length) {
+        var pre = text === '' ? '' : ' ';
+        var newText = text + pre + words[w];
+
+        if (this.overMaxWidth(newText)) break;
+        text = newText;
+        w++;
+      }
+
+      return w;
+    }
+
+    /**
+     * Determine the longest part of the string which still fits in the
+     * current max width.
+     * 
+     * @param {Array} words Array of strings signifying a text lines
+     * @return {number} index of first item in string making string go over max
+     */
+
+  }, {
+    key: 'getLongestFitWord',
+    value: function getLongestFitWord(words) {
+      var w = 0;
+
+      while (w < words.length) {
+        if (this.overMaxWidth(words.slice(0, w))) break;
+        w++;
+      }
+
+      return w;
+    }
+
+    /**
+     * Split the passed text into lines, according to width constraint (if any).
+     * 
+     * The method assumes that the input string is a single line, i.e. without lines break.
+     *
+     * This method retains spaces, if still present (case `font.multi: false`).
+     * A space which falls on an internal line break, will be replaced by a newline.
+     * There is no special handling of tabs; these go along with the flow.
+     * 
+     * @param {string} str
+     * @param {string} [mod='normal']
+     * @param {boolean} [appendLast=false]
+     * @private
+     */
+
+  }, {
+    key: 'splitStringIntoLines',
+    value: function splitStringIntoLines(str) {
+      var mod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'normal';
+      var appendLast = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      // Still-present spaces are relevant, retain them
+      str = str.replace(/^( +)/g, '$1\r');
+      str = str.replace(/([^\r][^ ]*)( +)/g, '$1\r$2\r');
+      var words = str.split('\r');
+
+      while (words.length > 0) {
+        var w = this.getLongestFit(words);
+
+        if (w === 0) {
+          // Special case: the first word is already larger than the max width.
+          var word = words[0];
+
+          // Break the word to the largest part that fits the line
+          var x = this.getLongestFitWord(word);
+          this.lines.newLine(word.slice(0, x), mod);
+
+          // Adjust the word, so that the rest will be done next iteration
+          words[0] = word.slice(x);
+        } else {
+          // skip any space that is replaced by a newline
+          var newW = w;
+          if (words[w - 1] === ' ') {
+            w--;
+          } else if (words[newW] === ' ') {
+            newW++;
+          }
+
+          var text = words.slice(0, w).join("");
+
+          if (w == words.length && appendLast) {
+            this.lines.append(text, mod);
+          } else {
+            this.lines.newLine(text, mod);
+          }
+
+          // Adjust the word, so that the rest will be done next iteration
+          words = words.slice(newW);
+        }
+      }
+    }
+  }]);
+  return LabelSplitter;
+}();
+
+exports['default'] = LabelSplitter;
+
+/***/ }),
+/* 192 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _assign = __webpack_require__(90);
+
+var _assign2 = _interopRequireDefault(_assign);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Callback to determine text dimensions, using the parent label settings.
+ * @callback MeasureText
+ * @param {text} text
+ * @param {text} mod
+ * @return {Object} { width, values} width in pixels and font attributes
+ */
+
+/**
+ * Helper class for Label which collects results of splitting labels into lines and blocks.
+ *
+ * @private
+ */
+var LabelAccumulator = function () {
+
+  /**
+   * @param {MeasureText} measureText
+   */
+  function LabelAccumulator(measureText) {
+    (0, _classCallCheck3["default"])(this, LabelAccumulator);
+
+    this.measureText = measureText;
+    this.current = 0;
+    this.width = 0;
+    this.height = 0;
+    this.lines = [];
+  }
+
+  /**
+   * Append given text to the given line.
+   *
+   * @param {number}  l    index of line to add to
+   * @param {string}  text string to append to line
+   * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']
+   * @private
+   */
+
+
+  (0, _createClass3["default"])(LabelAccumulator, [{
+    key: "_add",
+    value: function _add(l, text) {
+      var mod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'normal';
+
+
+      if (this.lines[l] === undefined) {
+        this.lines[l] = {
+          width: 0,
+          height: 0,
+          blocks: []
+        };
+      }
+
+      // We still need to set a block for undefined and empty texts, hence return at this point
+      // This is necessary because we don't know at this point if we're at the
+      // start of an empty line or not.
+      // To compensate, empty blocks are removed in `finalize()`.
+      //
+      // Empty strings should still have a height
+      var tmpText = text;
+      if (text === undefined || text === "") tmpText = " ";
+
+      // Determine width and get the font properties
+      var result = this.measureText(tmpText, mod);
+      var block = (0, _assign2["default"])({}, result.values);
+      block.text = text;
+      block.width = result.width;
+      block.mod = mod;
+
+      if (text === undefined || text === "") {
+        block.width = 0;
+      }
+
+      this.lines[l].blocks.push(block);
+
+      // Update the line width. We need this for determining if a string goes over max width
+      this.lines[l].width += block.width;
+    }
+
+    /**
+     * Returns the width in pixels of the current line.
+     *
+     * @returns {number}
+     */
+
+  }, {
+    key: "curWidth",
+    value: function curWidth() {
+      var line = this.lines[this.current];
+      if (line === undefined) return 0;
+
+      return line.width;
+    }
+
+    /**
+     * Add text in block to current line
+     *
+     * @param {string} text
+     * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']
+     */
+
+  }, {
+    key: "append",
+    value: function append(text) {
+      var mod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'normal';
+
+      this._add(this.current, text, mod);
+    }
+
+    /**
+     * Add text in block to current line and start a new line
+     *
+     * @param {string} text
+     * @param {'bold'|'ital'|'boldital'|'mono'|'normal'} [mod='normal']
+     */
+
+  }, {
+    key: "newLine",
+    value: function newLine(text) {
+      var mod = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'normal';
+
+      this._add(this.current, text, mod);
+      this.current++;
+    }
+
+    /**
+     * Determine and set the heights of all the lines currently contained in this instance
+     *
+     * Note that width has already been set.
+     * 
+     * @private
+     */
+
+  }, {
+    key: "determineLineHeights",
+    value: function determineLineHeights() {
+      for (var k = 0; k < this.lines.length; k++) {
+        var line = this.lines[k];
+
+        // Looking for max height of blocks in line
+        var height = 0;
+
+        if (line.blocks !== undefined) {
+          // Can happen if text contains e.g. '\n '
+          for (var l = 0; l < line.blocks.length; l++) {
+            var block = line.blocks[l];
+
+            if (height < block.height) {
+              height = block.height;
+            }
+          }
+        }
+
+        line.height = height;
+      }
+    }
+
+    /**
+     * Determine the full size of the label text, as determined by current lines and blocks
+     * 
+     * @private
+     */
+
+  }, {
+    key: "determineLabelSize",
+    value: function determineLabelSize() {
+      var width = 0;
+      var height = 0;
+      for (var k = 0; k < this.lines.length; k++) {
+        var line = this.lines[k];
+
+        if (line.width > width) {
+          width = line.width;
+        }
+        height += line.height;
+      }
+
+      this.width = width;
+      this.height = height;
+    }
+
+    /**
+     * Remove all empty blocks and empty lines we don't need
+     * 
+     * This must be done after the width/height determination,
+     * so that these are set properly for processing here.
+     *
+     * @returns {Array<Line>} Lines with empty blocks (and some empty lines) removed
+     * @private
+     */
+
+  }, {
+    key: "removeEmptyBlocks",
+    value: function removeEmptyBlocks() {
+      var tmpLines = [];
+      for (var k = 0; k < this.lines.length; k++) {
+        var line = this.lines[k];
+
+        // Note: an empty line in between text has width zero but is still relevant to layout.
+        // So we can't use width for testing empty line here
+        if (line.blocks.length === 0) continue;
+
+        // Discard final empty line always
+        if (k === this.lines.length - 1) {
+          if (line.width === 0) continue;
+        }
+
+        var tmpLine = {};
+        (0, _assign2["default"])(tmpLine, line);
+        tmpLine.blocks = [];
+
+        var firstEmptyBlock = void 0;
+        var tmpBlocks = [];
+        for (var l = 0; l < line.blocks.length; l++) {
+          var block = line.blocks[l];
+          if (block.width !== 0) {
+            tmpBlocks.push(block);
+          } else {
+            if (firstEmptyBlock === undefined) {
+              firstEmptyBlock = block;
+            }
+          }
+        }
+
+        // Ensure that there is *some* text present
+        if (tmpBlocks.length === 0 && firstEmptyBlock !== undefined) {
+          tmpBlocks.push(firstEmptyBlock);
+        }
+
+        tmpLine.blocks = tmpBlocks;
+
+        tmpLines.push(tmpLine);
+      }
+
+      return tmpLines;
+    }
+
+    /**
+     * Set the sizes for all lines and the whole thing.
+     *
+     * @returns {{width: (number|*), height: (number|*), lines: Array}}
+     */
+
+  }, {
+    key: "finalize",
+    value: function finalize() {
+      //console.log(JSON.stringify(this.lines, null, 2));
+
+      this.determineLineHeights();
+      this.determineLabelSize();
+      var tmpLines = this.removeEmptyBlocks();
+
+      // Return a simple hash object for further processing.
+      return {
+        width: this.width,
+        height: this.height,
+        lines: tmpLines
+      };
+    }
+  }]);
+  return LabelAccumulator;
+}();
+
+exports["default"] = LabelAccumulator;
+
+/***/ }),
+/* 193 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Box Node/Cluster shape.
+ *
+ * @extends NodeBase
+ */
+var Box = function (_NodeBase) {
+  (0, _inherits3['default'])(Box, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Box(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Box);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Box.__proto__ || (0, _getPrototypeOf2['default'])(Box)).call(this, options, body, labelModule));
+
+    _this._setMargins(labelModule);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(Box, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+
+      if (this.needsRefresh(selected, hover)) {
+        var dimensions = this.getDimensionsFromLabel(ctx, selected, hover);
+
+        this.width = dimensions.width + this.margin.right + this.margin.left;
+        this.height = dimensions.height + this.margin.top + this.margin.bottom;
+        this.radius = this.width / 2;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      this.initContextForDraw(ctx, values);
+      ctx.roundRect(this.left, this.top, this.width, this.height, values.borderRadius);
+      this.performFill(ctx, values);
+
+      this.updateBoundingBox(x, y, ctx, selected, hover);
+      this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover);
+    }
+
+    /**
+     *
+     * @param {number} x width
+     * @param {number} y height
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {boolean} selected
+     * @param {boolean} hover
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y, ctx, selected, hover) {
+      this._updateBoundingBox(x, y, ctx, selected, hover);
+
+      var borderRadius = this.options.shapeProperties.borderRadius; // only effective for box
+      this._addBoundingBoxMargin(borderRadius);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      this.resize(ctx);
+      var borderWidth = this.options.borderWidth;
+
+      return Math.min(Math.abs(this.width / 2 / Math.cos(angle)), Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth;
+    }
+  }]);
+  return Box;
+}(_NodeBase3['default']);
+
+exports['default'] = Box;
+
+/***/ }),
+/* 194 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(195);
+module.exports = __webpack_require__(7).Object.getPrototypeOf;
+
+
+/***/ }),
+/* 195 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.2.9 Object.getPrototypeOf(O)
+var toObject = __webpack_require__(41);
+var $getPrototypeOf = __webpack_require__(85);
+
+__webpack_require__(87)('getPrototypeOf', function () {
+  return function getPrototypeOf(it) {
+    return $getPrototypeOf(toObject(it));
+  };
+});
+
+
+/***/ }),
+/* 196 */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = { "default": __webpack_require__(197), __esModule: true };
+
+/***/ }),
+/* 197 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(198);
+module.exports = __webpack_require__(7).Object.setPrototypeOf;
+
+
+/***/ }),
+/* 198 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// 19.1.3.19 Object.setPrototypeOf(O, proto)
+var $export = __webpack_require__(17);
+$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(199).set });
+
+
+/***/ }),
+/* 199 */
+/***/ (function(module, exports, __webpack_require__) {
+
+// Works with __proto__ only. Old v8 can't work with null proto objects.
+/* eslint-disable no-proto */
+var isObject = __webpack_require__(32);
+var anObject = __webpack_require__(27);
+var check = function (O, proto) {
+  anObject(O);
+  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
+};
+module.exports = {
+  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
+    function (test, buggy, set) {
+      try {
+        set = __webpack_require__(80)(Function.call, __webpack_require__(89).f(Object.prototype, '__proto__').set, 2);
+        set(test, []);
+        buggy = !(test instanceof Array);
+      } catch (e) { buggy = true; }
+      return function setPrototypeOf(O, proto) {
+        check(O, proto);
+        if (buggy) O.__proto__ = proto;
+        else set(O, proto);
+        return O;
+      };
+    }({}, false) : undefined),
+  check: check
+};
+
+
+/***/ }),
+/* 200 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _CircleImageBase2 = __webpack_require__(73);
+
+var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Circle Node/Cluster shape.
+ *
+ * @extends CircleImageBase
+ */
+var Circle = function (_CircleImageBase) {
+  (0, _inherits3['default'])(Circle, _CircleImageBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Circle(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Circle);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Circle.__proto__ || (0, _getPrototypeOf2['default'])(Circle)).call(this, options, body, labelModule));
+
+    _this._setMargins(labelModule);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(Circle, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+
+      if (this.needsRefresh(selected, hover)) {
+        var dimensions = this.getDimensionsFromLabel(ctx, selected, hover);
+
+        var diameter = Math.max(dimensions.width + this.margin.right + this.margin.left, dimensions.height + this.margin.top + this.margin.bottom);
+
+        this.options.size = diameter / 2; // NOTE: this size field only set here, not in Ellipse, Database, Box
+        this.width = diameter;
+        this.height = diameter;
+        this.radius = this.width / 2;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      this._drawRawCircle(ctx, x, y, values);
+
+      this.updateBoundingBox(x, y);
+      this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, y, selected, hover);
+    }
+
+    /**
+     *
+     * @param {number} x width
+     * @param {number} y height
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y) {
+      this.boundingBox.top = y - this.options.size;
+      this.boundingBox.left = x - this.options.size;
+      this.boundingBox.right = x + this.options.size;
+      this.boundingBox.bottom = y + this.options.size;
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle - Unused
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      // eslint-disable-line no-unused-vars
+      this.resize(ctx);
+      return this.width * 0.5;
+    }
+  }]);
+  return Circle;
+}(_CircleImageBase3['default']);
+
+exports['default'] = Circle;
+
+/***/ }),
+/* 201 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _CircleImageBase2 = __webpack_require__(73);
+
+var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A CircularImage Node/Cluster shape.
+ *
+ * @extends CircleImageBase
+ */
+var CircularImage = function (_CircleImageBase) {
+  (0, _inherits3['default'])(CircularImage, _CircleImageBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   * @param {Image} imageObj
+   * @param {Image} imageObjAlt
+   */
+  function CircularImage(options, body, labelModule, imageObj, imageObjAlt) {
+    (0, _classCallCheck3['default'])(this, CircularImage);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (CircularImage.__proto__ || (0, _getPrototypeOf2['default'])(CircularImage)).call(this, options, body, labelModule));
+
+    _this.setImages(imageObj, imageObjAlt);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(CircularImage, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+
+      var imageAbsent = this.imageObj.src === undefined || this.imageObj.width === undefined || this.imageObj.height === undefined;
+
+      if (imageAbsent) {
+        var diameter = this.options.size * 2;
+        this.width = diameter;
+        this.height = diameter;
+        this.radius = 0.5 * this.width;
+        return;
+      }
+
+      // At this point, an image is present, i.e. this.imageObj is valid.
+      if (this.needsRefresh(selected, hover)) {
+        this._resizeImage();
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.switchImages(selected);
+      this.resize();
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.
+      this._drawRawCircle(ctx, x, y, values);
+
+      // now we draw in the circle, we save so we can revert the clip operation after drawing.
+      ctx.save();
+      // clip is used to use the stroke in drawRawCircle as an area that we can draw in.
+      ctx.clip();
+      // draw the image
+      this._drawImageAtPosition(ctx, values);
+      // restore so we can again draw on the full canvas
+      ctx.restore();
+
+      this._drawImageLabel(ctx, x, y, selected, hover);
+
+      this.updateBoundingBox(x, y);
+    }
+
+    // TODO: compare with Circle.updateBoundingBox(), consolidate? More stuff is happening here
+    /**
+     *
+     * @param {number} x width
+     * @param {number} y height
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y) {
+      this.boundingBox.top = y - this.options.size;
+      this.boundingBox.left = x - this.options.size;
+      this.boundingBox.right = x + this.options.size;
+      this.boundingBox.bottom = y + this.options.size;
+
+      // TODO: compare with Image.updateBoundingBox(), consolidate?
+      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);
+      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);
+      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle - Unused
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      // eslint-disable-line no-unused-vars
+      this.resize(ctx);
+      return this.width * 0.5;
+    }
+  }]);
+  return CircularImage;
+}(_CircleImageBase3['default']);
+
+exports['default'] = CircularImage;
+
+/***/ }),
+/* 202 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Database Node/Cluster shape.
+ *
+ * @extends NodeBase
+ */
+var Database = function (_NodeBase) {
+  (0, _inherits3['default'])(Database, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Database(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Database);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Database.__proto__ || (0, _getPrototypeOf2['default'])(Database)).call(this, options, body, labelModule));
+
+    _this._setMargins(labelModule);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} selected
+   * @param {boolean} hover
+   */
+
+
+  (0, _createClass3['default'])(Database, [{
+    key: 'resize',
+    value: function resize(ctx, selected, hover) {
+      if (this.needsRefresh(selected, hover)) {
+        var dimensions = this.getDimensionsFromLabel(ctx, selected, hover);
+        var size = dimensions.width + this.margin.right + this.margin.left;
+
+        this.width = size;
+        this.height = size;
+        this.radius = this.width / 2;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      this.initContextForDraw(ctx, values);
+      ctx.database(x - this.width / 2, y - this.height / 2, this.width, this.height);
+      this.performFill(ctx, values);
+
+      this.updateBoundingBox(x, y, ctx, selected, hover);
+      this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover);
+    }
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Database;
+}(_NodeBase3['default']);
+
+exports['default'] = Database;
+
+/***/ }),
+/* 203 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Diamond Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Diamond = function (_ShapeBase) {
+  (0, _inherits3['default'])(Diamond, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Diamond(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Diamond);
+    return (0, _possibleConstructorReturn3['default'])(this, (Diamond.__proto__ || (0, _getPrototypeOf2['default'])(Diamond)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x width
+   * @param {number} y height
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Diamond, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'diamond', 4, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Diamond;
+}(_ShapeBase3['default']);
+
+exports['default'] = Diamond;
+
+/***/ }),
+/* 204 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Dot Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Dot = function (_ShapeBase) {
+  (0, _inherits3['default'])(Dot, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Dot(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Dot);
+    return (0, _possibleConstructorReturn3['default'])(this, (Dot.__proto__ || (0, _getPrototypeOf2['default'])(Dot)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x width
+   * @param {number} y height
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Dot, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'circle', 2, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      // eslint-disable-line no-unused-vars
+      this.resize(ctx);
+      return this.options.size;
+    }
+  }]);
+  return Dot;
+}(_ShapeBase3['default']);
+
+exports['default'] = Dot;
+
+/***/ }),
+/* 205 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Am Ellipse Node/Cluster shape.
+ *
+ * @extends NodeBase
+ */
+var Ellipse = function (_NodeBase) {
+  (0, _inherits3['default'])(Ellipse, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Ellipse(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Ellipse);
+    return (0, _possibleConstructorReturn3['default'])(this, (Ellipse.__proto__ || (0, _getPrototypeOf2['default'])(Ellipse)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(Ellipse, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+
+      if (this.needsRefresh(selected, hover)) {
+        var dimensions = this.getDimensionsFromLabel(ctx, selected, hover);
+
+        this.height = dimensions.height * 2;
+        this.width = dimensions.width + dimensions.height;
+        this.radius = 0.5 * this.width;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.left = x - this.width * 0.5;
+      this.top = y - this.height * 0.5;
+
+      this.initContextForDraw(ctx, values);
+      ctx.ellipse_vis(this.left, this.top, this.width, this.height);
+      this.performFill(ctx, values);
+
+      this.updateBoundingBox(x, y, ctx, selected, hover);
+      this.labelModule.draw(ctx, x, y, selected, hover);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      this.resize(ctx);
+      var a = this.width * 0.5;
+      var b = this.height * 0.5;
+      var w = Math.sin(angle) * a;
+      var h = Math.cos(angle) * b;
+      return a * b / Math.sqrt(w * w + h * h);
+    }
+  }]);
+  return Ellipse;
+}(_NodeBase3['default']);
+
+exports['default'] = Ellipse;
+
+/***/ }),
+/* 206 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * An icon replacement for the default Node shape.
+ *
+ * @extends NodeBase
+ */
+var Icon = function (_NodeBase) {
+  (0, _inherits3['default'])(Icon, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Icon(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Icon);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Icon.__proto__ || (0, _getPrototypeOf2['default'])(Icon)).call(this, options, body, labelModule));
+
+    _this._setMargins(labelModule);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx - Unused.
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(Icon, [{
+    key: 'resize',
+    value: function resize(ctx, selected, hover) {
+      if (this.needsRefresh(selected, hover)) {
+        this.iconSize = {
+          width: Number(this.options.icon.size),
+          height: Number(this.options.icon.size)
+        };
+        this.width = this.iconSize.width + this.margin.right + this.margin.left;
+        this.height = this.iconSize.height + this.margin.top + this.margin.bottom;
+        this.radius = 0.5 * this.width;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.options.icon.size = this.options.icon.size || 50;
+
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+      this._icon(ctx, x, y, selected, hover, values);
+
+      if (this.options.label !== undefined) {
+        var iconTextSpacing = 5;
+        this.labelModule.draw(ctx, this.left + this.iconSize.width / 2 + this.margin.left, y + this.height / 2 + iconTextSpacing, selected);
+      }
+
+      this.updateBoundingBox(x, y);
+    }
+
+    /**
+     *
+     * @param {number} x
+     * @param {number} y
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y) {
+      this.boundingBox.top = y - this.options.icon.size * 0.5;
+      this.boundingBox.left = x - this.options.icon.size * 0.5;
+      this.boundingBox.right = x + this.options.icon.size * 0.5;
+      this.boundingBox.bottom = y + this.options.icon.size * 0.5;
+
+      if (this.options.label !== undefined && this.labelModule.size.width > 0) {
+        var iconTextSpacing = 5;
+        this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);
+        this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);
+        this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover - Unused
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: '_icon',
+    value: function _icon(ctx, x, y, selected, hover, values) {
+      var iconSize = Number(this.options.icon.size);
+
+      if (this.options.icon.code !== undefined) {
+        ctx.font = (selected ? "bold " : "") + iconSize + "px " + this.options.icon.face;
+
+        // draw icon
+        ctx.fillStyle = this.options.icon.color || "black";
+        ctx.textAlign = "center";
+        ctx.textBaseline = "middle";
+
+        // draw shadow if enabled
+        this.enableShadow(ctx, values);
+        ctx.fillText(this.options.icon.code, x, y);
+
+        // disable shadows for other elements.
+        this.disableShadow(ctx, values);
+      } else {
+        console.error('When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.');
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Icon;
+}(_NodeBase3['default']);
+
+exports['default'] = Icon;
+
+/***/ }),
+/* 207 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _CircleImageBase2 = __webpack_require__(73);
+
+var _CircleImageBase3 = _interopRequireDefault(_CircleImageBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * An image-based replacement for the default Node shape.
+ *
+ * @extends CircleImageBase
+ */
+var Image = function (_CircleImageBase) {
+  (0, _inherits3['default'])(Image, _CircleImageBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   * @param {Image} imageObj
+   * @param {Image} imageObjAlt
+   */
+  function Image(options, body, labelModule, imageObj, imageObjAlt) {
+    (0, _classCallCheck3['default'])(this, Image);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Image.__proto__ || (0, _getPrototypeOf2['default'])(Image)).call(this, options, body, labelModule));
+
+    _this.setImages(imageObj, imageObjAlt);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx - Unused.
+   * @param {boolean} [selected]
+   * @param {boolean} [hover]
+   */
+
+
+  (0, _createClass3['default'])(Image, [{
+    key: 'resize',
+    value: function resize(ctx) {
+      var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.selected;
+      var hover = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.hover;
+
+      var imageAbsent = this.imageObj.src === undefined || this.imageObj.width === undefined || this.imageObj.height === undefined;
+
+      if (imageAbsent) {
+        var side = this.options.size * 2;
+        this.width = side;
+        this.height = side;
+        return;
+      }
+
+      if (this.needsRefresh(selected, hover)) {
+        this._resizeImage();
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.switchImages(selected);
+      this.resize();
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      if (this.options.shapeProperties.useBorderWithImage === true) {
+        var neutralborderWidth = this.options.borderWidth;
+        var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth;
+        var borderWidth = (selected ? selectionLineWidth : neutralborderWidth) / this.body.view.scale;
+        ctx.lineWidth = Math.min(this.width, borderWidth);
+
+        ctx.beginPath();
+
+        // setup the line properties.
+        ctx.strokeStyle = selected ? this.options.color.highlight.border : hover ? this.options.color.hover.border : this.options.color.border;
+
+        // set a fillstyle
+        ctx.fillStyle = selected ? this.options.color.highlight.background : hover ? this.options.color.hover.background : this.options.color.background;
+
+        // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image
+        ctx.rect(this.left - 0.5 * ctx.lineWidth, this.top - 0.5 * ctx.lineWidth, this.width + ctx.lineWidth, this.height + ctx.lineWidth);
+        ctx.fill();
+
+        this.performStroke(ctx, values);
+
+        ctx.closePath();
+      }
+
+      this._drawImageAtPosition(ctx, values);
+
+      this._drawImageLabel(ctx, x, y, selected, hover);
+
+      this.updateBoundingBox(x, y);
+    }
+
+    /**
+     *
+     * @param {number} x
+     * @param {number} y
+     */
+
+  }, {
+    key: 'updateBoundingBox',
+    value: function updateBoundingBox(x, y) {
+      this.resize();
+      this._updateBoundingBox(x, y);
+
+      if (this.options.label !== undefined && this.labelModule.size.width > 0) {
+        this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);
+        this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);
+        this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Image;
+}(_CircleImageBase3['default']);
+
+exports['default'] = Image;
+
+/***/ }),
+/* 208 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Square Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Square = function (_ShapeBase) {
+  (0, _inherits3['default'])(Square, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Square(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Square);
+    return (0, _possibleConstructorReturn3['default'])(this, (Square.__proto__ || (0, _getPrototypeOf2['default'])(Square)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x width
+   * @param {number} y height
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Square, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'square', 2, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Square;
+}(_ShapeBase3['default']);
+
+exports['default'] = Square;
+
+/***/ }),
+/* 209 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Hexagon Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Hexagon = function (_ShapeBase) {
+  (0, _inherits3['default'])(Hexagon, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Hexagon(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Hexagon);
+    return (0, _possibleConstructorReturn3['default'])(this, (Hexagon.__proto__ || (0, _getPrototypeOf2['default'])(Hexagon)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x width
+   * @param {number} y height
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Hexagon, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'hexagon', 4, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Hexagon;
+}(_ShapeBase3['default']);
+
+exports['default'] = Hexagon;
+
+/***/ }),
+/* 210 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Star Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Star = function (_ShapeBase) {
+  (0, _inherits3['default'])(Star, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Star(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Star);
+    return (0, _possibleConstructorReturn3['default'])(this, (Star.__proto__ || (0, _getPrototypeOf2['default'])(Star)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x width
+   * @param {number} y height
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Star, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'star', 4, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Star;
+}(_ShapeBase3['default']);
+
+exports['default'] = Star;
+
+/***/ }),
+/* 211 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _NodeBase2 = __webpack_require__(23);
+
+var _NodeBase3 = _interopRequireDefault(_NodeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A text-based replacement for the default Node shape.
+ *
+ * @extends NodeBase
+ */
+var Text = function (_NodeBase) {
+  (0, _inherits3['default'])(Text, _NodeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Text(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Text);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (Text.__proto__ || (0, _getPrototypeOf2['default'])(Text)).call(this, options, body, labelModule));
+
+    _this._setMargins(labelModule);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {boolean} selected
+   * @param {boolean} hover
+   */
+
+
+  (0, _createClass3['default'])(Text, [{
+    key: 'resize',
+    value: function resize(ctx, selected, hover) {
+      if (this.needsRefresh(selected, hover)) {
+        this.textSize = this.labelModule.getTextSize(ctx, selected, hover);
+        this.width = this.textSize.width + this.margin.right + this.margin.left;
+        this.height = this.textSize.height + this.margin.top + this.margin.bottom;
+        this.radius = 0.5 * this.width;
+      }
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} x width
+     * @param {number} y height
+     * @param {boolean} selected
+     * @param {boolean} hover
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     */
+
+  }, {
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this.resize(ctx, selected, hover);
+      this.left = x - this.width / 2;
+      this.top = y - this.height / 2;
+
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+      this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left, this.top + this.textSize.height / 2 + this.margin.top, selected, hover);
+
+      // disable shadows for other elements.
+      this.disableShadow(ctx, values);
+
+      this.updateBoundingBox(x, y, ctx, selected, hover);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Text;
+}(_NodeBase3['default']);
+
+exports['default'] = Text;
+
+/***/ }),
+/* 212 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Triangle Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var Triangle = function (_ShapeBase) {
+  (0, _inherits3['default'])(Triangle, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function Triangle(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, Triangle);
+    return (0, _possibleConstructorReturn3['default'])(this, (Triangle.__proto__ || (0, _getPrototypeOf2['default'])(Triangle)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x
+   * @param {number} y
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(Triangle, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'triangle', 3, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return Triangle;
+}(_ShapeBase3['default']);
+
+exports['default'] = Triangle;
+
+/***/ }),
+/* 213 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _ShapeBase2 = __webpack_require__(24);
+
+var _ShapeBase3 = _interopRequireDefault(_ShapeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A downward facing Triangle Node/Cluster shape.
+ *
+ * @extends ShapeBase
+ */
+var TriangleDown = function (_ShapeBase) {
+  (0, _inherits3['default'])(TriangleDown, _ShapeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function TriangleDown(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, TriangleDown);
+    return (0, _possibleConstructorReturn3['default'])(this, (TriangleDown.__proto__ || (0, _getPrototypeOf2['default'])(TriangleDown)).call(this, options, body, labelModule));
+  }
+
+  /**
+   *
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {number} x
+   * @param {number} y
+   * @param {boolean} selected
+   * @param {boolean} hover
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   */
+
+
+  (0, _createClass3['default'])(TriangleDown, [{
+    key: 'draw',
+    value: function draw(ctx, x, y, selected, hover, values) {
+      this._drawShape(ctx, 'triangleDown', 3, x, y, selected, hover, values);
+    }
+
+    /**
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {number} angle
+     * @returns {number}
+     */
+
+  }, {
+    key: 'distanceToBorder',
+    value: function distanceToBorder(ctx, angle) {
+      return this._distanceToBorder(ctx, angle);
+    }
+  }]);
+  return TriangleDown;
+}(_ShapeBase3['default']);
+
+exports['default'] = TriangleDown;
+
+/***/ }),
+/* 214 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var DataSet = __webpack_require__(11);
+var DataView = __webpack_require__(12);
+var Edge = __webpack_require__(74)['default'];
+
+/**
+ * Handler for Edges
+ */
+
+var EdgesHandler = function () {
+  /**
+   * @param {Object} body
+   * @param {Array.<Image>} images
+   * @param {Array.<Group>} groups
+   */
+  function EdgesHandler(body, images, groups) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, EdgesHandler);
+
+    this.body = body;
+    this.images = images;
+    this.groups = groups;
+
+    // create the edge API in the body container
+    this.body.functions.createEdge = this.create.bind(this);
+
+    this.edgesListeners = {
+      add: function add(event, params) {
+        _this.add(params.items);
+      },
+      update: function update(event, params) {
+        _this.update(params.items);
+      },
+      remove: function remove(event, params) {
+        _this.remove(params.items);
+      }
+    };
+
+    this.options = {};
+    this.defaultOptions = {
+      arrows: {
+        to: { enabled: false, scaleFactor: 1, type: 'arrow' }, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}
+        middle: { enabled: false, scaleFactor: 1, type: 'arrow' },
+        from: { enabled: false, scaleFactor: 1, type: 'arrow' }
+      },
+      arrowStrikethrough: true,
+      color: {
+        color: '#848484',
+        highlight: '#848484',
+        hover: '#848484',
+        inherit: 'from',
+        opacity: 1.0
+      },
+      dashes: false,
+      font: {
+        color: '#343434',
+        size: 14, // px
+        face: 'arial',
+        background: 'none',
+        strokeWidth: 2, // px
+        strokeColor: '#ffffff',
+        align: 'horizontal',
+        multi: false,
+        vadjust: 0,
+        bold: {
+          mod: 'bold'
+        },
+        boldital: {
+          mod: 'bold italic'
+        },
+        ital: {
+          mod: 'italic'
+        },
+        mono: {
+          mod: '',
+          size: 15, // px
+          face: 'courier new',
+          vadjust: 2
+        }
+      },
+      hidden: false,
+      hoverWidth: 1.5,
+      label: undefined,
+      labelHighlightBold: true,
+      length: undefined,
+      physics: true,
+      scaling: {
+        min: 1,
+        max: 15,
+        label: {
+          enabled: true,
+          min: 14,
+          max: 30,
+          maxVisible: 30,
+          drawThreshold: 5
+        },
+        customScalingFunction: function customScalingFunction(min, max, total, value) {
+          if (max === min) {
+            return 0.5;
+          } else {
+            var scale = 1 / (max - min);
+            return Math.max(0, (value - min) * scale);
+          }
+        }
+      },
+      selectionWidth: 1.5,
+      selfReferenceSize: 20,
+      shadow: {
+        enabled: false,
+        color: 'rgba(0,0,0,0.5)',
+        size: 10,
+        x: 5,
+        y: 5
+      },
+      smooth: {
+        enabled: true,
+        type: "dynamic",
+        forceDirection: 'none',
+        roundness: 0.5
+      },
+      title: undefined,
+      width: 1,
+      value: undefined
+    };
+
+    util.deepExtend(this.options, this.defaultOptions);
+
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(EdgesHandler, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this2 = this;
+
+      // this allows external modules to force all dynamic curves to turn static.
+      this.body.emitter.on("_forceDisableDynamicCurves", function (type) {
+        var emit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+        if (type === 'dynamic') {
+          type = 'continuous';
+        }
+        var dataChanged = false;
+        for (var edgeId in _this2.body.edges) {
+          if (_this2.body.edges.hasOwnProperty(edgeId)) {
+            var edge = _this2.body.edges[edgeId];
+            var edgeData = _this2.body.data.edges._data[edgeId];
+
+            // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.
+            // this is because a change in the global would not affect these curves.
+            if (edgeData !== undefined) {
+              var smoothOptions = edgeData.smooth;
+              if (smoothOptions !== undefined) {
+                if (smoothOptions.enabled === true && smoothOptions.type === 'dynamic') {
+                  if (type === undefined) {
+                    edge.setOptions({ smooth: false });
+                  } else {
+                    edge.setOptions({ smooth: { type: type } });
+                  }
+                  dataChanged = true;
+                }
+              }
+            }
+          }
+        }
+        if (emit === true && dataChanged === true) {
+          _this2.body.emitter.emit("_dataChanged");
+        }
+      });
+
+      // this is called when options of EXISTING nodes or edges have changed.
+      //
+      // NOTE: Not true, called when options have NOT changed, for both existing as well as new nodes.
+      //       See update() for logic.
+      // TODO: Verify and examine the consequences of this. It might still trigger when
+      //       non-option fields have changed, but then reconnecting edges is still useless.
+      //       Alternatively, it might also be called when edges are removed.
+      //
+      this.body.emitter.on("_dataUpdated", function () {
+        _this2.reconnectEdges();
+      });
+
+      // refresh the edges. Used when reverting from hierarchical layout
+      this.body.emitter.on("refreshEdges", this.refresh.bind(this));
+      this.body.emitter.on("refresh", this.refresh.bind(this));
+      this.body.emitter.on("destroy", function () {
+        util.forEach(_this2.edgesListeners, function (callback, event) {
+          if (_this2.body.data.edges) _this2.body.data.edges.off(event, callback);
+        });
+        delete _this2.body.functions.createEdge;
+        delete _this2.edgesListeners.add;
+        delete _this2.edgesListeners.update;
+        delete _this2.edgesListeners.remove;
+        delete _this2.edgesListeners;
+      });
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        // use the parser from the Edge class to fill in all shorthand notations
+        Edge.parseOptions(this.options, options, true, this.defaultOptions, true);
+
+        // update smooth settings in all edges
+        var dataChanged = false;
+        if (options.smooth !== undefined) {
+          for (var edgeId in this.body.edges) {
+            if (this.body.edges.hasOwnProperty(edgeId)) {
+              dataChanged = this.body.edges[edgeId].updateEdgeType() || dataChanged;
+            }
+          }
+        }
+
+        // update fonts in all edges
+        if (options.font !== undefined) {
+          for (var _edgeId in this.body.edges) {
+            if (this.body.edges.hasOwnProperty(_edgeId)) {
+              this.body.edges[_edgeId].updateLabelModule();
+            }
+          }
+        }
+
+        // update the state of the variables if needed
+        if (options.hidden !== undefined || options.physics !== undefined || dataChanged === true) {
+          this.body.emitter.emit('_dataChanged');
+        }
+      }
+    }
+
+    /**
+     * Load edges by reading the data table
+     * @param {Array | DataSet | DataView} edges    The data containing the edges.
+     * @param {boolean} [doNotEmit=false]
+     * @private
+     */
+
+  }, {
+    key: 'setData',
+    value: function setData(edges) {
+      var _this3 = this;
+
+      var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var oldEdgesData = this.body.data.edges;
+
+      if (edges instanceof DataSet || edges instanceof DataView) {
+        this.body.data.edges = edges;
+      } else if (Array.isArray(edges)) {
+        this.body.data.edges = new DataSet();
+        this.body.data.edges.add(edges);
+      } else if (!edges) {
+        this.body.data.edges = new DataSet();
+      } else {
+        throw new TypeError('Array or DataSet expected');
+      }
+
+      // TODO: is this null or undefined or false?
+      if (oldEdgesData) {
+        // unsubscribe from old dataset
+        util.forEach(this.edgesListeners, function (callback, event) {
+          oldEdgesData.off(event, callback);
+        });
+      }
+
+      // remove drawn edges
+      this.body.edges = {};
+
+      // TODO: is this null or undefined or false?
+      if (this.body.data.edges) {
+        // subscribe to new dataset
+        util.forEach(this.edgesListeners, function (callback, event) {
+          _this3.body.data.edges.on(event, callback);
+        });
+
+        // draw all new nodes
+        var ids = this.body.data.edges.getIds();
+        this.add(ids, true);
+      }
+
+      this.body.emitter.emit('_adjustEdgesForHierarchicalLayout');
+      if (doNotEmit === false) {
+        this.body.emitter.emit("_dataChanged");
+      }
+    }
+
+    /**
+     * Add edges
+     * @param {number[] | string[]} ids
+     * @param {boolean} [doNotEmit=false]
+     * @private
+     */
+
+  }, {
+    key: 'add',
+    value: function add(ids) {
+      var doNotEmit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var edges = this.body.edges;
+      var edgesData = this.body.data.edges;
+
+      for (var i = 0; i < ids.length; i++) {
+        var id = ids[i];
+
+        var oldEdge = edges[id];
+        if (oldEdge) {
+          oldEdge.disconnect();
+        }
+
+        var data = edgesData.get(id, { "showInternalIds": true });
+        edges[id] = this.create(data);
+      }
+
+      this.body.emitter.emit('_adjustEdgesForHierarchicalLayout');
+
+      if (doNotEmit === false) {
+        this.body.emitter.emit("_dataChanged");
+      }
+    }
+
+    /**
+     * Update existing edges, or create them when not yet existing
+     * @param {number[] | string[]} ids
+     * @private
+     */
+
+  }, {
+    key: 'update',
+    value: function update(ids) {
+      var edges = this.body.edges;
+      var edgesData = this.body.data.edges;
+      var dataChanged = false;
+      for (var i = 0; i < ids.length; i++) {
+        var id = ids[i];
+        var data = edgesData.get(id);
+        var edge = edges[id];
+        if (edge !== undefined) {
+          // update edge
+          edge.disconnect();
+          dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.
+          edge.connect();
+        } else {
+          // create edge
+          this.body.edges[id] = this.create(data);
+          dataChanged = true;
+        }
+      }
+
+      if (dataChanged === true) {
+        this.body.emitter.emit('_adjustEdgesForHierarchicalLayout');
+        this.body.emitter.emit("_dataChanged");
+      } else {
+        this.body.emitter.emit("_dataUpdated");
+      }
+    }
+
+    /**
+     * Remove existing edges. Non existing ids will be ignored
+     * @param {number[] | string[]} ids
+     * @param {boolean} [emit=true]
+     * @private
+     */
+
+  }, {
+    key: 'remove',
+    value: function remove(ids) {
+      var emit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      if (ids.length === 0) return; // early out
+
+      var edges = this.body.edges;
+      util.forEach(ids, function (id) {
+        var edge = edges[id];
+        if (edge !== undefined) {
+          edge.remove();
+        }
+      });
+
+      if (emit) {
+        this.body.emitter.emit("_dataChanged");
+      }
+    }
+
+    /**
+     * Refreshes Edge Handler
+     */
+
+  }, {
+    key: 'refresh',
+    value: function refresh() {
+      var _this4 = this;
+
+      util.forEach(this.body.edges, function (edge, edgeId) {
+        var data = _this4.body.data.edges._data[edgeId];
+        if (data !== undefined) {
+          edge.setOptions(data);
+        }
+      });
+    }
+
+    /**
+     *
+     * @param {Object} properties
+     * @returns {Edge}
+     */
+
+  }, {
+    key: 'create',
+    value: function create(properties) {
+      return new Edge(properties, this.body, this.options, this.defaultOptions);
+    }
+
+    /**
+     * Reconnect all edges
+     * @private
+     */
+
+  }, {
+    key: 'reconnectEdges',
+    value: function reconnectEdges() {
+      var id;
+      var nodes = this.body.nodes;
+      var edges = this.body.edges;
+
+      for (id in nodes) {
+        if (nodes.hasOwnProperty(id)) {
+          nodes[id].edges = [];
+        }
+      }
+
+      for (id in edges) {
+        if (edges.hasOwnProperty(id)) {
+          var edge = edges[id];
+          edge.from = null;
+          edge.to = null;
+          edge.connect();
+        }
+      }
+    }
+
+    /**
+     *
+     * @param {Edge.id} edgeId
+     * @returns {Array}
+     */
+
+  }, {
+    key: 'getConnectedNodes',
+    value: function getConnectedNodes(edgeId) {
+      var nodeList = [];
+      if (this.body.edges[edgeId] !== undefined) {
+        var edge = this.body.edges[edgeId];
+        if (edge.fromId !== undefined) {
+          nodeList.push(edge.fromId);
+        }
+        if (edge.toId !== undefined) {
+          nodeList.push(edge.toId);
+        }
+      }
+      return nodeList;
+    }
+
+    /**
+     * There is no direct relation between the nodes and the edges DataSet,
+     * so the right place to do call this is in the handler for event `_dataUpdated`.
+     */
+
+  }, {
+    key: '_updateState',
+    value: function _updateState() {
+      this._addMissingEdges();
+      this._removeInvalidEdges();
+    }
+
+    /**
+     * Scan for missing nodes and remove corresponding edges, if any.
+     * @private
+     */
+
+  }, {
+    key: '_removeInvalidEdges',
+    value: function _removeInvalidEdges() {
+      var _this5 = this;
+
+      var edgesToDelete = [];
+
+      util.forEach(this.body.edges, function (edge, id) {
+        var toNode = _this5.body.nodes[edge.toId];
+        var fromNode = _this5.body.nodes[edge.fromId];
+
+        // Skip clustering edges here, let the Clustering module handle those
+        if (toNode !== undefined && toNode.isCluster === true || fromNode !== undefined && fromNode.isCluster === true) {
+          return;
+        }
+
+        if (toNode === undefined || fromNode === undefined) {
+          edgesToDelete.push(id);
+        }
+      });
+
+      this.remove(edgesToDelete, false);
+    }
+
+    /**
+     * add all edges from dataset that are not in the cached state
+     * @private
+     */
+
+  }, {
+    key: '_addMissingEdges',
+    value: function _addMissingEdges() {
+      var edges = this.body.edges;
+      var edgesData = this.body.data.edges;
+      var addIds = [];
+
+      edgesData.forEach(function (edgeData, edgeId) {
+        var edge = edges[edgeId];
+        if (edge === undefined) {
+          addIds.push(edgeId);
+        }
+      });
+
+      this.add(addIds, true);
+    }
+  }]);
+  return EdgesHandler;
+}();
+
+exports['default'] = EdgesHandler;
+
+/***/ }),
+/* 215 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _CubicBezierEdgeBase2 = __webpack_require__(216);
+
+var _CubicBezierEdgeBase3 = _interopRequireDefault(_CubicBezierEdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Cubic Bezier Edge. Bezier curves are used to model smooth gradual
+ * curves in paths between nodes.
+ *
+ * @extends CubicBezierEdgeBase
+ */
+var CubicBezierEdge = function (_CubicBezierEdgeBase) {
+  (0, _inherits3['default'])(CubicBezierEdge, _CubicBezierEdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function CubicBezierEdge(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, CubicBezierEdge);
+    return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdge.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdge)).call(this, options, body, labelModule));
+  }
+
+  /**
+   * Draw a line between two nodes
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   * @param {Array.<Node>} viaNodes
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(CubicBezierEdge, [{
+    key: '_line',
+    value: function _line(ctx, values, viaNodes) {
+      // get the coordinates of the support points.
+      var via1 = viaNodes[0];
+      var via2 = viaNodes[1];
+      this._bezierCurve(ctx, values, via1, via2);
+    }
+
+    /**
+     *
+     * @returns {Array.<{x: number, y: number}>}
+     * @private
+     */
+
+  }, {
+    key: '_getViaCoordinates',
+    value: function _getViaCoordinates() {
+      var dx = this.from.x - this.to.x;
+      var dy = this.from.y - this.to.y;
+
+      var x1 = void 0,
+          y1 = void 0,
+          x2 = void 0,
+          y2 = void 0;
+      var roundness = this.options.smooth.roundness;
+
+      // horizontal if x > y or if direction is forced or if direction is horizontal
+      if ((Math.abs(dx) > Math.abs(dy) || this.options.smooth.forceDirection === true || this.options.smooth.forceDirection === 'horizontal') && this.options.smooth.forceDirection !== 'vertical') {
+        y1 = this.from.y;
+        y2 = this.to.y;
+        x1 = this.from.x - roundness * dx;
+        x2 = this.to.x + roundness * dx;
+      } else {
+        y1 = this.from.y - roundness * dy;
+        y2 = this.to.y + roundness * dy;
+        x1 = this.from.x;
+        x2 = this.to.x;
+      }
+
+      return [{ x: x1, y: y1 }, { x: x2, y: y2 }];
+    }
+
+    /**
+     *
+     * @returns {Array.<{x: number, y: number}>}
+     */
+
+  }, {
+    key: 'getViaNode',
+    value: function getViaNode() {
+      return this._getViaCoordinates();
+    }
+
+    /**
+     *
+     * @param {Node} nearNode
+     * @param {CanvasRenderingContext2D} ctx
+     * @returns {{x: number, y: number, t: number}}
+     * @private
+     */
+
+  }, {
+    key: '_findBorderPosition',
+    value: function _findBorderPosition(nearNode, ctx) {
+      return this._findBorderPositionBezier(nearNode, ctx);
+    }
+
+    /**
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @param {Node} via1
+     * @param {Node} via2
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getDistanceToEdge',
+    value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) {
+      var _ref = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._getViaCoordinates(),
+          _ref2 = (0, _slicedToArray3['default'])(_ref, 2),
+          via1 = _ref2[0],
+          via2 = _ref2[1];
+
+      // x3,y3 is the point
+      return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2);
+    }
+
+    /**
+     * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way
+     * @param {number} percentage
+     * @param {{x: number, y: number}} [via1=this._getViaCoordinates()[0]]
+     * @param {{x: number, y: number}} [via2=this._getViaCoordinates()[1]]
+     * @returns {{x: number, y: number}}
+     * @private
+     */
+
+  }, {
+    key: 'getPoint',
+    value: function getPoint(percentage) {
+      var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates(),
+          _ref4 = (0, _slicedToArray3['default'])(_ref3, 2),
+          via1 = _ref4[0],
+          via2 = _ref4[1];
+
+      var t = percentage;
+      var vec = [];
+      vec[0] = Math.pow(1 - t, 3);
+      vec[1] = 3 * t * Math.pow(1 - t, 2);
+      vec[2] = 3 * Math.pow(t, 2) * (1 - t);
+      vec[3] = Math.pow(t, 3);
+      var x = vec[0] * this.fromPoint.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.toPoint.x;
+      var y = vec[0] * this.fromPoint.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.toPoint.y;
+
+      return { x: x, y: y };
+    }
+  }]);
+  return CubicBezierEdge;
+}(_CubicBezierEdgeBase3['default']);
+
+exports['default'] = CubicBezierEdge;
+
+/***/ }),
+/* 216 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _BezierEdgeBase2 = __webpack_require__(75);
+
+var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Base Class for all Cubic Bezier Edges. Bezier curves are used to model
+ * smooth gradual curves in paths between nodes.
+ *
+ * @extends BezierEdgeBase
+ */
+var CubicBezierEdgeBase = function (_BezierEdgeBase) {
+  (0, _inherits3['default'])(CubicBezierEdgeBase, _BezierEdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function CubicBezierEdgeBase(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, CubicBezierEdgeBase);
+    return (0, _possibleConstructorReturn3['default'])(this, (CubicBezierEdgeBase.__proto__ || (0, _getPrototypeOf2['default'])(CubicBezierEdgeBase)).call(this, options, body, labelModule));
+  }
+
+  /**
+   * Calculate the distance between a point (x3,y3) and a line segment from
+   * (x1,y1) to (x2,y2).
+   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment
+   * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
+   * @param {number} x1 from x
+   * @param {number} y1 from y
+   * @param {number} x2 to x
+   * @param {number} y2 to y
+   * @param {number} x3 point to check x
+   * @param {number} y3 point to check y
+   * @param {Node} via1
+   * @param {Node} via2
+   * @returns {number}
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(CubicBezierEdgeBase, [{
+    key: '_getDistanceToBezierEdge',
+    value: function _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) {
+      // x3,y3 is the point
+      var minDistance = 1e9;
+      var distance = void 0;
+      var i = void 0,
+          t = void 0,
+          x = void 0,
+          y = void 0;
+      var lastX = x1;
+      var lastY = y1;
+      var vec = [0, 0, 0, 0];
+      for (i = 1; i < 10; i++) {
+        t = 0.1 * i;
+        vec[0] = Math.pow(1 - t, 3);
+        vec[1] = 3 * t * Math.pow(1 - t, 2);
+        vec[2] = 3 * Math.pow(t, 2) * (1 - t);
+        vec[3] = Math.pow(t, 3);
+        x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;
+        y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;
+        if (i > 0) {
+          distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);
+          minDistance = distance < minDistance ? distance : minDistance;
+        }
+        lastX = x;
+        lastY = y;
+      }
+
+      return minDistance;
+    }
+  }]);
+  return CubicBezierEdgeBase;
+}(_BezierEdgeBase3['default']);
+
+exports['default'] = CubicBezierEdgeBase;
+
+/***/ }),
+/* 217 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _BezierEdgeBase2 = __webpack_require__(75);
+
+var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * A Dynamic Bezier Edge. Bezier curves are used to model smooth gradual
+ * curves in paths between nodes. The Dynamic piece refers to how the curve
+ * reacts to physics changes.
+ *
+ * @extends BezierEdgeBase
+ */
+var BezierEdgeDynamic = function (_BezierEdgeBase) {
+  (0, _inherits3["default"])(BezierEdgeDynamic, _BezierEdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function BezierEdgeDynamic(options, body, labelModule) {
+    (0, _classCallCheck3["default"])(this, BezierEdgeDynamic);
+
+    // --> this calls the setOptions below
+    var _this = (0, _possibleConstructorReturn3["default"])(this, (BezierEdgeDynamic.__proto__ || (0, _getPrototypeOf2["default"])(BezierEdgeDynamic)).call(this, options, body, labelModule));
+    //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.
+
+
+    _this._boundFunction = function () {
+      _this.positionBezierNode();
+    };
+    _this.body.emitter.on("_repositionBezierNodes", _this._boundFunction);
+    return _this;
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(BezierEdgeDynamic, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      // check if the physics has changed.
+      var physicsChange = false;
+      if (this.options.physics !== options.physics) {
+        physicsChange = true;
+      }
+
+      // set the options and the to and from nodes
+      this.options = options;
+      this.id = this.options.id;
+      this.from = this.body.nodes[this.options.from];
+      this.to = this.body.nodes[this.options.to];
+
+      // setup the support node and connect
+      this.setupSupportNode();
+      this.connect();
+
+      // when we change the physics state of the edge, we reposition the support node.
+      if (physicsChange === true) {
+        this.via.setOptions({ physics: this.options.physics });
+        this.positionBezierNode();
+      }
+    }
+
+    /**
+     * Connects an edge to node(s)
+     */
+
+  }, {
+    key: "connect",
+    value: function connect() {
+      this.from = this.body.nodes[this.options.from];
+      this.to = this.body.nodes[this.options.to];
+      if (this.from === undefined || this.to === undefined || this.options.physics === false) {
+        this.via.setOptions({ physics: false });
+      } else {
+        // fix weird behaviour where a self referencing node has physics enabled
+        if (this.from.id === this.to.id) {
+          this.via.setOptions({ physics: false });
+        } else {
+          this.via.setOptions({ physics: true });
+        }
+      }
+    }
+
+    /**
+     * remove the support nodes
+     * @returns {boolean}
+     */
+
+  }, {
+    key: "cleanup",
+    value: function cleanup() {
+      this.body.emitter.off("_repositionBezierNodes", this._boundFunction);
+      if (this.via !== undefined) {
+        delete this.body.nodes[this.via.id];
+        this.via = undefined;
+        return true;
+      }
+      return false;
+    }
+
+    /**
+     * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but
+     * are used for the force calculation.
+     *
+     * The changed data is not called, if needed, it is returned by the main edge constructor.
+     * @private
+     */
+
+  }, {
+    key: "setupSupportNode",
+    value: function setupSupportNode() {
+      if (this.via === undefined) {
+        var nodeId = "edgeId:" + this.id;
+        var node = this.body.functions.createNode({
+          id: nodeId,
+          shape: 'circle',
+          physics: true,
+          hidden: true
+        });
+        this.body.nodes[nodeId] = node;
+        this.via = node;
+        this.via.parentEdgeId = this.id;
+        this.positionBezierNode();
+      }
+    }
+
+    /**
+     * Positions bezier node
+     */
+
+  }, {
+    key: "positionBezierNode",
+    value: function positionBezierNode() {
+      if (this.via !== undefined && this.from !== undefined && this.to !== undefined) {
+        this.via.x = 0.5 * (this.from.x + this.to.x);
+        this.via.y = 0.5 * (this.from.y + this.to.y);
+      } else if (this.via !== undefined) {
+        this.via.x = 0;
+        this.via.y = 0;
+      }
+    }
+
+    /**
+     * Draw a line between two nodes
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+     * @param {Node} viaNode
+     * @private
+     */
+
+  }, {
+    key: "_line",
+    value: function _line(ctx, values, viaNode) {
+      this._bezierCurve(ctx, values, viaNode);
+    }
+
+    /**
+     *
+     * @returns {Node|undefined|*|{index, line, column}}
+     */
+
+  }, {
+    key: "getViaNode",
+    value: function getViaNode() {
+      return this.via;
+    }
+
+    /**
+     * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way
+     *
+     * @param {number} percentage
+     * @param {Node} viaNode
+     * @returns {{x: number, y: number}}
+     * @private
+     */
+
+  }, {
+    key: "getPoint",
+    value: function getPoint(percentage) {
+      var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.via;
+
+      var t = percentage;
+      var x = void 0,
+          y = void 0;
+      if (this.from === this.to) {
+        var _getCircleData = this._getCircleData(this.from),
+            _getCircleData2 = (0, _slicedToArray3["default"])(_getCircleData, 3),
+            cx = _getCircleData2[0],
+            cy = _getCircleData2[1],
+            cr = _getCircleData2[2];
+
+        var a = 2 * Math.PI * (1 - t);
+        x = cx + cr * Math.sin(a);
+        y = cy + cr - cr * (1 - Math.cos(a));
+      } else {
+        x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;
+        y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;
+      }
+
+      return { x: x, y: y };
+    }
+
+    /**
+     *
+     * @param {Node} nearNode
+     * @param {CanvasRenderingContext2D} ctx
+     * @returns {*}
+     * @private
+     */
+
+  }, {
+    key: "_findBorderPosition",
+    value: function _findBorderPosition(nearNode, ctx) {
+      return this._findBorderPositionBezier(nearNode, ctx, this.via);
+    }
+
+    /**
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: "_getDistanceToEdge",
+    value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) {
+      // x3,y3 is the point
+      return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);
+    }
+  }]);
+  return BezierEdgeDynamic;
+}(_BezierEdgeBase3["default"]);
+
+exports["default"] = BezierEdgeDynamic;
+
+/***/ }),
+/* 218 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _BezierEdgeBase2 = __webpack_require__(75);
+
+var _BezierEdgeBase3 = _interopRequireDefault(_BezierEdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Static Bezier Edge. Bezier curves are used to model smooth gradual
+ * curves in paths between nodes.
+ *
+ * @extends BezierEdgeBase
+ */
+var BezierEdgeStatic = function (_BezierEdgeBase) {
+  (0, _inherits3['default'])(BezierEdgeStatic, _BezierEdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function BezierEdgeStatic(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, BezierEdgeStatic);
+    return (0, _possibleConstructorReturn3['default'])(this, (BezierEdgeStatic.__proto__ || (0, _getPrototypeOf2['default'])(BezierEdgeStatic)).call(this, options, body, labelModule));
+  }
+
+  /**
+   * Draw a line between two nodes
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   * @param {Node} viaNode
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(BezierEdgeStatic, [{
+    key: '_line',
+    value: function _line(ctx, values, viaNode) {
+      this._bezierCurve(ctx, values, viaNode);
+    }
+
+    /**
+     *
+     * @returns {Array.<{x: number, y: number}>}
+     */
+
+  }, {
+    key: 'getViaNode',
+    value: function getViaNode() {
+      return this._getViaCoordinates();
+    }
+
+    /**
+     * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.
+     * @returns {{x: undefined, y: undefined}}
+     * @private
+     */
+
+  }, {
+    key: '_getViaCoordinates',
+    value: function _getViaCoordinates() {
+      // Assumption: x/y coordinates in from/to always defined
+      var xVia = undefined;
+      var yVia = undefined;
+      var factor = this.options.smooth.roundness;
+      var type = this.options.smooth.type;
+      var dx = Math.abs(this.from.x - this.to.x);
+      var dy = Math.abs(this.from.y - this.to.y);
+      if (type === 'discrete' || type === 'diagonalCross') {
+        var stepX = void 0;
+        var stepY = void 0;
+
+        if (dx <= dy) {
+          stepX = stepY = factor * dy;
+        } else {
+          stepX = stepY = factor * dx;
+        }
+
+        if (this.from.x > this.to.x) stepX = -stepX;
+        if (this.from.y >= this.to.y) stepY = -stepY;
+
+        xVia = this.from.x + stepX;
+        yVia = this.from.y + stepY;
+
+        if (type === "discrete") {
+          if (dx <= dy) {
+            xVia = dx < factor * dy ? this.from.x : xVia;
+          } else {
+            yVia = dy < factor * dx ? this.from.y : yVia;
+          }
+        }
+      } else if (type === "straightCross") {
+        var _stepX = (1 - factor) * dx;
+        var _stepY = (1 - factor) * dy;
+
+        if (dx <= dy) {
+          // up - down
+          _stepX = 0;
+          if (this.from.y < this.to.y) _stepY = -_stepY;
+        } else {
+          // left - right
+          if (this.from.x < this.to.x) _stepX = -_stepX;
+          _stepY = 0;
+        }
+        xVia = this.to.x + _stepX;
+        yVia = this.to.y + _stepY;
+      } else if (type === 'horizontal') {
+        var _stepX2 = (1 - factor) * dx;
+        if (this.from.x < this.to.x) _stepX2 = -_stepX2;
+        xVia = this.to.x + _stepX2;
+        yVia = this.from.y;
+      } else if (type === 'vertical') {
+        var _stepY2 = (1 - factor) * dy;
+        if (this.from.y < this.to.y) _stepY2 = -_stepY2;
+        xVia = this.from.x;
+        yVia = this.to.y + _stepY2;
+      } else if (type === 'curvedCW') {
+        dx = this.to.x - this.from.x;
+        dy = this.from.y - this.to.y;
+        var radius = Math.sqrt(dx * dx + dy * dy);
+        var pi = Math.PI;
+
+        var originalAngle = Math.atan2(dy, dx);
+        var myAngle = (originalAngle + (factor * 0.5 + 0.5) * pi) % (2 * pi);
+
+        xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle);
+        yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle);
+      } else if (type === 'curvedCCW') {
+        dx = this.to.x - this.from.x;
+        dy = this.from.y - this.to.y;
+        var _radius = Math.sqrt(dx * dx + dy * dy);
+        var _pi = Math.PI;
+
+        var _originalAngle = Math.atan2(dy, dx);
+        var _myAngle = (_originalAngle + (-factor * 0.5 + 0.5) * _pi) % (2 * _pi);
+
+        xVia = this.from.x + (factor * 0.5 + 0.5) * _radius * Math.sin(_myAngle);
+        yVia = this.from.y + (factor * 0.5 + 0.5) * _radius * Math.cos(_myAngle);
+      } else {
+        // continuous
+        var _stepX3 = void 0;
+        var _stepY3 = void 0;
+
+        if (dx <= dy) {
+          _stepX3 = _stepY3 = factor * dy;
+        } else {
+          _stepX3 = _stepY3 = factor * dx;
+        }
+
+        if (this.from.x > this.to.x) _stepX3 = -_stepX3;
+        if (this.from.y >= this.to.y) _stepY3 = -_stepY3;
+
+        xVia = this.from.x + _stepX3;
+        yVia = this.from.y + _stepY3;
+
+        if (dx <= dy) {
+          if (this.from.x <= this.to.x) {
+            xVia = this.to.x < xVia ? this.to.x : xVia;
+          } else {
+            xVia = this.to.x > xVia ? this.to.x : xVia;
+          }
+        } else {
+          if (this.from.y >= this.to.y) {
+            yVia = this.to.y > yVia ? this.to.y : yVia;
+          } else {
+            yVia = this.to.y < yVia ? this.to.y : yVia;
+          }
+        }
+      }
+      return { x: xVia, y: yVia };
+    }
+
+    /**
+     *
+     * @param {Node} nearNode
+     * @param {CanvasRenderingContext2D} ctx
+     * @param {Object} options
+     * @returns {*}
+     * @private
+     */
+
+  }, {
+    key: '_findBorderPosition',
+    value: function _findBorderPosition(nearNode, ctx) {
+      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+
+      return this._findBorderPositionBezier(nearNode, ctx, options.via);
+    }
+
+    /**
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @param {Node} viaNode
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getDistanceToEdge',
+    value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) {
+      var viaNode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : this._getViaCoordinates();
+      // x3,y3 is the point
+      return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);
+    }
+
+    /**
+     * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way
+     * @param {number} percentage
+     * @param {Node} viaNode
+     * @returns {{x: number, y: number}}
+     * @private
+     */
+
+  }, {
+    key: 'getPoint',
+    value: function getPoint(percentage) {
+      var viaNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._getViaCoordinates();
+
+      var t = percentage;
+      var x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;
+      var y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;
+
+      return { x: x, y: y };
+    }
+  }]);
+  return BezierEdgeStatic;
+}(_BezierEdgeBase3['default']);
+
+exports['default'] = BezierEdgeStatic;
+
+/***/ }),
+/* 219 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _EdgeBase2 = __webpack_require__(118);
+
+var _EdgeBase3 = _interopRequireDefault(_EdgeBase2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * A Straight Edge.
+ *
+ * @extends EdgeBase
+ */
+var StraightEdge = function (_EdgeBase) {
+  (0, _inherits3['default'])(StraightEdge, _EdgeBase);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Label} labelModule
+   */
+  function StraightEdge(options, body, labelModule) {
+    (0, _classCallCheck3['default'])(this, StraightEdge);
+    return (0, _possibleConstructorReturn3['default'])(this, (StraightEdge.__proto__ || (0, _getPrototypeOf2['default'])(StraightEdge)).call(this, options, body, labelModule));
+  }
+
+  /**
+   * Draw a line between two nodes
+   * @param {CanvasRenderingContext2D} ctx
+   * @param {{toArrow: boolean, toArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), toArrowType: *, middleArrow: boolean, middleArrowScale: (number|allOptions.edges.arrows.middle.scaleFactor|{number}|Array), middleArrowType: (allOptions.edges.arrows.middle.type|{string}|string|*), fromArrow: boolean, fromArrowScale: (allOptions.edges.arrows.to.scaleFactor|{number}|allOptions.edges.arrows.middle.scaleFactor|allOptions.edges.arrows.from.scaleFactor|Array|number), fromArrowType: *, arrowStrikethrough: (*|boolean|allOptions.edges.arrowStrikethrough|{boolean}), color: undefined, inheritsColor: (string|string|string|allOptions.edges.color.inherit|{string, boolean}|Array|*), opacity: *, hidden: *, length: *, shadow: *, shadowColor: *, shadowSize: *, shadowX: *, shadowY: *, dashes: (*|boolean|Array|allOptions.edges.dashes|{boolean, array}), width: *}} values
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(StraightEdge, [{
+    key: '_line',
+    value: function _line(ctx, values) {
+      // draw a straight line
+      ctx.beginPath();
+      ctx.moveTo(this.fromPoint.x, this.fromPoint.y);
+      ctx.lineTo(this.toPoint.x, this.toPoint.y);
+      // draw shadow if enabled
+      this.enableShadow(ctx, values);
+      ctx.stroke();
+      this.disableShadow(ctx, values);
+    }
+
+    /**
+     *
+     * @returns {undefined}
+     */
+
+  }, {
+    key: 'getViaNode',
+    value: function getViaNode() {
+      return undefined;
+    }
+
+    /**
+     * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way
+     *
+     * @param {number} percentage
+     * @returns {{x: number, y: number}}
+     * @private
+     */
+
+  }, {
+    key: 'getPoint',
+    value: function getPoint(percentage) {
+      return {
+        x: (1 - percentage) * this.fromPoint.x + percentage * this.toPoint.x,
+        y: (1 - percentage) * this.fromPoint.y + percentage * this.toPoint.y
+      };
+    }
+
+    /**
+     *
+     * @param {Node} nearNode
+     * @param {CanvasRenderingContext2D} ctx
+     * @returns {{x: number, y: number}}
+     * @private
+     */
+
+  }, {
+    key: '_findBorderPosition',
+    value: function _findBorderPosition(nearNode, ctx) {
+      var node1 = this.to;
+      var node2 = this.from;
+      if (nearNode.id === this.from.id) {
+        node1 = this.from;
+        node2 = this.to;
+      }
+
+      var angle = Math.atan2(node1.y - node2.y, node1.x - node2.x);
+      var dx = node1.x - node2.x;
+      var dy = node1.y - node2.y;
+      var edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);
+      var toBorderDist = nearNode.distanceToBorder(ctx, angle);
+      var toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength;
+
+      var borderPos = {};
+      borderPos.x = (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x;
+      borderPos.y = (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y;
+
+      return borderPos;
+    }
+
+    /**
+     *
+     * @param {number} x1
+     * @param {number} y1
+     * @param {number} x2
+     * @param {number} y2
+     * @param {number} x3
+     * @param {number} y3
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getDistanceToEdge',
+    value: function _getDistanceToEdge(x1, y1, x2, y2, x3, y3) {
+      // x3,y3 is the point
+      return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);
+    }
+  }]);
+  return StraightEdge;
+}(_EdgeBase3['default']);
+
+exports['default'] = StraightEdge;
+
+/***/ }),
+/* 220 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var BarnesHutSolver = __webpack_require__(120)['default'];
+var Repulsion = __webpack_require__(221)['default'];
+var HierarchicalRepulsion = __webpack_require__(222)['default'];
+var SpringSolver = __webpack_require__(223)['default'];
+var HierarchicalSpringSolver = __webpack_require__(224)['default'];
+var CentralGravitySolver = __webpack_require__(121)['default'];
+var ForceAtlas2BasedRepulsionSolver = __webpack_require__(225)['default'];
+var ForceAtlas2BasedCentralGravitySolver = __webpack_require__(226)['default'];
+var util = __webpack_require__(2);
+var EndPoints = __webpack_require__(119)['default']; // for debugging with _drawForces()
+
+
+/**
+ * The physics engine
+ */
+
+var PhysicsEngine = function () {
+  /**
+   * @param {Object} body
+   */
+  function PhysicsEngine(body) {
+    (0, _classCallCheck3['default'])(this, PhysicsEngine);
+
+    this.body = body;
+    this.physicsBody = { physicsNodeIndices: [], physicsEdgeIndices: [], forces: {}, velocities: {} };
+
+    this.physicsEnabled = true;
+    this.simulationInterval = 1000 / 60;
+    this.requiresTimeout = true;
+    this.previousStates = {};
+    this.referenceState = {};
+    this.freezeCache = {};
+    this.renderTimer = undefined;
+
+    // parameters for the adaptive timestep
+    this.adaptiveTimestep = false;
+    this.adaptiveTimestepEnabled = false;
+    this.adaptiveCounter = 0;
+    this.adaptiveInterval = 3;
+
+    this.stabilized = false;
+    this.startedStabilization = false;
+    this.stabilizationIterations = 0;
+    this.ready = false; // will be set to true if the stabilize
+
+    // default options
+    this.options = {};
+    this.defaultOptions = {
+      enabled: true,
+      barnesHut: {
+        theta: 0.5,
+        gravitationalConstant: -2000,
+        centralGravity: 0.3,
+        springLength: 95,
+        springConstant: 0.04,
+        damping: 0.09,
+        avoidOverlap: 0
+      },
+      forceAtlas2Based: {
+        theta: 0.5,
+        gravitationalConstant: -50,
+        centralGravity: 0.01,
+        springConstant: 0.08,
+        springLength: 100,
+        damping: 0.4,
+        avoidOverlap: 0
+      },
+      repulsion: {
+        centralGravity: 0.2,
+        springLength: 200,
+        springConstant: 0.05,
+        nodeDistance: 100,
+        damping: 0.09,
+        avoidOverlap: 0
+      },
+      hierarchicalRepulsion: {
+        centralGravity: 0.0,
+        springLength: 100,
+        springConstant: 0.01,
+        nodeDistance: 120,
+        damping: 0.09
+      },
+      maxVelocity: 50,
+      minVelocity: 0.75, // px/s
+      solver: 'barnesHut',
+      stabilization: {
+        enabled: true,
+        iterations: 1000, // maximum number of iteration to stabilize
+        updateInterval: 50,
+        onlyDynamicEdges: false,
+        fit: true
+      },
+      timestep: 0.5,
+      adaptiveTimestep: true
+    };
+    util.extend(this.options, this.defaultOptions);
+    this.timestep = 0.5;
+    this.layoutFailed = false;
+
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(PhysicsEngine, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this = this;
+
+      this.body.emitter.on('initPhysics', function () {
+        _this.initPhysics();
+      });
+      this.body.emitter.on('_layoutFailed', function () {
+        _this.layoutFailed = true;
+      });
+      this.body.emitter.on('resetPhysics', function () {
+        _this.stopSimulation();_this.ready = false;
+      });
+      this.body.emitter.on('disablePhysics', function () {
+        _this.physicsEnabled = false;_this.stopSimulation();
+      });
+      this.body.emitter.on('restorePhysics', function () {
+        _this.setOptions(_this.options);
+        if (_this.ready === true) {
+          _this.startSimulation();
+        }
+      });
+      this.body.emitter.on('startSimulation', function () {
+        if (_this.ready === true) {
+          _this.startSimulation();
+        }
+      });
+      this.body.emitter.on('stopSimulation', function () {
+        _this.stopSimulation();
+      });
+      this.body.emitter.on('destroy', function () {
+        _this.stopSimulation(false);
+        _this.body.emitter.off();
+      });
+      this.body.emitter.on("_dataChanged", function () {
+        // Nodes and/or edges have been added or removed, update shortcut lists.
+        _this.updatePhysicsData();
+      });
+
+      // debug: show forces
+      // this.body.emitter.on("afterDrawing", (ctx) => {this._drawForces(ctx);});
+    }
+
+    /**
+     * set the physics options
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        if (options === false) {
+          this.options.enabled = false;
+          this.physicsEnabled = false;
+          this.stopSimulation();
+        } else if (options === true) {
+          this.options.enabled = true;
+          this.physicsEnabled = true;
+          this.startSimulation();
+        } else {
+          this.physicsEnabled = true;
+          util.selectiveNotDeepExtend(['stabilization'], this.options, options);
+          util.mergeOptions(this.options, options, 'stabilization');
+
+          if (options.enabled === undefined) {
+            this.options.enabled = true;
+          }
+
+          if (this.options.enabled === false) {
+            this.physicsEnabled = false;
+            this.stopSimulation();
+          }
+
+          // set the timestep
+          this.timestep = this.options.timestep;
+        }
+      }
+      this.init();
+    }
+
+    /**
+     * configure the engine.
+     */
+
+  }, {
+    key: 'init',
+    value: function init() {
+      var options;
+      if (this.options.solver === 'forceAtlas2Based') {
+        options = this.options.forceAtlas2Based;
+        this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(this.body, this.physicsBody, options);
+        this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);
+        this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(this.body, this.physicsBody, options);
+      } else if (this.options.solver === 'repulsion') {
+        options = this.options.repulsion;
+        this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);
+        this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);
+        this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);
+      } else if (this.options.solver === 'hierarchicalRepulsion') {
+        options = this.options.hierarchicalRepulsion;
+        this.nodesSolver = new HierarchicalRepulsion(this.body, this.physicsBody, options);
+        this.edgesSolver = new HierarchicalSpringSolver(this.body, this.physicsBody, options);
+        this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);
+      } else {
+        // barnesHut
+        options = this.options.barnesHut;
+        this.nodesSolver = new BarnesHutSolver(this.body, this.physicsBody, options);
+        this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);
+        this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);
+      }
+
+      this.modelOptions = options;
+    }
+
+    /**
+     * initialize the engine
+     */
+
+  }, {
+    key: 'initPhysics',
+    value: function initPhysics() {
+      if (this.physicsEnabled === true && this.options.enabled === true) {
+        if (this.options.stabilization.enabled === true) {
+          this.stabilize();
+        } else {
+          this.stabilized = false;
+          this.ready = true;
+          this.body.emitter.emit('fit', {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom
+          this.startSimulation();
+        }
+      } else {
+        this.ready = true;
+        this.body.emitter.emit('fit');
+      }
+    }
+
+    /**
+     * Start the simulation
+     */
+
+  }, {
+    key: 'startSimulation',
+    value: function startSimulation() {
+      if (this.physicsEnabled === true && this.options.enabled === true) {
+        this.stabilized = false;
+
+        // when visible, adaptivity is disabled.
+        this.adaptiveTimestep = false;
+
+        // this sets the width of all nodes initially which could be required for the avoidOverlap
+        this.body.emitter.emit("_resizeNodes");
+        if (this.viewFunction === undefined) {
+          this.viewFunction = this.simulationStep.bind(this);
+          this.body.emitter.on('initRedraw', this.viewFunction);
+          this.body.emitter.emit('_startRendering');
+        }
+      } else {
+        this.body.emitter.emit('_redraw');
+      }
+    }
+
+    /**
+     * Stop the simulation, force stabilization.
+     * @param {boolean} [emit=true]
+     */
+
+  }, {
+    key: 'stopSimulation',
+    value: function stopSimulation() {
+      var emit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
+
+      this.stabilized = true;
+      if (emit === true) {
+        this._emitStabilized();
+      }
+      if (this.viewFunction !== undefined) {
+        this.body.emitter.off('initRedraw', this.viewFunction);
+        this.viewFunction = undefined;
+        if (emit === true) {
+          this.body.emitter.emit('_stopRendering');
+        }
+      }
+    }
+
+    /**
+     * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.
+     *
+     */
+
+  }, {
+    key: 'simulationStep',
+    value: function simulationStep() {
+      // check if the physics have settled
+      var startTime = Date.now();
+      this.physicsTick();
+      var physicsTime = Date.now() - startTime;
+
+      // run double speed if it is a little graph
+      if ((physicsTime < 0.4 * this.simulationInterval || this.runDoubleSpeed === true) && this.stabilized === false) {
+        this.physicsTick();
+
+        // this makes sure there is no jitter. The decision is taken once to run it at double speed.
+        this.runDoubleSpeed = true;
+      }
+
+      if (this.stabilized === true) {
+        this.stopSimulation();
+      }
+    }
+
+    /**
+     * trigger the stabilized event.
+     *
+     * @param {number} [amountOfIterations=this.stabilizationIterations]
+     * @private
+     */
+
+  }, {
+    key: '_emitStabilized',
+    value: function _emitStabilized() {
+      var _this2 = this;
+
+      var amountOfIterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.stabilizationIterations;
+
+      if (this.stabilizationIterations > 1 || this.startedStabilization === true) {
+        setTimeout(function () {
+          _this2.body.emitter.emit('stabilized', { iterations: amountOfIterations });
+          _this2.startedStabilization = false;
+          _this2.stabilizationIterations = 0;
+        }, 0);
+      }
+    }
+
+    /**
+     * Calculate the forces for one physics iteration and move the nodes.
+     * @private
+     */
+
+  }, {
+    key: 'physicsStep',
+    value: function physicsStep() {
+      this.gravitySolver.solve();
+      this.nodesSolver.solve();
+      this.edgesSolver.solve();
+      this.moveNodes();
+    }
+
+    /**
+     * Make dynamic adjustments to the timestep, based on current state.
+     *
+     * Helper function for physicsTick().
+     * @private
+     */
+
+  }, {
+    key: 'adjustTimeStep',
+    value: function adjustTimeStep() {
+      var factor = 1.2; // Factor for increasing the timestep on success.
+
+      // we compare the two steps. if it is acceptable we double the step.
+      if (this._evaluateStepQuality() === true) {
+        this.timestep = factor * this.timestep;
+      } else {
+        // if not, we decrease the step to a minimum of the options timestep.
+        // if the decreased timestep is smaller than the options step, we do not reset the counter
+        // we assume that the options timestep is stable enough.
+        if (this.timestep / factor < this.options.timestep) {
+          this.timestep = this.options.timestep;
+        } else {
+          // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure
+          // that large instabilities do not form.
+          this.adaptiveCounter = -1; // check again next iteration
+          this.timestep = Math.max(this.options.timestep, this.timestep / factor);
+        }
+      }
+    }
+
+    /**
+     * A single simulation step (or 'tick') in the physics simulation
+     *
+     * @private
+     */
+
+  }, {
+    key: 'physicsTick',
+    value: function physicsTick() {
+      this._startStabilizing(); // this ensures that there is no start event when the network is already stable.
+      if (this.stabilized === true) return;
+
+      // adaptivity means the timestep adapts to the situation, only applicable for stabilization
+      if (this.adaptiveTimestep === true && this.adaptiveTimestepEnabled === true) {
+        // timestep remains stable for "interval" iterations.
+        var doAdaptive = this.adaptiveCounter % this.adaptiveInterval === 0;
+
+        if (doAdaptive) {
+          // first the big step and revert.
+          this.timestep = 2 * this.timestep;
+          this.physicsStep();
+          this.revert(); // saves the reference state
+
+          // now the normal step. Since this is the last step, it is the more stable one and we will take this.
+          this.timestep = 0.5 * this.timestep;
+
+          // since it's half the step, we do it twice.
+          this.physicsStep();
+          this.physicsStep();
+
+          this.adjustTimeStep();
+        } else {
+          this.physicsStep(); // normal step, keeping timestep constant
+        }
+
+        this.adaptiveCounter += 1;
+      } else {
+        // case for the static timestep, we reset it to the one in options and take a normal step.
+        this.timestep = this.options.timestep;
+        this.physicsStep();
+      }
+
+      if (this.stabilized === true) this.revert();
+      this.stabilizationIterations++;
+    }
+
+    /**
+     * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.
+     *
+     * @private
+     */
+
+  }, {
+    key: 'updatePhysicsData',
+    value: function updatePhysicsData() {
+      this.physicsBody.forces = {};
+      this.physicsBody.physicsNodeIndices = [];
+      this.physicsBody.physicsEdgeIndices = [];
+      var nodes = this.body.nodes;
+      var edges = this.body.edges;
+
+      // get node indices for physics
+      for (var nodeId in nodes) {
+        if (nodes.hasOwnProperty(nodeId)) {
+          if (nodes[nodeId].options.physics === true) {
+            this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);
+          }
+        }
+      }
+
+      // get edge indices for physics
+      for (var edgeId in edges) {
+        if (edges.hasOwnProperty(edgeId)) {
+          if (edges[edgeId].options.physics === true) {
+            this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);
+          }
+        }
+      }
+
+      // get the velocity and the forces vector
+      for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {
+        var _nodeId = this.physicsBody.physicsNodeIndices[i];
+        this.physicsBody.forces[_nodeId] = { x: 0, y: 0 };
+
+        // forces can be reset because they are recalculated. Velocities have to persist.
+        if (this.physicsBody.velocities[_nodeId] === undefined) {
+          this.physicsBody.velocities[_nodeId] = { x: 0, y: 0 };
+        }
+      }
+
+      // clean deleted nodes from the velocity vector
+      for (var _nodeId2 in this.physicsBody.velocities) {
+        if (nodes[_nodeId2] === undefined) {
+          delete this.physicsBody.velocities[_nodeId2];
+        }
+      }
+    }
+
+    /**
+     * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.
+     */
+
+  }, {
+    key: 'revert',
+    value: function revert() {
+      var nodeIds = (0, _keys2['default'])(this.previousStates);
+      var nodes = this.body.nodes;
+      var velocities = this.physicsBody.velocities;
+      this.referenceState = {};
+
+      for (var i = 0; i < nodeIds.length; i++) {
+        var nodeId = nodeIds[i];
+        if (nodes[nodeId] !== undefined) {
+          if (nodes[nodeId].options.physics === true) {
+            this.referenceState[nodeId] = {
+              positions: { x: nodes[nodeId].x, y: nodes[nodeId].y }
+            };
+            velocities[nodeId].x = this.previousStates[nodeId].vx;
+            velocities[nodeId].y = this.previousStates[nodeId].vy;
+            nodes[nodeId].x = this.previousStates[nodeId].x;
+            nodes[nodeId].y = this.previousStates[nodeId].y;
+          }
+        } else {
+          delete this.previousStates[nodeId];
+        }
+      }
+    }
+
+    /**
+     * This compares the reference state to the current state
+     *
+     * @returns {boolean}
+     * @private
+     */
+
+  }, {
+    key: '_evaluateStepQuality',
+    value: function _evaluateStepQuality() {
+      var dx = void 0,
+          dy = void 0,
+          dpos = void 0;
+      var nodes = this.body.nodes;
+      var reference = this.referenceState;
+      var posThreshold = 0.3;
+
+      for (var nodeId in this.referenceState) {
+        if (this.referenceState.hasOwnProperty(nodeId) && nodes[nodeId] !== undefined) {
+          dx = nodes[nodeId].x - reference[nodeId].positions.x;
+          dy = nodes[nodeId].y - reference[nodeId].positions.y;
+
+          dpos = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
+
+          if (dpos > posThreshold) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+
+    /**
+     * move the nodes one timestep and check if they are stabilized
+     */
+
+  }, {
+    key: 'moveNodes',
+    value: function moveNodes() {
+      var nodeIndices = this.physicsBody.physicsNodeIndices;
+      var maxNodeVelocity = 0;
+      var averageNodeVelocity = 0;
+
+      // the velocity threshold (energy in the system) for the adaptivity toggle
+      var velocityAdaptiveThreshold = 5;
+
+      for (var i = 0; i < nodeIndices.length; i++) {
+        var nodeId = nodeIndices[i];
+        var nodeVelocity = this._performStep(nodeId);
+        // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized
+        maxNodeVelocity = Math.max(maxNodeVelocity, nodeVelocity);
+        averageNodeVelocity += nodeVelocity;
+      }
+
+      // evaluating the stabilized and adaptiveTimestepEnabled conditions
+      this.adaptiveTimestepEnabled = averageNodeVelocity / nodeIndices.length < velocityAdaptiveThreshold;
+      this.stabilized = maxNodeVelocity < this.options.minVelocity;
+    }
+
+    /**
+     * Calculate new velocity for a coordinate direction
+     *
+     * @param {number} v  velocity for current coordinate
+     * @param {number} f  regular force for current coordinate
+     * @param {number} m  mass of current node
+     * @returns {number} new velocity for current coordinate
+     * @private
+     */
+
+  }, {
+    key: 'calculateComponentVelocity',
+    value: function calculateComponentVelocity(v, f, m) {
+      var df = this.modelOptions.damping * v; // damping force
+      var a = (f - df) / m; // acceleration
+
+      v += a * this.timestep;
+
+      // Put a limit on the velocities if it is really high
+      var maxV = this.options.maxVelocity || 1e9;
+      if (Math.abs(v) > maxV) {
+        v = v > 0 ? maxV : -maxV;
+      }
+
+      return v;
+    }
+
+    /**
+     * Perform the actual step
+     *
+     * @param {Node.id} nodeId
+     * @returns {number} the new velocity of given node
+     * @private
+     */
+
+  }, {
+    key: '_performStep',
+    value: function _performStep(nodeId) {
+      var node = this.body.nodes[nodeId];
+      var force = this.physicsBody.forces[nodeId];
+      var velocity = this.physicsBody.velocities[nodeId];
+
+      // store the state so we can revert
+      this.previousStates[nodeId] = { x: node.x, y: node.y, vx: velocity.x, vy: velocity.y };
+
+      if (node.options.fixed.x === false) {
+        velocity.x = this.calculateComponentVelocity(velocity.x, force.x, node.options.mass);
+        node.x += velocity.x * this.timestep;
+      } else {
+        force.x = 0;
+        velocity.x = 0;
+      }
+
+      if (node.options.fixed.y === false) {
+        velocity.y = this.calculateComponentVelocity(velocity.y, force.y, node.options.mass);
+        node.y += velocity.y * this.timestep;
+      } else {
+        force.y = 0;
+        velocity.y = 0;
+      }
+
+      var totalVelocity = Math.sqrt(Math.pow(velocity.x, 2) + Math.pow(velocity.y, 2));
+      return totalVelocity;
+    }
+
+    /**
+     * When initializing and stabilizing, we can freeze nodes with a predefined position.
+     * This greatly speeds up stabilization because only the supportnodes for the smoothCurves have to settle.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_freezeNodes',
+    value: function _freezeNodes() {
+      var nodes = this.body.nodes;
+      for (var id in nodes) {
+        if (nodes.hasOwnProperty(id)) {
+          if (nodes[id].x && nodes[id].y) {
+            var fixed = nodes[id].options.fixed;
+            this.freezeCache[id] = { x: fixed.x, y: fixed.y };
+            fixed.x = true;
+            fixed.y = true;
+          }
+        }
+      }
+    }
+
+    /**
+     * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_restoreFrozenNodes',
+    value: function _restoreFrozenNodes() {
+      var nodes = this.body.nodes;
+      for (var id in nodes) {
+        if (nodes.hasOwnProperty(id)) {
+          if (this.freezeCache[id] !== undefined) {
+            nodes[id].options.fixed.x = this.freezeCache[id].x;
+            nodes[id].options.fixed.y = this.freezeCache[id].y;
+          }
+        }
+      }
+      this.freezeCache = {};
+    }
+
+    /**
+     * Find a stable position for all nodes
+     *
+     * @param {number} [iterations=this.options.stabilization.iterations]
+     */
+
+  }, {
+    key: 'stabilize',
+    value: function stabilize() {
+      var _this3 = this;
+
+      var iterations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.stabilization.iterations;
+
+      if (typeof iterations !== 'number') {
+        iterations = this.options.stabilization.iterations;
+        console.log('The stabilize method needs a numeric amount of iterations. Switching to default: ', iterations);
+      }
+
+      if (this.physicsBody.physicsNodeIndices.length === 0) {
+        this.ready = true;
+        return;
+      }
+
+      // enable adaptive timesteps
+      this.adaptiveTimestep = true && this.options.adaptiveTimestep;
+
+      // this sets the width of all nodes initially which could be required for the avoidOverlap
+      this.body.emitter.emit("_resizeNodes");
+
+      this.stopSimulation(); // stop the render loop
+      this.stabilized = false;
+
+      // block redraw requests
+      this.body.emitter.emit('_blockRedraw');
+      this.targetIterations = iterations;
+
+      // start the stabilization
+      if (this.options.stabilization.onlyDynamicEdges === true) {
+        this._freezeNodes();
+      }
+      this.stabilizationIterations = 0;
+
+      setTimeout(function () {
+        return _this3._stabilizationBatch();
+      }, 0);
+    }
+
+    /**
+     * If not already stabilizing, start it and emit a start event.
+     *
+     * @returns {boolean} true if stabilization started with this call
+     * @private
+     */
+
+  }, {
+    key: '_startStabilizing',
+    value: function _startStabilizing() {
+      if (this.startedStabilization === true) return false;
+
+      this.body.emitter.emit('startStabilizing');
+      this.startedStabilization = true;
+      return true;
+    }
+
+    /**
+     * One batch of stabilization
+     * @private
+     */
+
+  }, {
+    key: '_stabilizationBatch',
+    value: function _stabilizationBatch() {
+      var _this4 = this;
+
+      var running = function running() {
+        return _this4.stabilized === false && _this4.stabilizationIterations < _this4.targetIterations;
+      };
+
+      var sendProgress = function sendProgress() {
+        _this4.body.emitter.emit('stabilizationProgress', {
+          iterations: _this4.stabilizationIterations,
+          total: _this4.targetIterations
+        });
+      };
+
+      if (this._startStabilizing()) {
+        sendProgress(); // Ensure that there is at least one start event.
+      }
+
+      var count = 0;
+      while (running() && count < this.options.stabilization.updateInterval) {
+        this.physicsTick();
+        count++;
+      }
+
+      sendProgress();
+
+      if (running()) {
+        setTimeout(this._stabilizationBatch.bind(this), 0);
+      } else {
+        this._finalizeStabilization();
+      }
+    }
+
+    /**
+     * Wrap up the stabilization, fit and emit the events.
+     * @private
+     */
+
+  }, {
+    key: '_finalizeStabilization',
+    value: function _finalizeStabilization() {
+      this.body.emitter.emit('_allowRedraw');
+      if (this.options.stabilization.fit === true) {
+        this.body.emitter.emit('fit');
+      }
+
+      if (this.options.stabilization.onlyDynamicEdges === true) {
+        this._restoreFrozenNodes();
+      }
+
+      this.body.emitter.emit('stabilizationIterationsDone');
+      this.body.emitter.emit('_requestRedraw');
+
+      if (this.stabilized === true) {
+        this._emitStabilized();
+      } else {
+        this.startSimulation();
+      }
+
+      this.ready = true;
+    }
+
+    //---------------------------  DEBUGGING BELOW  ---------------------------//
+
+
+    /**
+     * Debug function that display arrows for the forces currently active in the network.
+     *
+     * Use this when debugging only.
+     *
+     * @param {CanvasRenderingContext2D} ctx
+     * @private
+     */
+
+  }, {
+    key: '_drawForces',
+    value: function _drawForces(ctx) {
+      for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {
+        var index = this.physicsBody.physicsNodeIndices[i];
+        var node = this.body.nodes[index];
+        var force = this.physicsBody.forces[index];
+        var factor = 20;
+        var colorFactor = 0.03;
+        var forceSize = Math.sqrt(Math.pow(force.x, 2) + Math.pow(force.x, 2));
+
+        var size = Math.min(Math.max(5, forceSize), 15);
+        var arrowSize = 3 * size;
+
+        var color = util.HSVToHex((180 - Math.min(1, Math.max(0, colorFactor * forceSize)) * 180) / 360, 1, 1);
+
+        var point = {
+          x: node.x + factor * force.x,
+          y: node.y + factor * force.y
+        };
+
+        ctx.lineWidth = size;
+        ctx.strokeStyle = color;
+        ctx.beginPath();
+        ctx.moveTo(node.x, node.y);
+        ctx.lineTo(point.x, point.y);
+        ctx.stroke();
+
+        var angle = Math.atan2(force.y, force.x);
+        ctx.fillStyle = color;
+        EndPoints.draw(ctx, { type: 'arrow', point: point, angle: angle, length: arrowSize });
+        ctx.fill();
+      }
+    }
+  }]);
+  return PhysicsEngine;
+}();
+
+exports['default'] = PhysicsEngine;
+
+/***/ }),
+/* 221 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Repulsion Solver
+ */
+var RepulsionSolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function RepulsionSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, RepulsionSolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.setOptions(options);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(RepulsionSolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     * Calculate the forces the nodes apply on each other based on a repulsion field.
+     * This field is linearly approximated.
+     *
+     * @private
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      var dx, dy, distance, fx, fy, repulsingForce, node1, node2;
+
+      var nodes = this.body.nodes;
+      var nodeIndices = this.physicsBody.physicsNodeIndices;
+      var forces = this.physicsBody.forces;
+
+      // repulsing forces between nodes
+      var nodeDistance = this.options.nodeDistance;
+
+      // approximation constants
+      var a = -2 / 3 / nodeDistance;
+      var b = 4 / 3;
+
+      // we loop from i over all but the last entree in the array
+      // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j
+      for (var i = 0; i < nodeIndices.length - 1; i++) {
+        node1 = nodes[nodeIndices[i]];
+        for (var j = i + 1; j < nodeIndices.length; j++) {
+          node2 = nodes[nodeIndices[j]];
+
+          dx = node2.x - node1.x;
+          dy = node2.y - node1.y;
+          distance = Math.sqrt(dx * dx + dy * dy);
+
+          // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.
+          if (distance === 0) {
+            distance = 0.1 * Math.random();
+            dx = distance;
+          }
+
+          if (distance < 2 * nodeDistance) {
+            if (distance < 0.5 * nodeDistance) {
+              repulsingForce = 1.0;
+            } else {
+              repulsingForce = a * distance + b; // linear approx of  1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))
+            }
+            repulsingForce = repulsingForce / distance;
+
+            fx = dx * repulsingForce;
+            fy = dy * repulsingForce;
+
+            forces[node1.id].x -= fx;
+            forces[node1.id].y -= fy;
+            forces[node2.id].x += fx;
+            forces[node2.id].y += fy;
+          }
+        }
+      }
+    }
+  }]);
+  return RepulsionSolver;
+}();
+
+exports["default"] = RepulsionSolver;
+
+/***/ }),
+/* 222 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Hierarchical Repulsion Solver
+ */
+var HierarchicalRepulsionSolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function HierarchicalRepulsionSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, HierarchicalRepulsionSolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.setOptions(options);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(HierarchicalRepulsionSolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     * Calculate the forces the nodes apply on each other based on a repulsion field.
+     * This field is linearly approximated.
+     *
+     * @private
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      var dx, dy, distance, fx, fy, repulsingForce, node1, node2, i, j;
+
+      var nodes = this.body.nodes;
+      var nodeIndices = this.physicsBody.physicsNodeIndices;
+      var forces = this.physicsBody.forces;
+
+      // repulsing forces between nodes
+      var nodeDistance = this.options.nodeDistance;
+
+      // we loop from i over all but the last entree in the array
+      // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j
+      for (i = 0; i < nodeIndices.length - 1; i++) {
+        node1 = nodes[nodeIndices[i]];
+        for (j = i + 1; j < nodeIndices.length; j++) {
+          node2 = nodes[nodeIndices[j]];
+
+          // nodes only affect nodes on their level
+          if (node1.level === node2.level) {
+            dx = node2.x - node1.x;
+            dy = node2.y - node1.y;
+            distance = Math.sqrt(dx * dx + dy * dy);
+
+            var steepness = 0.05;
+            if (distance < nodeDistance) {
+              repulsingForce = -Math.pow(steepness * distance, 2) + Math.pow(steepness * nodeDistance, 2);
+            } else {
+              repulsingForce = 0;
+            }
+            // normalize force with
+            if (distance === 0) {
+              distance = 0.01;
+            } else {
+              repulsingForce = repulsingForce / distance;
+            }
+            fx = dx * repulsingForce;
+            fy = dy * repulsingForce;
+
+            forces[node1.id].x -= fx;
+            forces[node1.id].y -= fy;
+            forces[node2.id].x += fx;
+            forces[node2.id].y += fy;
+          }
+        }
+      }
+    }
+  }]);
+  return HierarchicalRepulsionSolver;
+}();
+
+exports["default"] = HierarchicalRepulsionSolver;
+
+/***/ }),
+/* 223 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Spring Solver
+ */
+var SpringSolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function SpringSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, SpringSolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.setOptions(options);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(SpringSolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     * This function calculates the springforces on the nodes, accounting for the support nodes.
+     *
+     * @private
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      var edgeLength = void 0,
+          edge = void 0;
+      var edgeIndices = this.physicsBody.physicsEdgeIndices;
+      var edges = this.body.edges;
+      var node1 = void 0,
+          node2 = void 0,
+          node3 = void 0;
+
+      // forces caused by the edges, modelled as springs
+      for (var i = 0; i < edgeIndices.length; i++) {
+        edge = edges[edgeIndices[i]];
+        if (edge.connected === true && edge.toId !== edge.fromId) {
+          // only calculate forces if nodes are in the same sector
+          if (this.body.nodes[edge.toId] !== undefined && this.body.nodes[edge.fromId] !== undefined) {
+            if (edge.edgeType.via !== undefined) {
+              edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;
+              node1 = edge.to;
+              node2 = edge.edgeType.via;
+              node3 = edge.from;
+
+              this._calculateSpringForce(node1, node2, 0.5 * edgeLength);
+              this._calculateSpringForce(node2, node3, 0.5 * edgeLength);
+            } else {
+              // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use
+              // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.
+              edgeLength = edge.options.length === undefined ? this.options.springLength * 1.5 : edge.options.length;
+              this._calculateSpringForce(edge.from, edge.to, edgeLength);
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * This is the code actually performing the calculation for the function above.
+     *
+     * @param {Node} node1
+     * @param {Node} node2
+     * @param {number} edgeLength
+     * @private
+     */
+
+  }, {
+    key: "_calculateSpringForce",
+    value: function _calculateSpringForce(node1, node2, edgeLength) {
+      var dx = node1.x - node2.x;
+      var dy = node1.y - node2.y;
+      var distance = Math.max(Math.sqrt(dx * dx + dy * dy), 0.01);
+
+      // the 1/distance is so the fx and fy can be calculated without sine or cosine.
+      var springForce = this.options.springConstant * (edgeLength - distance) / distance;
+
+      var fx = dx * springForce;
+      var fy = dy * springForce;
+
+      // handle the case where one node is not part of the physcis
+      if (this.physicsBody.forces[node1.id] !== undefined) {
+        this.physicsBody.forces[node1.id].x += fx;
+        this.physicsBody.forces[node1.id].y += fy;
+      }
+
+      if (this.physicsBody.forces[node2.id] !== undefined) {
+        this.physicsBody.forces[node2.id].x -= fx;
+        this.physicsBody.forces[node2.id].y -= fy;
+      }
+    }
+  }]);
+  return SpringSolver;
+}();
+
+exports["default"] = SpringSolver;
+
+/***/ }),
+/* 224 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Hierarchical Spring Solver
+ */
+var HierarchicalSpringSolver = function () {
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function HierarchicalSpringSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, HierarchicalSpringSolver);
+
+    this.body = body;
+    this.physicsBody = physicsBody;
+    this.setOptions(options);
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(HierarchicalSpringSolver, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      this.options = options;
+    }
+
+    /**
+     * This function calculates the springforces on the nodes, accounting for the support nodes.
+     *
+     * @private
+     */
+
+  }, {
+    key: "solve",
+    value: function solve() {
+      var edgeLength, edge;
+      var dx, dy, fx, fy, springForce, distance;
+      var edges = this.body.edges;
+      var factor = 0.5;
+
+      var edgeIndices = this.physicsBody.physicsEdgeIndices;
+      var nodeIndices = this.physicsBody.physicsNodeIndices;
+      var forces = this.physicsBody.forces;
+
+      // initialize the spring force counters
+      for (var i = 0; i < nodeIndices.length; i++) {
+        var nodeId = nodeIndices[i];
+        forces[nodeId].springFx = 0;
+        forces[nodeId].springFy = 0;
+      }
+
+      // forces caused by the edges, modelled as springs
+      for (var _i = 0; _i < edgeIndices.length; _i++) {
+        edge = edges[edgeIndices[_i]];
+        if (edge.connected === true) {
+          edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;
+
+          dx = edge.from.x - edge.to.x;
+          dy = edge.from.y - edge.to.y;
+          distance = Math.sqrt(dx * dx + dy * dy);
+          distance = distance === 0 ? 0.01 : distance;
+
+          // the 1/distance is so the fx and fy can be calculated without sine or cosine.
+          springForce = this.options.springConstant * (edgeLength - distance) / distance;
+
+          fx = dx * springForce;
+          fy = dy * springForce;
+
+          if (edge.to.level != edge.from.level) {
+            if (forces[edge.toId] !== undefined) {
+              forces[edge.toId].springFx -= fx;
+              forces[edge.toId].springFy -= fy;
+            }
+            if (forces[edge.fromId] !== undefined) {
+              forces[edge.fromId].springFx += fx;
+              forces[edge.fromId].springFy += fy;
+            }
+          } else {
+            if (forces[edge.toId] !== undefined) {
+              forces[edge.toId].x -= factor * fx;
+              forces[edge.toId].y -= factor * fy;
+            }
+            if (forces[edge.fromId] !== undefined) {
+              forces[edge.fromId].x += factor * fx;
+              forces[edge.fromId].y += factor * fy;
+            }
+          }
+        }
+      }
+
+      // normalize spring forces
+      springForce = 1;
+      var springFx, springFy;
+      for (var _i2 = 0; _i2 < nodeIndices.length; _i2++) {
+        var _nodeId = nodeIndices[_i2];
+        springFx = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFx));
+        springFy = Math.min(springForce, Math.max(-springForce, forces[_nodeId].springFy));
+
+        forces[_nodeId].x += springFx;
+        forces[_nodeId].y += springFy;
+      }
+
+      // retain energy balance
+      var totalFx = 0;
+      var totalFy = 0;
+      for (var _i3 = 0; _i3 < nodeIndices.length; _i3++) {
+        var _nodeId2 = nodeIndices[_i3];
+        totalFx += forces[_nodeId2].x;
+        totalFy += forces[_nodeId2].y;
+      }
+      var correctionFx = totalFx / nodeIndices.length;
+      var correctionFy = totalFy / nodeIndices.length;
+
+      for (var _i4 = 0; _i4 < nodeIndices.length; _i4++) {
+        var _nodeId3 = nodeIndices[_i4];
+        forces[_nodeId3].x -= correctionFx;
+        forces[_nodeId3].y -= correctionFy;
+      }
+    }
+  }]);
+  return HierarchicalSpringSolver;
+}();
+
+exports["default"] = HierarchicalSpringSolver;
+
+/***/ }),
+/* 225 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _BarnesHutSolver2 = __webpack_require__(120);
+
+var _BarnesHutSolver3 = _interopRequireDefault(_BarnesHutSolver2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * @extends BarnesHutSolver
+ */
+var ForceAtlas2BasedRepulsionSolver = function (_BarnesHutSolver) {
+  (0, _inherits3["default"])(ForceAtlas2BasedRepulsionSolver, _BarnesHutSolver);
+
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function ForceAtlas2BasedRepulsionSolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, ForceAtlas2BasedRepulsionSolver);
+    return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedRepulsionSolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedRepulsionSolver)).call(this, body, physicsBody, options));
+  }
+
+  /**
+   * Calculate the forces based on the distance.
+   *
+   * @param {number} distance
+   * @param {number} dx
+   * @param {number} dy
+   * @param {Node} node
+   * @param {Object} parentBranch
+   * @private
+   */
+
+
+  (0, _createClass3["default"])(ForceAtlas2BasedRepulsionSolver, [{
+    key: "_calculateForces",
+    value: function _calculateForces(distance, dx, dy, node, parentBranch) {
+      if (distance === 0) {
+        distance = 0.1 * Math.random();
+        dx = distance;
+      }
+
+      if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {
+        distance = Math.max(0.1 + this.overlapAvoidanceFactor * node.shape.radius, distance - node.shape.radius);
+      }
+
+      var degree = node.edges.length + 1;
+      // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines
+      // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce
+      var gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass * degree / Math.pow(distance, 2);
+      var fx = dx * gravityForce;
+      var fy = dy * gravityForce;
+
+      this.physicsBody.forces[node.id].x += fx;
+      this.physicsBody.forces[node.id].y += fy;
+    }
+  }]);
+  return ForceAtlas2BasedRepulsionSolver;
+}(_BarnesHutSolver3["default"]);
+
+exports["default"] = ForceAtlas2BasedRepulsionSolver;
+
+/***/ }),
+/* 226 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _CentralGravitySolver2 = __webpack_require__(121);
+
+var _CentralGravitySolver3 = _interopRequireDefault(_CentralGravitySolver2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * @extends CentralGravitySolver
+ */
+var ForceAtlas2BasedCentralGravitySolver = function (_CentralGravitySolver) {
+  (0, _inherits3["default"])(ForceAtlas2BasedCentralGravitySolver, _CentralGravitySolver);
+
+  /**
+   * @param {Object} body
+   * @param {{physicsNodeIndices: Array, physicsEdgeIndices: Array, forces: {}, velocities: {}}} physicsBody
+   * @param {Object} options
+   */
+  function ForceAtlas2BasedCentralGravitySolver(body, physicsBody, options) {
+    (0, _classCallCheck3["default"])(this, ForceAtlas2BasedCentralGravitySolver);
+    return (0, _possibleConstructorReturn3["default"])(this, (ForceAtlas2BasedCentralGravitySolver.__proto__ || (0, _getPrototypeOf2["default"])(ForceAtlas2BasedCentralGravitySolver)).call(this, body, physicsBody, options));
+  }
+
+  /**
+   * Calculate the forces based on the distance.
+   *
+   * @param {number} distance
+   * @param {number} dx
+   * @param {number} dy
+   * @param {Object<Node.id, Node>} forces
+   * @param {Node} node
+   * @private
+   */
+
+
+  (0, _createClass3["default"])(ForceAtlas2BasedCentralGravitySolver, [{
+    key: "_calculateForces",
+    value: function _calculateForces(distance, dx, dy, forces, node) {
+      if (distance > 0) {
+        var degree = node.edges.length + 1;
+        var gravityForce = this.options.centralGravity * degree * node.options.mass;
+        forces[node.id].x = dx * gravityForce;
+        forces[node.id].y = dy * gravityForce;
+      }
+    }
+  }]);
+  return ForceAtlas2BasedCentralGravitySolver;
+}(_CentralGravitySolver3["default"]);
+
+exports["default"] = ForceAtlas2BasedCentralGravitySolver;
+
+/***/ }),
+/* 227 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/* ===========================================================================
+
+# TODO
+
+- `edgeReplacedById` not cleaned up yet on cluster edge removal
+- allowSingleNodeCluster could be a global option as well; currently needs to always
+  be passed to clustering methods
+
+----------------------------------------------
+
+# State Model for Clustering
+
+The total state for clustering is non-trivial. It is useful to have a model
+available as to how it works. The following documents the relevant state items.
+
+
+## Network State
+
+The following `network`-members are relevant to clustering:
+
+- `body.nodes`       - all nodes actively participating in the network
+- `body.edges`       - same for edges
+- `body.nodeIndices` - id's of nodes that are visible at a given moment
+- `body.edgeIndices` - same for edges
+
+This includes:
+
+- helper nodes for dragging in `manipulation`
+- helper nodes for edge type `dynamic`
+- cluster nodes and edges
+- there may be more than this.
+
+A node/edge may be missing in the `Indices` member if:
+
+- it is a helper node
+- the node or edge state has option `hidden` set
+- It is not visible due to clustering
+
+
+## Clustering State
+
+For the hashes, the id's of the nodes/edges are used as key.
+
+Member `network.clustering` contains the following items:
+
+- `clusteredNodes` - hash with values: { clusterId: <id of cluster>, node: <node instance>}
+- `clusteredEdges` - hash with values: restore information for given edge
+
+
+Due to nesting of clusters, these members can contain cluster nodes and edges as well.
+
+The important thing to note here, is that the clustered nodes and edges also
+appear in the members of the cluster nodes. For data update, it is therefore 
+important to scan these lists as well as the cluster nodes.
+
+
+### Cluster Node
+
+A cluster node has the following extra fields:
+
+- `isCluster : true` - indication that this is a cluster node
+- `containedNodes`   - hash of nodes contained in this cluster
+- `containedEdges`   - same for edges
+- `edges`            - array of cluster edges for this node 
+
+
+**NOTE:**
+
+- `containedEdges` can also contain edges which are not clustered; e.g. an edge
+   connecting two nodes in the same cluster.
+
+
+### Cluster Edge
+
+These are the items in the `edges` member of a clustered node. They have the
+following relevant members:
+
+- 'clusteringEdgeReplacingIds` - array of id's of edges replaced by this edge
+
+Note that it's possible to nest clusters, so that `clusteringEdgeReplacingIds`
+can contain edge id's of other clusters.
+
+
+### Clustered Edge
+
+This is any edge contained by a cluster edge. It gets the following additional
+member:
+
+- `edgeReplacedById` - id of the cluster edge in which current edge is clustered
+
+
+   =========================================================================== */
+var util = __webpack_require__(2);
+var NetworkUtil = __webpack_require__(76)['default'];
+var Cluster = __webpack_require__(228)['default'];
+var Edge = __webpack_require__(74)['default']; // Only needed for check on type!
+var Node = __webpack_require__(47)['default']; // Only needed for check on type!
+
+/**
+ * The clustering engine
+ */
+
+var ClusterEngine = function () {
+  /**
+   * @param {Object} body
+   */
+  function ClusterEngine(body) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, ClusterEngine);
+
+    this.body = body;
+    this.clusteredNodes = {}; // key: node id, value: { clusterId: <id of cluster>, node: <node instance>}
+    this.clusteredEdges = {}; // key: edge id, value: restore information for given edge
+
+    this.options = {};
+    this.defaultOptions = {};
+    util.extend(this.options, this.defaultOptions);
+
+    this.body.emitter.on('_resetData', function () {
+      _this.clusteredNodes = {};_this.clusteredEdges = {};
+    });
+  }
+
+  /**
+  *
+  * @param {number} hubsize
+  * @param {Object} options
+  */
+
+
+  (0, _createClass3['default'])(ClusterEngine, [{
+    key: 'clusterByHubsize',
+    value: function clusterByHubsize(hubsize, options) {
+      if (hubsize === undefined) {
+        hubsize = this._getHubSize();
+      } else if ((typeof hubsize === 'undefined' ? 'undefined' : (0, _typeof3['default'])(hubsize)) === "object") {
+        options = this._checkOptions(hubsize);
+        hubsize = this._getHubSize();
+      }
+
+      var nodesToCluster = [];
+      for (var i = 0; i < this.body.nodeIndices.length; i++) {
+        var node = this.body.nodes[this.body.nodeIndices[i]];
+        if (node.edges.length >= hubsize) {
+          nodesToCluster.push(node.id);
+        }
+      }
+
+      for (var _i = 0; _i < nodesToCluster.length; _i++) {
+        this.clusterByConnection(nodesToCluster[_i], options, true);
+      }
+
+      this.body.emitter.emit('_dataChanged');
+    }
+
+    /**
+     * loop over all nodes, check if they adhere to the condition and cluster if needed.
+     * @param {Object} options
+     * @param {boolean} [refreshData=true]
+     */
+
+  }, {
+    key: 'cluster',
+    value: function cluster() {
+      var _this2 = this;
+
+      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+      var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      if (options.joinCondition === undefined) {
+        throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");
+      }
+
+      // check if the options object is fine, append if needed
+      options = this._checkOptions(options);
+
+      var childNodesObj = {};
+      var childEdgesObj = {};
+
+      // collect the nodes that will be in the cluster
+      util.forEach(this.body.nodes, function (node, nodeId) {
+        var clonedOptions = NetworkUtil.cloneOptions(node);
+        if (options.joinCondition(clonedOptions) === true) {
+          childNodesObj[nodeId] = node;
+
+          // collect the edges that will be in the cluster
+          util.forEach(node.edges, function (edge) {
+            if (_this2.clusteredEdges[edge.id] === undefined) {
+              childEdgesObj[edge.id] = edge;
+            }
+          });
+        }
+      });
+
+      this._cluster(childNodesObj, childEdgesObj, options, refreshData);
+    }
+
+    /**
+     * Cluster all nodes in the network that have only X edges
+     * @param {number} edgeCount
+     * @param {Object} options
+     * @param {boolean} [refreshData=true]
+     */
+
+  }, {
+    key: 'clusterByEdgeCount',
+    value: function clusterByEdgeCount(edgeCount, options) {
+      var _this3 = this;
+
+      var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+
+      options = this._checkOptions(options);
+      var clusters = [];
+      var usedNodes = {};
+      var edge = void 0,
+          edges = void 0,
+          relevantEdgeCount = void 0;
+      // collect the nodes that will be in the cluster
+
+      var _loop = function _loop(i) {
+        var childNodesObj = {};
+        var childEdgesObj = {};
+        var nodeId = _this3.body.nodeIndices[i];
+        var node = _this3.body.nodes[nodeId];
+
+        // if this node is already used in another cluster this session, we do not have to re-evaluate it.
+        if (usedNodes[nodeId] === undefined) {
+          relevantEdgeCount = 0;
+          edges = [];
+          for (var j = 0; j < node.edges.length; j++) {
+            edge = node.edges[j];
+            if (_this3.clusteredEdges[edge.id] === undefined) {
+              if (edge.toId !== edge.fromId) {
+                relevantEdgeCount++;
+              }
+              edges.push(edge);
+            }
+          }
+
+          // this node qualifies, we collect its neighbours to start the clustering process.
+          if (relevantEdgeCount === edgeCount) {
+            checkJoinCondition = function checkJoinCondition(node) {
+              if (options.joinCondition === undefined || options.joinCondition === null) {
+                return true;
+              }
+
+              var clonedOptions = NetworkUtil.cloneOptions(node);
+              return options.joinCondition(clonedOptions);
+            };
+
+            var gatheringSuccessful = true;
+            for (var _j = 0; _j < edges.length; _j++) {
+              edge = edges[_j];
+              var childNodeId = _this3._getConnectedId(edge, nodeId);
+              // add the nodes to the list by the join condition.
+              if (checkJoinCondition(node)) {
+                childEdgesObj[edge.id] = edge;
+                childNodesObj[nodeId] = node;
+                childNodesObj[childNodeId] = _this3.body.nodes[childNodeId];
+                usedNodes[nodeId] = true;
+              } else {
+                // this node does not qualify after all.
+                gatheringSuccessful = false;
+                break;
+              }
+            }
+
+            // add to the cluster queue
+            if ((0, _keys2['default'])(childNodesObj).length > 0 && (0, _keys2['default'])(childEdgesObj).length > 0 && gatheringSuccessful === true) {
+              /**
+               * Search for cluster data that contains any of the node id's
+               * @returns {Boolean} true if no joinCondition, otherwise return value of joinCondition
+               */
+              findClusterData = function findClusterData() {
+                for (var n = 0; n < clusters.length; ++n) {
+                  // Search for a cluster containing any of the node id's
+                  for (var m in childNodesObj) {
+                    if (clusters[n].nodes[m] !== undefined) {
+                      return clusters[n];
+                    }
+                  }
+                }
+
+                return undefined;
+              };
+
+              // If any of the found nodes is part of a cluster found in this method,
+              // add the current values to that cluster
+
+
+              foundCluster = findClusterData();
+
+              if (foundCluster !== undefined) {
+                // Add nodes to found cluster if not present
+                for (var m in childNodesObj) {
+                  if (foundCluster.nodes[m] === undefined) {
+                    foundCluster.nodes[m] = childNodesObj[m];
+                  }
+                }
+
+                // Add edges to found cluster, if not present
+                for (var _m in childEdgesObj) {
+                  if (foundCluster.edges[_m] === undefined) {
+                    foundCluster.edges[_m] = childEdgesObj[_m];
+                  }
+                }
+              } else {
+                // Create a new cluster group
+                clusters.push({ nodes: childNodesObj, edges: childEdgesObj });
+              }
+            }
+          }
+        }
+      };
+
+      for (var i = 0; i < this.body.nodeIndices.length; i++) {
+        var checkJoinCondition;
+        var findClusterData;
+        var foundCluster;
+
+        _loop(i);
+      }
+
+      for (var i = 0; i < clusters.length; i++) {
+        this._cluster(clusters[i].nodes, clusters[i].edges, options, false);
+      }
+
+      if (refreshData === true) {
+        this.body.emitter.emit('_dataChanged');
+      }
+    }
+
+    /**
+     * Cluster all nodes in the network that have only 1 edge
+     * @param {Object} options
+     * @param {boolean} [refreshData=true]
+     */
+
+  }, {
+    key: 'clusterOutliers',
+    value: function clusterOutliers(options) {
+      var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      this.clusterByEdgeCount(1, options, refreshData);
+    }
+
+    /**
+     * Cluster all nodes in the network that have only 2 edge
+     * @param {Object} options
+     * @param {boolean} [refreshData=true]
+     */
+
+  }, {
+    key: 'clusterBridges',
+    value: function clusterBridges(options) {
+      var refreshData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      this.clusterByEdgeCount(2, options, refreshData);
+    }
+
+    /**
+    * suck all connected nodes of a node into the node.
+    * @param {Node.id} nodeId
+    * @param {Object} options
+    * @param {boolean} [refreshData=true]
+    */
+
+  }, {
+    key: 'clusterByConnection',
+    value: function clusterByConnection(nodeId, options) {
+      var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+
+      // kill conditions
+      if (nodeId === undefined) {
+        throw new Error("No nodeId supplied to clusterByConnection!");
+      }
+      if (this.body.nodes[nodeId] === undefined) {
+        throw new Error("The nodeId given to clusterByConnection does not exist!");
+      }
+
+      var node = this.body.nodes[nodeId];
+      options = this._checkOptions(options, node);
+      if (options.clusterNodeProperties.x === undefined) {
+        options.clusterNodeProperties.x = node.x;
+      }
+      if (options.clusterNodeProperties.y === undefined) {
+        options.clusterNodeProperties.y = node.y;
+      }
+      if (options.clusterNodeProperties.fixed === undefined) {
+        options.clusterNodeProperties.fixed = {};
+        options.clusterNodeProperties.fixed.x = node.options.fixed.x;
+        options.clusterNodeProperties.fixed.y = node.options.fixed.y;
+      }
+
+      var childNodesObj = {};
+      var childEdgesObj = {};
+      var parentNodeId = node.id;
+      var parentClonedOptions = NetworkUtil.cloneOptions(node);
+      childNodesObj[parentNodeId] = node;
+
+      // collect the nodes that will be in the cluster
+      for (var i = 0; i < node.edges.length; i++) {
+        var edge = node.edges[i];
+        if (this.clusteredEdges[edge.id] === undefined) {
+          var childNodeId = this._getConnectedId(edge, parentNodeId);
+
+          // if the child node is not in a cluster
+          if (this.clusteredNodes[childNodeId] === undefined) {
+            if (childNodeId !== parentNodeId) {
+              if (options.joinCondition === undefined) {
+                childEdgesObj[edge.id] = edge;
+                childNodesObj[childNodeId] = this.body.nodes[childNodeId];
+              } else {
+                // clone the options and insert some additional parameters that could be interesting.
+                var childClonedOptions = NetworkUtil.cloneOptions(this.body.nodes[childNodeId]);
+                if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) {
+                  childEdgesObj[edge.id] = edge;
+                  childNodesObj[childNodeId] = this.body.nodes[childNodeId];
+                }
+              }
+            } else {
+              // swallow the edge if it is self-referencing.
+              childEdgesObj[edge.id] = edge;
+            }
+          }
+        }
+      }
+      var childNodeIDs = (0, _keys2['default'])(childNodesObj).map(function (childNode) {
+        return childNodesObj[childNode].id;
+      });
+
+      for (childNode in childNodesObj) {
+        if (!childNodesObj.hasOwnProperty(childNode)) continue;
+
+        var childNode = childNodesObj[childNode];
+        for (var y = 0; y < childNode.edges.length; y++) {
+          var childEdge = childNode.edges[y];
+          if (childNodeIDs.indexOf(this._getConnectedId(childEdge, childNode.id)) > -1) {
+            childEdgesObj[childEdge.id] = childEdge;
+          }
+        }
+      }
+      this._cluster(childNodesObj, childEdgesObj, options, refreshData);
+    }
+
+    /**
+    * This function creates the edges that will be attached to the cluster
+    * It looks for edges that are connected to the nodes from the "outside' of the cluster.
+    *
+    * @param {{Node.id: vis.Node}} childNodesObj
+    * @param {{vis.Edge.id: vis.Edge}} childEdgesObj
+    * @param {Object} clusterNodeProperties
+    * @param {Object} clusterEdgeProperties
+    * @private
+    */
+
+  }, {
+    key: '_createClusterEdges',
+    value: function _createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) {
+      var edge = void 0,
+          childNodeId = void 0,
+          childNode = void 0,
+          toId = void 0,
+          fromId = void 0,
+          otherNodeId = void 0;
+
+      // loop over all child nodes and their edges to find edges going out of the cluster
+      // these edges will be replaced by clusterEdges.
+      var childKeys = (0, _keys2['default'])(childNodesObj);
+      var createEdges = [];
+      for (var i = 0; i < childKeys.length; i++) {
+        childNodeId = childKeys[i];
+        childNode = childNodesObj[childNodeId];
+
+        // construct new edges from the cluster to others
+        for (var j = 0; j < childNode.edges.length; j++) {
+          edge = childNode.edges[j];
+          // we only handle edges that are visible to the system, not the disabled ones from the clustering process.
+          if (this.clusteredEdges[edge.id] === undefined) {
+            // self-referencing edges will be added to the "hidden" list
+            if (edge.toId == edge.fromId) {
+              childEdgesObj[edge.id] = edge;
+            } else {
+              // set up the from and to.
+              if (edge.toId == childNodeId) {
+                // this is a double equals because ints and strings can be interchanged here.
+                toId = clusterNodeProperties.id;
+                fromId = edge.fromId;
+                otherNodeId = fromId;
+              } else {
+                toId = edge.toId;
+                fromId = clusterNodeProperties.id;
+                otherNodeId = toId;
+              }
+            }
+
+            // Only edges from the cluster outwards are being replaced.
+            if (childNodesObj[otherNodeId] === undefined) {
+              createEdges.push({ edge: edge, fromId: fromId, toId: toId });
+            }
+          }
+        }
+      }
+
+      //
+      // Here we actually create the replacement edges.
+      //
+      // We could not do this in the loop above as the creation process
+      // would add an edge to the edges array we are iterating over.
+      //
+      // NOTE: a clustered edge can have multiple base edges!
+      //
+      var newEdges = [];
+
+      /**
+       * Find a cluster edge which matches the given created edge.
+       * @param {vis.Edge} createdEdge
+       * @returns {vis.Edge}
+       */
+      var getNewEdge = function getNewEdge(createdEdge) {
+        for (var _j2 = 0; _j2 < newEdges.length; _j2++) {
+          var newEdge = newEdges[_j2];
+
+          // We replace both to and from edges with a single cluster edge
+          var matchToDirection = createdEdge.fromId === newEdge.fromId && createdEdge.toId === newEdge.toId;
+          var matchFromDirection = createdEdge.fromId === newEdge.toId && createdEdge.toId === newEdge.fromId;
+
+          if (matchToDirection || matchFromDirection) {
+            return newEdge;
+          }
+        }
+
+        return null;
+      };
+
+      for (var _j3 = 0; _j3 < createEdges.length; _j3++) {
+        var createdEdge = createEdges[_j3];
+        var _edge = createdEdge.edge;
+        var newEdge = getNewEdge(createdEdge);
+
+        if (newEdge === null) {
+          // Create a clustered edge for this connection
+          newEdge = this._createClusteredEdge(createdEdge.fromId, createdEdge.toId, _edge, clusterEdgeProperties);
+
+          newEdges.push(newEdge);
+        } else {
+          newEdge.clusteringEdgeReplacingIds.push(_edge.id);
+        }
+
+        // also reference the new edge in the old edge
+        this.body.edges[_edge.id].edgeReplacedById = newEdge.id;
+
+        // hide the replaced edge
+        this._backupEdgeOptions(_edge);
+        _edge.setOptions({ physics: false });
+      }
+    }
+
+    /**
+    * This function checks the options that can be supplied to the different cluster functions
+    * for certain fields and inserts defaults if needed
+    * @param {Object} options
+    * @returns {*}
+    * @private
+    */
+
+  }, {
+    key: '_checkOptions',
+    value: function _checkOptions() {
+      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+      if (options.clusterEdgeProperties === undefined) {
+        options.clusterEdgeProperties = {};
+      }
+      if (options.clusterNodeProperties === undefined) {
+        options.clusterNodeProperties = {};
+      }
+
+      return options;
+    }
+
+    /**
+    *
+    * @param {Object}    childNodesObj         | object with node objects, id as keys, same as childNodes except it also contains a source node
+    * @param {Object}    childEdgesObj         | object with edge objects, id as keys
+    * @param {Array}     options               | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}
+    * @param {boolean}   refreshData | when true, do not wrap up
+    * @private
+    */
+
+  }, {
+    key: '_cluster',
+    value: function _cluster(childNodesObj, childEdgesObj, options) {
+      var refreshData = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
+
+      // Remove nodes which are already clustered
+      var tmpNodesToRemove = [];
+      for (var _nodeId in childNodesObj) {
+        if (childNodesObj.hasOwnProperty(_nodeId)) {
+          if (this.clusteredNodes[_nodeId] !== undefined) {
+            tmpNodesToRemove.push(_nodeId);
+          }
+        }
+      }
+
+      for (var n = 0; n < tmpNodesToRemove.length; ++n) {
+        delete childNodesObj[tmpNodesToRemove[n]];
+      }
+
+      // kill condition: no nodes don't bother
+      if ((0, _keys2['default'])(childNodesObj).length == 0) {
+        return;
+      }
+
+      // allow clusters of 1 if options allow
+      if ((0, _keys2['default'])(childNodesObj).length == 1 && options.clusterNodeProperties.allowSingleNodeCluster != true) {
+        return;
+      }
+
+      var clusterNodeProperties = util.deepExtend({}, options.clusterNodeProperties);
+
+      // construct the clusterNodeProperties
+      if (options.processProperties !== undefined) {
+        // get the childNode options
+        var childNodesOptions = [];
+        for (var _nodeId2 in childNodesObj) {
+          if (childNodesObj.hasOwnProperty(_nodeId2)) {
+            var clonedOptions = NetworkUtil.cloneOptions(childNodesObj[_nodeId2]);
+            childNodesOptions.push(clonedOptions);
+          }
+        }
+
+        // get cluster properties based on childNodes
+        var childEdgesOptions = [];
+        for (var edgeId in childEdgesObj) {
+          if (childEdgesObj.hasOwnProperty(edgeId)) {
+            // these cluster edges will be removed on creation of the cluster.
+            if (edgeId.substr(0, 12) !== "clusterEdge:") {
+              var _clonedOptions = NetworkUtil.cloneOptions(childEdgesObj[edgeId], 'edge');
+              childEdgesOptions.push(_clonedOptions);
+            }
+          }
+        }
+
+        clusterNodeProperties = options.processProperties(clusterNodeProperties, childNodesOptions, childEdgesOptions);
+        if (!clusterNodeProperties) {
+          throw new Error("The processProperties function does not return properties!");
+        }
+      }
+
+      // check if we have an unique id;
+      if (clusterNodeProperties.id === undefined) {
+        clusterNodeProperties.id = 'cluster:' + util.randomUUID();
+      }
+      var clusterId = clusterNodeProperties.id;
+
+      if (clusterNodeProperties.label === undefined) {
+        clusterNodeProperties.label = 'cluster';
+      }
+
+      // give the clusterNode a position if it does not have one.
+      var pos = undefined;
+      if (clusterNodeProperties.x === undefined) {
+        pos = this._getClusterPosition(childNodesObj);
+        clusterNodeProperties.x = pos.x;
+      }
+      if (clusterNodeProperties.y === undefined) {
+        if (pos === undefined) {
+          pos = this._getClusterPosition(childNodesObj);
+        }
+        clusterNodeProperties.y = pos.y;
+      }
+
+      // force the ID to remain the same
+      clusterNodeProperties.id = clusterId;
+
+      // create the cluster Node
+      // Note that allowSingleNodeCluster, if present, is stored in the options as well
+      var clusterNode = this.body.functions.createNode(clusterNodeProperties, Cluster);
+      clusterNode.containedNodes = childNodesObj;
+      clusterNode.containedEdges = childEdgesObj;
+      // cache a copy from the cluster edge properties if we have to reconnect others later on
+      clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;
+
+      // finally put the cluster node into global
+      this.body.nodes[clusterNodeProperties.id] = clusterNode;
+
+      this._clusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties);
+
+      // set ID to undefined so no duplicates arise
+      clusterNodeProperties.id = undefined;
+
+      // wrap up
+      if (refreshData === true) {
+        this.body.emitter.emit('_dataChanged');
+      }
+    }
+
+    /**
+     *
+     * @param {Edge} edge
+     * @private
+     */
+
+  }, {
+    key: '_backupEdgeOptions',
+    value: function _backupEdgeOptions(edge) {
+      if (this.clusteredEdges[edge.id] === undefined) {
+        this.clusteredEdges[edge.id] = { physics: edge.options.physics };
+      }
+    }
+
+    /**
+     *
+     * @param {Edge} edge
+     * @private
+     */
+
+  }, {
+    key: '_restoreEdge',
+    value: function _restoreEdge(edge) {
+      var originalOptions = this.clusteredEdges[edge.id];
+      if (originalOptions !== undefined) {
+        edge.setOptions({ physics: originalOptions.physics });
+        delete this.clusteredEdges[edge.id];
+      }
+    }
+
+    /**
+    * Check if a node is a cluster.
+    * @param {Node.id} nodeId
+    * @returns {*}
+    */
+
+  }, {
+    key: 'isCluster',
+    value: function isCluster(nodeId) {
+      if (this.body.nodes[nodeId] !== undefined) {
+        return this.body.nodes[nodeId].isCluster === true;
+      } else {
+        console.log("Node does not exist.");
+        return false;
+      }
+    }
+
+    /**
+    * get the position of the cluster node based on what's inside
+    * @param {object} childNodesObj    | object with node objects, id as keys
+    * @returns {{x: number, y: number}}
+    * @private
+    */
+
+  }, {
+    key: '_getClusterPosition',
+    value: function _getClusterPosition(childNodesObj) {
+      var childKeys = (0, _keys2['default'])(childNodesObj);
+      var minX = childNodesObj[childKeys[0]].x;
+      var maxX = childNodesObj[childKeys[0]].x;
+      var minY = childNodesObj[childKeys[0]].y;
+      var maxY = childNodesObj[childKeys[0]].y;
+      var node = void 0;
+      for (var i = 1; i < childKeys.length; i++) {
+        node = childNodesObj[childKeys[i]];
+        minX = node.x < minX ? node.x : minX;
+        maxX = node.x > maxX ? node.x : maxX;
+        minY = node.y < minY ? node.y : minY;
+        maxY = node.y > maxY ? node.y : maxY;
+      }
+
+      return { x: 0.5 * (minX + maxX), y: 0.5 * (minY + maxY) };
+    }
+
+    /**
+     * Open a cluster by calling this function.
+     * @param {vis.Edge.id}  clusterNodeId | the ID of the cluster node
+     * @param {Object} options
+     * @param {boolean} refreshData | wrap up afterwards if not true
+     */
+
+  }, {
+    key: 'openCluster',
+    value: function openCluster(clusterNodeId, options) {
+      var refreshData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
+
+      // kill conditions
+      if (clusterNodeId === undefined) {
+        throw new Error("No clusterNodeId supplied to openCluster.");
+      }
+
+      var clusterNode = this.body.nodes[clusterNodeId];
+
+      if (clusterNode === undefined) {
+        throw new Error("The clusterNodeId supplied to openCluster does not exist.");
+      }
+      if (clusterNode.isCluster !== true || clusterNode.containedNodes === undefined || clusterNode.containedEdges === undefined) {
+        throw new Error("The node:" + clusterNodeId + " is not a valid cluster.");
+      }
+
+      // Check if current cluster is clustered itself
+      var stack = this.findNode(clusterNodeId);
+      var parentIndex = stack.indexOf(clusterNodeId) - 1;
+      if (parentIndex >= 0) {
+        // Current cluster is clustered; transfer contained nodes and edges to parent
+        var parentClusterNodeId = stack[parentIndex];
+        var parentClusterNode = this.body.nodes[parentClusterNodeId];
+
+        // clustering.clusteredNodes and clustering.clusteredEdges remain unchanged
+        parentClusterNode._openChildCluster(clusterNodeId);
+
+        // All components of child cluster node have been transferred. It can die now.
+        delete this.body.nodes[clusterNodeId];
+        if (refreshData === true) {
+          this.body.emitter.emit('_dataChanged');
+        }
+
+        return;
+      }
+
+      // main body 
+      var containedNodes = clusterNode.containedNodes;
+      var containedEdges = clusterNode.containedEdges;
+
+      // allow the user to position the nodes after release.
+      if (options !== undefined && options.releaseFunction !== undefined && typeof options.releaseFunction === 'function') {
+        var positions = {};
+        var clusterPosition = { x: clusterNode.x, y: clusterNode.y };
+        for (var _nodeId3 in containedNodes) {
+          if (containedNodes.hasOwnProperty(_nodeId3)) {
+            var containedNode = this.body.nodes[_nodeId3];
+            positions[_nodeId3] = { x: containedNode.x, y: containedNode.y };
+          }
+        }
+        var newPositions = options.releaseFunction(clusterPosition, positions);
+
+        for (var _nodeId4 in containedNodes) {
+          if (containedNodes.hasOwnProperty(_nodeId4)) {
+            var _containedNode = this.body.nodes[_nodeId4];
+            if (newPositions[_nodeId4] !== undefined) {
+              _containedNode.x = newPositions[_nodeId4].x === undefined ? clusterNode.x : newPositions[_nodeId4].x;
+              _containedNode.y = newPositions[_nodeId4].y === undefined ? clusterNode.y : newPositions[_nodeId4].y;
+            }
+          }
+        }
+      } else {
+        // copy the position from the cluster
+        util.forEach(containedNodes, function (containedNode) {
+          // inherit position
+          if (containedNode.options.fixed.x === false) {
+            containedNode.x = clusterNode.x;
+          }
+          if (containedNode.options.fixed.y === false) {
+            containedNode.y = clusterNode.y;
+          }
+        });
+      }
+
+      // release nodes
+      for (var _nodeId5 in containedNodes) {
+        if (containedNodes.hasOwnProperty(_nodeId5)) {
+          var _containedNode2 = this.body.nodes[_nodeId5];
+
+          // inherit speed
+          _containedNode2.vx = clusterNode.vx;
+          _containedNode2.vy = clusterNode.vy;
+
+          _containedNode2.setOptions({ physics: true });
+
+          delete this.clusteredNodes[_nodeId5];
+        }
+      }
+
+      // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.
+      var edgesToBeDeleted = [];
+      for (var i = 0; i < clusterNode.edges.length; i++) {
+        edgesToBeDeleted.push(clusterNode.edges[i]);
+      }
+
+      // actually handling the deleting.
+      for (var _i2 = 0; _i2 < edgesToBeDeleted.length; _i2++) {
+        var edge = edgesToBeDeleted[_i2];
+        var otherNodeId = this._getConnectedId(edge, clusterNodeId);
+        var otherNode = this.clusteredNodes[otherNodeId];
+
+        for (var j = 0; j < edge.clusteringEdgeReplacingIds.length; j++) {
+          var transferId = edge.clusteringEdgeReplacingIds[j];
+          var transferEdge = this.body.edges[transferId];
+          if (transferEdge === undefined) continue;
+
+          // if the other node is in another cluster, we transfer ownership of this edge to the other cluster
+          if (otherNode !== undefined) {
+            // transfer ownership:
+            var otherCluster = this.body.nodes[otherNode.clusterId];
+            otherCluster.containedEdges[transferEdge.id] = transferEdge;
+
+            // delete local reference
+            delete containedEdges[transferEdge.id];
+
+            // get to and from
+            var fromId = transferEdge.fromId;
+            var toId = transferEdge.toId;
+            if (transferEdge.toId == otherNodeId) {
+              toId = otherNode.clusterId;
+            } else {
+              fromId = otherNode.clusterId;
+            }
+
+            // create new cluster edge from the otherCluster
+            this._createClusteredEdge(fromId, toId, transferEdge, otherCluster.clusterEdgeProperties, { hidden: false, physics: true });
+          } else {
+            this._restoreEdge(transferEdge);
+          }
+        }
+
+        edge.remove();
+      }
+
+      // handle the releasing of the edges
+      for (var edgeId in containedEdges) {
+        if (containedEdges.hasOwnProperty(edgeId)) {
+          this._restoreEdge(containedEdges[edgeId]);
+        }
+      }
+
+      // remove clusterNode
+      delete this.body.nodes[clusterNodeId];
+
+      if (refreshData === true) {
+        this.body.emitter.emit('_dataChanged');
+      }
+    }
+
+    /**
+     *
+     * @param {Cluster.id} clusterId
+     * @returns {Array.<Node.id>}
+     */
+
+  }, {
+    key: 'getNodesInCluster',
+    value: function getNodesInCluster(clusterId) {
+      var nodesArray = [];
+      if (this.isCluster(clusterId) === true) {
+        var containedNodes = this.body.nodes[clusterId].containedNodes;
+        for (var _nodeId6 in containedNodes) {
+          if (containedNodes.hasOwnProperty(_nodeId6)) {
+            nodesArray.push(this.body.nodes[_nodeId6].id);
+          }
+        }
+      }
+
+      return nodesArray;
+    }
+
+    /**
+    * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node
+    *
+    * If a node can't be found in the chain, return an empty array.
+    *
+    * @param {string|number} nodeId
+    * @returns {Array}
+    */
+
+  }, {
+    key: 'findNode',
+    value: function findNode(nodeId) {
+      var stack = [];
+      var max = 100;
+      var counter = 0;
+      var node = void 0;
+
+      while (this.clusteredNodes[nodeId] !== undefined && counter < max) {
+        node = this.body.nodes[nodeId];
+        if (node === undefined) return [];
+        stack.push(node.id);
+
+        nodeId = this.clusteredNodes[nodeId].clusterId;
+        counter++;
+      }
+
+      node = this.body.nodes[nodeId];
+      if (node === undefined) return [];
+      stack.push(node.id);
+
+      stack.reverse();
+      return stack;
+    }
+
+    /**
+    * Using a clustered nodeId, update with the new options
+    * @param {vis.Edge.id} clusteredNodeId
+    * @param {object} newOptions
+    */
+
+  }, {
+    key: 'updateClusteredNode',
+    value: function updateClusteredNode(clusteredNodeId, newOptions) {
+      if (clusteredNodeId === undefined) {
+        throw new Error("No clusteredNodeId supplied to updateClusteredNode.");
+      }
+      if (newOptions === undefined) {
+        throw new Error("No newOptions supplied to updateClusteredNode.");
+      }
+      if (this.body.nodes[clusteredNodeId] === undefined) {
+        throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist.");
+      }
+
+      this.body.nodes[clusteredNodeId].setOptions(newOptions);
+      this.body.emitter.emit('_dataChanged');
+    }
+
+    /**
+    * Using a base edgeId, update all related clustered edges with the new options
+    * @param {vis.Edge.id} startEdgeId
+    * @param {object} newOptions
+    */
+
+  }, {
+    key: 'updateEdge',
+    value: function updateEdge(startEdgeId, newOptions) {
+      if (startEdgeId === undefined) {
+        throw new Error("No startEdgeId supplied to updateEdge.");
+      }
+      if (newOptions === undefined) {
+        throw new Error("No newOptions supplied to updateEdge.");
+      }
+      if (this.body.edges[startEdgeId] === undefined) {
+        throw new Error("The startEdgeId supplied to updateEdge does not exist.");
+      }
+
+      var allEdgeIds = this.getClusteredEdges(startEdgeId);
+      for (var i = 0; i < allEdgeIds.length; i++) {
+        var edge = this.body.edges[allEdgeIds[i]];
+        edge.setOptions(newOptions);
+      }
+      this.body.emitter.emit('_dataChanged');
+    }
+
+    /**
+    * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)
+    * @param {vis.Edge.id} edgeId
+    * @returns {Array.<vis.Edge.id>}
+    */
+
+  }, {
+    key: 'getClusteredEdges',
+    value: function getClusteredEdges(edgeId) {
+      var stack = [];
+      var max = 100;
+      var counter = 0;
+
+      while (edgeId !== undefined && this.body.edges[edgeId] !== undefined && counter < max) {
+        stack.push(this.body.edges[edgeId].id);
+        edgeId = this.body.edges[edgeId].edgeReplacedById;
+        counter++;
+      }
+      stack.reverse();
+      return stack;
+    }
+
+    /**
+    * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge
+    * @param {vis.Edge.id} clusteredEdgeId
+    * @returns {vis.Edge.id} baseEdgeId
+    *
+    * TODO: deprecate in 5.0.0. Method getBaseEdges() is the correct one to use.
+    */
+
+  }, {
+    key: 'getBaseEdge',
+    value: function getBaseEdge(clusteredEdgeId) {
+      // Just kludge this by returning the first base edge id found
+      return this.getBaseEdges(clusteredEdgeId)[0];
+    }
+
+    /**
+     * Get all regular edges for this clustered edge id.
+     *
+     * @param {vis.Edge.id} clusteredEdgeId
+     * @returns {Array.<vis.Edge.id>} all baseEdgeId's under this clustered edge
+     */
+
+  }, {
+    key: 'getBaseEdges',
+    value: function getBaseEdges(clusteredEdgeId) {
+      var IdsToHandle = [clusteredEdgeId];
+      var doneIds = [];
+      var foundIds = [];
+      var max = 100;
+      var counter = 0;
+
+      while (IdsToHandle.length > 0 && counter < max) {
+        var nextId = IdsToHandle.pop();
+        if (nextId === undefined) continue; // Paranoia here and onwards
+        var nextEdge = this.body.edges[nextId];
+        if (nextEdge === undefined) continue;
+        counter++;
+
+        var replacingIds = nextEdge.clusteringEdgeReplacingIds;
+        if (replacingIds === undefined) {
+          // nextId is a base id
+          foundIds.push(nextId);
+        } else {
+          // Another cluster edge, unravel this one as well
+          for (var i = 0; i < replacingIds.length; ++i) {
+            var replacingId = replacingIds[i];
+
+            // Don't add if already handled
+            // TODO: never triggers; find a test-case which does
+            if (IdsToHandle.indexOf(replacingIds) !== -1 || doneIds.indexOf(replacingIds) !== -1) {
+              continue;
+            }
+
+            IdsToHandle.push(replacingId);
+          }
+        }
+
+        doneIds.push(nextId);
+      }
+
+      return foundIds;
+    }
+
+    /**
+    * Get the Id the node is connected to
+    * @param {vis.Edge} edge
+    * @param {Node.id} nodeId
+    * @returns {*}
+    * @private
+    */
+
+  }, {
+    key: '_getConnectedId',
+    value: function _getConnectedId(edge, nodeId) {
+      if (edge.toId != nodeId) {
+        return edge.toId;
+      } else if (edge.fromId != nodeId) {
+        return edge.fromId;
+      } else {
+        return edge.fromId;
+      }
+    }
+
+    /**
+    * We determine how many connections denote an important hub.
+    * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)
+    *
+    * @returns {number}
+    * @private
+    */
+
+  }, {
+    key: '_getHubSize',
+    value: function _getHubSize() {
+      var average = 0;
+      var averageSquared = 0;
+      var hubCounter = 0;
+      var largestHub = 0;
+
+      for (var i = 0; i < this.body.nodeIndices.length; i++) {
+        var _node = this.body.nodes[this.body.nodeIndices[i]];
+        if (_node.edges.length > largestHub) {
+          largestHub = _node.edges.length;
+        }
+        average += _node.edges.length;
+        averageSquared += Math.pow(_node.edges.length, 2);
+        hubCounter += 1;
+      }
+      average = average / hubCounter;
+      averageSquared = averageSquared / hubCounter;
+
+      var variance = averageSquared - Math.pow(average, 2);
+      var standardDeviation = Math.sqrt(variance);
+
+      var hubThreshold = Math.floor(average + 2 * standardDeviation);
+
+      // always have at least one to cluster
+      if (hubThreshold > largestHub) {
+        hubThreshold = largestHub;
+      }
+
+      return hubThreshold;
+    }
+
+    /**
+     * Create an edge for the cluster representation.
+     *
+     * @param {Node.id} fromId
+     * @param {Node.id} toId
+     * @param {vis.Edge} baseEdge
+     * @param {Object} clusterEdgeProperties
+     * @param {Object} extraOptions
+     * @returns {Edge} newly created clustered edge
+     * @private
+     */
+
+  }, {
+    key: '_createClusteredEdge',
+    value: function _createClusteredEdge(fromId, toId, baseEdge, clusterEdgeProperties, extraOptions) {
+      // copy the options of the edge we will replace
+      var clonedOptions = NetworkUtil.cloneOptions(baseEdge, 'edge');
+      // make sure the properties of clusterEdges are superimposed on it
+      util.deepExtend(clonedOptions, clusterEdgeProperties);
+
+      // set up the edge
+      clonedOptions.from = fromId;
+      clonedOptions.to = toId;
+      clonedOptions.id = 'clusterEdge:' + util.randomUUID();
+
+      // apply the edge specific options to it if specified
+      if (extraOptions !== undefined) {
+        util.deepExtend(clonedOptions, extraOptions);
+      }
+
+      var newEdge = this.body.functions.createEdge(clonedOptions);
+      newEdge.clusteringEdgeReplacingIds = [baseEdge.id];
+      newEdge.connect();
+
+      // Register the new edge
+      this.body.edges[newEdge.id] = newEdge;
+
+      return newEdge;
+    }
+
+    /**
+     * Add the passed child nodes and edges to the given cluster node.
+     *
+     * @param {Object|Node} childNodes  hash of nodes or single node to add in cluster
+     * @param {Object|Edge} childEdges  hash of edges or single edge to take into account when clustering
+     * @param {Node} clusterNode  cluster node to add nodes and edges to
+     * @param {Object} [clusterEdgeProperties]
+     * @private
+     */
+
+  }, {
+    key: '_clusterEdges',
+    value: function _clusterEdges(childNodes, childEdges, clusterNode, clusterEdgeProperties) {
+      if (childEdges instanceof Edge) {
+        var edge = childEdges;
+        var obj = {};
+        obj[edge.id] = edge;
+        childEdges = obj;
+      }
+
+      if (childNodes instanceof Node) {
+        var _node2 = childNodes;
+        var _obj = {};
+        _obj[_node2.id] = _node2;
+        childNodes = _obj;
+      }
+
+      if (clusterNode === undefined || clusterNode === null) {
+        throw new Error("_clusterEdges: parameter clusterNode required");
+      }
+
+      if (clusterEdgeProperties === undefined) {
+        // Take the required properties from the cluster node
+        clusterEdgeProperties = clusterNode.clusterEdgeProperties;
+      }
+
+      // create the new edges that will connect to the cluster.
+      // All self-referencing edges will be added to childEdges here.
+      this._createClusterEdges(childNodes, childEdges, clusterNode, clusterEdgeProperties);
+
+      // disable the childEdges
+      for (var edgeId in childEdges) {
+        if (childEdges.hasOwnProperty(edgeId)) {
+          if (this.body.edges[edgeId] !== undefined) {
+            var _edge2 = this.body.edges[edgeId];
+            // cache the options before changing
+            this._backupEdgeOptions(_edge2);
+            // disable physics and hide the edge
+            _edge2.setOptions({ physics: false });
+          }
+        }
+      }
+
+      // disable the childNodes
+      for (var _nodeId7 in childNodes) {
+        if (childNodes.hasOwnProperty(_nodeId7)) {
+          this.clusteredNodes[_nodeId7] = { clusterId: clusterNode.id, node: this.body.nodes[_nodeId7] };
+          this.body.nodes[_nodeId7].setOptions({ physics: false });
+        }
+      }
+    }
+
+    /**
+     * Determine in which cluster given nodeId resides.
+     *
+     * If not in cluster, return undefined.
+     *
+     * NOTE: If you know a cleaner way to do this, please enlighten me (wimrijnders).
+     *
+     * @param {Node.id} nodeId
+     * @returns {Node|undefined} Node instance for cluster, if present
+     * @private
+     */
+
+  }, {
+    key: '_getClusterNodeForNode',
+    value: function _getClusterNodeForNode(nodeId) {
+      if (nodeId === undefined) return undefined;
+      var clusteredNode = this.clusteredNodes[nodeId];
+
+      // NOTE: If no cluster info found, it should actually be an error
+      if (clusteredNode === undefined) return undefined;
+      var clusterId = clusteredNode.clusterId;
+      if (clusterId === undefined) return undefined;
+
+      return this.body.nodes[clusterId];
+    }
+
+    /**
+     * Internal helper function for conditionally removing items in array
+     *
+     * Done like this because Array.filter() is not fully supported by all IE's.
+     *
+     * @param {Array} arr
+     * @param {function} callback
+     * @returns {Array}
+     * @private
+     */
+
+  }, {
+    key: '_filter',
+    value: function _filter(arr, callback) {
+      var ret = [];
+
+      util.forEach(arr, function (item) {
+        if (callback(item)) {
+          ret.push(item);
+        }
+      });
+
+      return ret;
+    }
+
+    /**
+     * Scan all edges for changes in clustering and adjust this if necessary.
+     *
+     * Call this (internally) after there has been a change in node or edge data.
+     *
+     * Pre: States of this.body.nodes and this.body.edges consistent
+     * Pre: this.clusteredNodes and this.clusteredEdge consistent with containedNodes and containedEdges
+     *      of cluster nodes.
+     */
+
+  }, {
+    key: '_updateState',
+    value: function _updateState() {
+      var _this4 = this;
+
+      var nodeId = void 0;
+      var deletedNodeIds = [];
+      var deletedEdgeIds = [];
+
+      /**
+       * Utility function to iterate over clustering nodes only
+       *
+       * @param {Function} callback  function to call for each cluster node
+       */
+      var eachClusterNode = function eachClusterNode(callback) {
+        util.forEach(_this4.body.nodes, function (node) {
+          if (node.isCluster === true) {
+            callback(node);
+          }
+        });
+      };
+
+      //
+      // Remove deleted regular nodes from clustering
+      //
+
+      // Determine the deleted nodes
+      for (nodeId in this.clusteredNodes) {
+        if (!this.clusteredNodes.hasOwnProperty(nodeId)) continue;
+        var _node3 = this.body.nodes[nodeId];
+
+        if (_node3 === undefined) {
+          deletedNodeIds.push(nodeId);
+        }
+      }
+
+      // Remove nodes from cluster nodes
+      eachClusterNode(function (clusterNode) {
+        for (var n = 0; n < deletedNodeIds.length; n++) {
+          delete clusterNode.containedNodes[deletedNodeIds[n]];
+        }
+      });
+
+      // Remove nodes from cluster list
+      for (var n = 0; n < deletedNodeIds.length; n++) {
+        delete this.clusteredNodes[deletedNodeIds[n]];
+      }
+
+      //
+      // Remove deleted edges from clustering
+      //
+
+      // Add the deleted clustered edges to the list
+      util.forEach(this.clusteredEdges, function (edgeId) {
+        var edge = _this4.body.edges[edgeId];
+        if (edge === undefined || !edge.endPointsValid()) {
+          deletedEdgeIds.push(edgeId);
+        }
+      });
+
+      // Cluster nodes can also contain edges which are not clustered, 
+      // i.e. nodes 1-2 within cluster with an edge in between.
+      // So the cluster nodes also need to be scanned for invalid edges
+      eachClusterNode(function (clusterNode) {
+        util.forEach(clusterNode.containedEdges, function (edge, edgeId) {
+          if (!edge.endPointsValid() && deletedEdgeIds.indexOf(edgeId) === -1) {
+            deletedEdgeIds.push(edgeId);
+          }
+        });
+      });
+
+      // Also scan for cluster edges which need to be removed in the active list.
+      // Regular edges have been removed beforehand, so this only picks up the cluster edges.
+      util.forEach(this.body.edges, function (edge, edgeId) {
+        // Explicitly scan the contained edges for validity
+        var isValid = true;
+        var replacedIds = edge.clusteringEdgeReplacingIds;
+        if (replacedIds !== undefined) {
+          var numValid = 0;
+
+          util.forEach(replacedIds, function (containedEdgeId) {
+            var containedEdge = _this4.body.edges[containedEdgeId];
+
+            if (containedEdge !== undefined && containedEdge.endPointsValid()) {
+              numValid += 1;
+            }
+          });
+
+          isValid = numValid > 0;
+        }
+
+        if (!edge.endPointsValid() || !isValid) {
+          deletedEdgeIds.push(edgeId);
+        }
+      });
+
+      // Remove edges from cluster nodes
+      eachClusterNode(function (clusterNode) {
+        util.forEach(deletedEdgeIds, function (deletedEdgeId) {
+          delete clusterNode.containedEdges[deletedEdgeId];
+
+          util.forEach(clusterNode.edges, function (edge, m) {
+            if (edge.id === deletedEdgeId) {
+              clusterNode.edges[m] = null; // Don't want to directly delete here, because in the loop
+              return;
+            }
+
+            edge.clusteringEdgeReplacingIds = _this4._filter(edge.clusteringEdgeReplacingIds, function (id) {
+              return deletedEdgeIds.indexOf(id) === -1;
+            });
+          });
+
+          // Clean up the nulls
+          clusterNode.edges = _this4._filter(clusterNode.edges, function (item) {
+            return item !== null;
+          });
+        });
+      });
+
+      // Remove from cluster list
+      util.forEach(deletedEdgeIds, function (edgeId) {
+        delete _this4.clusteredEdges[edgeId];
+      });
+
+      // Remove cluster edges from active list (this.body.edges).
+      // deletedEdgeIds still contains id of regular edges, but these should all
+      // be gone when you reach here.
+      util.forEach(deletedEdgeIds, function (edgeId) {
+        delete _this4.body.edges[edgeId];
+      });
+
+      //
+      // Check changed cluster state of edges
+      //
+
+      // Iterating over keys here, because edges may be removed in the loop
+      var ids = (0, _keys2['default'])(this.body.edges);
+      util.forEach(ids, function (edgeId) {
+        var edge = _this4.body.edges[edgeId];
+
+        var shouldBeClustered = _this4._isClusteredNode(edge.fromId) || _this4._isClusteredNode(edge.toId);
+        if (shouldBeClustered === _this4._isClusteredEdge(edge.id)) {
+          return; // all is well
+        }
+
+        if (shouldBeClustered) {
+          // add edge to clustering
+          var clusterFrom = _this4._getClusterNodeForNode(edge.fromId);
+          if (clusterFrom !== undefined) {
+            _this4._clusterEdges(_this4.body.nodes[edge.fromId], edge, clusterFrom);
+          }
+
+          var clusterTo = _this4._getClusterNodeForNode(edge.toId);
+          if (clusterTo !== undefined) {
+            _this4._clusterEdges(_this4.body.nodes[edge.toId], edge, clusterTo);
+          }
+
+          // TODO: check that it works for both edges clustered
+          //       (This might be paranoia)
+        } else {
+          // This should not be happening, the state should
+          // be properly updated at this point.
+          // 
+          // If it *is* reached during normal operation, then we have to implement
+          // undo clustering for this edge here.
+          throw new Error('remove edge from clustering not implemented!');
+        }
+      });
+
+      // Clusters may be nested to any level. Keep on opening until nothing to open
+      var changed = false;
+      var continueLoop = true;
+
+      var _loop2 = function _loop2() {
+        var clustersToOpen = [];
+
+        // Determine the id's of clusters that need opening
+        eachClusterNode(function (clusterNode) {
+          var numNodes = (0, _keys2['default'])(clusterNode.containedNodes).length;
+          var allowSingle = clusterNode.options.allowSingleNodeCluster === true;
+          if (allowSingle && numNodes < 1 || !allowSingle && numNodes < 2) {
+            clustersToOpen.push(clusterNode.id);
+          }
+        });
+
+        // Open them
+        for (var _n = 0; _n < clustersToOpen.length; ++_n) {
+          _this4.openCluster(clustersToOpen[_n], {}, false /* Don't refresh, we're in an refresh/update already */);
+        }
+
+        continueLoop = clustersToOpen.length > 0;
+        changed = changed || continueLoop;
+      };
+
+      while (continueLoop) {
+        _loop2();
+      }
+
+      if (changed) {
+        this._updateState(); // Redo this method (recursion possible! should be safe)
+      }
+    }
+
+    /**
+     * Determine if node with given id is part of a cluster.
+     *
+     * @param {Node.id} nodeId
+     * @return {boolean} true if part of a cluster.
+     */
+
+  }, {
+    key: '_isClusteredNode',
+    value: function _isClusteredNode(nodeId) {
+      return this.clusteredNodes[nodeId] !== undefined;
+    }
+
+    /**
+     * Determine if edge with given id is not visible due to clustering.
+     *
+     * An edge is considered clustered if:
+     * - it is directly replaced by a clustering edge
+     * - any of its connecting nodes is in a cluster
+     *
+     * @param {vis.Edge.id} edgeId
+     * @return {boolean} true if part of a cluster.
+     */
+
+  }, {
+    key: '_isClusteredEdge',
+    value: function _isClusteredEdge(edgeId) {
+      return this.clusteredEdges[edgeId] !== undefined;
+    }
+  }]);
+  return ClusterEngine;
+}();
+
+exports['default'] = ClusterEngine;
+
+/***/ }),
+/* 228 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+var util = __webpack_require__(2);
+var Node = __webpack_require__(47)["default"];
+
+/**
+ * A Cluster is a special Node that allows a group of Nodes positioned closely together
+ * to be represented by a single Cluster Node.
+ *
+ * @extends Node
+ */
+
+var Cluster = function (_Node) {
+  (0, _inherits3["default"])(Cluster, _Node);
+
+  /**
+   * @param {Object} options
+   * @param {Object} body
+   * @param {Array.<HTMLImageElement>}imagelist
+   * @param {Array} grouplist
+   * @param {Object} globalOptions
+   * @param {Object} defaultOptions     Global default options for nodes
+   */
+  function Cluster(options, body, imagelist, grouplist, globalOptions, defaultOptions) {
+    (0, _classCallCheck3["default"])(this, Cluster);
+
+    var _this = (0, _possibleConstructorReturn3["default"])(this, (Cluster.__proto__ || (0, _getPrototypeOf2["default"])(Cluster)).call(this, options, body, imagelist, grouplist, globalOptions, defaultOptions));
+
+    _this.isCluster = true;
+    _this.containedNodes = {};
+    _this.containedEdges = {};
+    return _this;
+  }
+
+  /**
+   * Transfer child cluster data to current and disconnect the child cluster.
+   *
+   * Please consult the header comment in 'Clustering.js' for the fields set here.
+   *
+   * @param {string|number} childClusterId  id of child cluster to open
+   */
+
+
+  (0, _createClass3["default"])(Cluster, [{
+    key: "_openChildCluster",
+    value: function _openChildCluster(childClusterId) {
+      var _this2 = this;
+
+      var childCluster = this.body.nodes[childClusterId];
+      if (this.containedNodes[childClusterId] === undefined) {
+        throw new Error('node with id: ' + childClusterId + ' not in current cluster');
+      }
+      if (!childCluster.isCluster) {
+        throw new Error('node with id: ' + childClusterId + ' is not a cluster');
+      }
+
+      // Disconnect child cluster from current cluster
+      delete this.containedNodes[childClusterId];
+      util.forEach(childCluster.edges, function (edge) {
+        delete _this2.containedEdges[edge.id];
+      });
+
+      // Transfer nodes and edges
+      util.forEach(childCluster.containedNodes, function (node, nodeId) {
+        _this2.containedNodes[nodeId] = node;
+      });
+      childCluster.containedNodes = {};
+
+      util.forEach(childCluster.containedEdges, function (edge, edgeId) {
+        _this2.containedEdges[edgeId] = edge;
+      });
+      childCluster.containedEdges = {};
+
+      // Transfer edges within cluster edges which are clustered
+      util.forEach(childCluster.edges, function (clusterEdge) {
+        util.forEach(_this2.edges, function (parentClusterEdge) {
+          // Assumption: a clustered edge can only be present in a single clustering edge
+          // Not tested here
+          var index = parentClusterEdge.clusteringEdgeReplacingIds.indexOf(clusterEdge.id);
+          if (index === -1) return;
+
+          util.forEach(clusterEdge.clusteringEdgeReplacingIds, function (srcId) {
+            parentClusterEdge.clusteringEdgeReplacingIds.push(srcId);
+
+            // Maintain correct bookkeeping for transferred edge
+            _this2.body.edges[srcId].edgeReplacedById = parentClusterEdge.id;
+          });
+
+          // Remove cluster edge from parent cluster edge
+          parentClusterEdge.clusteringEdgeReplacingIds.splice(index, 1);
+        });
+      });
+      childCluster.edges = [];
+    }
+  }]);
+  return Cluster;
+}(Node);
+
+exports["default"] = Cluster;
+
+/***/ }),
+/* 229 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * Initializes window.requestAnimationFrame() to a usable form.
+ *
+ * Specifically, set up this method for the case of running on node.js with jsdom enabled.
+ *
+ * NOTES:
+ *
+ * * On node.js, when calling this directly outside of this class, `window` is not defined.
+ *   This happens even if jsdom is used.
+ * * For node.js + jsdom, `window` is available at the moment the constructor is called.
+ *   For this reason, the called is placed within the constructor.
+ * * Even then, `window.requestAnimationFrame()` is not defined, so it still needs to be added.
+ * * During unit testing, it happens that the window object is reset during execution, causing
+ *   a runtime error due to missing `requestAnimationFrame()`. This needs to be compensated for,
+ *   see `_requestNextFrame()`.
+ * * Since this is a global object, it may affect other modules besides `Network`. With normal
+ *   usage, this does not cause any problems. During unit testing, errors may occur. These have
+ *   been compensated for, see comment block in _requestNextFrame().
+ *
+ * @private
+ */
+function _initRequestAnimationFrame() {
+  var func;
+
+  if (window !== undefined) {
+    func = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
+  }
+
+  if (func === undefined) {
+    // window or method not present, setting mock requestAnimationFrame
+    window.requestAnimationFrame = function (callback) {
+      //console.log("Called mock requestAnimationFrame");
+      callback();
+    };
+  } else {
+    window.requestAnimationFrame = func;
+  }
+}
+
+var util = __webpack_require__(2);
+
+/**
+ * The canvas renderer
+ */
+
+var CanvasRenderer = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   */
+  function CanvasRenderer(body, canvas) {
+    (0, _classCallCheck3["default"])(this, CanvasRenderer);
+
+    _initRequestAnimationFrame();
+    this.body = body;
+    this.canvas = canvas;
+
+    this.redrawRequested = false;
+    this.renderTimer = undefined;
+    this.requiresTimeout = true;
+    this.renderingActive = false;
+    this.renderRequests = 0;
+    this.allowRedraw = true;
+
+    this.dragging = false;
+    this.options = {};
+    this.defaultOptions = {
+      hideEdgesOnDrag: false,
+      hideNodesOnDrag: false
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this._determineBrowserMethod();
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3["default"])(CanvasRenderer, [{
+    key: "bindEventListeners",
+    value: function bindEventListeners() {
+      var _this = this;
+
+      this.body.emitter.on("dragStart", function () {
+        _this.dragging = true;
+      });
+      this.body.emitter.on("dragEnd", function () {
+        _this.dragging = false;
+      });
+      this.body.emitter.on("_resizeNodes", function () {
+        _this._resizeNodes();
+      });
+      this.body.emitter.on("_redraw", function () {
+        if (_this.renderingActive === false) {
+          _this._redraw();
+        }
+      });
+      this.body.emitter.on("_blockRedraw", function () {
+        _this.allowRedraw = false;
+      });
+      this.body.emitter.on("_allowRedraw", function () {
+        _this.allowRedraw = true;_this.redrawRequested = false;
+      });
+      this.body.emitter.on("_requestRedraw", this._requestRedraw.bind(this));
+      this.body.emitter.on("_startRendering", function () {
+        _this.renderRequests += 1;
+        _this.renderingActive = true;
+        _this._startRendering();
+      });
+      this.body.emitter.on("_stopRendering", function () {
+        _this.renderRequests -= 1;
+        _this.renderingActive = _this.renderRequests > 0;
+        _this.renderTimer = undefined;
+      });
+      this.body.emitter.on('destroy', function () {
+        _this.renderRequests = 0;
+        _this.allowRedraw = false;
+        _this.renderingActive = false;
+        if (_this.requiresTimeout === true) {
+          clearTimeout(_this.renderTimer);
+        } else {
+          window.cancelAnimationFrame(_this.renderTimer);
+        }
+        _this.body.emitter.off();
+      });
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: "setOptions",
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag'];
+        util.selectiveDeepExtend(fields, this.options, options);
+      }
+    }
+
+    /**
+     * Prepare the drawing of the next frame.
+     *
+     * Calls the callback when the next frame can or will be drawn.
+     *
+     * @param {function} callback
+     * @param {number} delay - timeout case only, wait this number of milliseconds
+     * @returns {function|undefined}
+     * @private
+     */
+
+  }, {
+    key: "_requestNextFrame",
+    value: function _requestNextFrame(callback, delay) {
+      // During unit testing, it happens that the mock window object is reset while
+      // the next frame is still pending. Then, either 'window' is not present, or
+      // 'requestAnimationFrame()' is not present because it is not defined on the
+      // mock window object.
+      //
+      // As a consequence, unrelated unit tests may appear to fail, even if the problem
+      // described happens in the current unit test.
+      //
+      // This is not something that will happen in normal operation, but we still need
+      // to take it into account.
+      //
+      if (typeof window === 'undefined') return; // Doing `if (window === undefined)` does not work here!
+
+      var timer = void 0;
+
+      var myWindow = window; // Grab a reference to reduce the possibility that 'window' is reset
+      // while running this method.
+
+      if (this.requiresTimeout === true) {
+        // wait given number of milliseconds and perform the animation step function
+        timer = myWindow.setTimeout(callback, delay);
+      } else {
+        if (myWindow.requestAnimationFrame) {
+          timer = myWindow.requestAnimationFrame(callback);
+        }
+      }
+
+      return timer;
+    }
+
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: "_startRendering",
+    value: function _startRendering() {
+      if (this.renderingActive === true) {
+        if (this.renderTimer === undefined) {
+          this.renderTimer = this._requestNextFrame(this._renderStep.bind(this), this.simulationInterval);
+        }
+      }
+    }
+
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: "_renderStep",
+    value: function _renderStep() {
+      if (this.renderingActive === true) {
+        // reset the renderTimer so a new scheduled animation step can be set
+        this.renderTimer = undefined;
+
+        if (this.requiresTimeout === true) {
+          // this schedules a new simulation step
+          this._startRendering();
+        }
+
+        this._redraw();
+
+        if (this.requiresTimeout === false) {
+          // this schedules a new simulation step
+          this._startRendering();
+        }
+      }
+    }
+
+    /**
+     * Redraw the network with the current data
+     * chart will be resized too.
+     */
+
+  }, {
+    key: "redraw",
+    value: function redraw() {
+      this.body.emitter.emit('setSize');
+      this._redraw();
+    }
+
+    /**
+     * Redraw the network with the current data
+     * @private
+     */
+
+  }, {
+    key: "_requestRedraw",
+    value: function _requestRedraw() {
+      var _this2 = this;
+
+      if (this.redrawRequested !== true && this.renderingActive === false && this.allowRedraw === true) {
+        this.redrawRequested = true;
+        this._requestNextFrame(function () {
+          _this2._redraw(false);
+        }, 0);
+      }
+    }
+
+    /**
+     * Redraw the network with the current data
+     * @param {boolean} [hidden=false] | Used to get the first estimate of the node sizes.
+     *                                   Only the nodes are drawn after which they are quickly drawn over.
+     * @private
+     */
+
+  }, {
+    key: "_redraw",
+    value: function _redraw() {
+      var hidden = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      if (this.allowRedraw === true) {
+        this.body.emitter.emit("initRedraw");
+
+        this.redrawRequested = false;
+
+        // when the container div was hidden, this fixes it back up!
+        if (this.canvas.frame.canvas.width === 0 || this.canvas.frame.canvas.height === 0) {
+          this.canvas.setSize();
+        }
+
+        this.canvas.setTransform();
+
+        var ctx = this.canvas.getContext();
+
+        // clear the canvas
+        var w = this.canvas.frame.canvas.clientWidth;
+        var h = this.canvas.frame.canvas.clientHeight;
+        ctx.clearRect(0, 0, w, h);
+
+        // if the div is hidden, we stop the redraw here for performance.
+        if (this.canvas.frame.clientWidth === 0) {
+          return;
+        }
+
+        // set scaling and translation
+        ctx.save();
+        ctx.translate(this.body.view.translation.x, this.body.view.translation.y);
+        ctx.scale(this.body.view.scale, this.body.view.scale);
+
+        ctx.beginPath();
+        this.body.emitter.emit("beforeDrawing", ctx);
+        ctx.closePath();
+
+        if (hidden === false) {
+          if (this.dragging === false || this.dragging === true && this.options.hideEdgesOnDrag === false) {
+            this._drawEdges(ctx);
+          }
+        }
+
+        if (this.dragging === false || this.dragging === true && this.options.hideNodesOnDrag === false) {
+          this._drawNodes(ctx, hidden);
+        }
+
+        ctx.beginPath();
+        this.body.emitter.emit("afterDrawing", ctx);
+        ctx.closePath();
+
+        // restore original scaling and translation
+        ctx.restore();
+        if (hidden === true) {
+          ctx.clearRect(0, 0, w, h);
+        }
+      }
+    }
+
+    /**
+     * Redraw all nodes
+     *
+     * @param {CanvasRenderingContext2D}   ctx
+     * @param {boolean} [alwaysShow]
+     * @private
+     */
+
+  }, {
+    key: "_resizeNodes",
+    value: function _resizeNodes() {
+      this.canvas.setTransform();
+      var ctx = this.canvas.getContext();
+      ctx.save();
+      ctx.translate(this.body.view.translation.x, this.body.view.translation.y);
+      ctx.scale(this.body.view.scale, this.body.view.scale);
+
+      var nodes = this.body.nodes;
+      var node = void 0;
+
+      // resize all nodes
+      for (var nodeId in nodes) {
+        if (nodes.hasOwnProperty(nodeId)) {
+          node = nodes[nodeId];
+          node.resize(ctx);
+          node.updateBoundingBox(ctx, node.selected);
+        }
+      }
+
+      // restore original scaling and translation
+      ctx.restore();
+    }
+
+    /**
+     * Redraw all nodes
+     *
+     * @param {CanvasRenderingContext2D} ctx  2D context of a HTML canvas
+     * @param {boolean} [alwaysShow]
+     * @private
+     */
+
+  }, {
+    key: "_drawNodes",
+    value: function _drawNodes(ctx) {
+      var alwaysShow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var nodes = this.body.nodes;
+      var nodeIndices = this.body.nodeIndices;
+      var node = void 0;
+      var selected = [];
+      var margin = 20;
+      var topLeft = this.canvas.DOMtoCanvas({ x: -margin, y: -margin });
+      var bottomRight = this.canvas.DOMtoCanvas({
+        x: this.canvas.frame.canvas.clientWidth + margin,
+        y: this.canvas.frame.canvas.clientHeight + margin
+      });
+      var viewableArea = { top: topLeft.y, left: topLeft.x, bottom: bottomRight.y, right: bottomRight.x };
+
+      // draw unselected nodes;
+      for (var i = 0; i < nodeIndices.length; i++) {
+        node = nodes[nodeIndices[i]];
+        // set selected nodes aside
+        if (node.isSelected()) {
+          selected.push(nodeIndices[i]);
+        } else {
+          if (alwaysShow === true) {
+            node.draw(ctx);
+          } else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {
+            node.draw(ctx);
+          } else {
+            node.updateBoundingBox(ctx, node.selected);
+          }
+        }
+      }
+
+      // draw the selected nodes on top
+      for (var _i = 0; _i < selected.length; _i++) {
+        node = nodes[selected[_i]];
+        node.draw(ctx);
+      }
+    }
+
+    /**
+     * Redraw all edges
+     * @param {CanvasRenderingContext2D} ctx  2D context of a HTML canvas
+     * @private
+     */
+
+  }, {
+    key: "_drawEdges",
+    value: function _drawEdges(ctx) {
+      var edges = this.body.edges;
+      var edgeIndices = this.body.edgeIndices;
+      var edge = void 0;
+
+      for (var i = 0; i < edgeIndices.length; i++) {
+        edge = edges[edgeIndices[i]];
+        if (edge.connected === true) {
+          edge.draw(ctx);
+        }
+      }
+    }
+
+    /**
+     * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because
+     * some implementations (safari and IE9) did not support requestAnimationFrame
+     * @private
+     */
+
+  }, {
+    key: "_determineBrowserMethod",
+    value: function _determineBrowserMethod() {
+      if (typeof window !== 'undefined') {
+        var browserType = navigator.userAgent.toLowerCase();
+        this.requiresTimeout = false;
+        if (browserType.indexOf('msie 9.0') != -1) {
+          // IE 9
+          this.requiresTimeout = true;
+        } else if (browserType.indexOf('safari') != -1) {
+          // safari
+          if (browserType.indexOf('chrome') <= -1) {
+            this.requiresTimeout = true;
+          }
+        }
+      } else {
+        this.requiresTimeout = true;
+      }
+    }
+  }]);
+  return CanvasRenderer;
+}();
+
+exports["default"] = CanvasRenderer;
+
+/***/ }),
+/* 230 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Hammer = __webpack_require__(10);
+var hammerUtil = __webpack_require__(37);
+
+var util = __webpack_require__(2);
+
+/**
+ * Create the main frame for the Network.
+ * This function is executed once when a Network object is created. The frame
+ * contains a canvas, and this canvas contains all objects like the axis and
+ * nodes.
+ */
+
+var Canvas = function () {
+  /**
+   * @param {Object} body
+   */
+  function Canvas(body) {
+    (0, _classCallCheck3['default'])(this, Canvas);
+
+    this.body = body;
+    this.pixelRatio = 1;
+    this.resizeTimer = undefined;
+    this.resizeFunction = this._onResize.bind(this);
+    this.cameraState = {};
+    this.initialized = false;
+    this.canvasViewCenter = {};
+
+    this.options = {};
+    this.defaultOptions = {
+      autoResize: true,
+      height: '100%',
+      width: '100%'
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(Canvas, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this = this;
+
+      // bind the events
+      this.body.emitter.once("resize", function (obj) {
+        if (obj.width !== 0) {
+          _this.body.view.translation.x = obj.width * 0.5;
+        }
+        if (obj.height !== 0) {
+          _this.body.view.translation.y = obj.height * 0.5;
+        }
+      });
+      this.body.emitter.on("setSize", this.setSize.bind(this));
+      this.body.emitter.on("destroy", function () {
+        _this.hammerFrame.destroy();
+        _this.hammer.destroy();
+        _this._cleanUp();
+      });
+    }
+
+    /**
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      var _this2 = this;
+
+      if (options !== undefined) {
+        var fields = ['width', 'height', 'autoResize'];
+        util.selectiveDeepExtend(fields, this.options, options);
+      }
+
+      if (this.options.autoResize === true) {
+        // automatically adapt to a changing size of the browser.
+        this._cleanUp();
+        this.resizeTimer = setInterval(function () {
+          var changed = _this2.setSize();
+          if (changed === true) {
+            _this2.body.emitter.emit("_requestRedraw");
+          }
+        }, 1000);
+        this.resizeFunction = this._onResize.bind(this);
+        util.addEventListener(window, 'resize', this.resizeFunction);
+      }
+    }
+
+    /**
+     * @private
+     */
+
+  }, {
+    key: '_cleanUp',
+    value: function _cleanUp() {
+      // automatically adapt to a changing size of the browser.
+      if (this.resizeTimer !== undefined) {
+        clearInterval(this.resizeTimer);
+      }
+      util.removeEventListener(window, 'resize', this.resizeFunction);
+      this.resizeFunction = undefined;
+    }
+
+    /**
+     * @private
+     */
+
+  }, {
+    key: '_onResize',
+    value: function _onResize() {
+      this.setSize();
+      this.body.emitter.emit("_redraw");
+    }
+
+    /**
+     * Get and store the cameraState
+     *
+     * @param {number} [pixelRatio=this.pixelRatio]
+     * @private
+     */
+
+  }, {
+    key: '_getCameraState',
+    value: function _getCameraState() {
+      var pixelRatio = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.pixelRatio;
+
+      if (this.initialized === true) {
+        this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;
+        this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;
+        this.cameraState.scale = this.body.view.scale;
+        this.cameraState.position = this.DOMtoCanvas({
+          x: 0.5 * this.frame.canvas.width / pixelRatio,
+          y: 0.5 * this.frame.canvas.height / pixelRatio
+        });
+      }
+    }
+
+    /**
+     * Set the cameraState
+     * @private
+     */
+
+  }, {
+    key: '_setCameraState',
+    value: function _setCameraState() {
+      if (this.cameraState.scale !== undefined && this.frame.canvas.clientWidth !== 0 && this.frame.canvas.clientHeight !== 0 && this.pixelRatio !== 0 && this.cameraState.previousWidth > 0) {
+
+        var widthRatio = this.frame.canvas.width / this.pixelRatio / this.cameraState.previousWidth;
+        var heightRatio = this.frame.canvas.height / this.pixelRatio / this.cameraState.previousHeight;
+        var newScale = this.cameraState.scale;
+
+        if (widthRatio != 1 && heightRatio != 1) {
+          newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);
+        } else if (widthRatio != 1) {
+          newScale = this.cameraState.scale * widthRatio;
+        } else if (heightRatio != 1) {
+          newScale = this.cameraState.scale * heightRatio;
+        }
+
+        this.body.view.scale = newScale;
+        // this comes from the view module.
+        var currentViewCenter = this.DOMtoCanvas({
+          x: 0.5 * this.frame.canvas.clientWidth,
+          y: 0.5 * this.frame.canvas.clientHeight
+        });
+
+        var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node
+          x: currentViewCenter.x - this.cameraState.position.x,
+          y: currentViewCenter.y - this.cameraState.position.y
+        };
+        this.body.view.translation.x += distanceFromCenter.x * this.body.view.scale;
+        this.body.view.translation.y += distanceFromCenter.y * this.body.view.scale;
+      }
+    }
+
+    /**
+     *
+     * @param {number|string} value
+     * @returns {string}
+     * @private
+     */
+
+  }, {
+    key: '_prepareValue',
+    value: function _prepareValue(value) {
+      if (typeof value === 'number') {
+        return value + 'px';
+      } else if (typeof value === 'string') {
+        if (value.indexOf('%') !== -1 || value.indexOf('px') !== -1) {
+          return value;
+        } else if (value.indexOf('%') === -1) {
+          return value + 'px';
+        }
+      }
+      throw new Error('Could not use the value supplied for width or height:' + value);
+    }
+
+    /**
+     * Create the HTML
+     */
+
+  }, {
+    key: '_create',
+    value: function _create() {
+      // remove all elements from the container element.
+      while (this.body.container.hasChildNodes()) {
+        this.body.container.removeChild(this.body.container.firstChild);
+      }
+
+      this.frame = document.createElement('div');
+      this.frame.className = 'vis-network';
+      this.frame.style.position = 'relative';
+      this.frame.style.overflow = 'hidden';
+      this.frame.tabIndex = 900; // tab index is required for keycharm to bind keystrokes to the div instead of the window
+
+      //////////////////////////////////////////////////////////////////
+
+      this.frame.canvas = document.createElement("canvas");
+      this.frame.canvas.style.position = 'relative';
+      this.frame.appendChild(this.frame.canvas);
+
+      if (!this.frame.canvas.getContext) {
+        var noCanvas = document.createElement('DIV');
+        noCanvas.style.color = 'red';
+        noCanvas.style.fontWeight = 'bold';
+        noCanvas.style.padding = '10px';
+        noCanvas.innerHTML = 'Error: your browser does not support HTML canvas';
+        this.frame.canvas.appendChild(noCanvas);
+      } else {
+        this._setPixelRatio();
+        this.setTransform();
+      }
+
+      // add the frame to the container element
+      this.body.container.appendChild(this.frame);
+
+      this.body.view.scale = 1;
+      this.body.view.translation = { x: 0.5 * this.frame.canvas.clientWidth, y: 0.5 * this.frame.canvas.clientHeight };
+
+      this._bindHammer();
+    }
+
+    /**
+     * This function binds hammer, it can be repeated over and over due to the uniqueness check.
+     * @private
+     */
+
+  }, {
+    key: '_bindHammer',
+    value: function _bindHammer() {
+      var _this3 = this;
+
+      if (this.hammer !== undefined) {
+        this.hammer.destroy();
+      }
+      this.drag = {};
+      this.pinch = {};
+
+      // init hammer
+      this.hammer = new Hammer(this.frame.canvas);
+      this.hammer.get('pinch').set({ enable: true });
+      // enable to get better response, todo: test on mobile.
+      this.hammer.get('pan').set({ threshold: 5, direction: Hammer.DIRECTION_ALL });
+
+      hammerUtil.onTouch(this.hammer, function (event) {
+        _this3.body.eventListeners.onTouch(event);
+      });
+      this.hammer.on('tap', function (event) {
+        _this3.body.eventListeners.onTap(event);
+      });
+      this.hammer.on('doubletap', function (event) {
+        _this3.body.eventListeners.onDoubleTap(event);
+      });
+      this.hammer.on('press', function (event) {
+        _this3.body.eventListeners.onHold(event);
+      });
+      this.hammer.on('panstart', function (event) {
+        _this3.body.eventListeners.onDragStart(event);
+      });
+      this.hammer.on('panmove', function (event) {
+        _this3.body.eventListeners.onDrag(event);
+      });
+      this.hammer.on('panend', function (event) {
+        _this3.body.eventListeners.onDragEnd(event);
+      });
+      this.hammer.on('pinch', function (event) {
+        _this3.body.eventListeners.onPinch(event);
+      });
+
+      // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?
+      this.frame.canvas.addEventListener('mousewheel', function (event) {
+        _this3.body.eventListeners.onMouseWheel(event);
+      });
+      this.frame.canvas.addEventListener('DOMMouseScroll', function (event) {
+        _this3.body.eventListeners.onMouseWheel(event);
+      });
+
+      this.frame.canvas.addEventListener('mousemove', function (event) {
+        _this3.body.eventListeners.onMouseMove(event);
+      });
+      this.frame.canvas.addEventListener('contextmenu', function (event) {
+        _this3.body.eventListeners.onContext(event);
+      });
+
+      this.hammerFrame = new Hammer(this.frame);
+      hammerUtil.onRelease(this.hammerFrame, function (event) {
+        _this3.body.eventListeners.onRelease(event);
+      });
+    }
+
+    /**
+     * Set a new size for the network
+     * @param {string} width   Width in pixels or percentage (for example '800px'
+     *                         or '50%')
+     * @param {string} height  Height in pixels or percentage  (for example '400px'
+     *                         or '30%')
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'setSize',
+    value: function setSize() {
+      var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.width;
+      var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.height;
+
+      width = this._prepareValue(width);
+      height = this._prepareValue(height);
+
+      var emitEvent = false;
+      var oldWidth = this.frame.canvas.width;
+      var oldHeight = this.frame.canvas.height;
+
+      // update the pixel ratio
+      //
+      // NOTE: Comment in following is rather inconsistent; this is the ONLY place in the code
+      //       where it is assumed that the pixel ratio could change at runtime.
+      //       The only way I can think of this happening is a rotating screen or tablet; but then
+      //       there should be a mechanism for reloading the data (TODO: check if this is present).
+      //
+      //       If the assumption is true (i.e. pixel ratio can change at runtime), then *all* usage
+      //       of pixel ratio must be overhauled for this.
+      //
+      //       For the time being, I will humor the assumption here, and in the rest of the code assume it is
+      //       constant.
+      var previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value
+      this._setPixelRatio();
+
+      if (width != this.options.width || height != this.options.height || this.frame.style.width != width || this.frame.style.height != height) {
+        this._getCameraState(previousRatio);
+
+        this.frame.style.width = width;
+        this.frame.style.height = height;
+
+        this.frame.canvas.style.width = '100%';
+        this.frame.canvas.style.height = '100%';
+
+        this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);
+        this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);
+
+        this.options.width = width;
+        this.options.height = height;
+
+        this.canvasViewCenter = {
+          x: 0.5 * this.frame.clientWidth,
+          y: 0.5 * this.frame.clientHeight
+        };
+
+        emitEvent = true;
+      } else {
+        // this would adapt the width of the canvas to the width from 100% if and only if
+        // there is a change.
+
+        var newWidth = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);
+        var newHeight = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);
+
+        // store the camera if there is a change in size.
+        if (this.frame.canvas.width !== newWidth || this.frame.canvas.height !== newHeight) {
+          this._getCameraState(previousRatio);
+        }
+
+        if (this.frame.canvas.width !== newWidth) {
+          this.frame.canvas.width = newWidth;
+          emitEvent = true;
+        }
+        if (this.frame.canvas.height !== newHeight) {
+          this.frame.canvas.height = newHeight;
+          emitEvent = true;
+        }
+      }
+
+      if (emitEvent === true) {
+        this.body.emitter.emit('resize', {
+          width: Math.round(this.frame.canvas.width / this.pixelRatio),
+          height: Math.round(this.frame.canvas.height / this.pixelRatio),
+          oldWidth: Math.round(oldWidth / this.pixelRatio),
+          oldHeight: Math.round(oldHeight / this.pixelRatio)
+        });
+
+        // restore the camera on change.
+        this._setCameraState();
+      }
+
+      // set initialized so the get and set camera will work from now on.
+      this.initialized = true;
+      return emitEvent;
+    }
+
+    /**
+     *
+     * @returns {CanvasRenderingContext2D}
+     */
+
+  }, {
+    key: 'getContext',
+    value: function getContext() {
+      return this.frame.canvas.getContext("2d");
+    }
+
+    /**
+     * Determine the pixel ratio for various browsers.
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_determinePixelRatio',
+    value: function _determinePixelRatio() {
+      var ctx = this.getContext();
+      if (ctx === undefined) {
+        throw new Error("Could not get canvax context");
+      }
+
+      var numerator = 1;
+      if (typeof window !== 'undefined') {
+        // (window !== undefined) doesn't work here!
+        // Protection during unit tests, where 'window' can be missing
+        numerator = window.devicePixelRatio || 1;
+      }
+
+      var denominator = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
+
+      return numerator / denominator;
+    }
+
+    /**
+     * Lazy determination of pixel ratio.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_setPixelRatio',
+    value: function _setPixelRatio() {
+      this.pixelRatio = this._determinePixelRatio();
+    }
+
+    /**
+     * Set the transform in the contained context, based on its pixelRatio
+     */
+
+  }, {
+    key: 'setTransform',
+    value: function setTransform() {
+      var ctx = this.getContext();
+      if (ctx === undefined) {
+        throw new Error("Could not get canvax context");
+      }
+
+      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);
+    }
+
+    /**
+     * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to
+     * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)
+     * @param {number} x
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_XconvertDOMtoCanvas',
+    value: function _XconvertDOMtoCanvas(x) {
+      return (x - this.body.view.translation.x) / this.body.view.scale;
+    }
+
+    /**
+     * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to
+     * the X coordinate in DOM-space (coordinate point in browser relative to the container div)
+     * @param {number} x
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_XconvertCanvasToDOM',
+    value: function _XconvertCanvasToDOM(x) {
+      return x * this.body.view.scale + this.body.view.translation.x;
+    }
+
+    /**
+     * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to
+     * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)
+     * @param {number} y
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_YconvertDOMtoCanvas',
+    value: function _YconvertDOMtoCanvas(y) {
+      return (y - this.body.view.translation.y) / this.body.view.scale;
+    }
+
+    /**
+     * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to
+     * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)
+     * @param {number} y
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_YconvertCanvasToDOM',
+    value: function _YconvertCanvasToDOM(y) {
+      return y * this.body.view.scale + this.body.view.translation.y;
+    }
+
+    /**
+     * @param {point} pos
+     * @returns {point}
+     */
+
+  }, {
+    key: 'canvasToDOM',
+    value: function canvasToDOM(pos) {
+      return { x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y) };
+    }
+
+    /**
+     *
+     * @param {point} pos
+     * @returns {point}
+     */
+
+  }, {
+    key: 'DOMtoCanvas',
+    value: function DOMtoCanvas(pos) {
+      return { x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y) };
+    }
+  }]);
+  return Canvas;
+}();
+
+exports['default'] = Canvas;
+
+/***/ }),
+/* 231 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+
+var NetworkUtil = __webpack_require__(76)['default'];
+
+/**
+ * The view
+ */
+
+var View = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   */
+  function View(body, canvas) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, View);
+
+    this.body = body;
+    this.canvas = canvas;
+
+    this.animationSpeed = 1 / this.renderRefreshRate;
+    this.animationEasingFunction = "easeInOutQuint";
+    this.easingTime = 0;
+    this.sourceScale = 0;
+    this.targetScale = 0;
+    this.sourceTranslation = 0;
+    this.targetTranslation = 0;
+    this.lockedOnNodeId = undefined;
+    this.lockedOnNodeOffset = undefined;
+    this.touchTime = 0;
+
+    this.viewFunction = undefined;
+
+    this.body.emitter.on("fit", this.fit.bind(this));
+    this.body.emitter.on("animationFinished", function () {
+      _this.body.emitter.emit("_stopRendering");
+    });
+    this.body.emitter.on("unlockNode", this.releaseNode.bind(this));
+  }
+
+  /**
+   *
+   * @param {Object} [options={}]
+   */
+
+
+  (0, _createClass3['default'])(View, [{
+    key: 'setOptions',
+    value: function setOptions() {
+      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+      this.options = options;
+    }
+
+    /**
+     * This function zooms out to fit all data on screen based on amount of nodes
+     * @param {Object} [options={{nodes=Array}}]
+     * @param {boolean} [initialZoom=false]  | zoom based on fitted formula or range, true = fitted, default = false;
+     */
+
+  }, {
+    key: 'fit',
+    value: function fit() {
+      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { nodes: [] };
+      var initialZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+
+      var range = void 0;
+      var zoomLevel = void 0;
+      if (options.nodes === undefined || options.nodes.length === 0) {
+        options.nodes = this.body.nodeIndices;
+      }
+
+      if (initialZoom === true) {
+        // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.
+        var positionDefined = 0;
+        for (var nodeId in this.body.nodes) {
+          if (this.body.nodes.hasOwnProperty(nodeId)) {
+            var node = this.body.nodes[nodeId];
+            if (node.predefinedPosition === true) {
+              positionDefined += 1;
+            }
+          }
+        }
+        if (positionDefined > 0.5 * this.body.nodeIndices.length) {
+          this.fit(options, false);
+          return;
+        }
+
+        range = NetworkUtil.getRange(this.body.nodes, options.nodes);
+
+        var numberOfNodes = this.body.nodeIndices.length;
+        zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.
+
+        // correct for larger canvasses.
+        var factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600);
+        zoomLevel *= factor;
+      } else {
+        this.body.emitter.emit("_resizeNodes");
+        range = NetworkUtil.getRange(this.body.nodes, options.nodes);
+
+        var xDistance = Math.abs(range.maxX - range.minX) * 1.1;
+        var yDistance = Math.abs(range.maxY - range.minY) * 1.1;
+
+        var xZoomLevel = this.canvas.frame.canvas.clientWidth / xDistance;
+        var yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance;
+
+        zoomLevel = xZoomLevel <= yZoomLevel ? xZoomLevel : yZoomLevel;
+      }
+
+      if (zoomLevel > 1.0) {
+        zoomLevel = 1.0;
+      } else if (zoomLevel === 0) {
+        zoomLevel = 1.0;
+      }
+
+      var center = NetworkUtil.findCenter(range);
+      var animationOptions = { position: center, scale: zoomLevel, animation: options.animation };
+      this.moveTo(animationOptions);
+    }
+
+    // animation
+
+    /**
+     * Center a node in view.
+     *
+     * @param {number} nodeId
+     * @param {number} [options]
+     */
+
+  }, {
+    key: 'focus',
+    value: function focus(nodeId) {
+      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+      if (this.body.nodes[nodeId] !== undefined) {
+        var nodePosition = { x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y };
+        options.position = nodePosition;
+        options.lockedOnNode = nodeId;
+
+        this.moveTo(options);
+      } else {
+        console.log("Node: " + nodeId + " cannot be found.");
+      }
+    }
+
+    /**
+     *
+     * @param {Object} options  |  options.offset   = {x:number, y:number}   // offset from the center in DOM pixels
+     *                          |  options.scale    = number                 // scale to move to
+     *                          |  options.position = {x:number, y:number}   // position to move to
+     *                          |  options.animation = {duration:number, easingFunction:String} || Boolean   // position to move to
+     */
+
+  }, {
+    key: 'moveTo',
+    value: function moveTo(options) {
+      if (options === undefined) {
+        options = {};
+        return;
+      }
+      if (options.offset === undefined) {
+        options.offset = { x: 0, y: 0 };
+      }
+      if (options.offset.x === undefined) {
+        options.offset.x = 0;
+      }
+      if (options.offset.y === undefined) {
+        options.offset.y = 0;
+      }
+      if (options.scale === undefined) {
+        options.scale = this.body.view.scale;
+      }
+      if (options.position === undefined) {
+        options.position = this.getViewPosition();
+      }
+      if (options.animation === undefined) {
+        options.animation = { duration: 0 };
+      }
+      if (options.animation === false) {
+        options.animation = { duration: 0 };
+      }
+      if (options.animation === true) {
+        options.animation = {};
+      }
+      if (options.animation.duration === undefined) {
+        options.animation.duration = 1000;
+      } // default duration
+      if (options.animation.easingFunction === undefined) {
+        options.animation.easingFunction = "easeInOutQuad";
+      } // default easing function
+
+      this.animateView(options);
+    }
+
+    /**
+     *
+     * @param {Object} options  |  options.offset   = {x:number, y:number}   // offset from the center in DOM pixels
+     *                          |  options.time     = number                 // animation time in milliseconds
+     *                          |  options.scale    = number                 // scale to animate to
+     *                          |  options.position = {x:number, y:number}   // position to animate to
+     *                          |  options.easingFunction = String           // linear, easeInQuad, easeOutQuad, easeInOutQuad,
+     *                                                                       // easeInCubic, easeOutCubic, easeInOutCubic,
+     *                                                                       // easeInQuart, easeOutQuart, easeInOutQuart,
+     *                                                                       // easeInQuint, easeOutQuint, easeInOutQuint
+     */
+
+  }, {
+    key: 'animateView',
+    value: function animateView(options) {
+      if (options === undefined) {
+        return;
+      }
+      this.animationEasingFunction = options.animation.easingFunction;
+      // release if something focussed on the node
+      this.releaseNode();
+      if (options.locked === true) {
+        this.lockedOnNodeId = options.lockedOnNode;
+        this.lockedOnNodeOffset = options.offset;
+      }
+
+      // forcefully complete the old animation if it was still running
+      if (this.easingTime != 0) {
+        this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.
+      }
+
+      this.sourceScale = this.body.view.scale;
+      this.sourceTranslation = this.body.view.translation;
+      this.targetScale = options.scale;
+
+      // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw
+      // but at least then we'll have the target transition
+      this.body.view.scale = this.targetScale;
+      var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight });
+
+      var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node
+        x: viewCenter.x - options.position.x,
+        y: viewCenter.y - options.position.y
+      };
+      this.targetTranslation = {
+        x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x,
+        y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y
+      };
+
+      // if the time is set to 0, don't do an animation
+      if (options.animation.duration === 0) {
+        if (this.lockedOnNodeId != undefined) {
+          this.viewFunction = this._lockedRedraw.bind(this);
+          this.body.emitter.on("initRedraw", this.viewFunction);
+        } else {
+          this.body.view.scale = this.targetScale;
+          this.body.view.translation = this.targetTranslation;
+          this.body.emitter.emit("_requestRedraw");
+        }
+      } else {
+        this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's
+        this.animationEasingFunction = options.animation.easingFunction;
+
+        this.viewFunction = this._transitionRedraw.bind(this);
+        this.body.emitter.on("initRedraw", this.viewFunction);
+        this.body.emitter.emit("_startRendering");
+      }
+    }
+
+    /**
+     * used to animate smoothly by hijacking the redraw function.
+     * @private
+     */
+
+  }, {
+    key: '_lockedRedraw',
+    value: function _lockedRedraw() {
+      var nodePosition = { x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y };
+      var viewCenter = this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight });
+      var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node
+        x: viewCenter.x - nodePosition.x,
+        y: viewCenter.y - nodePosition.y
+      };
+      var sourceTranslation = this.body.view.translation;
+      var targetTranslation = {
+        x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x,
+        y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y
+      };
+
+      this.body.view.translation = targetTranslation;
+    }
+
+    /**
+     * Resets state of a locked on Node
+     */
+
+  }, {
+    key: 'releaseNode',
+    value: function releaseNode() {
+      if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {
+        this.body.emitter.off("initRedraw", this.viewFunction);
+        this.lockedOnNodeId = undefined;
+        this.lockedOnNodeOffset = undefined;
+      }
+    }
+
+    /**
+     * @param {boolean} [finished=false]
+     * @private
+     */
+
+  }, {
+    key: '_transitionRedraw',
+    value: function _transitionRedraw() {
+      var finished = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+
+      this.easingTime += this.animationSpeed;
+      this.easingTime = finished === true ? 1.0 : this.easingTime;
+
+      var progress = util.easingFunctions[this.animationEasingFunction](this.easingTime);
+
+      this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress;
+      this.body.view.translation = {
+        x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress,
+        y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress
+      };
+
+      // cleanup
+      if (this.easingTime >= 1.0) {
+        this.body.emitter.off("initRedraw", this.viewFunction);
+        this.easingTime = 0;
+        if (this.lockedOnNodeId != undefined) {
+          this.viewFunction = this._lockedRedraw.bind(this);
+          this.body.emitter.on("initRedraw", this.viewFunction);
+        }
+        this.body.emitter.emit("animationFinished");
+      }
+    }
+
+    /**
+     *
+     * @returns {number}
+     */
+
+  }, {
+    key: 'getScale',
+    value: function getScale() {
+      return this.body.view.scale;
+    }
+
+    /**
+     *
+     * @returns {{x: number, y: number}}
+     */
+
+  }, {
+    key: 'getViewPosition',
+    value: function getViewPosition() {
+      return this.canvas.DOMtoCanvas({ x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight });
+    }
+  }]);
+  return View;
+}();
+
+exports['default'] = View;
+
+/***/ }),
+/* 232 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var NavigationHandler = __webpack_require__(233)['default'];
+var Popup = __webpack_require__(104)['default'];
+
+/**
+ * Handler for interactions
+ */
+
+var InteractionHandler = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   * @param {SelectionHandler} selectionHandler
+   */
+  function InteractionHandler(body, canvas, selectionHandler) {
+    (0, _classCallCheck3['default'])(this, InteractionHandler);
+
+    this.body = body;
+    this.canvas = canvas;
+    this.selectionHandler = selectionHandler;
+    this.navigationHandler = new NavigationHandler(body, canvas);
+
+    // bind the events from hammer to functions in this object
+    this.body.eventListeners.onTap = this.onTap.bind(this);
+    this.body.eventListeners.onTouch = this.onTouch.bind(this);
+    this.body.eventListeners.onDoubleTap = this.onDoubleTap.bind(this);
+    this.body.eventListeners.onHold = this.onHold.bind(this);
+    this.body.eventListeners.onDragStart = this.onDragStart.bind(this);
+    this.body.eventListeners.onDrag = this.onDrag.bind(this);
+    this.body.eventListeners.onDragEnd = this.onDragEnd.bind(this);
+    this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);
+    this.body.eventListeners.onPinch = this.onPinch.bind(this);
+    this.body.eventListeners.onMouseMove = this.onMouseMove.bind(this);
+    this.body.eventListeners.onRelease = this.onRelease.bind(this);
+    this.body.eventListeners.onContext = this.onContext.bind(this);
+
+    this.touchTime = 0;
+    this.drag = {};
+    this.pinch = {};
+    this.popup = undefined;
+    this.popupObj = undefined;
+    this.popupTimer = undefined;
+
+    this.body.functions.getPointer = this.getPointer.bind(this);
+
+    this.options = {};
+    this.defaultOptions = {
+      dragNodes: true,
+      dragView: true,
+      hover: false,
+      keyboard: {
+        enabled: false,
+        speed: { x: 10, y: 10, zoom: 0.02 },
+        bindToWindow: true
+      },
+      navigationButtons: false,
+      tooltipDelay: 300,
+      zoomView: true
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(InteractionHandler, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this = this;
+
+      this.body.emitter.on('destroy', function () {
+        clearTimeout(_this.popupTimer);
+        delete _this.body.functions.getPointer;
+      });
+    }
+
+    /**
+     *
+     * @param {Object} options
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        // extend all but the values in fields
+        var fields = ['hideEdgesOnDrag', 'hideNodesOnDrag', 'keyboard', 'multiselect', 'selectable', 'selectConnectedEdges'];
+        util.selectiveNotDeepExtend(fields, this.options, options);
+
+        // merge the keyboard options in.
+        util.mergeOptions(this.options, options, 'keyboard');
+
+        if (options.tooltip) {
+          util.extend(this.options.tooltip, options.tooltip);
+          if (options.tooltip.color) {
+            this.options.tooltip.color = util.parseColor(options.tooltip.color);
+          }
+        }
+      }
+
+      this.navigationHandler.setOptions(this.options);
+    }
+
+    /**
+     * Get the pointer location from a touch location
+     * @param {{x: number, y: number}} touch
+     * @return {{x: number, y: number}} pointer
+     * @private
+     */
+
+  }, {
+    key: 'getPointer',
+    value: function getPointer(touch) {
+      return {
+        x: touch.x - util.getAbsoluteLeft(this.canvas.frame.canvas),
+        y: touch.y - util.getAbsoluteTop(this.canvas.frame.canvas)
+      };
+    }
+
+    /**
+     * On start of a touch gesture, store the pointer
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: 'onTouch',
+    value: function onTouch(event) {
+      if (new Date().valueOf() - this.touchTime > 50) {
+        this.drag.pointer = this.getPointer(event.center);
+        this.drag.pinched = false;
+        this.pinch.scale = this.body.view.scale;
+        // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)
+        this.touchTime = new Date().valueOf();
+      }
+    }
+
+    /**
+     * handle tap/click event: select/unselect a node
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onTap',
+    value: function onTap(event) {
+      var pointer = this.getPointer(event.center);
+      var multiselect = this.selectionHandler.options.multiselect && (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);
+
+      this.checkSelectionChanges(pointer, event, multiselect);
+      this.selectionHandler._generateClickEvent('click', event, pointer);
+    }
+
+    /**
+     * handle doubletap event
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onDoubleTap',
+    value: function onDoubleTap(event) {
+      var pointer = this.getPointer(event.center);
+      this.selectionHandler._generateClickEvent('doubleClick', event, pointer);
+    }
+
+    /**
+     * handle long tap event: multi select nodes
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onHold',
+    value: function onHold(event) {
+      var pointer = this.getPointer(event.center);
+      var multiselect = this.selectionHandler.options.multiselect;
+
+      this.checkSelectionChanges(pointer, event, multiselect);
+
+      this.selectionHandler._generateClickEvent('click', event, pointer);
+      this.selectionHandler._generateClickEvent('hold', event, pointer);
+    }
+
+    /**
+     * handle the release of the screen
+     *
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onRelease',
+    value: function onRelease(event) {
+      if (new Date().valueOf() - this.touchTime > 10) {
+        var pointer = this.getPointer(event.center);
+        this.selectionHandler._generateClickEvent('release', event, pointer);
+        // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)
+        this.touchTime = new Date().valueOf();
+      }
+    }
+
+    /**
+     *
+     * @param {Event} event
+     */
+
+  }, {
+    key: 'onContext',
+    value: function onContext(event) {
+      var pointer = this.getPointer({ x: event.clientX, y: event.clientY });
+      this.selectionHandler._generateClickEvent('oncontext', event, pointer);
+    }
+
+    /**
+     * Select and deselect nodes depending current selection change.
+     *
+     * For changing nodes, select/deselect events are fired.
+     *
+     * NOTE: For a given edge, if one connecting node is deselected and with the same
+     *       click the other node is selected, no events for the edge will fire.
+     *       It was selected and it will remain selected.
+     *
+     * TODO: This is all SelectionHandler calls; the method should be moved to there.
+     *
+     * @param {{x: number, y: number}} pointer
+     * @param {Event} event
+     * @param {boolean} [add=false]
+     */
+
+  }, {
+    key: 'checkSelectionChanges',
+    value: function checkSelectionChanges(pointer, event) {
+      var add = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      var previousSelection = this.selectionHandler.getSelection();
+      var selected = false;
+      if (add === true) {
+        selected = this.selectionHandler.selectAdditionalOnPoint(pointer);
+      } else {
+        selected = this.selectionHandler.selectOnPoint(pointer);
+      }
+      var currentSelection = this.selectionHandler.getSelection();
+
+      // See NOTE in method comment for the reason to do it like this
+      var deselectedItems = this._determineDifference(previousSelection, currentSelection);
+      var selectedItems = this._determineDifference(currentSelection, previousSelection);
+
+      if (deselectedItems.edges.length > 0) {
+        this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection);
+        selected = true;
+      }
+
+      if (deselectedItems.nodes.length > 0) {
+        this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection);
+        selected = true;
+      }
+
+      if (selectedItems.nodes.length > 0) {
+        this.selectionHandler._generateClickEvent('selectNode', event, pointer);
+        selected = true;
+      }
+
+      if (selectedItems.edges.length > 0) {
+        this.selectionHandler._generateClickEvent('selectEdge', event, pointer);
+        selected = true;
+      }
+
+      // fire the select event if anything has been selected or deselected
+      if (selected === true) {
+        // select or unselect
+        this.selectionHandler._generateClickEvent('select', event, pointer);
+      }
+    }
+
+    /**
+     * Remove all node and edge id's from the first set that are present in the second one.
+     *
+     * @param {{nodes: Array.<Node>, edges: Array.<vis.Edge>}} firstSet
+     * @param {{nodes: Array.<Node>, edges: Array.<vis.Edge>}} secondSet
+     * @returns {{nodes: Array.<Node>, edges: Array.<vis.Edge>}}
+     * @private
+     */
+
+  }, {
+    key: '_determineDifference',
+    value: function _determineDifference(firstSet, secondSet) {
+      var arrayDiff = function arrayDiff(firstArr, secondArr) {
+        var result = [];
+
+        for (var i = 0; i < firstArr.length; i++) {
+          var value = firstArr[i];
+          if (secondArr.indexOf(value) === -1) {
+            result.push(value);
+          }
+        }
+
+        return result;
+      };
+
+      return {
+        nodes: arrayDiff(firstSet.nodes, secondSet.nodes),
+        edges: arrayDiff(firstSet.edges, secondSet.edges)
+      };
+    }
+
+    /**
+     * This function is called by onDragStart.
+     * It is separated out because we can then overload it for the datamanipulation system.
+     *
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onDragStart',
+    value: function onDragStart(event) {
+      //in case the touch event was triggered on an external div, do the initial touch now.
+      if (this.drag.pointer === undefined) {
+        this.onTouch(event);
+      }
+
+      // note: drag.pointer is set in onTouch to get the initial touch location
+      var node = this.selectionHandler.getNodeAt(this.drag.pointer);
+
+      this.drag.dragging = true;
+      this.drag.selection = [];
+      this.drag.translation = util.extend({}, this.body.view.translation); // copy the object
+      this.drag.nodeId = undefined;
+
+      if (node !== undefined && this.options.dragNodes === true) {
+        this.drag.nodeId = node.id;
+        // select the clicked node if not yet selected
+        if (node.isSelected() === false) {
+          this.selectionHandler.unselectAll();
+          this.selectionHandler.selectObject(node);
+        }
+
+        // after select to contain the node
+        this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer);
+
+        var selection = this.selectionHandler.selectionObj.nodes;
+        // create an array with the selected nodes and their original location and status
+        for (var nodeId in selection) {
+          if (selection.hasOwnProperty(nodeId)) {
+            var object = selection[nodeId];
+            var s = {
+              id: object.id,
+              node: object,
+
+              // store original x, y, xFixed and yFixed, make the node temporarily Fixed
+              x: object.x,
+              y: object.y,
+              xFixed: object.options.fixed.x,
+              yFixed: object.options.fixed.y
+            };
+
+            object.options.fixed.x = true;
+            object.options.fixed.y = true;
+
+            this.drag.selection.push(s);
+          }
+        }
+      } else {
+        // fallback if no node is selected and thus the view is dragged.
+        this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer, undefined, true);
+      }
+    }
+
+    /**
+     * handle drag event
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onDrag',
+    value: function onDrag(event) {
+      var _this2 = this;
+
+      if (this.drag.pinched === true) {
+        return;
+      }
+
+      // remove the focus on node if it is focussed on by the focusOnNode
+      this.body.emitter.emit('unlockNode');
+
+      var pointer = this.getPointer(event.center);
+
+      var selection = this.drag.selection;
+      if (selection && selection.length && this.options.dragNodes === true) {
+        this.selectionHandler._generateClickEvent('dragging', event, pointer);
+
+        // calculate delta's and new location
+        var deltaX = pointer.x - this.drag.pointer.x;
+        var deltaY = pointer.y - this.drag.pointer.y;
+
+        // update position of all selected nodes
+        selection.forEach(function (selection) {
+          var node = selection.node;
+          // only move the node if it was not fixed initially
+          if (selection.xFixed === false) {
+            node.x = _this2.canvas._XconvertDOMtoCanvas(_this2.canvas._XconvertCanvasToDOM(selection.x) + deltaX);
+          }
+          // only move the node if it was not fixed initially
+          if (selection.yFixed === false) {
+            node.y = _this2.canvas._YconvertDOMtoCanvas(_this2.canvas._YconvertCanvasToDOM(selection.y) + deltaY);
+          }
+        });
+
+        // start the simulation of the physics
+        this.body.emitter.emit('startSimulation');
+      } else {
+        // move the network
+        if (this.options.dragView === true) {
+          this.selectionHandler._generateClickEvent('dragging', event, pointer, undefined, true);
+
+          // if the drag was not started properly because the click started outside the network div, start it now.
+          if (this.drag.pointer === undefined) {
+            this.onDragStart(event);
+            return;
+          }
+          var diffX = pointer.x - this.drag.pointer.x;
+          var diffY = pointer.y - this.drag.pointer.y;
+
+          this.body.view.translation = { x: this.drag.translation.x + diffX, y: this.drag.translation.y + diffY };
+          this.body.emitter.emit('_requestRedraw');
+        }
+      }
+    }
+
+    /**
+     * handle drag start event
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onDragEnd',
+    value: function onDragEnd(event) {
+      this.drag.dragging = false;
+      var selection = this.drag.selection;
+      if (selection && selection.length) {
+        selection.forEach(function (s) {
+          // restore original xFixed and yFixed
+          s.node.options.fixed.x = s.xFixed;
+          s.node.options.fixed.y = s.yFixed;
+        });
+        this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center));
+        this.body.emitter.emit('startSimulation');
+      } else {
+        this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center), undefined, true);
+        this.body.emitter.emit('_requestRedraw');
+      }
+    }
+
+    /**
+     * Handle pinch event
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: 'onPinch',
+    value: function onPinch(event) {
+      var pointer = this.getPointer(event.center);
+
+      this.drag.pinched = true;
+      if (this.pinch['scale'] === undefined) {
+        this.pinch.scale = 1;
+      }
+
+      // TODO: enabled moving while pinching?
+      var scale = this.pinch.scale * event.scale;
+      this.zoom(scale, pointer);
+    }
+
+    /**
+     * Zoom the network in or out
+     * @param {number} scale a number around 1, and between 0.01 and 10
+     * @param {{x: number, y: number}} pointer    Position on screen
+     * @private
+     */
+
+  }, {
+    key: 'zoom',
+    value: function zoom(scale, pointer) {
+      if (this.options.zoomView === true) {
+        var scaleOld = this.body.view.scale;
+        if (scale < 0.00001) {
+          scale = 0.00001;
+        }
+        if (scale > 10) {
+          scale = 10;
+        }
+
+        var preScaleDragPointer = undefined;
+        if (this.drag !== undefined) {
+          if (this.drag.dragging === true) {
+            preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);
+          }
+        }
+        // + this.canvas.frame.canvas.clientHeight / 2
+        var translation = this.body.view.translation;
+
+        var scaleFrac = scale / scaleOld;
+        var tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;
+        var ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;
+
+        this.body.view.scale = scale;
+        this.body.view.translation = { x: tx, y: ty };
+
+        if (preScaleDragPointer != undefined) {
+          var postScaleDragPointer = this.canvas.canvasToDOM(preScaleDragPointer);
+          this.drag.pointer.x = postScaleDragPointer.x;
+          this.drag.pointer.y = postScaleDragPointer.y;
+        }
+
+        this.body.emitter.emit('_requestRedraw');
+
+        if (scaleOld < scale) {
+          this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: pointer });
+        } else {
+          this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: pointer });
+        }
+      }
+    }
+
+    /**
+     * Event handler for mouse wheel event, used to zoom the timeline
+     * See http://adomas.org/javascript-mouse-wheel/
+     *     https://github.com/EightMedia/hammer.js/issues/256
+     * @param {MouseEvent}  event
+     * @private
+     */
+
+  }, {
+    key: 'onMouseWheel',
+    value: function onMouseWheel(event) {
+      if (this.options.zoomView === true) {
+        // retrieve delta
+        var delta = 0;
+        if (event.wheelDelta) {
+          /* IE/Opera. */
+          delta = event.wheelDelta / 120;
+        } else if (event.detail) {
+          /* Mozilla case. */
+          // In Mozilla, sign of delta is different than in IE.
+          // Also, delta is multiple of 3.
+          delta = -event.detail / 3;
+        }
+
+        // If delta is nonzero, handle it.
+        // Basically, delta is now positive if wheel was scrolled up,
+        // and negative, if wheel was scrolled down.
+        if (delta !== 0) {
+
+          // calculate the new scale
+          var scale = this.body.view.scale;
+          var zoom = delta / 10;
+          if (delta < 0) {
+            zoom = zoom / (1 - zoom);
+          }
+          scale *= 1 + zoom;
+
+          // calculate the pointer location
+          var pointer = this.getPointer({ x: event.clientX, y: event.clientY });
+
+          // apply the new scale
+          this.zoom(scale, pointer);
+        }
+
+        // Prevent default actions caused by mouse wheel.
+        event.preventDefault();
+      }
+    }
+
+    /**
+     * Mouse move handler for checking whether the title moves over a node with a title.
+     * @param  {Event} event
+     * @private
+     */
+
+  }, {
+    key: 'onMouseMove',
+    value: function onMouseMove(event) {
+      var _this3 = this;
+
+      var pointer = this.getPointer({ x: event.clientX, y: event.clientY });
+      var popupVisible = false;
+
+      // check if the previously selected node is still selected
+      if (this.popup !== undefined) {
+        if (this.popup.hidden === false) {
+          this._checkHidePopup(pointer);
+        }
+
+        // if the popup was not hidden above
+        if (this.popup.hidden === false) {
+          popupVisible = true;
+          this.popup.setPosition(pointer.x + 3, pointer.y - 5);
+          this.popup.show();
+        }
+      }
+
+      // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.
+      if (this.options.keyboard.bindToWindow === false && this.options.keyboard.enabled === true) {
+        this.canvas.frame.focus();
+      }
+
+      // start a timeout that will check if the mouse is positioned above an element
+      if (popupVisible === false) {
+        if (this.popupTimer !== undefined) {
+          clearInterval(this.popupTimer); // stop any running calculationTimer
+          this.popupTimer = undefined;
+        }
+        if (!this.drag.dragging) {
+          this.popupTimer = setTimeout(function () {
+            return _this3._checkShowPopup(pointer);
+          }, this.options.tooltipDelay);
+        }
+      }
+
+      // adding hover highlights
+      if (this.options.hover === true) {
+        this.selectionHandler.hoverObject(event, pointer);
+      }
+    }
+
+    /**
+     * Check if there is an element on the given position in the network
+     * (a node or edge). If so, and if this element has a title,
+     * show a popup window with its title.
+     *
+     * @param {{x:number, y:number}} pointer
+     * @private
+     */
+
+  }, {
+    key: '_checkShowPopup',
+    value: function _checkShowPopup(pointer) {
+      var x = this.canvas._XconvertDOMtoCanvas(pointer.x);
+      var y = this.canvas._YconvertDOMtoCanvas(pointer.y);
+      var pointerObj = {
+        left: x,
+        top: y,
+        right: x,
+        bottom: y
+      };
+
+      var previousPopupObjId = this.popupObj === undefined ? undefined : this.popupObj.id;
+      var nodeUnderCursor = false;
+      var popupType = 'node';
+
+      // check if a node is under the cursor.
+      if (this.popupObj === undefined) {
+        // search the nodes for overlap, select the top one in case of multiple nodes
+        var nodeIndices = this.body.nodeIndices;
+        var nodes = this.body.nodes;
+        var node = void 0;
+        var overlappingNodes = [];
+        for (var i = 0; i < nodeIndices.length; i++) {
+          node = nodes[nodeIndices[i]];
+          if (node.isOverlappingWith(pointerObj) === true) {
+            if (node.getTitle() !== undefined) {
+              overlappingNodes.push(nodeIndices[i]);
+            }
+          }
+        }
+
+        if (overlappingNodes.length > 0) {
+          // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others
+          this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];
+          // if you hover over a node, the title of the edge is not supposed to be shown.
+          nodeUnderCursor = true;
+        }
+      }
+
+      if (this.popupObj === undefined && nodeUnderCursor === false) {
+        // search the edges for overlap
+        var edgeIndices = this.body.edgeIndices;
+        var edges = this.body.edges;
+        var edge = void 0;
+        var overlappingEdges = [];
+        for (var _i = 0; _i < edgeIndices.length; _i++) {
+          edge = edges[edgeIndices[_i]];
+          if (edge.isOverlappingWith(pointerObj) === true) {
+            if (edge.connected === true && edge.getTitle() !== undefined) {
+              overlappingEdges.push(edgeIndices[_i]);
+            }
+          }
+        }
+
+        if (overlappingEdges.length > 0) {
+          this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];
+          popupType = 'edge';
+        }
+      }
+
+      if (this.popupObj !== undefined) {
+        // show popup message window
+        if (this.popupObj.id !== previousPopupObjId) {
+          if (this.popup === undefined) {
+            this.popup = new Popup(this.canvas.frame);
+          }
+
+          this.popup.popupTargetType = popupType;
+          this.popup.popupTargetId = this.popupObj.id;
+
+          // adjust a small offset such that the mouse cursor is located in the
+          // bottom left location of the popup, and you can easily move over the
+          // popup area
+          this.popup.setPosition(pointer.x + 3, pointer.y - 5);
+          this.popup.setText(this.popupObj.getTitle());
+          this.popup.show();
+          this.body.emitter.emit('showPopup', this.popupObj.id);
+        }
+      } else {
+        if (this.popup !== undefined) {
+          this.popup.hide();
+          this.body.emitter.emit('hidePopup');
+        }
+      }
+    }
+
+    /**
+     * Check if the popup must be hidden, which is the case when the mouse is no
+     * longer hovering on the object
+     * @param {{x:number, y:number}} pointer
+     * @private
+     */
+
+  }, {
+    key: '_checkHidePopup',
+    value: function _checkHidePopup(pointer) {
+      var pointerObj = this.selectionHandler._pointerToPositionObject(pointer);
+
+      var stillOnObj = false;
+      if (this.popup.popupTargetType === 'node') {
+        if (this.body.nodes[this.popup.popupTargetId] !== undefined) {
+          stillOnObj = this.body.nodes[this.popup.popupTargetId].isOverlappingWith(pointerObj);
+
+          // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.
+          // we initially only check stillOnObj because this is much faster.
+          if (stillOnObj === true) {
+            var overNode = this.selectionHandler.getNodeAt(pointer);
+            stillOnObj = overNode === undefined ? false : overNode.id === this.popup.popupTargetId;
+          }
+        }
+      } else {
+        if (this.selectionHandler.getNodeAt(pointer) === undefined) {
+          if (this.body.edges[this.popup.popupTargetId] !== undefined) {
+            stillOnObj = this.body.edges[this.popup.popupTargetId].isOverlappingWith(pointerObj);
+          }
+        }
+      }
+
+      if (stillOnObj === false) {
+        this.popupObj = undefined;
+        this.popup.hide();
+        this.body.emitter.emit('hidePopup');
+      }
+    }
+  }]);
+  return InteractionHandler;
+}();
+
+exports['default'] = InteractionHandler;
+
+/***/ }),
+/* 233 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Hammer = __webpack_require__(10);
+var hammerUtil = __webpack_require__(37);
+var keycharm = __webpack_require__(35);
+
+/**
+ * Navigation Handler
+ */
+
+var NavigationHandler = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   */
+  function NavigationHandler(body, canvas) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, NavigationHandler);
+
+    this.body = body;
+    this.canvas = canvas;
+
+    this.iconsCreated = false;
+    this.navigationHammers = [];
+    this.boundFunctions = {};
+    this.touchTime = 0;
+    this.activated = false;
+
+    this.body.emitter.on("activate", function () {
+      _this.activated = true;_this.configureKeyboardBindings();
+    });
+    this.body.emitter.on("deactivate", function () {
+      _this.activated = false;_this.configureKeyboardBindings();
+    });
+    this.body.emitter.on("destroy", function () {
+      if (_this.keycharm !== undefined) {
+        _this.keycharm.destroy();
+      }
+    });
+
+    this.options = {};
+  }
+
+  /**
+   *
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3['default'])(NavigationHandler, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        this.options = options;
+        this.create();
+      }
+    }
+
+    /**
+     * Creates or refreshes navigation and sets key bindings
+     */
+
+  }, {
+    key: 'create',
+    value: function create() {
+      if (this.options.navigationButtons === true) {
+        if (this.iconsCreated === false) {
+          this.loadNavigationElements();
+        }
+      } else if (this.iconsCreated === true) {
+        this.cleanNavigation();
+      }
+
+      this.configureKeyboardBindings();
+    }
+
+    /**
+     * Cleans up previous navigation items
+     */
+
+  }, {
+    key: 'cleanNavigation',
+    value: function cleanNavigation() {
+      // clean hammer bindings
+      if (this.navigationHammers.length != 0) {
+        for (var i = 0; i < this.navigationHammers.length; i++) {
+          this.navigationHammers[i].destroy();
+        }
+        this.navigationHammers = [];
+      }
+
+      // clean up previous navigation items
+      if (this.navigationDOM && this.navigationDOM['wrapper'] && this.navigationDOM['wrapper'].parentNode) {
+        this.navigationDOM['wrapper'].parentNode.removeChild(this.navigationDOM['wrapper']);
+      }
+
+      this.iconsCreated = false;
+    }
+
+    /**
+     * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation
+     * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent
+     * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.
+     * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.
+     *
+     * @private
+     */
+
+  }, {
+    key: 'loadNavigationElements',
+    value: function loadNavigationElements() {
+      var _this2 = this;
+
+      this.cleanNavigation();
+
+      this.navigationDOM = {};
+      var navigationDivs = ['up', 'down', 'left', 'right', 'zoomIn', 'zoomOut', 'zoomExtends'];
+      var navigationDivActions = ['_moveUp', '_moveDown', '_moveLeft', '_moveRight', '_zoomIn', '_zoomOut', '_fit'];
+
+      this.navigationDOM['wrapper'] = document.createElement('div');
+      this.navigationDOM['wrapper'].className = 'vis-navigation';
+      this.canvas.frame.appendChild(this.navigationDOM['wrapper']);
+
+      for (var i = 0; i < navigationDivs.length; i++) {
+        this.navigationDOM[navigationDivs[i]] = document.createElement('div');
+        this.navigationDOM[navigationDivs[i]].className = 'vis-button vis-' + navigationDivs[i];
+        this.navigationDOM['wrapper'].appendChild(this.navigationDOM[navigationDivs[i]]);
+
+        var hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);
+        if (navigationDivActions[i] === "_fit") {
+          hammerUtil.onTouch(hammer, this._fit.bind(this));
+        } else {
+          hammerUtil.onTouch(hammer, this.bindToRedraw.bind(this, navigationDivActions[i]));
+        }
+
+        this.navigationHammers.push(hammer);
+      }
+
+      // use a hammer for the release so we do not require the one used in the rest of the network
+      // the one the rest uses can be overloaded by the manipulation system.
+      var hammerFrame = new Hammer(this.canvas.frame);
+      hammerUtil.onRelease(hammerFrame, function () {
+        _this2._stopMovement();
+      });
+      this.navigationHammers.push(hammerFrame);
+
+      this.iconsCreated = true;
+    }
+
+    /**
+     *
+     * @param {string} action
+     */
+
+  }, {
+    key: 'bindToRedraw',
+    value: function bindToRedraw(action) {
+      if (this.boundFunctions[action] === undefined) {
+        this.boundFunctions[action] = this[action].bind(this);
+        this.body.emitter.on("initRedraw", this.boundFunctions[action]);
+        this.body.emitter.emit("_startRendering");
+      }
+    }
+
+    /**
+     *
+     * @param {string} action
+     */
+
+  }, {
+    key: 'unbindFromRedraw',
+    value: function unbindFromRedraw(action) {
+      if (this.boundFunctions[action] !== undefined) {
+        this.body.emitter.off("initRedraw", this.boundFunctions[action]);
+        this.body.emitter.emit("_stopRendering");
+        delete this.boundFunctions[action];
+      }
+    }
+
+    /**
+     * this stops all movement induced by the navigation buttons
+     *
+     * @private
+     */
+
+  }, {
+    key: '_fit',
+    value: function _fit() {
+      if (new Date().valueOf() - this.touchTime > 700) {
+        // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)
+        this.body.emitter.emit("fit", { duration: 700 });
+        this.touchTime = new Date().valueOf();
+      }
+    }
+
+    /**
+     * this stops all movement induced by the navigation buttons
+     *
+     * @private
+     */
+
+  }, {
+    key: '_stopMovement',
+    value: function _stopMovement() {
+      for (var boundAction in this.boundFunctions) {
+        if (this.boundFunctions.hasOwnProperty(boundAction)) {
+          this.body.emitter.off("initRedraw", this.boundFunctions[boundAction]);
+          this.body.emitter.emit("_stopRendering");
+        }
+      }
+      this.boundFunctions = {};
+    }
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_moveUp',
+    value: function _moveUp() {
+      this.body.view.translation.y += this.options.keyboard.speed.y;
+    }
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_moveDown',
+    value: function _moveDown() {
+      this.body.view.translation.y -= this.options.keyboard.speed.y;
+    }
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_moveLeft',
+    value: function _moveLeft() {
+      this.body.view.translation.x += this.options.keyboard.speed.x;
+    }
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_moveRight',
+    value: function _moveRight() {
+      this.body.view.translation.x -= this.options.keyboard.speed.x;
+    }
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_zoomIn',
+    value: function _zoomIn() {
+      var scaleOld = this.body.view.scale;
+      var scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);
+      var translation = this.body.view.translation;
+      var scaleFrac = scale / scaleOld;
+      var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;
+      var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;
+
+      this.body.view.scale = scale;
+      this.body.view.translation = { x: tx, y: ty };
+      this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: null });
+    }
+
+    /**
+     *
+     * @private
+     */
+
+  }, {
+    key: '_zoomOut',
+    value: function _zoomOut() {
+      var scaleOld = this.body.view.scale;
+      var scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);
+      var translation = this.body.view.translation;
+      var scaleFrac = scale / scaleOld;
+      var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;
+      var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;
+
+      this.body.view.scale = scale;
+      this.body.view.translation = { x: tx, y: ty };
+      this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: null });
+    }
+
+    /**
+     * bind all keys using keycharm.
+     */
+
+  }, {
+    key: 'configureKeyboardBindings',
+    value: function configureKeyboardBindings() {
+      var _this3 = this;
+
+      if (this.keycharm !== undefined) {
+        this.keycharm.destroy();
+      }
+
+      if (this.options.keyboard.enabled === true) {
+        if (this.options.keyboard.bindToWindow === true) {
+          this.keycharm = keycharm({ container: window, preventDefault: true });
+        } else {
+          this.keycharm = keycharm({ container: this.canvas.frame, preventDefault: true });
+        }
+
+        this.keycharm.reset();
+
+        if (this.activated === true) {
+          this.keycharm.bind("up", function () {
+            _this3.bindToRedraw("_moveUp");
+          }, "keydown");
+          this.keycharm.bind("down", function () {
+            _this3.bindToRedraw("_moveDown");
+          }, "keydown");
+          this.keycharm.bind("left", function () {
+            _this3.bindToRedraw("_moveLeft");
+          }, "keydown");
+          this.keycharm.bind("right", function () {
+            _this3.bindToRedraw("_moveRight");
+          }, "keydown");
+          this.keycharm.bind("=", function () {
+            _this3.bindToRedraw("_zoomIn");
+          }, "keydown");
+          this.keycharm.bind("num+", function () {
+            _this3.bindToRedraw("_zoomIn");
+          }, "keydown");
+          this.keycharm.bind("num-", function () {
+            _this3.bindToRedraw("_zoomOut");
+          }, "keydown");
+          this.keycharm.bind("-", function () {
+            _this3.bindToRedraw("_zoomOut");
+          }, "keydown");
+          this.keycharm.bind("[", function () {
+            _this3.bindToRedraw("_zoomOut");
+          }, "keydown");
+          this.keycharm.bind("]", function () {
+            _this3.bindToRedraw("_zoomIn");
+          }, "keydown");
+          this.keycharm.bind("pageup", function () {
+            _this3.bindToRedraw("_zoomIn");
+          }, "keydown");
+          this.keycharm.bind("pagedown", function () {
+            _this3.bindToRedraw("_zoomOut");
+          }, "keydown");
+
+          this.keycharm.bind("up", function () {
+            _this3.unbindFromRedraw("_moveUp");
+          }, "keyup");
+          this.keycharm.bind("down", function () {
+            _this3.unbindFromRedraw("_moveDown");
+          }, "keyup");
+          this.keycharm.bind("left", function () {
+            _this3.unbindFromRedraw("_moveLeft");
+          }, "keyup");
+          this.keycharm.bind("right", function () {
+            _this3.unbindFromRedraw("_moveRight");
+          }, "keyup");
+          this.keycharm.bind("=", function () {
+            _this3.unbindFromRedraw("_zoomIn");
+          }, "keyup");
+          this.keycharm.bind("num+", function () {
+            _this3.unbindFromRedraw("_zoomIn");
+          }, "keyup");
+          this.keycharm.bind("num-", function () {
+            _this3.unbindFromRedraw("_zoomOut");
+          }, "keyup");
+          this.keycharm.bind("-", function () {
+            _this3.unbindFromRedraw("_zoomOut");
+          }, "keyup");
+          this.keycharm.bind("[", function () {
+            _this3.unbindFromRedraw("_zoomOut");
+          }, "keyup");
+          this.keycharm.bind("]", function () {
+            _this3.unbindFromRedraw("_zoomIn");
+          }, "keyup");
+          this.keycharm.bind("pageup", function () {
+            _this3.unbindFromRedraw("_zoomIn");
+          }, "keyup");
+          this.keycharm.bind("pagedown", function () {
+            _this3.unbindFromRedraw("_zoomOut");
+          }, "keyup");
+        }
+      }
+    }
+  }]);
+  return NavigationHandler;
+}();
+
+exports['default'] = NavigationHandler;
+
+/***/ }),
+/* 234 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var Node = __webpack_require__(47)['default'];
+var Edge = __webpack_require__(74)['default'];
+
+var util = __webpack_require__(2);
+
+/**
+ * The handler for selections
+ */
+
+var SelectionHandler = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   */
+  function SelectionHandler(body, canvas) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, SelectionHandler);
+
+    this.body = body;
+    this.canvas = canvas;
+    this.selectionObj = { nodes: [], edges: [] };
+    this.hoverObj = { nodes: {}, edges: {} };
+
+    this.options = {};
+    this.defaultOptions = {
+      multiselect: false,
+      selectable: true,
+      selectConnectedEdges: true,
+      hoverConnectedEdges: true
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this.body.emitter.on("_dataChanged", function () {
+      _this.updateSelection();
+    });
+  }
+
+  /**
+   *
+   * @param {Object} [options]
+   */
+
+
+  (0, _createClass3['default'])(SelectionHandler, [{
+    key: 'setOptions',
+    value: function setOptions(options) {
+      if (options !== undefined) {
+        var fields = ['multiselect', 'hoverConnectedEdges', 'selectable', 'selectConnectedEdges'];
+        util.selectiveDeepExtend(fields, this.options, options);
+      }
+    }
+
+    /**
+     * handles the selection part of the tap;
+     *
+     * @param {{x: number, y: number}} pointer
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'selectOnPoint',
+    value: function selectOnPoint(pointer) {
+      var selected = false;
+      if (this.options.selectable === true) {
+        var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);
+
+        // unselect after getting the objects in order to restore width and height.
+        this.unselectAll();
+
+        if (obj !== undefined) {
+          selected = this.selectObject(obj);
+        }
+        this.body.emitter.emit("_requestRedraw");
+      }
+      return selected;
+    }
+
+    /**
+     *
+     * @param {{x: number, y: number}} pointer
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'selectAdditionalOnPoint',
+    value: function selectAdditionalOnPoint(pointer) {
+      var selectionChanged = false;
+      if (this.options.selectable === true) {
+        var obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);
+
+        if (obj !== undefined) {
+          selectionChanged = true;
+          if (obj.isSelected() === true) {
+            this.deselectObject(obj);
+          } else {
+            this.selectObject(obj);
+          }
+
+          this.body.emitter.emit("_requestRedraw");
+        }
+      }
+      return selectionChanged;
+    }
+
+    /**
+     * Create an object containing the standard fields for an event.
+     *
+     * @param {Event} event
+     * @param {{x: number, y: number}} pointer Object with the x and y screen coordinates of the mouse
+     * @returns {{}}
+     * @private
+     */
+
+  }, {
+    key: '_initBaseEvent',
+    value: function _initBaseEvent(event, pointer) {
+      var properties = {};
+
+      properties['pointer'] = {
+        DOM: { x: pointer.x, y: pointer.y },
+        canvas: this.canvas.DOMtoCanvas(pointer)
+      };
+      properties['event'] = event;
+
+      return properties;
+    }
+
+    /**
+     * Generate an event which the user can catch.
+     *
+     * This adds some extra data to the event with respect to cursor position and
+     * selected nodes and edges.
+     *
+     * @param {string} eventType                          Name of event to send
+     * @param {Event}  event
+     * @param {{x: number, y: number}} pointer            Object with the x and y screen coordinates of the mouse
+     * @param {Object|undefined} oldSelection             If present, selection state before event occured
+     * @param {boolean|undefined} [emptySelection=false]  Indicate if selection data should be passed
+     */
+
+  }, {
+    key: '_generateClickEvent',
+    value: function _generateClickEvent(eventType, event, pointer, oldSelection) {
+      var emptySelection = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+
+      var properties = this._initBaseEvent(event, pointer);
+
+      if (emptySelection === true) {
+        properties.nodes = [];
+        properties.edges = [];
+      } else {
+        var tmp = this.getSelection();
+        properties.nodes = tmp.nodes;
+        properties.edges = tmp.edges;
+      }
+
+      if (oldSelection !== undefined) {
+        properties['previousSelection'] = oldSelection;
+      }
+
+      if (eventType == 'click') {
+        // For the time being, restrict this functionality to
+        // just the click event.
+        properties.items = this.getClickedItems(pointer);
+      }
+
+      this.body.emitter.emit(eventType, properties);
+    }
+
+    /**
+     *
+     * @param {Object} obj
+     * @param {boolean} [highlightEdges=this.options.selectConnectedEdges]
+     * @returns {boolean}
+     */
+
+  }, {
+    key: 'selectObject',
+    value: function selectObject(obj) {
+      var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.options.selectConnectedEdges;
+
+      if (obj !== undefined) {
+        if (obj instanceof Node) {
+          if (highlightEdges === true) {
+            this._selectConnectedEdges(obj);
+          }
+        }
+        obj.select();
+        this._addToSelection(obj);
+        return true;
+      }
+      return false;
+    }
+
+    /**
+     *
+     * @param {Object} obj
+     */
+
+  }, {
+    key: 'deselectObject',
+    value: function deselectObject(obj) {
+      if (obj.isSelected() === true) {
+        obj.selected = false;
+        this._removeFromSelection(obj);
+      }
+    }
+
+    /**
+     * retrieve all nodes overlapping with given object
+     * @param {Object} object  An object with parameters left, top, right, bottom
+     * @return {number[]}   An array with id's of the overlapping nodes
+     * @private
+     */
+
+  }, {
+    key: '_getAllNodesOverlappingWith',
+    value: function _getAllNodesOverlappingWith(object) {
+      var overlappingNodes = [];
+      var nodes = this.body.nodes;
+      for (var i = 0; i < this.body.nodeIndices.length; i++) {
+        var nodeId = this.body.nodeIndices[i];
+        if (nodes[nodeId].isOverlappingWith(object)) {
+          overlappingNodes.push(nodeId);
+        }
+      }
+      return overlappingNodes;
+    }
+
+    /**
+     * Return a position object in canvasspace from a single point in screenspace
+     *
+     * @param {{x: number, y: number}} pointer
+     * @returns {{left: number, top: number, right: number, bottom: number}}
+     * @private
+     */
+
+  }, {
+    key: '_pointerToPositionObject',
+    value: function _pointerToPositionObject(pointer) {
+      var canvasPos = this.canvas.DOMtoCanvas(pointer);
+      return {
+        left: canvasPos.x - 1,
+        top: canvasPos.y + 1,
+        right: canvasPos.x + 1,
+        bottom: canvasPos.y - 1
+      };
+    }
+
+    /**
+     * Get the top node at the passed point (like a click)
+     *
+     * @param {{x: number, y: number}} pointer
+     * @param {boolean} [returnNode=true]
+     * @return {Node | undefined} node
+     */
+
+  }, {
+    key: 'getNodeAt',
+    value: function getNodeAt(pointer) {
+      var returnNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      // we first check if this is an navigation controls element
+      var positionObject = this._pointerToPositionObject(pointer);
+      var overlappingNodes = this._getAllNodesOverlappingWith(positionObject);
+      // if there are overlapping nodes, select the last one, this is the
+      // one which is drawn on top of the others
+      if (overlappingNodes.length > 0) {
+        if (returnNode === true) {
+          return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];
+        } else {
+          return overlappingNodes[overlappingNodes.length - 1];
+        }
+      } else {
+        return undefined;
+      }
+    }
+
+    /**
+     * retrieve all edges overlapping with given object, selector is around center
+     * @param {Object} object  An object with parameters left, top, right, bottom
+     * @param {number[]} overlappingEdges An array with id's of the overlapping nodes
+     * @private
+     */
+
+  }, {
+    key: '_getEdgesOverlappingWith',
+    value: function _getEdgesOverlappingWith(object, overlappingEdges) {
+      var edges = this.body.edges;
+      for (var i = 0; i < this.body.edgeIndices.length; i++) {
+        var edgeId = this.body.edgeIndices[i];
+        if (edges[edgeId].isOverlappingWith(object)) {
+          overlappingEdges.push(edgeId);
+        }
+      }
+    }
+
+    /**
+     * retrieve all nodes overlapping with given object
+     * @param {Object} object  An object with parameters left, top, right, bottom
+     * @return {number[]}   An array with id's of the overlapping nodes
+     * @private
+     */
+
+  }, {
+    key: '_getAllEdgesOverlappingWith',
+    value: function _getAllEdgesOverlappingWith(object) {
+      var overlappingEdges = [];
+      this._getEdgesOverlappingWith(object, overlappingEdges);
+      return overlappingEdges;
+    }
+
+    /**
+     * Get the edges nearest to the passed point (like a click)
+     *
+     * @param {{x: number, y: number}} pointer
+     * @param {boolean} [returnEdge=true]
+     * @return {Edge | undefined} node
+     */
+
+  }, {
+    key: 'getEdgeAt',
+    value: function getEdgeAt(pointer) {
+      var returnEdge = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      // Iterate over edges, pick closest within 10
+      var canvasPos = this.canvas.DOMtoCanvas(pointer);
+      var mindist = 10;
+      var overlappingEdge = null;
+      var edges = this.body.edges;
+      for (var i = 0; i < this.body.edgeIndices.length; i++) {
+        var edgeId = this.body.edgeIndices[i];
+        var edge = edges[edgeId];
+        if (edge.connected) {
+          var xFrom = edge.from.x;
+          var yFrom = edge.from.y;
+          var xTo = edge.to.x;
+          var yTo = edge.to.y;
+          var dist = edge.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, canvasPos.x, canvasPos.y);
+          if (dist < mindist) {
+            overlappingEdge = edgeId;
+            mindist = dist;
+          }
+        }
+      }
+      if (overlappingEdge !== null) {
+        if (returnEdge === true) {
+          return this.body.edges[overlappingEdge];
+        } else {
+          return overlappingEdge;
+        }
+      } else {
+        return undefined;
+      }
+    }
+
+    /**
+     * Add object to the selection array.
+     *
+     * @param {Object} obj
+     * @private
+     */
+
+  }, {
+    key: '_addToSelection',
+    value: function _addToSelection(obj) {
+      if (obj instanceof Node) {
+        this.selectionObj.nodes[obj.id] = obj;
+      } else {
+        this.selectionObj.edges[obj.id] = obj;
+      }
+    }
+
+    /**
+     * Add object to the selection array.
+     *
+     * @param {Object} obj
+     * @private
+     */
+
+  }, {
+    key: '_addToHover',
+    value: function _addToHover(obj) {
+      if (obj instanceof Node) {
+        this.hoverObj.nodes[obj.id] = obj;
+      } else {
+        this.hoverObj.edges[obj.id] = obj;
+      }
+    }
+
+    /**
+     * Remove a single option from selection.
+     *
+     * @param {Object} obj
+     * @private
+     */
+
+  }, {
+    key: '_removeFromSelection',
+    value: function _removeFromSelection(obj) {
+      if (obj instanceof Node) {
+        delete this.selectionObj.nodes[obj.id];
+        this._unselectConnectedEdges(obj);
+      } else {
+        delete this.selectionObj.edges[obj.id];
+      }
+    }
+
+    /**
+     * Unselect all. The selectionObj is useful for this.
+     */
+
+  }, {
+    key: 'unselectAll',
+    value: function unselectAll() {
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          this.selectionObj.nodes[nodeId].unselect();
+        }
+      }
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          this.selectionObj.edges[edgeId].unselect();
+        }
+      }
+
+      this.selectionObj = { nodes: {}, edges: {} };
+    }
+
+    /**
+     * return the number of selected nodes
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getSelectedNodeCount',
+    value: function _getSelectedNodeCount() {
+      var count = 0;
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          count += 1;
+        }
+      }
+      return count;
+    }
+
+    /**
+     * return the selected node
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getSelectedNode',
+    value: function _getSelectedNode() {
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          return this.selectionObj.nodes[nodeId];
+        }
+      }
+      return undefined;
+    }
+
+    /**
+     * return the selected edge
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getSelectedEdge',
+    value: function _getSelectedEdge() {
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          return this.selectionObj.edges[edgeId];
+        }
+      }
+      return undefined;
+    }
+
+    /**
+     * return the number of selected edges
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getSelectedEdgeCount',
+    value: function _getSelectedEdgeCount() {
+      var count = 0;
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          count += 1;
+        }
+      }
+      return count;
+    }
+
+    /**
+     * return the number of selected objects.
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getSelectedObjectCount',
+    value: function _getSelectedObjectCount() {
+      var count = 0;
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          count += 1;
+        }
+      }
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          count += 1;
+        }
+      }
+      return count;
+    }
+
+    /**
+     * Check if anything is selected
+     *
+     * @returns {boolean}
+     * @private
+     */
+
+  }, {
+    key: '_selectionIsEmpty',
+    value: function _selectionIsEmpty() {
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          return false;
+        }
+      }
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /**
+     * check if one of the selected nodes is a cluster.
+     *
+     * @returns {boolean}
+     * @private
+     */
+
+  }, {
+    key: '_clusterInSelection',
+    value: function _clusterInSelection() {
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * select the edges connected to the node that is being selected
+     *
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: '_selectConnectedEdges',
+    value: function _selectConnectedEdges(node) {
+      for (var i = 0; i < node.edges.length; i++) {
+        var edge = node.edges[i];
+        edge.select();
+        this._addToSelection(edge);
+      }
+    }
+
+    /**
+     * select the edges connected to the node that is being selected
+     *
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: '_hoverConnectedEdges',
+    value: function _hoverConnectedEdges(node) {
+      for (var i = 0; i < node.edges.length; i++) {
+        var edge = node.edges[i];
+        edge.hover = true;
+        this._addToHover(edge);
+      }
+    }
+
+    /**
+     * unselect the edges connected to the node that is being selected
+     *
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: '_unselectConnectedEdges',
+    value: function _unselectConnectedEdges(node) {
+      for (var i = 0; i < node.edges.length; i++) {
+        var edge = node.edges[i];
+        edge.unselect();
+        this._removeFromSelection(edge);
+      }
+    }
+
+    /**
+     * Remove the highlight from a node or edge, in response to mouse movement
+     *
+     * @param {Event}  event
+     * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse
+     * @param {Node|vis.Edge} object
+     * @private
+     */
+
+  }, {
+    key: 'emitBlurEvent',
+    value: function emitBlurEvent(event, pointer, object) {
+      var properties = this._initBaseEvent(event, pointer);
+
+      if (object.hover === true) {
+        object.hover = false;
+        if (object instanceof Node) {
+          properties.node = object.id;
+          this.body.emitter.emit("blurNode", properties);
+        } else {
+          properties.edge = object.id;
+          this.body.emitter.emit("blurEdge", properties);
+        }
+      }
+    }
+
+    /**
+     * Create the highlight for a node or edge, in response to mouse movement
+     *
+     * @param {Event}  event
+     * @param {{x: number, y: number}} pointer object with the x and y screen coordinates of the mouse
+     * @param {Node|vis.Edge} object
+     * @returns {boolean} hoverChanged
+     * @private
+     */
+
+  }, {
+    key: 'emitHoverEvent',
+    value: function emitHoverEvent(event, pointer, object) {
+      var properties = this._initBaseEvent(event, pointer);
+      var hoverChanged = false;
+
+      if (object.hover === false) {
+        object.hover = true;
+        this._addToHover(object);
+        hoverChanged = true;
+        if (object instanceof Node) {
+          properties.node = object.id;
+          this.body.emitter.emit("hoverNode", properties);
+        } else {
+          properties.edge = object.id;
+          this.body.emitter.emit("hoverEdge", properties);
+        }
+      }
+
+      return hoverChanged;
+    }
+
+    /**
+     * Perform actions in response to a mouse movement.
+     *
+     * @param {Event}  event
+     * @param {{x: number, y: number}} pointer | object with the x and y screen coordinates of the mouse
+     */
+
+  }, {
+    key: 'hoverObject',
+    value: function hoverObject(event, pointer) {
+      var object = this.getNodeAt(pointer);
+      if (object === undefined) {
+        object = this.getEdgeAt(pointer);
+      }
+
+      var hoverChanged = false;
+      // remove all node hover highlights
+      for (var nodeId in this.hoverObj.nodes) {
+        if (this.hoverObj.nodes.hasOwnProperty(nodeId)) {
+          if (object === undefined || object instanceof Node && object.id != nodeId || object instanceof Edge) {
+            this.emitBlurEvent(event, pointer, this.hoverObj.nodes[nodeId]);
+            delete this.hoverObj.nodes[nodeId];
+            hoverChanged = true;
+          }
+        }
+      }
+
+      // removing all edge hover highlights
+      for (var edgeId in this.hoverObj.edges) {
+        if (this.hoverObj.edges.hasOwnProperty(edgeId)) {
+          // if the hover has been changed here it means that the node has been hovered over or off
+          // we then do not use the emitBlurEvent method here.
+          if (hoverChanged === true) {
+            this.hoverObj.edges[edgeId].hover = false;
+            delete this.hoverObj.edges[edgeId];
+          }
+          // if the blur remains the same and the object is undefined (mouse off) or another
+          // edge has been hovered, or another node has been hovered we blur the edge.
+          else if (object === undefined || object instanceof Edge && object.id != edgeId || object instanceof Node && !object.hover) {
+              this.emitBlurEvent(event, pointer, this.hoverObj.edges[edgeId]);
+              delete this.hoverObj.edges[edgeId];
+              hoverChanged = true;
+            }
+        }
+      }
+
+      if (object !== undefined) {
+        hoverChanged = hoverChanged || this.emitHoverEvent(event, pointer, object);
+        if (object instanceof Node && this.options.hoverConnectedEdges === true) {
+          this._hoverConnectedEdges(object);
+        }
+      }
+
+      if (hoverChanged === true) {
+        this.body.emitter.emit('_requestRedraw');
+      }
+    }
+
+    /**
+     *
+     * retrieve the currently selected objects
+     * @return {{nodes: Array.<string>, edges: Array.<string>}} selection
+     */
+
+  }, {
+    key: 'getSelection',
+    value: function getSelection() {
+      var nodeIds = this.getSelectedNodes();
+      var edgeIds = this.getSelectedEdges();
+      return { nodes: nodeIds, edges: edgeIds };
+    }
+
+    /**
+     *
+     * retrieve the currently selected nodes
+     * @return {string[]} selection    An array with the ids of the
+     *                                            selected nodes.
+     */
+
+  }, {
+    key: 'getSelectedNodes',
+    value: function getSelectedNodes() {
+      var idArray = [];
+      if (this.options.selectable === true) {
+        for (var nodeId in this.selectionObj.nodes) {
+          if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+            idArray.push(this.selectionObj.nodes[nodeId].id);
+          }
+        }
+      }
+      return idArray;
+    }
+
+    /**
+     *
+     * retrieve the currently selected edges
+     * @return {Array} selection    An array with the ids of the
+     *                                            selected nodes.
+     */
+
+  }, {
+    key: 'getSelectedEdges',
+    value: function getSelectedEdges() {
+      var idArray = [];
+      if (this.options.selectable === true) {
+        for (var edgeId in this.selectionObj.edges) {
+          if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+            idArray.push(this.selectionObj.edges[edgeId].id);
+          }
+        }
+      }
+      return idArray;
+    }
+
+    /**
+     * Updates the current selection
+     * @param {{nodes: Array.<string>, edges: Array.<string>}} selection
+     * @param {Object} options                                 Options
+     */
+
+  }, {
+    key: 'setSelection',
+    value: function setSelection(selection) {
+      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+      var i = void 0,
+          id = void 0;
+
+      if (!selection || !selection.nodes && !selection.edges) throw 'Selection must be an object with nodes and/or edges properties';
+      // first unselect any selected node, if option is true or undefined
+      if (options.unselectAll || options.unselectAll === undefined) {
+        this.unselectAll();
+      }
+      if (selection.nodes) {
+        for (i = 0; i < selection.nodes.length; i++) {
+          id = selection.nodes[i];
+
+          var node = this.body.nodes[id];
+          if (!node) {
+            throw new RangeError('Node with id "' + id + '" not found');
+          }
+          // don't select edges with it
+          this.selectObject(node, options.highlightEdges);
+        }
+      }
+
+      if (selection.edges) {
+        for (i = 0; i < selection.edges.length; i++) {
+          id = selection.edges[i];
+
+          var edge = this.body.edges[id];
+          if (!edge) {
+            throw new RangeError('Edge with id "' + id + '" not found');
+          }
+          this.selectObject(edge);
+        }
+      }
+      this.body.emitter.emit('_requestRedraw');
+    }
+
+    /**
+     * select zero or more nodes with the option to highlight edges
+     * @param {number[] | string[]} selection     An array with the ids of the
+     *                                            selected nodes.
+     * @param {boolean} [highlightEdges]
+     */
+
+  }, {
+    key: 'selectNodes',
+    value: function selectNodes(selection) {
+      var highlightEdges = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
+
+      if (!selection || selection.length === undefined) throw 'Selection must be an array with ids';
+
+      this.setSelection({ nodes: selection }, { highlightEdges: highlightEdges });
+    }
+
+    /**
+     * select zero or more edges
+     * @param {number[] | string[]} selection     An array with the ids of the
+     *                                            selected nodes.
+     */
+
+  }, {
+    key: 'selectEdges',
+    value: function selectEdges(selection) {
+      if (!selection || selection.length === undefined) throw 'Selection must be an array with ids';
+
+      this.setSelection({ edges: selection });
+    }
+
+    /**
+     * Validate the selection: remove ids of nodes which no longer exist
+     * @private
+     */
+
+  }, {
+    key: 'updateSelection',
+    value: function updateSelection() {
+      for (var nodeId in this.selectionObj.nodes) {
+        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
+          if (!this.body.nodes.hasOwnProperty(nodeId)) {
+            delete this.selectionObj.nodes[nodeId];
+          }
+        }
+      }
+      for (var edgeId in this.selectionObj.edges) {
+        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
+          if (!this.body.edges.hasOwnProperty(edgeId)) {
+            delete this.selectionObj.edges[edgeId];
+          }
+        }
+      }
+    }
+
+    /**
+     * Determine all the visual elements clicked which are on the given point.
+     *
+     * All elements are returned; this includes nodes, edges and their labels.
+     * The order returned is from highest to lowest, i.e. element 0 of the return
+     * value is the topmost item clicked on.
+     *
+     * The return value consists of an array of the following possible elements:
+     *
+     * - `{nodeId:number}`             - node with given id clicked on
+     * - `{nodeId:number, labelId:0}`  - label of node with given id clicked on
+     * - `{edgeId:number}`             - edge with given id clicked on
+     * - `{edge:number, labelId:0}`    - label of edge with given id clicked on
+     *
+     * ## NOTES
+     *
+     * - Currently, there is only one label associated with a node or an edge,
+     *   but this is expected to change somewhere in the future.
+     * - Since there is no z-indexing yet, it is not really possible to set the nodes and
+     *   edges in the correct order. For the time being, nodes come first.
+     *
+     * @param {point} pointer  mouse position in screen coordinates
+     * @returns {Array.<nodeClickItem|nodeLabelClickItem|edgeClickItem|edgeLabelClickItem>}
+     * @private
+     */
+
+  }, {
+    key: 'getClickedItems',
+    value: function getClickedItems(pointer) {
+      var point = this.canvas.DOMtoCanvas(pointer);
+      var items = [];
+
+      // Note reverse order; we want the topmost clicked items to be first in the array
+      // Also note that selected nodes are disregarded here; these normally display on top
+      var nodeIndices = this.body.nodeIndices;
+      var nodes = this.body.nodes;
+      for (var i = nodeIndices.length - 1; i >= 0; i--) {
+        var node = nodes[nodeIndices[i]];
+        var ret = node.getItemsOnPoint(point);
+        items.push.apply(items, ret); // Append the return value to the running list.
+      }
+
+      var edgeIndices = this.body.edgeIndices;
+      var edges = this.body.edges;
+      for (var _i = edgeIndices.length - 1; _i >= 0; _i--) {
+        var edge = edges[edgeIndices[_i]];
+        var _ret = edge.getItemsOnPoint(point);
+        items.push.apply(items, _ret); // Append the return value to the running list.
+      }
+
+      return items;
+    }
+  }]);
+  return SelectionHandler;
+}();
+
+exports['default'] = SelectionHandler;
+
+/***/ }),
+/* 235 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+/**
+ * There's a mix-up with terms in the code. Following are the formal definitions:
+ *
+ *   tree   - a strict hierarchical network, i.e. every node has at most one parent
+ *   forest - a collection of trees. These distinct trees are thus not connected.
+ *
+ * So:
+ * - in a network that is not a tree, there exist nodes with multiple parents.
+ * - a network consisting of unconnected sub-networks, of which at least one
+ *   is not a tree, is not a forest.
+ *
+ * In the code, the definitions are:
+ *
+ *   tree   - any disconnected sub-network, strict hierarchical or not.
+ *   forest - a bunch of these sub-networks
+ *
+ * The difference between tree and not-tree is important in the code, notably within
+ * to the block-shifting algorithm. The algorithm assumes formal trees and fails
+ * for not-trees, often in a spectacular manner (search for 'exploding network' in the issues).
+ *
+ * In order to distinguish the definitions in the following code, the adjective 'formal' is
+ * used. If 'formal' is absent, you must assume the non-formal definition.
+ *
+ * ----------------------------------------------------------------------------------
+ * NOTES
+ * =====
+ *
+ * A hierarchical layout is a different thing from a hierarchical network.
+ * The layout is a way to arrange the nodes in the view; this can be done
+ * on non-hierarchical networks as well. The converse is also possible.
+ */
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var NetworkUtil = __webpack_require__(76)['default'];
+
+var _require = __webpack_require__(236),
+    HorizontalStrategy = _require.HorizontalStrategy,
+    VerticalStrategy = _require.VerticalStrategy;
+
+/**
+ * Container for derived data on current network, relating to hierarchy.
+ *
+ * @private
+ */
+
+
+var HierarchicalStatus = function () {
+  /**
+   * @ignore
+   */
+  function HierarchicalStatus() {
+    (0, _classCallCheck3['default'])(this, HierarchicalStatus);
+
+    this.childrenReference = {}; // child id's per node id
+    this.parentReference = {}; // parent id's per node id
+    this.trees = {}; // tree id per node id; i.e. to which tree does given node id belong
+
+    this.distributionOrdering = {}; // The nodes per level, in the display order
+    this.levels = {}; // hierarchy level per node id
+    this.distributionIndex = {}; // The position of the node in the level sorting order, per node id.
+
+    this.isTree = false; // True if current network is a formal tree 
+    this.treeIndex = -1; // Highest tree id in current network.
+  }
+
+  /**
+   * Add the relation between given nodes to the current state.
+   *
+   * @param {Node.id} parentNodeId
+   * @param {Node.id} childNodeId
+   */
+
+
+  (0, _createClass3['default'])(HierarchicalStatus, [{
+    key: 'addRelation',
+    value: function addRelation(parentNodeId, childNodeId) {
+      if (this.childrenReference[parentNodeId] === undefined) {
+        this.childrenReference[parentNodeId] = [];
+      }
+      this.childrenReference[parentNodeId].push(childNodeId);
+
+      if (this.parentReference[childNodeId] === undefined) {
+        this.parentReference[childNodeId] = [];
+      }
+      this.parentReference[childNodeId].push(parentNodeId);
+    }
+
+    /**
+     * Check if the current state is for a formal tree or formal forest.
+     *
+     * This is the case if every node has at most one parent.
+     *
+     * Pre: parentReference init'ed properly for current network
+     */
+
+  }, {
+    key: 'checkIfTree',
+    value: function checkIfTree() {
+      for (var i in this.parentReference) {
+        if (this.parentReference[i].length > 1) {
+          this.isTree = false;
+          return;
+        }
+      }
+
+      this.isTree = true;
+    }
+
+    /**
+     * Return the number of separate trees in the current network.
+     * @returns {number}
+     */
+
+  }, {
+    key: 'numTrees',
+    value: function numTrees() {
+      return this.treeIndex + 1; // This assumes the indexes are assigned consecitively
+    }
+
+    /**
+     * Assign a tree id to a node
+     * @param {Node} node
+     * @param {string|number} treeId
+     */
+
+  }, {
+    key: 'setTreeIndex',
+    value: function setTreeIndex(node, treeId) {
+      if (treeId === undefined) return; // Don't bother
+
+      if (this.trees[node.id] === undefined) {
+        this.trees[node.id] = treeId;
+        this.treeIndex = Math.max(treeId, this.treeIndex);
+      }
+    }
+
+    /**
+     * Ensure level for given id is defined.
+     *
+     * Sets level to zero for given node id if not already present
+     *
+     * @param {Node.id} nodeId
+     */
+
+  }, {
+    key: 'ensureLevel',
+    value: function ensureLevel(nodeId) {
+      if (this.levels[nodeId] === undefined) {
+        this.levels[nodeId] = 0;
+      }
+    }
+
+    /**
+     * get the maximum level of a branch.
+     *
+     * TODO: Never entered; find a test case to test this!
+     * @param {Node.id} nodeId
+     * @returns {number}
+     */
+
+  }, {
+    key: 'getMaxLevel',
+    value: function getMaxLevel(nodeId) {
+      var _this = this;
+
+      var accumulator = {};
+
+      var _getMaxLevel = function _getMaxLevel(nodeId) {
+        if (accumulator[nodeId] !== undefined) {
+          return accumulator[nodeId];
+        }
+        var level = _this.levels[nodeId];
+        if (_this.childrenReference[nodeId]) {
+          var children = _this.childrenReference[nodeId];
+          if (children.length > 0) {
+            for (var i = 0; i < children.length; i++) {
+              level = Math.max(level, _getMaxLevel(children[i]));
+            }
+          }
+        }
+        accumulator[nodeId] = level;
+        return level;
+      };
+
+      return _getMaxLevel(nodeId);
+    }
+
+    /**
+     *
+     * @param {Node} nodeA
+     * @param {Node} nodeB
+     */
+
+  }, {
+    key: 'levelDownstream',
+    value: function levelDownstream(nodeA, nodeB) {
+      if (this.levels[nodeB.id] === undefined) {
+        // set initial level
+        if (this.levels[nodeA.id] === undefined) {
+          this.levels[nodeA.id] = 0;
+        }
+        // set level
+        this.levels[nodeB.id] = this.levels[nodeA.id] + 1;
+      }
+    }
+
+    /**
+     * Small util method to set the minimum levels of the nodes to zero.
+     *
+     * @param {Array.<Node>} nodes
+     */
+
+  }, {
+    key: 'setMinLevelToZero',
+    value: function setMinLevelToZero(nodes) {
+      var minLevel = 1e9;
+      // get the minimum level
+      for (var nodeId in nodes) {
+        if (nodes.hasOwnProperty(nodeId)) {
+          if (this.levels[nodeId] !== undefined) {
+            minLevel = Math.min(this.levels[nodeId], minLevel);
+          }
+        }
+      }
+
+      // subtract the minimum from the set so we have a range starting from 0
+      for (var _nodeId in nodes) {
+        if (nodes.hasOwnProperty(_nodeId)) {
+          if (this.levels[_nodeId] !== undefined) {
+            this.levels[_nodeId] -= minLevel;
+          }
+        }
+      }
+    }
+
+    /**
+     * Get the min and max xy-coordinates of a given tree
+     *
+     * @param {Array.<Node>} nodes
+     * @param {number} index
+     * @returns {{min_x: number, max_x: number, min_y: number, max_y: number}}
+     */
+
+  }, {
+    key: 'getTreeSize',
+    value: function getTreeSize(nodes, index) {
+      var min_x = 1e9;
+      var max_x = -1e9;
+      var min_y = 1e9;
+      var max_y = -1e9;
+
+      for (var nodeId in this.trees) {
+        if (this.trees.hasOwnProperty(nodeId)) {
+          if (this.trees[nodeId] === index) {
+            var node = nodes[nodeId];
+            min_x = Math.min(node.x, min_x);
+            max_x = Math.max(node.x, max_x);
+            min_y = Math.min(node.y, min_y);
+            max_y = Math.max(node.y, max_y);
+          }
+        }
+      }
+
+      return {
+        min_x: min_x,
+        max_x: max_x,
+        min_y: min_y,
+        max_y: max_y
+      };
+    }
+
+    /**
+     * Check if two nodes have the same parent(s)
+     *
+     * @param {Node} node1
+     * @param {Node} node2
+     * @return {boolean} true if the two nodes have a same ancestor node, false otherwise
+     */
+
+  }, {
+    key: 'hasSameParent',
+    value: function hasSameParent(node1, node2) {
+      var parents1 = this.parentReference[node1.id];
+      var parents2 = this.parentReference[node2.id];
+      if (parents1 === undefined || parents2 === undefined) {
+        return false;
+      }
+
+      for (var i = 0; i < parents1.length; i++) {
+        for (var j = 0; j < parents2.length; j++) {
+          if (parents1[i] == parents2[j]) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Check if two nodes are in the same tree.
+     *
+     * @param {Node} node1
+     * @param {Node} node2
+     * @return {Boolean} true if this is so, false otherwise
+     */
+
+  }, {
+    key: 'inSameSubNetwork',
+    value: function inSameSubNetwork(node1, node2) {
+      return this.trees[node1.id] === this.trees[node2.id];
+    }
+
+    /**
+     * Get a list of the distinct levels in the current network
+     *
+     * @returns {Array}
+     */
+
+  }, {
+    key: 'getLevels',
+    value: function getLevels() {
+      return (0, _keys2['default'])(this.distributionOrdering);
+    }
+
+    /**
+     * Add a node to the ordering per level
+     *
+     * @param {Node} node
+     * @param {number} level
+     */
+
+  }, {
+    key: 'addToOrdering',
+    value: function addToOrdering(node, level) {
+      if (this.distributionOrdering[level] === undefined) {
+        this.distributionOrdering[level] = [];
+      }
+
+      var isPresent = false;
+      var curLevel = this.distributionOrdering[level];
+      for (var n in curLevel) {
+        //if (curLevel[n].id === node.id) {
+        if (curLevel[n] === node) {
+          isPresent = true;
+          break;
+        }
+      }
+
+      if (!isPresent) {
+        this.distributionOrdering[level].push(node);
+        this.distributionIndex[node.id] = this.distributionOrdering[level].length - 1;
+      }
+    }
+  }]);
+  return HierarchicalStatus;
+}();
+
+/**
+ * The Layout Engine
+ */
+
+
+var LayoutEngine = function () {
+  /**
+   * @param {Object} body
+   */
+  function LayoutEngine(body) {
+    (0, _classCallCheck3['default'])(this, LayoutEngine);
+
+    this.body = body;
+
+    this.initialRandomSeed = Math.round(Math.random() * 1000000);
+    this.randomSeed = this.initialRandomSeed;
+    this.setPhysics = false;
+    this.options = {};
+    this.optionsBackup = { physics: {} };
+
+    this.defaultOptions = {
+      randomSeed: undefined,
+      improvedLayout: true,
+      hierarchical: {
+        enabled: false,
+        levelSeparation: 150,
+        nodeSpacing: 100,
+        treeSpacing: 200,
+        blockShifting: true,
+        edgeMinimization: true,
+        parentCentralization: true,
+        direction: 'UD', // UD, DU, LR, RL
+        sortMethod: 'hubsize' // hubsize, directed
+      }
+    };
+    util.extend(this.options, this.defaultOptions);
+    this.bindEventListeners();
+  }
+
+  /**
+   * Binds event listeners
+   */
+
+
+  (0, _createClass3['default'])(LayoutEngine, [{
+    key: 'bindEventListeners',
+    value: function bindEventListeners() {
+      var _this2 = this;
+
+      this.body.emitter.on('_dataChanged', function () {
+        _this2.setupHierarchicalLayout();
+      });
+      this.body.emitter.on('_dataLoaded', function () {
+        _this2.layoutNetwork();
+      });
+      this.body.emitter.on('_resetHierarchicalLayout', function () {
+        _this2.setupHierarchicalLayout();
+      });
+      this.body.emitter.on('_adjustEdgesForHierarchicalLayout', function () {
+        if (_this2.options.hierarchical.enabled !== true) {
+          return;
+        }
+        // get the type of static smooth curve in case it is required
+        var type = _this2.direction.curveType();
+
+        // force all edges into static smooth curves.
+        _this2.body.emitter.emit('_forceDisableDynamicCurves', type, false);
+      });
+    }
+
+    /**
+     *
+     * @param {Object} options
+     * @param {Object} allOptions
+     * @returns {Object}
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options, allOptions) {
+      if (options !== undefined) {
+        var hierarchical = this.options.hierarchical;
+        var prevHierarchicalState = hierarchical.enabled;
+        util.selectiveDeepExtend(["randomSeed", "improvedLayout"], this.options, options);
+        util.mergeOptions(this.options, options, 'hierarchical');
+        if (options.randomSeed !== undefined) {
+          this.initialRandomSeed = options.randomSeed;
+        }
+
+        if (hierarchical.enabled === true) {
+          if (prevHierarchicalState === true) {
+            // refresh the overridden options for nodes and edges.
+            this.body.emitter.emit('refresh', true);
+          }
+
+          // make sure the level separation is the right way up
+          if (hierarchical.direction === 'RL' || hierarchical.direction === 'DU') {
+            if (hierarchical.levelSeparation > 0) {
+              hierarchical.levelSeparation *= -1;
+            }
+          } else {
+            if (hierarchical.levelSeparation < 0) {
+              hierarchical.levelSeparation *= -1;
+            }
+          }
+
+          this.setDirectionStrategy();
+
+          this.body.emitter.emit('_resetHierarchicalLayout');
+          // because the hierarchical system needs it's own physics and smooth curve settings,
+          // we adapt the other options if needed.
+          return this.adaptAllOptionsForHierarchicalLayout(allOptions);
+        } else {
+          if (prevHierarchicalState === true) {
+            // refresh the overridden options for nodes and edges.
+            this.body.emitter.emit('refresh');
+            return util.deepExtend(allOptions, this.optionsBackup);
+          }
+        }
+      }
+      return allOptions;
+    }
+
+    /**
+     *
+     * @param {Object} allOptions
+     * @returns {Object}
+     */
+
+  }, {
+    key: 'adaptAllOptionsForHierarchicalLayout',
+    value: function adaptAllOptionsForHierarchicalLayout(allOptions) {
+      if (this.options.hierarchical.enabled === true) {
+        var backupPhysics = this.optionsBackup.physics;
+
+        // set the physics
+        if (allOptions.physics === undefined || allOptions.physics === true) {
+          allOptions.physics = {
+            enabled: backupPhysics.enabled === undefined ? true : backupPhysics.enabled,
+            solver: 'hierarchicalRepulsion'
+          };
+          backupPhysics.enabled = backupPhysics.enabled === undefined ? true : backupPhysics.enabled;
+          backupPhysics.solver = backupPhysics.solver || 'barnesHut';
+        } else if ((0, _typeof3['default'])(allOptions.physics) === 'object') {
+          backupPhysics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled;
+          backupPhysics.solver = allOptions.physics.solver || 'barnesHut';
+          allOptions.physics.solver = 'hierarchicalRepulsion';
+        } else if (allOptions.physics !== false) {
+          backupPhysics.solver = 'barnesHut';
+          allOptions.physics = { solver: 'hierarchicalRepulsion' };
+        }
+
+        // get the type of static smooth curve in case it is required
+        var type = this.direction.curveType();
+
+        // disable smooth curves if nothing is defined. If smooth curves have been turned on,
+        // turn them into static smooth curves.
+        if (allOptions.edges === undefined) {
+          this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } };
+          allOptions.edges = { smooth: false };
+        } else if (allOptions.edges.smooth === undefined) {
+          this.optionsBackup.edges = { smooth: { enabled: true, type: 'dynamic' } };
+          allOptions.edges.smooth = false;
+        } else {
+          if (typeof allOptions.edges.smooth === 'boolean') {
+            this.optionsBackup.edges = { smooth: allOptions.edges.smooth };
+            allOptions.edges.smooth = { enabled: allOptions.edges.smooth, type: type };
+          } else {
+            var smooth = allOptions.edges.smooth;
+
+            // allow custom types except for dynamic
+            if (smooth.type !== undefined && smooth.type !== 'dynamic') {
+              type = smooth.type;
+            }
+
+            // TODO: this is options merging; see if the standard routines can be used here.
+            this.optionsBackup.edges = {
+              smooth: smooth.enabled === undefined ? true : smooth.enabled,
+              type: smooth.type === undefined ? 'dynamic' : smooth.type,
+              roundness: smooth.roundness === undefined ? 0.5 : smooth.roundness,
+              forceDirection: smooth.forceDirection === undefined ? false : smooth.forceDirection
+            };
+
+            // NOTE: Copying an object to self; this is basically setting defaults for undefined variables
+            allOptions.edges.smooth = {
+              enabled: smooth.enabled === undefined ? true : smooth.enabled,
+              type: type,
+              roundness: smooth.roundness === undefined ? 0.5 : smooth.roundness,
+              forceDirection: smooth.forceDirection === undefined ? false : smooth.forceDirection
+            };
+          }
+        }
+
+        // Force all edges into static smooth curves.
+        // Only applies to edges that do not use the global options for smooth.
+        this.body.emitter.emit('_forceDisableDynamicCurves', type);
+      }
+
+      return allOptions;
+    }
+
+    /**
+     *
+     * @returns {number}
+     */
+
+  }, {
+    key: 'seededRandom',
+    value: function seededRandom() {
+      var x = Math.sin(this.randomSeed++) * 10000;
+      return x - Math.floor(x);
+    }
+
+    /**
+     *
+     * @param {Array.<Node>} nodesArray
+     */
+
+  }, {
+    key: 'positionInitially',
+    value: function positionInitially(nodesArray) {
+      if (this.options.hierarchical.enabled !== true) {
+        this.randomSeed = this.initialRandomSeed;
+        var radius = nodesArray.length + 50;
+        for (var i = 0; i < nodesArray.length; i++) {
+          var node = nodesArray[i];
+          var angle = 2 * Math.PI * this.seededRandom();
+          if (node.x === undefined) {
+            node.x = radius * Math.cos(angle);
+          }
+          if (node.y === undefined) {
+            node.y = radius * Math.sin(angle);
+          }
+        }
+      }
+    }
+
+    /**
+     * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we
+     * cluster them first to reduce the amount.
+     */
+
+  }, {
+    key: 'layoutNetwork',
+    value: function layoutNetwork() {
+      if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) {
+        var indices = this.body.nodeIndices;
+
+        // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible
+        // nodes have predefined positions we use this.
+        var positionDefined = 0;
+        for (var i = 0; i < indices.length; i++) {
+          var node = this.body.nodes[indices[i]];
+          if (node.predefinedPosition === true) {
+            positionDefined += 1;
+          }
+        }
+
+        // if less than half of the nodes have a predefined position we continue
+        if (positionDefined < 0.5 * indices.length) {
+          var MAX_LEVELS = 10;
+          var level = 0;
+          var clusterThreshold = 150; // TODO add this to options
+
+          //
+          // Define the options for the hidden cluster nodes
+          // These options don't propagate outside the clustering phase.
+          //
+          // Some options are explicitly disabled, because they may be set in group or default node options.
+          // The clusters are never displayed, so most explicit settings here serve as performance optimizations.
+          //
+          // The explicit setting of 'shape' is to avoid `shape: 'image'`; images are not passed to the hidden
+          // cluster nodes, leading to an exception on creation.
+          //
+          // All settings here are performance related, except when noted otherwise.
+          //
+          var clusterOptions = {
+            clusterNodeProperties: {
+              shape: 'ellipse', // Bugfix: avoid type 'image', no images supplied
+              label: '', // avoid label handling
+              group: '', // avoid group handling
+              font: { multi: false } // avoid font propagation
+            },
+            clusterEdgeProperties: {
+              label: '', // avoid label handling
+              font: { multi: false }, // avoid font propagation
+              smooth: {
+                enabled: false // avoid drawing penalty for complex edges
+              }
+            }
+          };
+
+          // if there are a lot of nodes, we cluster before we run the algorithm.
+          // NOTE: this part fails to find clusters for large scale-free networks, which should
+          //       be easily clusterable.
+          // TODO: examine why this is so
+          if (indices.length > clusterThreshold) {
+            var startLength = indices.length;
+            while (indices.length > clusterThreshold && level <= MAX_LEVELS) {
+              //console.time("clustering")
+              level += 1;
+              var before = indices.length;
+              // if there are many nodes we do a hubsize cluster
+              if (level % 3 === 0) {
+                this.body.modules.clustering.clusterBridges(clusterOptions);
+              } else {
+                this.body.modules.clustering.clusterOutliers(clusterOptions);
+              }
+              var after = indices.length;
+              if (before == after && level % 3 !== 0) {
+                this._declusterAll();
+                this.body.emitter.emit("_layoutFailed");
+                console.info("This network could not be positioned by this version of the improved layout algorithm." + " Please disable improvedLayout for better performance.");
+                return;
+              }
+              //console.timeEnd("clustering")
+              //console.log(before,level,after);
+            }
+            // increase the size of the edges
+            this.body.modules.kamadaKawai.setOptions({ springLength: Math.max(150, 2 * startLength) });
+          }
+          if (level > MAX_LEVELS) {
+            console.info("The clustering didn't succeed within the amount of interations allowed," + " progressing with partial result.");
+          }
+
+          // position the system for these nodes and edges
+          this.body.modules.kamadaKawai.solve(indices, this.body.edgeIndices, true);
+
+          // shift to center point
+          this._shiftToCenter();
+
+          // perturb the nodes a little bit to force the physics to kick in
+          var offset = 70;
+          for (var _i = 0; _i < indices.length; _i++) {
+            // Only perturb the nodes that aren't fixed
+            var _node = this.body.nodes[indices[_i]];
+            if (_node.predefinedPosition === false) {
+              _node.x += (0.5 - this.seededRandom()) * offset;
+              _node.y += (0.5 - this.seededRandom()) * offset;
+            }
+          }
+
+          // uncluster all clusters
+          this._declusterAll();
+
+          // reposition all bezier nodes.
+          this.body.emitter.emit("_repositionBezierNodes");
+        }
+      }
+    }
+
+    /**
+     * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view
+     * @private
+     */
+
+  }, {
+    key: '_shiftToCenter',
+    value: function _shiftToCenter() {
+      var range = NetworkUtil.getRangeCore(this.body.nodes, this.body.nodeIndices);
+      var center = NetworkUtil.findCenter(range);
+      for (var i = 0; i < this.body.nodeIndices.length; i++) {
+        var node = this.body.nodes[this.body.nodeIndices[i]];
+        node.x -= center.x;
+        node.y -= center.y;
+      }
+    }
+
+    /**
+     * Expands all clusters
+     * @private
+     */
+
+  }, {
+    key: '_declusterAll',
+    value: function _declusterAll() {
+      var clustersPresent = true;
+      while (clustersPresent === true) {
+        clustersPresent = false;
+        for (var i = 0; i < this.body.nodeIndices.length; i++) {
+          if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {
+            clustersPresent = true;
+            this.body.modules.clustering.openCluster(this.body.nodeIndices[i], {}, false);
+          }
+        }
+        if (clustersPresent === true) {
+          this.body.emitter.emit('_dataChanged');
+        }
+      }
+    }
+
+    /**
+     *
+     * @returns {number|*}
+     */
+
+  }, {
+    key: 'getSeed',
+    value: function getSeed() {
+      return this.initialRandomSeed;
+    }
+
+    /**
+     * This is the main function to layout the nodes in a hierarchical way.
+     * It checks if the node details are supplied correctly
+     *
+     * @private
+     */
+
+  }, {
+    key: 'setupHierarchicalLayout',
+    value: function setupHierarchicalLayout() {
+      if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) {
+        // get the size of the largest hubs and check if the user has defined a level for a node.
+        var node = void 0,
+            nodeId = void 0;
+        var definedLevel = false;
+        var undefinedLevel = false;
+        this.lastNodeOnLevel = {};
+        this.hierarchical = new HierarchicalStatus();
+
+        for (nodeId in this.body.nodes) {
+          if (this.body.nodes.hasOwnProperty(nodeId)) {
+            node = this.body.nodes[nodeId];
+            if (node.options.level !== undefined) {
+              definedLevel = true;
+              this.hierarchical.levels[nodeId] = node.options.level;
+            } else {
+              undefinedLevel = true;
+            }
+          }
+        }
+
+        // if the user defined some levels but not all, alert and run without hierarchical layout
+        if (undefinedLevel === true && definedLevel === true) {
+          throw new Error('To use the hierarchical layout, nodes require either no predefined levels' + ' or levels have to be defined for all nodes.');
+        } else {
+          // define levels if undefined by the users. Based on hubsize.
+          if (undefinedLevel === true) {
+            var sortMethod = this.options.hierarchical.sortMethod;
+            if (sortMethod === 'hubsize') {
+              this._determineLevelsByHubsize();
+            } else if (sortMethod === 'directed') {
+              this._determineLevelsDirected();
+            } else if (sortMethod === 'custom') {
+              this._determineLevelsCustomCallback();
+            }
+          }
+
+          // fallback for cases where there are nodes but no edges
+          for (var _nodeId2 in this.body.nodes) {
+            if (this.body.nodes.hasOwnProperty(_nodeId2)) {
+              this.hierarchical.ensureLevel(_nodeId2);
+            }
+          }
+          // check the distribution of the nodes per level.
+          var distribution = this._getDistribution();
+
+          // get the parent children relations.
+          this._generateMap();
+
+          // place the nodes on the canvas.
+          this._placeNodesByHierarchy(distribution);
+
+          // condense the whitespace.
+          this._condenseHierarchy();
+
+          // shift to center so gravity does not have to do much
+          this._shiftToCenter();
+        }
+      }
+    }
+
+    /**
+     * @private
+     */
+
+  }, {
+    key: '_condenseHierarchy',
+    value: function _condenseHierarchy() {
+      var _this3 = this;
+
+      // Global var in this scope to define when the movement has stopped.
+      var stillShifting = false;
+      var branches = {};
+      // first we have some methods to help shifting trees around.
+      // the main method to shift the trees
+      var shiftTrees = function shiftTrees() {
+        var treeSizes = getTreeSizes();
+        var shiftBy = 0;
+        for (var i = 0; i < treeSizes.length - 1; i++) {
+          var diff = treeSizes[i].max - treeSizes[i + 1].min;
+          shiftBy += diff + _this3.options.hierarchical.treeSpacing;
+          shiftTree(i + 1, shiftBy);
+        }
+      };
+
+      // shift a single tree by an offset
+      var shiftTree = function shiftTree(index, offset) {
+        var trees = _this3.hierarchical.trees;
+
+        for (var nodeId in trees) {
+          if (trees.hasOwnProperty(nodeId)) {
+            if (trees[nodeId] === index) {
+              _this3.direction.shift(nodeId, offset);
+            }
+          }
+        }
+      };
+
+      // get the width of all trees
+      var getTreeSizes = function getTreeSizes() {
+        var treeWidths = [];
+        for (var i = 0; i < _this3.hierarchical.numTrees(); i++) {
+          treeWidths.push(_this3.direction.getTreeSize(i));
+        }
+        return treeWidths;
+      };
+
+      // get a map of all nodes in this branch
+      var getBranchNodes = function getBranchNodes(source, map) {
+        if (map[source.id]) {
+          return;
+        }
+        map[source.id] = true;
+        if (_this3.hierarchical.childrenReference[source.id]) {
+          var children = _this3.hierarchical.childrenReference[source.id];
+          if (children.length > 0) {
+            for (var i = 0; i < children.length; i++) {
+              getBranchNodes(_this3.body.nodes[children[i]], map);
+            }
+          }
+        }
+      };
+
+      // get a min max width as well as the maximum movement space it has on either sides
+      // we use min max terminology because width and height can interchange depending on the direction of the layout
+      var getBranchBoundary = function getBranchBoundary(branchMap) {
+        var maxLevel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1e9;
+
+        var minSpace = 1e9;
+        var maxSpace = 1e9;
+        var min = 1e9;
+        var max = -1e9;
+        for (var branchNode in branchMap) {
+          if (branchMap.hasOwnProperty(branchNode)) {
+            var node = _this3.body.nodes[branchNode];
+            var level = _this3.hierarchical.levels[node.id];
+            var position = _this3.direction.getPosition(node);
+
+            // get the space around the node.
+
+            var _getSpaceAroundNode2 = _this3._getSpaceAroundNode(node, branchMap),
+                _getSpaceAroundNode3 = (0, _slicedToArray3['default'])(_getSpaceAroundNode2, 2),
+                minSpaceNode = _getSpaceAroundNode3[0],
+                maxSpaceNode = _getSpaceAroundNode3[1];
+
+            minSpace = Math.min(minSpaceNode, minSpace);
+            maxSpace = Math.min(maxSpaceNode, maxSpace);
+
+            // the width is only relevant for the levels two nodes have in common. This is why we filter on this.
+            if (level <= maxLevel) {
+              min = Math.min(position, min);
+              max = Math.max(position, max);
+            }
+          }
+        }
+
+        return [min, max, minSpace, maxSpace];
+      };
+
+      // check what the maximum level is these nodes have in common.
+      var getCollisionLevel = function getCollisionLevel(node1, node2) {
+        var maxLevel1 = _this3.hierarchical.getMaxLevel(node1.id);
+        var maxLevel2 = _this3.hierarchical.getMaxLevel(node2.id);
+        return Math.min(maxLevel1, maxLevel2);
+      };
+
+      /**
+       * Condense elements. These can be nodes or branches depending on the callback.
+       *
+       * @param {function} callback
+       * @param {Array.<number>} levels
+       * @param {*} centerParents
+       */
+      var shiftElementsCloser = function shiftElementsCloser(callback, levels, centerParents) {
+        var hier = _this3.hierarchical;
+
+        for (var i = 0; i < levels.length; i++) {
+          var level = levels[i];
+          var levelNodes = hier.distributionOrdering[level];
+          if (levelNodes.length > 1) {
+            for (var j = 0; j < levelNodes.length - 1; j++) {
+              var node1 = levelNodes[j];
+              var node2 = levelNodes[j + 1];
+
+              // NOTE: logic maintained as it was; if nodes have same ancestor,
+              //       then of course they are in the same sub-network.
+              if (hier.hasSameParent(node1, node2) && hier.inSameSubNetwork(node1, node2)) {
+                callback(node1, node2, centerParents);
+              }
+            }
+          }
+        }
+      };
+
+      // callback for shifting branches
+      var branchShiftCallback = function branchShiftCallback(node1, node2) {
+        var centerParent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+        //window.CALLBACKS.push(() => {
+        var pos1 = _this3.direction.getPosition(node1);
+        var pos2 = _this3.direction.getPosition(node2);
+        var diffAbs = Math.abs(pos2 - pos1);
+        var nodeSpacing = _this3.options.hierarchical.nodeSpacing;
+        //console.log("NOW CHECKING:", node1.id, node2.id, diffAbs);
+        if (diffAbs > nodeSpacing) {
+          var branchNodes1 = {};
+          var branchNodes2 = {};
+
+          getBranchNodes(node1, branchNodes1);
+          getBranchNodes(node2, branchNodes2);
+
+          // check the largest distance between the branches
+          var maxLevel = getCollisionLevel(node1, node2);
+          var branchNodeBoundary1 = getBranchBoundary(branchNodes1, maxLevel);
+          var branchNodeBoundary2 = getBranchBoundary(branchNodes2, maxLevel);
+          var max1 = branchNodeBoundary1[1];
+          var min2 = branchNodeBoundary2[0];
+          var minSpace2 = branchNodeBoundary2[2];
+
+          //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id,
+          //            getBranchBoundary(branchNodes2, maxLevel), maxLevel);
+          var diffBranch = Math.abs(max1 - min2);
+          if (diffBranch > nodeSpacing) {
+            var offset = max1 - min2 + nodeSpacing;
+            if (offset < -minSpace2 + nodeSpacing) {
+              offset = -minSpace2 + nodeSpacing;
+              //console.log("RESETTING OFFSET", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);
+            }
+            if (offset < 0) {
+              //console.log("SHIFTING", node2.id, offset);
+              _this3._shiftBlock(node2.id, offset);
+              stillShifting = true;
+
+              if (centerParent === true) _this3._centerParent(node2);
+            }
+          }
+        }
+        //this.body.emitter.emit("_redraw");})
+      };
+
+      var minimizeEdgeLength = function minimizeEdgeLength(iterations, node) {
+        //window.CALLBACKS.push(() => {
+        //  console.log("ts",node.id);
+        var nodeId = node.id;
+        var allEdges = node.edges;
+        var nodeLevel = _this3.hierarchical.levels[node.id];
+
+        // gather constants
+        var C2 = _this3.options.hierarchical.levelSeparation * _this3.options.hierarchical.levelSeparation;
+        var referenceNodes = {};
+        var aboveEdges = [];
+        for (var i = 0; i < allEdges.length; i++) {
+          var edge = allEdges[i];
+          if (edge.toId != edge.fromId) {
+            var otherNode = edge.toId == nodeId ? edge.from : edge.to;
+            referenceNodes[allEdges[i].id] = otherNode;
+            if (_this3.hierarchical.levels[otherNode.id] < nodeLevel) {
+              aboveEdges.push(edge);
+            }
+          }
+        }
+
+        // differentiated sum of lengths based on only moving one node over one axis
+        var getFx = function getFx(point, edges) {
+          var sum = 0;
+          for (var _i2 = 0; _i2 < edges.length; _i2++) {
+            if (referenceNodes[edges[_i2].id] !== undefined) {
+              var a = _this3.direction.getPosition(referenceNodes[edges[_i2].id]) - point;
+              sum += a / Math.sqrt(a * a + C2);
+            }
+          }
+          return sum;
+        };
+
+        // doubly differentiated sum of lengths based on only moving one node over one axis
+        var getDFx = function getDFx(point, edges) {
+          var sum = 0;
+          for (var _i3 = 0; _i3 < edges.length; _i3++) {
+            if (referenceNodes[edges[_i3].id] !== undefined) {
+              var a = _this3.direction.getPosition(referenceNodes[edges[_i3].id]) - point;
+              sum -= C2 * Math.pow(a * a + C2, -1.5);
+            }
+          }
+          return sum;
+        };
+
+        var getGuess = function getGuess(iterations, edges) {
+          var guess = _this3.direction.getPosition(node);
+          // Newton's method for optimization
+          var guessMap = {};
+          for (var _i4 = 0; _i4 < iterations; _i4++) {
+            var fx = getFx(guess, edges);
+            var dfx = getDFx(guess, edges);
+
+            // we limit the movement to avoid instability.
+            var limit = 40;
+            var ratio = Math.max(-limit, Math.min(limit, Math.round(fx / dfx)));
+            guess = guess - ratio;
+            // reduce duplicates
+            if (guessMap[guess] !== undefined) {
+              break;
+            }
+            guessMap[guess] = _i4;
+          }
+          return guess;
+        };
+
+        var moveBranch = function moveBranch(guess) {
+          // position node if there is space
+          var nodePosition = _this3.direction.getPosition(node);
+
+          // check movable area of the branch
+          if (branches[node.id] === undefined) {
+            var branchNodes = {};
+            getBranchNodes(node, branchNodes);
+            branches[node.id] = branchNodes;
+          }
+          var branchBoundary = getBranchBoundary(branches[node.id]);
+          var minSpaceBranch = branchBoundary[2];
+          var maxSpaceBranch = branchBoundary[3];
+
+          var diff = guess - nodePosition;
+
+          // check if we are allowed to move the node:
+          var branchOffset = 0;
+          if (diff > 0) {
+            branchOffset = Math.min(diff, maxSpaceBranch - _this3.options.hierarchical.nodeSpacing);
+          } else if (diff < 0) {
+            branchOffset = -Math.min(-diff, minSpaceBranch - _this3.options.hierarchical.nodeSpacing);
+          }
+
+          if (branchOffset != 0) {
+            //console.log("moving branch:",branchOffset, maxSpaceBranch, minSpaceBranch)
+            _this3._shiftBlock(node.id, branchOffset);
+            //this.body.emitter.emit("_redraw");
+            stillShifting = true;
+          }
+        };
+
+        var moveNode = function moveNode(guess) {
+          var nodePosition = _this3.direction.getPosition(node);
+
+          // position node if there is space
+
+          var _getSpaceAroundNode4 = _this3._getSpaceAroundNode(node),
+              _getSpaceAroundNode5 = (0, _slicedToArray3['default'])(_getSpaceAroundNode4, 2),
+              minSpace = _getSpaceAroundNode5[0],
+              maxSpace = _getSpaceAroundNode5[1];
+
+          var diff = guess - nodePosition;
+          // check if we are allowed to move the node:
+          var newPosition = nodePosition;
+          if (diff > 0) {
+            newPosition = Math.min(nodePosition + (maxSpace - _this3.options.hierarchical.nodeSpacing), guess);
+          } else if (diff < 0) {
+            newPosition = Math.max(nodePosition - (minSpace - _this3.options.hierarchical.nodeSpacing), guess);
+          }
+
+          if (newPosition !== nodePosition) {
+            //console.log("moving Node:",diff, minSpace, maxSpace);
+            _this3.direction.setPosition(node, newPosition);
+            //this.body.emitter.emit("_redraw");
+            stillShifting = true;
+          }
+        };
+
+        var guess = getGuess(iterations, aboveEdges);
+        moveBranch(guess);
+        guess = getGuess(iterations, allEdges);
+        moveNode(guess);
+        //})
+      };
+
+      // method to remove whitespace between branches. Because we do bottom up, we can center the parents.
+      var minimizeEdgeLengthBottomUp = function minimizeEdgeLengthBottomUp(iterations) {
+        var levels = _this3.hierarchical.getLevels();
+        levels = levels.reverse();
+        for (var i = 0; i < iterations; i++) {
+          stillShifting = false;
+          for (var j = 0; j < levels.length; j++) {
+            var level = levels[j];
+            var levelNodes = _this3.hierarchical.distributionOrdering[level];
+            for (var k = 0; k < levelNodes.length; k++) {
+              minimizeEdgeLength(1000, levelNodes[k]);
+            }
+          }
+          if (stillShifting !== true) {
+            //console.log("FINISHED minimizeEdgeLengthBottomUp IN " + i);
+            break;
+          }
+        }
+      };
+
+      // method to remove whitespace between branches. Because we do bottom up, we can center the parents.
+      var shiftBranchesCloserBottomUp = function shiftBranchesCloserBottomUp(iterations) {
+        var levels = _this3.hierarchical.getLevels();
+        levels = levels.reverse();
+        for (var i = 0; i < iterations; i++) {
+          stillShifting = false;
+          shiftElementsCloser(branchShiftCallback, levels, true);
+          if (stillShifting !== true) {
+            //console.log("FINISHED shiftBranchesCloserBottomUp IN " + (i+1));
+            break;
+          }
+        }
+      };
+
+      // center all parents
+      var centerAllParents = function centerAllParents() {
+        for (var nodeId in _this3.body.nodes) {
+          if (_this3.body.nodes.hasOwnProperty(nodeId)) _this3._centerParent(_this3.body.nodes[nodeId]);
+        }
+      };
+
+      // center all parents
+      var centerAllParentsBottomUp = function centerAllParentsBottomUp() {
+        var levels = _this3.hierarchical.getLevels();
+        levels = levels.reverse();
+        for (var i = 0; i < levels.length; i++) {
+          var level = levels[i];
+          var levelNodes = _this3.hierarchical.distributionOrdering[level];
+          for (var j = 0; j < levelNodes.length; j++) {
+            _this3._centerParent(levelNodes[j]);
+          }
+        }
+      };
+
+      // the actual work is done here.
+      if (this.options.hierarchical.blockShifting === true) {
+        shiftBranchesCloserBottomUp(5);
+        centerAllParents();
+      }
+
+      // minimize edge length
+      if (this.options.hierarchical.edgeMinimization === true) {
+        minimizeEdgeLengthBottomUp(20);
+      }
+
+      if (this.options.hierarchical.parentCentralization === true) {
+        centerAllParentsBottomUp();
+      }
+
+      shiftTrees();
+    }
+
+    /**
+     * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.
+     * This is used to only get the distances to nodes outside of a branch.
+     * @param {Node} node
+     * @param {{Node.id: vis.Node}} map
+     * @returns {number[]}
+     * @private
+     */
+
+  }, {
+    key: '_getSpaceAroundNode',
+    value: function _getSpaceAroundNode(node, map) {
+      var useMap = true;
+      if (map === undefined) {
+        useMap = false;
+      }
+      var level = this.hierarchical.levels[node.id];
+      if (level !== undefined) {
+        var index = this.hierarchical.distributionIndex[node.id];
+        var position = this.direction.getPosition(node);
+        var ordering = this.hierarchical.distributionOrdering[level];
+        var minSpace = 1e9;
+        var maxSpace = 1e9;
+        if (index !== 0) {
+          var prevNode = ordering[index - 1];
+          if (useMap === true && map[prevNode.id] === undefined || useMap === false) {
+            var prevPos = this.direction.getPosition(prevNode);
+            minSpace = position - prevPos;
+          }
+        }
+
+        if (index != ordering.length - 1) {
+          var nextNode = ordering[index + 1];
+          if (useMap === true && map[nextNode.id] === undefined || useMap === false) {
+            var nextPos = this.direction.getPosition(nextNode);
+            maxSpace = Math.min(maxSpace, nextPos - position);
+          }
+        }
+
+        return [minSpace, maxSpace];
+      } else {
+        return [0, 0];
+      }
+    }
+
+    /**
+     * We use this method to center a parent node and check if it does not cross other nodes when it does.
+     * @param {Node} node
+     * @private
+     */
+
+  }, {
+    key: '_centerParent',
+    value: function _centerParent(node) {
+      if (this.hierarchical.parentReference[node.id]) {
+        var parents = this.hierarchical.parentReference[node.id];
+        for (var i = 0; i < parents.length; i++) {
+          var parentId = parents[i];
+          var parentNode = this.body.nodes[parentId];
+          var children = this.hierarchical.childrenReference[parentId];
+
+          if (children !== undefined) {
+            // get the range of the children
+            var newPosition = this._getCenterPosition(children);
+
+            var position = this.direction.getPosition(parentNode);
+
+            var _getSpaceAroundNode6 = this._getSpaceAroundNode(parentNode),
+                _getSpaceAroundNode7 = (0, _slicedToArray3['default'])(_getSpaceAroundNode6, 2),
+                minSpace = _getSpaceAroundNode7[0],
+                maxSpace = _getSpaceAroundNode7[1];
+
+            var diff = position - newPosition;
+            if (diff < 0 && Math.abs(diff) < maxSpace - this.options.hierarchical.nodeSpacing || diff > 0 && Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing) {
+              this.direction.setPosition(parentNode, newPosition);
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * This function places the nodes on the canvas based on the hierarchial distribution.
+     *
+     * @param {Object} distribution | obtained by the function this._getDistribution()
+     * @private
+     */
+
+  }, {
+    key: '_placeNodesByHierarchy',
+    value: function _placeNodesByHierarchy(distribution) {
+      this.positionedNodes = {};
+      // start placing all the level 0 nodes first. Then recursively position their branches.
+      for (var level in distribution) {
+        if (distribution.hasOwnProperty(level)) {
+          // sort nodes in level by position:
+          var nodeArray = (0, _keys2['default'])(distribution[level]);
+          nodeArray = this._indexArrayToNodes(nodeArray);
+          this.direction.sort(nodeArray);
+          var handledNodeCount = 0;
+
+          for (var i = 0; i < nodeArray.length; i++) {
+            var node = nodeArray[i];
+            if (this.positionedNodes[node.id] === undefined) {
+              var spacing = this.options.hierarchical.nodeSpacing;
+              var pos = spacing * handledNodeCount;
+              // We get the X or Y values we need and store them in pos and previousPos.
+              // The get and set make sure we get X or Y
+              if (handledNodeCount > 0) {
+                pos = this.direction.getPosition(nodeArray[i - 1]) + spacing;
+              }
+              this.direction.setPosition(node, pos, level);
+              this._validatePositionAndContinue(node, level, pos);
+
+              handledNodeCount++;
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes
+     * on a X position that ensures there will be no overlap.
+     *
+     * @param {Node.id} parentId
+     * @param {number} parentLevel
+     * @private
+     */
+
+  }, {
+    key: '_placeBranchNodes',
+    value: function _placeBranchNodes(parentId, parentLevel) {
+      var childRef = this.hierarchical.childrenReference[parentId];
+
+      // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.
+      if (childRef === undefined) {
+        return;
+      }
+
+      // get a list of childNodes
+      var childNodes = [];
+      for (var i = 0; i < childRef.length; i++) {
+        childNodes.push(this.body.nodes[childRef[i]]);
+      }
+
+      // use the positions to order the nodes.
+      this.direction.sort(childNodes);
+
+      // position the childNodes
+      for (var _i5 = 0; _i5 < childNodes.length; _i5++) {
+        var childNode = childNodes[_i5];
+        var childNodeLevel = this.hierarchical.levels[childNode.id];
+        // check if the child node is below the parent node and if it has already been positioned.
+        if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) {
+          // get the amount of space required for this node. If parent the width is based on the amount of children.
+          var spacing = this.options.hierarchical.nodeSpacing;
+          var pos = void 0;
+
+          // we get the X or Y values we need and store them in pos and previousPos.
+          // The get and set make sure we get X or Y
+          if (_i5 === 0) {
+            pos = this.direction.getPosition(this.body.nodes[parentId]);
+          } else {
+            pos = this.direction.getPosition(childNodes[_i5 - 1]) + spacing;
+          }
+          this.direction.setPosition(childNode, pos, childNodeLevel);
+          this._validatePositionAndContinue(childNode, childNodeLevel, pos);
+        } else {
+          return;
+        }
+      }
+
+      // center the parent nodes.
+      var center = this._getCenterPosition(childNodes);
+      this.direction.setPosition(this.body.nodes[parentId], center, parentLevel);
+    }
+
+    /**
+     * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.
+     * Finally it will call _placeBranchNodes to place the branch nodes.
+     * @param {Node} node
+     * @param {number} level
+     * @param {number} pos
+     * @private
+     */
+
+  }, {
+    key: '_validatePositionAndContinue',
+    value: function _validatePositionAndContinue(node, level, pos) {
+      // This method only works for formal trees and formal forests
+      // Early exit if this is not the case
+      if (!this.hierarchical.isTree) return;
+
+      // if overlap has been detected, we shift the branch
+      if (this.lastNodeOnLevel[level] !== undefined) {
+        var previousPos = this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[level]]);
+        if (pos - previousPos < this.options.hierarchical.nodeSpacing) {
+          var diff = previousPos + this.options.hierarchical.nodeSpacing - pos;
+          var sharedParent = this._findCommonParent(this.lastNodeOnLevel[level], node.id);
+          this._shiftBlock(sharedParent.withChild, diff);
+        }
+      }
+
+      this.lastNodeOnLevel[level] = node.id; // store change in position.
+      this.positionedNodes[node.id] = true;
+      this._placeBranchNodes(node.id, level);
+    }
+
+    /**
+     * Receives an array with node indices and returns an array with the actual node references.
+     * Used for sorting based on node properties.
+     * @param {Array.<Node.id>} idArray
+     * @returns {Array.<Node>}
+     */
+
+  }, {
+    key: '_indexArrayToNodes',
+    value: function _indexArrayToNodes(idArray) {
+      var array = [];
+      for (var i = 0; i < idArray.length; i++) {
+        array.push(this.body.nodes[idArray[i]]);
+      }
+      return array;
+    }
+
+    /**
+     * This function get the distribution of levels based on hubsize
+     *
+     * @returns {Object}
+     * @private
+     */
+
+  }, {
+    key: '_getDistribution',
+    value: function _getDistribution() {
+      var distribution = {};
+      var nodeId = void 0,
+          node = void 0;
+
+      // we fix Y because the hierarchy is vertical,
+      // we fix X so we do not give a node an x position for a second time.
+      // the fix of X is removed after the x value has been set.
+      for (nodeId in this.body.nodes) {
+        if (this.body.nodes.hasOwnProperty(nodeId)) {
+          node = this.body.nodes[nodeId];
+          var level = this.hierarchical.levels[nodeId] === undefined ? 0 : this.hierarchical.levels[nodeId];
+          this.direction.fix(node, level);
+          if (distribution[level] === undefined) {
+            distribution[level] = {};
+          }
+          distribution[level][nodeId] = node;
+        }
+      }
+      return distribution;
+    }
+
+    /**
+     * Return the active (i.e. visible) edges for this node
+     *
+     * @param {Node} node
+     * @returns {Array.<vis.Edge>} Array of edge instances
+     * @private
+     */
+
+  }, {
+    key: '_getActiveEdges',
+    value: function _getActiveEdges(node) {
+      var _this4 = this;
+
+      var result = [];
+
+      util.forEach(node.edges, function (edge) {
+        if (_this4.body.edgeIndices.indexOf(edge.id) !== -1) {
+          result.push(edge);
+        }
+      });
+
+      return result;
+    }
+
+    /**
+     * Get the hubsizes for all active nodes.
+     *
+     * @returns {number}
+     * @private
+     */
+
+  }, {
+    key: '_getHubSizes',
+    value: function _getHubSizes() {
+      var _this5 = this;
+
+      var hubSizes = {};
+      var nodeIds = this.body.nodeIndices;
+
+      util.forEach(nodeIds, function (nodeId) {
+        var node = _this5.body.nodes[nodeId];
+        var hubSize = _this5._getActiveEdges(node).length;
+        hubSizes[hubSize] = true;
+      });
+
+      // Make an array of the size sorted descending
+      var result = [];
+      util.forEach(hubSizes, function (size) {
+        result.push(Number(size));
+      });
+
+      result.sort(function (a, b) {
+        return b - a;
+      });
+
+      return result;
+    }
+
+    /**
+     * this function allocates nodes in levels based on the recursive branching from the largest hubs.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_determineLevelsByHubsize',
+    value: function _determineLevelsByHubsize() {
+      var _this6 = this;
+
+      var levelDownstream = function levelDownstream(nodeA, nodeB) {
+        _this6.hierarchical.levelDownstream(nodeA, nodeB);
+      };
+
+      var hubSizes = this._getHubSizes();
+
+      var _loop = function _loop(i) {
+        var hubSize = hubSizes[i];
+        if (hubSize === 0) return 'break';
+
+        util.forEach(_this6.body.nodeIndices, function (nodeId) {
+          var node = _this6.body.nodes[nodeId];
+
+          if (hubSize === _this6._getActiveEdges(node).length) {
+            _this6._crawlNetwork(levelDownstream, nodeId);
+          }
+        });
+      };
+
+      for (var i = 0; i < hubSizes.length; ++i) {
+        var _ret = _loop(i);
+
+        if (_ret === 'break') break;
+      }
+    }
+
+    /**
+     * TODO: release feature
+     * TODO: Determine if this feature is needed at all
+     *
+     * @private
+     */
+
+  }, {
+    key: '_determineLevelsCustomCallback',
+    value: function _determineLevelsCustomCallback() {
+      var _this7 = this;
+
+      var minLevel = 100000;
+
+      // TODO: this should come from options.
+      var customCallback = function customCallback(nodeA, nodeB, edge) {// eslint-disable-line no-unused-vars
+
+      };
+
+      // TODO: perhaps move to HierarchicalStatus.
+      //       But I currently don't see the point, this method is not used.
+      var levelByDirection = function levelByDirection(nodeA, nodeB, edge) {
+        var levelA = _this7.hierarchical.levels[nodeA.id];
+        // set initial level
+        if (levelA === undefined) {
+          levelA = _this7.hierarchical.levels[nodeA.id] = minLevel;
+        }
+
+        var diff = customCallback(NetworkUtil.cloneOptions(nodeA, 'node'), NetworkUtil.cloneOptions(nodeB, 'node'), NetworkUtil.cloneOptions(edge, 'edge'));
+
+        _this7.hierarchical.levels[nodeB.id] = levelA + diff;
+      };
+
+      this._crawlNetwork(levelByDirection);
+      this.hierarchical.setMinLevelToZero(this.body.nodes);
+    }
+
+    /**
+     * Allocate nodes in levels based on the direction of the edges.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_determineLevelsDirected',
+    value: function _determineLevelsDirected() {
+      var _this8 = this;
+
+      var minLevel = 10000;
+
+      /**
+       * Check if there is an edge going the opposite direction for given edge
+       *
+       * @param {Edge} edge  edge to check
+       * @returns {boolean} true if there's another edge going into the opposite direction
+       */
+      var isBidirectional = function isBidirectional(edge) {
+        util.forEach(_this8.body.edges, function (otherEdge) {
+          if (otherEdge.toId === edge.fromId && otherEdge.fromId === edge.toId) {
+            return true;
+          }
+        });
+
+        return false;
+      };
+
+      var levelByDirection = function levelByDirection(nodeA, nodeB, edge) {
+        var levelA = _this8.hierarchical.levels[nodeA.id];
+        var levelB = _this8.hierarchical.levels[nodeB.id];
+
+        if (isBidirectional(edge) && levelA !== undefined && levelB !== undefined) {
+          // Don't redo the level determination if already done in this case.
+          return;
+        }
+
+        // set initial level
+        if (levelA === undefined) {
+          levelA = _this8.hierarchical.levels[nodeA.id] = minLevel;
+        }
+        if (edge.toId == nodeB.id) {
+          _this8.hierarchical.levels[nodeB.id] = levelA + 1;
+        } else {
+          _this8.hierarchical.levels[nodeB.id] = levelA - 1;
+        }
+      };
+
+      this._crawlNetwork(levelByDirection);
+      this.hierarchical.setMinLevelToZero(this.body.nodes);
+    }
+
+    /**
+     * Update the bookkeeping of parent and child.
+     * @private
+     */
+
+  }, {
+    key: '_generateMap',
+    value: function _generateMap() {
+      var _this9 = this;
+
+      var fillInRelations = function fillInRelations(parentNode, childNode) {
+        if (_this9.hierarchical.levels[childNode.id] > _this9.hierarchical.levels[parentNode.id]) {
+          _this9.hierarchical.addRelation(parentNode.id, childNode.id);
+        }
+      };
+
+      this._crawlNetwork(fillInRelations);
+      this.hierarchical.checkIfTree();
+    }
+
+    /**
+     * Crawl over the entire network and use a callback on each node couple that is connected to each other.
+     * @param {function} [callback=function(){}]          | will receive nodeA, nodeB and the connecting edge. A and B are distinct.
+     * @param {Node.id} startingNodeId
+     * @private
+     */
+
+  }, {
+    key: '_crawlNetwork',
+    value: function _crawlNetwork() {
+      var _this10 = this;
+
+      var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};
+      var startingNodeId = arguments[1];
+
+      var progress = {};
+
+      var crawler = function crawler(node, tree) {
+        if (progress[node.id] === undefined) {
+          _this10.hierarchical.setTreeIndex(node, tree);
+
+          progress[node.id] = true;
+          var childNode = void 0;
+          var edges = _this10._getActiveEdges(node);
+          for (var i = 0; i < edges.length; i++) {
+            var edge = edges[i];
+            if (edge.connected === true) {
+              if (edge.toId == node.id) {
+                // Not '===' because id's can be string and numeric
+                childNode = edge.from;
+              } else {
+                childNode = edge.to;
+              }
+
+              if (node.id != childNode.id) {
+                // Not '!==' because id's can be string and numeric
+                callback(node, childNode, edge);
+                crawler(childNode, tree);
+              }
+            }
+          }
+        }
+      };
+
+      if (startingNodeId === undefined) {
+        // Crawl over all nodes
+        var treeIndex = 0; // Serves to pass a unique id for the current distinct tree
+
+        for (var i = 0; i < this.body.nodeIndices.length; i++) {
+          var nodeId = this.body.nodeIndices[i];
+
+          if (progress[nodeId] === undefined) {
+            var node = this.body.nodes[nodeId];
+            crawler(node, treeIndex);
+            treeIndex += 1;
+          }
+        }
+      } else {
+        // Crawl from the given starting node
+        var _node2 = this.body.nodes[startingNodeId];
+        if (_node2 === undefined) {
+          console.error("Node not found:", startingNodeId);
+          return;
+        }
+        crawler(_node2);
+      }
+    }
+
+    /**
+     * Shift a branch a certain distance
+     * @param {Node.id} parentId
+     * @param {number} diff
+     * @private
+     */
+
+  }, {
+    key: '_shiftBlock',
+    value: function _shiftBlock(parentId, diff) {
+      var _this11 = this;
+
+      var progress = {};
+      var shifter = function shifter(parentId) {
+        if (progress[parentId]) {
+          return;
+        }
+        progress[parentId] = true;
+        _this11.direction.shift(parentId, diff);
+
+        var childRef = _this11.hierarchical.childrenReference[parentId];
+        if (childRef !== undefined) {
+          for (var i = 0; i < childRef.length; i++) {
+            shifter(childRef[i]);
+          }
+        }
+      };
+      shifter(parentId);
+    }
+
+    /**
+     * Find a common parent between branches.
+     * @param {Node.id} childA
+     * @param {Node.id} childB
+     * @returns {{foundParent, withChild}}
+     * @private
+     */
+
+  }, {
+    key: '_findCommonParent',
+    value: function _findCommonParent(childA, childB) {
+      var _this12 = this;
+
+      var parents = {};
+      var iterateParents = function iterateParents(parents, child) {
+        var parentRef = _this12.hierarchical.parentReference[child];
+        if (parentRef !== undefined) {
+          for (var i = 0; i < parentRef.length; i++) {
+            var parent = parentRef[i];
+            parents[parent] = true;
+            iterateParents(parents, parent);
+          }
+        }
+      };
+      var findParent = function findParent(parents, child) {
+        var parentRef = _this12.hierarchical.parentReference[child];
+        if (parentRef !== undefined) {
+          for (var i = 0; i < parentRef.length; i++) {
+            var parent = parentRef[i];
+            if (parents[parent] !== undefined) {
+              return { foundParent: parent, withChild: child };
+            }
+            var branch = findParent(parents, parent);
+            if (branch.foundParent !== null) {
+              return branch;
+            }
+          }
+        }
+        return { foundParent: null, withChild: child };
+      };
+
+      iterateParents(parents, childA);
+      return findParent(parents, childB);
+    }
+
+    /**
+     * Set the strategy pattern for handling the coordinates given the current direction.
+     *
+     * The individual instances contain all the operations and data specific to a layout direction.
+     *
+     * @param {Node} node
+     * @param {{x: number, y: number}} position
+     * @param {number} level
+     * @param {boolean} [doNotUpdate=false]
+     * @private
+     */
+
+  }, {
+    key: 'setDirectionStrategy',
+    value: function setDirectionStrategy() {
+      var isVertical = this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU';
+
+      if (isVertical) {
+        this.direction = new VerticalStrategy(this);
+      } else {
+        this.direction = new HorizontalStrategy(this);
+      }
+    }
+
+    /**
+     * Determine the center position of a branch from the passed list of child nodes
+     *
+     * This takes into account the positions of all the child nodes.
+     * @param {Array.<Node|vis.Node.id>} childNodes  Array of either child nodes or node id's
+     * @return {number}
+     * @private
+     */
+
+  }, {
+    key: '_getCenterPosition',
+    value: function _getCenterPosition(childNodes) {
+      var minPos = 1e9;
+      var maxPos = -1e9;
+
+      for (var i = 0; i < childNodes.length; i++) {
+        var childNode = void 0;
+        if (childNodes[i].id !== undefined) {
+          childNode = childNodes[i];
+        } else {
+          var childNodeId = childNodes[i];
+          childNode = this.body.nodes[childNodeId];
+        }
+
+        var position = this.direction.getPosition(childNode);
+        minPos = Math.min(minPos, position);
+        maxPos = Math.max(maxPos, position);
+      }
+
+      return 0.5 * (minPos + maxPos);
+    }
+  }]);
+  return LayoutEngine;
+}();
+
+exports['default'] = LayoutEngine;
+
+/***/ }),
+/* 236 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.VerticalStrategy = exports.HorizontalStrategy = undefined;
+
+var _getPrototypeOf = __webpack_require__(3);
+
+var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
+
+var _possibleConstructorReturn2 = __webpack_require__(4);
+
+var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
+
+var _inherits2 = __webpack_require__(5);
+
+var _inherits3 = _interopRequireDefault(_inherits2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+/**
+ * Helper classes for LayoutEngine.
+ *
+ * Strategy pattern for usage of direction methods for hierarchical layouts.
+ */
+
+/**
+ * Interface definition for direction strategy classes.
+ *
+ * This class describes the interface for the Strategy
+ * pattern classes used to differentiate horizontal and vertical
+ * direction of hierarchical results.
+ *
+ * For a given direction, one coordinate will be 'fixed', meaning that it is
+ * determined by level.
+ * The other coordinate is 'unfixed', meaning that the nodes on a given level
+ * can still move along that coordinate. So:
+ *
+ * - `vertical` layout: `x` unfixed, `y` fixed per level
+ * - `horizontal` layout: `x` fixed per level, `y` unfixed
+ *
+ * The local methods are stubs and should be regarded as abstract.
+ * Derived classes **must** implement all the methods themselves.
+ *
+ * @private
+ */
+var DirectionInterface = function () {
+  function DirectionInterface() {
+    (0, _classCallCheck3['default'])(this, DirectionInterface);
+  }
+
+  (0, _createClass3['default'])(DirectionInterface, [{
+    key: 'abstract',
+
+    /** @ignore **/
+    value: function abstract() {
+      throw new Error("Can't instantiate abstract class!");
+    }
+
+    /**
+     * This is a dummy call which is used to suppress the jsdoc errors of type:
+     *
+     *   "'param' is assigned a value but never used"
+     *
+     * @ignore
+     **/
+
+  }, {
+    key: 'fake_use',
+    value: function fake_use() {}
+    // Do nothing special
+
+
+    /**
+     * Type to use to translate dynamic curves to, in the case of hierarchical layout.
+     * Dynamic curves do not work for these.
+     *
+     * The value should be perpendicular to the actual direction of the layout.
+     *
+     * @return {string} Direction, either 'vertical' or 'horizontal'
+     */
+
+  }, {
+    key: 'curveType',
+    value: function curveType() {
+      return this.abstract();
+    }
+
+    /**
+     * Return the value of the coordinate that is not fixed for this direction.
+     *
+     * @param {Node} node The node to read
+     * @return {number} Value of the unfixed coordinate
+     */
+
+  }, {
+    key: 'getPosition',
+    value: function getPosition(node) {
+      this.fake_use(node);return this.abstract();
+    }
+
+    /**
+     * Set the value of the coordinate that is not fixed for this direction.
+     *
+     * @param {Node} node The node to adjust
+     * @param {number} position
+     * @param {number} [level] if specified, the hierarchy level that this node should be fixed to
+     */
+
+  }, {
+    key: 'setPosition',
+    value: function setPosition(node, position) {
+      var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+      this.fake_use(node, position, level);this.abstract();
+    }
+
+    /**
+     * Get the width of a tree.
+     *
+     * A `tree` here is a subset of nodes within the network which are not connected to other nodes,
+     * only among themselves. In essence, it is a sub-network.
+     *
+     * @param {number} index The index number of a tree
+     * @return {number} the width of a tree in the view coordinates
+     */
+
+  }, {
+    key: 'getTreeSize',
+    value: function getTreeSize(index) {
+      this.fake_use(index);return this.abstract();
+    }
+
+    /**
+     * Sort array of nodes on the unfixed coordinates.
+     *
+     * @param {Array.<Node>} nodeArray array of nodes to sort
+     */
+
+  }, {
+    key: 'sort',
+    value: function sort(nodeArray) {
+      this.fake_use(nodeArray);this.abstract();
+    }
+
+    /**
+     * Assign the fixed coordinate of the node to the given level
+     *
+     * @param {Node} node The node to adjust
+     * @param {number} level The level to fix to
+     */
+
+  }, {
+    key: 'fix',
+    value: function fix(node, level) {
+      this.fake_use(node, level);this.abstract();
+    }
+
+    /**
+     * Add an offset to the unfixed coordinate of the given node. 
+     *
+     * @param {NodeId} nodeId Id of the node to adjust
+     * @param {number} diff Offset to add to the unfixed coordinate
+     */
+
+  }, {
+    key: 'shift',
+    value: function shift(nodeId, diff) {
+      this.fake_use(nodeId, diff);this.abstract();
+    }
+  }]);
+  return DirectionInterface;
+}();
+
+/**
+ * Vertical Strategy
+ *
+ * Coordinate `y` is fixed on levels, coordinate `x` is unfixed.
+ *
+ * @extends DirectionInterface
+ * @private
+ */
+
+
+var VerticalStrategy = function (_DirectionInterface) {
+  (0, _inherits3['default'])(VerticalStrategy, _DirectionInterface);
+
+  /**
+   * Constructor
+   *
+   * @param {Object} layout reference to the parent LayoutEngine instance.
+   */
+  function VerticalStrategy(layout) {
+    (0, _classCallCheck3['default'])(this, VerticalStrategy);
+
+    var _this = (0, _possibleConstructorReturn3['default'])(this, (VerticalStrategy.__proto__ || (0, _getPrototypeOf2['default'])(VerticalStrategy)).call(this));
+
+    _this.layout = layout;
+    return _this;
+  }
+
+  /** @inheritdoc */
+
+
+  (0, _createClass3['default'])(VerticalStrategy, [{
+    key: 'curveType',
+    value: function curveType() {
+      return 'horizontal';
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'getPosition',
+    value: function getPosition(node) {
+      return node.x;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'setPosition',
+    value: function setPosition(node, position) {
+      var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+
+      if (level !== undefined) {
+        this.layout.hierarchical.addToOrdering(node, level);
+      }
+      node.x = position;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'getTreeSize',
+    value: function getTreeSize(index) {
+      var res = this.layout.hierarchical.getTreeSize(this.layout.body.nodes, index);
+      return { min: res.min_x, max: res.max_x };
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'sort',
+    value: function sort(nodeArray) {
+      nodeArray.sort(function (a, b) {
+        // Test on 'undefined' takes care of divergent behaviour in chrome
+        if (a.x === undefined || b.x === undefined) return 0; // THIS HAPPENS
+        return a.x - b.x;
+      });
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'fix',
+    value: function fix(node, level) {
+      node.y = this.layout.options.hierarchical.levelSeparation * level;
+      node.options.fixed.y = true;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'shift',
+    value: function shift(nodeId, diff) {
+      this.layout.body.nodes[nodeId].x += diff;
+    }
+  }]);
+  return VerticalStrategy;
+}(DirectionInterface);
+
+/**
+ * Horizontal Strategy
+ *
+ * Coordinate `x` is fixed on levels, coordinate `y` is unfixed.
+ *
+ * @extends DirectionInterface
+ * @private
+ */
+
+
+var HorizontalStrategy = function (_DirectionInterface2) {
+  (0, _inherits3['default'])(HorizontalStrategy, _DirectionInterface2);
+
+  /**
+   * Constructor
+   *
+   * @param {Object} layout reference to the parent LayoutEngine instance.
+   */
+  function HorizontalStrategy(layout) {
+    (0, _classCallCheck3['default'])(this, HorizontalStrategy);
+
+    var _this2 = (0, _possibleConstructorReturn3['default'])(this, (HorizontalStrategy.__proto__ || (0, _getPrototypeOf2['default'])(HorizontalStrategy)).call(this));
+
+    _this2.layout = layout;
+    return _this2;
+  }
+
+  /** @inheritdoc */
+
+
+  (0, _createClass3['default'])(HorizontalStrategy, [{
+    key: 'curveType',
+    value: function curveType() {
+      return 'vertical';
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'getPosition',
+    value: function getPosition(node) {
+      return node.y;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'setPosition',
+    value: function setPosition(node, position) {
+      var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+
+      if (level !== undefined) {
+        this.layout.hierarchical.addToOrdering(node, level);
+      }
+      node.y = position;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'getTreeSize',
+    value: function getTreeSize(index) {
+      var res = this.layout.hierarchical.getTreeSize(this.layout.body.nodes, index);
+      return { min: res.min_y, max: res.max_y };
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'sort',
+    value: function sort(nodeArray) {
+      nodeArray.sort(function (a, b) {
+        // Test on 'undefined' takes care of divergent behaviour in chrome
+        if (a.y === undefined || b.y === undefined) return 0; // THIS HAPPENS
+        return a.y - b.y;
+      });
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'fix',
+    value: function fix(node, level) {
+      node.x = this.layout.options.hierarchical.levelSeparation * level;
+      node.options.fixed.x = true;
+    }
+
+    /** @inheritdoc */
+
+  }, {
+    key: 'shift',
+    value: function shift(nodeId, diff) {
+      this.layout.body.nodes[nodeId].y += diff;
+    }
+  }]);
+  return HorizontalStrategy;
+}(DirectionInterface);
+
+exports.HorizontalStrategy = HorizontalStrategy;
+exports.VerticalStrategy = VerticalStrategy;
+
+/***/ }),
+/* 237 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _keys = __webpack_require__(8);
+
+var _keys2 = _interopRequireDefault(_keys);
+
+var _stringify = __webpack_require__(19);
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _typeof2 = __webpack_require__(6);
+
+var _typeof3 = _interopRequireDefault(_typeof2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var util = __webpack_require__(2);
+var Hammer = __webpack_require__(10);
+var hammerUtil = __webpack_require__(37);
+
+/**
+ * Clears the toolbar div element of children
+ *
+ * @private
+ */
+
+var ManipulationSystem = function () {
+  /**
+   * @param {Object} body
+   * @param {Canvas} canvas
+   * @param {SelectionHandler} selectionHandler
+   */
+  function ManipulationSystem(body, canvas, selectionHandler) {
+    var _this = this;
+
+    (0, _classCallCheck3['default'])(this, ManipulationSystem);
+
+    this.body = body;
+    this.canvas = canvas;
+    this.selectionHandler = selectionHandler;
+
+    this.editMode = false;
+    this.manipulationDiv = undefined;
+    this.editModeDiv = undefined;
+    this.closeDiv = undefined;
+
+    this.manipulationHammers = [];
+    this.temporaryUIFunctions = {};
+    this.temporaryEventFunctions = [];
+
+    this.touchTime = 0;
+    this.temporaryIds = { nodes: [], edges: [] };
+    this.guiEnabled = false;
+    this.inMode = false;
+    this.selectedControlNode = undefined;
+
+    this.options = {};
+    this.defaultOptions = {
+      enabled: false,
+      initiallyActive: false,
+      addNode: true,
+      addEdge: true,
+      editNode: undefined,
+      editEdge: true,
+      deleteNode: true,
+      deleteEdge: true,
+      controlNodeStyle: {
+        shape: 'dot',
+        size: 6,
+        color: { background: '#ff0000', border: '#3c3c3c', highlight: { background: '#07f968', border: '#3c3c3c' } },
+        borderWidth: 2,
+        borderWidthSelected: 2
+      }
+    };
+    util.extend(this.options, this.defaultOptions);
+
+    this.body.emitter.on('destroy', function () {
+      _this._clean();
+    });
+    this.body.emitter.on('_dataChanged', this._restore.bind(this));
+    this.body.emitter.on('_resetData', this._restore.bind(this));
+  }
+
+  /**
+   * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.
+   * @private
+   */
+
+
+  (0, _createClass3['default'])(ManipulationSystem, [{
+    key: '_restore',
+    value: function _restore() {
+      if (this.inMode !== false) {
+        if (this.options.initiallyActive === true) {
+          this.enableEditMode();
+        } else {
+          this.disableEditMode();
+        }
+      }
+    }
+
+    /**
+     * Set the Options
+     *
+     * @param {Object} options
+     * @param {Object} allOptions
+     * @param {Object} globalOptions
+     */
+
+  }, {
+    key: 'setOptions',
+    value: function setOptions(options, allOptions, globalOptions) {
+      if (allOptions !== undefined) {
+        if (allOptions.locale !== undefined) {
+          this.options.locale = allOptions.locale;
+        } else {
+          this.options.locale = globalOptions.locale;
+        }
+        if (allOptions.locales !== undefined) {
+          this.options.locales = allOptions.locales;
+        } else {
+          this.options.locales = globalOptions.locales;
+        }
+      }
+
+      if (options !== undefined) {
+        if (typeof options === 'boolean') {
+          this.options.enabled = options;
+        } else {
+          this.options.enabled = true;
+          util.deepExtend(this.options, options);
+        }
+        if (this.options.initiallyActive === true) {
+          this.editMode = true;
+        }
+        this._setup();
+      }
+    }
+
+    /**
+     * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.
+     *
+     * @private
+     */
+
+  }, {
+    key: 'toggleEditMode',
+    value: function toggleEditMode() {
+      if (this.editMode === true) {
+        this.disableEditMode();
+      } else {
+        this.enableEditMode();
+      }
+    }
+
+    /**
+     * Enables Edit Mode
+     */
+
+  }, {
+    key: 'enableEditMode',
+    value: function enableEditMode() {
+      this.editMode = true;
+
+      this._clean();
+      if (this.guiEnabled === true) {
+        this.manipulationDiv.style.display = 'block';
+        this.closeDiv.style.display = 'block';
+        this.editModeDiv.style.display = 'none';
+        this.showManipulatorToolbar();
+      }
+    }
+
+    /**
+     * Disables Edit Mode
+     */
+
+  }, {
+    key: 'disableEditMode',
+    value: function disableEditMode() {
+      this.editMode = false;
+
+      this._clean();
+      if (this.guiEnabled === true) {
+        this.manipulationDiv.style.display = 'none';
+        this.closeDiv.style.display = 'none';
+        this.editModeDiv.style.display = 'block';
+        this._createEditButton();
+      }
+    }
+
+    /**
+     * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.
+     *
+     * @private
+     */
+
+  }, {
+    key: 'showManipulatorToolbar',
+    value: function showManipulatorToolbar() {
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+
+      // reset global variables
+      this.manipulationDOM = {};
+
+      // if the gui is enabled, draw all elements.
+      if (this.guiEnabled === true) {
+        // a _restore will hide these menus
+        this.editMode = true;
+        this.manipulationDiv.style.display = 'block';
+        this.closeDiv.style.display = 'block';
+
+        var selectedNodeCount = this.selectionHandler._getSelectedNodeCount();
+        var selectedEdgeCount = this.selectionHandler._getSelectedEdgeCount();
+        var selectedTotalCount = selectedNodeCount + selectedEdgeCount;
+        var locale = this.options.locales[this.options.locale];
+        var needSeperator = false;
+
+        if (this.options.addNode !== false) {
+          this._createAddNodeButton(locale);
+          needSeperator = true;
+        }
+        if (this.options.addEdge !== false) {
+          if (needSeperator === true) {
+            this._createSeperator(1);
+          } else {
+            needSeperator = true;
+          }
+          this._createAddEdgeButton(locale);
+        }
+
+        if (selectedNodeCount === 1 && typeof this.options.editNode === 'function') {
+          if (needSeperator === true) {
+            this._createSeperator(2);
+          } else {
+            needSeperator = true;
+          }
+          this._createEditNodeButton(locale);
+        } else if (selectedEdgeCount === 1 && selectedNodeCount === 0 && this.options.editEdge !== false) {
+          if (needSeperator === true) {
+            this._createSeperator(3);
+          } else {
+            needSeperator = true;
+          }
+          this._createEditEdgeButton(locale);
+        }
+
+        // remove buttons
+        if (selectedTotalCount !== 0) {
+          if (selectedNodeCount > 0 && this.options.deleteNode !== false) {
+            if (needSeperator === true) {
+              this._createSeperator(4);
+            }
+            this._createDeleteButton(locale);
+          } else if (selectedNodeCount === 0 && this.options.deleteEdge !== false) {
+            if (needSeperator === true) {
+              this._createSeperator(4);
+            }
+            this._createDeleteButton(locale);
+          }
+        }
+
+        // bind the close button
+        this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));
+
+        // refresh this bar based on what has been selected
+        this._temporaryBindEvent('select', this.showManipulatorToolbar.bind(this));
+      }
+
+      // redraw to show any possible changes
+      this.body.emitter.emit('_redraw');
+    }
+
+    /**
+     * Create the toolbar for adding Nodes
+     */
+
+  }, {
+    key: 'addNodeMode',
+    value: function addNodeMode() {
+      // when using the gui, enable edit mode if it wasnt already.
+      if (this.editMode !== true) {
+        this.enableEditMode();
+      }
+
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+
+      this.inMode = 'addNode';
+      if (this.guiEnabled === true) {
+        var locale = this.options.locales[this.options.locale];
+        this.manipulationDOM = {};
+        this._createBackButton(locale);
+        this._createSeperator();
+        this._createDescription(locale['addDescription'] || this.options.locales['en']['addDescription']);
+
+        // bind the close button
+        this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));
+      }
+
+      this._temporaryBindEvent('click', this._performAddNode.bind(this));
+    }
+
+    /**
+     * call the bound function to handle the editing of the node. The node has to be selected.
+     */
+
+  }, {
+    key: 'editNode',
+    value: function editNode() {
+      var _this2 = this;
+
+      // when using the gui, enable edit mode if it wasnt already.
+      if (this.editMode !== true) {
+        this.enableEditMode();
+      }
+
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+      var node = this.selectionHandler._getSelectedNode();
+      if (node !== undefined) {
+        this.inMode = 'editNode';
+        if (typeof this.options.editNode === 'function') {
+          if (node.isCluster !== true) {
+            var data = util.deepExtend({}, node.options, false);
+            data.x = node.x;
+            data.y = node.y;
+
+            if (this.options.editNode.length === 2) {
+              this.options.editNode(data, function (finalizedData) {
+                if (finalizedData !== null && finalizedData !== undefined && _this2.inMode === 'editNode') {
+                  // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {
+                  _this2.body.data.nodes.getDataSet().update(finalizedData);
+                }
+                _this2.showManipulatorToolbar();
+              });
+            } else {
+              throw new Error('The function for edit does not support two arguments (data, callback)');
+            }
+          } else {
+            alert(this.options.locales[this.options.locale]['editClusterError'] || this.options.locales['en']['editClusterError']);
+          }
+        } else {
+          throw new Error('No function has been configured to handle the editing of nodes.');
+        }
+      } else {
+        this.showManipulatorToolbar();
+      }
+    }
+
+    /**
+     * create the toolbar to connect nodes
+     */
+
+  }, {
+    key: 'addEdgeMode',
+    value: function addEdgeMode() {
+      // when using the gui, enable edit mode if it wasnt already.
+      if (this.editMode !== true) {
+        this.enableEditMode();
+      }
+
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+
+      this.inMode = 'addEdge';
+      if (this.guiEnabled === true) {
+        var locale = this.options.locales[this.options.locale];
+        this.manipulationDOM = {};
+        this._createBackButton(locale);
+        this._createSeperator();
+        this._createDescription(locale['edgeDescription'] || this.options.locales['en']['edgeDescription']);
+
+        // bind the close button
+        this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));
+      }
+
+      // temporarily overload functions
+      this._temporaryBindUI('onTouch', this._handleConnect.bind(this));
+      this._temporaryBindUI('onDragEnd', this._finishConnect.bind(this));
+      this._temporaryBindUI('onDrag', this._dragControlNode.bind(this));
+      this._temporaryBindUI('onRelease', this._finishConnect.bind(this));
+      this._temporaryBindUI('onDragStart', this._dragStartEdge.bind(this));
+      this._temporaryBindUI('onHold', function () {});
+    }
+
+    /**
+     * create the toolbar to edit edges
+     */
+
+  }, {
+    key: 'editEdgeMode',
+    value: function editEdgeMode() {
+      // when using the gui, enable edit mode if it wasn't already.
+      if (this.editMode !== true) {
+        this.enableEditMode();
+      }
+
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+
+      this.inMode = 'editEdge';
+      if ((0, _typeof3['default'])(this.options.editEdge) === 'object' && typeof this.options.editEdge.editWithoutDrag === "function") {
+        this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];
+        if (this.edgeBeingEditedId !== undefined) {
+          var edge = this.body.edges[this.edgeBeingEditedId];
+          this._performEditEdge(edge.from, edge.to);
+          return;
+        }
+      }
+      if (this.guiEnabled === true) {
+        var locale = this.options.locales[this.options.locale];
+        this.manipulationDOM = {};
+        this._createBackButton(locale);
+        this._createSeperator();
+        this._createDescription(locale['editEdgeDescription'] || this.options.locales['en']['editEdgeDescription']);
+
+        // bind the close button
+        this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));
+      }
+
+      this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];
+      if (this.edgeBeingEditedId !== undefined) {
+        var _edge = this.body.edges[this.edgeBeingEditedId];
+
+        // create control nodes
+        var controlNodeFrom = this._getNewTargetNode(_edge.from.x, _edge.from.y);
+        var controlNodeTo = this._getNewTargetNode(_edge.to.x, _edge.to.y);
+
+        this.temporaryIds.nodes.push(controlNodeFrom.id);
+        this.temporaryIds.nodes.push(controlNodeTo.id);
+
+        this.body.nodes[controlNodeFrom.id] = controlNodeFrom;
+        this.body.nodeIndices.push(controlNodeFrom.id);
+        this.body.nodes[controlNodeTo.id] = controlNodeTo;
+        this.body.nodeIndices.push(controlNodeTo.id);
+
+        // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI
+        this._temporaryBindUI('onTouch', this._controlNodeTouch.bind(this)); // used to get the position
+        this._temporaryBindUI('onTap', function () {}); // disabled
+        this._temporaryBindUI('onHold', function () {}); // disabled
+        this._temporaryBindUI('onDragStart', this._controlNodeDragStart.bind(this)); // used to select control node
+        this._temporaryBindUI('onDrag', this._controlNodeDrag.bind(this)); // used to drag control node
+        this._temporaryBindUI('onDragEnd', this._controlNodeDragEnd.bind(this)); // used to connect or revert control nodes
+        this._temporaryBindUI('onMouseMove', function () {}); // disabled
+
+        // create function to position control nodes correctly on movement
+        // automatically cleaned up because we use the temporary bind
+        this._temporaryBindEvent('beforeDrawing', function (ctx) {
+          var positions = _edge.edgeType.findBorderPositions(ctx);
+          if (controlNodeFrom.selected === false) {
+            controlNodeFrom.x = positions.from.x;
+            controlNodeFrom.y = positions.from.y;
+          }
+          if (controlNodeTo.selected === false) {
+            controlNodeTo.x = positions.to.x;
+            controlNodeTo.y = positions.to.y;
+          }
+        });
+
+        this.body.emitter.emit('_redraw');
+      } else {
+        this.showManipulatorToolbar();
+      }
+    }
+
+    /**
+     * delete everything in the selection
+     */
+
+  }, {
+    key: 'deleteSelected',
+    value: function deleteSelected() {
+      var _this3 = this;
+
+      // when using the gui, enable edit mode if it wasnt already.
+      if (this.editMode !== true) {
+        this.enableEditMode();
+      }
+
+      // restore the state of any bound functions or events, remove control nodes, restore physics
+      this._clean();
+
+      this.inMode = 'delete';
+      var selectedNodes = this.selectionHandler.getSelectedNodes();
+      var selectedEdges = this.selectionHandler.getSelectedEdges();
+      var deleteFunction = undefined;
+      if (selectedNodes.length > 0) {
+        for (var i = 0; i < selectedNodes.length; i++) {
+          if (this.body.nodes[selectedNodes[i]].isCluster === true) {
+            alert(this.options.locales[this.options.locale]['deleteClusterError'] || this.options.locales['en']['deleteClusterError']);
+            return;
+          }
+        }
+
+        if (typeof this.options.deleteNode === 'function') {
+          deleteFunction = this.options.deleteNode;
+        }
+      } else if (selectedEdges.length > 0) {
+        if (typeof this.options.deleteEdge === 'function') {
+          deleteFunction = this.options.deleteEdge;
+        }
+      }
+
+      if (typeof deleteFunction === 'function') {
+        var data = { nodes: selectedNodes, edges: selectedEdges };
+        if (deleteFunction.length === 2) {
+          deleteFunction(data, function (finalizedData) {
+            if (finalizedData !== null && finalizedData !== undefined && _this3.inMode === 'delete') {
+              // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {
+              _this3.body.data.edges.getDataSet().remove(finalizedData.edges);
+              _this3.body.data.nodes.getDataSet().remove(finalizedData.nodes);
+              _this3.body.emitter.emit('startSimulation');
+              _this3.showManipulatorToolbar();
+            } else {
+              _this3.body.emitter.emit('startSimulation');
+              _this3.showManipulatorToolbar();
+            }
+          });
+        } else {
+          throw new Error('The function for delete does not support two arguments (data, callback)');
+        }
+      } else {
+        this.body.data.edges.getDataSet().remove(selectedEdges);
+        this.body.data.nodes.getDataSet().remove(selectedNodes);
+        this.body.emitter.emit('startSimulation');
+        this.showManipulatorToolbar();
+      }
+    }
+
+    //********************************************** PRIVATE ***************************************//
+
+    /**
+     * draw or remove the DOM
+     * @private
+     */
+
+  }, {
+    key: '_setup',
+    value: function _setup() {
+      if (this.options.enabled === true) {
+        // Enable the GUI
+        this.guiEnabled = true;
+
+        this._createWrappers();
+        if (this.editMode === false) {
+          this._createEditButton();
+        } else {
+          this.showManipulatorToolbar();
+        }
+      } else {
+        this._removeManipulationDOM();
+
+        // disable the gui
+        this.guiEnabled = false;
+      }
+    }
+
+    /**
+     * create the div overlays that contain the DOM
+     * @private
+     */
+
+  }, {
+    key: '_createWrappers',
+    value: function _createWrappers() {
+      // load the manipulator HTML elements. All styling done in css.
+      if (this.manipulationDiv === undefined) {
+        this.manipulationDiv = document.createElement('div');
+        this.manipulationDiv.className = 'vis-manipulation';
+        if (this.editMode === true) {
+          this.manipulationDiv.style.display = 'block';
+        } else {
+          this.manipulationDiv.style.display = 'none';
+        }
+        this.canvas.frame.appendChild(this.manipulationDiv);
+      }
+
+      // container for the edit button.
+      if (this.editModeDiv === undefined) {
+        this.editModeDiv = document.createElement('div');
+        this.editModeDiv.className = 'vis-edit-mode';
+        if (this.editMode === true) {
+          this.editModeDiv.style.display = 'none';
+        } else {
+          this.editModeDiv.style.display = 'block';
+        }
+        this.canvas.frame.appendChild(this.editModeDiv);
+      }
+
+      // container for the close div button
+      if (this.closeDiv === undefined) {
+        this.closeDiv = document.createElement('div');
+        this.closeDiv.className = 'vis-close';
+        this.closeDiv.style.display = this.manipulationDiv.style.display;
+        this.canvas.frame.appendChild(this.closeDiv);
+      }
+    }
+
+    /**
+     * generate a new target node. Used for creating new edges and editing edges
+     *
+     * @param {number} x
+     * @param {number} y
+     * @returns {Node}
+     * @private
+     */
+
+  }, {
+    key: '_getNewTargetNode',
+    value: function _getNewTargetNode(x, y) {
+      var controlNodeStyle = util.deepExtend({}, this.options.controlNodeStyle);
+
+      controlNodeStyle.id = 'targetNode' + util.randomUUID();
+      controlNodeStyle.hidden = false;
+      controlNodeStyle.physics = false;
+      controlNodeStyle.x = x;
+      controlNodeStyle.y = y;
+
+      // we have to define the bounding box in order for the nodes to be drawn immediately
+      var node = this.body.functions.createNode(controlNodeStyle);
+      node.shape.boundingBox = { left: x, right: x, top: y, bottom: y };
+
+      return node;
+    }
+
+    /**
+     * Create the edit button
+     */
+
+  }, {
+    key: '_createEditButton',
+    value: function _createEditButton() {
+      // restore everything to it's original state (if applicable)
+      this._clean();
+
+      // reset the manipulationDOM
+      this.manipulationDOM = {};
+
+      // empty the editModeDiv
+      util.recursiveDOMDelete(this.editModeDiv);
+
+      // create the contents for the editMode button
+      var locale = this.options.locales[this.options.locale];
+      var button = this._createButton('editMode', 'vis-button vis-edit vis-edit-mode', locale['edit'] || this.options.locales['en']['edit']);
+      this.editModeDiv.appendChild(button);
+
+      // bind a hammer listener to the button, calling the function toggleEditMode.
+      this._bindHammerToDiv(button, this.toggleEditMode.bind(this));
+    }
+
+    /**
+     * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.
+     * @private
+     */
+
+  }, {
+    key: '_clean',
+    value: function _clean() {
+      // not in mode
+      this.inMode = false;
+
+      // _clean the divs
+      if (this.guiEnabled === true) {
+        util.recursiveDOMDelete(this.editModeDiv);
+        util.recursiveDOMDelete(this.manipulationDiv);
+
+        // removes all the bindings and overloads
+        this._cleanManipulatorHammers();
+      }
+
+      // remove temporary nodes and edges
+      this._cleanupTemporaryNodesAndEdges();
+
+      // restore overloaded UI functions
+      this._unbindTemporaryUIs();
+
+      // remove the temporaryEventFunctions
+      this._unbindTemporaryEvents();
+
+      // restore the physics if required
+      this.body.emitter.emit('restorePhysics');
+    }
+
+    /**
+     * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.
+     * @private
+     */
+
+  }, {
+    key: '_cleanManipulatorHammers',
+    value: function _cleanManipulatorHammers() {
+      // _clean hammer bindings
+      if (this.manipulationHammers.length != 0) {
+        for (var i = 0; i < this.manipulationHammers.length; i++) {
+          this.manipulationHammers[i].destroy();
+        }
+        this.manipulationHammers = [];
+      }
+    }
+
+    /**
+     * Remove all DOM elements created by this module.
+     * @private
+     */
+
+  }, {
+    key: '_removeManipulationDOM',
+    value: function _removeManipulationDOM() {
+      // removes all the bindings and overloads
+      this._clean();
+
+      // empty the manipulation divs
+      util.recursiveDOMDelete(this.manipulationDiv);
+      util.recursiveDOMDelete(this.editModeDiv);
+      util.recursiveDOMDelete(this.closeDiv);
+
+      // remove the manipulation divs
+      if (this.manipulationDiv) {
+        this.canvas.frame.removeChild(this.manipulationDiv);
+      }
+      if (this.editModeDiv) {
+        this.canvas.frame.removeChild(this.editModeDiv);
+      }
+      if (this.closeDiv) {
+        this.canvas.frame.removeChild(this.closeDiv);
+      }
+
+      // set the references to undefined
+      this.manipulationDiv = undefined;
+      this.editModeDiv = undefined;
+      this.closeDiv = undefined;
+    }
+
+    /**
+     * create a seperator line. the index is to differentiate in the manipulation dom
+     * @param {number} [index=1]
+     * @private
+     */
+
+  }, {
+    key: '_createSeperator',
+    value: function _createSeperator() {
+      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
+
+      this.manipulationDOM['seperatorLineDiv' + index] = document.createElement('div');
+      this.manipulationDOM['seperatorLineDiv' + index].className = 'vis-separator-line';
+      this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv' + index]);
+    }
+
+    // ----------------------    DOM functions for buttons    --------------------------//
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createAddNodeButton',
+    value: function _createAddNodeButton(locale) {
+      var button = this._createButton('addNode', 'vis-button vis-add', locale['addNode'] || this.options.locales['en']['addNode']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.addNodeMode.bind(this));
+    }
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createAddEdgeButton',
+    value: function _createAddEdgeButton(locale) {
+      var button = this._createButton('addEdge', 'vis-button vis-connect', locale['addEdge'] || this.options.locales['en']['addEdge']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.addEdgeMode.bind(this));
+    }
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createEditNodeButton',
+    value: function _createEditNodeButton(locale) {
+      var button = this._createButton('editNode', 'vis-button vis-edit', locale['editNode'] || this.options.locales['en']['editNode']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.editNode.bind(this));
+    }
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createEditEdgeButton',
+    value: function _createEditEdgeButton(locale) {
+      var button = this._createButton('editEdge', 'vis-button vis-edit', locale['editEdge'] || this.options.locales['en']['editEdge']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.editEdgeMode.bind(this));
+    }
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createDeleteButton',
+    value: function _createDeleteButton(locale) {
+      var deleteBtnClass;
+      if (this.options.rtl) {
+        deleteBtnClass = 'vis-button vis-delete-rtl';
+      } else {
+        deleteBtnClass = 'vis-button vis-delete';
+      }
+      var button = this._createButton('delete', deleteBtnClass, locale['del'] || this.options.locales['en']['del']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.deleteSelected.bind(this));
+    }
+
+    /**
+     *
+     * @param {Locale} locale
+     * @private
+     */
+
+  }, {
+    key: '_createBackButton',
+    value: function _createBackButton(locale) {
+      var button = this._createButton('back', 'vis-button vis-back', locale['back'] || this.options.locales['en']['back']);
+      this.manipulationDiv.appendChild(button);
+      this._bindHammerToDiv(button, this.showManipulatorToolbar.bind(this));
+    }
+
+    /**
+     *
+     * @param {number|string} id
+     * @param {string} className
+     * @param {label} label
+     * @param {string} labelClassName
+     * @returns {HTMLElement}
+     * @private
+     */
+
+  }, {
+    key: '_createButton',
+    value: function _createButton(id, className, label) {
+      var labelClassName = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'vis-label';
+
+
+      this.manipulationDOM[id + 'Div'] = document.createElement('div');
+      this.manipulationDOM[id + 'Div'].className = className;
+      this.manipulationDOM[id + 'Label'] = document.createElement('div');
+      this.manipulationDOM[id + 'Label'].className = labelClassName;
+      this.manipulationDOM[id + 'Label'].innerHTML = label;
+      this.manipulationDOM[id + 'Div'].appendChild(this.manipulationDOM[id + 'Label']);
+      return this.manipulationDOM[id + 'Div'];
+    }
+
+    /**
+     *
+     * @param {Label} label
+     * @private
+     */
+
+  }, {
+    key: '_createDescription',
+    value: function _createDescription(label) {
+      this.manipulationDiv.appendChild(this._createButton('description', 'vis-button vis-none', label));
+    }
+
+    // -------------------------- End of DOM functions for buttons ------------------------------//
+
+    /**
+     * this binds an event until cleanup by the clean functions.
+     * @param {Event}  event   The event
+     * @param {function} newFunction
+     * @private
+     */
+
+  }, {
+    key: '_temporaryBindEvent',
+    value: function _temporaryBindEvent(event, newFunction) {
+      this.temporaryEventFunctions.push({ event: event, boundFunction: newFunction });
+      this.body.emitter.on(event, newFunction);
+    }
+
+    /**
+     * this overrides an UI function until cleanup by the clean function
+     * @param {string} UIfunctionName
+     * @param {function} newFunction
+     * @private
+     */
+
+  }, {
+    key: '_temporaryBindUI',
+    value: function _temporaryBindUI(UIfunctionName, newFunction) {
+      if (this.body.eventListeners[UIfunctionName] !== undefined) {
+        this.temporaryUIFunctions[UIfunctionName] = this.body.eventListeners[UIfunctionName];
+        this.body.eventListeners[UIfunctionName] = newFunction;
+      } else {
+        throw new Error('This UI function does not exist. Typo? You tried: ' + UIfunctionName + ' possible are: ' + (0, _stringify2['default'])((0, _keys2['default'])(this.body.eventListeners)));
+      }
+    }
+
+    /**
+     * Restore the overridden UI functions to their original state.
+     *
+     * @private
+     */
+
+  }, {
+    key: '_unbindTemporaryUIs',
+    value: function _unbindTemporaryUIs() {
+      for (var functionName in this.temporaryUIFunctions) {
+        if (this.temporaryUIFunctions.hasOwnProperty(functionName)) {
+          this.body.eventListeners[functionName] = this.temporaryUIFunctions[functionName];
+          delete this.temporaryUIFunctions[functionName];
+        }
+      }
+      this.temporaryUIFunctions = {};
+    }
+
+    /**
+     * Unbind the events created by _temporaryBindEvent
+     * @private
+     */
+
+  }, {
+    key: '_unbindTemporaryEvents',
+    value: function _unbindTemporaryEvents() {
+      for (var i = 0; i < this.temporaryEventFunctions.length; i++) {
+        var eventName = this.temporaryEventFunctions[i].event;
+        var boundFunction = this.temporaryEventFunctions[i].boundFunction;
+        this.body.emitter.off(eventName, boundFunction);
+      }
+      this.temporaryEventFunctions = [];
+    }
+
+    /**
+     * Bind an hammer instance to a DOM element.
+     *
+     * @param {Element} domElement
+     * @param {function} boundFunction
+     */
+
+  }, {
+    key: '_bindHammerToDiv',
+    value: function _bindHammerToDiv(domElement, boundFunction) {
+      var hammer = new Hammer(domElement, {});
+      hammerUtil.onTouch(hammer, boundFunction);
+      this.manipulationHammers.push(hammer);
+    }
+
+    /**
+     * Neatly clean up temporary edges and nodes
+     * @private
+     */
+
+  }, {
+    key: '_cleanupTemporaryNodesAndEdges',
+    value: function _cleanupTemporaryNodesAndEdges() {
+      // _clean temporary edges
+      for (var i = 0; i < this.temporaryIds.edges.length; i++) {
+        this.body.edges[this.temporaryIds.edges[i]].disconnect();
+        delete this.body.edges[this.temporaryIds.edges[i]];
+        var indexTempEdge = this.body.edgeIndices.indexOf(this.temporaryIds.edges[i]);
+        if (indexTempEdge !== -1) {
+          this.body.edgeIndices.splice(indexTempEdge, 1);
+        }
+      }
+
+      // _clean temporary nodes
+      for (var _i = 0; _i < this.temporaryIds.nodes.length; _i++) {
+        delete this.body.nodes[this.temporaryIds.nodes[_i]];
+        var indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[_i]);
+        if (indexTempNode !== -1) {
+          this.body.nodeIndices.splice(indexTempNode, 1);
+        }
+      }
+
+      this.temporaryIds = { nodes: [], edges: [] };
+    }
+
+    // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//
+
+    /**
+     * the touch is used to get the position of the initial click
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_controlNodeTouch',
+    value: function _controlNodeTouch(event) {
+      this.selectionHandler.unselectAll();
+      this.lastTouch = this.body.functions.getPointer(event.center);
+      this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object
+    }
+
+    /**
+     * the drag start is used to mark one of the control nodes as selected.
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_controlNodeDragStart',
+    value: function _controlNodeDragStart(event) {
+      // eslint-disable-line no-unused-vars
+      var pointer = this.lastTouch;
+      var pointerObj = this.selectionHandler._pointerToPositionObject(pointer);
+      var from = this.body.nodes[this.temporaryIds.nodes[0]];
+      var to = this.body.nodes[this.temporaryIds.nodes[1]];
+      var edge = this.body.edges[this.edgeBeingEditedId];
+      this.selectedControlNode = undefined;
+
+      var fromSelect = from.isOverlappingWith(pointerObj);
+      var toSelect = to.isOverlappingWith(pointerObj);
+
+      if (fromSelect === true) {
+        this.selectedControlNode = from;
+        edge.edgeType.from = from;
+      } else if (toSelect === true) {
+        this.selectedControlNode = to;
+        edge.edgeType.to = to;
+      }
+
+      // we use the selection to find the node that is being dragged. We explicitly select it here.
+      if (this.selectedControlNode !== undefined) {
+        this.selectionHandler.selectObject(this.selectedControlNode);
+      }
+
+      this.body.emitter.emit('_redraw');
+    }
+
+    /**
+     * dragging the control nodes or the canvas
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_controlNodeDrag',
+    value: function _controlNodeDrag(event) {
+      this.body.emitter.emit('disablePhysics');
+      var pointer = this.body.functions.getPointer(event.center);
+      var pos = this.canvas.DOMtoCanvas(pointer);
+      if (this.selectedControlNode !== undefined) {
+        this.selectedControlNode.x = pos.x;
+        this.selectedControlNode.y = pos.y;
+      } else {
+        // if the drag was not started properly because the click started outside the network div, start it now.
+        var diffX = pointer.x - this.lastTouch.x;
+        var diffY = pointer.y - this.lastTouch.y;
+        this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY };
+      }
+      this.body.emitter.emit('_redraw');
+    }
+
+    /**
+     * connecting or restoring the control nodes.
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_controlNodeDragEnd',
+    value: function _controlNodeDragEnd(event) {
+      var pointer = this.body.functions.getPointer(event.center);
+      var pointerObj = this.selectionHandler._pointerToPositionObject(pointer);
+      var edge = this.body.edges[this.edgeBeingEditedId];
+      // if the node that was dragged is not a control node, return
+      if (this.selectedControlNode === undefined) {
+        return;
+      }
+
+      // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.
+      this.selectionHandler.unselectAll();
+      var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);
+      var node = undefined;
+      for (var i = overlappingNodeIds.length - 1; i >= 0; i--) {
+        if (overlappingNodeIds[i] !== this.selectedControlNode.id) {
+          node = this.body.nodes[overlappingNodeIds[i]];
+          break;
+        }
+      }
+      // perform the connection
+      if (node !== undefined && this.selectedControlNode !== undefined) {
+        if (node.isCluster === true) {
+          alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']);
+        } else {
+          var from = this.body.nodes[this.temporaryIds.nodes[0]];
+          if (this.selectedControlNode.id === from.id) {
+            this._performEditEdge(node.id, edge.to.id);
+          } else {
+            this._performEditEdge(edge.from.id, node.id);
+          }
+        }
+      } else {
+        edge.updateEdgeType();
+        this.body.emitter.emit('restorePhysics');
+      }
+
+      this.body.emitter.emit('_redraw');
+    }
+
+    // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//
+
+
+    // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//
+    /**
+     * the function bound to the selection event. It checks if you want to connect a cluster and changes the description
+     * to walk the user through the process.
+     *
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: '_handleConnect',
+    value: function _handleConnect(event) {
+      // check to avoid double fireing of this function.
+      if (new Date().valueOf() - this.touchTime > 100) {
+        this.lastTouch = this.body.functions.getPointer(event.center);
+        this.lastTouch.translation = util.extend({}, this.body.view.translation); // copy the object
+
+        var pointer = this.lastTouch;
+        var node = this.selectionHandler.getNodeAt(pointer);
+
+        if (node !== undefined) {
+          if (node.isCluster === true) {
+            alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']);
+          } else {
+            // create a node the temporary line can look at
+            var targetNode = this._getNewTargetNode(node.x, node.y);
+            this.body.nodes[targetNode.id] = targetNode;
+            this.body.nodeIndices.push(targetNode.id);
+
+            // create a temporary edge
+            var connectionEdge = this.body.functions.createEdge({
+              id: 'connectionEdge' + util.randomUUID(),
+              from: node.id,
+              to: targetNode.id,
+              physics: false,
+              smooth: {
+                enabled: true,
+                type: 'continuous',
+                roundness: 0.5
+              }
+            });
+            this.body.edges[connectionEdge.id] = connectionEdge;
+            this.body.edgeIndices.push(connectionEdge.id);
+
+            this.temporaryIds.nodes.push(targetNode.id);
+            this.temporaryIds.edges.push(connectionEdge.id);
+          }
+        }
+        this.touchTime = new Date().valueOf();
+      }
+    }
+
+    /**
+     *
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: '_dragControlNode',
+    value: function _dragControlNode(event) {
+      var pointer = this.body.functions.getPointer(event.center);
+      if (this.temporaryIds.nodes[0] !== undefined) {
+        var targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.
+        targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);
+        targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);
+        this.body.emitter.emit('_redraw');
+      } else {
+        var diffX = pointer.x - this.lastTouch.x;
+        var diffY = pointer.y - this.lastTouch.y;
+        this.body.view.translation = { x: this.lastTouch.translation.x + diffX, y: this.lastTouch.translation.y + diffY };
+      }
+    }
+
+    /**
+     * Connect the new edge to the target if one exists, otherwise remove temp line
+     * @param {Event}  event   The event
+     * @private
+     */
+
+  }, {
+    key: '_finishConnect',
+    value: function _finishConnect(event) {
+      var pointer = this.body.functions.getPointer(event.center);
+      var pointerObj = this.selectionHandler._pointerToPositionObject(pointer);
+
+      // remember the edge id
+      var connectFromId = undefined;
+      if (this.temporaryIds.edges[0] !== undefined) {
+        connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;
+      }
+
+      // get the overlapping node but NOT the temporary node;
+      var overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);
+      var node = undefined;
+      for (var i = overlappingNodeIds.length - 1; i >= 0; i--) {
+        // if the node id is NOT a temporary node, accept the node.
+        if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {
+          node = this.body.nodes[overlappingNodeIds[i]];
+          break;
+        }
+      }
+
+      // clean temporary nodes and edges.
+      this._cleanupTemporaryNodesAndEdges();
+
+      // perform the connection
+      if (node !== undefined) {
+        if (node.isCluster === true) {
+          alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']);
+        } else {
+          if (this.body.nodes[connectFromId] !== undefined && this.body.nodes[node.id] !== undefined) {
+            this._performAddEdge(connectFromId, node.id);
+          }
+        }
+      }
+
+      // No need to do _generateclickevent('dragEnd') here, the regular dragEnd event fires.
+      this.body.emitter.emit('_redraw');
+    }
+
+    /**
+     *
+     * @param {Event} event
+     * @private
+     */
+
+  }, {
+    key: '_dragStartEdge',
+    value: function _dragStartEdge(event) {
+      var pointer = this.lastTouch;
+      this.selectionHandler._generateClickEvent('dragStart', event, pointer, undefined, true);
+    }
+
+    // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//
+
+
+    // ------------------------------ Performing all the actual data manipulation ------------------------//
+
+    /**
+     * Adds a node on the specified location
+     *
+     * @param {Object} clickData
+     * @private
+     */
+
+  }, {
+    key: '_performAddNode',
+    value: function _performAddNode(clickData) {
+      var _this4 = this;
+
+      var defaultData = {
+        id: util.randomUUID(),
+        x: clickData.pointer.canvas.x,
+        y: clickData.pointer.canvas.y,
+        label: 'new'
+      };
+
+      if (typeof this.options.addNode === 'function') {
+        if (this.options.addNode.length === 2) {
+          this.options.addNode(defaultData, function (finalizedData) {
+            if (finalizedData !== null && finalizedData !== undefined && _this4.inMode === 'addNode') {
+              // if for whatever reason the mode has changes (due to dataset change) disregard the callback
+              _this4.body.data.nodes.getDataSet().add(finalizedData);
+              _this4.showManipulatorToolbar();
+            }
+          });
+        } else {
+          this.showManipulatorToolbar();
+          throw new Error('The function for add does not support two arguments (data,callback)');
+        }
+      } else {
+        this.body.data.nodes.getDataSet().add(defaultData);
+        this.showManipulatorToolbar();
+      }
+    }
+
+    /**
+     * connect two nodes with a new edge.
+     *
+     * @param {Node.id} sourceNodeId
+     * @param {Node.id} targetNodeId
+     * @private
+     */
+
+  }, {
+    key: '_performAddEdge',
+    value: function _performAddEdge(sourceNodeId, targetNodeId) {
+      var _this5 = this;
+
+      var defaultData = { from: sourceNodeId, to: targetNodeId };
+      if (typeof this.options.addEdge === 'function') {
+        if (this.options.addEdge.length === 2) {
+          this.options.addEdge(defaultData, function (finalizedData) {
+            if (finalizedData !== null && finalizedData !== undefined && _this5.inMode === 'addEdge') {
+              // if for whatever reason the mode has changes (due to dataset change) disregard the callback
+              _this5.body.data.edges.getDataSet().add(finalizedData);
+              _this5.selectionHandler.unselectAll();
+              _this5.showManipulatorToolbar();
+            }
+          });
+        } else {
+          throw new Error('The function for connect does not support two arguments (data,callback)');
+        }
+      } else {
+        this.body.data.edges.getDataSet().add(defaultData);
+        this.selectionHandler.unselectAll();
+        this.showManipulatorToolbar();
+      }
+    }
+
+    /**
+     * connect two nodes with a new edge.
+     *
+     * @param {Node.id} sourceNodeId
+     * @param {Node.id} targetNodeId
+     * @private
+     */
+
+  }, {
+    key: '_performEditEdge',
+    value: function _performEditEdge(sourceNodeId, targetNodeId) {
+      var _this6 = this;
+
+      var defaultData = { id: this.edgeBeingEditedId, from: sourceNodeId, to: targetNodeId, label: this.body.data.edges._data[this.edgeBeingEditedId].label };
+      var eeFunct = this.options.editEdge;
+      if ((typeof eeFunct === 'undefined' ? 'undefined' : (0, _typeof3['default'])(eeFunct)) === 'object') {
+        eeFunct = eeFunct.editWithoutDrag;
+      }
+      if (typeof eeFunct === 'function') {
+        if (eeFunct.length === 2) {
+          eeFunct(defaultData, function (finalizedData) {
+            if (finalizedData === null || finalizedData === undefined || _this6.inMode !== 'editEdge') {
+              // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {
+              _this6.body.edges[defaultData.id].updateEdgeType();
+              _this6.body.emitter.emit('_redraw');
+              _this6.showManipulatorToolbar();
+            } else {
+              _this6.body.data.edges.getDataSet().update(finalizedData);
+              _this6.selectionHandler.unselectAll();
+              _this6.showManipulatorToolbar();
+            }
+          });
+        } else {
+          throw new Error('The function for edit does not support two arguments (data, callback)');
+        }
+      } else {
+        this.body.data.edges.getDataSet().update(defaultData);
+        this.selectionHandler.unselectAll();
+        this.showManipulatorToolbar();
+      }
+    }
+  }]);
+  return ManipulationSystem;
+}();
+
+exports['default'] = ManipulationSystem;
+
+/***/ }),
+/* 238 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _slicedToArray2 = __webpack_require__(30);
+
+var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+var _FloydWarshall = __webpack_require__(239);
+
+var _FloydWarshall2 = _interopRequireDefault(_FloydWarshall);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ * KamadaKawai positions the nodes initially based on
+ *
+ * "AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS"
+ * -- Tomihisa KAMADA and Satoru KAWAI in 1989
+ *
+ * Possible optimizations in the distance calculation can be implemented.
+ */
+var KamadaKawai = function () {
+  /**
+   * @param {Object} body
+   * @param {number} edgeLength
+   * @param {number} edgeStrength
+   */
+  function KamadaKawai(body, edgeLength, edgeStrength) {
+    (0, _classCallCheck3["default"])(this, KamadaKawai);
+
+    this.body = body;
+    this.springLength = edgeLength;
+    this.springConstant = edgeStrength;
+    this.distanceSolver = new _FloydWarshall2["default"]();
+  }
+
+  /**
+   * Not sure if needed but can be used to update the spring length and spring constant
+   * @param {Object} options
+   */
+
+
+  (0, _createClass3["default"])(KamadaKawai, [{
+    key: "setOptions",
+    value: function setOptions(options) {
+      if (options) {
+        if (options.springLength) {
+          this.springLength = options.springLength;
+        }
+        if (options.springConstant) {
+          this.springConstant = options.springConstant;
+        }
+      }
+    }
+
+    /**
+     * Position the system
+     * @param {Array.<Node>} nodesArray
+     * @param {Array.<vis.Edge>} edgesArray
+     * @param {boolean} [ignoreClusters=false]
+     */
+
+  }, {
+    key: "solve",
+    value: function solve(nodesArray, edgesArray) {
+      var ignoreClusters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+      // get distance matrix
+      var D_matrix = this.distanceSolver.getDistances(this.body, nodesArray, edgesArray); // distance matrix
+
+      // get the L Matrix
+      this._createL_matrix(D_matrix);
+
+      // get the K Matrix
+      this._createK_matrix(D_matrix);
+
+      // initial E Matrix
+      this._createE_matrix();
+
+      // calculate positions
+      var threshold = 0.01;
+      var innerThreshold = 1;
+      var iterations = 0;
+      var maxIterations = Math.max(1000, Math.min(10 * this.body.nodeIndices.length, 6000));
+      var maxInnerIterations = 5;
+
+      var maxEnergy = 1e9;
+      var highE_nodeId = 0,
+          dE_dx = 0,
+          dE_dy = 0,
+          delta_m = 0,
+          subIterations = 0;
+
+      while (maxEnergy > threshold && iterations < maxIterations) {
+        iterations += 1;
+
+        var _getHighestEnergyNode2 = this._getHighestEnergyNode(ignoreClusters);
+
+        var _getHighestEnergyNode3 = (0, _slicedToArray3["default"])(_getHighestEnergyNode2, 4);
+
+        highE_nodeId = _getHighestEnergyNode3[0];
+        maxEnergy = _getHighestEnergyNode3[1];
+        dE_dx = _getHighestEnergyNode3[2];
+        dE_dy = _getHighestEnergyNode3[3];
+
+        delta_m = maxEnergy;
+        subIterations = 0;
+        while (delta_m > innerThreshold && subIterations < maxInnerIterations) {
+          subIterations += 1;
+          this._moveNode(highE_nodeId, dE_dx, dE_dy);
+
+          var _getEnergy2 = this._getEnergy(highE_nodeId);
+
+          var _getEnergy3 = (0, _slicedToArray3["default"])(_getEnergy2, 3);
+
+          delta_m = _getEnergy3[0];
+          dE_dx = _getEnergy3[1];
+          dE_dy = _getEnergy3[2];
+        }
+      }
+    }
+
+    /**
+     * get the node with the highest energy
+     * @param {boolean} ignoreClusters
+     * @returns {number[]}
+     * @private
+     */
+
+  }, {
+    key: "_getHighestEnergyNode",
+    value: function _getHighestEnergyNode(ignoreClusters) {
+      var nodesArray = this.body.nodeIndices;
+      var nodes = this.body.nodes;
+      var maxEnergy = 0;
+      var maxEnergyNodeId = nodesArray[0];
+      var dE_dx_max = 0,
+          dE_dy_max = 0;
+
+      for (var nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {
+        var m = nodesArray[nodeIdx];
+        // by not evaluating nodes with predefined positions we should only move nodes that have no positions.
+        if (nodes[m].predefinedPosition === false || nodes[m].isCluster === true && ignoreClusters === true || nodes[m].options.fixed.x === true || nodes[m].options.fixed.y === true) {
+          var _getEnergy4 = this._getEnergy(m),
+              _getEnergy5 = (0, _slicedToArray3["default"])(_getEnergy4, 3),
+              delta_m = _getEnergy5[0],
+              dE_dx = _getEnergy5[1],
+              dE_dy = _getEnergy5[2];
+
+          if (maxEnergy < delta_m) {
+            maxEnergy = delta_m;
+            maxEnergyNodeId = m;
+            dE_dx_max = dE_dx;
+            dE_dy_max = dE_dy;
+          }
+        }
+      }
+
+      return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];
+    }
+
+    /**
+     * calculate the energy of a single node
+     * @param {Node.id} m
+     * @returns {number[]}
+     * @private
+     */
+
+  }, {
+    key: "_getEnergy",
+    value: function _getEnergy(m) {
+      var _E_sums$m = (0, _slicedToArray3["default"])(this.E_sums[m], 2),
+          dE_dx = _E_sums$m[0],
+          dE_dy = _E_sums$m[1];
+
+      var delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2));
+      return [delta_m, dE_dx, dE_dy];
+    }
+
+    /**
+     * move the node based on it's energy
+     * the dx and dy are calculated from the linear system proposed by Kamada and Kawai
+     * @param {number} m
+     * @param {number} dE_dx
+     * @param {number} dE_dy
+     * @private
+     */
+
+  }, {
+    key: "_moveNode",
+    value: function _moveNode(m, dE_dx, dE_dy) {
+      var nodesArray = this.body.nodeIndices;
+      var nodes = this.body.nodes;
+      var d2E_dx2 = 0;
+      var d2E_dxdy = 0;
+      var d2E_dy2 = 0;
+
+      var x_m = nodes[m].x;
+      var y_m = nodes[m].y;
+      var km = this.K_matrix[m];
+      var lm = this.L_matrix[m];
+
+      for (var iIdx = 0; iIdx < nodesArray.length; iIdx++) {
+        var i = nodesArray[iIdx];
+        if (i !== m) {
+          var x_i = nodes[i].x;
+          var y_i = nodes[i].y;
+          var kmat = km[i];
+          var lmat = lm[i];
+          var denominator = 1.0 / Math.pow(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2), 1.5);
+          d2E_dx2 += kmat * (1 - lmat * Math.pow(y_m - y_i, 2) * denominator);
+          d2E_dxdy += kmat * (lmat * (x_m - x_i) * (y_m - y_i) * denominator);
+          d2E_dy2 += kmat * (1 - lmat * Math.pow(x_m - x_i, 2) * denominator);
+        }
+      }
+      // make the variable names easier to make the solving of the linear system easier to read
+      var A = d2E_dx2,
+          B = d2E_dxdy,
+          C = dE_dx,
+          D = d2E_dy2,
+          E = dE_dy;
+
+      // solve the linear system for dx and dy
+      var dy = (C / A + E / B) / (B / A - D / B);
+      var dx = -(B * dy + C) / A;
+
+      // move the node
+      nodes[m].x += dx;
+      nodes[m].y += dy;
+
+      // Recalculate E_matrix (should be incremental)
+      this._updateE_matrix(m);
+    }
+
+    /**
+     * Create the L matrix: edge length times shortest path
+     * @param {Object} D_matrix
+     * @private
+     */
+
+  }, {
+    key: "_createL_matrix",
+    value: function _createL_matrix(D_matrix) {
+      var nodesArray = this.body.nodeIndices;
+      var edgeLength = this.springLength;
+
+      this.L_matrix = [];
+      for (var i = 0; i < nodesArray.length; i++) {
+        this.L_matrix[nodesArray[i]] = {};
+        for (var j = 0; j < nodesArray.length; j++) {
+          this.L_matrix[nodesArray[i]][nodesArray[j]] = edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];
+        }
+      }
+    }
+
+    /**
+     * Create the K matrix: spring constants times shortest path
+     * @param {Object} D_matrix
+     * @private
+     */
+
+  }, {
+    key: "_createK_matrix",
+    value: function _createK_matrix(D_matrix) {
+      var nodesArray = this.body.nodeIndices;
+      var edgeStrength = this.springConstant;
+
+      this.K_matrix = [];
+      for (var i = 0; i < nodesArray.length; i++) {
+        this.K_matrix[nodesArray[i]] = {};
+        for (var j = 0; j < nodesArray.length; j++) {
+          this.K_matrix[nodesArray[i]][nodesArray[j]] = edgeStrength * Math.pow(D_matrix[nodesArray[i]][nodesArray[j]], -2);
+        }
+      }
+    }
+
+    /**
+     *  Create matrix with all energies between nodes
+     *  @private
+     */
+
+  }, {
+    key: "_createE_matrix",
+    value: function _createE_matrix() {
+      var nodesArray = this.body.nodeIndices;
+      var nodes = this.body.nodes;
+      this.E_matrix = {};
+      this.E_sums = {};
+      for (var mIdx = 0; mIdx < nodesArray.length; mIdx++) {
+        this.E_matrix[nodesArray[mIdx]] = [];
+      }
+      for (var _mIdx = 0; _mIdx < nodesArray.length; _mIdx++) {
+        var m = nodesArray[_mIdx];
+        var x_m = nodes[m].x;
+        var y_m = nodes[m].y;
+        var dE_dx = 0;
+        var dE_dy = 0;
+        for (var iIdx = _mIdx; iIdx < nodesArray.length; iIdx++) {
+          var i = nodesArray[iIdx];
+          if (i !== m) {
+            var x_i = nodes[i].x;
+            var y_i = nodes[i].y;
+            var denominator = 1.0 / Math.sqrt(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2));
+            this.E_matrix[m][iIdx] = [this.K_matrix[m][i] * (x_m - x_i - this.L_matrix[m][i] * (x_m - x_i) * denominator), this.K_matrix[m][i] * (y_m - y_i - this.L_matrix[m][i] * (y_m - y_i) * denominator)];
+            this.E_matrix[i][_mIdx] = this.E_matrix[m][iIdx];
+            dE_dx += this.E_matrix[m][iIdx][0];
+            dE_dy += this.E_matrix[m][iIdx][1];
+          }
+        }
+        //Store sum
+        this.E_sums[m] = [dE_dx, dE_dy];
+      }
+    }
+
+    /**
+     * Update method, just doing single column (rows are auto-updated) (update all sums)
+     *
+     * @param {number} m
+     * @private
+     */
+
+  }, {
+    key: "_updateE_matrix",
+    value: function _updateE_matrix(m) {
+      var nodesArray = this.body.nodeIndices;
+      var nodes = this.body.nodes;
+      var colm = this.E_matrix[m];
+      var kcolm = this.K_matrix[m];
+      var lcolm = this.L_matrix[m];
+      var x_m = nodes[m].x;
+      var y_m = nodes[m].y;
+      var dE_dx = 0;
+      var dE_dy = 0;
+      for (var iIdx = 0; iIdx < nodesArray.length; iIdx++) {
+        var i = nodesArray[iIdx];
+        if (i !== m) {
+          //Keep old energy value for sum modification below
+          var cell = colm[iIdx];
+          var oldDx = cell[0];
+          var oldDy = cell[1];
+
+          //Calc new energy:
+          var x_i = nodes[i].x;
+          var y_i = nodes[i].y;
+          var denominator = 1.0 / Math.sqrt(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2));
+          var dx = kcolm[i] * (x_m - x_i - lcolm[i] * (x_m - x_i) * denominator);
+          var dy = kcolm[i] * (y_m - y_i - lcolm[i] * (y_m - y_i) * denominator);
+          colm[iIdx] = [dx, dy];
+          dE_dx += dx;
+          dE_dy += dy;
+
+          //add new energy to sum of each column
+          var sum = this.E_sums[i];
+          sum[0] += dx - oldDx;
+          sum[1] += dy - oldDy;
+        }
+      }
+      //Store sum at -1 index
+      this.E_sums[m] = [dE_dx, dE_dy];
+    }
+  }]);
+  return KamadaKawai;
+}(); // distance finding algorithm
+
+
+exports["default"] = KamadaKawai;
+
+/***/ }),
+/* 239 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _classCallCheck2 = __webpack_require__(0);
+
+var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
+
+var _createClass2 = __webpack_require__(1);
+
+var _createClass3 = _interopRequireDefault(_createClass2);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
+
+/**
+ *  The Floyd–Warshall algorithm is an algorithm for finding shortest paths in
+ *  a weighted graph with positive or negative edge weights (but with no negative
+ *  cycles). - https://en.wikipedia.org/wiki/Floyd–Warshall_algorithm
+ */
+var FloydWarshall = function () {
+  /**
+   * @ignore
+   */
+  function FloydWarshall() {
+    (0, _classCallCheck3["default"])(this, FloydWarshall);
+  }
+
+  /**
+   *
+   * @param {Object} body
+   * @param {Array.<Node>} nodesArray
+   * @param {Array.<Edge>} edgesArray
+   * @returns {{}}
+   */
+
+
+  (0, _createClass3["default"])(FloydWarshall, [{
+    key: "getDistances",
+    value: function getDistances(body, nodesArray, edgesArray) {
+      var D_matrix = {};
+      var edges = body.edges;
+
+      // prepare matrix with large numbers
+      for (var i = 0; i < nodesArray.length; i++) {
+        var node = nodesArray[i];
+        var cell = {};
+        D_matrix[node] = cell;
+        for (var j = 0; j < nodesArray.length; j++) {
+          cell[nodesArray[j]] = i == j ? 0 : 1e9;
+        }
+      }
+
+      // put the weights for the edges in. This assumes unidirectionality.
+      for (var _i = 0; _i < edgesArray.length; _i++) {
+        var edge = edges[edgesArray[_i]];
+        // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix
+        if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) {
+          D_matrix[edge.fromId][edge.toId] = 1;
+          D_matrix[edge.toId][edge.fromId] = 1;
+        }
+      }
+
+      var nodeCount = nodesArray.length;
+
+      // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.
+      for (var k = 0; k < nodeCount; k++) {
+        var knode = nodesArray[k];
+        var kcolm = D_matrix[knode];
+        for (var _i2 = 0; _i2 < nodeCount - 1; _i2++) {
+          var inode = nodesArray[_i2];
+          var icolm = D_matrix[inode];
+          for (var _j = _i2 + 1; _j < nodeCount; _j++) {
+            var jnode = nodesArray[_j];
+            var jcolm = D_matrix[jnode];
+
+            var val = Math.min(icolm[jnode], icolm[knode] + kcolm[jnode]);
+            icolm[jnode] = val;
+            jcolm[inode] = val;
+          }
+        }
+      }
+
+      return D_matrix;
+    }
+  }]);
+  return FloydWarshall;
+}();
+
+exports["default"] = FloydWarshall;
+
+/***/ })
+/******/ ]);
+});
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.js.map b/01_Code/physical_computing_interface/lib/vis/dist/vis.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..0c90cb780257584da54656a165e587f77329d025
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap eca1787db4da1a54ed82","webpack:///./index.js","webpack:///./lib/util.js","webpack:///./~/babel-runtime/core-js/get-iterator.js","webpack:///./~/core-js/library/fn/get-iterator.js","webpack:///./~/core-js/library/modules/web.dom.iterable.js","webpack:///./~/core-js/library/modules/es6.array.iterator.js","webpack:///./~/core-js/library/modules/_add-to-unscopables.js","webpack:///./~/core-js/library/modules/_iter-step.js","webpack:///./~/core-js/library/modules/_iterators.js","webpack:///./~/core-js/library/modules/_to-iobject.js","webpack:///./~/core-js/library/modules/_iobject.js","webpack:///./~/core-js/library/modules/_cof.js","webpack:///./~/core-js/library/modules/_defined.js","webpack:///./~/core-js/library/modules/_iter-define.js","webpack:///./~/core-js/library/modules/_library.js","webpack:///./~/core-js/library/modules/_export.js","webpack:///./~/core-js/library/modules/_global.js","webpack:///./~/core-js/library/modules/_core.js","webpack:///./~/core-js/library/modules/_ctx.js","webpack:///./~/core-js/library/modules/_a-function.js","webpack:///./~/core-js/library/modules/_hide.js","webpack:///./~/core-js/library/modules/_object-dp.js","webpack:///./~/core-js/library/modules/_an-object.js","webpack:///./~/core-js/library/modules/_is-object.js","webpack:///./~/core-js/library/modules/_ie8-dom-define.js","webpack:///./~/core-js/library/modules/_descriptors.js","webpack:///./~/core-js/library/modules/_fails.js","webpack:///./~/core-js/library/modules/_dom-create.js","webpack:///./~/core-js/library/modules/_to-primitive.js","webpack:///./~/core-js/library/modules/_property-desc.js","webpack:///./~/core-js/library/modules/_redefine.js","webpack:///./~/core-js/library/modules/_has.js","webpack:///./~/core-js/library/modules/_iter-create.js","webpack:///./~/core-js/library/modules/_object-create.js","webpack:///./~/core-js/library/modules/_object-dps.js","webpack:///./~/core-js/library/modules/_object-keys.js","webpack:///./~/core-js/library/modules/_object-keys-internal.js","webpack:///./~/core-js/library/modules/_array-includes.js","webpack:///./~/core-js/library/modules/_to-length.js","webpack:///./~/core-js/library/modules/_to-integer.js","webpack:///./~/core-js/library/modules/_to-index.js","webpack:///./~/core-js/library/modules/_shared-key.js","webpack:///./~/core-js/library/modules/_shared.js","webpack:///./~/core-js/library/modules/_uid.js","webpack:///./~/core-js/library/modules/_enum-bug-keys.js","webpack:///./~/core-js/library/modules/_html.js","webpack:///./~/core-js/library/modules/_set-to-string-tag.js","webpack:///./~/core-js/library/modules/_wks.js","webpack:///./~/core-js/library/modules/_object-gpo.js","webpack:///./~/core-js/library/modules/_to-object.js","webpack:///./~/core-js/library/modules/es6.string.iterator.js","webpack:///./~/core-js/library/modules/_string-at.js","webpack:///./~/core-js/library/modules/core.get-iterator.js","webpack:///./~/core-js/library/modules/core.get-iterator-method.js","webpack:///./~/core-js/library/modules/_classof.js","webpack:///./~/babel-runtime/core-js/object/create.js","webpack:///./~/core-js/library/fn/object/create.js","webpack:///./~/core-js/library/modules/es6.object.create.js","webpack:///./~/babel-runtime/core-js/object/keys.js","webpack:///./~/core-js/library/fn/object/keys.js","webpack:///./~/core-js/library/modules/es6.object.keys.js","webpack:///./~/core-js/library/modules/_object-sap.js","webpack:///./~/babel-runtime/helpers/typeof.js","webpack:///./~/babel-runtime/core-js/symbol/iterator.js","webpack:///./~/core-js/library/fn/symbol/iterator.js","webpack:///./~/core-js/library/modules/_wks-ext.js","webpack:///./~/babel-runtime/core-js/symbol.js","webpack:///./~/core-js/library/fn/symbol/index.js","webpack:///./~/core-js/library/modules/es6.symbol.js","webpack:///./~/core-js/library/modules/_meta.js","webpack:///./~/core-js/library/modules/_wks-define.js","webpack:///./~/core-js/library/modules/_keyof.js","webpack:///./~/core-js/library/modules/_enum-keys.js","webpack:///./~/core-js/library/modules/_object-gops.js","webpack:///./~/core-js/library/modules/_object-pie.js","webpack:///./~/core-js/library/modules/_is-array.js","webpack:///./~/core-js/library/modules/_object-gopn-ext.js","webpack:///./~/core-js/library/modules/_object-gopn.js","webpack:///./~/core-js/library/modules/_object-gopd.js","webpack:///./~/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./~/core-js/library/modules/es7.symbol.observable.js","webpack:///./~/babel-runtime/core-js/json/stringify.js","webpack:///./~/core-js/library/fn/json/stringify.js","webpack:///./lib/module/moment.js","webpack:///./~/moment/moment.js","webpack:///(webpack)/buildin/module.js","webpack:///./~/moment/locale ^\\.\\/$^$","webpack:///./lib/module/uuid.js","webpack:///./index-graph3d.js","webpack:///./lib/DOMutil.js","webpack:///./lib/DataSet.js","webpack:///./lib/Queue.js","webpack:///./lib/DataView.js","webpack:///./lib/graph3d/Graph3d.js","webpack:///./~/emitter-component/index.js","webpack:///./lib/graph3d/Point3d.js","webpack:///./lib/graph3d/Point2d.js","webpack:///./lib/graph3d/Camera.js","webpack:///./~/babel-runtime/core-js/math/sign.js","webpack:///./~/core-js/library/fn/math/sign.js","webpack:///./~/core-js/library/modules/es6.math.sign.js","webpack:///./~/core-js/library/modules/_math-sign.js","webpack:///./lib/graph3d/Filter.js","webpack:///./lib/graph3d/Slider.js","webpack:///./lib/graph3d/StepNumber.js","webpack:///./lib/graph3d/Range.js","webpack:///./lib/graph3d/Settings.js","webpack:///./lib/module/hammer.js","webpack:///./~/propagating-hammerjs/propagating.js","webpack:///./~/hammerjs/hammer.js","webpack:///./~/keycharm/keycharm.js","webpack:///./index-timeline-graph2d.js","webpack:///./lib/timeline/Timeline.js","webpack:///./lib/shared/Configurator.js","webpack:///./~/babel-runtime/helpers/classCallCheck.js","webpack:///./~/babel-runtime/helpers/createClass.js","webpack:///./~/babel-runtime/core-js/object/define-property.js","webpack:///./~/core-js/library/fn/object/define-property.js","webpack:///./~/core-js/library/modules/es6.object.define-property.js","webpack:///./lib/shared/ColorPicker.js","webpack:///./lib/hammerUtil.js","webpack:///./lib/shared/Validator.js","webpack:///./lib/timeline/Range.js","webpack:///./lib/timeline/component/Component.js","webpack:///./lib/timeline/DateUtil.js","webpack:///./lib/timeline/Core.js","webpack:///./lib/timeline/component/ItemSet.js","webpack:///./lib/shared/Popup.js","webpack:///./lib/timeline/TimeStep.js","webpack:///./lib/timeline/component/Group.js","webpack:///./lib/timeline/Stack.js","webpack:///./lib/timeline/component/item/RangeItem.js","webpack:///./lib/timeline/component/item/Item.js","webpack:///./lib/timeline/component/BackgroundGroup.js","webpack:///./lib/timeline/component/item/BoxItem.js","webpack:///./lib/timeline/component/item/PointItem.js","webpack:///./lib/timeline/component/item/BackgroundItem.js","webpack:///./lib/timeline/component/TimeAxis.js","webpack:///./lib/shared/Activator.js","webpack:///./lib/timeline/component/CustomTime.js","webpack:///./lib/timeline/locales.js","webpack:///./lib/timeline/component/CurrentTime.js","webpack:///./lib/timeline/optionsTimeline.js","webpack:///./lib/timeline/Graph2d.js","webpack:///./lib/timeline/component/LineGraph.js","webpack:///./lib/timeline/component/DataAxis.js","webpack:///./lib/timeline/component/DataScale.js","webpack:///./lib/timeline/component/GraphGroup.js","webpack:///./lib/timeline/component/graph2d_types/bar.js","webpack:///./lib/timeline/component/graph2d_types/points.js","webpack:///./lib/timeline/component/graph2d_types/line.js","webpack:///./lib/timeline/component/Legend.js","webpack:///./lib/timeline/optionsGraph2d.js","webpack:///./index-network.js","webpack:///./lib/network/Network.js","webpack:///./lib/network/Images.js","webpack:///./lib/network/modules/Groups.js","webpack:///./lib/network/modules/NodesHandler.js","webpack:///./lib/network/modules/components/Node.js","webpack:///./lib/network/modules/components/shared/Label.js","webpack:///./~/babel-runtime/helpers/slicedToArray.js","webpack:///./~/babel-runtime/core-js/is-iterable.js","webpack:///./~/core-js/library/fn/is-iterable.js","webpack:///./~/core-js/library/modules/core.is-iterable.js","webpack:///./lib/network/modules/components/nodes/shapes/Box.js","webpack:///./~/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./~/core-js/library/fn/object/get-prototype-of.js","webpack:///./~/core-js/library/modules/es6.object.get-prototype-of.js","webpack:///./~/babel-runtime/helpers/possibleConstructorReturn.js","webpack:///./~/babel-runtime/helpers/inherits.js","webpack:///./~/babel-runtime/core-js/object/set-prototype-of.js","webpack:///./~/core-js/library/fn/object/set-prototype-of.js","webpack:///./~/core-js/library/modules/es6.object.set-prototype-of.js","webpack:///./~/core-js/library/modules/_set-proto.js","webpack:///./lib/network/modules/components/nodes/util/NodeBase.js","webpack:///./lib/network/modules/components/nodes/shapes/Circle.js","webpack:///./lib/network/modules/components/nodes/util/CircleImageBase.js","webpack:///./lib/network/modules/components/nodes/shapes/CircularImage.js","webpack:///./lib/network/modules/components/nodes/shapes/Database.js","webpack:///./lib/network/modules/components/nodes/shapes/Diamond.js","webpack:///./lib/network/modules/components/nodes/util/ShapeBase.js","webpack:///./lib/network/modules/components/nodes/shapes/Dot.js","webpack:///./lib/network/modules/components/nodes/shapes/Ellipse.js","webpack:///./lib/network/modules/components/nodes/shapes/Icon.js","webpack:///./lib/network/modules/components/nodes/shapes/Image.js","webpack:///./lib/network/modules/components/nodes/shapes/Square.js","webpack:///./lib/network/modules/components/nodes/shapes/Star.js","webpack:///./lib/network/modules/components/nodes/shapes/Text.js","webpack:///./lib/network/modules/components/nodes/shapes/Triangle.js","webpack:///./lib/network/modules/components/nodes/shapes/TriangleDown.js","webpack:///./lib/network/modules/EdgesHandler.js","webpack:///./lib/network/modules/components/Edge.js","webpack:///./lib/network/modules/components/edges/CubicBezierEdge.js","webpack:///./lib/network/modules/components/edges/util/CubicBezierEdgeBase.js","webpack:///./lib/network/modules/components/edges/util/BezierEdgeBase.js","webpack:///./lib/network/modules/components/edges/util/EdgeBase.js","webpack:///./lib/network/modules/components/edges/BezierEdgeDynamic.js","webpack:///./lib/network/modules/components/edges/BezierEdgeStatic.js","webpack:///./lib/network/modules/components/edges/StraightEdge.js","webpack:///./lib/network/modules/PhysicsEngine.js","webpack:///./lib/network/modules/components/physics/BarnesHutSolver.js","webpack:///./lib/network/modules/components/physics/RepulsionSolver.js","webpack:///./lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","webpack:///./lib/network/modules/components/physics/SpringSolver.js","webpack:///./lib/network/modules/components/physics/HierarchicalSpringSolver.js","webpack:///./lib/network/modules/components/physics/CentralGravitySolver.js","webpack:///./lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","webpack:///./lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","webpack:///./lib/network/modules/Clustering.js","webpack:///./lib/network/NetworkUtil.js","webpack:///./lib/network/modules/components/nodes/Cluster.js","webpack:///./lib/network/modules/CanvasRenderer.js","webpack:///./lib/network/modules/Canvas.js","webpack:///./lib/network/modules/View.js","webpack:///./lib/network/modules/InteractionHandler.js","webpack:///./lib/network/modules/components/NavigationHandler.js","webpack:///./lib/network/modules/SelectionHandler.js","webpack:///./lib/network/modules/LayoutEngine.js","webpack:///./lib/network/modules/ManipulationSystem.js","webpack:///./lib/network/options.js","webpack:///./lib/network/modules/KamadaKawai.js","webpack:///./lib/network/modules/components/algorithms/FloydWarshall.js","webpack:///./lib/network/shapes.js","webpack:///./lib/network/dotparser.js","webpack:///./lib/network/gephiParser.js","webpack:///./lib/network/locales.js"],"names":["util","require","extend","exports","moment","uuid","isNumber","object","Number","elementsCensor","replacer","key","value","Element","JSON","parse","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","scale","Math","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","randomUUID","v4","assignAllKeys","obj","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","undefined","protoExtend","i","arguments","length","other","selectiveExtend","props","Array","isArray","Error","p","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","className","classes","split","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","throttle","fn","scheduled","throttled","requestAnimationFrame","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","target","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","m","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","c","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","hue","saturation","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","isOk","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","member","module","_rng","globalVar","global","crypto","getRandomValues","_rnds8","Uint8Array","whatwgRNG","_rnds","random","_byteToHex","_hexToByte","buf","offset","ii","toLowerCase","oct","unparse","bth","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","clockseq","msecs","getTime","nsecs","dt","tl","tmh","node","n","rnds","rng","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Hammer","keycharm","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","shift","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","x","y","groupTemplate","labelObj","point","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","id","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","console","warn","get","args","ids","firstType","returnType","allowedValues","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","name","sort","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","context","entry","clearTimeout","setTimeout","apply","_ids","_onEvent","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","Emitter","Range","Settings","STYLE","autoByDefault","DEFAULTS","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter","DOT","tooltip","showLegend","backgroundColor","dataColor","fill","stroke","strokeWidth","cameraPosition","horizontal","vertical","distance","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep","container","SyntaxError","containerElement","dataTable","dataPoints","create","setDefaults","colX","colY","colZ","colValue","colFilter","_setScale","xRange","range","yRange","zRange","z","valueRange","center","zCenter","camera","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","cameraLocation","getCameraLocation","cameraRotation","getCameraRotation","ax","ay","az","cx","cy","cz","sinTx","sin","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","ex","eye","ey","ez","bx","by","getArmLength","currentXCenter","frame","canvas","currentYCenter","_calcTranslations","points","trans","screen","transBottom","bottom","dist","sortDepth","getNumberOfRows","getNumberOfColumns","counter","column","getDistinctValues","distinctValues","getColumnRange","adjust","_checkValueField","hasValueField","BARCOLOR","BARSIZE","DOTCOLOR","DOTSIZE","_setRangeDefaults","defaultMin","defaultMax","_dataInitialize","rawData","_onChange","withBars","BAR","defaultXBarWidth","dataX","defaultYBarWidth","dataY","NUMSTEPS","expand","defaultXMin","defaultXMax","defaultXStep","defaultYMin","defaultYMax","defaultYStep","defaultZMin","defaultZMax","defaultZStep","defaultValueMin","defaultValueMax","dataFilter","setOnLoadCallback","redraw","_getDataPoints","GRID","SURFACE","sortNumber","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","LINE","pointNext","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onclick","_onClick","onkeydown","_setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","getCameraPosition","pos","getArmRotation","_readData","_redrawFilter","setPointDrawingMethod","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","DOTLINE","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","ctx","getContext","lineJoin","lineCap","clearRect","_dotSize","_getLegendWidth","dotSize","isSizeLegend","isValueLegend","margin","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","widthMin","fillStyle","closePath","gridLineLen","legendMin","legendMax","step","start","from","to","end","getCurrent","_line","textAlign","textBaseline","fillText","next","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","drawAxisLabelX","text","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","prettyStep","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","msg","from3d","xMin2d","xMax2d","H","S","V","R","G","B","C","Hi","X","abs","_getStrokeWidth","_redrawBar","xWidth","yWidth","borderColor","surface","surfaces","corners","avg","transCenter","diff","_polygon","_drawCircle","radius","_calcRadius","arc","PI","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","cross","topSideVisible","showGrayBottom","aDiff","subtract","bDiff","crossproduct","crossProduct","zAvg","_drawGridLine","call","_storeMousePosition","startMouseX","getMouseX","startMouseY","getMouseY","_startCameraOffset","getOffset","leftButtonDown","_onMouseUp","which","button","touchDown","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","moving","diffX","diffY","ctrlKey","scaleX","scaleY","offXNew","armLength","offYNew","setOffset","horizontalNew","verticalNew","snapAngle","snapValue","round","setArmRotation","parameters","emit","onclick_callback","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","showTooltip","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","setArmLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","line","dot","borderRadius","boxShadow","borderLeft","dom","contentWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","setCameraPosition","setSize","sub","sum","armLocation","armRotation","cameraOffset","offsetMultiplier","calculateCameraOrientation","mul","rot","xa","ya","za","graph","loaded","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","dataPointsTemp","progress","visible","prev","bar","MozBorderRadius","slide","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","isNumeric","isFinite","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","checkFirst","combine","val","newMin","newMax","STYLENAME","OPTIONKEYS","PREFIXEDOPTIONKEYS","isEmpty","capitalize","str","toUpperCase","prefixFieldName","prefix","fieldName","forceCopy","src","dst","srcKey","dstKey","safeCopy","setSpecialSettings","setBackgroundColor","setDataColor","setStyle","setShowLegend","isAutoByDefault","isLegendGraphStyle","getStyleNumberByName","styleName","number","checkStyleNumber","valid","styleNumber","borderWidth","borderStyle","camPos","propagating","Timeline","Graph2d","timeline","Core","DateUtil","stack","TimeStep","components","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","printStyle","allOptions","configureOptions","groups","forthArgument","throttleRedraw","defaultOptions","autoResize","orientation","axis","maxHeight","minHeight","_create","rtl","directionFromDom","domNode","root","getComputedStyle","direction","parentElement","rollingMode","domProps","emitter","bind","hiddenDates","getScale","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","ondblclick","oncontextmenu","onmouseover","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","group","focus","itemData","dataset","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","groupShowing","show","repositionX","startSide","getWidthRight","endSide","getWidthLeft","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","time","snappedTime","what","foreground","labelSet","groupId","pageX","srcEvent","pageY","Configurator","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","_removePopup","_clean","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseout","optionsContainer","_push","_showPopupIfNeeded","path","base","div","objectLabel","select","selectedValue","selected","_update","_makeLabel","err","popupString","popupValue","ceil","input","oninput","itemIndex","_setupPopup","string","html","hideTimeout","deleteTimeout","correspondingElement","checkbox","checked","defaultColor","_showColorPicker","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","pointer","getOptions","hammerUtil","ColorPicker","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","hammer","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","rgbObj","alpha","_setColor","display","_generateHueCircle","storePrevious","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","w","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","drag","pinch","set","enable","onTouch","_moveSelector","sat","hfac","sfac","fillRect","getImageData","centerY","centerX","angle","atan2","newTop","newLeft","inputHandler","isFirst","onRelease","isFinal","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","TOUCH_ACTION_PAN_Y","getTouchAction","Validator","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","_isAMomentObject","localSearch","findInOptions","globalSearch","localSearchThreshold","globalSearchThreshold","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","matrix","now","hours","minutes","seconds","milliseconds","clone","rolling","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","touch","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","rollingModeBtn","startRolling","validateDirection","stopRolling","conversion","currentTimeTimer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","duration","easingName","easingFunction","initTime","anyChanged","dragging","ease","done","changed","_applyRange","updateHiddenDates","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","deltaX","deltaY","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","horizontalScroll","pointerDate","getPointer","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","_d","runUntil","day","dayOfYear","year","dayOffset","date","month","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","timeOffset","requiredDuration","previousPoint","correctionEnabled","Activator","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTop","scrollTopMin","initialDrawDone","_origRedraw","properties","initialItemSetDrawn","threshold","DIRECTION_HORIZONTAL","listeners","events","isActive","onMouseWheel","verticalScroll","adjusted","_setScrollTop","onMouseScrollSide","itemAddedToTimeline","handleDragOver","dataTransfer","dropEffect","handleDrop","getData","_onAddItem","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","zoomIn","percentage","newInterval","zoomOut","borderRootHeight","borderRootWidth","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","RegExp","contentsOverflow","DIRECTION_ALL","MAX_REDRAW","centerWidth","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","UNGROUPED","BACKGROUND","align","stackSubgroups","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","overrideItems","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","followMouse","overflowMethod","tooltipOnItemUpdateTime","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","touchParams","groupTouchParams","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","DIRECTION_VERTICAL","_onMouseOver","_onMouseOut","addCallback","Function","dirty","displayed","hide","unselect","rawVisibleItems","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","restack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","nestedGroups","nestedGroupId","updatedNestedGroup","nestedInGroup","showNested","_order","getGroups","removeItem","itemObj","popup","_getType","_removeItem","groupData","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","oldGroupId","oldSubGroupId","subgroup","oldGroup","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","itemIsDragging","selectedItem","initialX","dragLeft","_cloneItemData","dragRight","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","stopPropagation","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","updateTimeAllowed","initialEnd","initialStart","newOffset","_moveToGroup","collapsedDirClassName","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","shiftKey","oldSelection","newSelection","related","itemFromRelatedTarget","getTitle","setPopup","setPosition","offsetTop","_onUpdateItem","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","itemSetFromTarget","Popup","doShow","maxWidth","isLeft","isTop","minimumStep","autoScale","FORMAT","minorLabels","millisecond","second","minute","hour","weekday","majorLabels","setMoment","setFormat","defaultFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","isMajor","getLabelMinor","getLabelMajor","getClassName","_moment","locale","lang","even","today","isSame","currentWeek","currentMonth","currentYear","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","isVisible","itemsInRange","byStart","byEnd","checkRangedItems","marker","templateFunction","paddingRight","paddingLeft","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","_isGroupVisible","limitSize","customOrderedItems","_updateItemsInRange","nostack","_updateSubgroupsSizes","_calculateHeight","repositionY","resetSubgroups","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","EPSILON","aTime","bTime","force","collidingItem","jj","collision","otherSubgroup","collisionByTimes","baseClassName","visibleFrame","_updateContents","_updateTitle","_updateDataAttributes","_updateStyle","_repaintOnItemUpdateTimeTooltip","_repaintDeleteButton","_repaintDragCenter","_repaintDragLeft","_repaintDragRight","parentWidth","contentStartPosition","boxWidth","groupChanged","dragCenter","dragCenterItem","anchor","deleteButton","onItemUpdateTimeTooltip","tooltipOffset","itemDistanceFromTop","isCloseToTop","template","itemVisibleFrameContent","visibleFrameTemplateFunction","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","setText","dataAttributes","attributes","setAttribute","removeAttribute","outerHTML","msPerPixel","widthInMs","previousRight","previousLeft","itemSetHeight","marginLeft","marginRight","itemSubgroup","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","nextIsMajor","prevWidth","labelMinor","xFirstMajorLabel","MAX","showMinorGrid","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","unbind","locales","eventParams","warned","substring","showCurrentTime","bool","any","groupsDraggable","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","Bars","Lines","Points","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existing_items","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","paths","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","last","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","idx","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","minVal","maxVal","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","l","stepSize","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","fillPath","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","combinedData","intersections","coreDistance","drawData","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulatedNegative","accumulatedPositive","pointData","groupLabel","_getStackedYRange","xpos","getCallback","getGroupTemplate","callbackResult","Line","_catmullRom","_linear","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","Network","network","Images","dotparser","gephiParser","convertDot","DOTToGraph","convertGephi","parseGephi","nodes","nodeIndices","edges","edgeIndices","once","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","modules","view","bindEventListeners","images","selectionHandler","interactionHandler","renderer","layoutEngine","clustering","manipulation","nodesHandler","edgesHandler","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","imageBroken","url","imageToCache","brokenUrl","imageToLoadBrokenUrlOn","onerror","_addImageToCache","Image","imageToRedrawWith","cachedImage","img","onload","_redrawWithImage","_tryloadBrokenUrl","Groups","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","NodesHandler","nodesListeners","borderWidthSelected","brokenImage","fixed","face","strokeColor","vadjust","multi","bold","mod","boldital","ital","mono","code","image","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shape","shapeProperties","borderDashes","useImageSize","useBorderWithImage","nodeOptions","parseOptions","updateShape","updateLabelModule","_reset","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","constructorClass","clearPositions","dataArray","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","Node","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","choosify","imageObj","load","propagateFonts","chooser","chosen","chosenNode","shadowColor","shadowSize","shadowX","shadowY","constrain","distanceToBorder","sizeDiff","fontDiff","getFormattingValues","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","Label","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","elementOptions","labelDirty","constrainWidth","maxWdt","minWdt","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","constrainHeight","minHgt","valign","heightConstraint","heightConstraintMinimum","heightConstraintValign","chosenLabel","margins","widthBias","heightBias","mods","optionsFontMod","modOptionsArray","ratio","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","lineMargin","fontSize","_setAlignment","labelHeight","lineCount","blocks","block","_getColor","fontColor","strokeText","initialStrokeColor","_processLabel","markupSystem","system","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","beginable","spacing","buffer","modStack","modName","emitBlock","override","ch","unshift","selectedState","hoverState","nlLines","accumulate","addAndAccumulate","splitBlocks","words","atStart","measure","lastMeasure","pre","measureText","newOptionsArray","Box","_setMargins","differentState","textSize","getTextSize","roundRect","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","NodeBase","adjustSizes","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","Circle","diameter","_drawRawCircle","CircleImageBase","labelOffset","imageLoaded","globalAlpha","can2","ctx2","drawImage","iterations","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","Database","database","_distanceToBorder","Diamond","_resizeShape","_drawShape","ShapeBase","sizeMultiplier","Dot","Ellipse","ellipse","Icon","_icon","iconTextSpacing","neutralborderWidth","selectionLineWidth","Square","Star","Text","Triangle","TriangleDown","EdgesHandler","edgesListeners","arrows","scaleFactor","arrowStrikethrough","inherit","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","updateEdgeType","oldEdgesData","edgesData","oldEdge","disconnect","connect","cleanup","Edge","baseWidth","edgeType","connected","_setInteractionWidths","chosenEdge","toArrow","fromArrow","middleArrow","inheritsColor","toArrowScale","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","selectedWidth","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","core","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","colorsDefined","CubicBezierEdge","viaNodes","via1","via2","bezierCurveTo","x1","y1","x2","y2","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_getDistanceToBezierEdge","vec","CubicBezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","BezierEdgeBase","distanceToPoint","difference","via","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_getCircleData","_circle","pattern","lineDashOffset","dashedLine","_findBorderPosition","_findBorderPositionCircle","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","px","py","something","u","arrowPoint","guideOffset","findBorderPosition","guidePos","xi","yi","arrowCore","circleEndpoint","arrowEndpoint","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","cr","BezierEdgeStatic","xVia","yVia","pi","originalAngle","myAngle","StraightEdge","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","PhysicsEngine","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","init","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","dpos","reference","posThreshold","maxNodeVelocity","averageNodeVelocity","velocityAdaptiveThreshold","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","colorFactor","forceSize","arrowSize","BarnesHutSolver","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","minimumTreeSize","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","steepness","SpringSolver","edgeLength","node3","_calculateSpringForce","springForce","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","ForceAtlas2BasedRepulsionSolver","degree","ForceAtlas2BasedCentralGravitySolver","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdge","clusteringEdgeReplacingId","edgeReplacedById","_backupEdgeOptions","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","baseEdgeId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","NetworkUtil","allNodes","specificNodes","amountOfConnections","Cluster","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","InteractionHandler","navigationHandler","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","changedPointers","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","reset","unbindFromRedraw","SelectionHandler","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","eventType","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","MAX_LEVELS","clusterThreshold","startLength","before","clusterBridges","after","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","definedPositions","undefinedLevel","hierarchicalLevels","lastNodeOnLevel","hierarchicalChildrenReference","hierarchicalParentReference","hierarchicalTrees","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTrees","treeSizes","getTreeSizes","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","treeWidths","getBranchNodes","source","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode","minSpaceNode","maxSpaceNode","getMaxLevel","getCollisionLevel","maxLevel1","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","levels","centerParents","levelNodes","branchShiftCallback","centerParent","pos1","pos2","diffAbs","branchNodes1","branchNodes2","min1","max1","minSpace1","maxSpace1","min2","max2","minSpace2","maxSpace2","diffBranch","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","limit","moveBranch","branchNodes","minBranch","maxBranch","minSpaceBranch","maxSpaceBranch","branchOffset","newPosition","minimizeEdgeLengthBottomUp","shiftBranchesCloserBottomUp","centerAllParents","centerAllParentsBottomUp","useMap","prevNode","prevPos","nextNode","nextPos","parents","parentId","minPos","maxPos","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validataPositionAndContinue","parentLevel","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","nodeA","nodeB","_crawlNetwork","minLevel","customCallback","levelByDirection","levelA","_setMinLevelToZero","fillInRelations","startingNodeId","crawler","tree","childA","childB","iterateParents","child","findParent","foundParent","doNotUpdate","ManipulationSystem","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","addNode","addEdge","editEdge","deleteNode","deleteEdge","controlNodeStyle","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","editWithoutDrag","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","lastTouch","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","boolean","maximum","minimum","KamadaKawai","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","innerThreshold","maxInnerIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode","_moveNode","_getEnergy","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","x_m","y_m","iIdx","x_i","y_i","denominator","K_matrix","L_matrix","d2E_dx2","d2E_dxdy","d2E_dy2","D","E","FloydWarshall","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xl","yl","xr","yr","xc","yc","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","NODE_ATTR_MAPPING","EDGE_ATTR_MAPPING","TOKENTYPE","NULL","DELIMITER","IDENTIFIER","UNKNOWN","DELIMITERS","token","tokenType","nextPreview","regexAlphaNumeric","isAlphaNumeric","merge","setValue","keys","o","graphs","attr","getToken","isComment","c2","newSyntaxError","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","setProp","names","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;ACtCA,MAAIA,OAAO,mBAAAC,CAAQ,CAAR,CAAX;;AAEA;AACAD,OAAKE,MAAL,CAAYC,OAAZ,EAAqB,mBAAAF,CAAQ,EAAR,CAArB;;AAEA;AACAD,OAAKE,MAAL,CAAYC,OAAZ,EAAqB,mBAAAF,CAAQ,GAAR,CAArB;;AAEA;AACAD,OAAKE,MAAL,CAAYC,OAAZ,EAAqB,mBAAAF,CAAQ,GAAR,CAArB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTA;;AAEA;AACA;;;AAGA,MAAIG,SAAS,mBAAAH,CAAQ,EAAR,CAAb;AACA,MAAII,OAAO,mBAAAJ,CAAQ,EAAR,CAAX;;AAEA;;;;;AAKAE,UAAQG,QAAR,GAAmB,UAAUC,MAAV,EAAkB;AACnC,WAAQA,kBAAkBC,MAAlB,IAA4B,OAAOD,MAAP,IAAiB,QAArD;AACD,GAFD;;AAIA;;;;;AAKAJ,UAAQM,cAAR,GAAyB,UAAUF,MAAV,EAAkB;AACzC,QAAI,CAACA,MAAL,EAAa;AACb,QAAIG,WAAW,SAAXA,QAAW,CAASC,GAAT,EAAcC,KAAd,EAAqB;AAClC,UAAIA,iBAAiBC,OAArB,EAA8B;AAC5B,eAAO,aAAP;AACD,OAFD,MAEO;AACL,eAAOD,KAAP;AACD;AACF,KAND;AAOA,WAAOE,KAAKC,KAAL,CAAW,4BAAeR,MAAf,EAAuBG,QAAvB,CAAX,CAAP;AACD,GAVD;;AAaA;;;;AAIAP,UAAQa,kBAAR,GAA6B,UAAUC,SAAV,EAAqB;AAChD,QAAIA,SAAJ,EAAe;AACb,aAAOA,UAAUC,aAAV,OAA8B,IAArC,EAA2C;AACzCf,gBAAQa,kBAAR,CAA2BC,UAAUE,UAArC;AACAF,kBAAUG,WAAV,CAAsBH,UAAUE,UAAhC;AACD;AACF;AACF,GAPD;;AASA;;;;;;;;;AASAhB,UAAQkB,SAAR,GAAoB,UAAUC,GAAV,EAAeC,GAAf,EAAoBC,KAApB,EAA2BZ,KAA3B,EAAkC;AACpD,QAAIW,OAAOD,GAAX,EAAgB;AACd,aAAO,GAAP;AACD,KAFD,MAGK;AACH,UAAIG,QAAQ,KAAKF,MAAMD,GAAX,CAAZ;AACA,aAAOI,KAAKH,GAAL,CAAS,CAAT,EAAY,CAACX,QAAQU,GAAT,IAAgBG,KAA5B,CAAP;AACD;AACF,GARD;;AAUA;;;;;AAKAtB,UAAQwB,QAAR,GAAmB,UAAUpB,MAAV,EAAkB;AACnC,WAAQA,kBAAkBqB,MAAlB,IAA4B,OAAOrB,MAAP,IAAiB,QAArD;AACD,GAFD;;AAIA;;;;;AAKAJ,UAAQ0B,MAAR,GAAiB,UAAUtB,MAAV,EAAkB;AACjC,QAAIA,kBAAkBuB,IAAtB,EAA4B;AAC1B,aAAO,IAAP;AACD,KAFD,MAGK,IAAI3B,QAAQwB,QAAR,CAAiBpB,MAAjB,CAAJ,EAA8B;AACjC;AACA,UAAIwB,QAAQC,aAAaC,IAAb,CAAkB1B,MAAlB,CAAZ;AACA,UAAIwB,KAAJ,EAAW;AACT,eAAO,IAAP;AACD,OAFD,MAGK,IAAI,CAACG,MAAMJ,KAAKf,KAAL,CAAWR,MAAX,CAAN,CAAL,EAAgC;AACnC,eAAO,IAAP;AACD;AACF;;AAED,WAAO,KAAP;AACD,GAhBD;;AAkBA;;;;;AAKAJ,UAAQgC,UAAR,GAAqB,YAAY;AAC/B,WAAO9B,KAAK+B,EAAL,EAAP;AACD,GAFD;;AAIA;;;;;AAKAjC,UAAQkC,aAAR,GAAwB,UAAUC,GAAV,EAAe1B,KAAf,EAAsB;AAC5C,SAAK,IAAI2B,IAAT,IAAiBD,GAAjB,EAAsB;AACpB,UAAIA,IAAIE,cAAJ,CAAmBD,IAAnB,CAAJ,EAA8B;AAC5B,YAAI,yBAAOD,IAAIC,IAAJ,CAAP,MAAqB,QAAzB,EAAmC;AACjCD,cAAIC,IAAJ,IAAY3B,KAAZ;AACD;AACF;AACF;AACF,GARD;;AAWA;;;;;;AAMAT,UAAQsC,aAAR,GAAwB,UAAUC,CAAV,EAAaC,CAAb,EAAuC;AAAA,QAAvBC,aAAuB,uEAAP,KAAO;;AAC7D,SAAK,IAAIL,IAAT,IAAiBG,CAAjB,EAAoB;AAClB,UAAIC,EAAEJ,IAAF,MAAYM,SAAhB,EAA2B;AACzB,YAAI,yBAAOF,EAAEJ,IAAF,CAAP,MAAmB,QAAvB,EAAiC;AAC/B,cAAI,CAACI,EAAEJ,IAAF,MAAYM,SAAZ,IAAyBF,EAAEJ,IAAF,MAAY,IAAtC,KAA+CG,EAAEH,IAAF,MAAYM,SAA3D,IAAwED,kBAAkB,IAA9F,EAAoG;AAClG,mBAAOF,EAAEH,IAAF,CAAP;AACD,WAFD,MAGK;AACHG,cAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF,SAPD,MAQK;AACH,cAAI,yBAAOG,EAAEH,IAAF,CAAP,MAAmB,QAAvB,EAAiC;AAC/BpC,oBAAQsC,aAAR,CAAsBC,EAAEH,IAAF,CAAtB,EAA+BI,EAAEJ,IAAF,CAA/B,EAAwCK,aAAxC;AACD;AACF;AACF;AACF;AACF,GAlBD;;AAsBA;;;;;;;AAOAzC,UAAQ2C,WAAR,GAAsB,UAAUJ,CAAV,EAAaC,CAAb,EAAgB;AACpC,SAAK,IAAII,IAAI,CAAb,EAAgBA,IAAIC,UAAUC,MAA9B,EAAsCF,GAAtC,EAA2C;AACzC,UAAIG,QAAQF,UAAUD,CAAV,CAAZ;AACA,WAAK,IAAIR,IAAT,IAAiBW,KAAjB,EAAwB;AACtBR,UAAEH,IAAF,IAAUW,MAAMX,IAAN,CAAV;AACD;AACF;AACD,WAAOG,CAAP;AACD,GARD;;AAUA;;;;;;;AAOAvC,UAAQD,MAAR,GAAiB,UAAUwC,CAAV,EAAaC,CAAb,EAAgB;AAC/B,SAAK,IAAII,IAAI,CAAb,EAAgBA,IAAIC,UAAUC,MAA9B,EAAsCF,GAAtC,EAA2C;AACzC,UAAIG,QAAQF,UAAUD,CAAV,CAAZ;AACA,WAAK,IAAIR,IAAT,IAAiBW,KAAjB,EAAwB;AACtB,YAAIA,MAAMV,cAAN,CAAqBD,IAArB,CAAJ,EAAgC;AAC9BG,YAAEH,IAAF,IAAUW,MAAMX,IAAN,CAAV;AACD;AACF;AACF;AACD,WAAOG,CAAP;AACD,GAVD;;AAYA;;;;;;;;AAQAvC,UAAQgD,eAAR,GAA0B,UAAUC,KAAV,EAAiBV,CAAjB,EAAoBC,CAApB,EAAuB;AAC/C,QAAI,CAACU,MAAMC,OAAN,CAAcF,KAAd,CAAL,EAA2B;AACzB,YAAM,IAAIG,KAAJ,CAAU,sDAAV,CAAN;AACD;;AAED,SAAK,IAAIR,IAAI,CAAb,EAAgBA,IAAIC,UAAUC,MAA9B,EAAsCF,GAAtC,EAA2C;AACzC,UAAIG,QAAQF,UAAUD,CAAV,CAAZ;;AAEA,WAAK,IAAIS,IAAI,CAAb,EAAgBA,IAAIJ,MAAMH,MAA1B,EAAkCO,GAAlC,EAAuC;AACrC,YAAIjB,OAAOa,MAAMI,CAAN,CAAX;AACA,YAAIN,MAAMV,cAAN,CAAqBD,IAArB,CAAJ,EAAgC;AAC9BG,YAAEH,IAAF,IAAUW,MAAMX,IAAN,CAAV;AACD;AACF;AACF;AACD,WAAOG,CAAP;AACD,GAhBD;;AAkBA;;;;;;;;AAQAvC,UAAQsD,mBAAR,GAA8B,UAAUL,KAAV,EAAiBV,CAAjB,EAAoBC,CAApB,EAA8C;AAAA,QAAvBC,aAAuB,uEAAP,KAAO;;AAC1E;AACA,QAAIS,MAAMC,OAAN,CAAcX,CAAd,CAAJ,EAAsB;AACpB,YAAM,IAAIe,SAAJ,CAAc,wCAAd,CAAN;AACD;AACD,SAAK,IAAIX,IAAI,CAAb,EAAgBA,IAAIC,UAAUC,MAA9B,EAAsCF,GAAtC,EAA2C;AACzC,UAAIG,QAAQF,UAAUD,CAAV,CAAZ;AACA,WAAK,IAAIS,IAAI,CAAb,EAAgBA,IAAIJ,MAAMH,MAA1B,EAAkCO,GAAlC,EAAuC;AACrC,YAAIjB,OAAOa,MAAMI,CAAN,CAAX;AACA,YAAIN,MAAMV,cAAN,CAAqBD,IAArB,CAAJ,EAAgC;AAC9B,cAAII,EAAEJ,IAAF,KAAWI,EAAEJ,IAAF,EAAQoB,WAAR,KAAwBC,MAAvC,EAA+C;AAC7C,gBAAIlB,EAAEH,IAAF,MAAYM,SAAhB,EAA2B;AACzBH,gBAAEH,IAAF,IAAU,EAAV;AACD;AACD,gBAAIG,EAAEH,IAAF,EAAQoB,WAAR,KAAwBC,MAA5B,EAAoC;AAClCzD,sBAAQ0D,UAAR,CAAmBnB,EAAEH,IAAF,CAAnB,EAA4BI,EAAEJ,IAAF,CAA5B,EAAqC,KAArC,EAA4CK,aAA5C;AACD,aAFD,MAGK;AACH,kBAAKD,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,uBAAOF,EAAEH,IAAF,CAAP;AACD,eAFD,MAGK;AACHG,kBAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AACF,WAfD,MAeO,IAAIc,MAAMC,OAAN,CAAcX,EAAEJ,IAAF,CAAd,CAAJ,EAA4B;AACjC,kBAAM,IAAImB,SAAJ,CAAc,wCAAd,CAAN;AACD,WAFM,MAEA;AACL,gBAAKf,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,qBAAOF,EAAEH,IAAF,CAAP;AACD,aAFD,MAGK;AACHG,gBAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AAEF;AACF;AACF;AACD,WAAOG,CAAP;AACD,GAxCD;;AA0CA;;;;;;;;AAQAvC,UAAQ2D,sBAAR,GAAiC,UAAUV,KAAV,EAAiBV,CAAjB,EAAoBC,CAApB,EAA8C;AAAA,QAAvBC,aAAuB,uEAAP,KAAO;;AAC7E;AACA,QAAIS,MAAMC,OAAN,CAAcX,CAAd,CAAJ,EAAsB;AACpB,YAAM,IAAIe,SAAJ,CAAc,wCAAd,CAAN;AACD;AACD,SAAK,IAAInB,IAAT,IAAiBI,CAAjB,EAAoB;AAClB,UAAIA,EAAEH,cAAF,CAAiBD,IAAjB,CAAJ,EAA4B;AAC1B,YAAIa,MAAMW,OAAN,CAAcxB,IAAd,KAAuB,CAAC,CAA5B,EAA+B;AAC7B,cAAII,EAAEJ,IAAF,KAAWI,EAAEJ,IAAF,EAAQoB,WAAR,KAAwBC,MAAvC,EAA+C;AAC7C,gBAAIlB,EAAEH,IAAF,MAAYM,SAAhB,EAA2B;AACzBH,gBAAEH,IAAF,IAAU,EAAV;AACD;AACD,gBAAIG,EAAEH,IAAF,EAAQoB,WAAR,KAAwBC,MAA5B,EAAoC;AAClCzD,sBAAQ0D,UAAR,CAAmBnB,EAAEH,IAAF,CAAnB,EAA4BI,EAAEJ,IAAF,CAA5B;AACD,aAFD,MAGK;AACH,kBAAKI,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,uBAAOF,EAAEH,IAAF,CAAP;AACD,eAFD,MAGK;AACHG,kBAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AACF,WAfD,MAeO,IAAIc,MAAMC,OAAN,CAAcX,EAAEJ,IAAF,CAAd,CAAJ,EAA4B;AACjCG,cAAEH,IAAF,IAAU,EAAV;AACA,iBAAK,IAAIQ,IAAI,CAAb,EAAgBA,IAAIJ,EAAEJ,IAAF,EAAQU,MAA5B,EAAoCF,GAApC,EAAyC;AACvCL,gBAAEH,IAAF,EAAQyB,IAAR,CAAarB,EAAEJ,IAAF,EAAQQ,CAAR,CAAb;AACD;AACF,WALM,MAKA;AACL,gBAAKJ,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,qBAAOF,EAAEH,IAAF,CAAP;AACD,aAFD,MAGK;AACHG,gBAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AACF;AACF;AACF;AACD,WAAOG,CAAP;AACD,GAxCD;;AA0CA;;;;;;;;;AASAvC,UAAQ0D,UAAR,GAAqB,UAAUnB,CAAV,EAAaC,CAAb,EAAgBG,WAAhB,EAA6BF,aAA7B,EAA4C;AAC/D,SAAK,IAAIL,IAAT,IAAiBI,CAAjB,EAAoB;AAClB,UAAIA,EAAEH,cAAF,CAAiBD,IAAjB,KAA0BO,gBAAgB,IAA9C,EAAoD;AAClD,YAAIH,EAAEJ,IAAF,KAAWI,EAAEJ,IAAF,EAAQoB,WAAR,KAAwBC,MAAvC,EAA+C;AAC7C,cAAIlB,EAAEH,IAAF,MAAYM,SAAhB,EAA2B;AACzBH,cAAEH,IAAF,IAAU,EAAV;AACD;AACD,cAAIG,EAAEH,IAAF,EAAQoB,WAAR,KAAwBC,MAA5B,EAAoC;AAClCzD,oBAAQ0D,UAAR,CAAmBnB,EAAEH,IAAF,CAAnB,EAA4BI,EAAEJ,IAAF,CAA5B,EAAqCO,WAArC;AACD,WAFD,MAGK;AACH,gBAAKH,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,qBAAOF,EAAEH,IAAF,CAAP;AACD,aAFD,MAGK;AACHG,gBAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AACF,SAfD,MAeO,IAAIc,MAAMC,OAAN,CAAcX,EAAEJ,IAAF,CAAd,CAAJ,EAA4B;AACjCG,YAAEH,IAAF,IAAU,EAAV;AACA,eAAK,IAAIQ,IAAI,CAAb,EAAgBA,IAAIJ,EAAEJ,IAAF,EAAQU,MAA5B,EAAoCF,GAApC,EAAyC;AACvCL,cAAEH,IAAF,EAAQyB,IAAR,CAAarB,EAAEJ,IAAF,EAAQQ,CAAR,CAAb;AACD;AACF,SALM,MAKA;AACL,cAAKJ,EAAEJ,IAAF,MAAY,IAAb,IAAsBG,EAAEH,IAAF,MAAYM,SAAlC,IAA+CD,kBAAkB,IAArE,EAA2E;AACzE,mBAAOF,EAAEH,IAAF,CAAP;AACD,WAFD,MAGK;AACHG,cAAEH,IAAF,IAAUI,EAAEJ,IAAF,CAAV;AACD;AACF;AACF;AACF;AACD,WAAOG,CAAP;AACD,GAlCD;;AAoCA;;;;;;;AAOAvC,UAAQ8D,UAAR,GAAqB,UAAUvB,CAAV,EAAaC,CAAb,EAAgB;AACnC,QAAID,EAAEO,MAAF,IAAYN,EAAEM,MAAlB,EAA0B,OAAO,KAAP;;AAE1B,SAAK,IAAIF,IAAI,CAAR,EAAWmB,MAAMxB,EAAEO,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5C,UAAIL,EAAEK,CAAF,KAAQJ,EAAEI,CAAF,CAAZ,EAAkB,OAAO,KAAP;AACnB;;AAED,WAAO,IAAP;AACD,GARD;;AAUA;;;;;;;;;AASA5C,UAAQgE,OAAR,GAAkB,UAAU5D,MAAV,EAAkB6D,IAAlB,EAAwB;AACxC,QAAIrC,KAAJ;;AAEA,QAAIxB,WAAWsC,SAAf,EAA0B;AACxB,aAAOA,SAAP;AACD;AACD,QAAItC,WAAW,IAAf,EAAqB;AACnB,aAAO,IAAP;AACD;;AAED,QAAI,CAAC6D,IAAL,EAAW;AACT,aAAO7D,MAAP;AACD;AACD,QAAI,EAAE,OAAO6D,IAAP,KAAgB,QAAlB,KAA+B,EAAEA,gBAAgBxC,MAAlB,CAAnC,EAA8D;AAC5D,YAAM,IAAI2B,KAAJ,CAAU,uBAAV,CAAN;AACD;;AAED;AACA,YAAQa,IAAR;AACE,WAAK,SAAL;AACA,WAAK,SAAL;AACE,eAAOC,QAAQ9D,MAAR,CAAP;;AAEF,WAAK,QAAL;AACA,WAAK,QAAL;AACE,YAAIJ,QAAQwB,QAAR,CAAiBpB,MAAjB,KAA4B,CAAC2B,MAAMJ,KAAKf,KAAL,CAAWR,MAAX,CAAN,CAAjC,EAA4D;AAC1D,iBAAOH,OAAOG,MAAP,EAAe+D,OAAf,EAAP;AACD,SAFD,MAEO;AACL,iBAAO9D,OAAOD,OAAO+D,OAAP,EAAP,CAAP;AACD;AACH,WAAK,QAAL;AACA,WAAK,QAAL;AACE,eAAO1C,OAAOrB,MAAP,CAAP;;AAEF,WAAK,MAAL;AACE,YAAIJ,QAAQG,QAAR,CAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,iBAAO,IAAIuB,IAAJ,CAASvB,MAAT,CAAP;AACD;AACD,YAAIA,kBAAkBuB,IAAtB,EAA4B;AAC1B,iBAAO,IAAIA,IAAJ,CAASvB,OAAO+D,OAAP,EAAT,CAAP;AACD,SAFD,MAGK,IAAIlE,OAAOmE,QAAP,CAAgBhE,MAAhB,CAAJ,EAA6B;AAChC,iBAAO,IAAIuB,IAAJ,CAASvB,OAAO+D,OAAP,EAAT,CAAP;AACD;AACD,YAAInE,QAAQwB,QAAR,CAAiBpB,MAAjB,CAAJ,EAA8B;AAC5BwB,kBAAQC,aAAaC,IAAb,CAAkB1B,MAAlB,CAAR;AACA,cAAIwB,KAAJ,EAAW;AACT;AACA,mBAAO,IAAID,IAAJ,CAAStB,OAAOuB,MAAM,CAAN,CAAP,CAAT,CAAP,CAFS,CAE0B;AACpC,WAHD,MAIK;AACH,mBAAO3B,OAAO,IAAI0B,IAAJ,CAASvB,MAAT,CAAP,EAAyBiE,MAAzB,EAAP,CADG,CACuC;AAC3C;AACF,SATD,MAUK;AACH,gBAAM,IAAIjB,KAAJ,CACJ,mCAAmCpD,QAAQsE,OAAR,CAAgBlE,MAAhB,CAAnC,GACA,eAFI,CAAN;AAGD;;AAEH,WAAK,QAAL;AACE,YAAIJ,QAAQG,QAAR,CAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,iBAAOH,OAAOG,MAAP,CAAP;AACD;AACD,YAAIA,kBAAkBuB,IAAtB,EAA4B;AAC1B,iBAAO1B,OAAOG,OAAO+D,OAAP,EAAP,CAAP;AACD,SAFD,MAGK,IAAIlE,OAAOmE,QAAP,CAAgBhE,MAAhB,CAAJ,EAA6B;AAChC,iBAAOH,OAAOG,MAAP,CAAP;AACD;AACD,YAAIJ,QAAQwB,QAAR,CAAiBpB,MAAjB,CAAJ,EAA8B;AAC5BwB,kBAAQC,aAAaC,IAAb,CAAkB1B,MAAlB,CAAR;AACA,cAAIwB,KAAJ,EAAW;AACT;AACA,mBAAO3B,OAAOI,OAAOuB,MAAM,CAAN,CAAP,CAAP,CAAP,CAFS,CAEwB;AAClC,WAHD,MAIK;AACH,mBAAO3B,OAAOG,MAAP,CAAP,CADG,CACoB;AACxB;AACF,SATD,MAUK;AACH,gBAAM,IAAIgD,KAAJ,CACJ,mCAAmCpD,QAAQsE,OAAR,CAAgBlE,MAAhB,CAAnC,GACA,eAFI,CAAN;AAGD;;AAEH,WAAK,SAAL;AACE,YAAIJ,QAAQG,QAAR,CAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,iBAAO,IAAIuB,IAAJ,CAASvB,MAAT,CAAP;AACD,SAFD,MAGK,IAAIA,kBAAkBuB,IAAtB,EAA4B;AAC/B,iBAAOvB,OAAOmE,WAAP,EAAP;AACD,SAFI,MAGA,IAAItE,OAAOmE,QAAP,CAAgBhE,MAAhB,CAAJ,EAA6B;AAChC,iBAAOA,OAAOiE,MAAP,GAAgBE,WAAhB,EAAP;AACD,SAFI,MAGA,IAAIvE,QAAQwB,QAAR,CAAiBpB,MAAjB,CAAJ,EAA8B;AACjCwB,kBAAQC,aAAaC,IAAb,CAAkB1B,MAAlB,CAAR;AACA,cAAIwB,KAAJ,EAAW;AACT;AACA,mBAAO,IAAID,IAAJ,CAAStB,OAAOuB,MAAM,CAAN,CAAP,CAAT,EAA2B2C,WAA3B,EAAP,CAFS,CAEwC;AAClD,WAHD,MAIK;AACH,mBAAOtE,OAAOG,MAAP,EAAeoE,MAAf,EAAP,CADG,CAC6B;AACjC;AACF,SATI,MAUA;AACH,gBAAM,IAAIpB,KAAJ,CACJ,mCAAmCpD,QAAQsE,OAAR,CAAgBlE,MAAhB,CAAnC,GACA,kBAFI,CAAN;AAGD;;AAEH,WAAK,SAAL;AACE,YAAIJ,QAAQG,QAAR,CAAiBC,MAAjB,CAAJ,EAA8B;AAC5B,iBAAO,WAAWA,MAAX,GAAoB,IAA3B;AACD,SAFD,MAGK,IAAIA,kBAAkBuB,IAAtB,EAA4B;AAC/B,iBAAO,WAAWvB,OAAO+D,OAAP,EAAX,GAA8B,IAArC;AACD,SAFI,MAGA,IAAInE,QAAQwB,QAAR,CAAiBpB,MAAjB,CAAJ,EAA8B;AACjCwB,kBAAQC,aAAaC,IAAb,CAAkB1B,MAAlB,CAAR;AACA,cAAIK,KAAJ;AACA,cAAImB,KAAJ,EAAW;AACT;AACAnB,oBAAQ,IAAIkB,IAAJ,CAAStB,OAAOuB,MAAM,CAAN,CAAP,CAAT,EAA2BuC,OAA3B,EAAR,CAFS,CAEqC;AAC/C,WAHD,MAIK;AACH1D,oBAAQ,IAAIkB,IAAJ,CAASvB,MAAT,EAAiB+D,OAAjB,EAAR,CADG,CACiC;AACrC;AACD,iBAAO,WAAW1D,KAAX,GAAmB,IAA1B;AACD,SAXI,MAYA;AACH,gBAAM,IAAI2C,KAAJ,CACJ,mCAAmCpD,QAAQsE,OAAR,CAAgBlE,MAAhB,CAAnC,GACA,kBAFI,CAAN;AAGD;;AAEH;AACE,cAAM,IAAIgD,KAAJ,CAAU,mBAAmBa,IAAnB,GAA0B,GAApC,CAAN;AAxHJ;AA0HD,GA5ID;;AA8IA;AACA;AACA;AACA,MAAIpC,eAAe,qBAAnB;;AAEA;;;;;AAKA7B,UAAQsE,OAAR,GAAkB,UAAUlE,MAAV,EAAkB;AAClC,QAAI6D,cAAc7D,MAAd,0DAAcA,MAAd,CAAJ;;AAEA,QAAI6D,QAAQ,QAAZ,EAAsB;AACpB,UAAI7D,WAAW,IAAf,EAAqB;AACnB,eAAO,MAAP;AACD;AACD,UAAIA,kBAAkB8D,OAAtB,EAA+B;AAC7B,eAAO,SAAP;AACD;AACD,UAAI9D,kBAAkBC,MAAtB,EAA8B;AAC5B,eAAO,QAAP;AACD;AACD,UAAID,kBAAkBqB,MAAtB,EAA8B;AAC5B,eAAO,QAAP;AACD;AACD,UAAIyB,MAAMC,OAAN,CAAc/C,MAAd,CAAJ,EAA2B;AACzB,eAAO,OAAP;AACD;AACD,UAAIA,kBAAkBuB,IAAtB,EAA4B;AAC1B,eAAO,MAAP;AACD;AACD,aAAO,QAAP;AACD,KApBD,MAqBK,IAAIsC,QAAQ,QAAZ,EAAsB;AACzB,aAAO,QAAP;AACD,KAFI,MAGA,IAAIA,QAAQ,SAAZ,EAAuB;AAC1B,aAAO,SAAP;AACD,KAFI,MAGA,IAAIA,QAAQ,QAAZ,EAAsB;AACzB,aAAO,QAAP;AACD,KAFI,MAGA,IAAIA,SAASvB,SAAb,EAAwB;AAC3B,aAAO,WAAP;AACD;;AAGD,WAAOuB,IAAP;AACD,GAvCD;;AA0CA;;;;;;;AAOAjE,UAAQyE,kBAAR,GAA6B,UAAUC,GAAV,EAAeC,QAAf,EAAyB;AACpD,QAAIC,SAAS,EAAb;AACA,SAAK,IAAIhC,IAAI,CAAb,EAAgBA,IAAI8B,IAAI5B,MAAxB,EAAgCF,GAAhC,EAAqC;AACnCgC,aAAOf,IAAP,CAAYa,IAAI9B,CAAJ,CAAZ;AACD;AACDgC,WAAOf,IAAP,CAAYc,QAAZ;AACA,WAAOC,MAAP;AACD,GAPD;;AASA;;;;;;;AAOA5E,UAAQ6E,SAAR,GAAoB,UAAUH,GAAV,EAAe;AACjC,QAAIE,SAAS,EAAb;AACA,SAAK,IAAIhC,IAAI,CAAb,EAAgBA,IAAI8B,IAAI5B,MAAxB,EAAgCF,GAAhC,EAAqC;AACnCgC,aAAOf,IAAP,CAAYa,IAAI9B,CAAJ,CAAZ;AACD;AACD,WAAOgC,MAAP;AACD,GAND;;AAQA;;;;;;AAMA5E,UAAQ8E,eAAR,GAA0B,UAAUC,IAAV,EAAgB;AACxC,WAAOA,KAAKC,qBAAL,GAA6BC,IAApC;AACD,GAFD;;AAIAjF,UAAQkF,gBAAR,GAA2B,UAAUH,IAAV,EAAgB;AACzC,WAAOA,KAAKC,qBAAL,GAA6BG,KAApC;AACD,GAFD;;AAIA;;;;;;AAMAnF,UAAQoF,cAAR,GAAyB,UAAUL,IAAV,EAAgB;AACvC,WAAOA,KAAKC,qBAAL,GAA6BK,GAApC;AACD,GAFD;;AAIA;;;;;AAKArF,UAAQsF,YAAR,GAAuB,UAAUP,IAAV,EAAgBQ,SAAhB,EAA2B;AAChD,QAAIC,UAAUT,KAAKQ,SAAL,CAAeE,KAAf,CAAqB,GAArB,CAAd;AACA,QAAID,QAAQ5B,OAAR,CAAgB2B,SAAhB,KAA8B,CAAC,CAAnC,EAAsC;AACpCC,cAAQ3B,IAAR,CAAa0B,SAAb,EADoC,CACX;AACzBR,WAAKQ,SAAL,GAAiBC,QAAQE,IAAR,CAAa,GAAb,CAAjB;AACD;AACF,GAND;;AAQA;;;;;AAKA1F,UAAQ2F,eAAR,GAA0B,UAAUZ,IAAV,EAAgBQ,SAAhB,EAA2B;AACnD,QAAIC,UAAUT,KAAKQ,SAAL,CAAeE,KAAf,CAAqB,GAArB,CAAd;AACA,QAAIG,QAAQJ,QAAQ5B,OAAR,CAAgB2B,SAAhB,CAAZ;AACA,QAAIK,SAAS,CAAC,CAAd,EAAiB;AACfJ,cAAQK,MAAR,CAAeD,KAAf,EAAsB,CAAtB,EADe,CACW;AAC1Bb,WAAKQ,SAAL,GAAiBC,QAAQE,IAAR,CAAa,GAAb,CAAjB;AACD;AACF,GAPD;;AASA;;;;;;;;;AASA1F,UAAQ8F,OAAR,GAAkB,UAAU1F,MAAV,EAAkB2F,QAAlB,EAA4B;AAC5C,QAAInD,CAAJ,EACEmB,GADF;AAEA,QAAIb,MAAMC,OAAN,CAAc/C,MAAd,CAAJ,EAA2B;AACzB;AACA,WAAKwC,IAAI,CAAJ,EAAOmB,MAAM3D,OAAO0C,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7CmD,iBAAS3F,OAAOwC,CAAP,CAAT,EAAoBA,CAApB,EAAuBxC,MAAvB;AACD;AACF,KALD,MAMK;AACH;AACA,WAAKwC,CAAL,IAAUxC,MAAV,EAAkB;AAChB,YAAIA,OAAOiC,cAAP,CAAsBO,CAAtB,CAAJ,EAA8B;AAC5BmD,mBAAS3F,OAAOwC,CAAP,CAAT,EAAoBA,CAApB,EAAuBxC,MAAvB;AACD;AACF;AACF;AACF,GAjBD;;AAmBA;;;;;;AAMAJ,UAAQgG,OAAR,GAAkB,UAAU5F,MAAV,EAAkB;AAClC,QAAI6F,QAAQ,EAAZ;;AAEA,SAAK,IAAI7D,IAAT,IAAiBhC,MAAjB,EAAyB;AACvB,UAAIA,OAAOiC,cAAP,CAAsBD,IAAtB,CAAJ,EAAiC6D,MAAMpC,IAAN,CAAWzD,OAAOgC,IAAP,CAAX;AAClC;;AAED,WAAO6D,KAAP;AACD,GARD;;AAUA;;;;;;;AAOAjG,UAAQkG,cAAR,GAAyB,UAAU9F,MAAV,EAAkBI,GAAlB,EAAuBC,KAAvB,EAA8B;AACrD,QAAIL,OAAOI,GAAP,MAAgBC,KAApB,EAA2B;AACzBL,aAAOI,GAAP,IAAcC,KAAd;AACA,aAAO,IAAP;AACD,KAHD,MAIK;AACH,aAAO,KAAP;AACD;AACF,GARD;;AAUA;;;;;AAKAT,UAAQmG,QAAR,GAAmB,UAAUC,EAAV,EAAc;AAC/B,QAAIC,YAAY,KAAhB;;AAEA,WAAO,SAASC,SAAT,GAAsB;AAC3B,UAAI,CAACD,SAAL,EAAgB;AACdA,oBAAY,IAAZ;AACAE,8BAAsB,YAAY;AAChCF,sBAAY,KAAZ;AACAD;AACD,SAHD;AAID;AACF,KARD;AASD,GAZD;;AAcA;;;;;;;;AAQApG,UAAQwG,gBAAR,GAA2B,UAAUC,OAAV,EAAmBC,MAAnB,EAA2BC,QAA3B,EAAqCC,UAArC,EAAiD;AAC1E,QAAIH,QAAQD,gBAAZ,EAA8B;AAC5B,UAAII,eAAelE,SAAnB,EACEkE,aAAa,KAAb;;AAEF,UAAIF,WAAW,YAAX,IAA2BG,UAAUC,SAAV,CAAoBlD,OAApB,CAA4B,SAA5B,KAA0C,CAAzE,EAA4E;AAC1E8C,iBAAS,gBAAT,CAD0E,CAC9C;AAC7B;;AAEDD,cAAQD,gBAAR,CAAyBE,MAAzB,EAAiCC,QAAjC,EAA2CC,UAA3C;AACD,KATD,MASO;AACLH,cAAQM,WAAR,CAAoB,OAAOL,MAA3B,EAAmCC,QAAnC,EADK,CAC0C;AAChD;AACF,GAbD;;AAeA;;;;;;;AAOA3G,UAAQgH,mBAAR,GAA8B,UAAUP,OAAV,EAAmBC,MAAnB,EAA2BC,QAA3B,EAAqCC,UAArC,EAAiD;AAC7E,QAAIH,QAAQO,mBAAZ,EAAiC;AAC/B;AACA,UAAIJ,eAAelE,SAAnB,EACEkE,aAAa,KAAb;;AAEF,UAAIF,WAAW,YAAX,IAA2BG,UAAUC,SAAV,CAAoBlD,OAApB,CAA4B,SAA5B,KAA0C,CAAzE,EAA4E;AAC1E8C,iBAAS,gBAAT,CAD0E,CAC9C;AAC7B;;AAEDD,cAAQO,mBAAR,CAA4BN,MAA5B,EAAoCC,QAApC,EAA8CC,UAA9C;AACD,KAVD,MAUO;AACL;AACAH,cAAQQ,WAAR,CAAoB,OAAOP,MAA3B,EAAmCC,QAAnC;AACD;AACF,GAfD;;AAiBA;;;AAGA3G,UAAQkH,cAAR,GAAyB,UAAUC,KAAV,EAAiB;AACxC,QAAI,CAACA,KAAL,EACEA,QAAQC,OAAOD,KAAf;;AAEF,QAAIA,MAAMD,cAAV,EAA0B;AACxBC,YAAMD,cAAN,GADwB,CACC;AAC1B,KAFD,MAGK;AACHC,YAAME,WAAN,GAAoB,KAApB,CADG,CACyB;AAC7B;AACF,GAVD;;AAYA;;;;;AAKArH,UAAQsH,SAAR,GAAoB,UAAUH,KAAV,EAAiB;AACnC;AACA,QAAI,CAACA,KAAL,EAAY;AACVA,cAAQC,OAAOD,KAAf;AACD;;AAED,QAAII,MAAJ;;AAEA,QAAIJ,MAAMI,MAAV,EAAkB;AAChBA,eAASJ,MAAMI,MAAf;AACD,KAFD,MAGK,IAAIJ,MAAMK,UAAV,EAAsB;AACzBD,eAASJ,MAAMK,UAAf;AACD;;AAED,QAAID,OAAOE,QAAP,IAAmB/E,SAAnB,IAAgC6E,OAAOE,QAAP,IAAmB,CAAvD,EAA0D;AACxD;AACAF,eAASA,OAAOG,UAAhB;AACD;;AAED,WAAOH,MAAP;AACD,GArBD;;AAuBA;;;;;AAKAvH,UAAQ2H,SAAR,GAAoB,UAAUlB,OAAV,EAAmBmB,MAAnB,EAA2B;AAC7C,QAAIC,IAAIpB,OAAR;;AAEA,WAAOoB,CAAP,EAAU;AACR,UAAIA,MAAMD,MAAV,EAAkB;AAChB,eAAO,IAAP;AACD;AACDC,UAAIA,EAAEH,UAAN;AACD;;AAED,WAAO,KAAP;AACD,GAXD;;AAaA1H,UAAQ8H,MAAR,GAAiB,EAAjB;;AAEA;;;;;;AAMA9H,UAAQ8H,MAAR,CAAeC,SAAf,GAA2B,UAAUtH,KAAV,EAAiBuH,YAAjB,EAA+B;AACxD,QAAI,OAAOvH,KAAP,IAAgB,UAApB,EAAgC;AAC9BA,cAAQA,OAAR;AACD;;AAED,QAAIA,SAAS,IAAb,EAAmB;AACjB,aAAQA,SAAS,KAAjB;AACD;;AAED,WAAOuH,gBAAgB,IAAvB;AACD,GAVD;;AAYA;;;;;;AAMAhI,UAAQ8H,MAAR,CAAeG,QAAf,GAA0B,UAAUxH,KAAV,EAAiBuH,YAAjB,EAA+B;AACvD,QAAI,OAAOvH,KAAP,IAAgB,UAApB,EAAgC;AAC9BA,cAAQA,OAAR;AACD;;AAED,QAAIA,SAAS,IAAb,EAAmB;AACjB,aAAOJ,OAAOI,KAAP,KAAiBuH,YAAjB,IAAiC,IAAxC;AACD;;AAED,WAAOA,gBAAgB,IAAvB;AACD,GAVD;;AAYA;;;;;;AAMAhI,UAAQ8H,MAAR,CAAeI,QAAf,GAA0B,UAAUzH,KAAV,EAAiBuH,YAAjB,EAA+B;AACvD,QAAI,OAAOvH,KAAP,IAAgB,UAApB,EAAgC;AAC9BA,cAAQA,OAAR;AACD;;AAED,QAAIA,SAAS,IAAb,EAAmB;AACjB,aAAOgB,OAAOhB,KAAP,CAAP;AACD;;AAED,WAAOuH,gBAAgB,IAAvB;AACD,GAVD;;AAYA;;;;;;AAMAhI,UAAQ8H,MAAR,CAAeK,MAAf,GAAwB,UAAU1H,KAAV,EAAiBuH,YAAjB,EAA+B;AACrD,QAAI,OAAOvH,KAAP,IAAgB,UAApB,EAAgC;AAC9BA,cAAQA,OAAR;AACD;;AAED,QAAIT,QAAQwB,QAAR,CAAiBf,KAAjB,CAAJ,EAA6B;AAC3B,aAAOA,KAAP;AACD,KAFD,MAGK,IAAIT,QAAQG,QAAR,CAAiBM,KAAjB,CAAJ,EAA6B;AAChC,aAAOA,QAAQ,IAAf;AACD,KAFI,MAGA;AACH,aAAOuH,gBAAgB,IAAvB;AACD;AACF,GAdD;;AAgBA;;;;;;AAMAhI,UAAQ8H,MAAR,CAAeM,SAAf,GAA2B,UAAU3H,KAAV,EAAiBuH,YAAjB,EAA+B;AACxD,QAAI,OAAOvH,KAAP,IAAgB,UAApB,EAAgC;AAC9BA,cAAQA,OAAR;AACD;;AAED,WAAOA,SAASuH,YAAT,IAAyB,IAAhC;AACD,GAND;;AAQA;;;;;;AAMAhI,UAAQqI,QAAR,GAAmB,UAAUC,GAAV,EAAe;AAChC;AACA,QAAIC,iBAAiB,kCAArB;AACAD,UAAMA,IAAIE,OAAJ,CAAYD,cAAZ,EAA4B,UAAUE,CAAV,EAAaC,CAAb,EAAgBC,CAAhB,EAAmBnG,CAAnB,EAAsB;AACtD,aAAOkG,IAAIA,CAAJ,GAAQC,CAAR,GAAYA,CAAZ,GAAgBnG,CAAhB,GAAoBA,CAA3B;AACD,KAFK,CAAN;AAGA,QAAIoG,SAAS,4CAA4C9G,IAA5C,CAAiDwG,GAAjD,CAAb;AACA,WAAOM,SAAS;AACdF,SAAGG,SAASD,OAAO,CAAP,CAAT,EAAoB,EAApB,CADW;AAEdD,SAAGE,SAASD,OAAO,CAAP,CAAT,EAAoB,EAApB,CAFW;AAGdpG,SAAGqG,SAASD,OAAO,CAAP,CAAT,EAAoB,EAApB;AAHW,KAAT,GAIH,IAJJ;AAKD,GAZD;;AAcA;;;;;;AAMA5I,UAAQ8I,eAAR,GAA0B,UAAUC,KAAV,EAAiBC,OAAjB,EAA0B;AAClD,QAAID,MAAMnF,OAAN,CAAc,MAAd,KAAyB,CAAC,CAA9B,EAAiC;AAC/B,aAAOmF,KAAP;AACD,KAFD,MAGK,IAAIA,MAAMnF,OAAN,CAAc,KAAd,KAAwB,CAAC,CAA7B,EAAgC;AACnC,UAAIqF,MAAMF,MAAMG,MAAN,CAAaH,MAAMnF,OAAN,CAAc,GAAd,IAAqB,CAAlC,EAAqC4E,OAArC,CAA6C,GAA7C,EAAkD,EAAlD,EAAsD/C,KAAtD,CAA4D,GAA5D,CAAV;AACA,aAAO,UAAUwD,IAAI,CAAJ,CAAV,GAAmB,GAAnB,GAAyBA,IAAI,CAAJ,CAAzB,GAAkC,GAAlC,GAAwCA,IAAI,CAAJ,CAAxC,GAAiD,GAAjD,GAAuDD,OAAvD,GAAiE,GAAxE;AACD,KAHI,MAIA;AACH,UAAIC,MAAMjJ,QAAQqI,QAAR,CAAiBU,KAAjB,CAAV;AACA,UAAIE,OAAO,IAAX,EAAiB;AACf,eAAOF,KAAP;AACD,OAFD,MAGK;AACH,eAAO,UAAUE,IAAIP,CAAd,GAAkB,GAAlB,GAAwBO,IAAIN,CAA5B,GAAgC,GAAhC,GAAsCM,IAAIzG,CAA1C,GAA8C,GAA9C,GAAoDwG,OAApD,GAA8D,GAArE;AACD;AACF;AACF,GAjBD;;AAmBA;;;;;;;;AAQAhJ,UAAQmJ,QAAR,GAAmB,UAAUC,GAAV,EAAeC,KAAf,EAAsBC,IAAtB,EAA4B;AAC7C,WAAO,MAAM,CAAC,CAAC,KAAK,EAAN,KAAaF,OAAO,EAApB,KAA2BC,SAAS,CAApC,IAAyCC,IAA1C,EAAgDC,QAAhD,CAAyD,EAAzD,EAA6DC,KAA7D,CAAmE,CAAnE,CAAb;AACD,GAFD;;AAIA;;;;;;AAMAxJ,UAAQyJ,UAAR,GAAqB,UAAUV,KAAV,EAAiB;AACpC,QAAIW,CAAJ;AACA,QAAI1J,QAAQwB,QAAR,CAAiBuH,KAAjB,MAA4B,IAAhC,EAAsC;AACpC,UAAI/I,QAAQ2J,UAAR,CAAmBZ,KAAnB,MAA8B,IAAlC,EAAwC;AACtC,YAAIE,MAAMF,MAAMG,MAAN,CAAa,CAAb,EAAgBA,MAAhB,CAAuB,CAAvB,EAA0BH,MAAMjG,MAAN,GAAe,CAAzC,EAA4C2C,KAA5C,CAAkD,GAAlD,EAAuDmE,GAAvD,CAA2D,UAAUnJ,KAAV,EAAiB;AAAE,iBAAOoI,SAASpI,KAAT,CAAP;AAAwB,SAAtG,CAAV;AACAsI,gBAAQ/I,QAAQmJ,QAAR,CAAiBF,IAAI,CAAJ,CAAjB,EAAyBA,IAAI,CAAJ,CAAzB,EAAiCA,IAAI,CAAJ,CAAjC,CAAR;AACD;AACD,UAAIjJ,QAAQ6J,UAAR,CAAmBd,KAAnB,MAA8B,IAAlC,EAAwC;AACtC,YAAIe,MAAM9J,QAAQ+J,QAAR,CAAiBhB,KAAjB,CAAV;AACA,YAAIiB,kBAAkB,EAAEC,GAAGH,IAAIG,CAAT,EAAYC,GAAGJ,IAAII,CAAJ,GAAQ,GAAvB,EAA4BC,GAAG5I,KAAKJ,GAAL,CAAS,CAAT,EAAY2I,IAAIK,CAAJ,GAAQ,IAApB,CAA/B,EAAtB;AACA,YAAIC,iBAAiB,EAAEH,GAAGH,IAAIG,CAAT,EAAYC,GAAG3I,KAAKJ,GAAL,CAAS,CAAT,EAAY2I,IAAII,CAAJ,GAAQ,IAApB,CAAf,EAA0CC,GAAGL,IAAIK,CAAJ,GAAQ,GAArD,EAArB;AACA,YAAIE,iBAAiBrK,QAAQsK,QAAR,CAAiBF,eAAeH,CAAhC,EAAmCG,eAAeF,CAAlD,EAAqDE,eAAeD,CAApE,CAArB;AACA,YAAII,kBAAkBvK,QAAQsK,QAAR,CAAiBN,gBAAgBC,CAAjC,EAAoCD,gBAAgBE,CAApD,EAAuDF,gBAAgBG,CAAvE,CAAtB;AACAT,YAAI;AACFc,sBAAYzB,KADV;AAEF0B,kBAAQJ,cAFN;AAGFK,qBAAW;AACTF,wBAAYD,eADH;AAETE,oBAAQJ;AAFC,WAHT;AAOFM,iBAAO;AACLH,wBAAYD,eADP;AAELE,oBAAQJ;AAFH;AAPL,SAAJ;AAYD,OAlBD,MAmBK;AACHX,YAAI;AACFc,sBAAYzB,KADV;AAEF0B,kBAAQ1B,KAFN;AAGF2B,qBAAW;AACTF,wBAAYzB,KADH;AAET0B,oBAAQ1B;AAFC,WAHT;AAOF4B,iBAAO;AACLH,wBAAYzB,KADP;AAEL0B,oBAAQ1B;AAFH;AAPL,SAAJ;AAYD;AACF,KAtCD,MAuCK;AACHW,UAAI,EAAJ;AACAA,QAAEc,UAAF,GAAezB,MAAMyB,UAAN,IAAoB9H,SAAnC;AACAgH,QAAEe,MAAF,GAAW1B,MAAM0B,MAAN,IAAgB/H,SAA3B;;AAEA,UAAI1C,QAAQwB,QAAR,CAAiBuH,MAAM2B,SAAvB,CAAJ,EAAuC;AACrChB,UAAEgB,SAAF,GAAc;AACZD,kBAAQ1B,MAAM2B,SADF;AAEZF,sBAAYzB,MAAM2B;AAFN,SAAd;AAID,OALD,MAMK;AACHhB,UAAEgB,SAAF,GAAc,EAAd;AACAhB,UAAEgB,SAAF,CAAYF,UAAZ,GAAyBzB,MAAM2B,SAAN,IAAmB3B,MAAM2B,SAAN,CAAgBF,UAAnC,IAAiD9H,SAA1E;AACAgH,UAAEgB,SAAF,CAAYD,MAAZ,GAAqB1B,MAAM2B,SAAN,IAAmB3B,MAAM2B,SAAN,CAAgBD,MAAnC,IAA6C/H,SAAlE;AACD;;AAED,UAAI1C,QAAQwB,QAAR,CAAiBuH,MAAM4B,KAAvB,CAAJ,EAAmC;AACjCjB,UAAEiB,KAAF,GAAU;AACRF,kBAAQ1B,MAAM4B,KADN;AAERH,sBAAYzB,MAAM4B;AAFV,SAAV;AAID,OALD,MAMK;AACHjB,UAAEiB,KAAF,GAAU,EAAV;AACAjB,UAAEiB,KAAF,CAAQH,UAAR,GAAqBzB,MAAM4B,KAAN,IAAe5B,MAAM4B,KAAN,CAAYH,UAA3B,IAAyC9H,SAA9D;AACAgH,UAAEiB,KAAF,CAAQF,MAAR,GAAiB1B,MAAM4B,KAAN,IAAe5B,MAAM4B,KAAN,CAAYF,MAA3B,IAAqC/H,SAAtD;AACD;AACF;;AAED,WAAOgH,CAAP;AACD,GAxED;;AA4EA;;;;;;;;;AASA1J,UAAQ4K,QAAR,GAAmB,UAAUxB,GAAV,EAAeC,KAAf,EAAsBC,IAAtB,EAA4B;AAC7CF,UAAMA,MAAM,GAAZ,CAAiBC,QAAQA,QAAQ,GAAhB,CAAqBC,OAAOA,OAAO,GAAd;AACtC,QAAIuB,SAAStJ,KAAKJ,GAAL,CAASiI,GAAT,EAAc7H,KAAKJ,GAAL,CAASkI,KAAT,EAAgBC,IAAhB,CAAd,CAAb;AACA,QAAIwB,SAASvJ,KAAKH,GAAL,CAASgI,GAAT,EAAc7H,KAAKH,GAAL,CAASiI,KAAT,EAAgBC,IAAhB,CAAd,CAAb;;AAEA;AACA,QAAIuB,UAAUC,MAAd,EAAsB;AACpB,aAAO,EAAEb,GAAG,CAAL,EAAQC,GAAG,CAAX,EAAcC,GAAGU,MAAjB,EAAP;AACD;;AAED;AACA,QAAIE,IAAK3B,OAAOyB,MAAR,GAAkBxB,QAAQC,IAA1B,GAAmCA,QAAQuB,MAAT,GAAmBzB,MAAMC,KAAzB,GAAiCC,OAAOF,GAAlF;AACA,QAAIa,IAAKb,OAAOyB,MAAR,GAAkB,CAAlB,GAAwBvB,QAAQuB,MAAT,GAAmB,CAAnB,GAAuB,CAAtD;AACA,QAAIG,MAAM,MAAMf,IAAIc,KAAKD,SAASD,MAAd,CAAV,IAAmC,GAA7C;AACA,QAAII,aAAa,CAACH,SAASD,MAAV,IAAoBC,MAArC;AACA,QAAIrK,QAAQqK,MAAZ;AACA,WAAO,EAAEb,GAAGe,GAAL,EAAUd,GAAGe,UAAb,EAAyBd,GAAG1J,KAA5B,EAAP;AACD,GAjBD;;AAmBA,MAAIyK,UAAU;AACZ;AACAzF,WAAO,eAAU0F,OAAV,EAAmB;AACxB,UAAIC,SAAS,EAAb;;AAEAD,cAAQ1F,KAAR,CAAc,GAAd,EAAmBK,OAAnB,CAA2B,UAAUuF,KAAV,EAAiB;AAC1C,YAAIA,MAAMC,IAAN,MAAgB,EAApB,EAAwB;AACtB,cAAIC,QAAQF,MAAM5F,KAAN,CAAY,GAAZ,CAAZ;AACA,cAAIjF,MAAM+K,MAAM,CAAN,EAASD,IAAT,EAAV;AACA,cAAI7K,QAAQ8K,MAAM,CAAN,EAASD,IAAT,EAAZ;AACAF,iBAAO5K,GAAP,IAAcC,KAAd;AACD;AACF,OAPD;;AASA,aAAO2K,MAAP;AACD,KAfW;;AAiBZ;AACA1F,UAAM,cAAU0F,MAAV,EAAkB;AACtB,aAAO,uBAAYA,MAAZ,EACJxB,GADI,CACA,UAAUpJ,GAAV,EAAe;AAClB,eAAOA,MAAM,IAAN,GAAa4K,OAAO5K,GAAP,CAApB;AACD,OAHI,EAIJkF,IAJI,CAIC,IAJD,CAAP;AAKD;AAxBW,GAAd;;AA2BA;;;;;AAKA1F,UAAQwL,UAAR,GAAqB,UAAU/E,OAAV,EAAmB0E,OAAnB,EAA4B;AAC/C,QAAIM,gBAAgBP,QAAQzF,KAAR,CAAcgB,QAAQ4E,KAAR,CAAcF,OAA5B,CAApB;AACA,QAAIO,YAAYR,QAAQzF,KAAR,CAAc0F,OAAd,CAAhB;AACA,QAAIC,SAASpL,QAAQD,MAAR,CAAe0L,aAAf,EAA8BC,SAA9B,CAAb;;AAEAjF,YAAQ4E,KAAR,CAAcF,OAAd,GAAwBD,QAAQxF,IAAR,CAAa0F,MAAb,CAAxB;AACD,GAND;;AAQA;;;;;AAKApL,UAAQ2L,aAAR,GAAwB,UAAUlF,OAAV,EAAmB0E,OAAnB,EAA4B;AAClD,QAAIC,SAASF,QAAQzF,KAAR,CAAcgB,QAAQ4E,KAAR,CAAcF,OAA5B,CAAb;AACA,QAAIS,eAAeV,QAAQzF,KAAR,CAAc0F,OAAd,CAAnB;;AAEA,SAAK,IAAI3K,GAAT,IAAgBoL,YAAhB,EAA8B;AAC5B,UAAIA,aAAavJ,cAAb,CAA4B7B,GAA5B,CAAJ,EAAsC;AACpC,eAAO4K,OAAO5K,GAAP,CAAP;AACD;AACF;;AAEDiG,YAAQ4E,KAAR,CAAcF,OAAd,GAAwBD,QAAQxF,IAAR,CAAa0F,MAAb,CAAxB;AACD,GAXD;;AAaA;;;;;;;;AAQApL,UAAQ6L,QAAR,GAAmB,UAAU5B,CAAV,EAAaC,CAAb,EAAgBC,CAAhB,EAAmB;AACpC,QAAIzB,CAAJ,EAAOC,CAAP,EAAUnG,CAAV;;AAEA,QAAII,IAAIrB,KAAKuK,KAAL,CAAW7B,IAAI,CAAf,CAAR;AACA,QAAI8B,IAAI9B,IAAI,CAAJ,GAAQrH,CAAhB;AACA,QAAIS,IAAI8G,KAAK,IAAID,CAAT,CAAR;AACA,QAAI8B,IAAI7B,KAAK,IAAI4B,IAAI7B,CAAb,CAAR;AACA,QAAI+B,IAAI9B,KAAK,IAAI,CAAC,IAAI4B,CAAL,IAAU7B,CAAnB,CAAR;;AAEA,YAAQtH,IAAI,CAAZ;AACE,WAAK,CAAL;AAAQ8F,YAAIyB,CAAJ,EAAOxB,IAAIsD,CAAX,EAAczJ,IAAIa,CAAlB,CAAqB;AAC7B,WAAK,CAAL;AAAQqF,YAAIsD,CAAJ,EAAOrD,IAAIwB,CAAX,EAAc3H,IAAIa,CAAlB,CAAqB;AAC7B,WAAK,CAAL;AAAQqF,YAAIrF,CAAJ,EAAOsF,IAAIwB,CAAX,EAAc3H,IAAIyJ,CAAlB,CAAqB;AAC7B,WAAK,CAAL;AAAQvD,YAAIrF,CAAJ,EAAOsF,IAAIqD,CAAX,EAAcxJ,IAAI2H,CAAlB,CAAqB;AAC7B,WAAK,CAAL;AAAQzB,YAAIuD,CAAJ,EAAOtD,IAAItF,CAAX,EAAcb,IAAI2H,CAAlB,CAAqB;AAC7B,WAAK,CAAL;AAAQzB,YAAIyB,CAAJ,EAAOxB,IAAItF,CAAX,EAAcb,IAAIwJ,CAAlB,CAAqB;AAN/B;;AASA,WAAO,EAAEtD,GAAGnH,KAAKuK,KAAL,CAAWpD,IAAI,GAAf,CAAL,EAA0BC,GAAGpH,KAAKuK,KAAL,CAAWnD,IAAI,GAAf,CAA7B,EAAkDnG,GAAGjB,KAAKuK,KAAL,CAAWtJ,IAAI,GAAf,CAArD,EAAP;AACD,GAnBD;;AAqBAxC,UAAQsK,QAAR,GAAmB,UAAUL,CAAV,EAAaC,CAAb,EAAgBC,CAAhB,EAAmB;AACpC,QAAIlB,MAAMjJ,QAAQ6L,QAAR,CAAiB5B,CAAjB,EAAoBC,CAApB,EAAuBC,CAAvB,CAAV;AACA,WAAOnK,QAAQmJ,QAAR,CAAiBF,IAAIP,CAArB,EAAwBO,IAAIN,CAA5B,EAA+BM,IAAIzG,CAAnC,CAAP;AACD,GAHD;;AAKAxC,UAAQ+J,QAAR,GAAmB,UAAUzB,GAAV,EAAe;AAChC,QAAIW,MAAMjJ,QAAQqI,QAAR,CAAiBC,GAAjB,CAAV;AACA,WAAOtI,QAAQ4K,QAAR,CAAiB3B,IAAIP,CAArB,EAAwBO,IAAIN,CAA5B,EAA+BM,IAAIzG,CAAnC,CAAP;AACD,GAHD;;AAKAxC,UAAQ6J,UAAR,GAAqB,UAAUvB,GAAV,EAAe;AAClC,QAAI4D,OAAO,qCAAqCC,IAArC,CAA0C7D,GAA1C,CAAX;AACA,WAAO4D,IAAP;AACD,GAHD;;AAKAlM,UAAQ2J,UAAR,GAAqB,UAAUV,GAAV,EAAe;AAClCA,UAAMA,IAAIT,OAAJ,CAAY,GAAZ,EAAiB,EAAjB,CAAN;AACA,QAAI0D,OAAO,wCAAwCC,IAAxC,CAA6ClD,GAA7C,CAAX;AACA,WAAOiD,IAAP;AACD,GAJD;AAKAlM,UAAQoM,WAAR,GAAsB,UAAUC,IAAV,EAAgB;AACpCA,WAAOA,KAAK7D,OAAL,CAAa,GAAb,EAAkB,EAAlB,CAAP;AACA,QAAI0D,OAAO,kDAAkDC,IAAlD,CAAuDE,IAAvD,CAAX;AACA,WAAOH,IAAP;AACD,GAJD;;AAMA;;;;;;;AAOAlM,UAAQsM,qBAAR,GAAgC,UAAUC,MAAV,EAAkBC,eAAlB,EAAmC;AACjE,QAAI,QAAOA,eAAP,0DAAOA,eAAP,MAA0B,QAA9B,EAAwC;AACtC,UAAIC,WAAW,yBAAcD,eAAd,CAAf;AACA,WAAK,IAAI5J,IAAI,CAAb,EAAgBA,IAAI2J,OAAOzJ,MAA3B,EAAmCF,GAAnC,EAAwC;AACtC,YAAI4J,gBAAgBnK,cAAhB,CAA+BkK,OAAO3J,CAAP,CAA/B,CAAJ,EAA+C;AAC7C,cAAI,yBAAO4J,gBAAgBD,OAAO3J,CAAP,CAAhB,CAAP,KAAqC,QAAzC,EAAmD;AACjD6J,qBAASF,OAAO3J,CAAP,CAAT,IAAsB5C,QAAQ0M,YAAR,CAAqBF,gBAAgBD,OAAO3J,CAAP,CAAhB,CAArB,CAAtB;AACD;AACF;AACF;AACD,aAAO6J,QAAP;AACD,KAVD,MAWK;AACH,aAAO,IAAP;AACD;AACF,GAfD;;AAiBA;;;;;;;AAOAzM,UAAQ0M,YAAR,GAAuB,UAAUF,eAAV,EAA2B;AAChD,QAAI,QAAOA,eAAP,0DAAOA,eAAP,MAA0B,QAA9B,EAAwC;AACtC,UAAIC,WAAW,yBAAcD,eAAd,CAAf;AACA,WAAK,IAAI5J,CAAT,IAAc4J,eAAd,EAA+B;AAC7B,YAAIA,gBAAgBnK,cAAhB,CAA+BO,CAA/B,CAAJ,EAAuC;AACrC,cAAI,yBAAO4J,gBAAgB5J,CAAhB,CAAP,KAA6B,QAAjC,EAA2C;AACzC6J,qBAAS7J,CAAT,IAAc5C,QAAQ0M,YAAR,CAAqBF,gBAAgB5J,CAAhB,CAArB,CAAd;AACD;AACF;AACF;AACD,aAAO6J,QAAP;AACD,KAVD,MAWK;AACH,aAAO,IAAP;AACD;AACF,GAfD;;AAiBA;;;;;;;AAOAzM,UAAQ2M,UAAR,GAAqB,UAAUpK,CAAV,EAAYqK,OAAZ,EAAqB;AACxC,SAAK,IAAIhK,IAAI,CAAb,EAAgBA,IAAIL,EAAEO,MAAtB,EAA8BF,GAA9B,EAAmC;AACjC,UAAIiK,IAAItK,EAAEK,CAAF,CAAR;AACA,WAAK,IAAIkK,IAAIlK,CAAb,EAAgBkK,IAAI,CAAJ,IAASF,QAAQC,CAAR,EAAUtK,EAAEuK,IAAI,CAAN,CAAV,IAAoB,CAA7C,EAAgDA,GAAhD,EAAqD;AACnDvK,UAAEuK,CAAF,IAAOvK,EAAEuK,IAAI,CAAN,CAAP;AACD;AACDvK,QAAEuK,CAAF,IAAOD,CAAP;AACD;AACD,WAAOtK,CAAP;AACD,GATD;;AAWA;;;;;;;;AAQAvC,UAAQ+M,YAAR,GAAuB,UAAUC,WAAV,EAAuBC,OAAvB,EAAgCnF,MAAhC,EAAmF;AAAA,QAA3CrF,aAA2C,uEAA3B,KAA2B;AAAA,QAApByK,aAAoB,uEAAJ,EAAI;;AACxG,QAAID,QAAQnF,MAAR,MAAoB,IAAxB,EAA8B;AAC5BkF,kBAAYlF,MAAZ,IAAsB,yBAAcoF,cAAcpF,MAAd,CAAd,CAAtB;AACD,KAFD,MAGK;AACH,UAAImF,QAAQnF,MAAR,MAAoBpF,SAAxB,EAAmC;AACjC,YAAI,OAAOuK,QAAQnF,MAAR,CAAP,KAA2B,SAA/B,EAA0C;AACxCkF,sBAAYlF,MAAZ,EAAoBqF,OAApB,GAA8BF,QAAQnF,MAAR,CAA9B;AACD,SAFD,MAGK;AACH,cAAImF,QAAQnF,MAAR,EAAgBqF,OAAhB,KAA4BzK,SAAhC,EAA2C;AACzCsK,wBAAYlF,MAAZ,EAAoBqF,OAApB,GAA8B,IAA9B;AACD;AACD,eAAK,IAAI/K,IAAT,IAAiB6K,QAAQnF,MAAR,CAAjB,EAAkC;AAChC,gBAAImF,QAAQnF,MAAR,EAAgBzF,cAAhB,CAA+BD,IAA/B,CAAJ,EAA0C;AACxC4K,0BAAYlF,MAAZ,EAAoB1F,IAApB,IAA4B6K,QAAQnF,MAAR,EAAgB1F,IAAhB,CAA5B;AACD;AACF;AACF;AACF;AACF;AACF,GArBD;;AAwBA;;;;;;;;;;;AAWApC,UAAQoN,kBAAR,GAA6B,UAAUC,YAAV,EAAwBC,UAAxB,EAAoCC,KAApC,EAA2CC,MAA3C,EAAmD;AAC9E,QAAIC,gBAAgB,KAApB;AACA,QAAIC,YAAY,CAAhB;AACA,QAAIC,MAAM,CAAV;AACA,QAAIC,OAAOP,aAAavK,MAAb,GAAsB,CAAjC;;AAEA,WAAO6K,OAAOC,IAAP,IAAeF,YAAYD,aAAlC,EAAiD;AAC/C,UAAII,SAAStM,KAAKuK,KAAL,CAAW,CAAC6B,MAAMC,IAAP,IAAe,CAA1B,CAAb;;AAEA,UAAIE,OAAOT,aAAaQ,MAAb,CAAX;AACA,UAAIpN,QAAS+M,WAAW9K,SAAZ,GAAyBoL,KAAKP,KAAL,CAAzB,GAAuCO,KAAKP,KAAL,EAAYC,MAAZ,CAAnD;;AAEA,UAAIO,eAAeT,WAAW7M,KAAX,CAAnB;AACA,UAAIsN,gBAAgB,CAApB,EAAuB;AAAE;AACvB,eAAOF,MAAP;AACD,OAFD,MAGK,IAAIE,gBAAgB,CAAC,CAArB,EAAwB;AAAG;AAC9BJ,cAAME,SAAS,CAAf;AACD,OAFI,MAGA;AAAG;AACND,eAAOC,SAAS,CAAhB;AACD;;AAEDH;AACD;;AAED,WAAO,CAAC,CAAR;AACD,GA3BD;;AA6BA;;;;;;;;;;;;;AAaA1N,UAAQgO,iBAAR,GAA4B,UAAUX,YAAV,EAAwB9F,MAAxB,EAAgCgG,KAAhC,EAAuCU,cAAvC,EAAuDX,UAAvD,EAAmE;AAC7F,QAAIG,gBAAgB,KAApB;AACA,QAAIC,YAAY,CAAhB;AACA,QAAIC,MAAM,CAAV;AACA,QAAIC,OAAOP,aAAavK,MAAb,GAAsB,CAAjC;AACA,QAAIoL,SAAJ,EAAezN,KAAf,EAAsB0N,SAAtB,EAAiCN,MAAjC;;AAEA,QAAIP,aAAaA,cAAc5K,SAAd,GAA0B4K,UAA1B,GAAuC,UAAU/K,CAAV,EAAaC,CAAb,EAAgB;AACtE,aAAOD,KAAKC,CAAL,GAAS,CAAT,GAAaD,IAAIC,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAjC;AACD,KAFD;;AAIA,WAAOmL,OAAOC,IAAP,IAAeF,YAAYD,aAAlC,EAAiD;AAC/C;AACAI,eAAStM,KAAKuK,KAAL,CAAW,OAAO8B,OAAOD,GAAd,CAAX,CAAT;AACAO,kBAAYb,aAAa9L,KAAKH,GAAL,CAAS,CAAT,EAAYyM,SAAS,CAArB,CAAb,EAAsCN,KAAtC,CAAZ;AACA9M,cAAQ4M,aAAaQ,MAAb,EAAqBN,KAArB,CAAR;AACAY,kBAAYd,aAAa9L,KAAKJ,GAAL,CAASkM,aAAavK,MAAb,GAAsB,CAA/B,EAAkC+K,SAAS,CAA3C,CAAb,EAA4DN,KAA5D,CAAZ;;AAEA,UAAID,WAAW7M,KAAX,EAAkB8G,MAAlB,KAA6B,CAAjC,EAAoC;AAAE;AACpC,eAAOsG,MAAP;AACD,OAFD,MAGK,IAAIP,WAAWY,SAAX,EAAsB3G,MAAtB,IAAgC,CAAhC,IAAqC+F,WAAW7M,KAAX,EAAkB8G,MAAlB,IAA4B,CAArE,EAAwE;AAAG;AAC9E,eAAO0G,kBAAkB,QAAlB,GAA6B1M,KAAKH,GAAL,CAAS,CAAT,EAAYyM,SAAS,CAArB,CAA7B,GAAuDA,MAA9D;AACD,OAFI,MAGA,IAAIP,WAAW7M,KAAX,EAAkB8G,MAAlB,IAA4B,CAA5B,IAAiC+F,WAAWa,SAAX,EAAsB5G,MAAtB,IAAgC,CAArE,EAAwE;AAAE;AAC7E,eAAO0G,kBAAkB,QAAlB,GAA6BJ,MAA7B,GAAsCtM,KAAKJ,GAAL,CAASkM,aAAavK,MAAb,GAAsB,CAA/B,EAAkC+K,SAAS,CAA3C,CAA7C;AACD,OAFI,MAGA;AAAG;AACN,YAAIP,WAAW7M,KAAX,EAAkB8G,MAAlB,IAA4B,CAAhC,EAAmC;AAAE;AACnCoG,gBAAME,SAAS,CAAf;AACD,SAFD,MAGK;AAAG;AACND,iBAAOC,SAAS,CAAhB;AACD;AACF;AACDH;AACD;;AAED;AACA,WAAO,CAAC,CAAR;AACD,GAxCD;;AA0CA;;;;;AAKA1N,UAAQoO,eAAR,GAA0B;AACxB;AACAC,YAAQ,gBAAUpC,CAAV,EAAa;AACnB,aAAOA,CAAP;AACD,KAJuB;AAKxB;AACAqC,gBAAY,oBAAUrC,CAAV,EAAa;AACvB,aAAOA,IAAIA,CAAX;AACD,KARuB;AASxB;AACAsC,iBAAa,qBAAUtC,CAAV,EAAa;AACxB,aAAOA,KAAK,IAAIA,CAAT,CAAP;AACD,KAZuB;AAaxB;AACAuC,mBAAe,uBAAUvC,CAAV,EAAa;AAC1B,aAAOA,IAAI,EAAJ,GAAS,IAAIA,CAAJ,GAAQA,CAAjB,GAAqB,CAAC,CAAD,GAAK,CAAC,IAAI,IAAIA,CAAT,IAAcA,CAA/C;AACD,KAhBuB;AAiBxB;AACAwC,iBAAa,qBAAUxC,CAAV,EAAa;AACxB,aAAOA,IAAIA,CAAJ,GAAQA,CAAf;AACD,KApBuB;AAqBxB;AACAyC,kBAAc,sBAAUzC,CAAV,EAAa;AACzB,aAAQ,EAAEA,CAAH,GAAQA,CAAR,GAAYA,CAAZ,GAAgB,CAAvB;AACD,KAxBuB;AAyBxB;AACA0C,oBAAgB,wBAAU1C,CAAV,EAAa;AAC3B,aAAOA,IAAI,EAAJ,GAAS,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAArB,GAAyB,CAACA,IAAI,CAAL,KAAW,IAAIA,CAAJ,GAAQ,CAAnB,KAAyB,IAAIA,CAAJ,GAAQ,CAAjC,IAAsC,CAAtE;AACD,KA5BuB;AA6BxB;AACA2C,iBAAa,qBAAU3C,CAAV,EAAa;AACxB,aAAOA,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAAnB;AACD,KAhCuB;AAiCxB;AACA4C,kBAAc,sBAAU5C,CAAV,EAAa;AACzB,aAAO,IAAK,EAAEA,CAAH,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAA3B;AACD,KApCuB;AAqCxB;AACA6C,oBAAgB,wBAAU7C,CAAV,EAAa;AAC3B,aAAOA,IAAI,EAAJ,GAAS,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAAzB,GAA6B,IAAI,IAAK,EAAEA,CAAP,GAAYA,CAAZ,GAAgBA,CAAhB,GAAoBA,CAA5D;AACD,KAxCuB;AAyCxB;AACA8C,iBAAa,qBAAU9C,CAAV,EAAa;AACxB,aAAOA,IAAIA,CAAJ,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAAvB;AACD,KA5CuB;AA6CxB;AACA+C,kBAAc,sBAAU/C,CAAV,EAAa;AACzB,aAAO,IAAK,EAAEA,CAAH,GAAQA,CAAR,GAAYA,CAAZ,GAAgBA,CAAhB,GAAoBA,CAA/B;AACD,KAhDuB;AAiDxB;AACAgD,oBAAgB,wBAAUhD,CAAV,EAAa;AAC3B,aAAOA,IAAI,EAAJ,GAAS,KAAKA,CAAL,GAASA,CAAT,GAAaA,CAAb,GAAiBA,CAAjB,GAAqBA,CAA9B,GAAkC,IAAI,KAAM,EAAEA,CAAR,GAAaA,CAAb,GAAiBA,CAAjB,GAAqBA,CAArB,GAAyBA,CAAtE;AACD;AApDuB,GAA1B;;AAuDAjM,UAAQkP,iBAAR,GAA4B,YAAY;AACtC,QAAIC,QAAQC,SAASC,aAAT,CAAuB,GAAvB,CAAZ;AACAF,UAAM9D,KAAN,CAAYiE,KAAZ,GAAoB,MAApB;AACAH,UAAM9D,KAAN,CAAYkE,MAAZ,GAAqB,OAArB;;AAEA,QAAIC,QAAQJ,SAASC,aAAT,CAAuB,KAAvB,CAAZ;AACAG,UAAMnE,KAAN,CAAYoE,QAAZ,GAAuB,UAAvB;AACAD,UAAMnE,KAAN,CAAYhG,GAAZ,GAAkB,KAAlB;AACAmK,UAAMnE,KAAN,CAAYpG,IAAZ,GAAmB,KAAnB;AACAuK,UAAMnE,KAAN,CAAYqE,UAAZ,GAAyB,QAAzB;AACAF,UAAMnE,KAAN,CAAYiE,KAAZ,GAAoB,OAApB;AACAE,UAAMnE,KAAN,CAAYkE,MAAZ,GAAqB,OAArB;AACAC,UAAMnE,KAAN,CAAYsE,QAAZ,GAAuB,QAAvB;AACAH,UAAMI,WAAN,CAAmBT,KAAnB;;AAEAC,aAASS,IAAT,CAAcD,WAAd,CAA2BJ,KAA3B;AACA,QAAIM,KAAKX,MAAMY,WAAf;AACAP,UAAMnE,KAAN,CAAYsE,QAAZ,GAAuB,QAAvB;AACA,QAAIK,KAAKb,MAAMY,WAAf;AACA,QAAID,MAAME,EAAV,EAAcA,KAAKR,MAAMS,WAAX;;AAEdb,aAASS,IAAT,CAAc5O,WAAd,CAA2BuO,KAA3B;;AAEA,WAAQM,KAAKE,EAAb;AACD,GAxBD;;AA0BAhQ,UAAQkQ,OAAR,GAAkB,UAAUC,IAAV,EAAgBC,SAAhB,EAA2B;AAC3C,QAAIC,kBAAJ;AACA,QAAI,CAACnN,MAAMC,OAAN,CAAciN,SAAd,CAAL,EAA+B;AAC7BA,kBAAY,CAACA,SAAD,CAAZ;AACD;AAJ0C;AAAA;AAAA;;AAAA;AAK3C,yDAAqBD,IAArB,4GAA2B;AAAA,YAAhBG,MAAgB;;AACzB,YAAIA,MAAJ,EAAY;AACVD,sBAAYC,OAAOF,UAAU,CAAV,CAAP,CAAZ;AACA,eAAK,IAAIxN,IAAI,CAAb,EAAgBA,IAAIwN,UAAUtN,MAA9B,EAAsCF,GAAtC,EAA0C;AACxC,gBAAIyN,SAAJ,EAAe;AACbA,0BAAYA,UAAUD,UAAUxN,CAAV,CAAV,CAAZ;AACD,aAFD,MAEO;AACL;AACD;AACF;AACD,cAAI,OAAOyN,SAAP,IAAoB,WAAxB,EAAqC;AACnC;AACD;AACF;AACF;AAnB0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAoB3C,WAAOA,SAAP;AACD,GArBD,C;;;;;;AC79CA,oBAAkB,uD;;;;;;ACAlB;AACA;AACA,2C;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA,0GAAwG,OAAO;AAC/G;AACA;AACA;AACA;AACA;AACA,G;;;;;;ACZA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kCAAgC;AAChC,gBAAc;AACd,mBAAiB;AACjB;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;;AAEA;AACA;AACA,8B;;;;;;ACjCA,8BAA4B,e;;;;;;ACA5B;AACA,YAAU;AACV,I;;;;;;ACFA,sB;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACLA;AACA;AACA;AACA;AACA,I;;;;;;ACJA,mBAAiB;;AAEjB;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA4B,aAAa;;AAEzC;AACA;AACA;AACA;AACA;AACA,0CAAwC,oCAAoC;AAC5E,8CAA4C,oCAAoC;AAChF,OAAK,2BAA2B,oCAAoC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAgB,mBAAmB;AACnC;AACA;AACA,mCAAiC,2BAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,I;;;;;;ACrEA,wB;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAmE;AACnE;AACA,uFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAW;AACX,WAAS;AACT;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,iBAAe;AACf,iBAAe;AACf,iBAAe;AACf,kBAAgB;AAChB,2B;;;;;;AC5DA;AACA;AACA;AACA,yCAAuC,gC;;;;;;ACHvC,+BAA6B;AAC7B,uCAAqC,gC;;;;;;ACDrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACnBA;AACA;AACA;AACA,I;;;;;;ACHA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,I;;;;;;ACPA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;AACA;AACA;AACA,I;;;;;;ACfA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,I;;;;;;ACFA;AACA,uEAAsE,gBAAgB,UAAU,GAAG;AACnG,GAAC,E;;;;;;ACFD;AACA;AACA,mCAAiC,QAAQ,gBAAgB,UAAU,GAAG;AACtE,GAAC,E;;;;;;ACHD;AACA;AACA;AACA,KAAG;AACH;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACPA,2C;;;;;;ACAA,yBAAuB;AACvB;AACA;AACA,I;;;;;;ACHA;AACA;AACA;AACA;AACA;;AAEA;AACA,6FAAgF,aAAa,EAAE;;AAE/F;AACA,uDAAqD,0BAA0B;AAC/E;AACA,I;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA,+BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;;;;;;;ACxCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACZA;AACA;AACA;;AAEA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,WAAW,eAAe;AAC/B;AACA,OAAK;AACL;AACA,I;;;;;;ACpBA;AACA;AACA;AACA;AACA,6DAA2D;AAC3D,I;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,qDAAmD;AACnD;AACA,yCAAuC;AACvC,I;;;;;;ACLA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA,e;;;;;;ACHA,gF;;;;;;ACAA;AACA;AACA;;AAEA;AACA,oEAAkE,+BAA+B;AACjG,I;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yB;;;;;;ACVA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH,I;;;;;;ACZA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;;AAEA;AACA;AACA,+BAA6B;AAC7B,gBAAc;AACd;AACA,GAAC;AACD;AACA;AACA;AACA,iCAA+B;AAC/B;AACA;AACA,YAAU;AACV,GAAC,E;;;;;;AChBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACPA;AACA;AACA;AACA;AACA,2BAAyB,kBAAkB,EAAE;;AAE7C;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACtBA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,gCAA8B,gCAAoC,E;;;;;;ACFlE,oBAAkB,wD;;;;;;ACAlB;AACA,uD;;;;;;ACDA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAC,E;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA,gCAA8B;AAC9B;AACA;AACA,qDAAmD,OAAO,EAAE;AAC5D,I;;;;;;ACTA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,mHAAiH,mBAAmB,EAAE,mBAAmB,4JAA4J;;AAErT,wCAAsC,uCAAuC,gBAAgB;;AAE7F;AACA;AACA,GAAC;AACD;AACA,I;;;;;;ACpBA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA,yD;;;;;;ACFA,sC;;;;;;ACAA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA;AACA;AACA,kD;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAsB;AACtB,sBAAoB,uBAAuB,SAAS,IAAI;AACxD,KAAG;AACH,GAAC;AACD;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAAyD;AACzD;AACA,OAAK;AACL;AACA,wBAAsB,iCAAiC;AACvD,OAAK;AACL,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAA8D,8BAA8B;AAC5F;AACA;AACA;AACA;AACA,KAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA0D,gBAAgB;;AAE1E;AACA;AACA;AACA,sBAAoB,oBAAoB;;AAExC,4CAA0C,oBAAoB;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH,0BAAwB,eAAe,EAAE;AACzC,0BAAwB,gBAAgB;AACxC,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,sDAAoD,KAAK,QAAQ,iCAAiC;AAClG,GAAC;AACD;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAiD;AACjD,GAAC;AACD;AACA,uBAAqB;AACrB;AACA,WAAS;AACT,MAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA0D,sBAAsB;AAChF,kFAAgF,sBAAsB;AACtG,I;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH,I;;;;;;ACdA,2C;;;;;;ACAA,gBAAc,sB;;;;;;ACAd;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA,oBAAkB;;AAElB;AACA;;AAEA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;AACA,I;;;;;;;;;;;;ACfA,2C;;;;;;ACAA,wC;;;;;;ACAA,oBAAkB,wD;;;;;;ACAlB;AACA,yCAAuC,0BAA0B;AACjE,0CAAwC;AACxC;AACA,I;;;;;;;;ACJA;AACA;AACAE,SAAOvQ,OAAP,GAAkB,OAAOoH,MAAP,KAAkB,WAAnB,IAAmCA,OAAO,QAAP,CAAnC,IAAuD,mBAAAtH,CAAQ,EAAR,CAAxE,C;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA,GAAC;AACD;AACA;AACA;AACA,GAAC,qBAAqB;;AAEtB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,gBAAgB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;;AAEA,yBAAuB,SAAS;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,6CAA2C;AAC3C,mBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oFAAkF,IAAI;AACtF;;AAEA;AACA,yBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA8B,IAAI;;AAElC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAoB,iCAAiC;AACrD;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,yBAAuB,wBAAwB;AAC/C;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0LAAwL,IAAI;;AAE5L,mEAAiE,IAAI;;AAErE;;AAEA;;AAEA;AACA;AACA;AACA,4BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wCAAsC,YAAY;AAClD;AACA;AACA,WAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,qBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4BAA0B;AAC1B,8BAA4B;AAC5B,2BAAyB,EAAE,EAAE;AAC7B,2BAAyB,EAAE,EAAE;AAC7B,gCAA8B,EAAE,EAAE;AAClC,+BAA6B;AAC7B,mCAAiC;AACjC,uCAAqC;AACrC,2BAAyB,IAAI,EAAE;AAC/B,2BAAyB,IAAI,EAAE;AAC/B,gCAA8B,IAAI,EAAE;;AAEpC,6BAA2B;AAC3B,kCAAgC;;AAEhC,4CAA0C;AAC1C,mDAAiD;;AAEjD,sCAAoC,IAAI,IAAI;;AAE5C;AACA;AACA,8HAA4H,IAAI;;;AAGhI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA,4CAA0C;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,kBAAkB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA,qBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,WAAS;AACT;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,YAAY;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAa;AACb;;AAEA;AACA;AACA;AACA;;;AAGA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yCAAuC,EAAE,IAAI,EAAE;AAC/C,sCAAoC,EAAE,IAAI,EAAE;;AAE5C;;AAEA;AACA,+BAA6B,EAAE;AAC/B,yBAAuB,EAAE;AACzB,2BAAyB,EAAE;AAC3B,yBAAuB,EAAE;AACzB,uBAAqB,EAAE,IAAI,EAAE;AAC7B,sBAAoB,EAAE;AACtB,6BAA2B,GAAG;AAC9B,uBAAqB,EAAE;AACvB;AACA,yBAAuB,EAAE,IAAI,EAAE;AAC/B,wBAAsB,EAAE,IAAI,EAAE;AAC9B,sBAAoB,EAAE;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAe,+BAA+B;AAC9C;AACA;;AAEA;AACA,YAAU,OAAO;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iBAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAe,sBAAsB;AACrC;AACA,oCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gCAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA,WAAS;AACT;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,6BAA6B;AAClC;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAgB;AAChB;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAsB,cAAc;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B,qBAAqB;AACpD,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B,qBAAqB;AACpD,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAoB;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;;AAGD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA,mBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,GAAC;;;;;;;;AC5sID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA,oCAAkC,WAAW;AAC7C;AACA;AACA;;;;;;;;;ACNA,MAAI0Q,IAAJ;;AAEA,MAAIC,YAAY,OAAOrJ,MAAP,KAAkB,WAAlB,GACVA,MADU,GAEV,OAAOsJ,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyC,IAF/C;;AAIA,MAAID,aAAaA,UAAUE,MAAvB,IAAiCA,OAAOC,eAA5C,EAA6D;AAC3D;AACA;AACA,QAAIC,SAAS,IAAIC,UAAJ,CAAe,EAAf,CAAb;AACAN,WAAO,SAASO,SAAT,GAAqB;AAC1BJ,aAAOC,eAAP,CAAuBC,MAAvB;AACA,aAAOA,MAAP;AACD,KAHD;AAID;;AAED,MAAI,CAACL,IAAL,EAAW;AACT;AACA;AACA;AACA;AACA,QAAIQ,QAAQ,IAAI9N,KAAJ,CAAU,EAAV,CAAZ;AACAsN,WAAO,gB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KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA,GAAC;AACD,4BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA4D,qBAAqB;AACjF;AACA,eAAa,eAAe;AAC5B,eAAa,OAAO;AACpB;AACA;AACA;AACA,gBAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL,iBAAe,kCAAkC;AACjD;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAO;;AAEP;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB;AACA;AACA,mBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAO;;AAEP;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAwB,uBAAuB;AAC/C;AACA,2CAAyC,kCAAkC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;;;;;;ACtOD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAqD,UAAU;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,UAAU;AACrB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,QAAQ;AACnB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,OAAO;AACpB;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,aAAW,SAAS;AACpB,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,iBAAiB;AAC5B,aAAW,MAAM;AACjB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,EAAE;AACb,aAAW,EAAE;AACb,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,cAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK;AAC3C,aAAW,OAAO;AAClB,aAAW,QAAQ;AACnB,eAAa,MAAM,GAAG,KAAK,EAAE,KAAK;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,eAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,SAAS;AACpB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAAyB,EAAE;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO,KAAK;AACvB,aAAW,OAAO,KAAK;AACvB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAAyB;;AAEzB;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;;AAET;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA,YAAU;AACV,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA,YAAU;AACV,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;;AAEA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA,+BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,OAAO;AAClB;AACA;AACA,8BAA4B,8BAA8B;;AAE1D;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA,kBAAgB;;AAEhB;AACA;AACA,iBAAe,OAAO;AACtB,kBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB;AACjB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAiC;;AAEjC,sCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,wCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,MAAM;AACvB;AACA,oCAAkC,EAAE;;AAEpC;AACA;AACA;AACA,mBAAiB;AACjB;AACA,kCAAgC,EAAE;;AAElC;AACA;AACA;AACA;AACA;AACA,yBAAuB;AACvB;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,eAAa;AACb;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,kBAAkB;AAC7B,aAAW,WAAW;AACtB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,OAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA,eAAa;AACb,WAAS;AACT;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA,uBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;AACA,8BAA4B,cAAc;AAC1C,6BAA2B,cAAc;AACzC,6BAA2B,gCAAgC;AAC3D,2BAAyB,gCAAgC;AACzD;AACA,2BAAyB,4BAA4B;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB;AACA;AACA;AACA,8BAA4B,gCAAgC;;AAE5D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAkE;AAClE;AACA,eAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,kBAAkB;AACjC,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,kBAAkB;AACjC,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,qGAAmG,GAAG;AACtG;;AAEA;AACA;AACA;AACA,OAAK;AACL,GAAC;AACD;AACA,GAAC;AACD;AACA;;AAEA,GAAC;;;;;;;ACllFD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA,GAAC;;AAED;AACA;;AAEA;;AAEA;AACA,oBAAkB,UAAU;AAC5B;AACA;;AAEA;AACA,kBAAgB,UAAU,OAAO,iCAAiC;AAClE;AACA,kBAAgB,SAAS,OAAO,iCAAiC;AACjE;AACA,iBAAe,SAAS,SAAS,iBAAiB;AAClD;AACA,iBAAe,UAAU,SAAS,kBAAkB;AACpD;AACA,iBAAe,SAAS,SAAS,oBAAoB;;AAErD;AACA,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;;;;AAItB,kCAAgC;AAChC,gCAA8B;;AAE9B;AAC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","file":"vis.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vis\"] = factory();\n\telse\n\t\troot[\"vis\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap eca1787db4da1a54ed82","var util = require('./lib/util');\n\n// Graph3d\nutil.extend(exports, require('./index-graph3d'));\n\n// Timeline & Graph2d\nutil.extend(exports, require('./index-timeline-graph2d'));\n\n// Network\nutil.extend(exports, require('./index-network'));\n\n\n\n// WEBPACK FOOTER //\n// ./index.js","// utility functions\n\n// first check if moment.js is already loaded in the browser window, if so,\n// use this instance. Else, load via commonjs.\n\n\nvar moment = require('./module/moment');\nvar uuid = require('./module/uuid');\n\n/**\n * Test whether given object is a number\n * @param {*} object\n * @return {Boolean} isNumber\n */\nexports.isNumber = function (object) {\n  return (object instanceof Number || typeof object == 'number');\n};\n\n/**\n * Censors object elements containing dom elements\n * @param {*} object\n * @return {Object} object without elements\n */\nexports.elementsCensor = function (object) {\n  if (!object) return;\n  var replacer = function(key, value) {\n    if (value instanceof Element) {\n      return \"DOM Element\";\n    } else {\n      return value;\n    }\n  }\n  return JSON.parse(JSON.stringify(object, replacer))\n}\n\n\n/**\n * Remove everything in the DOM object\n * @param DOMobject\n */\nexports.recursiveDOMDelete = function (DOMobject) {\n  if (DOMobject) {\n    while (DOMobject.hasChildNodes() === true) {\n      exports.recursiveDOMDelete(DOMobject.firstChild);\n      DOMobject.removeChild(DOMobject.firstChild);\n    }\n  }\n};\n\n/**\n * this function gives you a range between 0 and 1 based on the min and max values in the set, the total sum of all values and the current value.\n *\n * @param min\n * @param max\n * @param total\n * @param value\n * @returns {number}\n */\nexports.giveRange = function (min, max, total, value) {\n  if (max == min) {\n    return 0.5;\n  }\n  else {\n    var scale = 1 / (max - min);\n    return Math.max(0, (value - min) * scale);\n  }\n}\n\n/**\n * Test whether given object is a string\n * @param {*} object\n * @return {Boolean} isString\n */\nexports.isString = function (object) {\n  return (object instanceof String || typeof object == 'string');\n};\n\n/**\n * Test whether given object is a Date, or a String containing a Date\n * @param {Date | String} object\n * @return {Boolean} isDate\n */\nexports.isDate = function (object) {\n  if (object instanceof Date) {\n    return true;\n  }\n  else if (exports.isString(object)) {\n    // test whether this string contains a date\n    var match = ASPDateRegex.exec(object);\n    if (match) {\n      return true;\n    }\n    else if (!isNaN(Date.parse(object))) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Create a semi UUID\n * source: http://stackoverflow.com/a/105074/1262753\n * @return {String} uuid\n */\nexports.randomUUID = function () {\n  return uuid.v4();\n};\n\n/**\n * assign all keys of an object that are not nested objects to a certain value (used for color objects).\n * @param obj\n * @param value\n */\nexports.assignAllKeys = function (obj, value) {\n  for (var prop in obj) {\n    if (obj.hasOwnProperty(prop)) {\n      if (typeof obj[prop] !== 'object') {\n        obj[prop] = value;\n      }\n    }\n  }\n}\n\n\n/**\n * Fill an object with a possibly partially defined other object. Only copies values if the a object has an object requiring values.\n * That means an object is not created on a property if only the b object has it.\n * @param obj\n * @param value\n */\nexports.fillIfDefined = function (a, b, allowDeletion = false) {\n  for (var prop in a) {\n    if (b[prop] !== undefined) {\n      if (typeof b[prop] !== 'object') {\n        if ((b[prop] === undefined || b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n          delete a[prop];\n        }\n        else {\n          a[prop] = b[prop];\n        }\n      }\n      else {\n        if (typeof a[prop] === 'object') {\n          exports.fillIfDefined(a[prop], b[prop], allowDeletion);\n        }\n      }\n    }\n  }\n}\n\n\n\n/**\n * Extend object a with the properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Object} a\n * @param {... Object} b\n * @return {Object} a\n */\nexports.protoExtend = function (a, b) {\n  for (var i = 1; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var prop in other) {\n      a[prop] = other[prop];\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with the properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Object} a\n * @param {... Object} b\n * @return {Object} a\n */\nexports.extend = function (a, b) {\n  for (var i = 1; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var prop in other) {\n      if (other.hasOwnProperty(prop)) {\n        a[prop] = other[prop];\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveExtend = function (props, a, b) {\n  if (!Array.isArray(props)) {\n    throw new Error('Array with property names expected as first argument');\n  }\n\n  for (var i = 2; i < arguments.length; i++) {\n    var other = arguments[i];\n\n    for (var p = 0; p < props.length; p++) {\n      var prop = props[p];\n      if (other.hasOwnProperty(prop)) {\n        a[prop] = other[prop];\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveDeepExtend = function (props, a, b, allowDeletion = false) {\n  // TODO: add support for Arrays to deepExtend\n  if (Array.isArray(b)) {\n    throw new TypeError('Arrays are not supported by deepExtend');\n  }\n  for (var i = 2; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var p = 0; p < props.length; p++) {\n      var prop = props[p];\n      if (other.hasOwnProperty(prop)) {\n        if (b[prop] && b[prop].constructor === Object) {\n          if (a[prop] === undefined) {\n            a[prop] = {};\n          }\n          if (a[prop].constructor === Object) {\n            exports.deepExtend(a[prop], b[prop], false, allowDeletion);\n          }\n          else {\n            if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n              delete a[prop];\n            }\n            else {\n              a[prop] = b[prop];\n            }\n          }\n        } else if (Array.isArray(b[prop])) {\n          throw new TypeError('Arrays are not supported by deepExtend');\n        } else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveNotDeepExtend = function (props, a, b, allowDeletion = false) {\n  // TODO: add support for Arrays to deepExtend\n  if (Array.isArray(b)) {\n    throw new TypeError('Arrays are not supported by deepExtend');\n  }\n  for (var prop in b) {\n    if (b.hasOwnProperty(prop)) {\n      if (props.indexOf(prop) == -1) {\n        if (b[prop] && b[prop].constructor === Object) {\n          if (a[prop] === undefined) {\n            a[prop] = {};\n          }\n          if (a[prop].constructor === Object) {\n            exports.deepExtend(a[prop], b[prop]);\n          }\n          else {\n            if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n              delete a[prop];\n            }\n            else {\n              a[prop] = b[prop];\n            }\n          }\n        } else if (Array.isArray(b[prop])) {\n          a[prop] = [];\n          for (let i = 0; i < b[prop].length; i++) {\n            a[prop].push(b[prop][i]);\n          }\n        } else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Deep extend an object a with the properties of object b\n * @param {Object} a\n * @param {Object} b\n * @param [Boolean] protoExtend --> optional parameter. If true, the prototype values will also be extended.\n *                                  (ie. the options objects that inherit from others will also get the inherited options)\n * @param [Boolean] global      --> optional parameter. If true, the values of fields that are null will not deleted\n * @returns {Object}\n */\nexports.deepExtend = function (a, b, protoExtend, allowDeletion) {\n  for (var prop in b) {\n    if (b.hasOwnProperty(prop) || protoExtend === true) {\n      if (b[prop] && b[prop].constructor === Object) {\n        if (a[prop] === undefined) {\n          a[prop] = {};\n        }\n        if (a[prop].constructor === Object) {\n          exports.deepExtend(a[prop], b[prop], protoExtend);\n        }\n        else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n      } else if (Array.isArray(b[prop])) {\n        a[prop] = [];\n        for (let i = 0; i < b[prop].length; i++) {\n          a[prop].push(b[prop][i]);\n        }\n      } else {\n        if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n          delete a[prop];\n        }\n        else {\n          a[prop] = b[prop];\n        }\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Test whether all elements in two arrays are equal.\n * @param {Array} a\n * @param {Array} b\n * @return {boolean} Returns true if both arrays have the same length and same\n *                   elements.\n */\nexports.equalArray = function (a, b) {\n  if (a.length != b.length) return false;\n\n  for (var i = 0, len = a.length; i < len; i++) {\n    if (a[i] != b[i]) return false;\n  }\n\n  return true;\n};\n\n/**\n * Convert an object to another type\n * @param {Boolean | Number | String | Date | Moment | Null | undefined} object\n * @param {String | undefined} type   Name of the type. Available types:\n *                                    'Boolean', 'Number', 'String',\n *                                    'Date', 'Moment', ISODate', 'ASPDate'.\n * @return {*} object\n * @throws Error\n */\nexports.convert = function (object, type) {\n  var match;\n\n  if (object === undefined) {\n    return undefined;\n  }\n  if (object === null) {\n    return null;\n  }\n\n  if (!type) {\n    return object;\n  }\n  if (!(typeof type === 'string') && !(type instanceof String)) {\n    throw new Error('Type must be a string');\n  }\n\n  //noinspection FallthroughInSwitchStatementJS\n  switch (type) {\n    case 'boolean':\n    case 'Boolean':\n      return Boolean(object);\n\n    case 'number':\n    case 'Number':\n      if (exports.isString(object) && !isNaN(Date.parse(object))) {\n        return moment(object).valueOf();\n      } else {\n        return Number(object.valueOf());\n      }\n    case 'string':\n    case 'String':\n      return String(object);\n\n    case 'Date':\n      if (exports.isNumber(object)) {\n        return new Date(object);\n      }\n      if (object instanceof Date) {\n        return new Date(object.valueOf());\n      }\n      else if (moment.isMoment(object)) {\n        return new Date(object.valueOf());\n      }\n      if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])); // parse number\n        }\n        else {\n          return moment(new Date(object)).toDate(); // parse string\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type Date');\n      }\n\n    case 'Moment':\n      if (exports.isNumber(object)) {\n        return moment(object);\n      }\n      if (object instanceof Date) {\n        return moment(object.valueOf());\n      }\n      else if (moment.isMoment(object)) {\n        return moment(object);\n      }\n      if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return moment(Number(match[1])); // parse number\n        }\n        else {\n          return moment(object); // parse string\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type Date');\n      }\n\n    case 'ISODate':\n      if (exports.isNumber(object)) {\n        return new Date(object);\n      }\n      else if (object instanceof Date) {\n        return object.toISOString();\n      }\n      else if (moment.isMoment(object)) {\n        return object.toDate().toISOString();\n      }\n      else if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])).toISOString(); // parse number\n        }\n        else {\n          return moment(object).format(); // ISO 8601\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type ISODate');\n      }\n\n    case 'ASPDate':\n      if (exports.isNumber(object)) {\n        return '/Date(' + object + ')/';\n      }\n      else if (object instanceof Date) {\n        return '/Date(' + object.valueOf() + ')/';\n      }\n      else if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        var value;\n        if (match) {\n          // object is an ASP date\n          value = new Date(Number(match[1])).valueOf(); // parse number\n        }\n        else {\n          value = new Date(object).valueOf(); // parse string\n        }\n        return '/Date(' + value + ')/';\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type ASPDate');\n      }\n\n    default:\n      throw new Error('Unknown type \"' + type + '\"');\n  }\n};\n\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nvar ASPDateRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n/**\n * Get the type of an object, for example exports.getType([]) returns 'Array'\n * @param {*} object\n * @return {String} type\n */\nexports.getType = function (object) {\n  var type = typeof object;\n\n  if (type == 'object') {\n    if (object === null) {\n      return 'null';\n    }\n    if (object instanceof Boolean) {\n      return 'Boolean';\n    }\n    if (object instanceof Number) {\n      return 'Number';\n    }\n    if (object instanceof String) {\n      return 'String';\n    }\n    if (Array.isArray(object)) {\n      return 'Array';\n    }\n    if (object instanceof Date) {\n      return 'Date';\n    }\n    return 'Object';\n  }\n  else if (type == 'number') {\n    return 'Number';\n  }\n  else if (type == 'boolean') {\n    return 'Boolean';\n  }\n  else if (type == 'string') {\n    return 'String';\n  }\n  else if (type === undefined) {\n    return 'undefined';\n  }\n\n\n  return type;\n};\n\n\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n *\n * @param arr\n * @param newValue\n * @returns {Array}\n */\nexports.copyAndExtendArray = function (arr, newValue) {\n  let newArr = [];\n  for (let i = 0; i < arr.length; i++) {\n    newArr.push(arr[i]);\n  }\n  newArr.push(newValue);\n  return newArr;\n}\n\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n *\n * @param arr\n * @param newValue\n * @returns {Array}\n */\nexports.copyArray = function (arr) {\n  let newArr = [];\n  for (let i = 0; i < arr.length; i++) {\n    newArr.push(arr[i]);\n  }\n  return newArr;\n}\n\n/**\n * Retrieve the absolute left value of a DOM element\n * @param {Element} elem        A dom element, for example a div\n * @return {number} left        The absolute left position of this element\n *                              in the browser page.\n */\nexports.getAbsoluteLeft = function (elem) {\n  return elem.getBoundingClientRect().left;\n};\n\nexports.getAbsoluteRight = function (elem) {\n  return elem.getBoundingClientRect().right;\n};\n\n/**\n * Retrieve the absolute top value of a DOM element\n * @param {Element} elem        A dom element, for example a div\n * @return {number} top        The absolute top position of this element\n *                              in the browser page.\n */\nexports.getAbsoluteTop = function (elem) {\n  return elem.getBoundingClientRect().top;\n};\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nexports.addClassName = function (elem, className) {\n  var classes = elem.className.split(' ');\n  if (classes.indexOf(className) == -1) {\n    classes.push(className); // add the class to the array\n    elem.className = classes.join(' ');\n  }\n};\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nexports.removeClassName = function (elem, className) {\n  var classes = elem.className.split(' ');\n  var index = classes.indexOf(className);\n  if (index != -1) {\n    classes.splice(index, 1); // remove the class from the array\n    elem.className = classes.join(' ');\n  }\n};\n\n/**\n * For each method for both arrays and objects.\n * In case of an array, the built-in Array.forEach() is applied.\n * In case of an Object, the method loops over all properties of the object.\n * @param {Object | Array} object   An Object or Array\n * @param {function} callback       Callback method, called for each item in\n *                                  the object or array with three parameters:\n *                                  callback(value, index, object)\n */\nexports.forEach = function (object, callback) {\n  var i,\n    len;\n  if (Array.isArray(object)) {\n    // array\n    for (i = 0, len = object.length; i < len; i++) {\n      callback(object[i], i, object);\n    }\n  }\n  else {\n    // object\n    for (i in object) {\n      if (object.hasOwnProperty(i)) {\n        callback(object[i], i, object);\n      }\n    }\n  }\n};\n\n/**\n * Convert an object into an array: all objects properties are put into the\n * array. The resulting array is unordered.\n * @param {Object} object\n * @param {Array} array\n */\nexports.toArray = function (object) {\n  var array = [];\n\n  for (var prop in object) {\n    if (object.hasOwnProperty(prop)) array.push(object[prop]);\n  }\n\n  return array;\n};\n\n/**\n * Update a property in an object\n * @param {Object} object\n * @param {String} key\n * @param {*} value\n * @return {Boolean} changed\n */\nexports.updateProperty = function (object, key, value) {\n  if (object[key] !== value) {\n    object[key] = value;\n    return true;\n  }\n  else {\n    return false;\n  }\n};\n\n/**\n * Throttle the given function to be only executed once per animation frame\n * @param {function} fn\n * @returns {function} Returns the throttled function\n */\nexports.throttle = function (fn) {\n  var scheduled = false;\n\n  return function throttled () {\n    if (!scheduled) {\n      scheduled = true;\n      requestAnimationFrame(function () {\n        scheduled = false;\n        fn();\n      });\n    }\n  }\n};\n\n/**\n * Add and event listener. Works for all browsers\n * @param {Element}     element    An html element\n * @param {string}      action     The action, for example \"click\",\n *                                 without the prefix \"on\"\n * @param {function}    listener   The callback function to be executed\n * @param {boolean}     [useCapture]\n */\nexports.addEventListener = function (element, action, listener, useCapture) {\n  if (element.addEventListener) {\n    if (useCapture === undefined)\n      useCapture = false;\n\n    if (action === \"mousewheel\" && navigator.userAgent.indexOf(\"Firefox\") >= 0) {\n      action = \"DOMMouseScroll\";  // For Firefox\n    }\n\n    element.addEventListener(action, listener, useCapture);\n  } else {\n    element.attachEvent(\"on\" + action, listener);  // IE browsers\n  }\n};\n\n/**\n * Remove an event listener from an element\n * @param {Element}     element         An html dom element\n * @param {string}      action          The name of the event, for example \"mousedown\"\n * @param {function}    listener        The listener function\n * @param {boolean}     [useCapture]\n */\nexports.removeEventListener = function (element, action, listener, useCapture) {\n  if (element.removeEventListener) {\n    // non-IE browsers\n    if (useCapture === undefined)\n      useCapture = false;\n\n    if (action === \"mousewheel\" && navigator.userAgent.indexOf(\"Firefox\") >= 0) {\n      action = \"DOMMouseScroll\";  // For Firefox\n    }\n\n    element.removeEventListener(action, listener, useCapture);\n  } else {\n    // IE browsers\n    element.detachEvent(\"on\" + action, listener);\n  }\n};\n\n/**\n * Cancels the event if it is cancelable, without stopping further propagation of the event.\n */\nexports.preventDefault = function (event) {\n  if (!event)\n    event = window.event;\n\n  if (event.preventDefault) {\n    event.preventDefault();  // non-IE browsers\n  }\n  else {\n    event.returnValue = false;  // IE browsers\n  }\n};\n\n/**\n * Get HTML element which is the target of the event\n * @param {Event} event\n * @return {Element} target element\n */\nexports.getTarget = function (event) {\n  // code from http://www.quirksmode.org/js/events_properties.html\n  if (!event) {\n    event = window.event;\n  }\n\n  var target;\n\n  if (event.target) {\n    target = event.target;\n  }\n  else if (event.srcElement) {\n    target = event.srcElement;\n  }\n\n  if (target.nodeType != undefined && target.nodeType == 3) {\n    // defeat Safari bug\n    target = target.parentNode;\n  }\n\n  return target;\n};\n\n/**\n * Check if given element contains given parent somewhere in the DOM tree\n * @param {Element} element\n * @param {Element} parent\n */\nexports.hasParent = function (element, parent) {\n  var e = element;\n\n  while (e) {\n    if (e === parent) {\n      return true;\n    }\n    e = e.parentNode;\n  }\n\n  return false;\n};\n\nexports.option = {};\n\n/**\n * Convert a value into a boolean\n * @param {Boolean | function | undefined} value\n * @param {Boolean} [defaultValue]\n * @returns {Boolean} bool\n */\nexports.option.asBoolean = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return (value != false);\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a value into a number\n * @param {Boolean | function | undefined} value\n * @param {Number} [defaultValue]\n * @returns {Number} number\n */\nexports.option.asNumber = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return Number(value) || defaultValue || null;\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a value into a string\n * @param {String | function | undefined} value\n * @param {String} [defaultValue]\n * @returns {String} str\n */\nexports.option.asString = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return String(value);\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a size or location into a string with pixels or a percentage\n * @param {String | Number | function | undefined} value\n * @param {String} [defaultValue]\n * @returns {String} size\n */\nexports.option.asSize = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (exports.isString(value)) {\n    return value;\n  }\n  else if (exports.isNumber(value)) {\n    return value + 'px';\n  }\n  else {\n    return defaultValue || null;\n  }\n};\n\n/**\n * Convert a value into a DOM element\n * @param {HTMLElement | function | undefined} value\n * @param {HTMLElement} [defaultValue]\n * @returns {HTMLElement | null} dom\n */\nexports.option.asElement = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  return value || defaultValue || null;\n};\n\n/**\n * http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n *\n * @param {String} hex\n * @returns {{r: *, g: *, b: *}} | 255 range\n */\nexports.hexToRGB = function (hex) {\n  // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n  var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n  hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n    return r + r + g + g + b + b;\n  });\n  var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result ? {\n    r: parseInt(result[1], 16),\n    g: parseInt(result[2], 16),\n    b: parseInt(result[3], 16)\n  } : null;\n};\n\n/**\n * This function takes color in hex format or rgb() or rgba() format and overrides the opacity. Returns rgba() string.\n * @param color\n * @param opacity\n * @returns {*}\n */\nexports.overrideOpacity = function (color, opacity) {\n  if (color.indexOf(\"rgba\") != -1) {\n    return color;\n  }\n  else if (color.indexOf(\"rgb\") != -1) {\n    var rgb = color.substr(color.indexOf(\"(\") + 1).replace(\")\", \"\").split(\",\");\n    return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\"\n  }\n  else {\n    var rgb = exports.hexToRGB(color);\n    if (rgb == null) {\n      return color;\n    }\n    else {\n      return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\"\n    }\n  }\n}\n\n/**\n *\n * @param red     0 -- 255\n * @param green   0 -- 255\n * @param blue    0 -- 255\n * @returns {string}\n * @constructor\n */\nexports.RGBToHex = function (red, green, blue) {\n  return \"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1);\n};\n\n/**\n * Parse a color property into an object with border, background, and\n * highlight colors\n * @param {Object | String} color\n * @return {Object} colorObject\n */\nexports.parseColor = function (color) {\n  var c;\n  if (exports.isString(color) === true) {\n    if (exports.isValidRGB(color) === true) {\n      var rgb = color.substr(4).substr(0, color.length - 5).split(',').map(function (value) { return parseInt(value) });\n      color = exports.RGBToHex(rgb[0], rgb[1], rgb[2]);\n    }\n    if (exports.isValidHex(color) === true) {\n      var hsv = exports.hexToHSV(color);\n      var lighterColorHSV = { h: hsv.h, s: hsv.s * 0.8, v: Math.min(1, hsv.v * 1.02) };\n      var darkerColorHSV = { h: hsv.h, s: Math.min(1, hsv.s * 1.25), v: hsv.v * 0.8 };\n      var darkerColorHex = exports.HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\n      var lighterColorHex = exports.HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\n      c = {\n        background: color,\n        border: darkerColorHex,\n        highlight: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        },\n        hover: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        }\n      };\n    }\n    else {\n      c = {\n        background: color,\n        border: color,\n        highlight: {\n          background: color,\n          border: color\n        },\n        hover: {\n          background: color,\n          border: color\n        }\n      };\n    }\n  }\n  else {\n    c = {};\n    c.background = color.background || undefined;\n    c.border = color.border || undefined;\n\n    if (exports.isString(color.highlight)) {\n      c.highlight = {\n        border: color.highlight,\n        background: color.highlight\n      }\n    }\n    else {\n      c.highlight = {};\n      c.highlight.background = color.highlight && color.highlight.background || undefined;\n      c.highlight.border = color.highlight && color.highlight.border || undefined;\n    }\n\n    if (exports.isString(color.hover)) {\n      c.hover = {\n        border: color.hover,\n        background: color.hover\n      }\n    }\n    else {\n      c.hover = {};\n      c.hover.background = color.hover && color.hover.background || undefined;\n      c.hover.border = color.hover && color.hover.border || undefined;\n    }\n  }\n\n  return c;\n};\n\n\n\n/**\n * http://www.javascripter.net/faq/rgb2hsv.htm\n *\n * @param red\n * @param green\n * @param blue\n * @returns {*}\n * @constructor\n */\nexports.RGBToHSV = function (red, green, blue) {\n  red = red / 255; green = green / 255; blue = blue / 255;\n  var minRGB = Math.min(red, Math.min(green, blue));\n  var maxRGB = Math.max(red, Math.max(green, blue));\n\n  // Black-gray-white\n  if (minRGB == maxRGB) {\n    return { h: 0, s: 0, v: minRGB };\n  }\n\n  // Colors other than black-gray-white:\n  var d = (red == minRGB) ? green - blue : ((blue == minRGB) ? red - green : blue - red);\n  var h = (red == minRGB) ? 3 : ((blue == minRGB) ? 1 : 5);\n  var hue = 60 * (h - d / (maxRGB - minRGB)) / 360;\n  var saturation = (maxRGB - minRGB) / maxRGB;\n  var value = maxRGB;\n  return { h: hue, s: saturation, v: value };\n};\n\nvar cssUtil = {\n  // split a string with css styles into an object with key/values\n  split: function (cssText) {\n    var styles = {};\n\n    cssText.split(';').forEach(function (style) {\n      if (style.trim() != '') {\n        var parts = style.split(':');\n        var key = parts[0].trim();\n        var value = parts[1].trim();\n        styles[key] = value;\n      }\n    });\n\n    return styles;\n  },\n\n  // build a css text string from an object with key/values\n  join: function (styles) {\n    return Object.keys(styles)\n      .map(function (key) {\n        return key + ': ' + styles[key];\n      })\n      .join('; ');\n  }\n};\n\n/**\n * Append a string with css styles to an element\n * @param {Element} element\n * @param {String} cssText\n */\nexports.addCssText = function (element, cssText) {\n  var currentStyles = cssUtil.split(element.style.cssText);\n  var newStyles = cssUtil.split(cssText);\n  var styles = exports.extend(currentStyles, newStyles);\n\n  element.style.cssText = cssUtil.join(styles);\n};\n\n/**\n * Remove a string with css styles from an element\n * @param {Element} element\n * @param {String} cssText\n */\nexports.removeCssText = function (element, cssText) {\n  var styles = cssUtil.split(element.style.cssText);\n  var removeStyles = cssUtil.split(cssText);\n\n  for (var key in removeStyles) {\n    if (removeStyles.hasOwnProperty(key)) {\n      delete styles[key];\n    }\n  }\n\n  element.style.cssText = cssUtil.join(styles);\n};\n\n/**\n * https://gist.github.com/mjijackson/5311256\n * @param h\n * @param s\n * @param v\n * @returns {{r: number, g: number, b: number}}\n * @constructor\n */\nexports.HSVToRGB = function (h, s, v) {\n  var r, g, b;\n\n  var i = Math.floor(h * 6);\n  var f = h * 6 - i;\n  var p = v * (1 - s);\n  var q = v * (1 - f * s);\n  var t = v * (1 - (1 - f) * s);\n\n  switch (i % 6) {\n    case 0: r = v, g = t, b = p; break;\n    case 1: r = q, g = v, b = p; break;\n    case 2: r = p, g = v, b = t; break;\n    case 3: r = p, g = q, b = v; break;\n    case 4: r = t, g = p, b = v; break;\n    case 5: r = v, g = p, b = q; break;\n  }\n\n  return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) };\n};\n\nexports.HSVToHex = function (h, s, v) {\n  var rgb = exports.HSVToRGB(h, s, v);\n  return exports.RGBToHex(rgb.r, rgb.g, rgb.b);\n};\n\nexports.hexToHSV = function (hex) {\n  var rgb = exports.hexToRGB(hex);\n  return exports.RGBToHSV(rgb.r, rgb.g, rgb.b);\n};\n\nexports.isValidHex = function (hex) {\n  var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\n  return isOk;\n};\n\nexports.isValidRGB = function (rgb) {\n  rgb = rgb.replace(\" \", \"\");\n  var isOk = /rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/i.test(rgb);\n  return isOk;\n}\nexports.isValidRGBA = function (rgba) {\n  rgba = rgba.replace(\" \", \"\");\n  var isOk = /rgba\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(.{1,3})\\)/i.test(rgba);\n  return isOk;\n}\n\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject\n * This is used for default options.\n *\n * @param referenceObject\n * @returns {*}\n */\nexports.selectiveBridgeObject = function (fields, referenceObject) {\n  if (typeof referenceObject == \"object\") {\n    var objectTo = Object.create(referenceObject);\n    for (var i = 0; i < fields.length; i++) {\n      if (referenceObject.hasOwnProperty(fields[i])) {\n        if (typeof referenceObject[fields[i]] == \"object\") {\n          objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]);\n        }\n      }\n    }\n    return objectTo;\n  }\n  else {\n    return null;\n  }\n};\n\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject\n * This is used for default options.\n *\n * @param referenceObject\n * @returns {*}\n */\nexports.bridgeObject = function (referenceObject) {\n  if (typeof referenceObject == \"object\") {\n    var objectTo = Object.create(referenceObject);\n    for (var i in referenceObject) {\n      if (referenceObject.hasOwnProperty(i)) {\n        if (typeof referenceObject[i] == \"object\") {\n          objectTo[i] = exports.bridgeObject(referenceObject[i]);\n        }\n      }\n    }\n    return objectTo;\n  }\n  else {\n    return null;\n  }\n};\n\n/**\n * This method provides a stable sort implementation, very fast for presorted data\n *\n * @param a the array\n * @param a order comparator\n * @returns {the array}\n */\nexports.insertSort = function (a,compare) {\n  for (var i = 0; i < a.length; i++) {\n    var k = a[i];\n    for (var j = i; j > 0 && compare(k,a[j - 1])<0; j--) {\n      a[j] = a[j - 1];\n    }\n    a[j] = k;\n  }\n  return a;\n}\n\n/**\n * this is used to set the options of subobjects in the options object. A requirement of these subobjects\n * is that they have an 'enabled' element which is optional for the user but mandatory for the program.\n *\n * @param [object] mergeTarget | this is either this.options or the options used for the groups.\n * @param [object] options     | options\n * @param [String] option      | this is the option key in the options argument\n */\nexports.mergeOptions = function (mergeTarget, options, option, allowDeletion = false, globalOptions = {}) {\n  if (options[option] === null) {\n    mergeTarget[option] = Object.create(globalOptions[option]);\n  }\n  else {\n    if (options[option] !== undefined) {\n      if (typeof options[option] === 'boolean') {\n        mergeTarget[option].enabled = options[option];\n      }\n      else {\n        if (options[option].enabled === undefined) {\n          mergeTarget[option].enabled = true;\n        }\n        for (var prop in options[option]) {\n          if (options[option].hasOwnProperty(prop)) {\n            mergeTarget[option][prop] = options[option][prop];\n          }\n        }\n      }\n    }\n  }\n}\n\n\n/**\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\n * this function will then iterate in both directions over this sorted list to find all visible items.\n *\n * @param {Item[]} orderedItems       | Items ordered by start\n * @param {function} comparator       | -1 is lower, 0 is equal, 1 is higher\n * @param {String} field\n * @param {String} field2\n * @returns {number}\n * @private\n */\nexports.binarySearchCustom = function (orderedItems, comparator, field, field2) {\n  var maxIterations = 10000;\n  var iteration = 0;\n  var low = 0;\n  var high = orderedItems.length - 1;\n\n  while (low <= high && iteration < maxIterations) {\n    var middle = Math.floor((low + high) / 2);\n\n    var item = orderedItems[middle];\n    var value = (field2 === undefined) ? item[field] : item[field][field2];\n\n    var searchResult = comparator(value);\n    if (searchResult == 0) { // jihaa, found a visible item!\n      return middle;\n    }\n    else if (searchResult == -1) {  // it is too small --> increase low\n      low = middle + 1;\n    }\n    else {  // it is too big --> decrease high\n      high = middle - 1;\n    }\n\n    iteration++;\n  }\n\n  return -1;\n};\n\n/**\n * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of\n * two values, we return either the one before or the one after, depending on user input\n * If it is found, we return the index, else -1.\n *\n * @param {Array} orderedItems\n * @param {{start: number, end: number}} target\n * @param {String} field\n * @param {String} sidePreference   'before' or 'after'\n * @param {function} comparator an optional comparator, returning -1,0,1 for <,==,>.\n * @returns {number}\n * @private\n */\nexports.binarySearchValue = function (orderedItems, target, field, sidePreference, comparator) {\n  var maxIterations = 10000;\n  var iteration = 0;\n  var low = 0;\n  var high = orderedItems.length - 1;\n  var prevValue, value, nextValue, middle;\n\n  var comparator = comparator != undefined ? comparator : function (a, b) {\n    return a == b ? 0 : a < b ? -1 : 1\n  };\n\n  while (low <= high && iteration < maxIterations) {\n    // get a new guess\n    middle = Math.floor(0.5 * (high + low));\n    prevValue = orderedItems[Math.max(0, middle - 1)][field];\n    value = orderedItems[middle][field];\n    nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\n\n    if (comparator(value, target) == 0) { // we found the target\n      return middle;\n    }\n    else if (comparator(prevValue, target) < 0 && comparator(value, target) > 0) {  // target is in between of the previous and the current\n      return sidePreference == 'before' ? Math.max(0, middle - 1) : middle;\n    }\n    else if (comparator(value, target) < 0 && comparator(nextValue, target) > 0) { // target is in between of the current and the next\n      return sidePreference == 'before' ? middle : Math.min(orderedItems.length - 1, middle + 1);\n    }\n    else {  // didnt find the target, we need to change our boundaries.\n      if (comparator(value, target) < 0) { // it is too small --> increase low\n        low = middle + 1;\n      }\n      else {  // it is too big --> decrease high\n        high = middle - 1;\n      }\n    }\n    iteration++;\n  }\n\n  // didnt find anything. Return -1.\n  return -1;\n};\n\n/*\n * Easing Functions - inspired from http://gizma.com/easing/\n * only considering the t value for the range [0, 1] => [0, 1]\n * https://gist.github.com/gre/1650294\n */\nexports.easingFunctions = {\n  // no easing, no acceleration\n  linear: function (t) {\n    return t\n  },\n  // accelerating from zero velocity\n  easeInQuad: function (t) {\n    return t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuad: function (t) {\n    return t * (2 - t)\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuad: function (t) {\n    return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n  },\n  // accelerating from zero velocity\n  easeInCubic: function (t) {\n    return t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutCubic: function (t) {\n    return (--t) * t * t + 1\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutCubic: function (t) {\n    return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n  },\n  // accelerating from zero velocity\n  easeInQuart: function (t) {\n    return t * t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuart: function (t) {\n    return 1 - (--t) * t * t * t\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuart: function (t) {\n    return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t\n  },\n  // accelerating from zero velocity\n  easeInQuint: function (t) {\n    return t * t * t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuint: function (t) {\n    return 1 + (--t) * t * t * t * t\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuint: function (t) {\n    return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t\n  }\n};\n\nexports.getScrollBarWidth = function () {\n  var inner = document.createElement('p');\n  inner.style.width = \"100%\";\n  inner.style.height = \"200px\";\n\n  var outer = document.createElement('div');\n  outer.style.position = \"absolute\";\n  outer.style.top = \"0px\";\n  outer.style.left = \"0px\";\n  outer.style.visibility = \"hidden\";\n  outer.style.width = \"200px\";\n  outer.style.height = \"150px\";\n  outer.style.overflow = \"hidden\";\n  outer.appendChild (inner);\n\n  document.body.appendChild (outer);\n  var w1 = inner.offsetWidth;\n  outer.style.overflow = 'scroll';\n  var w2 = inner.offsetWidth;\n  if (w1 == w2) w2 = outer.clientWidth;\n\n  document.body.removeChild (outer);\n\n  return (w1 - w2);\n};\n\nexports.topMost = function (pile, accessors) {\n  let candidate;\n  if (!Array.isArray(accessors)) {\n    accessors = [accessors];\n  }\n  for (const member of pile) {\n    if (member) {\n      candidate = member[accessors[0]];\n      for (let i = 1; i < accessors.length; i++){\n        if (candidate) {\n          candidate = candidate[accessors[i]]\n        } else {\n          continue;\n        }\n      }\n      if (typeof candidate != 'undefined') {\n        break;\n      }\n    }\n  }\n  return candidate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/util.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 2\n// module chunks = 0","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/get-iterator.js\n// module id = 3\n// module chunks = 0","require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/web.dom.iterable.js\n// module id = 4\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.iterator.js\n// module id = 5\n// module chunks = 0","module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_add-to-unscopables.js\n// module id = 6\n// module chunks = 0","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-step.js\n// module id = 7\n// module chunks = 0","module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iterators.js\n// module id = 8\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-iobject.js\n// module id = 9\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iobject.js\n// module id = 10\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_cof.js\n// module id = 11\n// module chunks = 0","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_defined.js\n// module id = 12\n// module chunks = 0","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-define.js\n// module id = 13\n// module chunks = 0","module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_library.js\n// module id = 14\n// module chunks = 0","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_export.js\n// module id = 15\n// module chunks = 0","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_global.js\n// module id = 16\n// module chunks = 0","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_core.js\n// module id = 17\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ctx.js\n// module id = 18\n// module chunks = 0","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_a-function.js\n// module id = 19\n// module chunks = 0","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_hide.js\n// module id = 20\n// module chunks = 0","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dp.js\n// module id = 21\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_an-object.js\n// module id = 22\n// module chunks = 0","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-object.js\n// module id = 23\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ie8-dom-define.js\n// module id = 24\n// module chunks = 0","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_descriptors.js\n// module id = 25\n// module chunks = 0","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_fails.js\n// module id = 26\n// module chunks = 0","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_dom-create.js\n// module id = 27\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-primitive.js\n// module id = 28\n// module chunks = 0","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_property-desc.js\n// module id = 29\n// module chunks = 0","module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_redefine.js\n// module id = 30\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_has.js\n// module id = 31\n// module chunks = 0","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-create.js\n// module id = 32\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-create.js\n// module id = 33\n// module chunks = 0","var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dps.js\n// module id = 34\n// module chunks = 0","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys.js\n// module id = 35\n// module chunks = 0","var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys-internal.js\n// module id = 36\n// module chunks = 0","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-includes.js\n// module id = 37\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-length.js\n// module id = 38\n// module chunks = 0","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-integer.js\n// module id = 39\n// module chunks = 0","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-index.js\n// module id = 40\n// module chunks = 0","var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared-key.js\n// module id = 41\n// module chunks = 0","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared.js\n// module id = 42\n// module chunks = 0","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_uid.js\n// module id = 43\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-bug-keys.js\n// module id = 44\n// module chunks = 0","module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_html.js\n// module id = 45\n// module chunks = 0","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-to-string-tag.js\n// module id = 46\n// module chunks = 0","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks.js\n// module id = 47\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gpo.js\n// module id = 48\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-object.js\n// module id = 49\n// module chunks = 0","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.string.iterator.js\n// module id = 50\n// module chunks = 0","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_string-at.js\n// module id = 51\n// module chunks = 0","var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator.js\n// module id = 52\n// module chunks = 0","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator-method.js\n// module id = 53\n// module chunks = 0","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_classof.js\n// module id = 54\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/create.js\n// module id = 55\n// module chunks = 0","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D){\n  return $Object.create(P, D);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/create.js\n// module id = 56\n// module chunks = 0","var $export = require('./_export')\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: require('./_object-create')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.create.js\n// module id = 57\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 58\n// module chunks = 0","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/keys.js\n// module id = 59\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.keys.js\n// module id = 60\n// module chunks = 0","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-sap.js\n// module id = 61\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/typeof.js\n// module id = 62\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol/iterator.js\n// module id = 63\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/iterator.js\n// module id = 64\n// module chunks = 0","exports.f = require('./_wks');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-ext.js\n// module id = 65\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol.js\n// module id = 66\n// module chunks = 0","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/index.js\n// module id = 67\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.symbol.js\n// module id = 68\n// module chunks = 0","var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_meta.js\n// module id = 69\n// module chunks = 0","var global         = require('./_global')\n  , core           = require('./_core')\n  , LIBRARY        = require('./_library')\n  , wksExt         = require('./_wks-ext')\n  , defineProperty = require('./_object-dp').f;\nmodule.exports = function(name){\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-define.js\n// module id = 70\n// module chunks = 0","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_keyof.js\n// module id = 71\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-keys.js\n// module id = 72\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gops.js\n// module id = 73\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-pie.js\n// module id = 74\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-array.js\n// module id = 75\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn-ext.js\n// module id = 76\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys      = require('./_object-keys-internal')\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\n  return $keys(O, hiddenKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn.js\n// module id = 77\n// module chunks = 0","var pIE            = require('./_object-pie')\n  , createDesc     = require('./_property-desc')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , has            = require('./_has')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , gOPD           = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if(IE8_DOM_DEFINE)try {\n    return gOPD(O, P);\n  } catch(e){ /* empty */ }\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopd.js\n// module id = 78\n// module chunks = 0","require('./_wks-define')('asyncIterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.async-iterator.js\n// module id = 80\n// module chunks = 0","require('./_wks-define')('observable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.observable.js\n// module id = 81\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/json/stringify.js\n// module id = 82\n// module chunks = 0","var core  = require('../../modules/_core')\n  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});\nmodule.exports = function stringify(it){ // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/json/stringify.js\n// module id = 83\n// module chunks = 0","// first check if moment.js is already loaded in the browser window, if so,\n// use this instance. Else, load via commonjs.\nmodule.exports = (typeof window !== 'undefined') && window['moment'] || require('moment');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/moment.js","//! moment.js\n//! version : 2.17.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\nvar hookCallback;\n\nfunction hooks () {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback (callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n}\n\nfunction isObjectEmpty(obj) {\n    var k;\n    for (k in obj) {\n        // even if its not own property I'd still call it non-empty\n        return false;\n    }\n    return true;\n}\n\nfunction isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n}\n\nfunction isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n}\n\nfunction map(arr, fn) {\n    var res = [], i;\n    for (i = 0; i < arr.length; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty           : false,\n        unusedTokens    : [],\n        unusedInput     : [],\n        overflow        : -2,\n        charsLeftOver   : 0,\n        nullInput       : false,\n        invalidMonth    : null,\n        invalidFormat   : false,\n        userInvalidated : false,\n        iso             : false,\n        parsedDateParts : [],\n        meridiem        : null\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this);\n        var len = t.length >>> 0;\n\n        for (var i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nvar some$1 = some;\n\nfunction isValid(m) {\n    if (m._isValid == null) {\n        var flags = getParsingFlags(m);\n        var parsedParts = some$1.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        var isNowValid = !isNaN(m._d.getTime()) &&\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n        if (m._strict) {\n            isNowValid = isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        }\n        else {\n            return isNowValid;\n        }\n    }\n    return m._isValid;\n}\n\nfunction createInvalid (flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    }\n    else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = hooks.momentProperties = [];\n\nfunction copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n        for (i in momentProperties) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\nvar updateInProgress = false;\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment (obj) {\n    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n}\n\nfunction absFloor (number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if ((dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\nfunction warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false &&\n            (typeof console !==  'undefined') && console.warn) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [];\n            var arg;\n            for (var i = 0; i < arguments.length; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (var key in arguments[0]) {\n                        arg += key + ': ' + arguments[0][key] + ', ';\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\nfunction set (config) {\n    var prop, i;\n    for (i in config) {\n        prop = config[i];\n        if (isFunction(prop)) {\n            this[i] = prop;\n        } else {\n            this['_' + i] = prop;\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _ordinalParseLenient.\n    this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig), prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i, res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar keys$1 = keys;\n\nvar defaultCalendar = {\n    sameDay : '[Today at] LT',\n    nextDay : '[Tomorrow at] LT',\n    nextWeek : 'dddd [at] LT',\n    lastDay : '[Yesterday at] LT',\n    lastWeek : '[Last] dddd [at] LT',\n    sameElse : 'L'\n};\n\nfunction calendar (key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nvar defaultLongDateFormat = {\n    LTS  : 'h:mm:ss A',\n    LT   : 'h:mm A',\n    L    : 'MM/DD/YYYY',\n    LL   : 'MMMM D, YYYY',\n    LLL  : 'MMMM D, YYYY h:mm A',\n    LLLL : 'dddd, MMMM D, YYYY h:mm A'\n};\n\nfunction longDateFormat (key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n        return val.slice(1);\n    });\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate () {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d';\nvar defaultOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal (number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future : 'in %s',\n    past   : '%s ago',\n    s  : 'a few seconds',\n    m  : 'a minute',\n    mm : '%d minutes',\n    h  : 'an hour',\n    hh : '%d hours',\n    d  : 'a day',\n    dd : '%d days',\n    M  : 'a month',\n    MM : '%d months',\n    y  : 'a year',\n    yy : '%d years'\n};\n\nfunction relativeTime (number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return (isFunction(output)) ?\n        output(number, withoutSuffix, string, isFuture) :\n        output.replace(/%d/i, number);\n}\n\nfunction pastFuture (diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {};\n\nfunction addUnitAlias (unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n}\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {};\n\nfunction addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n}\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [];\n    for (var u in unitsObj) {\n        units.push({unit: u, priority: priorities[u]});\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nfunction makeGetSet (unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get (mom, unit) {\n    return mom.isValid() ?\n        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n}\n\nfunction set$1 (mom, unit, value) {\n    if (mom.isValid()) {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n    }\n}\n\n// MOMENTS\n\nfunction stringGet (units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\n\nfunction stringSet (units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units);\n        for (var i = 0; i < prioritized.length; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n}\n\nvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\nvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\nvar formatFunctions = {};\n\nvar formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken (token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(func.apply(this, arguments), token);\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens), i, length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '', i;\n        for (i = 0; i < length; i++) {\n            output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar match1         = /\\d/;            //       0 - 9\nvar match2         = /\\d\\d/;          //      00 - 99\nvar match3         = /\\d{3}/;         //     000 - 999\nvar match4         = /\\d{4}/;         //    0000 - 9999\nvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\nvar match1to2      = /\\d\\d?/;         //       0 - 99\nvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\nvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\nvar match1to3      = /\\d{1,3}/;       //       0 - 999\nvar match1to4      = /\\d{1,4}/;       //       0 - 9999\nvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\nvar matchUnsigned  = /\\d+/;           //       0 - inf\nvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\nvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n// any word (or two) characters or numbers including two/three word month in arabic.\n// includes scottish gaelic two word and hyphenated months\nvar matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\nvar regexes = {};\n\nfunction addRegexToken (token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n        return (isStrict && strictRegex) ? strictRegex : regex;\n    };\n}\n\nfunction getParseRegexForToken (token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n        return p1 || p2 || p3 || p4;\n    }));\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nvar tokens = {};\n\nfunction addParseToken (token, callback) {\n    var i, func = callback;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    for (i = 0; i < token.length; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken (token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nvar YEAR = 0;\nvar MONTH = 1;\nvar DATE = 2;\nvar HOUR = 3;\nvar MINUTE = 4;\nvar SECOND = 5;\nvar MILLISECOND = 6;\nvar WEEK = 7;\nvar WEEKDAY = 8;\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nvar indexOf$1 = indexOf;\n\nfunction daysInMonth(year, month) {\n    return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// ALIASES\n\naddUnitAlias('month', 'M');\n\n// PRIORITY\n\naddUnitPriority('month', 8);\n\n// PARSING\n\naddRegexToken('M',    match1to2);\naddRegexToken('MM',   match1to2, match2);\naddRegexToken('MMM',  function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\nvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\nfunction localeMonths (m, format) {\n    if (!m) {\n        return this._months;\n    }\n    return isArray(this._months) ? this._months[m.month()] :\n        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\nfunction localeMonthsShort (m, format) {\n    if (!m) {\n        return this._monthsShort;\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i, ii, mom, llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse (monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth (mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n    return mom;\n}\n\nfunction getSetMonth (value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth () {\n    return daysInMonth(this.year(), this.month());\n}\n\nvar defaultMonthsShortRegex = matchWord;\nfunction monthsShortRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict ?\n            this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n}\n\nvar defaultMonthsRegex = matchWord;\nfunction monthsRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict ?\n            this._monthsStrictRegex : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortPieces.push(this.monthsShort(mom, ''));\n        longPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.monthsShort(mom, ''));\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 12; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n    }\n    for (i = 0; i < 24; i++) {\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY',   4],       0, 'year');\naddFormatToken(0, ['YYYYY',  5],       0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// ALIASES\n\naddUnitAlias('year', 'y');\n\n// PRIORITIES\n\naddUnitPriority('year', 1);\n\n// PARSING\n\naddRegexToken('Y',      matchSigned);\naddRegexToken('YY',     match1to2, match2);\naddRegexToken('YYYY',   match1to4, match4);\naddRegexToken('YYYYY',  match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear () {\n    return isLeapYear(this.year());\n}\n\nfunction createDate (y, m, d, h, M, s, ms) {\n    //can't just apply() to create a date:\n    //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n    var date = new Date(y, m, d, h, M, s, ms);\n\n    //the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n    }\n    return date;\n}\n\nfunction createUTCDate (y) {\n    var date = new Date(Date.UTC.apply(null, arguments));\n\n    //the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n    }\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear, resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek, resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// ALIASES\n\naddUnitAlias('week', 'w');\naddUnitAlias('isoWeek', 'W');\n\n// PRIORITIES\n\naddUnitPriority('week', 5);\naddUnitPriority('isoWeek', 5);\n\n// PARSING\n\naddRegexToken('w',  match1to2);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W',  match1to2);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n});\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek (mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow : 0, // Sunday is the first day of the week.\n    doy : 6  // The week that contains Jan 1st is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek () {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear () {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek (input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek (input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// ALIASES\n\naddUnitAlias('day', 'd');\naddUnitAlias('weekday', 'e');\naddUnitAlias('isoWeekday', 'E');\n\n// PRIORITY\naddUnitPriority('day', 11);\naddUnitPriority('weekday', 11);\naddUnitPriority('isoWeekday', 11);\n\n// PARSING\n\naddRegexToken('d',    match1to2);\naddRegexToken('e',    match1to2);\naddRegexToken('E',    match1to2);\naddRegexToken('dd',   function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd',   function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd',   function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\n\nvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\nfunction localeWeekdays (m, format) {\n    if (!m) {\n        return this._weekdays;\n    }\n    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n}\n\nvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\nfunction localeWeekdaysShort (m) {\n    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n}\n\nvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\nfunction localeWeekdaysMin (m) {\n    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse (weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n        }\n        if (!this._weekdaysParse[i]) {\n            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nvar defaultWeekdaysRegex = matchWord;\nfunction weekdaysRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict ?\n            this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n}\n\nvar defaultWeekdaysShortRegex = matchWord;\nfunction weekdaysShortRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict ?\n            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n}\n\nvar defaultWeekdaysMinRegex = matchWord;\nfunction weekdaysMinRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict ?\n            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n}\n\n\nfunction computeWeekdaysParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom, minp, shortp, longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = this.weekdaysMin(mom, '');\n        shortp = this.weekdaysShort(mom, '');\n        longp = this.weekdays(mom, '');\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 7; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\nfunction meridiem (token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// ALIASES\n\naddUnitAlias('hour', 'h');\n\n// PRIORITY\naddUnitPriority('hour', 13);\n\n// PARSING\n\nfunction matchMeridiem (isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a',  matchMeridiem);\naddRegexToken('A',  matchMeridiem);\naddRegexToken('H',  match1to2);\naddRegexToken('h',  match1to2);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM (input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return ((input + '').toLowerCase().charAt(0) === 'p');\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\nfunction localeMeridiem (hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\n\n// MOMENTS\n\n// Setting the hour should keep the time, because the user explicitly\n// specified which hour he wants. So trying to maintain the same hour (in\n// a new timezone) makes sense. Adding/subtracting hours does not follow\n// this rule.\nvar getSetHour = makeGetSet('Hours', true);\n\n// months\n// week\n// weekdays\n// meridiem\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    ordinalParse: defaultOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse\n};\n\n// internal storage for locale config files\nvar locales = {};\nvar localeFamilies = {};\nvar globalLocale;\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0, j, next, locale, split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return null;\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (!locales[name] && (typeof module !== 'undefined') &&\n            module && module.exports) {\n        try {\n            oldLocale = globalLocale._abbr;\n            require('./locale/' + name);\n            // because defineLocale currently also sets the global locale, we\n            // want to undo that for lazy loaded locales\n            getSetGlobalLocale(oldLocale);\n        } catch (e) { }\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale (key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        }\n        else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale (name, config) {\n    if (config !== null) {\n        var parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple('defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                if (!localeFamilies[config.parentLocale]) {\n                    localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                    name: name,\n                    config: config\n                });\n                return null;\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale, parentConfig = baseConfig;\n        // MERGE\n        if (locales[name] != null) {\n            parentConfig = locales[name]._config;\n        }\n        config = mergeConfigs(parentConfig, config);\n        locale = new Locale(config);\n        locale.parentLocale = locales[name];\n        locales[name] = locale;\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale (key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys$1(locales);\n}\n\nfunction checkOverflow (m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n            -1;\n\n        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\nvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\nvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\nvar isoDates = [\n    ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n    ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n    ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n    ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n    ['YYYY-DDD', /\\d{4}-\\d{3}/],\n    ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n    ['YYYYYYMMDD', /[+-]\\d{10}/],\n    ['YYYYMMDD', /\\d{8}/],\n    // YYYYMM is NOT allowed by the standard\n    ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n    ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n    ['YYYYDDD', /\\d{7}/]\n];\n\n// iso time formats and regexes\nvar isoTimes = [\n    ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n    ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n    ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n    ['HH:mm', /\\d\\d:\\d\\d/],\n    ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n    ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n    ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n    ['HHmm', /\\d\\d\\d\\d/],\n    ['HH', /\\d\\d/]\n];\n\nvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n// date from iso format\nfunction configFromISO(config) {\n    var i, l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime, dateFormat, timeFormat, tzFormat;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n\n        for (i = 0, l = isoDates.length; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from iso format or fallback\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n        hooks.createFromInputFallback(config);\n    }\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +\n    'which is not reliable across all browsers and versions. Non ISO date formats are ' +\n    'discouraged and will be removed in an upcoming major release. Please refer to ' +\n    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray (config) {\n    var i, date, input = [], currentDate, yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (config._dayOfYear > daysInYear(yearToUse)) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from begining of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to begining of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i, parsedInput, tokens, token, skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n        // console.log('token', token, 'parsedInput', parsedInput,\n        //         'regex', getParseRegexForToken(token, config));\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            }\n            else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        }\n        else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\n\nfunction meridiemFixWrap (locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n\n        scoreToBeat,\n        i,\n        currentScore;\n\n    if (config._f.length === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n        currentScore = 0;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (!isValid(tempConfig)) {\n            continue;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (scoreToBeat == null || currentScore < scoreToBeat) {\n            scoreToBeat = currentScore;\n            bestMoment = tempConfig;\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n        return obj && parseInt(obj, 10);\n    });\n\n    configFromArray(config);\n}\n\nfunction createFromConfig (config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig (config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({nullInput: true});\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    }  else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (input === undefined) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (typeof(input) === 'object') {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if ((isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\nvar prototypeMax = deprecate(\n    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +(new Date());\n};\n\nfunction Duration (duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    // representation for dateAddRemove\n    this._milliseconds = +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days +\n        weeks * 7;\n    // It is impossible translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months +\n        quarters * 3 +\n        years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration (obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound (number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// FORMATTING\n\nfunction offset (token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset();\n        var sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z',  matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n        return null;\n    }\n\n    var chunk   = matches[matches.length - 1] || [];\n    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ?\n      0 :\n      parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset (m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset (input, keepLocalTime) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone (input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC (keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal (keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset () {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        }\n        else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset (input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime () {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted () {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {};\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted = this.isValid() &&\n            compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal () {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset () {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc () {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n// and further modified to allow for strings containing both week and day\nvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\nfunction createDuration (input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms : input._milliseconds,\n            d  : input._days,\n            M  : input._months\n        };\n    } else if (isNumber(input)) {\n        duration = {};\n        if (key) {\n            duration[key] = input;\n        } else {\n            duration.milliseconds = input;\n        }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y  : 0,\n            d  : toInt(match[DATE])                         * sign,\n            h  : toInt(match[HOUR])                         * sign,\n            m  : toInt(match[MINUTE])                       * sign,\n            s  : toInt(match[SECOND])                       * sign,\n            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n        };\n    } else if (!!(match = isoRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y : parseIso(match[2], sign),\n            M : parseIso(match[3], sign),\n            w : parseIso(match[4], sign),\n            d : parseIso(match[5], sign),\n            h : parseIso(match[6], sign),\n            m : parseIso(match[7], sign),\n            s : parseIso(match[8], sign)\n        };\n    } else if (duration == null) {// checks for null or undefined\n        duration = {};\n    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\n\nfunction parseIso (inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {milliseconds: 0, months: 0};\n\n    res.months = other.month() - base.month() +\n        (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return {milliseconds: 0, months: 0};\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n            tmp = val; val = period; period = tmp;\n        }\n\n        val = typeof val === 'string' ? +val : val;\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract (mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add      = createAdder(1, 'add');\nvar subtract = createAdder(-1, 'subtract');\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' :\n            diff < -1 ? 'lastWeek' :\n            diff < 0 ? 'lastDay' :\n            diff < 1 ? 'sameDay' :\n            diff < 2 ? 'nextDay' :\n            diff < 7 ? 'nextWeek' : 'sameElse';\n}\n\nfunction calendar$1 (time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n}\n\nfunction clone () {\n    return new Moment(this);\n}\n\nfunction isAfter (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween (from, to, units, inclusivity) {\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n}\n\nfunction isSame (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units || 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n}\n\nfunction isSameOrAfter (input, units) {\n    return this.isSame(input, units) || this.isAfter(input,units);\n}\n\nfunction isSameOrBefore (input, units) {\n    return this.isSame(input, units) || this.isBefore(input,units);\n}\n\nfunction diff (input, units, asFloat) {\n    var that,\n        zoneDelta,\n        delta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    if (units === 'year' || units === 'month' || units === 'quarter') {\n        output = monthDiff(this, that);\n        if (units === 'quarter') {\n            output = output / 3;\n        } else if (units === 'year') {\n            output = output / 12;\n        }\n    } else {\n        delta = this - that;\n        output = units === 'second' ? delta / 1e3 : // 1000\n            units === 'minute' ? delta / 6e4 : // 1000 * 60\n            units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n            units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n            units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n            delta;\n    }\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff (a, b) {\n    // difference in months\n    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2, adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString () {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString () {\n    var m = this.clone().utc();\n    if (0 < m.year() && m.year() <= 9999) {\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            return this.toDate().toISOString();\n        } else {\n            return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    } else {\n        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n    }\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect () {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment';\n    var zone = '';\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    var prefix = '[' + func + '(\"]';\n    var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format (inputString) {\n    if (!inputString) {\n        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow (withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow (withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale (key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData () {\n    return this._locale;\n}\n\nfunction startOf (units) {\n    units = normalizeUnits(units);\n    // the following switch intentionally omits break keywords\n    // to utilize falling through the cases.\n    switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n        case 'date':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n    }\n\n    // weeks are a special case\n    if (units === 'week') {\n        this.weekday(0);\n    }\n    if (units === 'isoWeek') {\n        this.isoWeekday(1);\n    }\n\n    // quarters are also special\n    if (units === 'quarter') {\n        this.month(Math.floor(this.month() / 3) * 3);\n    }\n\n    return this;\n}\n\nfunction endOf (units) {\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond') {\n        return this;\n    }\n\n    // 'date' is an alias for 'day', so it should be considered as such.\n    if (units === 'date') {\n        units = 'day';\n    }\n\n    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n}\n\nfunction valueOf () {\n    return this._d.valueOf() - ((this._offset || 0) * 60000);\n}\n\nfunction unix () {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate () {\n    return new Date(this.valueOf());\n}\n\nfunction toArray () {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n}\n\nfunction toObject () {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds()\n    };\n}\n\nfunction toJSON () {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$1 () {\n    return isValid(this);\n}\n\nfunction parsingFlags () {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt () {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict\n    };\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken (token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg',     'weekYear');\naddWeekYearFormatToken('ggggg',    'weekYear');\naddWeekYearFormatToken('GGGG',  'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\naddUnitAlias('weekYear', 'gg');\naddUnitAlias('isoWeekYear', 'GG');\n\n// PRIORITY\n\naddUnitPriority('weekYear', 1);\naddUnitPriority('isoWeekYear', 1);\n\n\n// PARSING\n\naddRegexToken('G',      matchSigned);\naddRegexToken('g',      matchSigned);\naddRegexToken('GG',     match1to2, match2);\naddRegexToken('gg',     match1to2, match2);\naddRegexToken('GGGG',   match1to4, match4);\naddRegexToken('gggg',   match1to4, match4);\naddRegexToken('GGGGG',  match1to6, match6);\naddRegexToken('ggggg',  match1to6, match6);\n\naddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n});\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy);\n}\n\nfunction getSetISOWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n}\n\nfunction getISOWeeksInYear () {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getWeeksInYear () {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// ALIASES\n\naddUnitAlias('quarter', 'Q');\n\n// PRIORITY\n\naddUnitPriority('quarter', 7);\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter (input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// ALIASES\n\naddUnitAlias('date', 'D');\n\n// PRIOROITY\naddUnitPriority('date', 9);\n\n// PARSING\n\naddRegexToken('D',  match1to2);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0], 10);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// ALIASES\n\naddUnitAlias('dayOfYear', 'DDD');\n\n// PRIORITY\naddUnitPriority('dayOfYear', 4);\n\n// PARSING\n\naddRegexToken('DDD',  match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear (input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// ALIASES\n\naddUnitAlias('minute', 'm');\n\n// PRIORITY\n\naddUnitPriority('minute', 14);\n\n// PARSING\n\naddRegexToken('m',  match1to2);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// ALIASES\n\naddUnitAlias('second', 's');\n\n// PRIORITY\n\naddUnitPriority('second', 15);\n\n// PARSING\n\naddRegexToken('s',  match1to2);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n\n// ALIASES\n\naddUnitAlias('millisecond', 'ms');\n\n// PRIORITY\n\naddUnitPriority('millisecond', 16);\n\n// PARSING\n\naddRegexToken('S',    match1to3, match1);\naddRegexToken('SS',   match1to3, match2);\naddRegexToken('SSS',  match1to3, match3);\n\nvar token;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n// MOMENTS\n\nvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z',  0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr () {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName () {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add               = add;\nproto.calendar          = calendar$1;\nproto.clone             = clone;\nproto.diff              = diff;\nproto.endOf             = endOf;\nproto.format            = format;\nproto.from              = from;\nproto.fromNow           = fromNow;\nproto.to                = to;\nproto.toNow             = toNow;\nproto.get               = stringGet;\nproto.invalidAt         = invalidAt;\nproto.isAfter           = isAfter;\nproto.isBefore          = isBefore;\nproto.isBetween         = isBetween;\nproto.isSame            = isSame;\nproto.isSameOrAfter     = isSameOrAfter;\nproto.isSameOrBefore    = isSameOrBefore;\nproto.isValid           = isValid$1;\nproto.lang              = lang;\nproto.locale            = locale;\nproto.localeData        = localeData;\nproto.max               = prototypeMax;\nproto.min               = prototypeMin;\nproto.parsingFlags      = parsingFlags;\nproto.set               = stringSet;\nproto.startOf           = startOf;\nproto.subtract          = subtract;\nproto.toArray           = toArray;\nproto.toObject          = toObject;\nproto.toDate            = toDate;\nproto.toISOString       = toISOString;\nproto.inspect           = inspect;\nproto.toJSON            = toJSON;\nproto.toString          = toString;\nproto.unix              = unix;\nproto.valueOf           = valueOf;\nproto.creationData      = creationData;\n\n// Year\nproto.year       = getSetYear;\nproto.isLeapYear = getIsLeapYear;\n\n// Week Year\nproto.weekYear    = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\n\n// Quarter\nproto.quarter = proto.quarters = getSetQuarter;\n\n// Month\nproto.month       = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\n\n// Week\nproto.week           = proto.weeks        = getSetWeek;\nproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\nproto.weeksInYear    = getWeeksInYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\n\n// Day\nproto.date       = getSetDayOfMonth;\nproto.day        = proto.days             = getSetDayOfWeek;\nproto.weekday    = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear  = getSetDayOfYear;\n\n// Hour\nproto.hour = proto.hours = getSetHour;\n\n// Minute\nproto.minute = proto.minutes = getSetMinute;\n\n// Second\nproto.second = proto.seconds = getSetSecond;\n\n// Millisecond\nproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n// Offset\nproto.utcOffset            = getSetOffset;\nproto.utc                  = setOffsetToUTC;\nproto.local                = setOffsetToLocal;\nproto.parseZone            = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST                = isDaylightSavingTime;\nproto.isLocal              = isLocal;\nproto.isUtcOffset          = isUtcOffset;\nproto.isUtc                = isUtc;\nproto.isUTC                = isUtc;\n\n// Timezone\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\n\n// Deprecations\nproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\nproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\nproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\nproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\nproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\nfunction createUnix (input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone () {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat (string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar        = calendar;\nproto$1.longDateFormat  = longDateFormat;\nproto$1.invalidDate     = invalidDate;\nproto$1.ordinal         = ordinal;\nproto$1.preparse        = preParsePostFormat;\nproto$1.postformat      = preParsePostFormat;\nproto$1.relativeTime    = relativeTime;\nproto$1.pastFuture      = pastFuture;\nproto$1.set             = set;\n\n// Month\nproto$1.months            =        localeMonths;\nproto$1.monthsShort       =        localeMonthsShort;\nproto$1.monthsParse       =        localeMonthsParse;\nproto$1.monthsRegex       = monthsRegex;\nproto$1.monthsShortRegex  = monthsShortRegex;\n\n// Week\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n// Day of Week\nproto$1.weekdays       =        localeWeekdays;\nproto$1.weekdaysMin    =        localeWeekdaysMin;\nproto$1.weekdaysShort  =        localeWeekdaysShort;\nproto$1.weekdaysParse  =        localeWeekdaysParse;\n\nproto$1.weekdaysRegex       =        weekdaysRegex;\nproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\nproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n// Hours\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1 (format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl (format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl (localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths (format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort (format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (toInt(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    }\n});\n\n// Side effect imports\nhooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\nhooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\nvar mathAbs = Math.abs;\n\nfunction abs () {\n    var data           = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days         = mathAbs(this._days);\n    this._months       = mathAbs(this._months);\n\n    data.milliseconds  = mathAbs(data.milliseconds);\n    data.seconds       = mathAbs(data.seconds);\n    data.minutes       = mathAbs(data.minutes);\n    data.hours         = mathAbs(data.hours);\n    data.months        = mathAbs(data.months);\n    data.years         = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1 (duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days         += direction * other._days;\n    duration._months       += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1 (input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1 (input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil (number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble () {\n    var milliseconds = this._milliseconds;\n    var days         = this._days;\n    var months       = this._months;\n    var data         = this._data;\n    var seconds, minutes, hours, years, monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0))) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds           = absFloor(milliseconds / 1000);\n    data.seconds      = seconds % 60;\n\n    minutes           = absFloor(seconds / 60);\n    data.minutes      = minutes % 60;\n\n    hours             = absFloor(minutes / 60);\n    data.hours        = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days   = days;\n    data.months = months;\n    data.years  = years;\n\n    return this;\n}\n\nfunction daysToMonths (days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n}\n\nfunction monthsToDays (months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n}\n\nfunction as (units) {\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'year') {\n        days   = this._days   + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        return units === 'month' ? months : months / 12;\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week'   : return days / 7     + milliseconds / 6048e5;\n            case 'day'    : return days         + milliseconds / 864e5;\n            case 'hour'   : return days * 24    + milliseconds / 36e5;\n            case 'minute' : return days * 1440  + milliseconds / 6e4;\n            case 'second' : return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n            default: throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\n// TODO: Use this.as('ms')?\nfunction valueOf$1 () {\n    return (\n        this._milliseconds +\n        this._days * 864e5 +\n        (this._months % 12) * 2592e6 +\n        toInt(this._months / 12) * 31536e6\n    );\n}\n\nfunction makeAs (alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms');\nvar asSeconds      = makeAs('s');\nvar asMinutes      = makeAs('m');\nvar asHours        = makeAs('h');\nvar asDays         = makeAs('d');\nvar asWeeks        = makeAs('w');\nvar asMonths       = makeAs('M');\nvar asYears        = makeAs('y');\n\nfunction get$2 (units) {\n    units = normalizeUnits(units);\n    return this[units + 's']();\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this._data[name];\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds');\nvar seconds      = makeGetter('seconds');\nvar minutes      = makeGetter('minutes');\nvar hours        = makeGetter('hours');\nvar days         = makeGetter('days');\nvar months       = makeGetter('months');\nvar years        = makeGetter('years');\n\nfunction weeks () {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round;\nvar thresholds = {\n    s: 45,  // seconds to minute\n    m: 45,  // minutes to hour\n    h: 22,  // hours to day\n    d: 26,  // days to month\n    M: 11   // months to year\n};\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds  = round(duration.as('s'));\n    var minutes  = round(duration.as('m'));\n    var hours    = round(duration.as('h'));\n    var days     = round(duration.as('d'));\n    var months   = round(duration.as('M'));\n    var years    = round(duration.as('y'));\n\n    var a = seconds < thresholds.s && ['s', seconds]  ||\n            minutes <= 1           && ['m']           ||\n            minutes < thresholds.m && ['mm', minutes] ||\n            hours   <= 1           && ['h']           ||\n            hours   < thresholds.h && ['hh', hours]   ||\n            days    <= 1           && ['d']           ||\n            days    < thresholds.d && ['dd', days]    ||\n            months  <= 1           && ['M']           ||\n            months  < thresholds.M && ['MM', months]  ||\n            years   <= 1           && ['y']           || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding (roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof(roundingFunction) === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold (threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    return true;\n}\n\nfunction humanize (withSuffix) {\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days         = abs$1(this._days);\n    var months       = abs$1(this._months);\n    var minutes, hours, years;\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes           = absFloor(seconds / 60);\n    hours             = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years  = absFloor(months / 12);\n    months %= 12;\n\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds;\n    var total = this.asSeconds();\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    return (total < 0 ? '-' : '') +\n        'P' +\n        (Y ? Y + 'Y' : '') +\n        (M ? M + 'M' : '') +\n        (D ? D + 'D' : '') +\n        ((h || m || s) ? 'T' : '') +\n        (h ? h + 'H' : '') +\n        (m ? m + 'M' : '') +\n        (s ? s + 'S' : '');\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.abs            = abs;\nproto$2.add            = add$1;\nproto$2.subtract       = subtract$1;\nproto$2.as             = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds      = asSeconds;\nproto$2.asMinutes      = asMinutes;\nproto$2.asHours        = asHours;\nproto$2.asDays         = asDays;\nproto$2.asWeeks        = asWeeks;\nproto$2.asMonths       = asMonths;\nproto$2.asYears        = asYears;\nproto$2.valueOf        = valueOf$1;\nproto$2._bubble        = bubble;\nproto$2.get            = get$2;\nproto$2.milliseconds   = milliseconds;\nproto$2.seconds        = seconds;\nproto$2.minutes        = minutes;\nproto$2.hours          = hours;\nproto$2.days           = days;\nproto$2.weeks          = weeks;\nproto$2.months         = months;\nproto$2.years          = years;\nproto$2.humanize       = humanize;\nproto$2.toISOString    = toISOString$1;\nproto$2.toString       = toISOString$1;\nproto$2.toJSON         = toISOString$1;\nproto$2.locale         = locale;\nproto$2.localeData     = localeData;\n\n// Deprecations\nproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\nproto$2.lang = lang;\n\n// Side effect imports\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n// Side effect imports\n\n\nhooks.version = '2.17.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn                    = proto;\nhooks.min                   = min;\nhooks.max                   = max;\nhooks.now                   = now;\nhooks.utc                   = createUTC;\nhooks.unix                  = createUnix;\nhooks.months                = listMonths;\nhooks.isDate                = isDate;\nhooks.locale                = getSetGlobalLocale;\nhooks.invalid               = createInvalid;\nhooks.duration              = createDuration;\nhooks.isMoment              = isMoment;\nhooks.weekdays              = listWeekdays;\nhooks.parseZone             = createInZone;\nhooks.localeData            = getLocale;\nhooks.isDuration            = isDuration;\nhooks.monthsShort           = listMonthsShort;\nhooks.weekdaysMin           = listWeekdaysMin;\nhooks.defineLocale          = defineLocale;\nhooks.updateLocale          = updateLocale;\nhooks.locales               = listLocales;\nhooks.weekdaysShort         = listWeekdaysShort;\nhooks.normalizeUnits        = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat        = getCalendarFormat;\nhooks.prototype             = proto;\n\nreturn hooks;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/moment.js\n// module id = 85\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 86\n// module chunks = 0","function webpackContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackContext.keys = function() { return []; };\nwebpackContext.resolve = webpackContext;\nmodule.exports = webpackContext;\nwebpackContext.id = 87;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/locale ^\\.\\/$^$\n// module id = 87\n// module chunks = 0","var _rng;\n\nvar globalVar = typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : null;\n\nif (globalVar && globalVar.crypto && crypto.getRandomValues) {\n  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n  // Moderately fast, high quality\n  var _rnds8 = new Uint8Array(16);\n  _rng = function whatwgRNG() {\n    crypto.getRandomValues(_rnds8);\n    return _rnds8;\n  };\n}\n\nif (!_rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var _rnds = new Array(16);\n  _rng = function () {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return _rnds;\n  };\n}\n\n//     uuid.js\n//\n//     Copyright (c) 2010-2012 Robert Kieffer\n//     MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator.  We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\n\n//var _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n  _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n  _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n  var i = (buf && offset) || 0, ii = 0;\n\n  buf = buf || [];\n  s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) {\n    if (ii < 16) { // Don't overflow!\n      buf[i + ii++] = _hexToByte[oct];\n    }\n  });\n\n  // Zero out remaining bytes if string was short\n  while (ii < 16) {\n    buf[i + ii++] = 0;\n  }\n\n  return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n  var i = offset || 0, bth = _byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs) / 10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; n++) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n  // Deprecated - 'format' argument, as supported in v1.2\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || _rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ii++) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/uuid.js","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Graph3d\nexports.Graph3d = require('./lib/graph3d/Graph3d');\nexports.graph3d = {\n  Camera: require('./lib/graph3d/Camera'),\n  Filter: require('./lib/graph3d/Filter'),\n  Point2d: require('./lib/graph3d/Point2d'),\n  Point3d: require('./lib/graph3d/Point3d'),\n  Slider: require('./lib/graph3d/Slider'),\n  StepNumber: require('./lib/graph3d/StepNumber')\n};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n\n// WEBPACK FOOTER //\n// ./index-graph3d.js","// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n * @param JSONcontainer\n * @private\n */\nexports.prepareElements = function(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (JSONcontainer.hasOwnProperty(elementType)) {\n      JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n      JSONcontainer[elementType].used = [];\n    }\n  }\n};\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param JSONcontainer\n * @private\n */\nexports.cleanupElements = function(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (JSONcontainer.hasOwnProperty(elementType)) {\n      if (JSONcontainer[elementType].redundant) {\n        for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) {\n          JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]);\n        }\n        JSONcontainer[elementType].redundant = [];\n      }\n    }\n  }\n};\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n * @param JSONcontainer\n */\nexports.resetElements = function(JSONcontainer) {\n  exports.prepareElements(JSONcontainer);\n  exports.cleanupElements(JSONcontainer);\n  exports.prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param elementType\n * @param JSONcontainer\n * @param svgContainer\n * @returns {*}\n * @private\n */\nexports.getSVGElement = function (elementType, JSONcontainer, svgContainer) {\n  var element;\n  // allocate SVG element, if it doesnt yet exist, create one.\n  if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    }\n    else {\n      // create a new element and add it to the SVG\n      element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n      svgContainer.appendChild(element);\n    }\n  }\n  else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n    JSONcontainer[elementType] = {used: [], redundant: []};\n    svgContainer.appendChild(element);\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n};\n\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param elementType\n * @param JSONcontainer\n * @param DOMContainer\n * @returns {*}\n * @private\n */\nexports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) {\n  var element;\n  // allocate DOM element, if it doesnt yet exist, create one.\n  if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    }\n    else {\n      // create a new element and add it to the SVG\n      element = document.createElement(elementType);\n      if (insertBefore !== undefined) {\n        DOMContainer.insertBefore(element, insertBefore);\n      }\n      else {\n        DOMContainer.appendChild(element);\n      }\n    }\n  }\n  else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElement(elementType);\n    JSONcontainer[elementType] = {used: [], redundant: []};\n    if (insertBefore !== undefined) {\n      DOMContainer.insertBefore(element, insertBefore);\n    }\n    else {\n      DOMContainer.appendChild(element);\n    }\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n};\n\n\n\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param x\n * @param y\n * @param groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param JSONcontainer\n * @param svgContainer\n * @param labelObj\n * @returns {*}\n */\nexports.drawPoint = function(x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) {\n  var point;\n  if (groupTemplate.style == 'circle') {\n    point = exports.getSVGElement('circle', JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"cx\", x);\n    point.setAttributeNS(null, \"cy\", y);\n    point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n  }\n  else {\n    point = exports.getSVGElement('rect', JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"width\", groupTemplate.size);\n    point.setAttributeNS(null, \"height\", groupTemplate.size);\n  }\n\n  if (groupTemplate.styles !== undefined) {\n    point.setAttributeNS(null, \"style\", groupTemplate.styles);\n  }\n  point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n  //handle label\n\n\n  if (labelObj) {\n    var label = exports.getSVGElement('text', JSONcontainer, svgContainer);\n    if (labelObj.xOffset) {\n      x = x + labelObj.xOffset;\n    }\n\n    if (labelObj.yOffset) {\n      y = y + labelObj.yOffset;\n    }\n    if (labelObj.content) {\n      label.textContent = labelObj.content;\n    }\n\n    if (labelObj.className) {\n      label.setAttributeNS(null, \"class\", labelObj.className  + \" vis-label\");\n    }\n    label.setAttributeNS(null, \"x\", x);\n    label.setAttributeNS(null, \"y\", y);\n  }\n\n  return point;\n};\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param x\n * @param y\n * @param className\n */\nexports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer, style) {\n  if (height != 0) {\n    if (height < 0) {\n      height *= -1;\n      y -= height;\n    }\n    var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer);\n    rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n    rect.setAttributeNS(null, \"y\", y);\n    rect.setAttributeNS(null, \"width\", width);\n    rect.setAttributeNS(null, \"height\", height);\n    rect.setAttributeNS(null, \"class\", className);\n    if (style) {\n      rect.setAttributeNS(null, \"style\", style);\n    }\n  }\n};\n\n\n// WEBPACK FOOTER //\n// ./lib/DOMutil.js","var util = require('./util');\nvar Queue = require('./Queue');\n\n/**\n * DataSet\n *\n * Usage:\n *     var dataSet = new DataSet({\n *         fieldId: '_id',\n *         type: {\n *             // ...\n *         }\n *     });\n *\n *     dataSet.add(item);\n *     dataSet.add(data);\n *     dataSet.update(item);\n *     dataSet.update(data);\n *     dataSet.remove(id);\n *     dataSet.remove(ids);\n *     var data = dataSet.get();\n *     var data = dataSet.get(id);\n *     var data = dataSet.get(ids);\n *     var data = dataSet.get(ids, options, data);\n *     dataSet.clear();\n *\n * A data set can:\n * - add/remove/update data\n * - gives triggers upon changes in the data\n * - can  import/export data in various data formats\n *\n * @param {Array} [data]    Optional array with initial data\n * @param {Object} [options]   Available options:\n *                             {String} fieldId Field name of the id in the\n *                                              items, 'id' by default.\n *                             {Object.<String, String} type\n *                                              A map with field names as key,\n *                                              and the field type as value.\n *                             {Object} queue   Queue changes to the DataSet,\n *                                              flush them all at once.\n *                                              Queue options:\n *                                              - {number} delay  Delay in ms, null by default\n *                                              - {number} max    Maximum number of entries in the queue, Infinity by default\n * @constructor DataSet\n */\n// TODO: add a DataSet constructor DataSet(data, options)\nfunction DataSet (data, options) {\n  // correctly read optional arguments\n  if (data && !Array.isArray(data)) {\n    options = data;\n    data = null;\n  }\n\n  this._options = options || {};\n  this._data = {};                                 // map with data indexed by id\n  this.length = 0;                                 // number of items in the DataSet\n  this._fieldId = this._options.fieldId || 'id';   // name of the field containing id\n  this._type = {};                                 // internal field types (NOTE: this can differ from this._options.type)\n\n  // all variants of a Date are internally stored as Date, so we can convert\n  // from everything to everything (also from ISODate to Number for example)\n  if (this._options.type) {\n    var fields = Object.keys(this._options.type);\n    for (var i = 0, len = fields.length; i < len; i++) {\n      var field = fields[i];\n      var value = this._options.type[field];\n      if (value == 'Date' || value == 'ISODate' || value == 'ASPDate') {\n        this._type[field] = 'Date';\n      }\n      else {\n        this._type[field] = value;\n      }\n    }\n  }\n\n  // TODO: deprecated since version 1.1.1 (or 2.0.0?)\n  if (this._options.convert) {\n    throw new Error('Option \"convert\" is deprecated. Use \"type\" instead.');\n  }\n\n  this._subscribers = {};  // event subscribers\n\n  // add initial data when provided\n  if (data) {\n    this.add(data);\n  }\n\n  this.setOptions(options);\n}\n\n/**\n * @param {Object} [options]   Available options:\n *                             {Object} queue   Queue changes to the DataSet,\n *                                              flush them all at once.\n *                                              Queue options:\n *                                              - {number} delay  Delay in ms, null by default\n *                                              - {number} max    Maximum number of entries in the queue, Infinity by default\n * @param options\n */\nDataSet.prototype.setOptions = function(options) {\n  if (options && options.queue !== undefined) {\n    if (options.queue === false) {\n      // delete queue if loaded\n      if (this._queue) {\n        this._queue.destroy();\n        delete this._queue;\n      }\n    }\n    else {\n      // create queue and update its options\n      if (!this._queue) {\n        this._queue = Queue.extend(this, {\n          replace: ['add', 'update', 'remove']\n        });\n      }\n\n      if (typeof options.queue === 'object') {\n        this._queue.setOptions(options.queue);\n      }\n    }\n  }\n};\n\n/**\n * Subscribe to an event, add an event listener\n * @param {String} event        Event name. Available events: 'put', 'update',\n *                              'remove'\n * @param {function} callback   Callback method. Called with three parameters:\n *                                  {String} event\n *                                  {Object | null} params\n *                                  {String | Number} senderId\n */\nDataSet.prototype.on = function(event, callback) {\n  var subscribers = this._subscribers[event];\n  if (!subscribers) {\n    subscribers = [];\n    this._subscribers[event] = subscribers;\n  }\n\n  subscribers.push({\n    callback: callback\n  });\n};\n\n// TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0)\nDataSet.prototype.subscribe = function () {\n  throw new Error('DataSet.subscribe is deprecated. Use DataSet.on instead.');\n};\n\n/**\n * Unsubscribe from an event, remove an event listener\n * @param {String} event\n * @param {function} callback\n */\nDataSet.prototype.off = function(event, callback) {\n  var subscribers = this._subscribers[event];\n  if (subscribers) {\n    this._subscribers[event] = subscribers.filter(listener => listener.callback != callback);\n  }\n};\n\n// TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0)\nDataSet.prototype.unsubscribe = function () {\n  throw new Error('DataSet.unsubscribe is deprecated. Use DataSet.off instead.');\n};\n\n/**\n * Trigger an event\n * @param {String} event\n * @param {Object | null} params\n * @param {String} [senderId]       Optional id of the sender.\n * @private\n */\nDataSet.prototype._trigger = function (event, params, senderId) {\n  if (event == '*') {\n    throw new Error('Cannot trigger event *');\n  }\n\n  var subscribers = [];\n  if (event in this._subscribers) {\n    subscribers = subscribers.concat(this._subscribers[event]);\n  }\n  if ('*' in this._subscribers) {\n    subscribers = subscribers.concat(this._subscribers['*']);\n  }\n\n  for (var i = 0, len = subscribers.length; i < len; i++) {\n    var subscriber = subscribers[i];\n    if (subscriber.callback) {\n      subscriber.callback(event, params, senderId || null);\n    }\n  }\n};\n\n/**\n * Add data.\n * Adding an item will fail when there already is an item with the same id.\n * @param {Object | Array} data\n * @param {String} [senderId] Optional sender id\n * @return {Array} addedIds      Array with the ids of the added items\n */\nDataSet.prototype.add = function (data, senderId) {\n  var addedIds = [],\n      id,\n      me = this;\n\n  if (Array.isArray(data)) {\n    // Array\n    for (var i = 0, len = data.length; i < len; i++) {\n      id = me._addItem(data[i]);\n      addedIds.push(id);\n    }\n  }\n  else if (data instanceof Object) {\n    // Single item\n    id = me._addItem(data);\n    addedIds.push(id);\n  }\n  else {\n    throw new Error('Unknown dataType');\n  }\n\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds}, senderId);\n  }\n\n  return addedIds;\n};\n\n/**\n * Update existing items. When an item does not exist, it will be created\n * @param {Object | Array} data\n * @param {String} [senderId] Optional sender id\n * @return {Array} updatedIds     The ids of the added or updated items\n */\nDataSet.prototype.update = function (data, senderId) {\n  var addedIds = [];\n  var updatedIds = [];\n  var oldData = [];\n  var updatedData = [];\n  var me = this;\n  var fieldId = me._fieldId;\n\n  var addOrUpdate = function (item) {\n    var id = item[fieldId];\n    if (me._data[id]) {\n      var oldItem = util.extend({}, me._data[id]);\n      // update item\n      id = me._updateItem(item);\n      updatedIds.push(id);\n      updatedData.push(item);\n      oldData.push(oldItem);\n    }\n    else {\n      // add new item\n      id = me._addItem(item);\n      addedIds.push(id);\n    }\n  };\n\n  if (Array.isArray(data)) {\n    // Array\n    for (var i = 0, len = data.length; i < len; i++) {\n      if (data[i] instanceof Object){\n        addOrUpdate(data[i]);\n      } else {\n        console.warn('Ignoring input item, which is not an object at index ' + i);\n      }\n    }\n  }\n  else if (data instanceof Object) {\n    // Single item\n    addOrUpdate(data);\n  }\n  else {\n    throw new Error('Unknown dataType');\n  }\n\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds}, senderId);\n  }\n  if (updatedIds.length) {\n    var props = { items: updatedIds, oldData: oldData, data: updatedData };\n    // TODO: remove deprecated property 'data' some day\n    //Object.defineProperty(props, 'data', {\n    //  'get': (function() {\n    //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n    //    return updatedData;\n    //  }).bind(this)\n    //});\n    this._trigger('update', props, senderId);\n  }\n\n  return addedIds.concat(updatedIds);\n};\n\n/**\n * Get a data item or multiple items.\n *\n * Usage:\n *\n *     get()\n *     get(options: Object)\n *\n *     get(id: Number | String)\n *     get(id: Number | String, options: Object)\n *\n *     get(ids: Number[] | String[])\n *     get(ids: Number[] | String[], options: Object)\n *\n * Where:\n *\n * {Number | String} id         The id of an item\n * {Number[] | String{}} ids    An array with ids of items\n * {Object} options             An Object with options. Available options:\n * {String} [returnType]        Type of data to be returned.\n *                              Can be 'Array' (default) or 'Object'.\n * {Object.<String, String>} [type]\n * {String[]} [fields]          field names to be returned\n * {function} [filter]          filter items\n * {String | function} [order]  Order the items by a field name or custom sort function.\n * @throws Error\n */\nDataSet.prototype.get = function (args) {\n  var me = this;\n\n  // parse the arguments\n  var id, ids, options;\n  var firstType = util.getType(arguments[0]);\n  if (firstType == 'String' || firstType == 'Number') {\n    // get(id [, options])\n    id = arguments[0];\n    options = arguments[1];\n  }\n  else if (firstType == 'Array') {\n    // get(ids [, options])\n    ids = arguments[0];\n    options = arguments[1];\n  }\n  else {\n    // get([, options])\n    options = arguments[0];\n  }\n\n  // determine the return type\n  var returnType;\n  if (options && options.returnType) {\n    var allowedValues = ['Array', 'Object'];\n    returnType = allowedValues.indexOf(options.returnType) == -1 ? 'Array' : options.returnType;\n  }\n  else {\n    returnType = 'Array';\n  }\n\n  // build options\n  var type = options && options.type || this._options.type;\n  var filter = options && options.filter;\n  var items = [], item, itemIds, itemId, i, len;\n\n  // convert items\n  if (id != undefined) {\n    // return a single item\n    item = me._getItem(id, type);\n    if (item && filter && !filter(item)) {\n      item = null;\n    }\n  }\n  else if (ids != undefined) {\n    // return a subset of items\n    for (i = 0, len = ids.length; i < len; i++) {\n      item = me._getItem(ids[i], type);\n      if (!filter || filter(item)) {\n        items.push(item);\n      }\n    }\n  }\n  else {\n    // return all items\n    itemIds = Object.keys(this._data);\n    for (i = 0, len = itemIds.length; i < len; i++) {\n      itemId = itemIds[i];\n      item = me._getItem(itemId, type);\n      if (!filter || filter(item)) {\n        items.push(item);\n      }\n    }\n  }\n\n  // order the results\n  if (options && options.order && id == undefined) {\n    this._sort(items, options.order);\n  }\n\n  // filter fields of the items\n  if (options && options.fields) {\n    var fields = options.fields;\n    if (id != undefined) {\n      item = this._filterFields(item, fields);\n    }\n    else {\n      for (i = 0, len = items.length; i < len; i++) {\n        items[i] = this._filterFields(items[i], fields);\n      }\n    }\n  }\n\n  // return the results\n  if (returnType == 'Object') {\n    var result = {},\n        resultant;\n    for (i = 0, len = items.length; i < len; i++) {\n      resultant = items[i];\n      result[resultant.id] = resultant;\n    }\n    return result;\n  }\n  else {\n    if (id != undefined) {\n      // a single item\n      return item;\n    }\n    else {\n      // just return our array\n      return items;\n    }\n  }\n};\n\n/**\n * Get ids of all items or from a filtered set of items.\n * @param {Object} [options]    An Object with options. Available options:\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Array} ids\n */\nDataSet.prototype.getIds = function (options) {\n  var data = this._data,\n      filter = options && options.filter,\n      order = options && options.order,\n      type = options && options.type || this._options.type,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      id,\n      item,\n      items,\n      ids = [];\n\n  if (filter) {\n    // get filtered items\n    if (order) {\n      // create ordered list\n      items = [];\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = this._getItem(id, type);\n        if (filter(item)) {\n          items.push(item);\n        }\n      }\n\n      this._sort(items, order);\n\n      for (i = 0, len = items.length; i < len; i++) {\n        ids.push(items[i][this._fieldId]);\n      }\n    }\n    else {\n      // create unordered list\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = this._getItem(id, type);\n        if (filter(item)) {\n          ids.push(item[this._fieldId]);\n        }\n      }\n    }\n  }\n  else {\n    // get all items\n    if (order) {\n      // create an ordered list\n      items = [];\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        items.push(data[id]);\n      }\n\n      this._sort(items, order);\n\n      for (i = 0, len = items.length; i < len; i++) {\n        ids.push(items[i][this._fieldId]);\n      }\n    }\n    else {\n      // create unordered list\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = data[id];\n        ids.push(item[this._fieldId]);\n      }\n    }\n  }\n\n  return ids;\n};\n\n/**\n * Returns the DataSet itself. Is overwritten for example by the DataView,\n * which returns the DataSet it is connected to instead.\n */\nDataSet.prototype.getDataSet = function () {\n  return this;\n};\n\n/**\n * Execute a callback function for every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n */\nDataSet.prototype.forEach = function (callback, options) {\n  var filter = options && options.filter,\n      type = options && options.type || this._options.type,\n      data = this._data,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      item,\n      id;\n\n  if (options && options.order) {\n    // execute forEach on ordered list\n    var items = this.get(options);\n\n    for (i = 0, len = items.length; i < len; i++) {\n      item = items[i];\n      id = item[this._fieldId];\n      callback(item, id);\n    }\n  }\n  else {\n    // unordered\n    for (i = 0, len = itemIds.length; i < len; i++) {\n      id = itemIds[i];\n      item = this._getItem(id, type);\n      if (!filter || filter(item)) {\n        callback(item, id);\n      }\n    }\n  }\n};\n\n/**\n * Map every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Object[]} mappedItems\n */\nDataSet.prototype.map = function (callback, options) {\n  var filter = options && options.filter,\n      type = options && options.type || this._options.type,\n      mappedItems = [],\n      data = this._data,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      id,\n      item;\n\n  // convert and filter items\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    id = itemIds[i];\n    item = this._getItem(id, type);\n    if (!filter || filter(item)) {\n      mappedItems.push(callback(item, id));\n    }\n  }\n\n  // order items\n  if (options && options.order) {\n    this._sort(mappedItems, options.order);\n  }\n\n  return mappedItems;\n};\n\n/**\n * Filter the fields of an item\n * @param {Object | null} item\n * @param {String[]} fields     Field names\n * @return {Object | null} filteredItem or null if no item is provided\n * @private\n */\nDataSet.prototype._filterFields = function (item, fields) {\n  if (!item) { // item is null\n    return item;\n  }\n\n  var filteredItem = {},\n      itemFields = Object.keys(item),\n      len = itemFields.length,\n      i,\n      field;\n\n  if(Array.isArray(fields)){\n    for (i = 0; i < len; i++) {\n      field = itemFields[i];\n      if (fields.indexOf(field) != -1) {\n        filteredItem[field] = item[field];\n      }\n    }\n  }else{\n    for (i = 0; i < len; i++) {\n      field = itemFields[i];\n      if (fields.hasOwnProperty(field)) {\n        filteredItem[fields[field]] = item[field];\n      }\n    }\n  }\n\n  return filteredItem;\n};\n\n/**\n * Sort the provided array with items\n * @param {Object[]} items\n * @param {String | function} order      A field name or custom sort function.\n * @private\n */\nDataSet.prototype._sort = function (items, order) {\n  if (util.isString(order)) {\n    // order by provided field name\n    var name = order; // field name\n    items.sort(function (a, b) {\n      var av = a[name];\n      var bv = b[name];\n      return (av > bv) ? 1 : ((av < bv) ? -1 : 0);\n    });\n  }\n  else if (typeof order === 'function') {\n    // order by sort function\n    items.sort(order);\n  }\n  // TODO: extend order by an Object {field:String, direction:String}\n  //       where direction can be 'asc' or 'desc'\n  else {\n    throw new TypeError('Order must be a function or a string');\n  }\n};\n\n/**\n * Remove an object by pointer or by id\n * @param {String | Number | Object | Array} id Object or id, or an array with\n *                                              objects or ids to be removed\n * @param {String} [senderId] Optional sender id\n * @return {Array} removedIds\n */\nDataSet.prototype.remove = function (id, senderId) {\n  var removedIds = [],\n      removedItems = [],\n      ids = [],\n      i, len, itemId, item;\n\n  // force everything to be an array for simplicity\n  ids = Array.isArray(id) ? id : [id];\n\n  for (i = 0, len = ids.length; i < len; i++) {\n    item = this._remove(ids[i]);\n    if (item) {\n      itemId = item[this._fieldId];\n      if (itemId != undefined) {\n        removedIds.push(itemId);\n        removedItems.push(item);\n      }\n    }\n  }\n\n  if (removedIds.length) {\n    this._trigger('remove', {items: removedIds, oldData: removedItems}, senderId);\n  }\n\n  return removedIds;\n};\n\n/**\n * Remove an item by its id\n * @param {Number | String | Object} id   id or item\n * @returns {Number | String | null} id\n * @private\n */\nDataSet.prototype._remove = function (id) {\n  var item,\n      ident;\n\n  // confirm the id to use based on the args type\n  if (util.isNumber(id) || util.isString(id)) {\n    ident = id;\n  }\n  else if (id instanceof Object) {\n    ident = id[this._fieldId]; // look for the identifier field using _fieldId\n  }\n\n  // do the remove if the item is found\n  if (ident !== undefined && this._data[ident]) {\n    item = this._data[ident];\n    delete this._data[ident];\n    this.length--;\n    return item;\n  }\n  return null;\n};\n\n/**\n * Clear the data\n * @param {String} [senderId] Optional sender id\n * @return {Array} removedIds    The ids of all removed items\n */\nDataSet.prototype.clear = function (senderId) {\n  var i, len;\n  var ids = Object.keys(this._data);\n  var items = [];\n\n  for (i = 0, len = ids.length; i < len; i++) {\n    items.push(this._data[ids[i]]);\n  }\n\n  this._data = {};\n  this.length = 0;\n\n  this._trigger('remove', {items: ids, oldData: items}, senderId);\n\n  return ids;\n};\n\n/**\n * Find the item with maximum value of a specified field\n * @param {String} field\n * @return {Object | null} item  Item containing max value, or null if no items\n */\nDataSet.prototype.max = function (field) {\n  var data = this._data,\n      itemIds = Object.keys(data),\n      max = null,\n      maxField = null,\n      i,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var itemField = item[field];\n    if (itemField != null && (!max || itemField > maxField)) {\n      max = item;\n      maxField = itemField;\n    }\n  }\n\n  return max;\n};\n\n/**\n * Find the item with minimum value of a specified field\n * @param {String} field\n * @return {Object | null} item  Item containing max value, or null if no items\n */\nDataSet.prototype.min = function (field) {\n  var data = this._data,\n      itemIds = Object.keys(data),\n      min = null,\n      minField = null,\n      i,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var itemField = item[field];\n    if (itemField != null && (!min || itemField < minField)) {\n      min = item;\n      minField = itemField;\n    }\n  }\n\n  return min;\n};\n\n/**\n * Find all distinct values of a specified field\n * @param {String} field\n * @return {Array} values  Array containing all distinct values. If data items\n *                         do not contain the specified field are ignored.\n *                         The returned array is unordered.\n */\nDataSet.prototype.distinct = function (field) {\n  var data = this._data;\n  var itemIds = Object.keys(data);\n  var values = [];\n  var fieldType = this._options.type && this._options.type[field] || null;\n  var count = 0;\n  var i,\n      j,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var value = item[field];\n    var exists = false;\n    for (j = 0; j < count; j++) {\n      if (values[j] == value) {\n        exists = true;\n        break;\n      }\n    }\n    if (!exists && (value !== undefined)) {\n      values[count] = value;\n      count++;\n    }\n  }\n\n  if (fieldType) {\n    for (i = 0, len = values.length; i < len; i++) {\n      values[i] = util.convert(values[i], fieldType);\n    }\n  }\n\n  return values;\n};\n\n/**\n * Add a single item. Will fail when an item with the same id already exists.\n * @param {Object} item\n * @return {String} id\n * @private\n */\nDataSet.prototype._addItem = function (item) {\n  var id = item[this._fieldId];\n\n  if (id != undefined) {\n    // check whether this id is already taken\n    if (this._data[id]) {\n      // item already exists\n      throw new Error('Cannot add item: item with id ' + id + ' already exists');\n    }\n  }\n  else {\n    // generate an id\n    id = util.randomUUID();\n    item[this._fieldId] = id;\n  }\n\n  var d = {},\n      fields = Object.keys(item),\n      i,\n      len;\n  for (i = 0, len = fields.length; i < len; i++) {\n    var field = fields[i];\n    var fieldType = this._type[field];  // type may be undefined\n    d[field] = util.convert(item[field], fieldType);\n  }\n  this._data[id] = d;\n  this.length++;\n\n  return id;\n};\n\n/**\n * Get an item. Fields can be converted to a specific type\n * @param {String} id\n * @param {Object.<String, String>} [types]  field types to convert\n * @return {Object | null} item\n * @private\n */\nDataSet.prototype._getItem = function (id, types) {\n  var field, value, i, len;\n\n  // get the item from the dataset\n  var raw = this._data[id];\n  if (!raw) {\n    return null;\n  }\n\n  // convert the items field types\n  var converted = {},\n      fields = Object.keys(raw);\n\n  if (types) {\n    for (i = 0, len = fields.length; i < len; i++) {\n      field = fields[i];\n      value = raw[field];\n      converted[field] = util.convert(value, types[field]);\n    }\n  }\n  else {\n    // no field types specified, no converting needed\n    for (i = 0, len = fields.length; i < len; i++) {\n      field = fields[i];\n      value = raw[field];\n      converted[field] = value;\n    }\n  }\n\n  if (!converted[this._fieldId]) {\n    converted[this._fieldId] = raw.id;\n  }\n\n  return converted;\n};\n\n/**\n * Update a single item: merge with existing item.\n * Will fail when the item has no id, or when there does not exist an item\n * with the same id.\n * @param {Object} item\n * @return {String} id\n * @private\n */\nDataSet.prototype._updateItem = function (item) {\n  var id = item[this._fieldId];\n  if (id == undefined) {\n    throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')');\n  }\n  var d = this._data[id];\n  if (!d) {\n    // item doesn't exist\n    throw new Error('Cannot update item: no item with id ' + id + ' found');\n  }\n\n  // merge with current item\n  var fields = Object.keys(item);\n  for (var i = 0, len = fields.length; i < len; i++) {\n    var field = fields[i];\n    var fieldType = this._type[field];  // type may be undefined\n    d[field] = util.convert(item[field], fieldType);\n  }\n\n  return id;\n};\n\nmodule.exports = DataSet;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/DataSet.js","/**\n * A queue\n * @param {Object} options\n *            Available options:\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @constructor\n */\nfunction Queue(options) {\n  // options\n  this.delay = null;\n  this.max = Infinity;\n\n  // properties\n  this._queue = [];\n  this._timeout = null;\n  this._extended = null;\n\n  this.setOptions(options);\n}\n\n/**\n * Update the configuration of the queue\n * @param {Object} options\n *            Available options:\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @param options\n */\nQueue.prototype.setOptions = function (options) {\n  if (options && typeof options.delay !== 'undefined') {\n    this.delay = options.delay;\n  }\n  if (options && typeof options.max !== 'undefined') {\n    this.max = options.max;\n  }\n\n  this._flushIfNeeded();\n};\n\n/**\n * Extend an object with queuing functionality.\n * The object will be extended with a function flush, and the methods provided\n * in options.replace will be replaced with queued ones.\n * @param {Object} object\n * @param {Object} options\n *            Available options:\n *            - replace: Array.<string>\n *                               A list with method names of the methods\n *                               on the object to be replaced with queued ones.\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @return {Queue} Returns the created queue\n */\nQueue.extend = function (object, options) {\n  var queue = new Queue(options);\n\n  if (object.flush !== undefined) {\n    throw new Error('Target object already has a property flush');\n  }\n  object.flush = function () {\n    queue.flush();\n  };\n\n  var methods = [{\n    name: 'flush',\n    original: undefined\n  }];\n\n  if (options && options.replace) {\n    for (var i = 0; i < options.replace.length; i++) {\n      var name = options.replace[i];\n      methods.push({\n        name: name,\n        original: object[name]\n      });\n      queue.replace(object, name);\n    }\n  }\n\n  queue._extended = {\n    object: object,\n    methods: methods\n  };\n\n  return queue;\n};\n\n/**\n * Destroy the queue. The queue will first flush all queued actions, and in\n * case it has extended an object, will restore the original object.\n */\nQueue.prototype.destroy = function () {\n  this.flush();\n\n  if (this._extended) {\n    var object = this._extended.object;\n    var methods = this._extended.methods;\n    for (var i = 0; i < methods.length; i++) {\n      var method = methods[i];\n      if (method.original) {\n        object[method.name] = method.original;\n      }\n      else {\n        delete object[method.name];\n      }\n    }\n    this._extended = null;\n  }\n};\n\n/**\n * Replace a method on an object with a queued version\n * @param {Object} object   Object having the method\n * @param {string} method   The method name\n */\nQueue.prototype.replace = function(object, method) {\n  var me = this;\n  var original = object[method];\n  if (!original) {\n    throw new Error('Method ' + method + ' undefined');\n  }\n\n  object[method] = function () {\n    // create an Array with the arguments\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    // add this call to the queue\n    me.queue({\n      args: args,\n      fn: original,\n      context: this\n    });\n  };\n};\n\n/**\n * Queue a call\n * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry\n */\nQueue.prototype.queue = function(entry) {\n  if (typeof entry === 'function') {\n    this._queue.push({fn: entry});\n  }\n  else {\n    this._queue.push(entry);\n  }\n\n  this._flushIfNeeded();\n};\n\n/**\n * Check whether the queue needs to be flushed\n * @private\n */\nQueue.prototype._flushIfNeeded = function () {\n  // flush when the maximum is exceeded.\n  if (this._queue.length > this.max) {\n    this.flush();\n  }\n\n  // flush after a period of inactivity when a delay is configured\n  clearTimeout(this._timeout);\n  if (this.queue.length > 0 && typeof this.delay === 'number') {\n    var me = this;\n    this._timeout = setTimeout(function () {\n      me.flush();\n    }, this.delay);\n  }\n};\n\n/**\n * Flush all queued calls\n */\nQueue.prototype.flush = function () {\n  while (this._queue.length > 0) {\n    var entry = this._queue.shift();\n    entry.fn.apply(entry.context || entry.fn, entry.args || []);\n  }\n};\n\nmodule.exports = Queue;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/Queue.js","var util = require('./util');\nvar DataSet = require('./DataSet');\n\n/**\n * DataView\n *\n * a dataview offers a filtered view on a dataset or an other dataview.\n *\n * @param {DataSet | DataView} data\n * @param {Object} [options]   Available options: see method get\n *\n * @constructor DataView\n */\nfunction DataView (data, options) {\n  this._data = null;\n  this._ids = {}; // ids of the items currently in memory (just contains a boolean true)\n  this.length = 0; // number of items in the DataView\n  this._options = options || {};\n  this._fieldId = 'id'; // name of the field containing id\n  this._subscribers = {}; // event subscribers\n\n  var me = this;\n  this.listener = function () {\n    me._onEvent.apply(me, arguments);\n  };\n\n  this.setData(data);\n}\n\n// TODO: implement a function .config() to dynamically update things like configured filter\n// and trigger changes accordingly\n\n/**\n * Set a data source for the view\n * @param {DataSet | DataView} data\n */\nDataView.prototype.setData = function (data) {\n  var ids, id, i, len, items;\n\n  if (this._data) {\n    // unsubscribe from current dataset\n    if (this._data.off) {\n      this._data.off('*', this.listener);\n    }\n\n    // trigger a remove of all items in memory\n    ids = this._data.getIds({filter: this._options && this._options.filter});\n    items = [];\n\n    for (i = 0, len = ids.length; i < len; i++) {\n      items.push(this._data._data[ids[i]]);\n    }\n\n    this._ids = {};\n    this.length = 0;\n    this._trigger('remove', {items: ids, oldData: items});\n  }\n\n  this._data = data;\n\n  if (this._data) {\n    // update fieldId\n    this._fieldId = this._options.fieldId ||\n        (this._data && this._data.options && this._data.options.fieldId) ||\n        'id';\n\n    // trigger an add of all added items\n    ids = this._data.getIds({filter: this._options && this._options.filter});\n    for (i = 0, len = ids.length; i < len; i++) {\n      id = ids[i];\n      this._ids[id] = true;\n    }\n    this.length = ids.length;\n    this._trigger('add', {items: ids});\n\n    // subscribe to new dataset\n    if (this._data.on) {\n      this._data.on('*', this.listener);\n    }\n  }\n};\n\n/**\n * Refresh the DataView. Useful when the DataView has a filter function\n * containing a variable parameter.\n */\nDataView.prototype.refresh = function () {\n  var id, i, len;\n  var ids = this._data.getIds({filter: this._options && this._options.filter}),\n      oldIds = Object.keys(this._ids),\n      newIds = {},\n      addedIds = [],\n      removedIds = [],\n      removedItems = [];\n\n  // check for additions\n  for (i = 0, len = ids.length; i < len; i++) {\n    id = ids[i];\n    newIds[id] = true;\n    if (!this._ids[id]) {\n      addedIds.push(id);\n      this._ids[id] = true;\n    }\n  }\n\n  // check for removals\n  for (i = 0, len = oldIds.length; i < len; i++) {\n    id = oldIds[i];\n    if (!newIds[id]) {\n      removedIds.push(id);\n      removedItems.push(this._data._data[id]);\n      delete this._ids[id];\n    }\n  }\n\n  this.length += addedIds.length - removedIds.length;\n\n  // trigger events\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds});\n  }\n  if (removedIds.length) {\n    this._trigger('remove', {items: removedIds, oldData: removedItems});\n  }\n};\n\n/**\n * Get data from the data view\n *\n * Usage:\n *\n *     get()\n *     get(options: Object)\n *     get(options: Object, data: Array | DataTable)\n *\n *     get(id: Number)\n *     get(id: Number, options: Object)\n *     get(id: Number, options: Object, data: Array | DataTable)\n *\n *     get(ids: Number[])\n *     get(ids: Number[], options: Object)\n *     get(ids: Number[], options: Object, data: Array | DataTable)\n *\n * Where:\n *\n * {Number | String} id         The id of an item\n * {Number[] | String{}} ids    An array with ids of items\n * {Object} options             An Object with options. Available options:\n *                              {String} [type] Type of data to be returned. Can\n *                                              be 'DataTable' or 'Array' (default)\n *                              {Object.<String, String>} [convert]\n *                              {String[]} [fields] field names to be returned\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * {Array | DataTable} [data]   If provided, items will be appended to this\n *                              array or table. Required in case of Google\n *                              DataTable.\n * @param args\n */\nDataView.prototype.get = function (args) {\n  var me = this;\n\n  // parse the arguments\n  var ids, options, data;\n  var firstType = util.getType(arguments[0]);\n  if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') {\n    // get(id(s) [, options] [, data])\n    ids = arguments[0];  // can be a single id or an array with ids\n    options = arguments[1];\n    data = arguments[2];\n  }\n  else {\n    // get([, options] [, data])\n    options = arguments[0];\n    data = arguments[1];\n  }\n\n  // extend the options with the default options and provided options\n  var viewOptions = util.extend({}, this._options, options);\n\n  // create a combined filter method when needed\n  if (this._options.filter && options && options.filter) {\n    viewOptions.filter = function (item) {\n      return me._options.filter(item) && options.filter(item);\n    }\n  }\n\n  // build up the call to the linked data set\n  var getArguments = [];\n  if (ids != undefined) {\n    getArguments.push(ids);\n  }\n  getArguments.push(viewOptions);\n  getArguments.push(data);\n\n  return this._data && this._data.get.apply(this._data, getArguments);\n};\n\n/**\n * Get ids of all items or from a filtered set of items.\n * @param {Object} [options]    An Object with options. Available options:\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Array} ids\n */\nDataView.prototype.getIds = function (options) {\n  var ids;\n\n  if (this._data) {\n    var defaultFilter = this._options.filter;\n    var filter;\n\n    if (options && options.filter) {\n      if (defaultFilter) {\n        filter = function (item) {\n          return defaultFilter(item) && options.filter(item);\n        }\n      }\n      else {\n        filter = options.filter;\n      }\n    }\n    else {\n      filter = defaultFilter;\n    }\n\n    ids = this._data.getIds({\n      filter: filter,\n      order: options && options.order\n    });\n  }\n  else {\n    ids = [];\n  }\n\n  return ids;\n};\n\n/**\n * Map every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Object[]} mappedItems\n */\nDataView.prototype.map = function (callback,options) {\n  var mappedItems = [];\n  if (this._data) {\n    var defaultFilter = this._options.filter;\n    var filter;\n\n    if (options && options.filter) {\n      if (defaultFilter) {\n        filter = function (item) {\n          return defaultFilter(item) && options.filter(item);\n        }\n      }\n      else {\n        filter = options.filter;\n      }\n    }\n    else {\n      filter = defaultFilter;\n    }\n\n    mappedItems = this._data.map(callback,{\n      filter: filter,\n      order: options && options.order\n    });\n  }\n  else {\n    mappedItems = [];\n  }\n\n  return mappedItems;\n};\n\n/**\n * Get the DataSet to which this DataView is connected. In case there is a chain\n * of multiple DataViews, the root DataSet of this chain is returned.\n * @return {DataSet} dataSet\n */\nDataView.prototype.getDataSet = function () {\n  var dataSet = this;\n  while (dataSet instanceof DataView) {\n    dataSet = dataSet._data;\n  }\n  return dataSet || null;\n};\n\n/**\n * Event listener. Will propagate all events from the connected data set to\n * the subscribers of the DataView, but will filter the items and only trigger\n * when there are changes in the filtered data set.\n * @param {String} event\n * @param {Object | null} params\n * @param {String} senderId\n * @private\n */\nDataView.prototype._onEvent = function (event, params, senderId) {\n  var i, len, id, item;\n  var ids = params && params.items;\n  var addedIds = [],\n      updatedIds = [],\n      removedIds = [],\n      oldItems = [],\n      updatedItems = [],\n      removedItems = [];\n\n  if (ids && this._data) {\n    switch (event) {\n      case 'add':\n        // filter the ids of the added items\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          item = this.get(id);\n          if (item) {\n            this._ids[id] = true;\n            addedIds.push(id);\n          }\n        }\n\n        break;\n\n      case 'update':\n        // determine the event from the views viewpoint: an updated\n        // item can be added, updated, or removed from this view.\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          item = this.get(id);\n\n          if (item) {\n            if (this._ids[id]) {\n              updatedIds.push(id);\n              updatedItems.push(params.data[i]);\n              oldItems.push(params.oldData[i]);\n            }\n            else {\n              this._ids[id] = true;\n              addedIds.push(id);\n            }\n          }\n          else {\n            if (this._ids[id]) {\n              delete this._ids[id];\n              removedIds.push(id);\n              removedItems.push(params.oldData[i]);\n            }\n            else {\n              // nothing interesting for me :-(\n            }\n          }\n        }\n\n        break;\n\n      case 'remove':\n        // filter the ids of the removed items\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          if (this._ids[id]) {\n            delete this._ids[id];\n            removedIds.push(id);\n            removedItems.push(params.oldData[i]);\n          }\n        }\n\n        break;\n    }\n\n    this.length += addedIds.length - removedIds.length;\n\n    if (addedIds.length) {\n      this._trigger('add', {items: addedIds}, senderId);\n    }\n    if (updatedIds.length) {\n      this._trigger('update', {items: updatedIds, oldData: oldItems, data: updatedItems}, senderId);\n    }\n    if (removedIds.length) {\n      this._trigger('remove', {items: removedIds, oldData: removedItems}, senderId);\n    }\n  }\n};\n\n// copy subscription functionality from DataSet\nDataView.prototype.on = DataSet.prototype.on;\nDataView.prototype.off = DataSet.prototype.off;\nDataView.prototype._trigger = DataSet.prototype._trigger;\n\n// TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5)\nDataView.prototype.subscribe = DataView.prototype.on;\nDataView.prototype.unsubscribe = DataView.prototype.off;\n\nmodule.exports = DataView;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/DataView.js","var Emitter = require('emitter-component'); var DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar util = require('../util');\nvar Point3d = require('./Point3d');\nvar Point2d = require('./Point2d');\nvar Camera = require('./Camera');\nvar Filter = require('./Filter');\nvar Slider = require('./Slider');\nvar StepNumber = require('./StepNumber');\nvar Range = require('./Range');\nvar Settings = require('./Settings');\n\n\n/// enumerate the available styles\nGraph3d.STYLE = Settings.STYLE; \n\n\n/**\n * Following label is used in the settings to describe values which should be\n * determined by the code while running, from the current data and graph style.\n * \n * Using 'undefined' directly achieves the same thing, but this is more\n * descriptive by describing the intent.\n */\nvar autoByDefault = undefined;\n\n\n/**\n * Default values for option settings.\n *\n * These are the values used when a Graph3d instance is initialized without\n * custom settings.\n *\n * If a field is not in this list, a default value of 'autoByDefault' is assumed,\n * which is just an alias for 'undefined'.\n */\nvar DEFAULTS = {\n  width            : '400px',\n  height           : '400px',\n  filterLabel      : 'time',\n  legendLabel      : 'value',\n  xLabel           : 'x',\n  yLabel           : 'y',\n  zLabel           : 'z',\n  xValueLabel      : function(v) { return v; },\n  yValueLabel      : function(v) { return v; },\n  zValueLabel      : function(v) { return v; },\n  showGrid         : true,\n  showPerspective  : true,\n  showShadow       : false,\n  keepAspectRatio  : true,\n  verticalRatio    : 0.5,    // 0.1 to 1.0, where 1.0 results in a 'cube'\n  dotSizeRatio     : 0.02,   // size of the dots as a fraction of the graph width\n\n  showAnimationControls: autoByDefault,\n  animationInterval    : 1000, // milliseconds\n  animationPreload     : false,\n  animationAutoStart   : autoByDefault,\n\n  axisColor        : '#4D4D4D',\n  gridColor        : '#D3D3D3',\n  xCenter          : '55%',\n  yCenter          : '50%',\n\n  style            : Graph3d.STYLE.DOT,\n  tooltip          : false,\n  showLegend       : autoByDefault, // determined by graph style\n  backgroundColor  : autoByDefault,\n\n  dataColor        : {\n    fill       : '#7DC1FF',\n    stroke     : '#3267D2',\n    strokeWidth: 1 // px\n  },\n\n  cameraPosition   : {\n     horizontal: 1.0,\n     vertical  : 0.5,\n     distance  : 1.7\n  },\n\n  xBarWidth : autoByDefault,\n  yBarWidth : autoByDefault,\n  valueMin  : autoByDefault,\n  valueMax  : autoByDefault,\n  xMin      : autoByDefault,\n  xMax      : autoByDefault,\n  xStep     : autoByDefault,\n  yMin      : autoByDefault,\n  yMax      : autoByDefault,\n  yStep     : autoByDefault,\n  zMin      : autoByDefault,\n  zMax      : autoByDefault,\n  zStep     : autoByDefault\n};\n\n\n// -----------------------------------------------------------------------------\n// Class Graph3d\n// -----------------------------------------------------------------------------\n\n\n/**\n * @constructor Graph3d\n * Graph3d displays data in 3d.\n *\n * Graph3d is developed in javascript as a Google Visualization Chart.\n *\n * @param {Element} container   The DOM element in which the Graph3d will\n *                              be created. Normally a div element.\n * @param {DataSet | DataView | Array} [data]\n * @param {Object} [options]\n */\nfunction Graph3d(container, data, options) {\n  if (!(this instanceof Graph3d)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // create variables and set default values\n  this.containerElement = container;\n\n  this.dataTable = null;  // The original data table\n  this.dataPoints = null; // The table with point objects\n\n  // create a frame and canvas\n  this.create();\n\n  Settings.setDefaults(DEFAULTS, this);\n\n  // the column indexes\n  this.colX = undefined;\n  this.colY = undefined;\n  this.colZ = undefined;\n  this.colValue = undefined;\n  this.colFilter = undefined;\n\n  // TODO: customize axis range\n\n  // apply options (also when undefined)\n  this.setOptions(options);\n\n  // apply data\n  if (data) {\n    this.setData(data);\n  }\n}\n\n// Extend Graph3d with an Emitter mixin\nEmitter(Graph3d.prototype);\n\n/**\n * Calculate the scaling values, dependent on the range in x, y, and z direction\n */\nGraph3d.prototype._setScale = function() {\n  this.scale = new Point3d(\n    1 / this.xRange.range(),\n    1 / this.yRange.range(),\n    1 / this.zRange.range()\n  );\n\n  // keep aspect ration between x and y scale if desired\n  if (this.keepAspectRatio) {\n    if (this.scale.x < this.scale.y) {\n      //noinspection JSSuspiciousNameCombination\n      this.scale.y = this.scale.x;\n    }\n    else {\n      //noinspection JSSuspiciousNameCombination\n      this.scale.x = this.scale.y;\n    }\n  }\n\n  // scale the vertical axis\n  this.scale.z *= this.verticalRatio;\n  // TODO: can this be automated? verticalRatio?\n\n  // determine scale for (optional) value\n  if (this.valueRange !== undefined) {\n    this.scale.value = 1 / this.valueRange.range();\n  }\n\n  // position the camera arm\n  var xCenter = this.xRange.center() * this.scale.x;\n  var yCenter = this.yRange.center() * this.scale.y;\n  var zCenter = this.zRange.center() * this.scale.z;\n  this.camera.setArmLocation(xCenter, yCenter, zCenter);\n};\n\n\n/**\n * Convert a 3D location to a 2D location on screen\n * Source: ttp://en.wikipedia.org/wiki/3D_projection\n *\n * @param   {Point3d} point3d  A 3D point with parameters x, y, z\n * @returns {Point2d} point2d  A 2D point with parameters x, y\n */\nGraph3d.prototype._convert3Dto2D = function(point3d) {\n  var translation = this._convertPointToTranslation(point3d);\n  return this._convertTranslationToScreen(translation);\n};\n\n/**\n * Convert a 3D location its translation seen from the camera\n * Source: http://en.wikipedia.org/wiki/3D_projection\n *\n * @param   {Point3d} point3d     A 3D point with parameters x, y, z\n * @returns {Point3d} translation A 3D point with parameters x, y, z This is\n *                                the translation of the point, seen from the\n *                                camera.\n */\nGraph3d.prototype._convertPointToTranslation = function(point3d) {\n  var cameraLocation = this.camera.getCameraLocation(),\n    cameraRotation = this.camera.getCameraRotation(),\n    ax = point3d.x * this.scale.x,\n    ay = point3d.y * this.scale.y,\n    az = point3d.z * this.scale.z,\n\n    cx = cameraLocation.x,\n    cy = cameraLocation.y,\n    cz = cameraLocation.z,\n\n  // calculate angles\n    sinTx = Math.sin(cameraRotation.x),\n    cosTx = Math.cos(cameraRotation.x),\n    sinTy = Math.sin(cameraRotation.y),\n    cosTy = Math.cos(cameraRotation.y),\n    sinTz = Math.sin(cameraRotation.z),\n    cosTz = Math.cos(cameraRotation.z),\n\n  // calculate translation\n    dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz),\n    dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax-cx)),\n    dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax-cx));\n\n  return new Point3d(dx, dy, dz);\n};\n\n/**\n * Convert a translation point to a point on the screen\n *\n * @param   {Point3d} translation A 3D point with parameters x, y, z This is\n *                                the translation of the point, seen from the\n *                                camera.\n * @returns {Point2d} point2d     A 2D point with parameters x, y\n */\nGraph3d.prototype._convertTranslationToScreen = function(translation) {\n  var ex = this.eye.x,\n    ey = this.eye.y,\n    ez = this.eye.z,\n    dx = translation.x,\n    dy = translation.y,\n    dz = translation.z;\n\n  // calculate position on screen from translation\n  var bx;\n  var by;\n  if (this.showPerspective) {\n    bx = (dx - ex) * (ez / dz);\n    by = (dy - ey) * (ez / dz);\n  }\n  else {\n    bx = dx * -(ez / this.camera.getArmLength());\n    by = dy * -(ez / this.camera.getArmLength());\n  }\n\n  // shift and scale the point to the center of the screen\n  // use the width of the graph to scale both horizontally and vertically.\n  return new Point2d(\n    this.currentXCenter + bx * this.frame.canvas.clientWidth,\n    this.currentYCenter - by * this.frame.canvas.clientWidth);\n};\n\n\n/**\n * Calculate the translations and screen positions of all points\n */\nGraph3d.prototype._calcTranslations = function(points, sort) {\n  if (sort === undefined) {\n    sort = true;\n  }\n\n  for (var i = 0; i < points.length; i++) {\n    var point    = points[i];\n    point.trans  = this._convertPointToTranslation(point.point);\n    point.screen = this._convertTranslationToScreen(point.trans);\n\n    // calculate the translation of the point at the bottom (needed for sorting)\n    var transBottom = this._convertPointToTranslation(point.bottom);\n    point.dist = this.showPerspective ? transBottom.length() : -transBottom.z;\n  }\n\n  if (!sort) {\n    return;\n  }\n\n  // sort the points on depth of their (x,y) position (not on z)\n  var sortDepth = function (a, b) {\n    return b.dist - a.dist;\n  };\n  points.sort(sortDepth);\n};\n\n\nGraph3d.prototype.getNumberOfRows = function(data) {\n  return data.length;\n}\n\n\nGraph3d.prototype.getNumberOfColumns = function(data) {\n  var counter = 0;\n  for (var column in data[0]) {\n    if (data[0].hasOwnProperty(column)) {\n      counter++;\n    }\n  }\n  return counter;\n}\n\n\nGraph3d.prototype.getDistinctValues = function(data, column) {\n  var distinctValues = [];\n  for (var i = 0; i < data.length; i++) {\n    if (distinctValues.indexOf(data[i][column]) == -1) {\n      distinctValues.push(data[i][column]);\n    }\n  }\n  return distinctValues;\n}\n\n\n/**\n * Get the absolute min/max values for the passed data column.\n *\n * @returns {Range} A Range instance with min/max members properly set.\n */\nGraph3d.prototype.getColumnRange = function(data,column) {\n  var range  = new Range();\n\n  // Adjust the range so that it covers all values in the passed data elements.\n  for (var i = 0; i < data.length; i++) {\n    var item = data[i][column];\n    range.adjust(item);\n  }\n\n  return range;\n};\n\n\n/**\n * Check if the state is consistent for the use of the value field.\n *\n * Throws if a problem is detected.\n */\nGraph3d.prototype._checkValueField = function (data) {\n\n  var hasValueField = this.style === Graph3d.STYLE.BARCOLOR\n                   || this.style === Graph3d.STYLE.BARSIZE\n                   || this.style === Graph3d.STYLE.DOTCOLOR\n                   || this.style === Graph3d.STYLE.DOTSIZE;\n\n  if (!hasValueField) {\n    return;   // No need to check further\n  }\n\n  // Following field must be present for the current graph style\n  if (this.colValue === undefined) {\n    throw new Error('Expected data to have '\n      + ' field \\'style\\' '\n      + ' for graph style \\'' + this.style + '\\''\n    );\n  }\n\n  // The data must also contain this field.\n  // Note that only first data element is checked.\n  if (data[0][this.colValue] === undefined) {\n    throw new Error('Expected data to have '\n      + ' field \\'' + this.colValue + '\\' '\n      + ' for graph style \\'' + this.style + '\\''\n    );\n  }\n};\n\n\n/**\n * Set default values for range\n *\n * The default values override the range values, if defined.\n *\n * Because it's possible that only defaultMin or defaultMax is set, it's better\n * to pass in a range already set with the min/max set from the data. Otherwise,\n * it's quite hard to process the min/max properly.\n */\nGraph3d.prototype._setRangeDefaults = function (range, defaultMin, defaultMax) {\n  if (defaultMin !== undefined) {\n    range.min = defaultMin;\n  }\n\n  if (defaultMax !== undefined) {\n    range.max = defaultMax;\n  }\n\n  // This is the original way that the default min/max values were adjusted.\n  // TODO: Perhaps it's better if an error is thrown if the values do not agree.\n  //       But this will change the behaviour.\n  if (range.max <= range.min) range.max = range.min + 1;\n};\n\n\n/**\n * Initialize the data from the data table. Calculate minimum and maximum values\n * and column index values\n * @param {Array | DataSet | DataView} rawData The data containing the items for\n *                                             the Graph.\n * @param {Number}                     style   Style Number\n */\nGraph3d.prototype._dataInitialize = function (rawData, style) {\n  var me = this;\n\n  // unsubscribe from the dataTable\n  if (this.dataSet) {\n    this.dataSet.off('*', this._onChange);\n  }\n\n  if (rawData === undefined)\n    return;\n\n  if (Array.isArray(rawData)) {\n    rawData = new DataSet(rawData);\n  }\n\n  var data;\n  if (rawData instanceof DataSet || rawData instanceof DataView) {\n    data = rawData.get();\n  }\n  else {\n    throw new Error('Array, DataSet, or DataView expected');\n  }\n\n  if (data.length == 0)\n    return;\n\n  this.dataSet = rawData;\n  this.dataTable = data;\n\n  // subscribe to changes in the dataset\n  this._onChange = function () {\n    me.setData(me.dataSet);\n  };\n  this.dataSet.on('*', this._onChange);\n\n  // determine the location of x,y,z,value,filter columns\n  this.colX = 'x';\n  this.colY = 'y';\n  this.colZ = 'z';\n\n\n  var withBars = this.style == Graph3d.STYLE.BAR ||\n    this.style == Graph3d.STYLE.BARCOLOR ||\n    this.style == Graph3d.STYLE.BARSIZE;\n\n  // determine barWidth from data\n  if (withBars) {\n    if (this.defaultXBarWidth !== undefined) {\n      this.xBarWidth = this.defaultXBarWidth;\n    }\n    else {\n      var dataX = this.getDistinctValues(data,this.colX);\n      this.xBarWidth = (dataX[1] - dataX[0]) || 1;\n    }\n\n    if (this.defaultYBarWidth !== undefined) {\n      this.yBarWidth = this.defaultYBarWidth;\n    }\n    else {\n      var dataY = this.getDistinctValues(data,this.colY);\n      this.yBarWidth = (dataY[1] - dataY[0]) || 1;\n    }\n  }\n\n  // calculate minimums and maximums\n  var NUMSTEPS = 5;\n\n  var xRange = this.getColumnRange(data, this.colX);\n  if (withBars) {\n    xRange.expand(this.xBarWidth / 2);\n  }\n  this._setRangeDefaults(xRange, this.defaultXMin, this.defaultXMax);\n  this.xRange = xRange;\n  this.xStep = (this.defaultXStep !== undefined) ? this.defaultXStep : xRange.range()/NUMSTEPS;\n\n  var yRange = this.getColumnRange(data, this.colY);\n  if (withBars) {\n    yRange.expand(this.yBarWidth / 2);\n  }\n  this._setRangeDefaults(yRange, this.defaultYMin, this.defaultYMax);\n  this.yRange = yRange;\n  this.yStep = (this.defaultYStep !== undefined) ? this.defaultYStep : yRange.range()/NUMSTEPS;\n\n  var zRange = this.getColumnRange(data, this.colZ);\n  this._setRangeDefaults(zRange, this.defaultZMin, this.defaultZMax);\n  this.zRange = zRange;\n  this.zStep = (this.defaultZStep !== undefined) ? this.defaultZStep : zRange.range()/NUMSTEPS;\n\n  if (data[0].hasOwnProperty('style')) {\n    this.colValue = 'style';\n    var valueRange = this.getColumnRange(data,this.colValue);\n    this._setRangeDefaults(valueRange, this.defaultValueMin, this.defaultValueMax);\n    this.valueRange = valueRange;\n  }\n\n\n  // check if a filter column is provided\n  // Needs to be started after zRange is defined\n  if (data[0].hasOwnProperty('filter')) {\n    // Only set this field if it's actually present\n    this.colFilter = 'filter';\n\n    if (this.dataFilter === undefined) {\n      this.dataFilter = new Filter(rawData, this.colFilter, this);\n      this.dataFilter.setOnLoadCallback(function() {me.redraw();});\n    }\n  }\n\n  \n  // set the scale dependent on the ranges.\n  this._setScale();\n};\n\n\n\n/**\n * Filter the data based on the current filter\n *\n * @param   {Array} data\n * @returns {Array} dataPoints Array with point objects which can be drawn on\n *                             screen\n */\nGraph3d.prototype._getDataPoints = function (data) {\n  // TODO: store the created matrix dataPoints in the filters instead of\n  //       reloading each time.\n  var x, y, i, z, obj, point;\n\n  var dataPoints = [];\n\n  if (this.style === Graph3d.STYLE.GRID ||\n    this.style === Graph3d.STYLE.SURFACE) {\n    // copy all values from the google data table to a matrix\n    // the provided values are supposed to form a grid of (x,y) positions\n\n    // create two lists with all present x and y values\n    var dataX = [];\n    var dataY = [];\n    for (i = 0; i < this.getNumberOfRows(data); i++) {\n      x = data[i][this.colX] || 0;\n      y = data[i][this.colY] || 0;\n\n      if (dataX.indexOf(x) === -1) {\n        dataX.push(x);\n      }\n      if (dataY.indexOf(y) === -1) {\n        dataY.push(y);\n      }\n    }\n\n    var sortNumber = function (a, b) {\n      return a - b;\n    };\n    dataX.sort(sortNumber);\n    dataY.sort(sortNumber);\n\n    // create a grid, a 2d matrix, with all values.\n    var dataMatrix = [];   // temporary data matrix\n    for (i = 0; i < data.length; i++) {\n      x = data[i][this.colX] || 0;\n      y = data[i][this.colY] || 0;\n      z = data[i][this.colZ] || 0;\n\n      // TODO: implement Array().indexOf() for Internet Explorer\n      var xIndex = dataX.indexOf(x);\n      var yIndex = dataY.indexOf(y);\n\n      if (dataMatrix[xIndex] === undefined) {\n        dataMatrix[xIndex] = [];\n      }\n\n      var point3d = new Point3d();\n      point3d.x = x;\n      point3d.y = y;\n      point3d.z = z;\n      point3d.data = data[i];\n\n      obj = {};\n      obj.point = point3d;\n      obj.trans = undefined;\n      obj.screen = undefined;\n      obj.bottom = new Point3d(x, y, this.zRange.min);\n\n      dataMatrix[xIndex][yIndex] = obj;\n\n      dataPoints.push(obj);\n    }\n\n    // fill in the pointers to the neighbors.\n    for (x = 0; x < dataMatrix.length; x++) {\n      for (y = 0; y < dataMatrix[x].length; y++) {\n        if (dataMatrix[x][y]) {\n          dataMatrix[x][y].pointRight = (x < dataMatrix.length-1) ? dataMatrix[x+1][y] : undefined;\n          dataMatrix[x][y].pointTop   = (y < dataMatrix[x].length-1) ? dataMatrix[x][y+1] : undefined;\n          dataMatrix[x][y].pointCross =\n            (x < dataMatrix.length-1 && y < dataMatrix[x].length-1) ?\n              dataMatrix[x+1][y+1] :\n              undefined;\n        }\n      }\n    }\n  }\n  else {  // 'dot', 'dot-line', etc.\n    this._checkValueField(data);\n\n    // copy all values from the google data table to a list with Point3d objects\n    for (i = 0; i < data.length; i++) {\n      point = new Point3d();\n      point.x = data[i][this.colX] || 0;\n      point.y = data[i][this.colY] || 0;\n      point.z = data[i][this.colZ] || 0;\n      point.data = data[i];\n\n      if (this.colValue !== undefined) {\n        point.value = data[i][this.colValue] || 0;\n      }\n\n      obj = {};\n      obj.point = point;\n      obj.bottom = new Point3d(point.x, point.y, this.zRange.min);\n      obj.trans = undefined;\n      obj.screen = undefined;\n\n      if (this.style === Graph3d.STYLE.LINE) {\n        if (i > 0) {\n          // Add next point for line drawing\n          dataPoints[i - 1].pointNext = obj;\n        }\n      }\n\n      dataPoints.push(obj);\n    }\n  }\n\n  return dataPoints;\n};\n\n/**\n * Create the main frame for the Graph3d.\n *\n * This function is executed once when a Graph3d object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n */\nGraph3d.prototype.create = function () {\n  // remove all elements from the container element.\n  while (this.containerElement.hasChildNodes()) {\n    this.containerElement.removeChild(this.containerElement.firstChild);\n  }\n\n  this.frame = document.createElement('div');\n  this.frame.style.position = 'relative';\n  this.frame.style.overflow = 'hidden';\n\n  // create the graph canvas (HTML canvas element)\n  this.frame.canvas = document.createElement( 'canvas' );\n  this.frame.canvas.style.position = 'relative';\n  this.frame.appendChild(this.frame.canvas);\n  //if (!this.frame.canvas.getContext) {\n  {\n    var noCanvas = document.createElement( 'DIV' );\n    noCanvas.style.color = 'red';\n    noCanvas.style.fontWeight =  'bold' ;\n    noCanvas.style.padding =  '10px';\n    noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n    this.frame.canvas.appendChild(noCanvas);\n  }\n\n  this.frame.filter = document.createElement( 'div' );\n  this.frame.filter.style.position = 'absolute';\n  this.frame.filter.style.bottom = '0px';\n  this.frame.filter.style.left = '0px';\n  this.frame.filter.style.width = '100%';\n  this.frame.appendChild(this.frame.filter);\n\n  // add event listeners to handle moving and zooming the contents\n  var me = this;\n  var onmousedown = function (event) {me._onMouseDown(event);};\n  var ontouchstart = function (event) {me._onTouchStart(event);};\n  var onmousewheel = function (event) {me._onWheel(event);};\n  var ontooltip = function (event) {me._onTooltip(event);};\n  var onclick = function(event) {me._onClick(event);};\n  // TODO: these events are never cleaned up... can give a 'memory leakage'\n\n  util.addEventListener(this.frame.canvas, 'keydown', onkeydown);\n  util.addEventListener(this.frame.canvas, 'mousedown', onmousedown);\n  util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart);\n  util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel);\n  util.addEventListener(this.frame.canvas, 'mousemove', ontooltip);\n  util.addEventListener(this.frame.canvas, 'click', onclick);\n\n  // add the new graph to the container element\n  this.containerElement.appendChild(this.frame);\n};\n\n\n/**\n * Set a new size for the graph\n */\nGraph3d.prototype._setSize = function(width, height) {\n  this.frame.style.width = width;\n  this.frame.style.height = height;\n\n  this._resizeCanvas();\n};\n\n\n/**\n * Resize the canvas to the current size of the frame\n */\nGraph3d.prototype._resizeCanvas = function() {\n  this.frame.canvas.style.width = '100%';\n  this.frame.canvas.style.height = '100%';\n\n  this.frame.canvas.width = this.frame.canvas.clientWidth;\n  this.frame.canvas.height = this.frame.canvas.clientHeight;\n\n  // adjust with for margin\n  this.frame.filter.style.width = (this.frame.canvas.clientWidth - 2 * 10) + 'px';\n};\n\n/**\n * Start animation\n */\nGraph3d.prototype.animationStart = function() {\n  if (!this.frame.filter || !this.frame.filter.slider)\n    throw new Error('No animation available');\n\n  this.frame.filter.slider.play();\n};\n\n\n/**\n * Stop animation\n */\nGraph3d.prototype.animationStop = function() {\n  if (!this.frame.filter || !this.frame.filter.slider) return;\n\n  this.frame.filter.slider.stop();\n};\n\n\n/**\n * Resize the center position based on the current values in this.xCenter\n * and this.yCenter (which are strings with a percentage or a value\n * in pixels). The center positions are the variables this.currentXCenter\n * and this.currentYCenter\n */\nGraph3d.prototype._resizeCenter = function() {\n  // calculate the horizontal center position\n  if (this.xCenter.charAt(this.xCenter.length-1) === '%') {\n    this.currentXCenter =\n      parseFloat(this.xCenter) / 100 *\n        this.frame.canvas.clientWidth;\n  }\n  else {\n    this.currentXCenter = parseFloat(this.xCenter); // supposed to be in px\n  }\n\n  // calculate the vertical center position\n  if (this.yCenter.charAt(this.yCenter.length-1) === '%') {\n    this.currentYCenter =\n      parseFloat(this.yCenter) / 100 *\n        (this.frame.canvas.clientHeight - this.frame.filter.clientHeight);\n  }\n  else {\n    this.currentYCenter = parseFloat(this.yCenter); // supposed to be in px\n  }\n};\n\n\n\n/**\n * Retrieve the current camera rotation\n *\n * @returns {object} An object with parameters horizontal, vertical, and\n *                   distance\n */\nGraph3d.prototype.getCameraPosition = function() {\n  var pos = this.camera.getArmRotation();\n  pos.distance = this.camera.getArmLength();\n  return pos;\n};\n\n/**\n * Load data into the 3D Graph\n */\nGraph3d.prototype._readData = function(data) {\n  // read the data\n  this._dataInitialize(data, this.style);\n\n\n  if (this.dataFilter) {\n    // apply filtering\n    this.dataPoints = this.dataFilter._getDataPoints();\n  }\n  else {\n    // no filtering. load all data\n    this.dataPoints = this._getDataPoints(this.dataTable);\n  }\n\n  // draw the filter\n  this._redrawFilter();\n};\n\n/**\n * Replace the dataset of the Graph3d\n *\n * @param {Array | DataSet | DataView} data\n */\nGraph3d.prototype.setData = function (data) {\n  this._readData(data);\n  this.redraw();\n\n  // start animation when option is true\n  if (this.animationAutoStart && this.dataFilter) {\n    this.animationStart();\n  }\n};\n\n/**\n * Update the options. Options will be merged with current options\n *\n * @param {Object} options\n */\nGraph3d.prototype.setOptions = function (options) {\n  var cameraPosition = undefined;\n\n  this.animationStop();\n\n  Settings.setOptions(options, this);\n\n  this.setPointDrawingMethod();\n  this._setSize(this.width, this.height);\n\n  // re-load the data\n  if (this.dataTable) {\n    this.setData(this.dataTable);\n  }\n\n  // start animation when option is true\n  if (this.animationAutoStart && this.dataFilter) {\n    this.animationStart();\n  }\n};\n\n\n/**\n * Determine which point drawing method to use for the current graph style.\n */\nGraph3d.prototype.setPointDrawingMethod = function() {\n  var method = undefined;\n\n  switch (this.style) {\n    case Graph3d.STYLE.BAR:\n      method = Graph3d.prototype._redrawBarGraphPoint;\n      break;\n    case Graph3d.STYLE.BARCOLOR:\n      method = Graph3d.prototype._redrawBarColorGraphPoint;\n      break;\n    case Graph3d.STYLE.BARSIZE:\n      method = Graph3d.prototype._redrawBarSizeGraphPoint;\n      break;\n    case Graph3d.STYLE.DOT:\n      method = Graph3d.prototype._redrawDotGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTLINE:\n      method = Graph3d.prototype._redrawDotLineGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTCOLOR:\n      method = Graph3d.prototype._redrawDotColorGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTSIZE:\n      method = Graph3d.prototype._redrawDotSizeGraphPoint;\n      break;\n    case Graph3d.STYLE.SURFACE:\n      method = Graph3d.prototype._redrawSurfaceGraphPoint;\n      break;\n    case Graph3d.STYLE.GRID:\n      method = Graph3d.prototype._redrawGridGraphPoint;\n      break;\n    case Graph3d.STYLE.LINE:\n      method = Graph3d.prototype._redrawLineGraphPoint;\n      break;\n    default:\n      throw new Error('Can not determine point drawing method '\n                    + 'for graph style \\'' + this.style + '\\'');\n      break;\n  }\n\n  this._pointDrawingMethod = method;\n};\n\n\n/**\n * Redraw the Graph.\n */\nGraph3d.prototype.redraw = function() {\n  if (this.dataPoints === undefined) {\n    throw new Error('Graph data not initialized');\n  }\n\n  this._resizeCanvas();\n  this._resizeCenter();\n  this._redrawSlider();\n  this._redrawClear();\n  this._redrawAxis();\n\n  this._redrawDataGraph();\n\n  this._redrawInfo();\n  this._redrawLegend();\n};\n\n\n/**\n * Get drawing context without exposing canvas\n */\nGraph3d.prototype._getContext = function() {\n  var canvas = this.frame.canvas;\n  var ctx = canvas.getContext('2d');\n\n  ctx.lineJoin = 'round';\n  ctx.lineCap  = 'round';\n\n  return ctx;\n};\n\n\n/**\n * Clear the canvas before redrawing\n */\nGraph3d.prototype._redrawClear = function() {\n  var canvas = this.frame.canvas;\n  var ctx = canvas.getContext('2d');\n\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n};\n\n\nGraph3d.prototype._dotSize = function() {\n  return this.frame.clientWidth * this.dotSizeRatio;\n};\n\n\n/**\n * Get legend width\n */\nGraph3d.prototype._getLegendWidth = function() {\n  var width;\n\n  if (this.style === Graph3d.STYLE.DOTSIZE) {\n    var dotSize = this._dotSize();\n    width =  dotSize / 2 + dotSize * 2;\n  } else if (this.style === Graph3d.STYLE.BARSIZE) {\n    width = this.xBarWidth ;\n  } else {\n    width = 20;\n  }\n  return width;\n}\n\n\n/**\n * Redraw the legend based on size, dot color, or surface height\n */\nGraph3d.prototype._redrawLegend = function() {\n\n  //Return without drawing anything, if no legend is specified\n  if (this.showLegend !== true) {\n    return;\n  }\n\n  // Do not draw legend when graph style does not support\n  if (this.style === Graph3d.STYLE.LINE\n   || this.style === Graph3d.STYLE.BARSIZE //TODO add legend support for BARSIZE\n  ){\n    return;\n  }\n\n  // Legend types - size and color. Determine if size legend.\n  var isSizeLegend = (this.style === Graph3d.STYLE.BARSIZE\n                   || this.style === Graph3d.STYLE.DOTSIZE) ;\n\n  // Legend is either tracking z values or style values. This flag if false means use z values.\n  var isValueLegend = (this.style === Graph3d.STYLE.DOTSIZE\n                  || this.style === Graph3d.STYLE.DOTCOLOR\n                  || this.style === Graph3d.STYLE.BARCOLOR);\n\n  var height = Math.max(this.frame.clientHeight * 0.25, 100);\n  var top    = this.margin;\n  var width  = this._getLegendWidth() ; // px - overwritten by size legend\n  var right  = this.frame.clientWidth - this.margin;\n  var left   = right - width;\n  var bottom = top + height;\n\n  var ctx = this._getContext();\n  ctx.lineWidth = 1;\n  ctx.font = '14px arial'; // TODO: put in options\n\n  if (isSizeLegend === false) {\n    // draw the color bar\n    var ymin = 0;\n    var ymax = height; // Todo: make height customizable\n    var y;\n\n    for (y = ymin; y < ymax; y++) {\n      var f = (y - ymin) / (ymax - ymin);\n      var hue = f * 240;\n      var color = this._hsv2rgb(hue, 1, 1);\n\n      ctx.strokeStyle = color;\n      ctx.beginPath();\n      ctx.moveTo(left, top + y);\n      ctx.lineTo(right, top + y);\n      ctx.stroke();\n    }\n    ctx.strokeStyle =  this.axisColor;\n    ctx.strokeRect(left, top, width, height);\n\n  } else {\n\n    // draw the size legend box\n    var  widthMin;\n    if (this.style === Graph3d.STYLE.DOTSIZE) {\n      var dotSize = this._dotSize();\n      widthMin = dotSize / 2; // px\n    } else if (this.style === Graph3d.STYLE.BARSIZE) {\n      //widthMin = this.xBarWidth * 0.2 this is wrong - barwidth measures in terms of xvalues\n    }\n    ctx.strokeStyle =  this.axisColor;\n    ctx.fillStyle =  this.dataColor.fill;\n    ctx.beginPath();\n    ctx.moveTo(left, top);\n    ctx.lineTo(right, top);\n    ctx.lineTo(right - width + widthMin, bottom);\n    ctx.lineTo(left, bottom);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n  }\n\n  // print value text along the legend edge\n  var gridLineLen = 5; // px\n\n  var legendMin = isValueLegend ? this.valueRange.min :  this.zRange.min;\n  var legendMax = isValueLegend ? this.valueRange.max :  this.zRange.max;\n  var step = new StepNumber(legendMin, legendMax, (legendMax-legendMin)/5, true);\n  step.start(true);\n\n  var y;\n  var from;\n  var to;\n  while (!step.end()) {\n    y = bottom - (step.getCurrent() - legendMin) / (legendMax - legendMin) * height;\n    from  = new Point2d(left - gridLineLen, y);\n    to    = new Point2d(left, y);\n    this._line(ctx, from, to);\n\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n    ctx.fillStyle = this.axisColor;\n    ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y);\n\n    step.next();\n  }\n\n  ctx.textAlign = 'right';\n  ctx.textBaseline = 'top';\n  var label = this.legendLabel;\n  ctx.fillText(label, right, bottom + this.margin);\n};\n\n/**\n * Redraw the filter\n */\nGraph3d.prototype._redrawFilter = function() {\n  this.frame.filter.innerHTML = '';\n\n  if (this.dataFilter) {\n    var options = {\n      'visible': this.showAnimationControls\n    };\n    var slider = new Slider(this.frame.filter, options);\n    this.frame.filter.slider = slider;\n\n    // TODO: css here is not nice here...\n    this.frame.filter.style.padding = '10px';\n    //this.frame.filter.style.backgroundColor = '#EFEFEF';\n\n    slider.setValues(this.dataFilter.values);\n    slider.setPlayInterval(this.animationInterval);\n\n    // create an event handler\n    var me = this;\n    var onchange = function () {\n      var index = slider.getIndex();\n\n      me.dataFilter.selectValue(index);\n      me.dataPoints = me.dataFilter._getDataPoints();\n\n      me.redraw();\n    };\n    slider.setOnChangeCallback(onchange);\n  }\n  else {\n    this.frame.filter.slider = undefined;\n  }\n};\n\n/**\n * Redraw the slider\n */\nGraph3d.prototype._redrawSlider = function() {\n  if ( this.frame.filter.slider !== undefined) {\n    this.frame.filter.slider.redraw();\n  }\n};\n\n\n/**\n * Redraw common information\n */\nGraph3d.prototype._redrawInfo = function() {\n  if (this.dataFilter) {\n    var ctx = this._getContext();\n\n    ctx.font = '14px arial'; // TODO: put in options\n    ctx.lineStyle = 'gray';\n    ctx.fillStyle = 'gray';\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'top';\n\n    var x = this.margin;\n    var y = this.margin;\n    ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y);\n  }\n};\n\n\n/**\n * Draw a line between 2d points 'from' and 'to'.\n *\n * If stroke style specified, set that as well.\n */\nGraph3d.prototype._line = function(ctx, from, to, strokeStyle) {\n  if (strokeStyle !== undefined) {\n    ctx.strokeStyle = strokeStyle;\n  }\n\n  ctx.beginPath();\n  ctx.moveTo(from.x, from.y);\n  ctx.lineTo(to.x  , to.y  );\n  ctx.stroke();\n}\n\n\nGraph3d.prototype.drawAxisLabelX = function(ctx, point3d, text, armAngle, yMargin) {\n  if (yMargin === undefined) {\n    yMargin = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n\n  if (Math.cos(armAngle * 2) > 0) {\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n    point2d.y += yMargin;\n  }\n  else if (Math.sin(armAngle * 2) < 0){\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n  }\n  else {\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n  }\n\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x, point2d.y);\n}\n\n\nGraph3d.prototype.drawAxisLabelY = function(ctx, point3d, text, armAngle, yMargin) {\n  if (yMargin === undefined) {\n    yMargin = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n\n  if (Math.cos(armAngle * 2) < 0) {\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n    point2d.y += yMargin;\n  }\n  else if (Math.sin(armAngle * 2) > 0){\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n  }\n  else {\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n  }\n\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x, point2d.y);\n}\n\n\nGraph3d.prototype.drawAxisLabelZ = function(ctx, point3d, text, offset) {\n  if (offset === undefined) {\n    offset = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n  ctx.textAlign = 'right';\n  ctx.textBaseline = 'middle';\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x - offset, point2d.y);\n};\n\n\n/**\n\n\n/**\n * Draw a line between 2d points 'from' and 'to'.\n *\n * If stroke style specified, set that as well.\n */\nGraph3d.prototype._line3d = function(ctx, from, to, strokeStyle) {\n  var from2d = this._convert3Dto2D(from);\n  var to2d   = this._convert3Dto2D(to);\n\n  this._line(ctx, from2d, to2d, strokeStyle);\n}\n\n\n/**\n * Redraw the axis\n */\nGraph3d.prototype._redrawAxis = function() {\n  var ctx = this._getContext(),\n    from, to, step, prettyStep,\n    text, xText, yText, zText,\n    offset, xOffset, yOffset;\n\n  // TODO: get the actual rendered style of the containerElement\n  //ctx.font = this.containerElement.style.font;\n  ctx.font = 24 / this.camera.getArmLength() + 'px arial';\n\n  // calculate the length for the short grid lines\n  var gridLenX   = 0.025 / this.scale.x;\n  var gridLenY   = 0.025 / this.scale.y;\n  var textMargin = 5 / this.camera.getArmLength(); // px\n  var armAngle   = this.camera.getArmRotation().horizontal;\n  var armVector  = new Point2d(Math.cos(armAngle), Math.sin(armAngle));\n\n  var xRange = this.xRange;\n  var yRange = this.yRange;\n  var zRange = this.zRange;\n\n  // draw x-grid lines\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultXStep === undefined);\n  step = new StepNumber(xRange.min, xRange.max, this.xStep, prettyStep);\n  step.start(true);\n\n  while (!step.end()) {\n    var x = step.getCurrent();\n\n    if (this.showGrid) {\n      from = new Point3d(x, yRange.min, zRange.min);\n      to   = new Point3d(x, yRange.max, zRange.min);\n      this._line3d(ctx, from, to, this.gridColor);\n    }\n    else {\n      from = new Point3d(x, yRange.min, zRange.min);\n      to   = new Point3d(x, yRange.min+gridLenX, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n\n      from = new Point3d(x, yRange.max, zRange.min);\n      to   = new Point3d(x, yRange.max-gridLenX, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n    }\n\n    yText       = (armVector.x > 0) ? yRange.min : yRange.max;\n    var point3d = new Point3d(x, yText, zRange.min);\n    var msg     = '  ' + this.xValueLabel(x) + '  ';\n    this.drawAxisLabelX(ctx, point3d, msg, armAngle, textMargin);\n\n    step.next();\n  }\n\n  // draw y-grid lines\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultYStep === undefined);\n  step = new StepNumber(yRange.min, yRange.max, this.yStep, prettyStep);\n  step.start(true);\n\n  while (!step.end()) {\n    var y = step.getCurrent();\n\n    if (this.showGrid) {\n      from = new Point3d(xRange.min, y, zRange.min);\n      to   = new Point3d(xRange.max, y, zRange.min);\n      this._line3d(ctx, from, to, this.gridColor);\n    }\n    else {\n      from = new Point3d(xRange.min, y, zRange.min);\n      to   = new Point3d(xRange.min+gridLenY, y, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n\n      from = new Point3d(xRange.max, y, zRange.min);\n      to   = new Point3d(xRange.max-gridLenY, y, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n    }\n\n    xText   = (armVector.y > 0) ? xRange.min : xRange.max;\n    point3d = new Point3d(xText, y, zRange.min);\n    var msg = '  ' + this.yValueLabel(y) + '  ';\n    this.drawAxisLabelY(ctx, point3d, msg, armAngle, textMargin);\n\n    step.next();\n  }\n\n  // draw z-grid lines and axis\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultZStep === undefined);\n  step = new StepNumber(zRange.min, zRange.max, this.zStep, prettyStep);\n  step.start(true);\n\n  xText = (armVector.x > 0) ? xRange.min : xRange.max;\n  yText = (armVector.y < 0) ? yRange.min : yRange.max;\n\n  while (!step.end()) {\n    var z = step.getCurrent();\n\n    // TODO: make z-grid lines really 3d?\n    var from3d = new Point3d(xText, yText, z);\n    var from2d = this._convert3Dto2D(from3d);\n    to = new Point2d(from2d.x - textMargin, from2d.y);\n    this._line(ctx, from2d, to, this.axisColor);\n\n    var msg = this.zValueLabel(z) + ' ';\n    this.drawAxisLabelZ(ctx, from3d, msg, 5);\n\n    step.next();\n  }\n\n  ctx.lineWidth = 1;\n  from = new Point3d(xText, yText, zRange.min);\n  to   = new Point3d(xText, yText, zRange.max);\n  this._line3d(ctx, from, to, this.axisColor);\n\n  // draw x-axis\n  var xMin2d;\n  var xMax2d;\n  ctx.lineWidth = 1;\n\n  // line at yMin\n  xMin2d = new Point3d(xRange.min, yRange.min, zRange.min);\n  xMax2d = new Point3d(xRange.max, yRange.min, zRange.min);\n  this._line3d(ctx, xMin2d, xMax2d, this.axisColor);\n  // line at ymax\n  xMin2d = new Point3d(xRange.min, yRange.max, zRange.min);\n  xMax2d = new Point3d(xRange.max, yRange.max, zRange.min);\n  this._line3d(ctx, xMin2d, xMax2d, this.axisColor);\n\n  // draw y-axis\n  ctx.lineWidth = 1;\n  // line at xMin\n  from = new Point3d(xRange.min, yRange.min, zRange.min);\n  to   = new Point3d(xRange.min, yRange.max, zRange.min);\n  this._line3d(ctx, from, to, this.axisColor);\n  // line at xMax\n  from = new Point3d(xRange.max, yRange.min, zRange.min);\n  to   = new Point3d(xRange.max, yRange.max, zRange.min);\n  this._line3d(ctx, from, to, this.axisColor);\n\n  // draw x-label\n  var xLabel = this.xLabel;\n  if (xLabel.length > 0) {\n    yOffset = 0.1 / this.scale.y;\n    xText   = (xRange.max + 3*xRange.min)/4;\n    yText   = (armVector.x > 0) ? yRange.min - yOffset: yRange.max + yOffset;\n    text    = new Point3d(xText, yText, zRange.min);\n    this.drawAxisLabelX(ctx, text, xLabel, armAngle);\n  }\n\n  // draw y-label\n  var yLabel = this.yLabel;\n  if (yLabel.length > 0) {\n    xOffset = 0.1 / this.scale.x;\n    xText   = (armVector.y > 0) ? xRange.min - xOffset : xRange.max + xOffset;\n    yText   = (yRange.max + 3*yRange.min)/4;\n    text    = new Point3d(xText, yText, zRange.min);\n\n    this.drawAxisLabelY(ctx, text, yLabel, armAngle);\n  }\n\n  // draw z-label\n  var zLabel = this.zLabel;\n  if (zLabel.length > 0) {\n    offset = 30;  // pixels.  // TODO: relate to the max width of the values on the z axis?\n    xText  = (armVector.x > 0) ? xRange.min : xRange.max;\n    yText  = (armVector.y < 0) ? yRange.min : yRange.max;\n    zText  = (zRange.max + 3*zRange.min)/4;\n    text   = new Point3d(xText, yText, zText);\n\n    this.drawAxisLabelZ(ctx, text, zLabel, offset);\n  }\n};\n\n/**\n * Calculate the color based on the given value.\n * @param {Number} H   Hue, a value be between 0 and 360\n * @param {Number} S   Saturation, a value between 0 and 1\n * @param {Number} V   Value, a value between 0 and 1\n */\nGraph3d.prototype._hsv2rgb = function(H, S, V) {\n  var R, G, B, C, Hi, X;\n\n  C = V * S;\n  Hi = Math.floor(H/60);  // hi = 0,1,2,3,4,5\n  X = C * (1 - Math.abs(((H/60) % 2) - 1));\n\n  switch (Hi) {\n    case 0: R = C; G = X; B = 0; break;\n    case 1: R = X; G = C; B = 0; break;\n    case 2: R = 0; G = C; B = X; break;\n    case 3: R = 0; G = X; B = C; break;\n    case 4: R = X; G = 0; B = C; break;\n    case 5: R = C; G = 0; B = X; break;\n\n    default: R = 0; G = 0; B = 0; break;\n  }\n\n  return 'RGB(' + parseInt(R*255) + ',' + parseInt(G*255) + ',' + parseInt(B*255) + ')';\n};\n\n\nGraph3d.prototype._getStrokeWidth = function(point) {\n  if (point !== undefined) {\n    if (this.showPerspective) {\n      return 1 / -point.trans.z * this.dataColor.strokeWidth;\n    }\n    else {\n      return -(this.eye.z / this.camera.getArmLength()) * this.dataColor.strokeWidth;\n    }\n  }\n\n  return this.dataColor.strokeWidth;\n};\n\n\n// -----------------------------------------------------------------------------\n// Drawing primitives for the graphs\n// -----------------------------------------------------------------------------\n\n\n/**\n * Draw a bar element in the view with the given properties.\n */\nGraph3d.prototype._redrawBar = function(ctx, point, xWidth, yWidth, color, borderColor) {\n  var i, j, surface;\n\n  // calculate all corner points\n  var me = this;\n  var point3d = point.point;\n  var zMin = this.zRange.min;\n  var top = [\n    {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z)},\n    {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z)}\n  ];\n  var bottom = [\n    {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, zMin)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, zMin)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, zMin)},\n    {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, zMin)}\n  ];\n\n  // calculate screen location of the points\n  top.forEach(function (obj) {\n    obj.screen = me._convert3Dto2D(obj.point);\n  });\n  bottom.forEach(function (obj) {\n    obj.screen = me._convert3Dto2D(obj.point);\n  });\n\n  // create five sides, calculate both corner points and center points\n  var surfaces = [\n    {corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point)},\n    {corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point)},\n    {corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point)},\n    {corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point)},\n    {corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point)}\n  ];\n  point.surfaces = surfaces;\n\n  // calculate the distance of each of the surface centers to the camera\n  for (j = 0; j < surfaces.length; j++) {\n    surface = surfaces[j];\n    var transCenter = this._convertPointToTranslation(surface.center);\n    surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z;\n    // TODO: this dept calculation doesn't work 100% of the cases due to perspective,\n    //     but the current solution is fast/simple and works in 99.9% of all cases\n    //     the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9})\n  }\n\n  // order the surfaces by their (translated) depth\n  surfaces.sort(function (a, b) {\n    var diff = b.dist - a.dist;\n    if (diff) return diff;\n\n    // if equal depth, sort the top surface last\n    if (a.corners === top) return 1;\n    if (b.corners === top) return -1;\n\n    // both are equal\n    return 0;\n  });\n\n  // draw the ordered surfaces\n  ctx.lineWidth = this._getStrokeWidth(point);\n  ctx.strokeStyle = borderColor;\n  ctx.fillStyle = color;\n  // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside\n  for (j = 2; j < surfaces.length; j++) {\n    surface = surfaces[j];\n    this._polygon(ctx, surface.corners);\n  }\n};\n\n\n/**\n * Draw a polygon using the passed points and fill it with the passed style and stroke.\n *\n * @param points      an array of points.\n * @param fillStyle   optional; the fill style to set\n * @param strokeStyle optional; the stroke style to set\n */\nGraph3d.prototype._polygon = function(ctx, points, fillStyle, strokeStyle) {\n  if (points.length < 2) {\n    return;\n  }\n\n  if (fillStyle !== undefined) {\n    ctx.fillStyle   = fillStyle;\n  }\n  if (strokeStyle !== undefined) {\n    ctx.strokeStyle = strokeStyle;\n  }\n  ctx.beginPath();\n  ctx.moveTo(points[0].screen.x, points[0].screen.y);\n\n  for (var i = 1; i < points.length; ++i) {\n    var point = points[i];\n    ctx.lineTo(point.screen.x, point.screen.y);\n  }\n\n  ctx.closePath();\n  ctx.fill();\n  ctx.stroke(); // TODO: only draw stroke when strokeWidth > 0\n};\n\n\n/**\n * @param size optional; if not specified use value from 'this._dotSize()`\n */\nGraph3d.prototype._drawCircle = function(ctx, point, color, borderColor, size) {\n  var radius = this._calcRadius(point, size);\n\n  ctx.lineWidth   = this._getStrokeWidth(point);\n  ctx.strokeStyle = borderColor;\n  ctx.fillStyle   = color;\n  ctx.beginPath();\n  ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI*2, true);\n  ctx.fill();\n  ctx.stroke();\n};\n\n\n/**\n * Determine the colors for the 'regular' graph styles.\n */\nGraph3d.prototype._getColorsRegular = function(point) {\n  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n  var hue         = (1 - (point.point.z - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n  var color       = this._hsv2rgb(hue, 1, 1);\n  var borderColor = this._hsv2rgb(hue, 1, 0.8);\n\n  return {\n    fill  : color,\n    border: borderColor\n  };\n};\n\n\n/**\n * Get the colors for the 'color' graph styles.\n * These styles are currently: 'bar-color' and 'dot-color'\n * Color may be set as a string representation of HTML color, like #ff00ff,\n * or calculated from a number, for example, distance from this point\n * The first option is useful when we have some pre-given legend, to which we have to adjust ourselves\n * The second option is useful when we are interested in automatically setting the color, from some value,\n * using some color scale\n */\nGraph3d.prototype._getColorsColor = function(point) {\n  // calculate the color based on the value\n  var color, borderColor;\n\n  if (typeof point.point.value === \"string\") {\n    color = point.point.value;\n    borderColor = point.point.value;\n  }\n  else {\n    var hue     = (1 - (point.point.value - this.valueRange.min) * this.scale.value) * 240;\n    color       = this._hsv2rgb(hue, 1, 1);\n    borderColor = this._hsv2rgb(hue, 1, 0.8);\n  }\n  return {\n    fill   : color,\n    border : borderColor\n  };\n};\n\n\n/**\n * Get the colors for the 'size' graph styles.\n * These styles are currently: 'bar-size' and 'dot-size'\n */\nGraph3d.prototype._getColorsSize = function() {\n  return {\n    fill   : this.dataColor.fill,\n    border : this.dataColor.stroke\n  };\n};\n\n\n/**\n * Determine the size of a point on-screen, as determined by the\n * distance to the camera.\n *\n * @param size the size that needs to be translated to screen coordinates.\n *             optional; if not passed, use the default point size.\n */\nGraph3d.prototype._calcRadius = function(point, size) {\n  if (size === undefined) {\n    size = this._dotSize();\n  }\n\n  var radius;\n  if (this.showPerspective) {\n    radius = size / -point.trans.z;\n  }\n  else {\n    radius = size * -(this.eye.z / this.camera.getArmLength());\n  }\n  if (radius < 0) {\n    radius = 0;\n  }\n\n  return radius;\n};\n\n\n// -----------------------------------------------------------------------------\n// Methods for drawing points per graph style.\n// -----------------------------------------------------------------------------\n\n\n/**\n * Draw single datapoint for graph style 'bar'.\n */\nGraph3d.prototype._redrawBarGraphPoint = function(ctx, point) {\n  var xWidth = this.xBarWidth / 2;\n  var yWidth = this.yBarWidth / 2;\n  var colors = this._getColorsRegular(point);\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'bar-color'.\n */\nGraph3d.prototype._redrawBarColorGraphPoint = function(ctx, point) {\n  var xWidth = this.xBarWidth / 2;\n  var yWidth = this.yBarWidth / 2;\n  var colors = this._getColorsColor(point);\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'bar-size'.\n */\nGraph3d.prototype._redrawBarSizeGraphPoint = function(ctx, point) {\n  // calculate size for the bar\n  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();\n  var xWidth   = (this.xBarWidth / 2) * (fraction * 0.8 + 0.2);\n  var yWidth   = (this.yBarWidth / 2) * (fraction * 0.8 + 0.2);\n\n  var colors   = this._getColorsSize();\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot'.\n */\nGraph3d.prototype._redrawDotGraphPoint = function(ctx, point) {\n  var colors = this._getColorsRegular(point);\n\n  this._drawCircle(ctx, point, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-line'.\n */\nGraph3d.prototype._redrawDotLineGraphPoint = function(ctx, point) {\n  // draw a vertical line from the XY-plane to the graph value\n  var from = this._convert3Dto2D(point.bottom);\n  ctx.lineWidth = 1;\n  this._line(ctx, from, point.screen, this.gridColor);\n\n  this._redrawDotGraphPoint(ctx, point);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-color'.\n */\nGraph3d.prototype._redrawDotColorGraphPoint = function(ctx, point) {\n  var colors = this._getColorsColor(point);\n\n  this._drawCircle(ctx, point, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-size'.\n */\nGraph3d.prototype._redrawDotSizeGraphPoint = function(ctx, point) {\n  var dotSize  = this._dotSize();\n  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();\n  var size     = dotSize/2 + 2*dotSize * fraction;\n  var colors   = this._getColorsSize();\n\n  this._drawCircle(ctx, point, colors.fill, colors.border, size);\n};\n\n\n/**\n * Draw single datapoint for graph style 'surface'.\n */\nGraph3d.prototype._redrawSurfaceGraphPoint = function(ctx, point) {\n  var right = point.pointRight;\n  var top   = point.pointTop;\n  var cross = point.pointCross;\n\n  if (point === undefined || right === undefined || top === undefined || cross === undefined) {\n    return;\n  }\n\n  var topSideVisible = true;\n  var fillStyle;\n  var strokeStyle;\n  var lineWidth;\n\n  if (this.showGrayBottom || this.showShadow) {\n    // calculate the cross product of the two vectors from center\n    // to left and right, in order to know whether we are looking at the\n    // bottom or at the top side. We can also use the cross product\n    // for calculating light intensity\n    var aDiff = Point3d.subtract(cross.trans, point.trans);\n    var bDiff = Point3d.subtract(top.trans, right.trans);\n    var crossproduct = Point3d.crossProduct(aDiff, bDiff);\n    var len = crossproduct.length();\n    // FIXME: there is a bug with determining the surface side (shadow or colored)\n\n    topSideVisible = (crossproduct.z > 0);\n  }\n\n  if (topSideVisible) {\n\n    // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n    var zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4;\n    var h    = (1 - (zAvg - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n    var s    = 1; // saturation\n    var v;\n\n    if (this.showShadow) {\n      v = Math.min(1 + (crossproduct.x / len) / 2, 1);  // value. TODO: scale\n      fillStyle = this._hsv2rgb(h, s, v);\n      strokeStyle = fillStyle;\n    }\n    else  {\n      v = 1;\n      fillStyle = this._hsv2rgb(h, s, v);\n      strokeStyle = this.axisColor; // TODO: should be customizable\n    }\n  }\n  else {\n    fillStyle = 'gray';\n    strokeStyle = this.axisColor;\n  }\n\n  ctx.lineWidth = this._getStrokeWidth(point);\n  // TODO: only draw stroke when strokeWidth > 0\n\n  var points = [point, right, cross, top];\n  this._polygon(ctx, points, fillStyle, strokeStyle);\n};\n\n\n/**\n * Helper method for _redrawGridGraphPoint()\n */\nGraph3d.prototype._drawGridLine = function(ctx, from, to) {\n  if (from === undefined || to === undefined) {\n     return;\n  }\n\n  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n  var zAvg = (from.point.z + to.point.z) / 2;\n  var h    = (1 - (zAvg - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n\n  ctx.lineWidth   = this._getStrokeWidth(from) * 2;\n  ctx.strokeStyle = this._hsv2rgb(h, 1, 1);\n  this._line(ctx, from.screen, to.screen);\n};\n\n\n/**\n * Draw single datapoint for graph style 'Grid'.\n */\nGraph3d.prototype._redrawGridGraphPoint = function(ctx, point) {\n  this._drawGridLine(ctx, point, point.pointRight);\n  this._drawGridLine(ctx, point, point.pointTop);\n};\n\n\n/**\n * Draw single datapoint for graph style 'line'.\n */\nGraph3d.prototype._redrawLineGraphPoint = function(ctx, point) {\n  if (point.pointNext === undefined) {\n    return;\n  }\n\n  ctx.lineWidth   = this._getStrokeWidth(point);\n  ctx.strokeStyle = this.dataColor.stroke;\n\n  this._line(ctx, point.screen, point.pointNext.screen);\n};\n\n\n/**\n * Draw all datapoints for currently selected graph style.\n *\n */\nGraph3d.prototype._redrawDataGraph = function() {\n  var ctx = this._getContext();\n  var i;\n\n  if (this.dataPoints === undefined || this.dataPoints.length <= 0)\n    return;  // TODO: throw exception?\n\n  this._calcTranslations(this.dataPoints);\n\n  for (i = 0; i < this.dataPoints.length; i++) {\n    var point = this.dataPoints[i];\n\n    // Using call() ensures that the correct context is used\n    this._pointDrawingMethod.call(this, ctx, point);\n  }\n};\n\n\n// -----------------------------------------------------------------------------\n// End methods for drawing points per graph style.\n// -----------------------------------------------------------------------------\n\n/**\n * Store startX, startY and startOffset for mouse operations\n *\n * @param {Event}     event     The event that occurred\n */\nGraph3d.prototype._storeMousePosition = function(event) {\n  // get mouse position (different code for IE and all other browsers)\n  this.startMouseX = getMouseX(event);\n  this.startMouseY = getMouseY(event);\n\n  this._startCameraOffset = this.camera.getOffset();\n};\n\n\n/**\n * Start a moving operation inside the provided parent element\n * @param {Event}     event     The event that occurred (required for\n *                  retrieving the  mouse position)\n */\nGraph3d.prototype._onMouseDown = function(event) {\n  event = event || window.event;\n\n  // check if mouse is still down (may be up when focus is lost for example\n  // in an iframe)\n  if (this.leftButtonDown) {\n    this._onMouseUp(event);\n  }\n\n  // only react on left mouse button down\n  this.leftButtonDown = event.which ? (event.which === 1) : (event.button === 1);\n  if (!this.leftButtonDown && !this.touchDown) return;\n\n  this._storeMousePosition(event);\n\n  this.startStart = new Date(this.start);\n  this.startEnd = new Date(this.end);\n  this.startArmRotation = this.camera.getArmRotation();\n\n  this.frame.style.cursor = 'move';\n\n  // add event listeners to handle moving the contents\n  // we store the function onmousemove and onmouseup in the graph, so we can\n  // remove the eventlisteners lateron in the function mouseUp()\n  var me = this;\n  this.onmousemove = function (event) {me._onMouseMove(event);};\n  this.onmouseup   = function (event) {me._onMouseUp(event);};\n  util.addEventListener(document, 'mousemove', me.onmousemove);\n  util.addEventListener(document, 'mouseup', me.onmouseup);\n  util.preventDefault(event);\n};\n\n\n/**\n * Perform moving operating.\n * This function activated from within the funcion Graph.mouseDown().\n * @param {Event}   event  Well, eehh, the event\n */\nGraph3d.prototype._onMouseMove = function (event) {\n  this.moving = true;\n  event = event || window.event;\n\n  // calculate change in mouse position\n  var diffX = parseFloat(getMouseX(event)) - this.startMouseX;\n  var diffY = parseFloat(getMouseY(event)) - this.startMouseY;\n\n  // move with ctrl or rotate by other\n  if (event && event.ctrlKey === true) {\n      // calculate change in mouse position\n      var scaleX = this.frame.clientWidth  * 0.5;\n      var scaleY = this.frame.clientHeight * 0.5;\n\n      var offXNew = (this._startCameraOffset.x || 0) - ((diffX / scaleX) * this.camera.armLength) * 0.8;\n      var offYNew = (this._startCameraOffset.y || 0) + ((diffY / scaleY) * this.camera.armLength) * 0.8;\n\n      this.camera.setOffset(offXNew, offYNew);\n      this._storeMousePosition(event);\n    } else {\n      var horizontalNew = this.startArmRotation.horizontal + diffX / 200;\n      var verticalNew   = this.startArmRotation.vertical   + diffY / 200;\n\n      var snapAngle = 4; // degrees\n      var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI);\n\n      // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc...\n      // the -0.001 is to take care that the vertical axis is always drawn at the left front corner\n      if (Math.abs(Math.sin(horizontalNew)) < snapValue) {\n          horizontalNew = Math.round(horizontalNew / Math.PI) * Math.PI - 0.001;\n      }\n      if (Math.abs(Math.cos(horizontalNew)) < snapValue) {\n          horizontalNew = (Math.round(horizontalNew / Math.PI - 0.5) + 0.5) * Math.PI - 0.001;\n      }\n\n      // snap vertically to nice angles\n      if (Math.abs(Math.sin(verticalNew)) < snapValue) {\n          verticalNew = Math.round(verticalNew / Math.PI) * Math.PI;\n      }\n      if (Math.abs(Math.cos(verticalNew)) < snapValue) {\n          verticalNew = (Math.round(verticalNew / Math.PI - 0.5) + 0.5) * Math.PI;\n      }\n      this.camera.setArmRotation(horizontalNew, verticalNew);\n  }\n\n  this.redraw();\n\n  // fire a cameraPositionChange event\n  var parameters = this.getCameraPosition();\n  this.emit('cameraPositionChange', parameters);\n\n  util.preventDefault(event);\n};\n\n\n/**\n * Stop moving operating.\n * This function activated from within the funcion Graph.mouseDown().\n * @param {event}  event   The event\n */\nGraph3d.prototype._onMouseUp = function (event) {\n  this.frame.style.cursor = 'auto';\n  this.leftButtonDown = false;\n\n  // remove event listeners here\n  util.removeEventListener(document, 'mousemove', this.onmousemove);\n  util.removeEventListener(document, 'mouseup',   this.onmouseup);\n  util.preventDefault(event);\n};\n\n/**\n * @param {event}  event   The event\n */\nGraph3d.prototype._onClick = function (event) {\n  if (!this.onclick_callback)\n    return;\n  if (!this.moving) {\n    var boundingRect = this.frame.getBoundingClientRect();\n    var mouseX = getMouseX(event) - boundingRect.left;\n    var mouseY = getMouseY(event) - boundingRect.top;\n    var dataPoint = this._dataPointFromXY(mouseX, mouseY);\n    if (dataPoint)\n        this.onclick_callback(dataPoint.point.data);\n  }\n  else { // disable onclick callback, if it came immediately after rotate/pan\n    this.moving = false;\n  }\n  util.preventDefault(event);\n};\n\n/**\n * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point\n * @param {Event}  event   A mouse move event\n */\nGraph3d.prototype._onTooltip = function (event) {\n  var delay = 300; // ms\n  var boundingRect = this.frame.getBoundingClientRect();\n  var mouseX = getMouseX(event) - boundingRect.left;\n  var mouseY = getMouseY(event) - boundingRect.top;\n\n  if (!this.showTooltip) {\n    return;\n  }\n\n  if (this.tooltipTimeout) {\n    clearTimeout(this.tooltipTimeout);\n  }\n\n  // (delayed) display of a tooltip only if no mouse button is down\n  if (this.leftButtonDown) {\n    this._hideTooltip();\n    return;\n  }\n\n  if (this.tooltip && this.tooltip.dataPoint) {\n    // tooltip is currently visible\n    var dataPoint = this._dataPointFromXY(mouseX, mouseY);\n    if (dataPoint !== this.tooltip.dataPoint) {\n      // datapoint changed\n      if (dataPoint) {\n        this._showTooltip(dataPoint);\n      }\n      else {\n        this._hideTooltip();\n      }\n    }\n  }\n  else {\n    // tooltip is currently not visible\n    var me = this;\n    this.tooltipTimeout = setTimeout(function () {\n      me.tooltipTimeout = null;\n\n      // show a tooltip if we have a data point\n      var dataPoint = me._dataPointFromXY(mouseX, mouseY);\n      if (dataPoint) {\n        me._showTooltip(dataPoint);\n      }\n    }, delay);\n  }\n};\n\n/**\n * Event handler for touchstart event on mobile devices\n */\nGraph3d.prototype._onTouchStart = function(event) {\n  this.touchDown = true;\n\n  var me = this;\n  this.ontouchmove = function (event) {me._onTouchMove(event);};\n  this.ontouchend  = function (event) {me._onTouchEnd(event);};\n  util.addEventListener(document, 'touchmove', me.ontouchmove);\n  util.addEventListener(document, 'touchend', me.ontouchend);\n\n  this._onMouseDown(event);\n};\n\n/**\n * Event handler for touchmove event on mobile devices\n */\nGraph3d.prototype._onTouchMove = function(event) {\n  this._onMouseMove(event);\n};\n\n/**\n * Event handler for touchend event on mobile devices\n */\nGraph3d.prototype._onTouchEnd = function(event) {\n  this.touchDown = false;\n\n  util.removeEventListener(document, 'touchmove', this.ontouchmove);\n  util.removeEventListener(document, 'touchend',   this.ontouchend);\n\n  this._onMouseUp(event);\n};\n\n\n/**\n * Event handler for mouse wheel event, used to zoom the graph\n * Code from http://adomas.org/javascript-mouse-wheel/\n * @param {event}  event   The event\n */\nGraph3d.prototype._onWheel = function(event) {\n  if (!event) /* For IE. */\n    event = window.event;\n\n  // retrieve delta\n  var delta = 0;\n  if (event.wheelDelta) { /* IE/Opera. */\n    delta = event.wheelDelta/120;\n  } else if (event.detail) { /* Mozilla case. */\n    // In Mozilla, sign of delta is different than in IE.\n    // Also, delta is multiple of 3.\n    delta = -event.detail/3;\n  }\n\n  // If delta is nonzero, handle it.\n  // Basically, delta is now positive if wheel was scrolled up,\n  // and negative, if wheel was scrolled down.\n  if (delta) {\n    var oldLength = this.camera.getArmLength();\n    var newLength = oldLength * (1 - delta / 10);\n\n    this.camera.setArmLength(newLength);\n    this.redraw();\n\n    this._hideTooltip();\n  }\n\n  // fire a cameraPositionChange event\n  var parameters = this.getCameraPosition();\n  this.emit('cameraPositionChange', parameters);\n\n  // Prevent default actions caused by mouse wheel.\n  // That might be ugly, but we handle scrolls somehow\n  // anyway, so don't bother here..\n  util.preventDefault(event);\n};\n\n/**\n * Test whether a point lies inside given 2D triangle\n *\n * @param   {Point2d}   point\n * @param   {Point2d[]} triangle\n * @returns {boolean}   true if given point lies inside or on the edge of the\n *                      triangle, false otherwise\n * @private\n */\nGraph3d.prototype._insideTriangle = function (point, triangle) {\n  var a = triangle[0],\n    b = triangle[1],\n    c = triangle[2];\n\n  function sign (x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  }\n\n  var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x));\n  var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x));\n  var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x));\n\n  // each of the three signs must be either equal to each other or zero\n  return (as == 0 || bs == 0 || as == bs) &&\n    (bs == 0 || cs == 0 || bs == cs) &&\n    (as == 0 || cs == 0 || as == cs);\n};\n\n/**\n * Find a data point close to given screen position (x, y)\n *\n * @param   {Number} x\n * @param   {Number} y\n * @returns {Object | null} The closest data point or null if not close to any\n *                          data point\n * @private\n */\nGraph3d.prototype._dataPointFromXY = function (x, y) {\n  var i,\n    distMax = 100, // px\n    dataPoint = null,\n    closestDataPoint = null,\n    closestDist = null,\n    center = new Point2d(x, y);\n\n  if (this.style === Graph3d.STYLE.BAR ||\n    this.style === Graph3d.STYLE.BARCOLOR ||\n    this.style === Graph3d.STYLE.BARSIZE) {\n    // the data points are ordered from far away to closest\n    for (i = this.dataPoints.length - 1; i >= 0; i--) {\n      dataPoint = this.dataPoints[i];\n      var surfaces  = dataPoint.surfaces;\n      if (surfaces) {\n        for (var s = surfaces.length - 1; s >= 0; s--) {\n          // split each surface in two triangles, and see if the center point is inside one of these\n          var surface = surfaces[s];\n          var corners = surface.corners;\n          var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen];\n          var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen];\n          if (this._insideTriangle(center, triangle1) ||\n            this._insideTriangle(center, triangle2)) {\n            // return immediately at the first hit\n            return dataPoint;\n          }\n        }\n      }\n    }\n  }\n  else {\n    // find the closest data point, using distance to the center of the point on 2d screen\n    for (i = 0; i < this.dataPoints.length; i++) {\n      dataPoint = this.dataPoints[i];\n      var point = dataPoint.screen;\n      if (point) {\n        var distX = Math.abs(x - point.x);\n        var distY = Math.abs(y - point.y);\n        var dist  = Math.sqrt(distX * distX + distY * distY);\n\n        if ((closestDist === null || dist < closestDist) && dist < distMax) {\n          closestDist = dist;\n          closestDataPoint = dataPoint;\n        }\n      }\n    }\n  }\n\n\n  return closestDataPoint;\n};\n\n/**\n * Display a tooltip for given data point\n * @param {Object} dataPoint\n * @private\n */\nGraph3d.prototype._showTooltip = function (dataPoint) {\n  var content, line, dot;\n\n  if (!this.tooltip) {\n    content = document.createElement('div');\n    content.style.position = 'absolute';\n    content.style.padding = '10px';\n    content.style.border = '1px solid #4d4d4d';\n    content.style.color = '#1a1a1a';\n    content.style.background = 'rgba(255,255,255,0.7)';\n    content.style.borderRadius = '2px';\n    content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)';\n\n    line = document.createElement('div');\n    line.style.position = 'absolute';\n    line.style.height = '40px';\n    line.style.width = '0';\n    line.style.borderLeft = '1px solid #4d4d4d';\n\n    dot = document.createElement('div');\n    dot.style.position = 'absolute';\n    dot.style.height = '0';\n    dot.style.width = '0';\n    dot.style.border = '5px solid #4d4d4d';\n    dot.style.borderRadius = '5px';\n\n    this.tooltip = {\n      dataPoint: null,\n      dom: {\n        content: content,\n        line: line,\n        dot: dot\n      }\n    };\n  }\n  else {\n    content = this.tooltip.dom.content;\n    line  = this.tooltip.dom.line;\n    dot   = this.tooltip.dom.dot;\n  }\n\n  this._hideTooltip();\n\n  this.tooltip.dataPoint = dataPoint;\n  if (typeof this.showTooltip === 'function') {\n    content.innerHTML = this.showTooltip(dataPoint.point);\n  }\n  else {\n    content.innerHTML = '<table>' +\n      '<tr><td>' + this.xLabel + ':</td><td>' + dataPoint.point.x + '</td></tr>' +\n      '<tr><td>' + this.yLabel + ':</td><td>' + dataPoint.point.y + '</td></tr>' +\n      '<tr><td>' + this.zLabel + ':</td><td>' + dataPoint.point.z + '</td></tr>' +\n      '</table>';\n  }\n\n  content.style.left  = '0';\n  content.style.top   = '0';\n  this.frame.appendChild(content);\n  this.frame.appendChild(line);\n  this.frame.appendChild(dot);\n\n  // calculate sizes\n  var contentWidth  = content.offsetWidth;\n  var contentHeight   = content.offsetHeight;\n  var lineHeight    = line.offsetHeight;\n  var dotWidth    = dot.offsetWidth;\n  var dotHeight     = dot.offsetHeight;\n\n  var left = dataPoint.screen.x - contentWidth / 2;\n  left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth);\n\n  line.style.left   = dataPoint.screen.x + 'px';\n  line.style.top    = (dataPoint.screen.y - lineHeight) + 'px';\n  content.style.left  = left + 'px';\n  content.style.top   = (dataPoint.screen.y - lineHeight - contentHeight) + 'px';\n  dot.style.left    = (dataPoint.screen.x - dotWidth / 2) + 'px';\n  dot.style.top     = (dataPoint.screen.y - dotHeight / 2) + 'px';\n};\n\n/**\n * Hide the tooltip when displayed\n * @private\n */\nGraph3d.prototype._hideTooltip = function () {\n  if (this.tooltip) {\n    this.tooltip.dataPoint = null;\n\n    for (var prop in this.tooltip.dom) {\n      if (this.tooltip.dom.hasOwnProperty(prop)) {\n        var elem = this.tooltip.dom[prop];\n        if (elem && elem.parentNode) {\n          elem.parentNode.removeChild(elem);\n        }\n      }\n    }\n  }\n};\n\n/**--------------------------------------------------------------------------**/\n\n\n/**\n * Get the horizontal mouse position from a mouse event\n *\n * @param   {Event}  event\n * @returns {Number} mouse x\n */\nfunction getMouseX (event) {\n  if ('clientX' in event) return event.clientX;\n  return event.targetTouches[0] && event.targetTouches[0].clientX || 0;\n}\n\n/**\n * Get the vertical mouse position from a mouse event\n *\n * @param   {Event}  event\n * @returns {Number} mouse y\n */\nfunction getMouseY (event) {\n  if ('clientY' in event) return event.clientY;\n  return event.targetTouches[0] && event.targetTouches[0].clientY || 0;\n}\n\n\n// -----------------------------------------------------------------------------\n//  Public methods for specific settings\n// -----------------------------------------------------------------------------\n\n/**\n * Set the rotation and distance of the camera\n *\n * @param {Object}  pos            An object with the camera position\n * @param {?Number} pos.horizontal The horizontal rotation, between 0 and 2*PI.\n *                                 Optional, can be left undefined.\n * @param {?Number} pos.vertical   The vertical rotation, between 0 and 0.5*PI.\n *                                 if vertical=0.5*PI, the graph is shown from\n *                                 the top. Optional, can be left undefined.\n * @param {?Number} pos.distance   The (normalized) distance of the camera to the\n *                                 center of the graph, a value between 0.71 and\n *                                 5.0. Optional, can be left undefined.\n */\nGraph3d.prototype.setCameraPosition = function(pos) {\n  Settings.setCameraPosition(pos, this);\n  this.redraw();\n};\n\n\n/**\n * Set a new size for the graph\n *\n * @param {string} width  Width in pixels or percentage (for example '800px'\n *                        or '50%')\n * @param {string} height Height in pixels or percentage  (for example '400px'\n *                        or '30%')\n */\nGraph3d.prototype.setSize = function(width, height) {\n\tthis._setSize(width, height);\n\tthis.redraw();\n};\n\n// -----------------------------------------------------------------------------\n//  End public methods for specific settings\n// -----------------------------------------------------------------------------\n\n\nmodule.exports = Graph3d;\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Graph3d.js","\n/**\n * Expose `Emitter`.\n */\n\nmodule.exports = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks[event] = this._callbacks[event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  var self = this;\n  this._callbacks = this._callbacks || {};\n\n  function on() {\n    self.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks[event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks[event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n  var args = [].slice.call(arguments, 1)\n    , callbacks = this._callbacks[event];\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks[event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/emitter-component/index.js\n// module id = 95\n// module chunks = 0","/**\n * @prototype Point3d\n * @param {Number} [x]\n * @param {Number} [y]\n * @param {Number} [z]\n */\nfunction Point3d(x, y, z) {\n  this.x = x !== undefined ? x : 0;\n  this.y = y !== undefined ? y : 0;\n  this.z = z !== undefined ? z : 0;\n};\n\n/**\n * Subtract the two provided points, returns a-b\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} a-b\n */\nPoint3d.subtract = function(a, b) {\n  var sub = new Point3d();\n  sub.x = a.x - b.x;\n  sub.y = a.y - b.y;\n  sub.z = a.z - b.z;\n  return sub;\n};\n\n/**\n * Add the two provided points, returns a+b\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} a+b\n */\nPoint3d.add = function(a, b) {\n  var sum = new Point3d();\n  sum.x = a.x + b.x;\n  sum.y = a.y + b.y;\n  sum.z = a.z + b.z;\n  return sum;\n};\n\n/**\n * Calculate the average of two 3d points\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} The average, (a+b)/2\n */\nPoint3d.avg = function(a, b) {\n  return new Point3d(\n          (a.x + b.x) / 2,\n          (a.y + b.y) / 2,\n          (a.z + b.z) / 2\n  );\n};\n\n/**\n * Calculate the cross product of the two provided points, returns axb\n * Documentation: http://en.wikipedia.org/wiki/Cross_product\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} cross product axb\n */\nPoint3d.crossProduct = function(a, b) {\n  var crossproduct = new Point3d();\n\n  crossproduct.x = a.y * b.z - a.z * b.y;\n  crossproduct.y = a.z * b.x - a.x * b.z;\n  crossproduct.z = a.x * b.y - a.y * b.x;\n\n  return crossproduct;\n};\n\n\n/**\n * Rtrieve the length of the vector (or the distance from this point to the origin\n * @return {Number}  length\n */\nPoint3d.prototype.length = function() {\n  return Math.sqrt(\n          this.x * this.x +\n          this.y * this.y +\n          this.z * this.z\n  );\n};\n\nmodule.exports = Point3d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Point3d.js","/**\n * @prototype Point2d\n * @param {Number} [x]\n * @param {Number} [y]\n */\nfunction Point2d (x, y) {\n  this.x = x !== undefined ? x : 0;\n  this.y = y !== undefined ? y : 0;\n}\n\nmodule.exports = Point2d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Point2d.js","var Point3d = require('./Point3d');\n\n/**\n * @class Camera\n * The camera is mounted on a (virtual) camera arm. The camera arm can rotate\n * The camera is always looking in the direction of the origin of the arm.\n * This way, the camera always rotates around one fixed point, the location\n * of the camera arm.\n *\n * Documentation:\n *   http://en.wikipedia.org/wiki/3D_projection\n */\nfunction Camera() {\n  this.armLocation = new Point3d();\n  this.armRotation = {};\n  this.armRotation.horizontal = 0;\n  this.armRotation.vertical = 0;\n  this.armLength = 1.7;\n  this.cameraOffset = new Point3d();\n  this.offsetMultiplier = 0.6;\n\n  this.cameraLocation = new Point3d();\n  this.cameraRotation =  new Point3d(0.5*Math.PI, 0, 0);\n\n  this.calculateCameraOrientation();\n}\n\n/**\n * Set offset camera in camera coordinates\n * @param {Number} x offset by camera horisontal\n * @param {Number} y offset by camera vertical\n */\nCamera.prototype.setOffset = function(x, y) {\n  var abs = Math.abs,\n      sign = Math.sign,\n      mul = this.offsetMultiplier,\n      border = this.armLength * mul;\n\n  if (abs(x) > border) {\n      x = sign(x) * border;\n  }\n  if (abs(y) > border) {\n      y = sign(y) * border;\n  }\n  this.cameraOffset.x = x;\n  this.cameraOffset.y = y;\n  this.calculateCameraOrientation();\n};\n\n/**\n * Get camera offset by horizontal and vertical\n * @return {Point3d} x - horizontal offset, y - vertical offset, z - not used\n */\nCamera.prototype.getOffset = function(x, y) {\n  return this.cameraOffset;\n};\n\n/**\n * Set the location (origin) of the arm\n * @param {Number} x  Normalized value of x\n * @param {Number} y  Normalized value of y\n * @param {Number} z  Normalized value of z\n */\nCamera.prototype.setArmLocation = function(x, y, z) {\n  this.armLocation.x = x;\n  this.armLocation.y = y;\n  this.armLocation.z = z;\n\n  this.calculateCameraOrientation();\n};\n\n/**\n * Set the rotation of the camera arm\n * @param {Number} horizontal   The horizontal rotation, between 0 and 2*PI.\n *                Optional, can be left undefined.\n * @param {Number} vertical   The vertical rotation, between 0 and 0.5*PI\n *                if vertical=0.5*PI, the graph is shown from the\n *                top. Optional, can be left undefined.\n */\nCamera.prototype.setArmRotation = function(horizontal, vertical) {\n  if (horizontal !== undefined) {\n    this.armRotation.horizontal = horizontal;\n  }\n\n  if (vertical !== undefined) {\n    this.armRotation.vertical = vertical;\n    if (this.armRotation.vertical < 0) this.armRotation.vertical = 0;\n    if (this.armRotation.vertical > 0.5*Math.PI) this.armRotation.vertical = 0.5*Math.PI;\n  }\n\n  if (horizontal !== undefined || vertical !== undefined) {\n    this.calculateCameraOrientation();\n  }\n};\n\n/**\n * Retrieve the current arm rotation\n * @return {object}   An object with parameters horizontal and vertical\n */\nCamera.prototype.getArmRotation = function() {\n  var rot = {};\n  rot.horizontal = this.armRotation.horizontal;\n  rot.vertical = this.armRotation.vertical;\n\n  return rot;\n};\n\n/**\n * Set the (normalized) length of the camera arm.\n * @param {Number} length A length between 0.71 and 5.0\n */\nCamera.prototype.setArmLength = function(length) {\n  if (length === undefined)\n    return;\n\n  this.armLength = length;\n\n  // Radius must be larger than the corner of the graph,\n  // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the\n  // graph\n  if (this.armLength < 0.71) this.armLength = 0.71;\n  if (this.armLength > 5.0) this.armLength = 5.0;\n\n  this.setOffset(this.cameraOffset.x, this.cameraOffset.y);\n  this.calculateCameraOrientation();\n};\n\n/**\n * Retrieve the arm length\n * @return {Number} length\n */\nCamera.prototype.getArmLength = function() {\n  return this.armLength;\n};\n\n/**\n * Retrieve the camera location\n * @return {Point3d} cameraLocation\n */\nCamera.prototype.getCameraLocation = function() {\n  return this.cameraLocation;\n};\n\n/**\n * Retrieve the camera rotation\n * @return {Point3d} cameraRotation\n */\nCamera.prototype.getCameraRotation = function() {\n  return this.cameraRotation;\n};\n\n/**\n * Calculate the location and rotation of the camera based on the\n * position and orientation of the camera arm\n */\nCamera.prototype.calculateCameraOrientation = function() {\n  // calculate location of the camera\n  this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);\n  this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);\n  this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical);\n\n  // calculate rotation of the camera\n  this.cameraRotation.x = Math.PI/2 - this.armRotation.vertical;\n  this.cameraRotation.y = 0;\n  this.cameraRotation.z = -this.armRotation.horizontal;\n\n  var xa = this.cameraRotation.x;\n  var ya = this.cameraRotation.y;\n  var za = this.cameraRotation.z;\n  var dx = this.cameraOffset.x;\n  var dy = this.cameraOffset.y;\n  var sin = Math.sin, cos = Math.cos;\n\n  this.cameraLocation.x = this.cameraLocation.x + dx * cos(za) + dy * - sin(za) * cos(xa);\n  this.cameraLocation.y = this.cameraLocation.y + dx * sin(za) + dy * cos(za) * cos(xa);\n  this.cameraLocation.z = this.cameraLocation.z + dy * sin(xa);\n};\n\nmodule.exports = Camera;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Camera.js","module.exports = { \"default\": require(\"core-js/library/fn/math/sign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/math/sign.js\n// module id = 99\n// module chunks = 0","require('../../modules/es6.math.sign');\nmodule.exports = require('../../modules/_core').Math.sign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/math/sign.js\n// module id = 100\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.math.sign.js\n// module id = 101\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_math-sign.js\n// module id = 102\n// module chunks = 0","var DataView = require('../DataView');\n\n/**\n * @class Filter\n *\n * @param {DataSet} data The google data table\n * @param {Number}  column             The index of the column to be filtered\n * @param {Graph} graph           The graph\n */\nfunction Filter (data, column, graph) {\n  this.data = data;\n  this.column = column;\n  this.graph = graph; // the parent graph\n\n  this.index = undefined;\n  this.value = undefined;\n\n  // read all distinct values and select the first one\n  this.values = graph.getDistinctValues(data.get(), this.column);\n\n  // sort both numeric and string values correctly\n  this.values.sort(function (a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  });\n\n  if (this.values.length > 0) {\n    this.selectValue(0);\n  }\n\n  // create an array with the filtered datapoints. this will be loaded afterwards\n  this.dataPoints = [];\n\n  this.loaded = false;\n  this.onLoadCallback = undefined;\n\n  if (graph.animationPreload) {\n    this.loaded = false;\n    this.loadInBackground();\n  }\n  else {\n    this.loaded = true;\n  }\n};\n\n\n/**\n * Return the label\n * @return {string} label\n */\nFilter.prototype.isLoaded = function() {\n  return this.loaded;\n};\n\n\n/**\n * Return the loaded progress\n * @return {Number} percentage between 0 and 100\n */\nFilter.prototype.getLoadedProgress = function() {\n  var len = this.values.length;\n\n  var i = 0;\n  while (this.dataPoints[i]) {\n    i++;\n  }\n\n  return Math.round(i / len * 100);\n};\n\n\n/**\n * Return the label\n * @return {string} label\n */\nFilter.prototype.getLabel = function() {\n  return this.graph.filterLabel;\n};\n\n\n/**\n * Return the columnIndex of the filter\n * @return {Number} columnIndex\n */\nFilter.prototype.getColumn = function() {\n  return this.column;\n};\n\n/**\n * Return the currently selected value. Returns undefined if there is no selection\n * @return {*} value\n */\nFilter.prototype.getSelectedValue = function() {\n  if (this.index === undefined)\n    return undefined;\n\n  return this.values[this.index];\n};\n\n/**\n * Retrieve all values of the filter\n * @return {Array} values\n */\nFilter.prototype.getValues = function() {\n  return this.values;\n};\n\n/**\n * Retrieve one value of the filter\n * @param {Number}  index\n * @return {*} value\n */\nFilter.prototype.getValue = function(index) {\n  if (index >= this.values.length)\n    throw new Error('Index out of range');\n\n  return this.values[index];\n};\n\n\n/**\n * Retrieve the (filtered) dataPoints for the currently selected filter index\n * @param {Number} [index] (optional)\n * @return {Array} dataPoints\n */\nFilter.prototype._getDataPoints = function(index) {\n  if (index === undefined)\n    index = this.index;\n\n  if (index === undefined)\n    return [];\n\n  var dataPoints;\n  if (this.dataPoints[index]) {\n    dataPoints = this.dataPoints[index];\n  }\n  else {\n    var f = {};\n    f.column = this.column;\n    f.value = this.values[index];\n\n    var dataView = new DataView(this.data,{filter: function (item) {return (item[f.column] == f.value);}}).get();\n    dataPoints = this.graph._getDataPoints(dataView);\n\n    this.dataPoints[index] = dataPoints;\n  }\n\n  return dataPoints;\n};\n\n\n\n/**\n * Set a callback function when the filter is fully loaded.\n */\nFilter.prototype.setOnLoadCallback = function(callback) {\n  this.onLoadCallback = callback;\n};\n\n\n/**\n * Add a value to the list with available values for this filter\n * No double entries will be created.\n * @param {Number} index\n */\nFilter.prototype.selectValue = function(index) {\n  if (index >= this.values.length)\n    throw new Error('Index out of range');\n\n  this.index = index;\n  this.value = this.values[index];\n};\n\n/**\n * Load all filtered rows in the background one by one\n * Start this method without providing an index!\n */\nFilter.prototype.loadInBackground = function(index) {\n  if (index === undefined)\n    index = 0;\n\n  var frame = this.graph.frame;\n\n  if (index < this.values.length) {\n    var dataPointsTemp = this._getDataPoints(index);\n    //this.graph.redrawInfo(); // TODO: not neat\n\n    // create a progress box\n    if (frame.progress === undefined) {\n      frame.progress = document.createElement('DIV');\n      frame.progress.style.position = 'absolute';\n      frame.progress.style.color = 'gray';\n      frame.appendChild(frame.progress);\n    }\n    var progress = this.getLoadedProgress();\n    frame.progress.innerHTML = 'Loading animation... ' + progress + '%';\n    // TODO: this is no nice solution...\n    frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider\n    frame.progress.style.left = 10 + 'px';\n\n    var me = this;\n    setTimeout(function() {me.loadInBackground(index+1);}, 10);\n    this.loaded = false;\n  }\n  else {\n    this.loaded = true;\n\n    // remove the progress box\n    if (frame.progress !== undefined) {\n      frame.removeChild(frame.progress);\n      frame.progress = undefined;\n    }\n\n    if (this.onLoadCallback)\n      this.onLoadCallback();\n  }\n};\n\nmodule.exports = Filter;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Filter.js","var util = require('../util');\n\n/**\n * @constructor Slider\n *\n * An html slider control with start/stop/prev/next buttons\n * @param {Element} container  The element where the slider will be created\n * @param {Object} options   Available options:\n *                 {boolean} visible   If true (default) the\n *                           slider is visible.\n */\nfunction Slider(container, options) {\n  if (container === undefined) {\n    throw new Error('No container element defined');\n  }\n  this.container = container;\n  this.visible = (options && options.visible != undefined) ? options.visible : true;\n\n  if (this.visible) {\n    this.frame = document.createElement('DIV');\n    //this.frame.style.backgroundColor = '#E5E5E5';\n    this.frame.style.width = '100%';\n    this.frame.style.position = 'relative';\n    this.container.appendChild(this.frame);\n\n    this.frame.prev = document.createElement('INPUT');\n    this.frame.prev.type = 'BUTTON';\n    this.frame.prev.value = 'Prev';\n    this.frame.appendChild(this.frame.prev);\n\n    this.frame.play = document.createElement('INPUT');\n    this.frame.play.type = 'BUTTON';\n    this.frame.play.value = 'Play';\n    this.frame.appendChild(this.frame.play);\n\n    this.frame.next = document.createElement('INPUT');\n    this.frame.next.type = 'BUTTON';\n    this.frame.next.value = 'Next';\n    this.frame.appendChild(this.frame.next);\n\n    this.frame.bar = document.createElement('INPUT');\n    this.frame.bar.type = 'BUTTON';\n    this.frame.bar.style.position = 'absolute';\n    this.frame.bar.style.border = '1px solid red';\n    this.frame.bar.style.width = '100px';\n    this.frame.bar.style.height = '6px';\n    this.frame.bar.style.borderRadius = '2px';\n    this.frame.bar.style.MozBorderRadius = '2px';\n    this.frame.bar.style.border = '1px solid #7F7F7F';\n    this.frame.bar.style.backgroundColor = '#E5E5E5';\n    this.frame.appendChild(this.frame.bar);\n\n    this.frame.slide = document.createElement('INPUT');\n    this.frame.slide.type = 'BUTTON';\n    this.frame.slide.style.margin = '0px';\n    this.frame.slide.value = ' ';\n    this.frame.slide.style.position = 'relative';\n    this.frame.slide.style.left = '-100px';\n    this.frame.appendChild(this.frame.slide);\n\n    // create events\n    var me = this;\n    this.frame.slide.onmousedown = function (event) {me._onMouseDown(event);};\n    this.frame.prev.onclick = function (event) {me.prev(event);};\n    this.frame.play.onclick = function (event) {me.togglePlay(event);};\n    this.frame.next.onclick = function (event) {me.next(event);};\n  }\n\n  this.onChangeCallback = undefined;\n\n  this.values = [];\n  this.index = undefined;\n\n  this.playTimeout = undefined;\n  this.playInterval = 1000; // milliseconds\n  this.playLoop = true;\n}\n\n/**\n * Select the previous index\n */\nSlider.prototype.prev = function() {\n  var index = this.getIndex();\n  if (index > 0) {\n    index--;\n    this.setIndex(index);\n  }\n};\n\n/**\n * Select the next index\n */\nSlider.prototype.next = function() {\n  var index = this.getIndex();\n  if (index < this.values.length - 1) {\n    index++;\n    this.setIndex(index);\n  }\n};\n\n/**\n * Select the next index\n */\nSlider.prototype.playNext = function() {\n  var start = new Date();\n\n  var index = this.getIndex();\n  if (index < this.values.length - 1) {\n    index++;\n    this.setIndex(index);\n  }\n  else if (this.playLoop) {\n    // jump to the start\n    index = 0;\n    this.setIndex(index);\n  }\n\n  var end = new Date();\n  var diff = (end - start);\n\n  // calculate how much time it to to set the index and to execute the callback\n  // function.\n  var interval = Math.max(this.playInterval - diff, 0);\n  // document.title = diff // TODO: cleanup\n\n  var me = this;\n  this.playTimeout = setTimeout(function() {me.playNext();}, interval);\n};\n\n/**\n * Toggle start or stop playing\n */\nSlider.prototype.togglePlay = function() {\n  if (this.playTimeout === undefined) {\n    this.play();\n  } else {\n    this.stop();\n  }\n};\n\n/**\n * Start playing\n */\nSlider.prototype.play = function() {\n  // Test whether already playing\n  if (this.playTimeout) return;\n\n  this.playNext();\n\n  if (this.frame) {\n    this.frame.play.value = 'Stop';\n  }\n};\n\n/**\n * Stop playing\n */\nSlider.prototype.stop = function() {\n  clearInterval(this.playTimeout);\n  this.playTimeout = undefined;\n\n  if (this.frame) {\n    this.frame.play.value = 'Play';\n  }\n};\n\n/**\n * Set a callback function which will be triggered when the value of the\n * slider bar has changed.\n */\nSlider.prototype.setOnChangeCallback = function(callback) {\n  this.onChangeCallback = callback;\n};\n\n/**\n * Set the interval for playing the list\n * @param {Number} interval   The interval in milliseconds\n */\nSlider.prototype.setPlayInterval = function(interval) {\n  this.playInterval = interval;\n};\n\n/**\n * Retrieve the current play interval\n * @return {Number} interval   The interval in milliseconds\n */\nSlider.prototype.getPlayInterval = function(interval) {\n  return this.playInterval;\n};\n\n/**\n * Set looping on or off\n * @pararm {boolean} doLoop  If true, the slider will jump to the start when\n *               the end is passed, and will jump to the end\n *               when the start is passed.\n */\nSlider.prototype.setPlayLoop = function(doLoop) {\n  this.playLoop = doLoop;\n};\n\n\n/**\n * Execute the onchange callback function\n */\nSlider.prototype.onChange = function() {\n  if (this.onChangeCallback !== undefined) {\n    this.onChangeCallback();\n  }\n};\n\n/**\n * redraw the slider on the correct place\n */\nSlider.prototype.redraw = function() {\n  if (this.frame) {\n    // resize the bar\n    this.frame.bar.style.top = (this.frame.clientHeight/2 -\n        this.frame.bar.offsetHeight/2) + 'px';\n    this.frame.bar.style.width = (this.frame.clientWidth -\n        this.frame.prev.clientWidth -\n        this.frame.play.clientWidth -\n        this.frame.next.clientWidth - 30)  + 'px';\n\n    // position the slider button\n    var left = this.indexToLeft(this.index);\n    this.frame.slide.style.left = (left) + 'px';\n  }\n};\n\n\n/**\n * Set the list with values for the slider\n * @param {Array} values   A javascript array with values (any type)\n */\nSlider.prototype.setValues = function(values) {\n  this.values = values;\n\n  if (this.values.length > 0)\n    this.setIndex(0);\n  else\n    this.index = undefined;\n};\n\n/**\n * Select a value by its index\n * @param {Number} index\n */\nSlider.prototype.setIndex = function(index) {\n  if (index < this.values.length) {\n    this.index = index;\n\n    this.redraw();\n    this.onChange();\n  }\n  else {\n    throw new Error('Index out of range');\n  }\n};\n\n/**\n * retrieve the index of the currently selected vaue\n * @return {Number} index\n */\nSlider.prototype.getIndex = function() {\n  return this.index;\n};\n\n\n/**\n * retrieve the currently selected value\n * @return {*} value\n */\nSlider.prototype.get = function() {\n  return this.values[this.index];\n};\n\n\nSlider.prototype._onMouseDown = function(event) {\n  // only react on left mouse button down\n  var leftButtonDown = event.which ? (event.which === 1) : (event.button === 1);\n  if (!leftButtonDown) return;\n\n  this.startClientX = event.clientX;\n  this.startSlideX = parseFloat(this.frame.slide.style.left);\n\n  this.frame.style.cursor = 'move';\n\n  // add event listeners to handle moving the contents\n  // we store the function onmousemove and onmouseup in the graph, so we can\n  // remove the eventlisteners lateron in the function mouseUp()\n  var me = this;\n  this.onmousemove = function (event) {me._onMouseMove(event);};\n  this.onmouseup   = function (event) {me._onMouseUp(event);};\n  util.addEventListener(document, 'mousemove', this.onmousemove);\n  util.addEventListener(document, 'mouseup',   this.onmouseup);\n  util.preventDefault(event);\n};\n\n\nSlider.prototype.leftToIndex = function (left) {\n  var width = parseFloat(this.frame.bar.style.width) -\n      this.frame.slide.clientWidth - 10;\n  var x = left - 3;\n\n  var index = Math.round(x / width * (this.values.length-1));\n  if (index < 0) index = 0;\n  if (index > this.values.length-1) index = this.values.length-1;\n\n  return index;\n};\n\nSlider.prototype.indexToLeft = function (index) {\n  var width = parseFloat(this.frame.bar.style.width) -\n      this.frame.slide.clientWidth - 10;\n\n  var x = index / (this.values.length-1) * width;\n  var left = x + 3;\n\n  return left;\n};\n\n\n\nSlider.prototype._onMouseMove = function (event) {\n  var diff = event.clientX - this.startClientX;\n  var x = this.startSlideX + diff;\n\n  var index = this.leftToIndex(x);\n\n  this.setIndex(index);\n\n  util.preventDefault();\n};\n\n\nSlider.prototype._onMouseUp = function (event) {\n  this.frame.style.cursor = 'auto';\n\n  // remove event listeners\n  util.removeEventListener(document, 'mousemove', this.onmousemove);\n  util.removeEventListener(document, 'mouseup', this.onmouseup);\n\n  util.preventDefault();\n};\n\nmodule.exports = Slider;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Slider.js","/**\n * @prototype StepNumber\n * The class StepNumber is an iterator for Numbers. You provide a start and end\n * value, and a best step size. StepNumber itself rounds to fixed values and\n * a finds the step that best fits the provided step.\n *\n * If prettyStep is true, the step size is chosen as close as possible to the\n * provided step, but being a round value like 1, 2, 5, 10, 20, 50, ....\n *\n * Example usage:\n *   var step = new StepNumber(0, 10, 2.5, true);\n *   step.start();\n *   while (!step.end()) {\n *   alert(step.getCurrent());\n *   step.next();\n *   }\n *\n * Version: 1.0\n *\n * @param {Number} start     The start value\n * @param {Number} end     The end value\n * @param {Number} step    Optional. Step size. Must be a positive value.\n * @param {boolean} prettyStep Optional. If true, the step size is rounded\n *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nfunction StepNumber(start, end, step, prettyStep) {\n  // set default values\n  this._start = 0;\n  this._end = 0;\n  this._step = 1;\n  this.prettyStep = true;\n  this.precision = 5;\n\n  this._current = 0;\n  this.setRange(start, end, step, prettyStep);\n};\n\n\n/**\n * Check for input values, to prevent disasters from happening\n *\n * Source: http://stackoverflow.com/a/1830844\n */\nStepNumber.prototype.isNumeric = function(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\n\n/**\n * Set a new range: start, end and step.\n *\n * @param {Number} start     The start value\n * @param {Number} end     The end value\n * @param {Number} step    Optional. Step size. Must be a positive value.\n * @param {boolean} prettyStep Optional. If true, the step size is rounded\n *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nStepNumber.prototype.setRange = function(start, end, step, prettyStep) {\n  if (!this.isNumeric(start)) {\n    throw new Error('Parameter \\'start\\' is not numeric; value: ' + start);\n  }\n  if (!this.isNumeric(end)) {\n    throw new Error('Parameter \\'end\\' is not numeric; value: ' + start);\n  }\n  if (!this.isNumeric(step)) {\n    throw new Error('Parameter \\'step\\' is not numeric; value: ' + start);\n  }\n\n  this._start = start ? start : 0;\n  this._end = end ? end : 0;\n\n  this.setStep(step, prettyStep);\n};\n\n/**\n * Set a new step size\n * @param {Number} step    New step size. Must be a positive value\n * @param {boolean} prettyStep Optional. If true, the provided step is rounded\n *               to a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nStepNumber.prototype.setStep = function(step, prettyStep) {\n  if (step === undefined || step <= 0)\n    return;\n\n  if (prettyStep !== undefined)\n    this.prettyStep = prettyStep;\n\n  if (this.prettyStep === true)\n    this._step = StepNumber.calculatePrettyStep(step);\n  else\n    this._step = step;\n};\n\n/**\n * Calculate a nice step size, closest to the desired step size.\n * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an\n * integer Number. For example 1, 2, 5, 10, 20, 50, etc...\n * @param {Number}  step  Desired step size\n * @return {Number}     Nice step size\n */\nStepNumber.calculatePrettyStep = function (step) {\n  var log10 = function (x) {return Math.log(x) / Math.LN10;};\n\n  // try three steps (multiple of 1, 2, or 5\n  var step1 = Math.pow(10, Math.round(log10(step))),\n      step2 = 2 * Math.pow(10, Math.round(log10(step / 2))),\n      step5 = 5 * Math.pow(10, Math.round(log10(step / 5)));\n\n  // choose the best step (closest to minimum step)\n  var prettyStep = step1;\n  if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2;\n  if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5;\n\n  // for safety\n  if (prettyStep <= 0) {\n    prettyStep = 1;\n  }\n\n  return prettyStep;\n};\n\n/**\n * returns the current value of the step\n * @return {Number} current value\n */\nStepNumber.prototype.getCurrent = function () {\n  return parseFloat(this._current.toPrecision(this.precision));\n};\n\n/**\n * returns the current step size\n * @return {Number} current step size\n */\nStepNumber.prototype.getStep = function () {\n  return this._step;\n};\n\n/**\n * Set the current to its starting value.\n *\n * By default, this will be the largest value smaller than start, which\n * is a multiple of the step size.\n *\n * Parameters checkFirst is optional, default false.\n * If set to true, move the current value one step if smaller than start.\n */\nStepNumber.prototype.start = function(checkFirst) {\n  if (checkFirst === undefined) {\n    checkFirst = false;\n  }\n\n  this._current = this._start - this._start % this._step;\n\n  if (checkFirst) {\n    if (this.getCurrent() < this._start) {\n      this.next();\n    }\n  }\n};\n\n\n/**\n * Do a step, add the step size to the current value\n */\nStepNumber.prototype.next = function () {\n  this._current += this._step;\n};\n\n/**\n * Returns true whether the end is reached\n * @return {boolean}  True if the current value has passed the end value.\n */\nStepNumber.prototype.end = function () {\n  return (this._current > this._end);\n};\n\nmodule.exports = StepNumber;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/StepNumber.js","/**\n * @prototype Range\n *\n * Helper class to make working with related min and max values easier.\n *\n * The range is inclusive; a given value is considered part of the range if:\n *\n *    this.min <= value <= this.max\n */\nfunction Range() {\n  this.min = undefined;\n  this.max = undefined;\n}\n\n\n/**\n * Adjust the range so that the passed value fits in it.\n *\n * If the value is outside of the current extremes, adjust\n * the min or max so that the value is within the range.\n *\n * @param {number} value Numeric value to fit in range\n */\nRange.prototype.adjust = function(value) {\n  if (value === undefined) return;\n\n  if (this.min === undefined || this.min > value ) {\n    this.min = value;\n  }\n\n  if (this.max === undefined || this.max < value) {\n    this.max = value;\n  }\n};\n\n\n/**\n * Adjust the current range so that the passed range fits in it.\n *\n * @param {Range} range Range instance to fit in current instance\n */\nRange.prototype.combine = function(range) {\n   this.add(range.min);\n   this.add(range.max);\n};\n\n\n/**\n * Expand the range by the given value\n *\n * min will be lowered by given value;\n * max will be raised by given value\n *\n * Shrinking by passing a negative value is allowed.\n *\n * @param {number} val Amount by which to expand or shrink current range with\n */\nRange.prototype.expand = function(val) {\n  if (val === undefined) {\n    return;\n  }\n\n  var newMin = this.min - val;\n  var newMax = this.max + val;\n\n  // Note that following allows newMin === newMax.\n  // This should be OK, since method expand() allows this also.\n  if (newMin > newMax) {\n    throw new Error('Passed expansion value makes range invalid');\n  }\n\n  this.min = newMin;\n  this.max = newMax;\n};\n\n\n/**\n * Determine the full range width of current instance.\n *\n * @returns {num} The calculated width of this range\n */\nRange.prototype.range = function() {\n  return this.max - this.min;\n};\n\n\n/**\n * Determine the central point of current instance.\n *\n * @returns {number} the value in the middle of min and max\n */\nRange.prototype.center = function() {\n return (this.min + this.max) / 2;\n};\n\n\nmodule.exports = Range;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Range.js","////////////////////////////////////////////////////////////////////////////////\n// This modules handles the options for Graph3d.\n//\n////////////////////////////////////////////////////////////////////////////////\nvar Camera  = require('./Camera');\nvar Point3d = require('./Point3d');\n\n\n// enumerate the available styles\nvar STYLE = {\n  BAR     : 0,\n  BARCOLOR: 1,\n  BARSIZE : 2,\n  DOT     : 3,\n  DOTLINE : 4,\n  DOTCOLOR: 5,\n  DOTSIZE : 6,\n  GRID    : 7,\n  LINE    : 8,\n  SURFACE : 9\n};\n\n\n// The string representations of the styles\nvar STYLENAME = {\n  'dot'      : STYLE.DOT,\n  'dot-line' : STYLE.DOTLINE,\n  'dot-color': STYLE.DOTCOLOR,\n  'dot-size' : STYLE.DOTSIZE,\n  'line'     : STYLE.LINE,\n  'grid'     : STYLE.GRID,\n  'surface'  : STYLE.SURFACE,\n  'bar'      : STYLE.BAR,\n  'bar-color': STYLE.BARCOLOR,\n  'bar-size' : STYLE.BARSIZE\n};\n\n\n/**\n * Field names in the options hash which are of relevance to the user.\n *\n * Specifically, these are the fields which require no special handling,\n * and can be directly copied over.\n */\nvar OPTIONKEYS = [\n  'width',\n  'height',\n  'filterLabel',\n  'legendLabel',\n  'xLabel',\n  'yLabel',\n  'zLabel',\n  'xValueLabel',\n  'yValueLabel',\n  'zValueLabel',\n  'showGrid',\n  'showPerspective',\n  'showShadow',\n  'keepAspectRatio',\n  'verticalRatio',\n  'dotSizeRatio',\n  'showAnimationControls',\n  'animationInterval',\n  'animationPreload',\n  'animationAutoStart',\n  'axisColor',\n  'gridColor',\n  'xCenter',\n  'yCenter'\n];\n\n\n/**\n * Field names in the options hash which are of relevance to the user.\n *\n * Same as OPTIONKEYS, but internally these fields are stored with \n * prefix 'default' in the name.\n */\nvar PREFIXEDOPTIONKEYS = [\n  'xBarWidth',\n  'yBarWidth',\n  'valueMin',\n  'valueMax',\n  'xMin',\n  'xMax',\n  'xStep',\n  'yMin',\n  'yMax',\n  'yStep',\n  'zMin',\n  'zMax',\n  'zStep'\n];\n\n\n// Placeholder for DEFAULTS reference\nvar DEFAULTS = undefined; \n\n\n/**\n * Check if given hash is empty.\n *\n * Source: http://stackoverflow.com/a/679937\n */\nfunction isEmpty(obj) {\n  for(var prop in obj) {\n    if (obj.hasOwnProperty(prop))\n      return false;\n  }\n\n  return true;\n}\n\n\n\n/**\n * Make first letter of parameter upper case.\n *\n * Source: http://stackoverflow.com/a/1026087\n */\nfunction capitalize(str) {\n  if (str === undefined || str === \"\" || typeof str != \"string\") {\n    return str;\n  }\n\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\n/**\n * Add a prefix to a field name, taking style guide into account\n */\nfunction prefixFieldName(prefix, fieldName) {\n  if (prefix === undefined || prefix === \"\") {\n    return fieldName;\n  }\n\n  return prefix + capitalize(fieldName);\n}\n\n\n/**\n * Forcibly copy fields from src to dst in a controlled manner.\n *\n * A given field in dst will always be overwitten. If this field\n * is undefined or not present in src, the field in dst will \n * be explicitly set to undefined.\n * \n * The intention here is to be able to reset all option fields.\n * \n * Only the fields mentioned in array 'fields' will be handled.\n *\n * @param fields array with names of fields to copy\n * @param prefix optional; prefix to use for the target fields.\n */\nfunction forceCopy(src, dst, fields, prefix) {\n  var srcKey;\n  var dstKey;\n\n  for (var i in fields) {\n    srcKey  = fields[i];\n    dstKey  = prefixFieldName(prefix, srcKey);\n\n    dst[dstKey] = src[srcKey];\n  }\n}\n\n\n/**\n * Copy fields from src to dst in a safe and controlled manner.\n *\n * Only the fields mentioned in array 'fields' will be copied over,\n * and only if these are actually defined.\n *\n * @param fields array with names of fields to copy\n * @param prefix optional; prefix to use for the target fields.\n */\nfunction safeCopy(src, dst, fields, prefix) {\n  var srcKey;\n  var dstKey;\n\n  for (var i in fields) {\n    srcKey  = fields[i];\n    if (src[srcKey] === undefined) continue;\n\n    dstKey  = prefixFieldName(prefix, srcKey);\n\n    dst[dstKey] = src[srcKey];\n  }\n}\n\n\n/**\n * Initialize dst with the values in src.\n *\n * src is the hash with the default values. \n * A reference DEFAULTS to this hash is stored locally for \n * further handling.\n *\n * For now, dst is assumed to be a Graph3d instance.\n */\nfunction setDefaults(src, dst) {\n  if (src === undefined || isEmpty(src)) {\n    throw new Error('No DEFAULTS passed');\n  }\n  if (dst === undefined) {\n    throw new Error('No dst passed');\n  }\n\n  // Remember defaults for future reference\n  DEFAULTS = src;\n\n  // Handle the defaults which can be simply copied over\n  forceCopy(src, dst, OPTIONKEYS);\n  forceCopy(src, dst, PREFIXEDOPTIONKEYS, 'default');\n\n  // Handle the more complex ('special') fields\n  setSpecialSettings(src, dst);\n\n  // Following are internal fields, not part of the user settings\n  dst.margin = 10;                  // px\n  dst.showGrayBottom = false;       // TODO: this does not work correctly\n  dst.showTooltip = false;\n  dst.onclick_callback = null;\n  dst.eye = new Point3d(0, 0, -1);  // TODO: set eye.z about 3/4 of the width of the window?\n}\n\n\nfunction setOptions(options, dst) {\n  if (options === undefined) {\n    return;\n  }\n  if (dst === undefined) {\n    throw new Error('No dst passed');\n  }\n\n  if (DEFAULTS === undefined || isEmpty(DEFAULTS)) {\n    throw new Error('DEFAULTS not set for module Settings');\n  }\n\n\n  // Handle the parameters which can be simply copied over\n  safeCopy(options, dst, OPTIONKEYS);\n  safeCopy(options, dst, PREFIXEDOPTIONKEYS, 'default');\n\n  // Handle the more complex ('special') fields\n  setSpecialSettings(options, dst);\n}\n\n\n/**\n * Special handling for certain parameters\n *\n * 'Special' here means: setting requires more than a simple copy\n */\nfunction setSpecialSettings(src, dst) {\n  if (src.backgroundColor !== undefined) {\n    setBackgroundColor(src.backgroundColor, dst);\n  }\n\n  setDataColor(src.dataColor, dst);\n  setStyle(src.style, dst);\n  setShowLegend(src.showLegend, dst);\n  setCameraPosition(src.cameraPosition, dst);\n\n  // As special fields go, this is an easy one; just a translation of the name.\n  // Can't use this.tooltip directly, because that field exists internally\n  if (src.tooltip !== undefined) {\n    dst.showTooltip = src.tooltip;\n  }\n  if (src.onclick != undefined) {\n    dst.onclick_callback = src.onclick;\n  }\n}\n\n\n/**\n * Set the value of setting 'showLegend'\n *\n * This depends on the value of the style fields, so it must be called\n * after the style field has been initialized.\n */\nfunction setShowLegend(showLegend, dst) {\n  if (showLegend === undefined) {\n    // If the default was auto, make a choice for this field\n    var isAutoByDefault = (DEFAULTS.showLegend === undefined);\n\n    if (isAutoByDefault) {\n      // these styles default to having legends\n      var isLegendGraphStyle = dst.style === STYLE.DOTCOLOR\n                            || dst.style === STYLE.DOTSIZE;\n\n      dst.showLegend = isLegendGraphStyle;\n    } else {\n       // Leave current value as is\n    }\n  } else {\n    dst.showLegend = showLegend;\n  }\n}\n\n\n/**\n * Retrieve the style index from given styleName\n * @param {string} styleName  Style name such as 'dot', 'grid', 'dot-line'\n * @return {Number} styleNumber Enumeration value representing the style, or -1\n *                when not found\n */\nfunction getStyleNumberByName(styleName) {\n  var number = STYLENAME[styleName];\n\n  if (number === undefined) {\n    return -1;\n  }\n\n  return number;\n}\n\n\n/**\n * Check if given number is a valid style number.\n *\n * @return true if valid, false otherwise\n */\nfunction checkStyleNumber(style) {\n  var valid = false;\n\n  for (var n in STYLE) {\n    if (STYLE[n] === style) {\n      valid = true;\n      break;\n    }\n  }\n\n  return valid;\n}\n\n\nfunction setStyle(style, dst) {\n  if (style === undefined) {\n    return;   // Nothing to do\n  }\n\n  var styleNumber;\n\n  if (typeof style === 'string') {\n    styleNumber = getStyleNumberByName(style);\n\n    if (styleNumber === -1 ) {\n      throw new Error('Style \\'' + style + '\\' is invalid');\n    }\n  } else {\n    // Do a pedantic check on style number value\n    if (!checkStyleNumber(style)) {\n      throw new Error('Style \\'' + style + '\\' is invalid');\n    }\n\n    styleNumber = style;\n  }\n\n  dst.style = styleNumber;\n}\n\n\n/**\n * Set the background styling for the graph\n * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor\n */\nfunction setBackgroundColor(backgroundColor, dst) {\n  var fill = 'white';\n  var stroke = 'gray';\n  var strokeWidth = 1;\n\n  if (typeof(backgroundColor) === 'string') {\n    fill = backgroundColor;\n    stroke = 'none';\n    strokeWidth = 0;\n  }\n  else if (typeof(backgroundColor) === 'object') {\n    if (backgroundColor.fill !== undefined)    fill = backgroundColor.fill;\n    if (backgroundColor.stroke !== undefined)    stroke = backgroundColor.stroke;\n    if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth;\n  }\n  else {\n    throw new Error('Unsupported type of backgroundColor');\n  }\n\n  dst.frame.style.backgroundColor = fill;\n  dst.frame.style.borderColor = stroke;\n  dst.frame.style.borderWidth = strokeWidth + 'px';\n  dst.frame.style.borderStyle = 'solid';\n}\n\n\nfunction setDataColor(dataColor, dst) {\n  if (dataColor === undefined) {\n    return;    // Nothing to do\n  }\n\n  if (dst.dataColor === undefined) {\n    dst.dataColor = {};\n  }\n\n  if (typeof dataColor === 'string') {\n    dst.dataColor.fill   = dataColor;\n    dst.dataColor.stroke = dataColor;\n  }\n  else {\n    if (dataColor.fill) {\n      dst.dataColor.fill = dataColor.fill;\n    }\n    if (dataColor.stroke) {\n      dst.dataColor.stroke = dataColor.stroke;\n    }\n    if (dataColor.strokeWidth !== undefined) {\n      dst.dataColor.strokeWidth = dataColor.strokeWidth;\n    }\n  }\n}\n\n\nfunction setCameraPosition(cameraPosition, dst) {\n  var camPos = cameraPosition;\n  if (camPos === undefined) {\n    return;\n  }\n\n  if (dst.camera === undefined) {\n    dst.camera = new Camera();\n  }\n\n  dst.camera.setArmRotation(camPos.horizontal, camPos.vertical);\n  dst.camera.setArmLength(camPos.distance);\n}\n\n\nmodule.exports.STYLE             = STYLE;\nmodule.exports.setDefaults       = setDefaults;\nmodule.exports.setOptions        = setOptions;\nmodule.exports.setCameraPosition = setCameraPosition;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Settings.js","// Only load hammer.js when in a browser environment\n// (loading hammer.js in a node.js environment gives errors)\nif (typeof window !== 'undefined') {\n  var propagating = require('propagating-hammerjs');\n  var Hammer = window['Hammer'] || require('hammerjs');\n  module.exports = propagating(Hammer, {\n    preventDefault: 'mouse'\n  });\n}\nelse {\n  module.exports = function () {\n    throw Error('hammer.js is only available in a browser, not in node.js.');\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/hammer.js","'use strict';\n\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    // Browser globals (root is window)\n    window.propagating = factory();\n  }\n}(function () {\n  var _firstTarget = null; // singleton, will contain the target element where the touch event started\n\n  /**\n   * Extend an Hammer.js instance with event propagation.\n   *\n   * Features:\n   * - Events emitted by hammer will propagate in order from child to parent\n   *   elements.\n   * - Events are extended with a function `event.stopPropagation()` to stop\n   *   propagation to parent elements.\n   * - An option `preventDefault` to stop all default browser behavior.\n   *\n   * Usage:\n   *   var hammer = propagatingHammer(new Hammer(element));\n   *   var hammer = propagatingHammer(new Hammer(element), {preventDefault: true});\n   *\n   * @param {Hammer.Manager} hammer   An hammer instance.\n   * @param {Object} [options]        Available options:\n   *                                  - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`.\n   *                                    Enforce preventing the default browser behavior.\n   *                                    Cannot be set to `false`.\n   * @return {Hammer.Manager} Returns the same hammer instance with extended\n   *                          functionality\n   */\n  return function propagating(hammer, options) {\n    var _options = options || {\n      preventDefault: false\n    };\n\n    if (hammer.Manager) {\n      // This looks like the Hammer constructor.\n      // Overload the constructors with our own.\n      var Hammer = hammer;\n\n      var PropagatingHammer = function(element, options) {\n        var o = Object.create(_options);\n        if (options) Hammer.assign(o, options);\n        return propagating(new Hammer(element, o), o);\n      };\n      Hammer.assign(PropagatingHammer, Hammer);\n\n      PropagatingHammer.Manager = function (element, options) {\n        var o = Object.create(_options);\n        if (options) Hammer.assign(o, options);\n        return propagating(new Hammer.Manager(element, o), o);\n      };\n\n      return PropagatingHammer;\n    }\n\n    // create a wrapper object which will override the functions\n    // `on`, `off`, `destroy`, and `emit` of the hammer instance\n    var wrapper = Object.create(hammer);\n\n    // attach to DOM element\n    var element = hammer.element;\n\n    if(!element.hammer) element.hammer = [];\n    element.hammer.push(wrapper);\n\n    // register an event to catch the start of a gesture and store the\n    // target in a singleton\n    hammer.on('hammer.input', function (event) {\n      if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {\n        event.preventDefault();\n      }\n      if (event.isFirst) {\n        _firstTarget = event.target;\n      }\n    });\n\n    /** @type {Object.<String, Array.<function>>} */\n    wrapper._handlers = {};\n\n    /**\n     * Register a handler for one or multiple events\n     * @param {String} events    A space separated string with events\n     * @param {function} handler A callback function, called as handler(event)\n     * @returns {Hammer.Manager} Returns the hammer instance\n     */\n    wrapper.on = function (events, handler) {\n      // register the handler\n      split(events).forEach(function (event) {\n        var _handlers = wrapper._handlers[event];\n        if (!_handlers) {\n          wrapper._handlers[event] = _handlers = [];\n\n          // register the static, propagated handler\n          hammer.on(event, propagatedHandler);\n        }\n        _handlers.push(handler);\n      });\n\n      return wrapper;\n    };\n\n    /**\n     * Unregister a handler for one or multiple events\n     * @param {String} events      A space separated string with events\n     * @param {function} [handler] Optional. The registered handler. If not\n     *                             provided, all handlers for given events\n     *                             are removed.\n     * @returns {Hammer.Manager}   Returns the hammer instance\n     */\n    wrapper.off = function (events, handler) {\n      // unregister the handler\n      split(events).forEach(function (event) {\n        var _handlers = wrapper._handlers[event];\n        if (_handlers) {\n          _handlers = handler ? _handlers.filter(function (h) {\n            return h !== handler;\n          }) : [];\n\n          if (_handlers.length > 0) {\n            wrapper._handlers[event] = _handlers;\n          }\n          else {\n            // remove static, propagated handler\n            hammer.off(event, propagatedHandler);\n            delete wrapper._handlers[event];\n          }\n        }\n      });\n\n      return wrapper;\n    };\n\n    /**\n     * Emit to the event listeners\n     * @param {string} eventType\n     * @param {Event} event\n     */\n    wrapper.emit = function(eventType, event) {\n      _firstTarget = event.target;\n      hammer.emit(eventType, event);\n    };\n\n    wrapper.destroy = function () {\n      // Detach from DOM element\n      var hammers = hammer.element.hammer;\n      var idx = hammers.indexOf(wrapper);\n      if(idx !== -1) hammers.splice(idx,1);\n      if(!hammers.length) delete hammer.element.hammer;\n\n      // clear all handlers\n      wrapper._handlers = {};\n\n      // call original hammer destroy\n      hammer.destroy();\n    };\n\n    // split a string with space separated words\n    function split(events) {\n      return events.match(/[^ ]+/g);\n    }\n\n    /**\n     * A static event handler, applying event propagation.\n     * @param {Object} event\n     */\n    function propagatedHandler(event) {\n      // let only a single hammer instance handle this event\n      if (event.type !== 'hammer.input') {\n        // it is possible that the same srcEvent is used with multiple hammer events,\n        // we keep track on which events are handled in an object _handled\n        if (!event.srcEvent._handled) {\n          event.srcEvent._handled = {};\n        }\n\n        if (event.srcEvent._handled[event.type]) {\n          return;\n        }\n        else {\n          event.srcEvent._handled[event.type] = true;\n        }\n      }\n\n      // attach a stopPropagation function to the event\n      var stopped = false;\n      event.stopPropagation = function () {\n        stopped = true;\n      };\n\n      //wrap the srcEvent's stopPropagation to also stop hammer propagation:\n      var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);\n      if(typeof srcStop == \"function\") {\n        event.srcEvent.stopPropagation = function(){\n          srcStop();\n          event.stopPropagation();\n        }\n      }\n\n      // attach firstTarget property to the event\n      event.firstTarget = _firstTarget;\n\n      // propagate over all elements (until stopped)\n      var elem = _firstTarget;\n      while (elem && !stopped) {\n        var elemHammer = elem.hammer;\n        if(elemHammer){\n          var _handlers;\n          for(var k = 0; k < elemHammer.length; k++){\n            _handlers = elemHammer[k]._handlers[event.type];\n            if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {\n              _handlers[i](event);\n            }\n          }\n        }\n        elem = elem.parentNode;\n      }\n    }\n\n    return wrapper;\n  };\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/propagating-hammerjs/propagating.js\n// module id = 109\n// module chunks = 0","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/hammerjs/hammer.js\n// module id = 110\n// module chunks = 0","\"use strict\";\r\n/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\n\r\n// https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60\r\n// if the module has no dependencies, the above pattern can be simplified to\r\n(function (root, factory) {\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD. Register as an anonymous module.\r\n    define([], factory);\r\n  } else if (typeof exports === 'object') {\r\n    // Node. Does not work with strict CommonJS, but\r\n    // only CommonJS-like environments that support module.exports,\r\n    // like Node.\r\n    module.exports = factory();\r\n  } else {\r\n    // Browser globals (root is window)\r\n    root.keycharm = factory();\r\n  }\r\n}(this, function () {\r\n\r\n  function keycharm(options) {\r\n    var preventDefault = options && options.preventDefault || false;\r\n\r\n    var container = options && options.container || window;\r\n\r\n    var _exportFunctions = {};\r\n    var _bound = {keydown:{}, keyup:{}};\r\n    var _keys = {};\r\n    var i;\r\n\r\n    // a - z\r\n    for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n    // A - Z\r\n    for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n    // 0 - 9\r\n    for (i = 0;  i <= 9;   i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n    // F1 - F12\r\n    for (i = 1;  i <= 12;   i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n    // num0 - num9\r\n    for (i = 0;  i <= 9;   i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n    // numpad misc\r\n    _keys['num*'] = {code:106, shift: false};\r\n    _keys['num+'] = {code:107, shift: false};\r\n    _keys['num-'] = {code:109, shift: false};\r\n    _keys['num/'] = {code:111, shift: false};\r\n    _keys['num.'] = {code:110, shift: false};\r\n    // arrows\r\n    _keys['left']  = {code:37, shift: false};\r\n    _keys['up']    = {code:38, shift: false};\r\n    _keys['right'] = {code:39, shift: false};\r\n    _keys['down']  = {code:40, shift: false};\r\n    // extra keys\r\n    _keys['space'] = {code:32, shift: false};\r\n    _keys['enter'] = {code:13, shift: false};\r\n    _keys['shift'] = {code:16, shift: undefined};\r\n    _keys['esc']   = {code:27, shift: false};\r\n    _keys['backspace'] = {code:8, shift: false};\r\n    _keys['tab']       = {code:9, shift: false};\r\n    _keys['ctrl']      = {code:17, shift: false};\r\n    _keys['alt']       = {code:18, shift: false};\r\n    _keys['delete']    = {code:46, shift: false};\r\n    _keys['pageup']    = {code:33, shift: false};\r\n    _keys['pagedown']  = {code:34, shift: false};\r\n    // symbols\r\n    _keys['=']     = {code:187, shift: false};\r\n    _keys['-']     = {code:189, shift: false};\r\n    _keys[']']     = {code:221, shift: false};\r\n    _keys['[']     = {code:219, shift: false};\r\n\r\n\r\n\r\n    var down = function(event) {handleEvent(event,'keydown');};\r\n    var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n    // handle the actualy bound key with the event\r\n    var handleEvent = function(event,type) {\r\n      if (_bound[type][event.keyCode] !== undefined) {\r\n        var bound = _bound[type][event.keyCode];\r\n        for (var i = 0; i < bound.length; i++) {\r\n          if (bound[i].shift === undefined) {\r\n            bound[i].fn(event);\r\n          }\r\n          else if (bound[i].shift == true && event.shiftKey == true) {\r\n            bound[i].fn(event);\r\n          }\r\n          else if (bound[i].shift == false && event.shiftKey == false) {\r\n            bound[i].fn(event);\r\n          }\r\n        }\r\n\r\n        if (preventDefault == true) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    };\r\n\r\n    // bind a key to a callback\r\n    _exportFunctions.bind = function(key, callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      if (_keys[key] === undefined) {\r\n        throw new Error(\"unsupported key: \" + key);\r\n      }\r\n      if (_bound[type][_keys[key].code] === undefined) {\r\n        _bound[type][_keys[key].code] = [];\r\n      }\r\n      _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n    };\r\n\r\n\r\n    // bind all keys to a call back (demo purposes)\r\n    _exportFunctions.bindAll = function(callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      for (var key in _keys) {\r\n        if (_keys.hasOwnProperty(key)) {\r\n          _exportFunctions.bind(key,callback,type);\r\n        }\r\n      }\r\n    };\r\n\r\n    // get the key label from an event\r\n    _exportFunctions.getKey = function(event) {\r\n      for (var key in _keys) {\r\n        if (_keys.hasOwnProperty(key)) {\r\n          if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n            return key;\r\n          }\r\n          else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n            return key;\r\n          }\r\n          else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n            return key;\r\n          }\r\n        }\r\n      }\r\n      return \"unknown key, currently not supported\";\r\n    };\r\n\r\n    // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n    _exportFunctions.unbind = function(key, callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      if (_keys[key] === undefined) {\r\n        throw new Error(\"unsupported key: \" + key);\r\n      }\r\n      if (callback !== undefined) {\r\n        var newBindings = [];\r\n        var bound = _bound[type][_keys[key].code];\r\n        if (bound !== undefined) {\r\n          for (var i = 0; i < bound.length; i++) {\r\n            if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n              newBindings.push(_bound[type][_keys[key].code][i]);\r\n            }\r\n          }\r\n        }\r\n        _bound[type][_keys[key].code] = newBindings;\r\n      }\r\n      else {\r\n        _bound[type][_keys[key].code] = [];\r\n      }\r\n    };\r\n\r\n    // reset all bound variables.\r\n    _exportFunctions.reset = function() {\r\n      _bound = {keydown:{}, keyup:{}};\r\n    };\r\n\r\n    // unbind all listeners and reset all variables.\r\n    _exportFunctions.destroy = function() {\r\n      _bound = {keydown:{}, keyup:{}};\r\n      container.removeEventListener('keydown', down, true);\r\n      container.removeEventListener('keyup', up, true);\r\n    };\r\n\r\n    // create listeners.\r\n    container.addEventListener('keydown',down,true);\r\n    container.addEventListener('keyup',up,true);\r\n\r\n    // return the public functions.\r\n    return _exportFunctions;\r\n  }\r\n\r\n  return keycharm;\r\n}));\r\n\r\n\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/keycharm/keycharm.js\n// module id = 111\n// module chunks = 0","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Timeline\nexports.Timeline = require('./lib/timeline/Timeline');\nexports.Graph2d = require('./lib/timeline/Graph2d');\nexports.timeline = {\n  Core: require('./lib/timeline/Core'),\n  DateUtil: require('./lib/timeline/DateUtil'),\n  Range: require('./lib/timeline/Range'),\n  stack: require('./lib/timeline/Stack'),\n  TimeStep: require('./lib/timeline/TimeStep'),\n\n  components: {\n    items: {\n      Item: require('./lib/timeline/component/item/Item'),\n      BackgroundItem: require('./lib/timeline/component/item/BackgroundItem'),\n      BoxItem: require('./lib/timeline/component/item/BoxItem'),\n      PointItem: require('./lib/timeline/component/item/PointItem'),\n      RangeItem: require('./lib/timeline/component/item/RangeItem')\n    },\n\n    BackgroundGroup: require('./lib/timeline/component/BackgroundGroup'),\n    Component: require('./lib/timeline/component/Component'),\n    CurrentTime: require('./lib/timeline/component/CurrentTime'),\n    CustomTime: require('./lib/timeline/component/CustomTime'),\n    DataAxis: require('./lib/timeline/component/DataAxis'),\n    DataScale: require('./lib/timeline/component/DataScale'),\n    GraphGroup: require('./lib/timeline/component/GraphGroup'),\n    Group: require('./lib/timeline/component/Group'),\n    ItemSet: require('./lib/timeline/component/ItemSet'),\n    Legend: require('./lib/timeline/component/Legend'),\n    LineGraph: require('./lib/timeline/component/LineGraph'),\n    TimeAxis: require('./lib/timeline/component/TimeAxis')\n  }\n};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n\n// WEBPACK FOOTER //\n// ./index-timeline-graph2d.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar moment = require('../module/moment');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar Core = require('./Core');\nvar TimeAxis = require('./component/TimeAxis');\nvar CurrentTime = require('./component/CurrentTime');\nvar CustomTime = require('./component/CustomTime');\nvar ItemSet = require('./component/ItemSet');\n\nvar printStyle = require('../shared/Validator').printStyle;\nvar allOptions = require('./optionsTimeline').allOptions;\nvar configureOptions = require('./optionsTimeline').configureOptions;\n\nimport Configurator from '../shared/Configurator';\nimport Validator from '../shared/Validator';\n\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | vis.DataView | Array} [items]\n * @param {vis.DataSet | vis.DataView | Array} [groups]\n * @param {Object} [options]  See Timeline.setOptions for the available options.\n * @constructor\n * @extends Core\n */\nfunction Timeline (container, items, groups, options) {\n\n  if (!(this instanceof Timeline)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // if the third element is options, the forth is groups (optionally);\n  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn(\"Timeline option \\\"throttleRedraw\\\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.\");\n  }\n\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end:   null,\n    autoResize: true,\n    orientation: {\n      axis: 'bottom',   // axis orientation: 'bottom', 'top', or 'both'\n      item: 'bottom'    // not relevant\n    },\n    moment: moment,\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null\n  };\n  this.options = util.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n  if (!options || (options && typeof options.rtl == \"undefined\")) {\n    var directionFromDom, domNode = this.dom.root;\n    while (!directionFromDom && domNode) {\n      directionFromDom = window.getComputedStyle(domNode, null).direction;\n      domNode = domNode.parentElement;\n    }\n    this.options.rtl = (directionFromDom && (directionFromDom.toLowerCase() == \"rtl\"));\n  } else {\n    this.options.rtl = options.rtl;\n  }\n\n  this.options.rollingMode = options && options.rollingMode;\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: this.on.bind(this),\n      off: this.off.bind(this),\n      emit: this.emit.bind(this)\n    },\n    hiddenDates: [],\n    util: {\n      getScale: function () {\n        return me.timeAxis.step.scale;\n      },\n      getStep: function () {\n        return me.timeAxis.step.step;\n      },\n\n      toScreen: me._toScreen.bind(me),\n      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n      toTime: me._toTime.bind(me),\n      toGlobalTime : me._toGlobalTime.bind(me)\n    }\n  };\n\n  // range\n  this.range = new Range(this.body, this.options);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body, this.options);\n  this.timeAxis2 = null; // used in case of orientation option 'both'\n  this.components.push(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body, this.options);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.itemSet = new ItemSet(this.body, this.options);\n  this.components.push(this.itemSet);\n\n  this.itemsData = null;      // DataSet\n  this.groupsData = null;     // DataSet\n\n  this.dom.root.onclick = function (event) {\n    me.emit('click', me.getEventProperties(event))\n  };\n  this.dom.root.ondblclick = function (event) {\n    me.emit('doubleClick', me.getEventProperties(event))\n  };\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit('contextmenu', me.getEventProperties(event))\n  };\n  this.dom.root.onmouseover = function (event) {\n    me.emit('mouseOver', me.getEventProperties(event))\n  };\n  this.dom.root.onmousemove = function (event) {\n    me.emit('mouseMove', me.getEventProperties(event))\n  };\n\n  //Single time autoscale/fit\n  this.fitDone = false;\n  this.on('changed', function (){\n    if (this.itemsData == null || this.options.rollingMode) return;\n    if (!me.fitDone) {\n      me.fitDone = true;\n      if (me.options.start != undefined || me.options.end != undefined) {\n        if (me.options.start == undefined || me.options.end == undefined) {\n          var range = me.getItemRange();\n        }\n\n        var start = me.options.start != undefined ? me.options.start : range.min;\n        var end   = me.options.end   != undefined ? me.options.end   : range.max;\n        me.setWindow(start, end, {animation: false});\n      }\n      else {\n        me.fit({animation: false});\n      }\n    }\n  });\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nTimeline.prototype = new Core();\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nTimeline.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\n/**\n * Force a redraw. The size of all items will be recalculated.\n * Can be useful to manually redraw when option autoResize=false and the window\n * has been resized, or when the items CSS has been changed.\n *\n * Note: this function will be overridden on construction with a trottled version\n */\nTimeline.prototype.redraw = function() {\n  this.itemSet && this.itemSet.markDirty({refreshItems: true});\n  this._redraw();\n};\n\nTimeline.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n\n  if (errorFound === true) {\n    console.log('%cErrors have been found in the supplied options object.', printStyle);\n  }\n  Core.prototype.setOptions.call(this, options);\n\n  if ('type' in options) {\n    if (options.type !== this.options.type) {\n      this.options.type = options.type;\n\n      // force recreation of all items\n      var itemsData = this.itemsData;\n      if (itemsData) {\n        var selection = this.getSelection();\n        this.setItems(null);          // remove all\n        this.setItems(itemsData);     // add all\n        this.setSelection(selection); // restore selection\n      }\n    }\n  }\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nTimeline.prototype.setItems = function(items) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    newDataSet = items;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(items, {\n      type: {\n        start: 'Date',\n        end: 'Date'\n      }\n    });\n  }\n\n  // set items\n  this.itemsData = newDataSet;\n  this.itemSet && this.itemSet.setItems(newDataSet);\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nTimeline.prototype.setGroups = function(groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  }\n  else {\n    var filter = function(group) {\n      return group.visible !== false;\n    }\n    if (groups instanceof DataSet || groups instanceof DataView) {\n      newDataSet = new DataView(groups,{filter: filter});\n    }\n    else {\n      // turn an array into a dataset\n      newDataSet = new DataSet(groups.filter(filter));\n    }\n  }\n\n\n  this.groupsData = newDataSet;\n  this.itemSet.setGroups(newDataSet);\n};\n\n/**\n * Set both items and groups in one go\n * @param {{items: Array | vis.DataSet, groups: Array | vis.DataSet}} data\n */\nTimeline.prototype.setData = function (data) {\n  if (data && data.groups) {\n    this.setGroups(data.groups);\n  }\n\n  if (data && data.items) {\n    this.setItems(data.items);\n  }\n};\n\n/**\n * Set selected items by their id. Replaces the current selection\n * Unknown id's are silently ignored.\n * @param {string[] | string} [ids]  An array with zero or more id's of the items to be\n *                                selected. If ids is an empty array, all items will be\n *                                unselected.\n * @param {Object} [options]      Available options:\n *                                `focus: boolean`\n *                                    If true, focus will be set to the selected item(s)\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n *                                    Only applicable when option focus is true.\n */\nTimeline.prototype.setSelection = function(ids, options) {\n  this.itemSet && this.itemSet.setSelection(ids);\n\n  if (options && options.focus) {\n    this.focus(ids, options);\n  }\n};\n\n/**\n * Get the selected items by their id\n * @return {Array} ids  The ids of the selected items\n */\nTimeline.prototype.getSelection = function() {\n  return this.itemSet && this.itemSet.getSelection() || [];\n};\n\n/**\n * Adjust the visible window such that the selected item (or multiple items)\n * are centered on screen.\n * @param {String | String[]} id     An item id or array with item ids\n * @param {Object} [options]      Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nTimeline.prototype.focus = function(id, options) {\n  if (!this.itemsData || id == undefined) return;\n\n  var ids = Array.isArray(id) ? id : [id];\n\n  // get the specified item(s)\n  var itemsData = this.itemsData.getDataSet().get(ids, {\n    type: {\n      start: 'Date',\n      end: 'Date'\n    }\n  });\n\n  // calculate minimum start and maximum end of specified items\n  var start = null;\n  var end = null;\n  itemsData.forEach(function (itemData) {\n    var s = itemData.start.valueOf();\n    var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf();\n\n    if (start === null || s < start) {\n      start = s;\n    }\n\n    if (end === null || e > end) {\n      end = e;\n    }\n  });\n\n  if (start !== null && end !== null) {\n    // calculate the new middle and interval for the window\n    var middle = (start + end) / 2;\n    var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1);\n\n    var animation = (options && options.animation !== undefined) ? options.animation : true;\n    this.range.setRange(middle - interval / 2, middle + interval / 2, animation);\n  }\n};\n\n/**\n * Set Timeline window such that it fits all items\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nTimeline.prototype.fit = function (options) {\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n  var range;\n\n  var dataset = this.itemsData && this.itemsData.getDataSet();\n  if (dataset.length === 1 && dataset.get()[0].end === undefined) {\n    // a single item -> don't fit, just show a range around the item from -4 to +3 days\n    range = this.getDataRange();\n    this.moveTo(range.min.valueOf(), {animation});\n  }\n  else {\n    // exactly fit the items (plus a small margin)\n    range = this.getItemRange();\n    this.range.setRange(range.min, range.max, animation);\n  }\n};\n\n/**\n * Determine the range of the items, taking into account their actual width\n * and a margin of 10 pixels on both sides.\n * @return {{min: Date | null, max: Date | null}}\n */\nTimeline.prototype.getItemRange = function () {\n  // get a rough approximation for the range based on the items start and end dates\n  var range = this.getDataRange();\n  var min = range.min !== null ? range.min.valueOf() : null;\n  var max = range.max !== null ? range.max.valueOf() : null;\n  var minItem = null;\n  var maxItem = null;\n\n  if (min != null && max != null) {\n    var interval = (max - min); // ms\n    if (interval <= 0) {\n      interval = 10;\n    }\n    var factor = interval / this.props.center.width;\n\n    function getStart(item) {\n      return util.convert(item.data.start, 'Date').valueOf()\n    }\n\n    function getEnd(item) {\n      var end = item.data.end != undefined ? item.data.end : item.data.start;\n      return util.convert(end, 'Date').valueOf();\n    }\n\n    // calculate the date of the left side and right side of the items given\n    util.forEach(this.itemSet.items, function (item) {\n      if (item.groupShowing) {\n        item.show();\n        item.repositionX();\n      }\n\n      var start = getStart(item);\n      var end = getEnd(item);\n\n      if (this.options.rtl) {\n        var startSide  = start - (item.getWidthRight()  + 10) * factor;\n        var endSide = end   + (item.getWidthLeft() + 10) * factor;\n      } else {\n        var startSide  = start - (item.getWidthLeft()  + 10) * factor;\n        var endSide = end   + (item.getWidthRight() + 10) * factor;\n      }\n\n\n      if (startSide < min) {\n        min = startSide;\n        minItem = item;\n      }\n      if (endSide > max) {\n        max = endSide;\n        maxItem = item;\n      }\n    }.bind(this));\n\n    if (minItem && maxItem) {\n      var lhs = minItem.getWidthLeft() + 10;\n      var rhs = maxItem.getWidthRight() + 10;\n      var delta = this.props.center.width - lhs - rhs;  // px\n\n      if (delta > 0) {\n        if (this.options.rtl) {\n          min = getStart(minItem) - rhs * interval / delta; // ms\n          max = getEnd(maxItem)   + lhs * interval / delta; // ms\n        } else {\n          min = getStart(minItem) - lhs * interval / delta; // ms\n          max = getEnd(maxItem)   + rhs * interval / delta; // ms\n        }\n      }\n    }\n  }\n\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null\n  }\n};\n\n/**\n * Calculate the data range of the items start and end dates\n * @returns {{min: Date | null, max: Date | null}}\n */\nTimeline.prototype.getDataRange = function() {\n  var min = null;\n  var max = null;\n\n  var dataset = this.itemsData && this.itemsData.getDataSet();\n  if (dataset) {\n    dataset.forEach(function (item) {\n      var start = util.convert(item.start, 'Date').valueOf();\n      var end   = util.convert(item.end != undefined ? item.end : item.start, 'Date').valueOf();\n      if (min === null || start < min) {\n        min = start;\n      }\n      if (max === null || end > max) {\n        max = end;\n      }\n    });\n  }\n\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null\n  }\n};\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nTimeline.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  if (this.options.rtl) {\n    var x = util.getAbsoluteRight(this.dom.centerContainer) - clientX;\n  } else {\n    var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);\n  }\n  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);\n\n  var item  = this.itemSet.itemFromTarget(event);\n  var group = this.itemSet.groupFromTarget(event);\n  var customTime = CustomTime.customTimeFromTarget(event);\n\n  var snap = this.itemSet.options.snap || null;\n  var scale = this.body.util.getScale();\n  var step = this.body.util.getStep();\n  var time = this._toTime(x);\n  var snappedTime = snap ? snap(time, scale, step) : time;\n\n  var element = util.getTarget(event);\n  var what = null;\n  if (item != null)                                                    {what = 'item';}\n  else if (customTime != null)                                         {what = 'custom-time';}\n  else if (util.hasParent(element, this.timeAxis.dom.foreground))      {what = 'axis';}\n  else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {what = 'axis';}\n  else if (util.hasParent(element, this.itemSet.dom.labelSet))         {what = 'group-label';}\n  else if (util.hasParent(element, this.currentTime.bar))              {what = 'current-time';}\n  else if (util.hasParent(element, this.dom.center))                   {what = 'background';}\n\n  return {\n    event: event,\n    item: item ? item.id : null,\n    group: group ? group.groupId : null,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    snappedTime: snappedTime\n  }\n};\n\nmodule.exports = Timeline;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Timeline.js","var util = require('../util');\n\nimport ColorPicker from './ColorPicker'\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n *\n * @param parentModule        | the location where parentModule.setOptions() can be called\n * @param defaultContainer    | the default container of the module\n * @param configureOptions    | the fully configured and predefined options set found in allOptions.js\n * @param pixelRatio          | canvas pixel ratio\n */\nclass Configurator {\n  constructor(parentModule, defaultContainer, configureOptions, pixelRatio = 1) {\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   *\n   * @param options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n\n      let enabled = true;\n      if (typeof options === 'string') {\n        this.options.filter = options;\n      }\n      else if (options instanceof Array) {\n        this.options.filter = options.join();\n      }\n      else if (typeof options === 'object') {\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (options.filter !== undefined) {\n          this.options.filter = options.filter;\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      }\n      else if (typeof options === 'boolean') {\n        this.options.filter = true;\n        enabled = options;\n      }\n      else if (typeof options === 'function') {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (this.options.filter === false) {\n        enabled = false;\n      }\n\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n\n    let filter = this.options.filter;\n    let counter = 0;\n    let show = false;\n    for (let option in this.configureOptions) {\n      if (this.configureOptions.hasOwnProperty(option)) {\n        this.allowCreation = false;\n        show = false;\n        if (typeof filter === 'function') {\n          show = filter(option,[]);\n          show = show || this._handleObject(this.configureOptions[option], [option], true);\n        }\n        else if (filter === true || filter.indexOf(option) !== -1) {\n          show = true;\n        }\n\n        if (show !== false) {\n          this.allowCreation = true;\n\n          // linebreak between categories\n          if (counter > 0) {\n            this._makeItem([]);\n          }\n          // a header for the category\n          this._makeHeader(option);\n\n          // get the sub options\n          this._handleObject(this.configureOptions[option], [option]);\n        }\n        counter++;\n      }\n    }\n\n    if (this.options.showButton === true) {\n      let generateButton = document.createElement('div');\n      generateButton.className = 'vis-configuration vis-config-button';\n      generateButton.innerHTML = 'generate options';\n      generateButton.onclick =     () => {this._printOptions();};\n      generateButton.onmouseover = () => {generateButton.className = 'vis-configuration vis-config-button hover';};\n      generateButton.onmouseout =  () => {generateButton.className = 'vis-configuration vis-config-button';};\n\n      this.optionsContainer = document.createElement('div');\n      this.optionsContainer.className = 'vis-configuration vis-config-option-container';\n\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement('div');\n    this.wrapper.className = 'vis-configuration-wrapper';\n    this.container.appendChild(this.wrapper);\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n\n    this._showPopupIfNeeded()\n  }\n\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n\n    this._removePopup();\n  }\n\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      }\n      else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n\n  /**\n   * all option elements are wrapped in an item\n   * @param path\n   * @param domElements\n   * @private\n   */\n  _makeItem(path, ...domElements) {\n    if (this.allowCreation === true) {\n      let item = document.createElement('div');\n      item.className = 'vis-configuration vis-config-item vis-config-s' + path.length;\n      domElements.forEach((element) => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n\n  /**\n   * header for major subjects\n   * @param name\n   * @private\n   */\n  _makeHeader(name) {\n    let div = document.createElement('div');\n    div.className = 'vis-configuration vis-config-header';\n    div.innerHTML = name;\n    this._makeItem([],div);\n  }\n\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param name\n   * @param path\n   * @param objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path, objectLabel = false) {\n    let div = document.createElement('div');\n    div.className = 'vis-configuration vis-config-label vis-config-s' + path.length;\n    if (objectLabel === true) {\n      div.innerHTML = '<i><b>' + name + ':</b></i>';\n    }\n    else {\n      div.innerHTML = name + ':';\n    }\n    return div;\n  }\n\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    let select = document.createElement('select');\n    select.className = 'vis-configuration vis-config-select';\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (arr.indexOf(value) !== -1) {\n        selectedValue = arr.indexOf(value);\n      }\n    }\n\n    for (let i = 0; i < arr.length; i++) {\n      let option = document.createElement('option');\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = 'selected';\n      }\n      option.innerHTML = arr[i];\n      select.appendChild(option);\n    }\n\n    let me = this;\n    select.onchange = function () {me._update(this.value, path);};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, select);\n  }\n\n\n  /**\n   * make a range object for numeric options\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    let defaultValue = arr[0];\n    let min = arr[1];\n    let max = arr[2];\n    let step = arr[3];\n    let range = document.createElement('input');\n    range.className = 'vis-configuration vis-config-range';\n    try {\n      range.type = 'range'; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    }\n    catch (err) {}\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = '';\n    let popupValue = 0;\n\n    if (value !== undefined) {\n      let factor = 1.20;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = 'range increased';\n      }\n      else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = 'range increased';\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = 'range increased';\n      }\n      range.value = value;\n    }\n    else {\n      range.value = defaultValue;\n    }\n\n    let input = document.createElement('input');\n    input.className = 'vis-configuration vis-config-rangeinput';\n    input.value = range.value;\n\n    var me = this;\n    range.onchange = function () {input.value = this.value; me._update(Number(this.value), path);};\n    range.oninput  = function () {input.value = this.value; };\n\n    let label = this._makeLabel(path[path.length-1], path);\n    let itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n\n  }\n\n\n  /**\n   * prepare the popup\n   * @param string\n   * @param index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) {\n      let div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerHTML = string;\n      div.onclick = () => {this._removePopup()};\n      this.popupCounter += 1;\n      this.popupDiv = {html:div, index:index};\n    }\n  }\n\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      let correspondingElement = this.domElements[this.popupDiv.index];\n      let rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html)\n      this.popupDiv.hideTimeout = setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      },1500);\n      this.popupDiv.deleteTimeout = setTimeout(() => {\n        this._removePopup();\n      },1800)\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param defaultValue\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    var checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.className = 'vis-configuration vis-config-checkbox';\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === 'object') {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({path:path, value:value});\n          }\n        }\n        else {\n          this.changedOptions.push({path:path, value:value});\n        }\n      }\n    }\n\n    let me = this;\n    checkbox.onchange = function() {me._update(this.checked, path)};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param defaultValue\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    var checkbox = document.createElement('input');\n    checkbox.type = 'text';\n    checkbox.className = 'vis-configuration vis-config-text';\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({path:path, value:value});\n    }\n\n    let me = this;\n    checkbox.onchange = function() {me._update(this.value, path)};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    let defaultColor = arr[1];\n    let div = document.createElement('div');\n    value = value === undefined ? defaultColor : value;\n\n    if (value !== 'none') {\n      div.className = 'vis-configuration vis-config-colorBlock';\n      div.style.backgroundColor = value;\n    }\n    else {\n      div.className = 'vis-configuration vis-config-colorBlock none';\n    }\n\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value,div,path);\n    };\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path,label, div);\n  }\n\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param event\n   * @param value\n   * @param div\n   * @param path\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function() {};\n\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback((color) => {\n      let colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')';\n      div.style.backgroundColor = colorString;\n      this._update(colorString,path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value,div,path);\n      };\n    });\n  }\n\n\n  /**\n   * parse an object and draw the correct items\n   * @param obj\n   * @param path\n   * @private\n   */\n  _handleObject(obj, path = [], checkOnly = false) {\n    let show = false;\n    let filter = this.options.filter;\n    let visibleInSet = false;\n    for (let subObj in obj) {\n      if (obj.hasOwnProperty(subObj)) {\n        show = true;\n        let item = obj[subObj];\n        let newPath = util.copyAndExtendArray(path, subObj);\n        if (typeof filter === 'function') {\n          show = filter(subObj,path);\n\n          // if needed we must go deeper into the object.\n          if (show === false) {\n            if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) {\n              this.allowCreation = false;\n              show = this._handleObject(item, newPath, true);\n              this.allowCreation = checkOnly === false;\n            }\n          }\n        }\n\n        if (show !== false) {\n          visibleInSet = true;\n          let value = this._getValue(newPath);\n\n          if (item instanceof Array) {\n            this._handleArray(item, value, newPath);\n          }\n          else if (typeof item === 'string') {\n            this._makeTextInput(item, value, newPath);\n          }\n          else if (typeof item === 'boolean') {\n            this._makeCheckbox(item, value, newPath);\n          }\n          else if (item instanceof Object) {\n            // collapse the physics options that are not enabled\n            let draw = true;\n            if (path.indexOf('physics') !== -1) {\n              if (this.moduleOptions.physics.solver !== subObj) {\n                draw = false;\n              }\n            }\n\n            if (draw === true) {\n              // initially collapse options with an disabled enabled option.\n              if (item.enabled !== undefined) {\n                let enabledPath = util.copyAndExtendArray(newPath, 'enabled');\n                let enabledValue = this._getValue(enabledPath);\n                if (enabledValue === true) {\n                  let label = this._makeLabel(subObj, newPath, true);\n                  this._makeItem(newPath, label);\n                  visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n                }\n                else {\n                  this._makeCheckbox(item, enabledValue, newPath);\n                }\n              }\n              else {\n                let label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n              }\n            }\n          }\n          else {\n            console.error('dont know how to handle', item, subObj, newPath);\n          }\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n\n  /**\n   * handle the array type of option\n   * @param optionName\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === 'string' && arr[0] === 'color') {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {this.changedOptions.push({path:path, value:value});}\n    }\n    else if (typeof arr[0] === 'string') {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {this.changedOptions.push({path:path, value:value});}\n    }\n    else if (typeof arr[0] === 'number') {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {this.changedOptions.push({path:path, value:Number(value)});}\n    }\n  }\n\n\n\n  /**\n   * called to update the network with the new settings.\n   * @param value\n   * @param path\n   * @private\n   */\n  _update(value, path) {\n    let options = this._constructOptions(value,path);\n\n    if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  _constructOptions(value, path, optionsObj = {}) {\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === 'true'  ? true  : value;\n    value = value === 'false' ? false : value;\n\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== 'global') {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        }\n        else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  _printOptions() {\n    let options = this.getOptions();\n    this.optionsContainer.innerHTML = '<pre>var options = ' + JSON.stringify(options, null, 2) + '</pre>';\n  }\n\n  getOptions() {\n    let options = {};\n    for (var i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options)\n    }\n    return options;\n  }\n}\n\n\nexport default Configurator;\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Configurator.js","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 115\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 116\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 117\n// module chunks = 0","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/define-property.js\n// module id = 118\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.define-property.js\n// module id = 119\n// module chunks = 0","let Hammer = require('../module/hammer');\nlet hammerUtil = require('../hammerUtil');\nlet util = require('../util');\n\nclass ColorPicker {\n  constructor(pixelRatio = 1) {\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = {x:289/2, y:289/2};\n    this.r = 289 * 0.49;\n    this.color = {r:255,g:255,b:255,a:1.0};\n    this.hueCircle = undefined;\n    this.initialColor = {r:255,g:255,b:255,a:1.0};\n    this.previousColor= undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === 'function') {\n      this.updateCallback = callback;\n    }\n    else {\n      throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === 'function') {\n      this.closeCallback = callback;\n    }\n    else {\n      throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");\n    }\n  }\n\n  _isColorString(color) {\n    var htmlColors = {black: '#000000',navy: '#000080',darkblue: '#00008B',mediumblue: '#0000CD',blue: '#0000FF',darkgreen: '#006400',green: '#008000',teal: '#008080',darkcyan: '#008B8B',deepskyblue: '#00BFFF',darkturquoise: '#00CED1',mediumspringgreen: '#00FA9A',lime: '#00FF00',springgreen: '#00FF7F',aqua: '#00FFFF',cyan: '#00FFFF',midnightblue: '#191970',dodgerblue: '#1E90FF',lightseagreen: '#20B2AA',forestgreen: '#228B22',seagreen: '#2E8B57',darkslategray: '#2F4F4F',limegreen: '#32CD32',mediumseagreen: '#3CB371',turquoise: '#40E0D0',royalblue: '#4169E1',steelblue: '#4682B4',darkslateblue: '#483D8B',mediumturquoise: '#48D1CC',indigo: '#4B0082',darkolivegreen: '#556B2F',cadetblue: '#5F9EA0',cornflowerblue: '#6495ED',mediumaquamarine: '#66CDAA',dimgray: '#696969',slateblue: '#6A5ACD',olivedrab: '#6B8E23',slategray: '#708090',lightslategray: '#778899',mediumslateblue: '#7B68EE',lawngreen: '#7CFC00',chartreuse: '#7FFF00',aquamarine: '#7FFFD4',maroon: '#800000',purple: '#800080',olive: '#808000',gray: '#808080',skyblue: '#87CEEB',lightskyblue: '#87CEFA',blueviolet: '#8A2BE2',darkred: '#8B0000',darkmagenta: '#8B008B',saddlebrown: '#8B4513',darkseagreen: '#8FBC8F',lightgreen: '#90EE90',mediumpurple: '#9370D8',darkviolet: '#9400D3',palegreen: '#98FB98',darkorchid: '#9932CC',yellowgreen: '#9ACD32',sienna: '#A0522D',brown: '#A52A2A',darkgray: '#A9A9A9',lightblue: '#ADD8E6',greenyellow: '#ADFF2F',paleturquoise: '#AFEEEE',lightsteelblue: '#B0C4DE',powderblue: '#B0E0E6',firebrick: '#B22222',darkgoldenrod: '#B8860B',mediumorchid: '#BA55D3',rosybrown: '#BC8F8F',darkkhaki: '#BDB76B',silver: '#C0C0C0',mediumvioletred: '#C71585',indianred: '#CD5C5C',peru: '#CD853F',chocolate: '#D2691E',tan: '#D2B48C',lightgrey: '#D3D3D3',palevioletred: '#D87093',thistle: '#D8BFD8',orchid: '#DA70D6',goldenrod: '#DAA520',crimson: '#DC143C',gainsboro: '#DCDCDC',plum: '#DDA0DD',burlywood: '#DEB887',lightcyan: '#E0FFFF',lavender: '#E6E6FA',darksalmon: '#E9967A',violet: '#EE82EE',palegoldenrod: '#EEE8AA',lightcoral: '#F08080',khaki: '#F0E68C',aliceblue: '#F0F8FF',honeydew: '#F0FFF0',azure: '#F0FFFF',sandybrown: '#F4A460',wheat: '#F5DEB3',beige: '#F5F5DC',whitesmoke: '#F5F5F5',mintcream: '#F5FFFA',ghostwhite: '#F8F8FF',salmon: '#FA8072',antiquewhite: '#FAEBD7',linen: '#FAF0E6',lightgoldenrodyellow: '#FAFAD2',oldlace: '#FDF5E6',red: '#FF0000',fuchsia: '#FF00FF',magenta: '#FF00FF',deeppink: '#FF1493',orangered: '#FF4500',tomato: '#FF6347',hotpink: '#FF69B4',coral: '#FF7F50',darkorange: '#FF8C00',lightsalmon: '#FFA07A',orange: '#FFA500',lightpink: '#FFB6C1',pink: '#FFC0CB',gold: '#FFD700',peachpuff: '#FFDAB9',navajowhite: '#FFDEAD',moccasin: '#FFE4B5',bisque: '#FFE4C4',mistyrose: '#FFE4E1',blanchedalmond: '#FFEBCD',papayawhip: '#FFEFD5',lavenderblush: '#FFF0F5',seashell: '#FFF5EE',cornsilk: '#FFF8DC',lemonchiffon: '#FFFACD',floralwhite: '#FFFAF0',snow: '#FFFAFA',yellow: '#FFFF00',lightyellow: '#FFFFE0',ivory: '#FFFFF0',white: '#FFFFFF'};\n    if (typeof color === 'string') {\n      return htmlColors[color];\n    }\n  }\n\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rbg(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param color\n   * @param setInitial\n   */\n  setColor(color, setInitial = true) {\n    if (color === 'none') {\n      return;\n    }\n\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    var htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (util.isString(color) === true) {\n      if (util.isValidRGB(color) === true) {\n        let rgbaArray = color.substr(4).substr(0, color.length - 5).split(',');\n        rgba = {r:rgbaArray[0], g:rgbaArray[1], b:rgbaArray[2], a:1.0};\n      }\n      else if (util.isValidRGBA(color) === true) {\n        let rgbaArray = color.substr(5).substr(0, color.length - 6).split(',');\n        rgba = {r:rgbaArray[0], g:rgbaArray[1], b:rgbaArray[2], a:rgbaArray[3]};\n      }\n      else if (util.isValidHex(color) === true) {\n        let rgbObj = util.hexToRGB(color);\n        rgba = {r:rgbObj.r, g:rgbObj.g, b:rgbObj.b, a:1.0};\n      }\n    }\n    else {\n      if (color instanceof Object) {\n        if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {\n          let alpha = color.a !== undefined ? color.a : '1.0';\n          rgba = {r:color.r, g:color.g, b:color.b, a:alpha};\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" + JSON.stringify(color));\n    }\n    else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n\n    this.applied = false;\n    this.frame.style.display = 'block';\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param storePrevious\n   * @private\n   */\n  _hide(storePrevious = true) {\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = util.extend({}, this.color);\n    }\n\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n\n    this.frame.style.display = 'none';\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    },0);\n  }\n\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    }\n    else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n\n  /**\n   * set the color, place the picker\n   * @param rgba\n   * @param setInitial\n   * @private\n   */\n  _setColor(rgba, setInitial = true) {\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = util.extend({}, rgba);\n    }\n\n    this.color = rgba;\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n    let angleConvert = 2 * Math.PI;\n    let radius = this.r * hsv.s;\n    let x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    let y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n    this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px';\n    this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px';\n\n    this._updatePicker(rgba);\n  }\n\n\n  /**\n   * bound to opacity control\n   * @param value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n\n  /**\n   * bound to brightness control\n   * @param value\n   * @private\n   */\n  _setBrightness(value) {\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba['a'] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param rgba\n   * @private\n   */\n  _updatePicker(rgba = this.color) {\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n    let ctx = this.colorPickerCanvas.getContext('2d');\n    if (this.pixelRation === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    let w = this.colorPickerCanvas.clientWidth;\n    let h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n\n    ctx.putImageData(this.hueCircle, 0,0);\n    ctx.fillStyle = 'rgba(0,0,0,' + (1- hsv.v) + ')';\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    ctx.fill();\n\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value    = 100 * rgba.a;\n\n    this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';\n    this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';\n  }\n\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = '100%';\n    this.colorPickerCanvas.style.height = '100%';\n\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-color-picker';\n\n    this.colorPickerDiv = document.createElement('div');\n    this.colorPickerSelector = document.createElement('div');\n    this.colorPickerSelector.className = 'vis-selector';\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n    this.colorPickerCanvas = document.createElement('canvas');\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n    if (!this.colorPickerCanvas.getContext) {\n      let noCanvas = document.createElement( 'DIV' );\n      noCanvas.style.color = 'red';\n      noCanvas.style.fontWeight =  'bold' ;\n      noCanvas.style.padding =  '10px';\n      noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n      this.colorPickerCanvas.appendChild(noCanvas);\n    }\n    else {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n      this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    this.colorPickerDiv.className = 'vis-color';\n\n    this.opacityDiv = document.createElement('div');\n    this.opacityDiv.className = 'vis-opacity';\n\n    this.brightnessDiv = document.createElement('div');\n    this.brightnessDiv.className = 'vis-brightness';\n\n    this.arrowDiv = document.createElement('div');\n    this.arrowDiv.className = 'vis-arrow';\n\n    this.opacityRange = document.createElement('input');\n    try {\n      this.opacityRange.type = 'range'; // Not supported on IE9\n      this.opacityRange.min = '0';\n      this.opacityRange.max = '100';\n    }\n    catch (err) {}\n    this.opacityRange.value = '100';\n    this.opacityRange.className = 'vis-range';\n\n    this.brightnessRange = document.createElement('input');\n    try {\n      this.brightnessRange.type = 'range'; // Not supported on IE9\n      this.brightnessRange.min = '0';\n      this.brightnessRange.max = '100';\n    }\n    catch (err) {}\n    this.brightnessRange.value = '100';\n    this.brightnessRange.className = 'vis-range';\n\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n\n    var me = this;\n    this.opacityRange.onchange = function () {me._setOpacity(this.value);};\n    this.opacityRange.oninput  = function () {me._setOpacity(this.value);};\n    this.brightnessRange.onchange = function () {me._setBrightness(this.value);};\n    this.brightnessRange.oninput  = function () {me._setBrightness(this.value);};\n\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerHTML = 'brightness:';\n\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerHTML = 'opacity:';\n\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerHTML = 'new';\n\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerHTML = 'initial';\n\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerHTML = 'cancel';\n    this.cancelButton.onclick = this._hide.bind(this, false);\n\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerHTML = 'apply';\n    this.applyButton.onclick = this._apply.bind(this);\n\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerHTML = 'save';\n    this.saveButton.onclick = this._save.bind(this);\n\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerHTML = 'load last';\n    this.loadButton.onclick = this._loadLast.bind(this);\n\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer(this.colorPickerCanvas);\n    this.hammer.get('pinch').set({enable: true});\n\n    hammerUtil.onTouch(this.hammer, (event) => {this._moveSelector(event)});\n    this.hammer.on('tap',       (event) => {this._moveSelector(event)});\n    this.hammer.on('panstart',  (event) => {this._moveSelector(event)});\n    this.hammer.on('panmove',   (event) => {this._moveSelector(event)});\n    this.hammer.on('panend',    (event) => {this._moveSelector(event)});\n  }\n\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      let ctx = this.colorPickerCanvas.getContext('2d');\n      if (this.pixelRation === undefined) {\n        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.colorPickerCanvas.clientWidth;\n      let h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = {x: w * 0.5, y: h * 0.5};\n      this.r = 0.49 * w;\n      let angleConvert = (2 * Math.PI) / 360;\n      let hfac = 1 / 360;\n      let sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')';\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = 'rgba(0,0,0,1)';\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n\n      this.hueCircle = ctx.getImageData(0,0,w,h);\n    }\n    this.generated = true;\n  }\n\n\n  /**\n   * move the selector. This is called by hammer functions.\n   *\n   * @param event\n   * @private\n   */\n  _moveSelector(event) {\n    let rect = this.colorPickerDiv.getBoundingClientRect();\n    let left = event.center.x - rect.left;\n    let top = event.center.y - rect.top;\n\n    let centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    let centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n    let x = left - centerX;\n    let y = top - centerY;\n\n    let angle = Math.atan2(x,y);\n    let radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n    let newTop = Math.cos(angle) * radius + centerY;\n    let newLeft = Math.sin(angle) * radius + centerX;\n\n    this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px';\n    this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px';\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    let s = radius / this.r;\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba['a'] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';\n    this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';\n  }\n}\n\nexport default ColorPicker;\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/ColorPicker.js","var Hammer = require('./module/hammer');\n\n/**\n * Register a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.onTouch = function (hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFirst) {\n      callback(event);\n    }\n  };\n\n  hammer.on('hammer.input', callback.inputHandler);\n};\n\n/**\n * Register a release event, taking place after a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.onRelease = function (hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFinal) {\n      callback(event);\n    }\n  };\n\n  return hammer.on('hammer.input', callback.inputHandler);\n};\n\n\n/**\n * Unregister a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.offTouch = function (hammer, callback) {\n  hammer.off('hammer.input', callback.inputHandler);\n};\n\n/**\n * Unregister a release event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.offRelease = exports.offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @return {Hammer.Pinch} returns the pinchRecognizer\n */\nexports.disablePreventDefaultVertically = function (pinchRecognizer) {\n  var TOUCH_ACTION_PAN_Y = 'pan-y';\n\n  pinchRecognizer.getTouchAction = function() {\n    // default method returns [TOUCH_ACTION_NONE]\n    return [TOUCH_ACTION_PAN_Y];\n  };\n\n  return pinchRecognizer;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/hammerUtil.js","var util = require('../util');\n\nlet errorFound = false;\nlet allOptions;\nlet printStyle = 'background: #FFeeee; color: #dd0000';\n/**\n *  Used to validate options.\n */\nclass Validator {\n  constructor() {\n  }\n\n  /**\n   * Main function to be called\n   * @param options\n   * @param subObject\n   * @returns {boolean}\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound = false;\n    allOptions = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound;\n  }\n\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param options\n   * @param referenceOptions\n   * @param path\n   */\n  static parse(options, referenceOptions, path) {\n    for (let option in options) {\n      if (options.hasOwnProperty(option)) {\n        Validator.check(option, options, referenceOptions, path);\n      }\n    }\n  }\n\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param option\n   * @param options\n   * @param referenceOptions\n   * @param path\n   */\n  static check(option, options, referenceOptions, path) {\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) {\n      Validator.getSuggestion(option, referenceOptions, path);\n    }\n    else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) {\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) {\n        // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object.\n        Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path);\n      }\n      else {\n        Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path);\n      }\n    }\n    else {\n      // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field.\n      if (referenceOptions[option].__type__ !== undefined) {\n        // if this should be an object, we check if the correct type has been supplied to account for shorthand options.\n        Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path);\n      }\n      else {\n        Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path);\n      }\n    }\n  }\n\n  /**\n   *\n   * @param {String}  option     | the option property\n   * @param {Object}  options    | The supplied options object\n   * @param {Object}  referenceOptions    | The reference options containing all options and their allowed formats\n   * @param {String}  referenceOption     | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {String}  refOptionType       | This is the type object from the reference options\n   * @param {Array}   path      | where in the object is the option\n   */\n  static checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) {\n    let optionType = Validator.getType(options[option]);\n    let refOptionType = refOptionObj[optionType];\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (Validator.getType(refOptionType) === 'array') {\n        if (refOptionType.indexOf(options[option]) === -1) {\n          console.log('%cInvalid option detected in \"' + option + '\".' +\n            ' Allowed values are:' + Validator.print(refOptionType) + ' not \"' + options[option] + '\". ' + Validator.printLocation(path, option), printStyle);\n          errorFound = true;\n        }\n        else if (optionType === 'object' && referenceOption !== \"__any__\") {\n          path = util.copyAndExtendArray(path, option);\n          Validator.parse(options[option], referenceOptions[referenceOption], path);\n        }\n      }\n      else if (optionType === 'object' && referenceOption !== \"__any__\") {\n        path = util.copyAndExtendArray(path, option);\n        Validator.parse(options[option], referenceOptions[referenceOption], path);\n      }\n    }\n    else if (refOptionObj['any'] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      console.log('%cInvalid type received for \"' + option + '\". Expected: ' + Validator.print(Object.keys(refOptionObj)) + '. Received [' + optionType + '] \"' + options[option] + '\"' + Validator.printLocation(path, option), printStyle);\n      errorFound = true;\n    }\n  }\n\n\n  static getType(object) {\n    var type = typeof object;\n\n    if (type === 'object') {\n      if (object === null) {\n        return 'null';\n      }\n      if (object instanceof Boolean) {\n        return 'boolean';\n      }\n      if (object instanceof Number) {\n        return 'number';\n      }\n      if (object instanceof String) {\n        return 'string';\n      }\n      if (Array.isArray(object)) {\n        return 'array';\n      }\n      if (object instanceof Date) {\n        return 'date';\n      }\n      if (object.nodeType !== undefined) {\n        return 'dom';\n      }\n      if (object._isAMomentObject === true) {\n        return 'moment';\n      }\n      return 'object';\n    }\n    else if (type === 'number') {\n      return 'number';\n    }\n    else if (type === 'boolean') {\n      return 'boolean';\n    }\n    else if (type === 'string') {\n      return 'string';\n    }\n    else if (type === undefined) {\n      return 'undefined';\n    }\n    return type;\n  }\n\n  static getSuggestion(option, options, path) {\n    let localSearch = Validator.findInOptions(option,options,path,false);\n    let globalSearch = Validator.findInOptions(option,allOptions,[],true);\n\n    let localSearchThreshold = 8;\n    let globalSearchThreshold = 4;\n\n    if (localSearch.indexMatch !== undefined) {\n      console.log('%cUnknown option detected: \"' + option + '\" in ' + Validator.printLocation(localSearch.path, option,'') + 'Perhaps it was incomplete? Did you mean: \"' + localSearch.indexMatch + '\"?\\n\\n', printStyle);\n    }\n    else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) {\n      console.log('%cUnknown option detected: \"' + option + '\" in ' + Validator.printLocation(localSearch.path, option,'') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch,''), printStyle);\n    }\n    else if (localSearch.distance <= localSearchThreshold) {\n      console.log('%cUnknown option detected: \"' + option + '\". Did you mean \"' + localSearch.closestMatch + '\"?' + Validator.printLocation(localSearch.path, option), printStyle);\n    }\n    else {\n      console.log('%cUnknown option detected: \"' + option + '\". Did you mean one of these: ' + Validator.print(Object.keys(options)) + Validator.printLocation(path, option), printStyle);\n    }\n\n    errorFound = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param option\n   * @param options\n   * @param path\n   * @param recursive\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   */\n  static findInOptions(option, options, path, recursive = false) {\n    let min = 1e9;\n    let closestMatch = '';\n    let closestMatchPath = [];\n    let lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (let op in options) {\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        let result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path,op));\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      }\n      else {\n        if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = util.copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {closestMatch:closestMatch, path:closestMatchPath, distance:min, indexMatch: indexMatch};\n  }\n\n  static printLocation(path, option, prefix = 'Problem value found at: \\n') {\n    let str = '\\n\\n' + prefix + 'options = {\\n';\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += '  ';\n      }\n      str += path[i] + ': {\\n'\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += '  ';\n    }\n    str += option + '\\n';\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += '  ';\n      }\n      str += '}\\n'\n    }\n    return str + '\\n\\n';\n  }\n\n  static print(options) {\n    return JSON.stringify(options).replace(/(\\\")|(\\[)|(\\])|(,\"__type__\")/g, \"\").replace(/(\\,)/g, ', ')\n  }\n\n\n  // Compute the edit distance between the two given strings\n  // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n  /*\n   Copyright (c) 2011 Andrei Mackenzie\n\n   Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\n   The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n\n    var matrix = [];\n\n    // increment along the first column of each row\n    var i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    var j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution\n            Math.min(matrix[i][j - 1] + 1, // insertion\n              matrix[i - 1][j] + 1)); // deletion\n        }\n      }\n    }\n\n    return matrix[b.length][a.length];\n  }\n\n;\n}\n\n\nexport default Validator;\nexport {printStyle}\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Validator.js","var util = require('../util');\nvar hammerUtil = require('../hammerUtil');\nvar moment = require('../module/moment');\nvar Component = require('./component/Component');\nvar DateUtil = require('./DateUtil');\n\n/**\n * @constructor Range\n * A Range controls a numeric range with a start and end value.\n * The Range adjusts the range based on mouse events or programmatic changes,\n * and triggers events when the range is changing or has been changed.\n * @param {{dom: Object, domProps: Object, emitter: Emitter}} body\n * @param {Object} [options]    See description at Range.setOptions\n */\nfunction Range(body, options) {\n  var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0);\n  var start = now.clone().add(-3, 'days').valueOf();\n  var end = now.clone().add(-3, 'days').valueOf(); \n\n  if(options === undefined) {\n    this.start = start;\n    this.end = end;\n  } else {\n    this.start = options.start || start\n    this.end = options.end || end\n  }\n\n  this.rolling = false;\n\n  this.body = body;\n  this.deltaDifference = 0;\n  this.scaleOffset = 0;\n  this.startToFront = false;\n  this.endToFront = true;\n\n  // default options\n  this.defaultOptions = {\n    rtl: false,\n    start: null,\n    end: null,\n    moment: moment,\n    direction: 'horizontal', // 'horizontal' or 'vertical'\n    moveable: true,\n    zoomable: true,\n    min: null,\n    max: null,\n    zoomMin: 10,                                // milliseconds\n    zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000  // milliseconds\n  };\n  this.options = util.extend({}, this.defaultOptions);\n  this.props = {\n    touch: {}\n  };\n  this.animationTimer = null;\n\n  // drag listeners for dragging\n  this.body.emitter.on('panstart', this._onDragStart.bind(this));\n  this.body.emitter.on('panmove',  this._onDrag.bind(this));\n  this.body.emitter.on('panend',   this._onDragEnd.bind(this));\n\n  // mouse wheel for zooming\n  this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this));\n\n  // pinch to zoom\n  this.body.emitter.on('touch', this._onTouch.bind(this));\n  this.body.emitter.on('pinch', this._onPinch.bind(this));\n\n  // on click of rolling mode button\n  this.body.dom.rollingModeBtn.addEventListener('click', this.startRolling.bind(this));\n\n  this.setOptions(options);\n}\n\nRange.prototype = new Component();\n\n/**\n * Set options for the range controller\n * @param {Object} options      Available options:\n *                              {Number | Date | String} start  Start date for the range\n *                              {Number | Date | String} end    End date for the range\n *                              {Number} min    Minimum value for start\n *                              {Number} max    Maximum value for end\n *                              {Number} zoomMin    Set a minimum value for\n *                                                  (end - start).\n *                              {Number} zoomMax    Set a maximum value for\n *                                                  (end - start).\n *                              {Boolean} moveable Enable moving of the range\n *                                                 by dragging. True by default\n *                              {Boolean} zoomable Enable zooming of the range\n *                                                 by pinching/scrolling. True by default\n */\nRange.prototype.setOptions = function (options) {\n  if (options) {\n    // copy the options that we know\n    var fields = [\n      'animation', 'direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable',\n      'moment', 'activate', 'hiddenDates', 'zoomKey', 'rtl', 'showCurrentTime', 'rollMode', 'horizontalScroll'\n    ];\n    util.selectiveExtend(fields, this.options, options);\n\n    if (options.rollingMode) {\n      this.startRolling();\n    }\n    if ('start' in options || 'end' in options) {\n      // apply a new range. both start and end are optional\n      this.setRange(options.start, options.end);\n    }\n  }\n};\n\n/**\n * Test whether direction has a valid value\n * @param {String} direction    'horizontal' or 'vertical'\n */\nfunction validateDirection (direction) {\n  if (direction != 'horizontal' && direction != 'vertical') {\n    throw new TypeError('Unknown direction \"' + direction + '\". ' +\n        'Choose \"horizontal\" or \"vertical\".');\n  }\n}\n\n/**\n * Start auto refreshing the current time bar\n */\nRange.prototype.startRolling = function() {\n  var me = this;\n\n\n  function update () {\n    me.stopRolling();\n    me.rolling = true;\n\n\n    var interval = me.end - me.start;\n    var t = util.convert(new Date(), 'Date').valueOf();\n\n    var start = t - interval / 2;\n    var end = t + interval / 2;\n    var animation = (me.options && me.options.animation !== undefined) ? me.options.animation : true;\n\n    me.setRange(start, end, false);\n\n    // determine interval to refresh\n    var scale = me.conversion(me.body.domProps.center.width).scale;\n    var interval = 1 / scale / 10;\n    if (interval < 30)   interval = 30;\n    if (interval > 1000) interval = 1000;\n\n    me.body.dom.rollingModeBtn.style.visibility = \"hidden\";\n    // start a renderTimer to adjust for the new time\n    me.currentTimeTimer = setTimeout(update, interval);\n  }\n\n  update();\n};\n\n/**\n * Stop auto refreshing the current time bar\n */\nRange.prototype.stopRolling = function() {\n  if (this.currentTimeTimer !== undefined) {\n    clearTimeout(this.currentTimeTimer);\n    this.rolling = false;\n    this.body.dom.rollingModeBtn.style.visibility = \"visible\";\n  }\n};\n\n/**\n * Set a new start and end range\n * @param {Date | Number | String} [start]\n * @param {Date | Number | String} [end]\n * @param {boolean | {duration: number, easingFunction: string}} [animation=false]\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n * @param {Boolean} [byUser=false]\n *\n */\nRange.prototype.setRange = function(start, end, animation, byUser, event) {\n  if (byUser !== true) {\n    byUser = false;\n  }\n  var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null;\n  var finalEnd   = end != undefined   ? util.convert(end, 'Date').valueOf()   : null;\n  this._cancelAnimation();\n\n  if (animation) { // true or an Object\n    var me = this;\n    var initStart = this.start;\n    var initEnd = this.end;\n    var duration = (typeof animation === 'object' && 'duration' in animation) ? animation.duration : 500;\n    var easingName = (typeof animation === 'object' && 'easingFunction' in animation) ? animation.easingFunction : 'easeInOutQuad';\n    var easingFunction = util.easingFunctions[easingName];\n    if (!easingFunction) {\n      throw new Error('Unknown easing function ' + JSON.stringify(easingName) + '. ' +\n          'Choose from: ' + Object.keys(util.easingFunctions).join(', '));\n    }\n\n    var initTime = new Date().valueOf();\n    var anyChanged = false;\n\n    var next = function () {\n      if (!me.props.touch.dragging) {\n        var now = new Date().valueOf();\n        var time = now - initTime;\n        var ease = easingFunction(time / duration);\n        var done = time > duration;\n        var s = (done || finalStart === null) ? finalStart : initStart + (finalStart - initStart) * ease;\n        var e = (done || finalEnd   === null) ? finalEnd   : initEnd   + (finalEnd   - initEnd)   * ease;\n\n        changed = me._applyRange(s, e);\n        DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates);\n        anyChanged = anyChanged || changed;\n\n        var params = {\n          start: new Date(me.start), \n          end: new Date(me.end), \n          byUser:byUser,\n          event: util.elementsCensor(event)\n        }\n\n        if (changed) {\n          me.body.emitter.emit('rangechange', params);\n        }\n\n        if (done) {\n          if (anyChanged) {\n            me.body.emitter.emit('rangechanged', params);\n          }\n        }\n        else {\n          // animate with as high as possible frame rate, leave 20 ms in between\n          // each to prevent the browser from blocking\n          me.animationTimer = setTimeout(next, 20);\n        }\n      }\n    };\n\n    return next();\n  }\n  else {\n    var changed = this._applyRange(finalStart, finalEnd);\n    DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n    if (changed) {\n      var params = {\n        start: new Date(this.start), \n        end: new Date(this.end), \n        byUser:byUser, \n        event: util.elementsCensor(event)\n      };\n      this.body.emitter.emit('rangechange', params);\n      this.body.emitter.emit('rangechanged', params);\n    }\n  }\n};\n\n/**\n * Stop an animation\n * @private\n */\nRange.prototype._cancelAnimation = function () {\n  if (this.animationTimer) {\n    clearTimeout(this.animationTimer);\n    this.animationTimer = null;\n  }\n};\n\n/**\n * Set a new start and end range. This method is the same as setRange, but\n * does not trigger a range change and range changed event, and it returns\n * true when the range is changed\n * @param {Number} [start]\n * @param {Number} [end]\n * @return {Boolean} changed\n * @private\n */\nRange.prototype._applyRange = function(start, end) {\n  var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start,\n      newEnd   = (end != null)   ? util.convert(end, 'Date').valueOf()   : this.end,\n      max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null,\n      min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null,\n      diff;\n\n  // check for valid number\n  if (isNaN(newStart) || newStart === null) {\n    throw new Error('Invalid start \"' + start + '\"');\n  }\n  if (isNaN(newEnd) || newEnd === null) {\n    throw new Error('Invalid end \"' + end + '\"');\n  }\n\n  // prevent start < end\n  if (newEnd < newStart) {\n    newEnd = newStart;\n  }\n\n  // prevent start < min\n  if (min !== null) {\n    if (newStart < min) {\n      diff = (min - newStart);\n      newStart += diff;\n      newEnd += diff;\n\n      // prevent end > max\n      if (max != null) {\n        if (newEnd > max) {\n          newEnd = max;\n        }\n      }\n    }\n  }\n\n  // prevent end > max\n  if (max !== null) {\n    if (newEnd > max) {\n      diff = (newEnd - max);\n      newStart -= diff;\n      newEnd -= diff;\n\n      // prevent start < min\n      if (min != null) {\n        if (newStart < min) {\n          newStart = min;\n        }\n      }\n    }\n  }\n\n  // prevent (end-start) < zoomMin\n  if (this.options.zoomMin !== null) {\n    var zoomMin = parseFloat(this.options.zoomMin);\n    if (zoomMin < 0) {\n      zoomMin = 0;\n    }\n    if ((newEnd - newStart) < zoomMin) {\n      if ((this.end - this.start) === zoomMin && newStart > this.start && newEnd < this.end) {\n        // ignore this action, we are already zoomed to the minimum\n        newStart = this.start;\n        newEnd = this.end;\n      }\n      else {\n        // zoom to the minimum\n        diff = (zoomMin - (newEnd - newStart));\n        newStart -= diff / 2;\n        newEnd += diff / 2;\n      }\n    }\n  }\n\n  // prevent (end-start) > zoomMax\n  if (this.options.zoomMax !== null) {\n    var zoomMax = parseFloat(this.options.zoomMax);\n    if (zoomMax < 0) {\n      zoomMax = 0;\n    }\n\n    if ((newEnd - newStart) > zoomMax) {\n      if ((this.end - this.start) === zoomMax && newStart < this.start && newEnd > this.end) {\n        // ignore this action, we are already zoomed to the maximum\n        newStart = this.start;\n        newEnd = this.end;\n      }\n      else {\n        // zoom to the maximum\n        diff = ((newEnd - newStart) - zoomMax);\n        newStart += diff / 2;\n        newEnd -= diff / 2;\n      }\n    }\n  }\n\n  var changed = (this.start != newStart || this.end != newEnd);\n\n  // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range)\n  if (!((newStart >= this.start && newStart   <= this.end) || (newEnd   >= this.start && newEnd   <= this.end)) &&\n      !((this.start >= newStart && this.start <= newEnd)   || (this.end >= newStart   && this.end <= newEnd) )) {\n    this.body.emitter.emit('checkRangedItems');\n  }\n\n  this.start = newStart;\n  this.end = newEnd;\n  return changed;\n};\n\n/**\n * Retrieve the current range.\n * @return {Object} An object with start and end properties\n */\nRange.prototype.getRange = function() {\n  return {\n    start: this.start,\n    end: this.end\n  };\n};\n\n/**\n * Calculate the conversion offset and scale for current range, based on\n * the provided width\n * @param {Number} width\n * @returns {{offset: number, scale: number}} conversion\n */\nRange.prototype.conversion = function (width, totalHidden) {\n  return Range.conversion(this.start, this.end, width, totalHidden);\n};\n\n/**\n * Static method to calculate the conversion offset and scale for a range,\n * based on the provided start, end, and width\n * @param {Number} start\n * @param {Number} end\n * @param {Number} width\n * @returns {{offset: number, scale: number}} conversion\n */\nRange.conversion = function (start, end, width, totalHidden) {\n  if (totalHidden === undefined) {\n    totalHidden = 0;\n  }\n  if (width != 0 && (end - start != 0)) {\n    return {\n      offset: start,\n      scale: width / (end - start - totalHidden)\n    }\n  }\n  else {\n    return {\n      offset: 0,\n      scale: 1\n    };\n  }\n};\n\n/**\n * Start dragging horizontally or vertically\n * @param {Event} event\n * @private\n */\nRange.prototype._onDragStart = function(event) {\n  this.deltaDifference = 0;\n  this.previousDelta = 0;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // only start dragging when the mouse is inside the current range\n  if (!this._isInsideRange(event)) return;\n\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  this.stopRolling();\n\n  this.props.touch.start = this.start;\n  this.props.touch.end = this.end;\n  this.props.touch.dragging = true;\n\n  if (this.body.dom.root) {\n    this.body.dom.root.style.cursor = 'move';\n  }\n};\n\n/**\n * Perform dragging operation\n * @param {Event} event\n * @private\n */\nRange.prototype._onDrag = function (event) {\n  if (!event) return\n\n  if (!this.props.touch.dragging) return;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // TODO: this may be redundant in hammerjs2\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  var direction = this.options.direction;\n  validateDirection(direction);\n  var delta = (direction == 'horizontal') ? event.deltaX : event.deltaY;\n  delta -= this.deltaDifference;\n  var interval = (this.props.touch.end - this.props.touch.start);\n\n  // normalize dragging speed if cutout is in between.\n  var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  interval -= duration;\n\n  var width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height;\n\n  if (this.options.rtl) {\n    var diffRange = delta / width * interval;\n  } else {\n     var diffRange = -delta / width * interval;\n  }\n\n  var newStart = this.props.touch.start + diffRange;\n  var newEnd = this.props.touch.end + diffRange;\n\n  // snapping times away from hidden zones\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta-delta, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta-delta, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    this.deltaDifference += delta;\n    this.props.touch.start = safeStart;\n    this.props.touch.end = safeEnd;\n    this._onDrag(event);\n    return;\n  }\n\n  this.previousDelta = delta;\n  this._applyRange(newStart, newEnd);\n\n\n  var startDate = new Date(this.start);\n  var endDate = new Date(this.end);\n\n  // fire a rangechange event\n  this.body.emitter.emit('rangechange', {\n    start: startDate,\n    end:   endDate,\n    byUser: true,\n    event: util.elementsCensor(event)\n  });\n\n  // fire a panmove event\n  this.body.emitter.emit('panmove');\n};\n\n/**\n * Stop dragging operation\n * @param {event} event\n * @private\n */\nRange.prototype._onDragEnd = function (event) {\n  if (!this.props.touch.dragging) return;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // TODO: this may be redundant in hammerjs2\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  this.props.touch.dragging = false;\n  if (this.body.dom.root) {\n    this.body.dom.root.style.cursor = 'auto';\n  }\n\n  // fire a rangechanged event\n  this.body.emitter.emit('rangechanged', {\n    start: new Date(this.start),\n    end:   new Date(this.end),\n    byUser: true,\n    event: util.elementsCensor(event)\n  });\n};\n\n/**\n * Event handler for mouse wheel event, used to zoom\n * Code from http://adomas.org/javascript-mouse-wheel/\n * @param {Event} event\n * @private\n */\nRange.prototype._onMouseWheel = function(event) {\n  // retrieve delta\n  var delta = 0;\n  if (event.wheelDelta) { /* IE/Opera. */\n    delta = event.wheelDelta / 120;\n  } else if (event.detail) { /* Mozilla case. */\n    // In Mozilla, sign of delta is different than in IE.\n    // Also, delta is multiple of 3.\n    delta = -event.detail / 3;\n  }\n\n  // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable\n  if ((this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable) \n    || (!this.options.zoomable && this.options.moveable)) {\n    if (this.options.horizontalScroll) {\n      // Prevent default actions caused by mouse wheel\n      // (else the page and timeline both scroll)\n      event.preventDefault();\n      \n      // calculate a single scroll jump relative to the range scale\n      var diff = delta * (this.end - this.start) / 20;\n      // calculate new start and end\n      var newStart = this.start - diff;\n      var newEnd = this.end - diff;\n\n      this.setRange(newStart, newEnd, false, true, event);\n    }\n    return;\n  }\n\n  // only allow zooming when configured as zoomable and moveable\n  if (!(this.options.zoomable && this.options.moveable)) return;\n  \n  // only zoom when the mouse is inside the current range\n  if (!this._isInsideRange(event)) return;\n\n  // If delta is nonzero, handle it.\n  // Basically, delta is now positive if wheel was scrolled up,\n  // and negative, if wheel was scrolled down.\n  if (delta) {\n    // perform the zoom action. Delta is normally 1 or -1\n\n    // adjust a negative delta such that zooming in with delta 0.1\n    // equals zooming out with a delta -0.1\n    var scale;\n    if (delta < 0) {\n      scale = 1 - (delta / 5);\n    }\n    else {\n      scale = 1 / (1 + (delta / 5)) ;\n    }\n\n    // calculate center, the date to zoom around\n    var pointerDate\n    if (this.rolling) {\n      pointerDate = (this.start + this.end) / 2;\n    } else {\n      var pointer = this.getPointer({x: event.clientX, y: event.clientY}, this.body.dom.center);\n      pointerDate = this._pointerToDate(pointer);\n    }\n    this.zoom(scale, pointerDate, delta, event);\n\n    // Prevent default actions caused by mouse wheel\n    // (else the page and timeline both scroll)\n    event.preventDefault();\n  }\n};\n\n/**\n * Start of a touch gesture\n * @private\n */\nRange.prototype._onTouch = function (event) {\n  this.props.touch.start = this.start;\n  this.props.touch.end = this.end;\n  this.props.touch.allowDragging = true;\n  this.props.touch.center = null;\n  this.scaleOffset = 0;\n  this.deltaDifference = 0;\n};\n\n/**\n * Handle pinch event\n * @param {Event} event\n * @private\n */\nRange.prototype._onPinch = function (event) {\n  // only allow zooming when configured as zoomable and moveable\n  if (!(this.options.zoomable && this.options.moveable)) return;\n\n  this.props.touch.allowDragging = false;\n\n  if (!this.props.touch.center) {\n    this.props.touch.center = this.getPointer(event.center, this.body.dom.center);\n  }\n\n  this.stopRolling();\n\n  var scale = 1 / (event.scale + this.scaleOffset);\n  var centerDate = this._pointerToDate(this.props.touch.center);\n\n  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate);\n  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n  // calculate new start and end\n  var newStart = (centerDate - hiddenDurationBefore) + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale;\n  var newEnd = (centerDate + hiddenDurationAfter) + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale;\n\n  // snapping times away from hidden zones\n  this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times\n  this.endToFront = scale - 1 <= 0;   // used to do the right auto correction with periodic hidden times\n\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    this.props.touch.start = safeStart;\n    this.props.touch.end = safeEnd;\n    this.scaleOffset = 1 - event.scale;\n    newStart = safeStart;\n    newEnd = safeEnd;\n  }\n\n  this.setRange(newStart, newEnd, false, true, event);\n\n  this.startToFront = false; // revert to default\n  this.endToFront = true; // revert to default\n};\n\n/**\n * Test whether the mouse from a mouse event is inside the visible window,\n * between the current start and end date\n * @param {Object} event\n * @return {boolean} Returns true when inside the visible window\n * @private\n */\nRange.prototype._isInsideRange = function(event) {\n  // calculate the time where the mouse is, check whether inside\n  // and no scroll action should happen.\n  var clientX = event.center ? event.center.x : event.clientX;\n  if (this.options.rtl) {\n    var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer);\n  } else {\n    var x = util.getAbsoluteRight(this.body.dom.centerContainer) - clientX;\n  }\n  var time = this.body.util.toTime(x);\n\n  return time >= this.start && time <= this.end;\n};\n\n/**\n * Helper function to calculate the center date for zooming\n * @param {{x: Number, y: Number}} pointer\n * @return {number} date\n * @private\n */\nRange.prototype._pointerToDate = function (pointer) {\n  var conversion;\n  var direction = this.options.direction;\n\n  validateDirection(direction);\n\n  if (direction == 'horizontal') {\n    return this.body.util.toTime(pointer.x).valueOf();\n  }\n  else {\n    var height = this.body.domProps.center.height;\n    conversion = this.conversion(height);\n    return pointer.y / conversion.scale + conversion.offset;\n  }\n};\n\n/**\n * Get the pointer location relative to the location of the dom element\n * @param {{x: Number, y: Number}} touch\n * @param {Element} element   HTML DOM element\n * @return {{x: Number, y: Number}} pointer\n * @private\n */\nRange.prototype.getPointer = function (touch, element) {\n  if (this.options.rtl) {\n    return {\n      x: util.getAbsoluteRight(element) - touch.x,\n      y: touch.y - util.getAbsoluteTop(element)\n    };\n  } else {\n    return {\n      x: touch.x - util.getAbsoluteLeft(element),\n      y: touch.y - util.getAbsoluteTop(element)\n    };\n  }\n}\n\n/**\n * Zoom the range the given scale in or out. Start and end date will\n * be adjusted, and the timeline will be redrawn. You can optionally give a\n * date around which to zoom.\n * For example, try scale = 0.9 or 1.1\n * @param {Number} scale      Scaling factor. Values above 1 will zoom out,\n *                            values below 1 will zoom in.\n * @param {Number} [center]   Value representing a date around which will\n *                            be zoomed.\n */\nRange.prototype.zoom = function(scale, center, delta, event) {\n  // if centerDate is not provided, take it half between start Date and end Date\n  if (center == null) {\n    center = (this.start + this.end) / 2;\n  }\n\n  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center);\n  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n  // calculate new start and end\n  var newStart = (center-hiddenDurationBefore) + (this.start - (center-hiddenDurationBefore)) * scale;\n  var newEnd   = (center+hiddenDurationAfter) + (this.end - (center+hiddenDurationAfter)) * scale;\n\n  // snapping times away from hidden zones\n  this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n  this.endToFront = -delta  > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    newStart = safeStart;\n    newEnd = safeEnd;\n  }\n\n  this.setRange(newStart, newEnd, false, true, event);\n\n  this.startToFront = false; // revert to default\n  this.endToFront = true; // revert to default\n};\n\n\n\n/**\n * Move the range with a given delta to the left or right. Start and end\n * value will be adjusted. For example, try delta = 0.1 or -0.1\n * @param {Number}  delta     Moving amount. Positive value will move right,\n *                            negative value will move left\n */\nRange.prototype.move = function(delta) {\n  // zoom start Date and end Date relative to the centerDate\n  var diff = (this.end - this.start);\n\n  // apply new values\n  var newStart = this.start + diff * delta;\n  var newEnd = this.end + diff * delta;\n\n  // TODO: reckon with min and max range\n\n  this.start = newStart;\n  this.end = newEnd;\n};\n\n/**\n * Move the range to a new center point\n * @param {Number} moveTo      New center point of the range\n */\nRange.prototype.moveTo = function(moveTo) {\n  var center = (this.start + this.end) / 2;\n\n  var diff = center - moveTo;\n\n  // calculate new start and end\n  var newStart = this.start - diff;\n  var newEnd = this.end - diff;\n\n  this.setRange(newStart, newEnd, false, true, event);\n};\n\nmodule.exports = Range;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Range.js","var util = require('../../util');\n\n/**\n * Prototype for visual components\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body]\n * @param {Object} [options]\n */\nfunction Component (body, options) {\n  this.options = null;\n  this.props = null;\n}\n\n/**\n * Set options for the component. The new options will be merged into the\n * current options.\n * @param {Object} options\n */\nComponent.prototype.setOptions = function(options) {\n  if (options) {\n    util.extend(this.options, options);\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nComponent.prototype.redraw = function() {\n  // should be implemented by the component\n  return false;\n};\n\n/**\n * Destroy the component. Cleanup DOM and event listeners\n */\nComponent.prototype.destroy = function() {\n  // should be implemented by the component\n};\n\n/**\n * Test whether the component is resized since the last time _isResized() was\n * called.\n * @return {Boolean} Returns true if the component is resized\n * @protected\n */\nComponent.prototype._isResized = function() {\n  var resized = (this.props._previousWidth !== this.props.width ||\n      this.props._previousHeight !== this.props.height);\n\n  this.props._previousWidth = this.props.width;\n  this.props._previousHeight = this.props.height;\n\n  return resized;\n};\n\nmodule.exports = Component;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Component.js","\n/**\n * used in Core to convert the options into a volatile variable\n * \n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n */\nexports.convertHiddenOptions = function(moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return exports.convertHiddenOptions(moment, body, [hiddenDates])\n  }\n\n  body.hiddenDates = [];\n  if (hiddenDates) {\n    if (Array.isArray(hiddenDates) == true) {\n      for (var i = 0; i < hiddenDates.length; i++) {\n        if (hiddenDates[i].repeat === undefined) {\n          var dateItem = {};\n          dateItem.start = moment(hiddenDates[i].start).toDate().valueOf();\n          dateItem.end = moment(hiddenDates[i].end).toDate().valueOf();\n          body.hiddenDates.push(dateItem);\n        }\n      }\n      body.hiddenDates.sort(function (a, b) {\n        return a.start - b.start;\n      }); // sort by start time\n    }\n  }\n};\n\n\n/**\n * create new entrees for the repeating hidden dates\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n */\nexports.updateHiddenDates = function (moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return exports.updateHiddenDates(moment, body, [hiddenDates])\n  }\n\n  if (hiddenDates && body.domProps.centerContainer.width !== undefined) {\n    exports.convertHiddenOptions(moment, body, hiddenDates);\n\n    var start = moment(body.range.start);\n    var end = moment(body.range.end);\n\n    var totalRange = (body.range.end - body.range.start);\n    var pixelTime = totalRange / body.domProps.centerContainer.width;\n\n    for (var i = 0; i < hiddenDates.length; i++) {\n      if (hiddenDates[i].repeat !== undefined) {\n        var startDate = moment(hiddenDates[i].start);\n        var endDate = moment(hiddenDates[i].end);\n\n        if (startDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied start date is not valid: \" + hiddenDates[i].start);\n        }\n        if (endDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied end date is not valid: \" + hiddenDates[i].end);\n        }\n\n        var duration = endDate - startDate;\n        if (duration >= 4 * pixelTime) {\n\n          var offset = 0;\n          var runUntil = end.clone();\n          switch (hiddenDates[i].repeat) {\n            case \"daily\": // case of time\n              if (startDate.day() != endDate.day()) {\n                offset = 1;\n              }\n              startDate.dayOfYear(start.dayOfYear());\n              startDate.year(start.year());\n              startDate.subtract(7,'days');\n\n              endDate.dayOfYear(start.dayOfYear());\n              endDate.year(start.year());\n              endDate.subtract(7 - offset,'days');\n\n              runUntil.add(1, 'weeks');\n              break;\n            case \"weekly\":\n              var dayOffset = endDate.diff(startDate,'days')\n              var day = startDate.day();\n\n              // set the start date to the range.start\n              startDate.date(start.date());\n              startDate.month(start.month());\n              startDate.year(start.year());\n              endDate = startDate.clone();\n\n              // force\n              startDate.day(day);\n              endDate.day(day);\n              endDate.add(dayOffset,'days');\n\n              startDate.subtract(1,'weeks');\n              endDate.subtract(1,'weeks');\n\n              runUntil.add(1, 'weeks');\n              break\n            case \"monthly\":\n              if (startDate.month() != endDate.month()) {\n                offset = 1;\n              }\n              startDate.month(start.month());\n              startDate.year(start.year());\n              startDate.subtract(1,'months');\n\n              endDate.month(start.month());\n              endDate.year(start.year());\n              endDate.subtract(1,'months');\n              endDate.add(offset,'months');\n\n              runUntil.add(1, 'months');\n              break;\n            case \"yearly\":\n              if (startDate.year() != endDate.year()) {\n                offset = 1;\n              }\n              startDate.year(start.year());\n              startDate.subtract(1,'years');\n              endDate.year(start.year());\n              endDate.subtract(1,'years');\n              endDate.add(offset,'years');\n\n              runUntil.add(1, 'years');\n              break;\n            default:\n              console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", hiddenDates[i].repeat);\n              return;\n          }\n          while (startDate < runUntil) {\n            body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()});\n            switch (hiddenDates[i].repeat) {\n              case \"daily\":\n                startDate.add(1, 'days');\n                endDate.add(1, 'days');\n                break;\n              case \"weekly\":\n                startDate.add(1, 'weeks');\n                endDate.add(1, 'weeks');\n                break;\n              case \"monthly\":\n                startDate.add(1, 'months');\n                endDate.add(1, 'months');\n                break;\n              case \"yearly\":\n                startDate.add(1, 'y');\n                endDate.add(1, 'y');\n                break;\n              default:\n                console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", hiddenDates[i].repeat);\n                return;\n            }\n          }\n          body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()});\n        }\n      }\n    }\n    // remove duplicates, merge where possible\n    exports.removeDuplicates(body);\n    // ensure the new positions are not on hidden dates\n    var startHidden = exports.isHidden(body.range.start, body.hiddenDates);\n    var endHidden = exports.isHidden(body.range.end,body.hiddenDates);\n    var rangeStart = body.range.start;\n    var rangeEnd = body.range.end;\n    if (startHidden.hidden == true) {rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;}\n    if (endHidden.hidden == true)   {rangeEnd   = body.range.endToFront == true ?   endHidden.startDate - 1   : endHidden.endDate + 1;}\n    if (startHidden.hidden == true || endHidden.hidden == true) {\n      body.range._applyRange(rangeStart, rangeEnd);\n    }\n  }\n\n}\n\n\n/**\n * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up.\n * Scales with N^2\n * @param body\n */\nexports.removeDuplicates = function(body) {\n  var hiddenDates = body.hiddenDates;\n  var safeDates = [];\n  for (var i = 0; i < hiddenDates.length; i++) {\n    for (var j = 0; j < hiddenDates.length; j++) {\n      if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) {\n        // j inside i\n        if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[j].remove = true;\n        }\n        // j start inside i\n        else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) {\n          hiddenDates[i].end = hiddenDates[j].end;\n          hiddenDates[j].remove = true;\n        }\n        // j end inside i\n        else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[i].start = hiddenDates[j].start;\n          hiddenDates[j].remove = true;\n        }\n      }\n    }\n  }\n\n  for (var i = 0; i < hiddenDates.length; i++) {\n    if (hiddenDates[i].remove !== true) {\n      safeDates.push(hiddenDates[i]);\n    }\n  }\n\n  body.hiddenDates = safeDates;\n  body.hiddenDates.sort(function (a, b) {\n    return a.start - b.start;\n  }); // sort by start time\n};\n\nexports.printDates = function(dates) {\n  for (var i =0; i < dates.length; i++) {\n    console.log(i, new Date(dates[i].start),new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove);\n  }\n};\n\n/**\n * Used in TimeStep to avoid the hidden times.\n * @param {function} moment\n * @param {TimeStep} timeStep\n * @param previousTime\n */\nexports.stepOverHiddenDates = function(moment, timeStep, previousTime) {\n  var stepInHidden = false;\n  var currentValue = timeStep.current.valueOf();\n  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n    var startDate = timeStep.hiddenDates[i].start;\n    var endDate = timeStep.hiddenDates[i].end;\n    if (currentValue >= startDate && currentValue < endDate) {\n      stepInHidden = true;\n      break;\n    }\n  }\n\n  if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) {\n    var prevValue = moment(previousTime);\n    var newValue = moment(endDate);\n    //check if the next step should be major\n    if (prevValue.year() != newValue.year()) {timeStep.switchedYear = true;}\n    else if (prevValue.month() != newValue.month()) {timeStep.switchedMonth = true;}\n    else if (prevValue.dayOfYear() != newValue.dayOfYear()) {timeStep.switchedDay = true;}\n\n    timeStep.current = newValue;\n  }\n};\n\n\n///**\n// * Used in TimeStep to avoid the hidden times.\n// * @param timeStep\n// * @param previousTime\n// */\n//exports.checkFirstStep = function(timeStep) {\n//  var stepInHidden = false;\n//  var currentValue = timeStep.current.valueOf();\n//  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n//    var startDate = timeStep.hiddenDates[i].start;\n//    var endDate = timeStep.hiddenDates[i].end;\n//    if (currentValue >= startDate && currentValue < endDate) {\n//      stepInHidden = true;\n//      break;\n//    }\n//  }\n//\n//  if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) {\n//    var newValue = moment(endDate);\n//    timeStep.current = newValue.toDate();\n//  }\n//};\n\n/**\n * replaces the Core toScreen methods\n * @param Core\n * @param time\n * @param width\n * @returns {number}\n */\nexports.toScreen = function (Core, time, width) {\n    if (Core.body.hiddenDates.length == 0) {\n      var conversion = Core.range.conversion(width);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    } else {\n      var hidden = exports.isHidden(time, Core.body.hiddenDates);\n      if (hidden.hidden == true) {\n        time = hidden.startDate;\n      }\n\n      var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n      if (time < Core.range.start) {\n        var conversion = Core.range.conversion(width, duration);\n        var hiddenBeforeStart = exports.getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset);\n        time = Core.options.moment(time).toDate().valueOf();\n        time = time + hiddenBeforeStart;\n        return -(conversion.offset - time.valueOf()) * conversion.scale;\n        \n      } else if (time > Core.range.end) {\n        var rangeAfterEnd = {start: Core.range.start, end: time};\n        time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time);\n        var conversion = Core.range.conversion(width, duration);\n        return (time.valueOf() - conversion.offset) * conversion.scale;\n\n      } else {\n        time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time);\n        var conversion = Core.range.conversion(width, duration);\n        return (time.valueOf() - conversion.offset) * conversion.scale;\n      }\n    }\n  };\n\n\n/**\n * Replaces the core toTime methods\n * @param body\n * @param range\n * @param x\n * @param width\n * @returns {Date}\n */\nexports.toTime = function(Core, x, width) {\n  if (Core.body.hiddenDates.length == 0) {\n    var conversion = Core.range.conversion(width);\n    return new Date(x / conversion.scale + conversion.offset);\n  }\n  else {\n    var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n    var totalDuration = Core.range.end - Core.range.start - hiddenDuration;\n    var partialDuration = totalDuration * x / width;\n    var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration);\n\n    var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start);\n    return newTime;\n  }\n};\n\n\n/**\n * Support function\n *\n * @param hiddenDates\n * @param range\n * @returns {number}\n */\nexports.getHiddenDurationBetween = function(hiddenDates, start, end) {\n  var duration = 0;\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= start && endDate < end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n};\n\n/**\n   * Support function\n   *\n   * @param hiddenDates\n   * @param start\n   * @param end\n   * @returns {number}\n   */\nexports.getHiddenDurationBeforeStart = function (hiddenDates, start, end) {\n  var duration = 0;\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n\n    if (startDate >= start && endDate <= end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n};\n\n\n/**\n * Support function\n * @param moment\n * @param hiddenDates\n * @param range\n * @param time\n * @returns {{duration: number, time: *, offset: number}}\n */\nexports.correctTimeForHidden = function(moment, hiddenDates, range, time) {\n  time = moment(time).toDate().valueOf();\n  time -= exports.getHiddenDurationBefore(moment, hiddenDates,range,time);\n  return time;\n};\n\nexports.getHiddenDurationBefore = function(moment, hiddenDates, range, time) {\n  var timeOffset = 0;\n  time = moment(time).toDate().valueOf();\n\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      if (time >= endDate) {\n        timeOffset += (endDate - startDate);\n      }\n    }\n  }\n  return timeOffset;\n}\n\n/**\n * sum the duration from start to finish, including the hidden duration,\n * until the required amount has been reached, return the accumulated hidden duration\n * @param hiddenDates\n * @param range\n * @param time\n * @returns {{duration: number, time: *, offset: number}}\n */\nexports.getAccumulatedHiddenDuration = function(hiddenDates, range, requiredDuration) {\n  var hiddenDuration = 0;\n  var duration = 0;\n  var previousPoint = range.start;\n  //exports.printDates(hiddenDates)\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      duration += startDate - previousPoint;\n      previousPoint = endDate;\n      if (duration >= requiredDuration) {\n        break;\n      }\n      else {\n        hiddenDuration += endDate - startDate;\n      }\n    }\n  }\n\n  return hiddenDuration;\n};\n\n\n\n/**\n * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true\n * @param hiddenDates\n * @param time\n * @param direction\n * @param correctionEnabled\n * @returns {*}\n */\nexports.snapAwayFromHidden = function(hiddenDates, time, direction, correctionEnabled) {\n  var isHidden = exports.isHidden(time, hiddenDates);\n  if (isHidden.hidden == true) {\n    if (direction < 0) {\n      if (correctionEnabled == true) {\n        return isHidden.startDate - (isHidden.endDate - time) - 1;\n      }\n      else {\n        return isHidden.startDate - 1;\n      }\n    }\n    else {\n      if (correctionEnabled == true) {\n        return isHidden.endDate + (time - isHidden.startDate) + 1;\n      }\n      else {\n        return isHidden.endDate + 1;\n      }\n    }\n  }\n  else {\n    return time;\n  }\n\n}\n\n\n/**\n * Check if a time is hidden\n *\n * @param time\n * @param hiddenDates\n * @returns {{hidden: boolean, startDate: Window.start, endDate: *}}\n */\nexports.isHidden = function(time, hiddenDates) {\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n\n    if (time >= startDate && time < endDate) { // if the start is entering a hidden zone\n      return {hidden: true, startDate: startDate, endDate: endDate};\n      break;\n    }\n  }\n  return {hidden: false, startDate: startDate, endDate: endDate};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/DateUtil.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar hammerUtil = require('../hammerUtil');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar ItemSet = require('./component/ItemSet');\nvar TimeAxis = require('./component/TimeAxis');\nvar Activator = require('../shared/Activator');\nvar DateUtil = require('./DateUtil');\nvar CustomTime = require('./component/CustomTime');\n\n/**\n * Create a timeline visualization\n * @constructor\n */\nfunction Core () {}\n\n// turn Core into an event emitter\nEmitter(Core.prototype);\n\n/**\n * Create the main DOM for the Core: a root panel containing left, right,\n * top, bottom, content, and background panel.\n * @param {Element} container  The container element where the Core will\n *                             be attached.\n * @protected\n */\nCore.prototype._create = function (container) {\n  this.dom = {};\n\n  this.dom.container = container;\n\n  this.dom.root                 = document.createElement('div');\n  this.dom.background           = document.createElement('div');\n  this.dom.backgroundVertical   = document.createElement('div');\n  this.dom.backgroundHorizontal = document.createElement('div');\n  this.dom.centerContainer      = document.createElement('div');\n  this.dom.leftContainer        = document.createElement('div');\n  this.dom.rightContainer       = document.createElement('div');\n  this.dom.center               = document.createElement('div');\n  this.dom.left                 = document.createElement('div');\n  this.dom.right                = document.createElement('div');\n  this.dom.top                  = document.createElement('div');\n  this.dom.bottom               = document.createElement('div');\n  this.dom.shadowTop            = document.createElement('div');\n  this.dom.shadowBottom         = document.createElement('div');\n  this.dom.shadowTopLeft        = document.createElement('div');\n  this.dom.shadowBottomLeft     = document.createElement('div');\n  this.dom.shadowTopRight       = document.createElement('div');\n  this.dom.shadowBottomRight    = document.createElement('div');\n  this.dom.rollingModeBtn       = document.createElement('div');\n\n  this.dom.root.className                 = 'vis-timeline';\n  this.dom.background.className           = 'vis-panel vis-background';\n  this.dom.backgroundVertical.className   = 'vis-panel vis-background vis-vertical';\n  this.dom.backgroundHorizontal.className = 'vis-panel vis-background vis-horizontal';\n  this.dom.centerContainer.className      = 'vis-panel vis-center';\n  this.dom.leftContainer.className        = 'vis-panel vis-left';\n  this.dom.rightContainer.className       = 'vis-panel vis-right';\n  this.dom.top.className                  = 'vis-panel vis-top';\n  this.dom.bottom.className               = 'vis-panel vis-bottom';\n  this.dom.left.className                 = 'vis-content';\n  this.dom.center.className               = 'vis-content';\n  this.dom.right.className                = 'vis-content';\n  this.dom.shadowTop.className            = 'vis-shadow vis-top';\n  this.dom.shadowBottom.className         = 'vis-shadow vis-bottom';\n  this.dom.shadowTopLeft.className        = 'vis-shadow vis-top';\n  this.dom.shadowBottomLeft.className     = 'vis-shadow vis-bottom';\n  this.dom.shadowTopRight.className       = 'vis-shadow vis-top';\n  this.dom.shadowBottomRight.className    = 'vis-shadow vis-bottom';\n  this.dom.rollingModeBtn.className       = 'vis-rolling-mode-btn';\n\n  this.dom.root.appendChild(this.dom.background);\n  this.dom.root.appendChild(this.dom.backgroundVertical);\n  this.dom.root.appendChild(this.dom.backgroundHorizontal);\n  this.dom.root.appendChild(this.dom.centerContainer);\n  this.dom.root.appendChild(this.dom.leftContainer);\n  this.dom.root.appendChild(this.dom.rightContainer);\n  this.dom.root.appendChild(this.dom.top);\n  this.dom.root.appendChild(this.dom.bottom);\n  this.dom.root.appendChild(this.dom.bottom);\n  this.dom.root.appendChild(this.dom.rollingModeBtn);\n\n  this.dom.centerContainer.appendChild(this.dom.center);\n  this.dom.leftContainer.appendChild(this.dom.left);\n  this.dom.rightContainer.appendChild(this.dom.right);\n  this.dom.centerContainer.appendChild(this.dom.shadowTop);\n  this.dom.centerContainer.appendChild(this.dom.shadowBottom);\n  this.dom.leftContainer.appendChild(this.dom.shadowTopLeft);\n  this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft);\n  this.dom.rightContainer.appendChild(this.dom.shadowTopRight);\n  this.dom.rightContainer.appendChild(this.dom.shadowBottomRight);\n\n  // size properties of each of the panels\n  this.props = {\n    root: {},\n    background: {},\n    centerContainer: {},\n    leftContainer: {},\n    rightContainer: {},\n    center: {},\n    left: {},\n    right: {},\n    top: {},\n    bottom: {},\n    border: {},\n    scrollTop: 0,\n    scrollTopMin: 0\n  };\n\n  this.on('rangechange', function () {\n    if (this.initialDrawDone === true) {\n      this._redraw();\n    }\n  }.bind(this));\n  this.on('touch',       this._onTouch.bind(this));\n  this.on('panmove',         this._onDrag.bind(this));\n\n  var me = this;\n  this._origRedraw = this._redraw.bind(this);\n  this._redraw = util.throttle(this._origRedraw);\n\n  this.on('_change', function (properties) {\n    if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) {\n      me._redraw()\n    } else {\n      me._origRedraw();\n    }\n  });\n\n  // create event listeners for all interesting events, these events will be\n  // emitted via emitter\n  this.hammer = new Hammer(this.dom.root);\n  var pinchRecognizer = this.hammer.get('pinch').set({enable: true});\n  hammerUtil.disablePreventDefaultVertically(pinchRecognizer);\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n  this.listeners = {};\n\n  var events = [\n    'tap', 'doubletap', 'press',\n    'pinch',\n    'pan', 'panstart', 'panmove', 'panend'\n      // TODO: cleanup\n    //'touch', 'pinch',\n    //'tap', 'doubletap', 'hold',\n    //'dragstart', 'drag', 'dragend',\n    //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox\n  ];\n  events.forEach(function (type) {\n    var listener = function (event) {\n      if (me.isActive()) {\n        me.emit(type, event);\n      }\n    };\n    me.hammer.on(type, listener);\n    me.listeners[type] = listener;\n  });\n\n  // emulate a touch event (emitted before the start of a pan, pinch, tap, or press)\n  hammerUtil.onTouch(this.hammer, function (event) {\n    me.emit('touch', event);\n  }.bind(this));\n\n  // emulate a release event (emitted after a pan, pinch, tap, or press)\n  hammerUtil.onRelease(this.hammer, function (event) {\n    me.emit('release', event);\n  }.bind(this));\n\n  function onMouseWheel(event) {\n    if (this.isActive()) {\n      this.emit('mousewheel', event);\n    }\n\n    // prevent scrolling if not specified explicitly or when horizontalScroll is true\n    if (!this.options.verticalScroll || this.options.horizontalScroll) return;\n\n    // prevent scrolling when zoomKey defined or activated\n    if (!this.options.zoomKey || event[this.options.zoomKey]) return;\n\n    // Prevent default actions caused by mouse wheel\n    // (else the page and timeline both scroll)\n    event.preventDefault();\n\n    var delta = 0;\n    if (event.wheelDelta) { /* IE/Opera. */\n      delta = event.wheelDelta / 120;\n    } else if (event.detail) { /* Mozilla case. */\n      // In Mozilla, sign of delta is different than in IE.\n      // Also, delta is multiple of 3.\n      delta = -event.detail / 3;\n    }\n\n    var current = this.props.scrollTop;\n    var adjusted = current + delta * 120;\n\n    if (this.isActive()) {\n      this._setScrollTop(adjusted);\n      this._redraw();\n      this.emit('scroll', event);\n    }\n  }\n\n  if (this.dom.centerContainer.addEventListener) {\n    // IE9, Chrome, Safari, Opera\n    this.dom.centerContainer.addEventListener(\"mousewheel\", onMouseWheel.bind(this), false);\n    // Firefox\n    this.dom.centerContainer.addEventListener(\"DOMMouseScroll\", onMouseWheel.bind(this), false);\n  } else {\n    // IE 6/7/8\n    this.dom.centerContainer.attachEvent(\"onmousewheel\", onMouseWheel.bind(this));\n  }\n\n  function onMouseScrollSide(event) {\n    if (!me.options.verticalScroll) return;\n    event.preventDefault();\n    if (me.isActive()) {\n      var adjusted = -event.target.scrollTop;\n      me._setScrollTop(adjusted);\n      me._redraw();\n      me.emit('scrollSide', event);\n    }\n  }\n\n  this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));\n  this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));\n\n  var itemAddedToTimeline = false;\n\n  function handleDragOver(event) {\n    if (event.preventDefault) {\n      event.preventDefault(); // Necessary. Allows us to drop.\n    }\n\n    // make sure your target is a vis element\n    if (!event.target.className.indexOf(\"vis\") > -1) return;\n\n    // make sure only one item is added every time you're over the timeline\n    if (itemAddedToTimeline) return;\n\n    event.dataTransfer.dropEffect = 'move';  \n    itemAddedToTimeline = true;\n    return false;\n  }\n\n  function handleDrop(event) {\n    // return when dropping non-vis items \n    try {\n      var itemData = JSON.parse(event.dataTransfer.getData(\"text\"))\n      if (!itemData.content) return\n    } catch (err) {\n      return false;\n    }\n\n    itemAddedToTimeline = false;\n    event.center = {\n      x: event.clientX,\n      y: event.clientY\n    }\n    me.itemSet._onAddItem(event);\n\n    return false;\n  }\n\n  this.dom.center.addEventListener('dragover', handleDragOver.bind(this), false);\n  this.dom.center.addEventListener('drop', handleDrop.bind(this), false);\n\n  this.customTimes = [];\n\n  // store state information needed for touch events\n  this.touch = {};\n\n  this.redrawCount = 0;\n  this.initialDrawDone = false;\n\n  // attach the root panel to the provided container\n  if (!container) throw new Error('No container provided');\n  container.appendChild(this.dom.root);\n};\n\n/**\n * Set options. Options will be passed to all components loaded in the Timeline.\n * @param {Object} [options]\n *                           {String} orientation\n *                              Vertical orientation for the Timeline,\n *                              can be 'bottom' (default) or 'top'.\n *                           {String | Number} width\n *                              Width for the timeline, a number in pixels or\n *                              a css string like '1000px' or '75%'. '100%' by default.\n *                           {String | Number} height\n *                              Fixed height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'. If undefined,\n *                              The Timeline will automatically size such that\n *                              its contents fit.\n *                           {String | Number} minHeight\n *                              Minimum height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'.\n *                           {String | Number} maxHeight\n *                              Maximum height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'.\n *                           {Number | Date | String} start\n *                              Start date for the visible window\n *                           {Number | Date | String} end\n *                              End date for the visible window\n */\nCore.prototype.setOptions = function (options) {\n  if (options) {\n    // copy the known options\n    var fields = [\n      'width', 'height', 'minHeight', 'maxHeight', 'autoResize',\n      'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates',\n      'locale', 'locales', 'moment', 'rtl', 'zoomKey', 'horizontalScroll', 'verticalScroll'\n    ];\n    util.selectiveExtend(fields, this.options, options); \n\n    this.dom.rollingModeBtn.style.visibility = 'hidden';\n\n    if (this.options.rtl) {\n      this.dom.container.style.direction = \"rtl\";\n      this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical-rtl';    \n    }\n\n    if (this.options.verticalScroll) {\n      if (this.options.rtl) {\n        this.dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';\n      } else {\n        this.dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';\n      }\n    }\n\n    this.options.orientation = {item:undefined,axis:undefined};\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation = {\n          item: options.orientation,\n          axis: options.orientation\n        };\n      }\n      else if (typeof options.orientation === 'object') {\n        if ('item' in options.orientation) {\n          this.options.orientation.item = options.orientation.item;\n        }\n        if ('axis' in options.orientation) {\n          this.options.orientation.axis = options.orientation.axis;\n        }\n      }\n    }\n\n    if (this.options.orientation.axis === 'both') {\n      if (!this.timeAxis2) {\n        var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body);\n        timeAxis2.setOptions = function (options) {\n          var _options = options ? util.extend({}, options) : {};\n          _options.orientation = 'top'; // override the orientation option, always top\n          TimeAxis.prototype.setOptions.call(timeAxis2, _options);\n        };\n        this.components.push(timeAxis2);\n      }\n    }\n    else {\n      if (this.timeAxis2) {\n        var index = this.components.indexOf(this.timeAxis2);\n        if (index !== -1) {\n          this.components.splice(index, 1);\n        }\n        this.timeAxis2.destroy();\n        this.timeAxis2 = null;\n      }\n    }\n\n    // if the graph2d's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == 'function') {\n      options.drawPoints = {\n          onRender: options.drawPoints\n      };\n    }\n\n    if ('hiddenDates' in this.options) {\n      DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates);\n    }\n\n    if ('clickToUse' in options) {\n      if (options.clickToUse) {\n        if (!this.activator) {\n          this.activator = new Activator(this.dom.root);\n        }\n      }\n      else {\n        if (this.activator) {\n          this.activator.destroy();\n          delete this.activator;\n        }\n      }\n    }\n\n    if ('showCustomTime' in options) {\n      throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])');\n    }\n\n    // enable/disable autoResize\n    this._initAutoResize();\n  }\n\n  // propagate options to all components\n  this.components.forEach(component => component.setOptions(options));\n\n  // enable/disable configure\n  if ('configure' in options) {\n    if (!this.configurator) {\n      this.configurator = this._createConfigurator();\n    }\n\n    this.configurator.setOptions(options.configure);\n\n    // collect the settings of all components, and pass them to the configuration system\n    var appliedOptions = util.deepExtend({}, this.options);\n    this.components.forEach(function (component) {\n      util.deepExtend(appliedOptions, component.options);\n    });\n    this.configurator.setModuleOptions({global: appliedOptions});\n  }\n\n  this._redraw();\n};\n\n/**\n * Returns true when the Timeline is active.\n * @returns {boolean}\n */\nCore.prototype.isActive = function () {\n  return !this.activator || this.activator.active;\n};\n\n/**\n * Destroy the Core, clean up all DOM elements and event listeners.\n */\nCore.prototype.destroy = function () {\n  // unbind datasets\n  this.setItems(null);\n  this.setGroups(null);\n\n  // remove all event listeners\n  this.off();\n\n  // stop checking for changed size\n  this._stopAutoResize();\n\n  // remove from DOM\n  if (this.dom.root.parentNode) {\n    this.dom.root.parentNode.removeChild(this.dom.root);\n  }\n  this.dom = null;\n\n  // remove Activator\n  if (this.activator) {\n    this.activator.destroy();\n    delete this.activator;\n  }\n\n  // cleanup hammer touch events\n  for (var event in this.listeners) {\n    if (this.listeners.hasOwnProperty(event)) {\n      delete this.listeners[event];\n    }\n  }\n  this.listeners = null;\n  this.hammer = null;\n\n  // give all components the opportunity to cleanup\n  this.components.forEach(component => component.destroy());\n\n  this.body = null;\n};\n\n\n/**\n * Set a custom time bar\n * @param {Date} time\n * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted.\n */\nCore.prototype.setCustomTime = function (time, id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return id === component.options.id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n\n  if (customTimes.length > 0) {\n    customTimes[0].setCustomTime(time);\n  }\n};\n\n/**\n * Retrieve the current custom time.\n * @param {number} [id=undefined]    Id of the custom time bar.\n * @return {Date | undefined} customTime\n */\nCore.prototype.getCustomTime = function(id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return component.options.id === id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n  return customTimes[0].getCustomTime();\n};\n\n/**\n * Set a custom title for the custom time bar.\n * @param {String} [title] Custom title\n * @param {number} [id=undefined]    Id of the custom time bar.\n */\nCore.prototype.setCustomTimeTitle = function(title, id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return component.options.id === id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n  if (customTimes.length > 0) {\n    return customTimes[0].setCustomTitle(title);\n  }\n};\n\n/**\n * Retrieve meta information from an event.\n * Should be overridden by classes extending Core\n * @param {Event} event\n * @return {Object} An object with related information.\n */\nCore.prototype.getEventProperties = function (event) {\n  return { event: event };\n};\n\n/**\n * Add custom vertical bar\n * @param {Date | String | Number} [time]  A Date, unix timestamp, or\n *                                         ISO date string. Time point where\n *                                         the new bar should be placed.\n *                                         If not provided, `new Date()` will\n *                                         be used.\n * @param {Number | String} [id=undefined] Id of the new bar. Optional\n * @return {Number | String}               Returns the id of the new bar\n */\nCore.prototype.addCustomTime = function (time, id) {\n  var timestamp = time !== undefined\n      ? util.convert(time, 'Date').valueOf()\n      : new Date();\n\n  var exists = this.customTimes.some(function (customTime) {\n    return customTime.options.id === id;\n  });\n  if (exists) {\n    throw new Error('A custom time with id ' + JSON.stringify(id) + ' already exists');\n  }\n\n  var customTime = new CustomTime(this.body, util.extend({}, this.options, {\n    time : timestamp,\n    id : id\n  }));\n\n  this.customTimes.push(customTime);\n  this.components.push(customTime);\n  this._redraw();\n\n  return id;\n};\n\n/**\n * Remove previously added custom bar\n * @param {int} id ID of the custom bar to be removed\n * @return {boolean} True if the bar exists and is removed, false otherwise\n */\nCore.prototype.removeCustomTime = function (id) {\n  var customTimes = this.customTimes.filter(function (bar) {\n    return (bar.options.id === id);\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n\n  customTimes.forEach(function (customTime) {\n    this.customTimes.splice(this.customTimes.indexOf(customTime), 1);\n    this.components.splice(this.components.indexOf(customTime), 1);\n    customTime.destroy();\n  }.bind(this))\n};\n\n\n/**\n * Get the id's of the currently visible items.\n * @returns {Array} The ids of the visible items\n */\nCore.prototype.getVisibleItems = function() {\n  return this.itemSet && this.itemSet.getVisibleItems() || [];\n};\n\n/**\n * Set Core window such that it fits all items\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.fit = function(options) {\n  var range = this.getDataRange();\n\n  // skip range set if there is no min and max date\n  if (range.min === null && range.max === null) {\n    return;\n  }\n\n  // apply a margin of 1% left and right of the data\n  var interval = range.max - range.min;\n  var min = new Date(range.min.valueOf() - interval * 0.01);\n  var max = new Date(range.max.valueOf() + interval * 0.01);\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n  this.range.setRange(min, max, animation);\n};\n\n/**\n * Calculate the data range of the items start and end dates\n * @returns {{min: Date | null, max: Date | null}}\n * @protected\n */\nCore.prototype.getDataRange = function() {\n  // must be implemented by Timeline and Graph2d\n  throw new Error('Cannot invoke abstract method getDataRange');\n};\n\n/**\n * Set the visible window. Both parameters are optional, you can change only\n * start or only end. Syntax:\n *\n *     TimeLine.setWindow(start, end)\n *     TimeLine.setWindow(start, end, options)\n *     TimeLine.setWindow(range)\n *\n * Where start and end can be a Date, number, or string, and range is an\n * object with properties start and end.\n *\n * @param {Date | Number | String | Object} [start] Start date of visible window\n * @param {Date | Number | String} [end]            End date of visible window\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.setWindow = function(start, end, options) {\n  var animation;\n  if (arguments.length == 1) {\n    var range = arguments[0];\n    animation = (range.animation !== undefined) ? range.animation : true;\n    this.range.setRange(range.start, range.end, animation);\n  }\n  else {\n    animation = (options && options.animation !== undefined) ? options.animation : true;\n    this.range.setRange(start, end, animation);\n  }\n};\n\n/**\n * Move the window such that given time is centered on screen.\n * @param {Date | Number | String} time\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.moveTo = function(time, options) {\n  var interval = this.range.end - this.range.start;\n  var t = util.convert(time, 'Date').valueOf();\n\n  var start = t - interval / 2;\n  var end = t + interval / 2;\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n\n  this.range.setRange(start, end, animation);\n};\n\n/**\n * Get the visible window\n * @return {{start: Date, end: Date}}   Visible range\n */\nCore.prototype.getWindow = function() {\n  var range = this.range.getRange();\n  return {\n    start: new Date(range.start),\n    end: new Date(range.end)\n  };\n};\n\n/**\n * Zoom in the window such that given time is centered on screen.\n * @param {Number} percentage - must be between [0..1]\n */\nCore.prototype.zoomIn = function(percentage) {\n  if (!percentage || percentage < 0 || percentage > 1) return\n  var range = this.getWindow();\n  var start = range.start.valueOf();\n  var end = range.end.valueOf();\n  var interval = end - start;\n  var newInterval = interval / (1 + percentage);\n  var distance = (interval - newInterval) / 2;\n  var newStart = start + distance;\n  var newEnd = end - distance;\n\n  this.setWindow({\n    start   : newStart,\n    end     : newEnd\n  });\n};\n\n/**\n * Zoom out the window such that given time is centered on screen.\n * @param {Number} percentage - must be between [0..1]\n */\nCore.prototype.zoomOut = function(percentage) {\n  if (!percentage || percentage < 0 || percentage > 1) return\n  var range = this.getWindow();\n  var start = range.start.valueOf();\n  var end = range.end.valueOf();\n  var interval = end - start;\n  var newStart = start - interval * percentage / 2;\n  var newEnd = end + interval * percentage / 2;\n\n  this.setWindow({\n    start   : newStart,\n    end     : newEnd\n  });\n};\n\n/**\n * Force a redraw. Can be overridden by implementations of Core\n *\n * Note: this function will be overridden on construction with a trottled version\n */\nCore.prototype.redraw = function() {\n  this._redraw();\n};\n\n/**\n * Redraw for internal use. Redraws all components. See also the public\n * method redraw.\n * @protected\n */\nCore.prototype._redraw = function() {\n  this.redrawCount++;\n  var resized = false;\n  var options = this.options;\n  var props = this.props;\n  var dom = this.dom;\n\n  if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible\n\n  DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n\n  // update class names\n  if (options.orientation == 'top') {\n    util.addClassName(dom.root, 'vis-top');\n    util.removeClassName(dom.root, 'vis-bottom');\n  }\n  else {\n    util.removeClassName(dom.root, 'vis-top');\n    util.addClassName(dom.root, 'vis-bottom');\n  }\n\n  // update root width and height options\n  dom.root.style.maxHeight = util.option.asSize(options.maxHeight, '');\n  dom.root.style.minHeight = util.option.asSize(options.minHeight, '');\n  dom.root.style.width = util.option.asSize(options.width, '');\n\n  // calculate border widths\n  props.border.left   = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2;\n  props.border.right  = props.border.left;\n  props.border.top    = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2;\n  props.border.bottom = props.border.top;\n  props.borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight;\n  props.borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth;\n\n  // workaround for a bug in IE: the clientWidth of an element with\n  // a height:0px and overflow:hidden is not calculated and always has value 0\n  if (dom.centerContainer.clientHeight === 0) {\n    props.border.left = props.border.top;\n    props.border.right  = props.border.left;\n  }\n  if (dom.root.clientHeight === 0) {\n    props.borderRootWidth = props.borderRootHeight;\n  }\n\n  // calculate the heights. If any of the side panels is empty, we set the height to\n  // minus the border width, such that the border will be invisible\n  props.center.height = dom.center.offsetHeight;\n  props.left.height   = dom.left.offsetHeight;\n  props.right.height  = dom.right.offsetHeight;\n  props.top.height    = dom.top.clientHeight    || -props.border.top;\n  props.bottom.height = dom.bottom.clientHeight || -props.border.bottom;\n\n  // TODO: compensate borders when any of the panels is empty.\n\n  // apply auto height\n  // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM)\n  var contentHeight = Math.max(props.left.height, props.center.height, props.right.height);\n  var autoHeight = props.top.height + contentHeight + props.bottom.height +\n    props.borderRootHeight + props.border.top + props.border.bottom;\n  dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px');\n\n  // calculate heights of the content panels\n  props.root.height = dom.root.offsetHeight;\n  props.background.height = props.root.height - props.borderRootHeight;\n  var containerHeight = props.root.height - props.top.height - props.bottom.height -\n    props.borderRootHeight;\n  props.centerContainer.height  = containerHeight;\n  props.leftContainer.height    = containerHeight;\n  props.rightContainer.height   = props.leftContainer.height;\n\n  // calculate the widths of the panels\n  props.root.width = dom.root.offsetWidth;\n  props.background.width = props.root.width - props.borderRootWidth;\n\n  if (!this.initialDrawDone) {\n    props.scrollbarWidth = util.getScrollBarWidth();\n  }\n\n  if (options.verticalScroll) {\n    if (options.rtl) {\n      props.left.width = dom.leftContainer.clientWidth || -props.border.left;\n      props.right.width = dom.rightContainer.clientWidth + props.scrollbarWidth || -props.border.right;\n    } else {\n      props.left.width = dom.leftContainer.clientWidth + props.scrollbarWidth || -props.border.left;\n      props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n    }\n  } else {\n    props.left.width = dom.leftContainer.clientWidth  || -props.border.left;\n    props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n  }\n\n  this._setDOM();\n\n  // update the scrollTop, feasible range for the offset can be changed\n  // when the height of the Core or of the contents of the center changed\n  var offset = this._updateScrollTop();\n\n  // reposition the scrollable contents\n  if (options.orientation.item != 'top') {\n    offset += Math.max(props.centerContainer.height - props.center.height -\n      props.border.top - props.border.bottom, 0);\n  }\n  dom.center.style.top  = offset + 'px';\n  \n  // show shadows when vertical scrolling is available\n  var visibilityTop = props.scrollTop == 0 ? 'hidden' : '';\n  var visibilityBottom = props.scrollTop == props.scrollTopMin ? 'hidden' : '';\n  dom.shadowTop.style.visibility          = visibilityTop;\n  dom.shadowBottom.style.visibility       = visibilityBottom;\n  dom.shadowTopLeft.style.visibility      = visibilityTop;\n  dom.shadowBottomLeft.style.visibility   = visibilityBottom;\n  dom.shadowTopRight.style.visibility     = visibilityTop;\n  dom.shadowBottomRight.style.visibility  = visibilityBottom;\n\n  if (options.verticalScroll) {\n    dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';\n    dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';\n\n    dom.shadowTopRight.style.visibility     = \"hidden\";\n    dom.shadowBottomRight.style.visibility  = \"hidden\";\n    dom.shadowTopLeft.style.visibility      = \"hidden\";\n    dom.shadowBottomLeft.style.visibility   = \"hidden\";\n\n    dom.left.style.top    = '0px';\n    dom.right.style.top   = '0px';\n  }\n\n  if (!options.verticalScroll ||  props.center.height < props.centerContainer.height) {\n    dom.left.style.top    = offset + 'px';\n    dom.right.style.top   = offset + 'px';\n    dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp('(?:^|\\\\s)'+ 'vis-vertical-scroll' + '(?:\\\\s|$)'), ' ');\n    dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp('(?:^|\\\\s)'+ 'vis-vertical-scroll' + '(?:\\\\s|$)'), ' ');\n    props.left.width = dom.leftContainer.clientWidth  || -props.border.left;\n    props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n    this._setDOM();\n  }\n\n  // enable/disable vertical panning\n  var contentsOverflow = props.center.height > props.centerContainer.height;\n  this.hammer.get('pan').set({\n    direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL\n  });\n\n  // redraw all components\n  this.components.forEach(function (component) {\n    resized = component.redraw() || resized;\n  });\n  var MAX_REDRAW = 5;\n  if (resized) {\n    if (this.redrawCount < MAX_REDRAW) {\n      this.body.emitter.emit('_change');\n      return;\n    }\n    else {\n      console.log('WARNING: infinite loop in redraw?');\n    }\n  } else {\n    this.redrawCount = 0;\n  }\n  this.initialDrawDone = true;\n\n  //Emit public 'changed' event for UI updates, see issue #1592\n  this.body.emitter.emit(\"changed\");\n};\n\nCore.prototype._setDOM = function () {\n  var props = this.props;\n  var dom = this.dom;\n\n  props.leftContainer.width = props.left.width;\n  props.rightContainer.width = props.right.width;\n  var centerWidth = props.root.width - props.left.width - props.right.width - props.borderRootWidth;\n  props.center.width          = centerWidth;\n  props.centerContainer.width = centerWidth;\n  props.top.width             = centerWidth;\n  props.bottom.width          = centerWidth;\n\n  // resize the panels\n  dom.background.style.height           = props.background.height + 'px';\n  dom.backgroundVertical.style.height   = props.background.height + 'px';\n  dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px';\n  dom.centerContainer.style.height      = props.centerContainer.height + 'px';\n  dom.leftContainer.style.height        = props.leftContainer.height + 'px';\n  dom.rightContainer.style.height       = props.rightContainer.height + 'px';\n\n  dom.background.style.width            = props.background.width + 'px';\n  dom.backgroundVertical.style.width    = props.centerContainer.width + 'px';\n  dom.backgroundHorizontal.style.width  = props.background.width + 'px';\n  dom.centerContainer.style.width       = props.center.width + 'px';\n  dom.top.style.width                   = props.top.width + 'px';\n  dom.bottom.style.width                = props.bottom.width + 'px';\n\n  // reposition the panels\n  dom.background.style.left           = '0';\n  dom.background.style.top            = '0';\n  dom.backgroundVertical.style.left   = (props.left.width + props.border.left) + 'px';\n  dom.backgroundVertical.style.top    = '0';\n  dom.backgroundHorizontal.style.left = '0';\n  dom.backgroundHorizontal.style.top  = props.top.height + 'px';\n  dom.centerContainer.style.left      = props.left.width + 'px';\n  dom.centerContainer.style.top       = props.top.height + 'px';\n  dom.leftContainer.style.left        = '0';\n  dom.leftContainer.style.top         = props.top.height + 'px';\n  dom.rightContainer.style.left       = (props.left.width + props.center.width) + 'px';\n  dom.rightContainer.style.top        = props.top.height + 'px';\n  dom.top.style.left                  = props.left.width + 'px';\n  dom.top.style.top                   = '0';\n  dom.bottom.style.left               = props.left.width + 'px';\n  dom.bottom.style.top                = (props.top.height + props.centerContainer.height) + 'px';\n  dom.center.style.left               = '0';\n  dom.left.style.left                 = '0';\n  dom.right.style.left                = '0';\n}\n\n// TODO: deprecated since version 1.1.0, remove some day\nCore.prototype.repaint = function () {\n  throw new Error('Function repaint is deprecated. Use redraw instead.');\n};\n\n/**\n * Set a current time. This can be used for example to ensure that a client's\n * time is synchronized with a shared server time.\n * Only applicable when option `showCurrentTime` is true.\n * @param {Date | String | Number} time     A Date, unix timestamp, or\n *                                          ISO date string.\n */\nCore.prototype.setCurrentTime = function(time) {\n  if (!this.currentTime) {\n    throw new Error('Option showCurrentTime must be true');\n  }\n\n  this.currentTime.setCurrentTime(time);\n};\n\n/**\n * Get the current time.\n * Only applicable when option `showCurrentTime` is true.\n * @return {Date} Returns the current time.\n */\nCore.prototype.getCurrentTime = function() {\n  if (!this.currentTime) {\n    throw new Error('Option showCurrentTime must be true');\n  }\n\n  return this.currentTime.getCurrentTime();\n};\n\n/**\n * Convert a position on screen (pixels) to a datetime\n * @param {int}     x    Position on the screen in pixels\n * @return {Date}   time The datetime the corresponds with given position x\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toTime = function(x) {\n  return DateUtil.toTime(this, x, this.props.center.width);\n};\n\n/**\n * Convert a position on the global screen (pixels) to a datetime\n * @param {int}     x    Position on the screen in pixels\n * @return {Date}   time The datetime the corresponds with given position x\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toGlobalTime = function(x) {\n  return DateUtil.toTime(this, x, this.props.root.width);\n  //var conversion = this.range.conversion(this.props.root.width);\n  //return new Date(x / conversion.scale + conversion.offset);\n};\n\n/**\n * Convert a datetime (Date object) into a position on the screen\n * @param {Date}   time A date\n * @return {int}   x    The position on the screen in pixels which corresponds\n *                      with the given date.\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toScreen = function(time) {\n  return DateUtil.toScreen(this, time, this.props.center.width);\n};\n\n\n\n/**\n * Convert a datetime (Date object) into a position on the root\n * This is used to get the pixel density estimate for the screen, not the center panel\n * @param {Date}   time A date\n * @return {int}   x    The position on root in pixels which corresponds\n *                      with the given date.\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toGlobalScreen = function(time) {\n  return DateUtil.toScreen(this, time, this.props.root.width);\n  //var conversion = this.range.conversion(this.props.root.width);\n  //return (time.valueOf() - conversion.offset) * conversion.scale;\n};\n\n\n/**\n * Initialize watching when option autoResize is true\n * @private\n */\nCore.prototype._initAutoResize = function () {\n  if (this.options.autoResize == true) {\n    this._startAutoResize();\n  }\n  else {\n    this._stopAutoResize();\n  }\n};\n\n/**\n * Watch for changes in the size of the container. On resize, the Panel will\n * automatically redraw itself.\n * @private\n */\nCore.prototype._startAutoResize = function () {\n  var me = this;\n\n  this._stopAutoResize();\n\n  this._onResize = function() {\n    if (me.options.autoResize != true) {\n      // stop watching when the option autoResize is changed to false\n      me._stopAutoResize();\n      return;\n    }\n\n    if (me.dom.root) {\n      // check whether the frame is resized\n      // Note: we compare offsetWidth here, not clientWidth. For some reason,\n      // IE does not restore the clientWidth from 0 to the actual width after\n      // changing the timeline's container display style from none to visible\n      if ((me.dom.root.offsetWidth != me.props.lastWidth) ||\n        (me.dom.root.offsetHeight != me.props.lastHeight)) {\n        me.props.lastWidth = me.dom.root.offsetWidth;\n        me.props.lastHeight = me.dom.root.offsetHeight;\n        me.props.scrollbarWidth = util.getScrollBarWidth();\n\n        me.body.emitter.emit('_change');\n      }\n    }\n  };\n\n  // add event listener to window resize\n  util.addEventListener(window, 'resize', this._onResize);\n\n  //Prevent initial unnecessary redraw\n  if (me.dom.root) {\n      me.props.lastWidth = me.dom.root.offsetWidth;\n      me.props.lastHeight = me.dom.root.offsetHeight;\n  }\n\n  this.watchTimer = setInterval(this._onResize, 1000);\n};\n\n/**\n * Stop watching for a resize of the frame.\n * @private\n */\nCore.prototype._stopAutoResize = function () {\n  if (this.watchTimer) {\n    clearInterval(this.watchTimer);\n    this.watchTimer = undefined;\n  }\n\n  // remove event listener on window.resize\n  if (this._onResize) {\n    util.removeEventListener(window, 'resize', this._onResize);\n    this._onResize = null;\n  }\n};\n\n/**\n * Start moving the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onTouch = function (event) {\n  this.touch.allowDragging = true;\n  this.touch.initialScrollTop = this.props.scrollTop;\n};\n\n/**\n * Start moving the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onPinch = function (event) {\n  this.touch.allowDragging = false;\n};\n\n/**\n * Move the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onDrag = function (event) {\n  if (!event) return\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.touch.allowDragging) return;\n\n  var delta = event.deltaY;\n\n  var oldScrollTop = this._getScrollTop();\n  var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta);\n\n  if (this.options.verticalScroll) {\n    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n  }\n\n  if (newScrollTop != oldScrollTop) {\n    this.emit(\"verticalDrag\");\n  }\n};\n\n/**\n * Apply a scrollTop\n * @param {Number} scrollTop\n * @returns {Number} scrollTop  Returns the applied scrollTop\n * @private\n */\nCore.prototype._setScrollTop = function (scrollTop) {\n  this.props.scrollTop = scrollTop;\n  this._updateScrollTop();\n  return this.props.scrollTop;\n};\n\n/**\n * Update the current scrollTop when the height of  the containers has been changed\n * @returns {Number} scrollTop  Returns the applied scrollTop\n * @private\n */\nCore.prototype._updateScrollTop = function () {\n  // recalculate the scrollTopMin\n  var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero\n  if (scrollTopMin != this.props.scrollTopMin) {\n    // in case of bottom orientation, change the scrollTop such that the contents\n    // do not move relative to the time axis at the bottom\n    if (this.options.orientation.item != 'top') {\n      this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin);\n    }\n    this.props.scrollTopMin = scrollTopMin;\n  }\n\n  // limit the scrollTop to the feasible scroll range\n  if (this.props.scrollTop > 0) this.props.scrollTop = 0;\n  if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin;\n\n  if (this.options.verticalScroll) {\n    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n  }\n\n  return this.props.scrollTop;\n};\n\n/**\n * Get the current scrollTop\n * @returns {number} scrollTop\n * @private\n */\nCore.prototype._getScrollTop = function () {\n  return this.props.scrollTop;\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nCore.prototype._createConfigurator = function () {\n  throw new Error('Cannot invoke abstract method _createConfigurator');\n};\n\nmodule.exports = Core;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Core.js","var Hammer = require('../../module/hammer');\nvar util = require('../../util');\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\nvar TimeStep = require('../TimeStep');\nvar Component = require('./Component');\nvar Group = require('./Group');\nvar BackgroundGroup = require('./BackgroundGroup');\nvar BoxItem = require('./item/BoxItem');\nvar PointItem = require('./item/PointItem');\nvar RangeItem = require('./item/RangeItem');\nvar BackgroundItem = require('./item/BackgroundItem');\nimport Popup from '../../shared/Popup';\n\n\nvar UNGROUPED = '__ungrouped__';   // reserved group id for ungrouped items\nvar BACKGROUND = '__background__'; // reserved group id for background items without group\n\n/**\n * An ItemSet holds a set of items and ranges which can be displayed in a\n * range. The width is determined by the parent of the ItemSet, and the height\n * is determined by the size of the items.\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n * @param {Object} [options]      See ItemSet.setOptions for the available options.\n * @constructor ItemSet\n * @extends Component\n */\nfunction ItemSet(body, options) {\n  this.body = body;\n  this.defaultOptions = {\n    type: null,  // 'box', 'point', 'range', 'background'\n    orientation: {\n      item: 'bottom'   // item orientation: 'top' or 'bottom'\n    },\n    align: 'auto', // alignment of box items\n    stack: true,\n    stackSubgroups: true,\n    groupOrderSwap: function(fromGroup, toGroup, groups) {\n    \tvar targetOrder = toGroup.order;\n    \ttoGroup.order = fromGroup.order;\n    \tfromGroup.order = targetOrder;\n    },\n    groupOrder: 'order',\n\n    selectable: true,\n    multiselect: false,\n    itemsAlwaysDraggable: false,\n\n    editable: {\n      updateTime: false,\n      updateGroup: false,\n      add: false,\n      remove: false,\n      overrideItems: false\n    },\n\n    groupEditable: {\n      order: false,\n      add: false,\n      remove: false\n    },    \n    \n    snap: TimeStep.snap,\n\n    onAdd: function (item, callback) {\n      callback(item);\n    },\n    onUpdate: function (item, callback) {\n      callback(item);\n    },\n    onMove: function (item, callback) {\n      callback(item);\n    },\n    onRemove: function (item, callback) {\n      callback(item);\n    },\n    onMoving: function (item, callback) {\n      callback(item);\n    },\n    onAddGroup: function (item, callback) {\n      callback(item);\n    },\n    onMoveGroup: function (item, callback) {\n      callback(item);\n    },\n    onRemoveGroup: function (item, callback) {\n      callback(item);\n    },\n\n    margin: {\n      item: {\n        horizontal: 10,\n        vertical: 10\n      },\n      axis: 20\n    },\n\n    tooltip: {\n      followMouse: false,\n      overflowMethod: 'flip'\n    },\n\n    tooltipOnItemUpdateTime: false\n  };\n\n  // options is shared by this ItemSet and all its items\n  this.options = util.extend({}, this.defaultOptions);\n  this.options.rtl = options.rtl;\n\n  // options for getting items from the DataSet with the correct type\n  this.itemOptions = {\n    type: {start: 'Date', end: 'Date'}\n  };\n\n  this.conversion = {\n    toScreen: body.util.toScreen,\n    toTime: body.util.toTime\n  };\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n\n  var me = this;\n  this.itemsData = null;    // DataSet\n  this.groupsData = null;   // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    'add': function (event, params, senderId) {\n      me._onAdd(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdate(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemove(params.items);\n    }\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    'add': function (event, params, senderId) {\n      me._onAddGroups(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdateGroups(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemoveGroups(params.items);\n    }\n  };\n\n  this.items = {};      // object with an Item for every data item\n  this.groups = {};     // Group object for every group\n  this.groupIds = [];\n\n  this.selection = [];  // list with the ids of all selected nodes\n  this.stackDirty = true; // if true, all items will be restacked on next redraw\n\n  this.touchParams = {}; // stores properties while dragging\n  this.groupTouchParams = {};\n  // create the HTML DOM\n\n  this._create();\n\n  this.setOptions(options);\n}\n\nItemSet.prototype = new Component();\n\n// available item types will be registered here\nItemSet.types = {\n  background: BackgroundItem,\n  box: BoxItem,\n  range: RangeItem,\n  point: PointItem\n};\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nItemSet.prototype._create = function(){\n  var frame = document.createElement('div');\n  frame.className = 'vis-itemset';\n  frame['timeline-itemset'] = this;\n  this.dom.frame = frame;\n\n  // create background panel\n  var background = document.createElement('div');\n  background.className = 'vis-background';\n  frame.appendChild(background);\n  this.dom.background = background;\n\n  // create foreground panel\n  var foreground = document.createElement('div');\n  foreground.className = 'vis-foreground';\n  frame.appendChild(foreground);\n  this.dom.foreground = foreground;\n\n  // create axis panel\n  var axis = document.createElement('div');\n  axis.className = 'vis-axis';\n  this.dom.axis = axis;\n\n  // create labelset\n  var labelSet = document.createElement('div');\n  labelSet.className = 'vis-labelset';\n  this.dom.labelSet = labelSet;\n\n  // create ungrouped Group\n  this._updateUngrouped();\n\n  // create background Group\n  var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this);\n  backgroundGroup.show();\n  this.groups[BACKGROUND] = backgroundGroup;\n\n  // attach event listeners\n  // Note: we bind to the centerContainer for the case where the height\n  //       of the center container is larger than of the ItemSet, so we\n  //       can click in the empty area to create a new item or deselect an item.\n  this.hammer = new Hammer(this.body.dom.centerContainer);\n\n  // drag items when selected\n  this.hammer.on('hammer.input', function (event) {\n    if (event.isFirst) {\n      this._onTouch(event);\n    }\n  }.bind(this));\n  this.hammer.on('panstart', this._onDragStart.bind(this));\n  this.hammer.on('panmove',  this._onDrag.bind(this));\n  this.hammer.on('panend',   this._onDragEnd.bind(this));\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n\n  // single select (or unselect) when tapping an item\n  this.hammer.on('tap',  this._onSelectItem.bind(this));\n\n  // multi select when holding mouse/touch, or on ctrl+click\n  this.hammer.on('press', this._onMultiSelectItem.bind(this));\n\n  // add item on doubletap\n  this.hammer.on('doubletap', this._onAddItem.bind(this));\n\n  if (this.options.rtl) {\n    this.groupHammer = new Hammer(this.body.dom.rightContainer);\n  } else {\n    this.groupHammer = new Hammer(this.body.dom.leftContainer);\n  }\n  \n  this.groupHammer.on('tap',      this._onGroupClick.bind(this));\n  this.groupHammer.on('panstart', this._onGroupDragStart.bind(this));\n  this.groupHammer.on('panmove',  this._onGroupDrag.bind(this));\n  this.groupHammer.on('panend',   this._onGroupDragEnd.bind(this));\n  this.groupHammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_VERTICAL});\n  \n  this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this));\n  this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this));\n  this.body.dom.centerContainer.addEventListener('mousemove', this._onMouseMove.bind(this));\n  // right-click on timeline \n  this.body.dom.centerContainer.addEventListener('contextmenu', this._onDragEnd.bind(this));\n\n  // attach to the DOM\n  this.show();\n};\n\n/**\n * Set options for the ItemSet. Existing options will be extended/overwritten.\n * @param {Object} [options] The following options are available:\n *                           {String} type\n *                              Default type for the items. Choose from 'box'\n *                              (default), 'point', 'range', or 'background'.\n *                              The default style can be overwritten by\n *                              individual items.\n *                           {String} align\n *                              Alignment for the items, only applicable for\n *                              BoxItem. Choose 'center' (default), 'left', or\n *                              'right'.\n *                           {String} orientation.item\n *                              Orientation of the item set. Choose 'top' or\n *                              'bottom' (default).\n *                           {Function} groupOrder\n *                              A sorting function for ordering groups\n *                           {Boolean} stack\n *                              If true (default), items will be stacked on\n *                              top of each other.\n *                           {Number} margin.axis\n *                              Margin between the axis and the items in pixels.\n *                              Default is 20.\n *                           {Number} margin.item.horizontal\n *                              Horizontal margin between items in pixels.\n *                              Default is 10.\n *                           {Number} margin.item.vertical\n *                              Vertical Margin between items in pixels.\n *                              Default is 10.\n *                           {Number} margin.item\n *                              Margin between items in pixels in both horizontal\n *                              and vertical direction. Default is 10.\n *                           {Number} margin\n *                              Set margin for both axis and items in pixels.\n *                           {Boolean} selectable\n *                              If true (default), items can be selected.\n *                           {Boolean} multiselect\n *                              If true, multiple items can be selected.\n *                              False by default.\n *                           {Boolean} editable\n *                              Set all editable options to true or false\n *                           {Boolean} editable.updateTime\n *                              Allow dragging an item to an other moment in time\n *                           {Boolean} editable.updateGroup\n *                              Allow dragging an item to an other group\n *                           {Boolean} editable.add\n *                              Allow creating new items on double tap\n *                           {Boolean} editable.remove\n *                              Allow removing items by clicking the delete button\n *                              top right of a selected item.\n *                           {Function(item: Item, callback: Function)} onAdd\n *                              Callback function triggered when an item is about to be added:\n *                              when the user double taps an empty space in the Timeline.\n *                           {Function(item: Item, callback: Function)} onUpdate\n *                              Callback function fired when an item is about to be updated.\n *                              This function typically has to show a dialog where the user\n *                              change the item. If not implemented, nothing happens.\n *                           {Function(item: Item, callback: Function)} onMove\n *                              Fired when an item has been moved. If not implemented,\n *                              the move action will be accepted.\n *                           {Function(item: Item, callback: Function)} onRemove\n *                              Fired when an item is about to be deleted.\n *                              If not implemented, the item will be always removed.\n */\nItemSet.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    var fields = [\n      'type', 'rtl', 'align', 'order', 'stack', 'stackSubgroups', 'selectable', 'multiselect', 'itemsAlwaysDraggable', \n      'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'visibleFrameTemplate',\n      'hide', 'snap', 'groupOrderSwap', 'tooltip', 'tooltipOnItemUpdateTime'\n    ];\n    util.selectiveExtend(fields, this.options, options);\n\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom';\n      }\n      else if (typeof options.orientation === 'object' && 'item' in options.orientation) {\n        this.options.orientation.item = options.orientation.item;\n      }\n    }\n\n    if ('margin' in options) {\n      if (typeof options.margin === 'number') {\n        this.options.margin.axis = options.margin;\n        this.options.margin.item.horizontal = options.margin;\n        this.options.margin.item.vertical = options.margin;\n      }\n      else if (typeof options.margin === 'object') {\n        util.selectiveExtend(['axis'], this.options.margin, options.margin);\n        if ('item' in options.margin) {\n          if (typeof options.margin.item === 'number') {\n            this.options.margin.item.horizontal = options.margin.item;\n            this.options.margin.item.vertical = options.margin.item;\n          }\n          else if (typeof options.margin.item === 'object') {\n            util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item);\n          }\n        }\n      }\n    }\n\n    if ('editable' in options) {\n      if (typeof options.editable === 'boolean') {\n        this.options.editable.updateTime    = options.editable;\n        this.options.editable.updateGroup   = options.editable;\n        this.options.editable.add           = options.editable;\n        this.options.editable.remove        = options.editable;\n        this.options.editable.overrideItems = false;\n      }\n      else if (typeof options.editable === 'object') {\n        util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove', 'overrideItems'], this.options.editable, options.editable);\n      }\n    }\n\n    if ('groupEditable' in options) {\n      if (typeof options.groupEditable === 'boolean') {\n        this.options.groupEditable.order  = options.groupEditable;\n        this.options.groupEditable.add    = options.groupEditable;\n        this.options.groupEditable.remove = options.groupEditable;\n      }\n      else if (typeof options.groupEditable === 'object') {\n        util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable);\n      }\n    }\n\n    // callback functions\n    var addCallback = (function (name) {\n      var fn = options[name];\n      if (fn) {\n        if (!(fn instanceof Function)) {\n          throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)');\n        }\n        this.options[name] = fn;\n      }\n    }).bind(this);\n    ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving', 'onAddGroup', 'onMoveGroup', 'onRemoveGroup'].forEach(addCallback);\n\n    // force the itemSet to refresh: options like orientation and margins may be changed\n    this.markDirty();\n  }\n};\n\n/**\n * Mark the ItemSet dirty so it will refresh everything with next redraw.\n * Optionally, all items can be marked as dirty and be refreshed.\n * @param {{refreshItems: boolean}} [options]\n */\nItemSet.prototype.markDirty = function(options) {\n  this.groupIds = [];\n  this.stackDirty = true;\n\n  if (options && options.refreshItems) {\n    util.forEach(this.items, function (item) {\n      item.dirty = true;\n      if (item.displayed) item.redraw();\n    });\n  }\n};\n\n/**\n * Destroy the ItemSet\n */\nItemSet.prototype.destroy = function() {\n  this.hide();\n  this.setItems(null);\n  this.setGroups(null);\n\n  this.hammer = null;\n\n  this.body = null;\n  this.conversion = null;\n};\n\n/**\n * Hide the component from the DOM\n */\nItemSet.prototype.hide = function() {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n\n  // remove the axis with dots\n  if (this.dom.axis.parentNode) {\n    this.dom.axis.parentNode.removeChild(this.dom.axis);\n  }\n\n  // remove the labelset containing all group labels\n  if (this.dom.labelSet.parentNode) {\n    this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nItemSet.prototype.show = function() {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n\n  // show axis with dots\n  if (!this.dom.axis.parentNode) {\n    this.body.dom.backgroundVertical.appendChild(this.dom.axis);\n  }\n\n  // show labelset containing labels\n  if (!this.dom.labelSet.parentNode) {\n    if (this.options.rtl) {\n      this.body.dom.right.appendChild(this.dom.labelSet);\n    } else {\n      this.body.dom.left.appendChild(this.dom.labelSet);\n    }\n  }\n};\n\n/**\n * Set selected items by their id. Replaces the current selection\n * Unknown id's are silently ignored.\n * @param {string[] | string} [ids] An array with zero or more id's of the items to be\n *                                  selected, or a single item id. If ids is undefined\n *                                  or an empty array, all items will be unselected.\n */\nItemSet.prototype.setSelection = function(ids) {\n  var i, ii, id, item;\n\n  if (ids == undefined) ids = [];\n  if (!Array.isArray(ids)) ids = [ids];\n\n  // unselect currently selected items\n  for (i = 0, ii = this.selection.length; i < ii; i++) {\n    id = this.selection[i];\n    item = this.items[id];\n    if (item) item.unselect();\n  }\n\n  // select items\n  this.selection = [];\n  for (i = 0, ii = ids.length; i < ii; i++) {\n    id = ids[i];\n    item = this.items[id];\n    if (item) {\n      this.selection.push(id);\n      item.select();\n    }\n  }\n};\n\n/**\n * Get the selected items by their id\n * @return {Array} ids  The ids of the selected items\n */\nItemSet.prototype.getSelection = function() {\n  return this.selection.concat([]);\n};\n\n/**\n * Get the id's of the currently visible items.\n * @returns {Array} The ids of the visible items\n */\nItemSet.prototype.getVisibleItems = function() {\n  var range = this.body.range.getRange();\n\n  if (this.options.rtl) { \n    var right  = this.body.util.toScreen(range.start);\n    var left = this.body.util.toScreen(range.end);\n  } else {\n    var left  = this.body.util.toScreen(range.start);\n    var right = this.body.util.toScreen(range.end);\n  }\n\n  var ids = [];\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      var group = this.groups[groupId];\n      var rawVisibleItems = group.visibleItems;\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (var i = 0; i < rawVisibleItems.length; i++) {\n        var item = rawVisibleItems[i];\n        // TODO: also check whether visible vertically\n        if (this.options.rtl) { \n          if ((item.right < left) && (item.right + item.width > right)) {\n            ids.push(item.id);\n          }\n        } else {\n          if ((item.left < right) && (item.left + item.width > left)) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n  }\n\n  return ids;\n};\n\n/**\n * Deselect a selected item\n * @param {String | Number} id\n * @private\n */\nItemSet.prototype._deselect = function(id) {\n  var selection = this.selection;\n  for (var i = 0, ii = selection.length; i < ii; i++) {\n    if (selection[i] == id) { // non-strict comparison!\n      selection.splice(i, 1);\n      break;\n    }\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nItemSet.prototype.redraw = function() {\n  var margin = this.options.margin,\n      range = this.body.range,\n      asSize = util.option.asSize,\n      options = this.options,\n      orientation = options.orientation.item,\n      resized = false,\n      frame = this.dom.frame;\n\n  // recalculate absolute position (before redrawing groups)\n  this.props.top = this.body.domProps.top.height + this.body.domProps.border.top;\n\n  if (this.options.rtl) {\n    this.props.right = this.body.domProps.right.width + this.body.domProps.border.right;\n  } else {\n    this.props.left = this.body.domProps.left.width + this.body.domProps.border.left;\n  }\n\n  // update class name\n  frame.className = 'vis-itemset';\n\n  // reorder the groups (if needed)\n  resized = this._orderGroups() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  // TODO: would be nicer to get this as a trigger from Range\n  var visibleInterval = range.end - range.start;\n  var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth);\n  if (zoomed) this.stackDirty = true;\n  this.lastVisibleInterval = visibleInterval;\n  this.props.lastWidth = this.props.width;\n\n  var restack = this.stackDirty;\n  var firstGroup = this._firstGroup();\n  var firstMargin = {\n    item: margin.item,\n    axis: margin.axis\n  };\n  var nonFirstMargin = {\n    item: margin.item,\n    axis: margin.item.vertical / 2\n  };\n  var height = 0;\n  var minHeight = margin.axis + margin.item.vertical;\n\n  // redraw the background group\n  this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack);\n\n  // redraw all regular groups\n  util.forEach(this.groups, function (group) {\n    var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin;\n    var groupResized = group.redraw(range, groupMargin, restack);\n    resized = groupResized || resized;\n    height += group.height;\n  });\n  height = Math.max(height, minHeight);\n  this.stackDirty = false;\n\n  // update frame height\n  frame.style.height  = asSize(height);\n\n  // calculate actual size\n  this.props.width = frame.offsetWidth;\n  this.props.height = height;\n\n  // reposition axis\n  this.dom.axis.style.top = asSize((orientation == 'top') ?\n      (this.body.domProps.top.height + this.body.domProps.border.top) :\n      (this.body.domProps.top.height + this.body.domProps.centerContainer.height));\n  if (this.options.rtl) {\n    this.dom.axis.style.right = '0';\n  } else {\n    this.dom.axis.style.left = '0';\n  }\n\n  this.initialItemSetDrawn = true;\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  return resized;\n};\n\n/**\n * Get the first group, aligned with the axis\n * @return {Group | null} firstGroup\n * @private\n */\nItemSet.prototype._firstGroup = function() {\n  var firstGroupIndex = (this.options.orientation.item == 'top') ? 0 : (this.groupIds.length - 1);\n  var firstGroupId = this.groupIds[firstGroupIndex];\n  var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];\n\n  return firstGroup || null;\n};\n\n/**\n * Create or delete the group holding all ungrouped items. This group is used when\n * there are no groups specified.\n * @protected\n */\nItemSet.prototype._updateUngrouped = function() {\n  var ungrouped = this.groups[UNGROUPED];\n  var background = this.groups[BACKGROUND];\n  var item, itemId;\n\n  if (this.groupsData) {\n    // remove the group holding all ungrouped items\n    if (ungrouped) {\n      ungrouped.hide();\n      delete this.groups[UNGROUPED];\n\n      for (itemId in this.items) {\n        if (this.items.hasOwnProperty(itemId)) {\n          item = this.items[itemId];\n          item.parent && item.parent.remove(item);\n          var groupId = this._getGroupId(item.data);\n          var group = this.groups[groupId];\n          group && group.add(item) || item.hide();\n        }\n      }\n    }\n  }\n  else {\n    // create a group holding all (unfiltered) items\n    if (!ungrouped) {\n      var id = null;\n      var data = null;\n      ungrouped = new Group(id, data, this);\n      this.groups[UNGROUPED] = ungrouped;\n\n      for (itemId in this.items) {\n        if (this.items.hasOwnProperty(itemId)) {\n          item = this.items[itemId];\n          ungrouped.add(item);\n        }\n      }\n\n      ungrouped.show();\n    }\n  }\n};\n\n/**\n * Get the element for the labelset\n * @return {HTMLElement} labelSet\n */\nItemSet.prototype.getLabelSet = function() {\n  return this.dom.labelSet;\n};\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nItemSet.prototype.setItems = function(items) {\n  var me = this,\n      ids,\n      oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    this.itemsData = items;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    util.forEach(this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n\n    // update the group holding all ungrouped items\n    this._updateUngrouped();\n  }\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Get the current items\n * @returns {vis.DataSet | null}\n */\nItemSet.prototype.getItems = function() {\n  return this.itemsData;\n};\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nItemSet.prototype.setGroups = function(groups) {\n  var me = this,\n      ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    this._onRemoveGroups(ids); // note: this will cause a redraw\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    this.groupsData = groups;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (this.groupsData) {\n    // go over all groups nesting\n    var groupsData = this.groupsData;\n    if (this.groupsData instanceof DataView) {\n      groupsData = this.groupsData.getDataSet()\n    }\n\n    groupsData.get().forEach(function(group){\n      if (group.nestedGroups) {\n        group.nestedGroups.forEach(function(nestedGroupId) {\n          var updatedNestedGroup = groupsData.get(nestedGroupId);\n          updatedNestedGroup.nestedInGroup = group.id;\n          if (group.showNested == false) {\n            updatedNestedGroup.visible = false;\n          }\n          groupsData.update(updatedNestedGroup);\n        })\n      }\n    })\n\n\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n\n  // update the group holding all ungrouped items\n  this._updateUngrouped();\n\n  // update the order of all items in each group\n  this._order();\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Get the current groups\n * @returns {vis.DataSet | null} groups\n */\nItemSet.prototype.getGroups = function() {\n  return this.groupsData;\n};\n\n/**\n * Remove an item by its id\n * @param {String | Number} id\n */\nItemSet.prototype.removeItem = function(id) {\n  var item = this.itemsData.get(id),\n      dataset = this.itemsData.getDataSet(),\n      itemObj = this.items[id];\n\n  if (item) {\n    // confirm deletion\n    this.options.onRemove(item, function (item) {\n      if (item) {\n        // remove by id here, it is possible that an item has no id defined\n        // itself, so better not delete by the item itself\n        dataset.remove(id);\n\n        // Remove it's popup\n        if (itemObj.popup) {\n          itemObj.popup.destroy();\n          itemObj.popup = null;\n        }\n      }\n    });\n  }\n};\n\n/**\n * Get the time of an item based on it's data and options.type\n * @param {Object} itemData\n * @returns {string} Returns the type\n * @private\n */\nItemSet.prototype._getType = function (itemData) {\n  return itemData.type || this.options.type || (itemData.end ? 'range' : 'box');\n};\n\n\n/**\n * Get the group id for an item\n * @param {Object} itemData\n * @returns {string} Returns the groupId\n * @private\n */\nItemSet.prototype._getGroupId = function (itemData) {\n  var type = this._getType(itemData);\n  if (type == 'background' && itemData.group == undefined) {\n   return BACKGROUND;\n  }\n  else {\n    return this.groupsData ? itemData.group : UNGROUPED;\n  }\n};\n\n/**\n * Handle updated items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onUpdate = function(ids) {\n  var me = this;\n\n  ids.forEach(function (id) {\n    var itemData = me.itemsData.get(id, me.itemOptions);\n    var item = me.items[id];\n    var type = itemData ? me._getType(itemData) : null;\n\n    var constructor = ItemSet.types[type];\n    var selected;\n\n    if (item) {\n      // update item   \t\n      if (!constructor || !(item instanceof constructor)) {\n        // item type has changed, delete the item and recreate it\n        selected = item.selected; // preserve selection of this item\n        me._removeItem(item);\n        item = null;\n      }\n      else {\n        me._updateItem(item, itemData);\n      }\n    }\n\n    if (!item && itemData) {\n      // create item\n      if (constructor) {\n        item = new constructor(itemData, me.conversion, me.options);\n        item.id = id; // TODO: not so nice setting id afterwards\n\n        me._addItem(item);\n        if (selected) {\n          this.selection.push(id);\n          item.select();\n        }\n      }\n      else if (type == 'rangeoverflow') {\n        // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day\n        throw new TypeError('Item type \"rangeoverflow\" is deprecated. Use css styling instead: ' +\n            '.vis-item.vis-range .vis-item-content {overflow: visible;}');\n      }\n      else {\n        throw new TypeError('Unknown item type \"' + type + '\"');\n      }\n    }\n  }.bind(this));\n\n  this._order();\n  this.stackDirty = true; // force re-stacking of all items next redraw\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Handle added items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;\n\n/**\n * Handle removed items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onRemove = function(ids) {\n  var count = 0;\n  var me = this;\n  ids.forEach(function (id) {\n    var item = me.items[id];\n    if (item) {\n      count++;\n      me._removeItem(item);\n    }\n  });\n\n  if (count) {\n    // update order\n    this._order();\n    this.stackDirty = true; // force re-stacking of all items next redraw\n    this.body.emitter.emit('_change', {queue: true});\n  }\n};\n\n/**\n * Update the order of item in all groups\n * @private\n */\nItemSet.prototype._order = function() {\n  // reorder the items in all groups\n  // TODO: optimization: only reorder groups affected by the changed items\n  util.forEach(this.groups, function (group) {\n    group.order();\n  });\n};\n\n/**\n * Handle updated groups\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onUpdateGroups = function(ids) {\n  this._onAddGroups(ids);\n};\n\n/**\n * Handle changed groups (added or updated)\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onAddGroups = function(ids) {\n  var me = this;\n\n  ids.forEach(function (id) {\n    var groupData = me.groupsData.get(id);\n    var group = me.groups[id];\n\n    if (!group) {\n      // check for reserved ids\n      if (id == UNGROUPED || id == BACKGROUND) {\n        throw new Error('Illegal group id. ' + id + ' is a reserved id.');\n      }\n\n      var groupOptions = Object.create(me.options);\n      util.extend(groupOptions, {\n        height: null\n      });\n\n      group = new Group(id, groupData, me);\n      me.groups[id] = group;\n\n      // add items with this groupId to the new group\n      for (var itemId in me.items) {\n        if (me.items.hasOwnProperty(itemId)) {\n          var item = me.items[itemId];\n          if (item.data.group == id) {\n            group.add(item);\n          }\n        }\n      }\n\n      group.order();\n      group.show();\n    }\n    else {\n      // update group\n      group.setData(groupData);\n    }\n  });\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Handle removed groups\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onRemoveGroups = function(ids) {\n  var groups = this.groups;\n  ids.forEach(function (id) {\n    var group = groups[id];\n\n    if (group) {\n      group.hide();\n      delete groups[id];\n    }\n  });\n\n  this.markDirty();\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Reorder the groups if needed\n * @return {boolean} changed\n * @private\n */\nItemSet.prototype._orderGroups = function () {\n  if (this.groupsData) {\n    // reorder the groups\n    var groupIds = this.groupsData.getIds({\n      order: this.options.groupOrder\n    });\n\n    groupIds = this._orderNestedGroups(groupIds);\n\n    var changed = !util.equalArray(groupIds, this.groupIds);\n    if (changed) {\n      // hide all groups, removes them from the DOM\n      var groups = this.groups;\n      groupIds.forEach(function (groupId) {\n        groups[groupId].hide();\n      });\n\n      // show the groups again, attach them to the DOM in correct order\n      groupIds.forEach(function (groupId) {\n        groups[groupId].show();\n      });\n\n      this.groupIds = groupIds;\n    }\n\n    return changed;\n  }\n  else {\n    return false;\n  }\n};\n\n/**\n * Reorder the nested groups\n * @return {boolean} changed\n * @private\n */\nItemSet.prototype._orderNestedGroups = function(groupIds) {\n  var newGroupIdsOrder = [];\n\n  groupIds.forEach(function(groupId){\n    var groupData = this.groupsData.get(groupId);\n    if (!groupData.nestedInGroup) {\n      newGroupIdsOrder.push(groupId)\n    }\n    if (groupData.nestedGroups) {\n      var nestedGroups = this.groupsData.get({\n        filter: function(nestedGroup) {\n          return nestedGroup.nestedInGroup == groupId;\n        }\n      });\n      var nestedGroupIds = nestedGroups.map(function(nestedGroup) { return nestedGroup.id })\n      newGroupIdsOrder = newGroupIdsOrder.concat(nestedGroupIds);\n    }\n  }, this)\n  return newGroupIdsOrder;\n}\n\n\n/**\n * Add a new item\n * @param {Item} item\n * @private\n */\nItemSet.prototype._addItem = function(item) {\n  this.items[item.id] = item;\n\n  // add to group\n  var groupId = this._getGroupId(item.data);\n  var group = this.groups[groupId];\n\n  if (!group) {\n   \titem.groupShowing = false;\n  } else if (group && group.data && group.data.showNested) {\n  \titem.groupShowing = true;\n  }\n\n  if (group) group.add(item);\n};\n\n/**\n * Update an existing item\n * @param {Item} item\n * @param {Object} itemData\n * @private\n */\nItemSet.prototype._updateItem = function(item, itemData) {\n  var oldGroupId = item.data.group;\n  var oldSubGroupId = item.data.subgroup;\n\n  // update the items data (will redraw the item when displayed)\n  item.setData(itemData);\n\n  var groupId = this._getGroupId(item.data);\n\tvar group = this.groups[groupId];\n  if (!group) {\n   \titem.groupShowing = false;\n  } else if (group && group.data && group.data.showNested) {\n  \titem.groupShowing = true;\n  }\n  // update group\n  if (oldGroupId != item.data.group || oldSubGroupId != item.data.subgroup) {\n    var oldGroup = this.groups[oldGroupId];\n    if (oldGroup) oldGroup.remove(item);\n    if (group) group.add(item);\n  }\n};\n\n/**\n * Delete an item from the ItemSet: remove it from the DOM, from the map\n * with items, and from the map with visible items, and from the selection\n * @param {Item} item\n * @private\n */\nItemSet.prototype._removeItem = function(item) {\n  // remove from DOM\n  item.hide();\n\n  // remove from items\n  delete this.items[item.id];\n\n  // remove from selection\n  var index = this.selection.indexOf(item.id);\n  if (index != -1) this.selection.splice(index, 1);\n\n  // remove from group\n  item.parent && item.parent.remove(item);\n};\n\n/**\n * Create an array containing all items being a range (having an end date)\n * @param array\n * @returns {Array}\n * @private\n */\nItemSet.prototype._constructByEndArray = function(array) {\n  var endArray = [];\n\n  for (var i = 0; i < array.length; i++) {\n    if (array[i] instanceof RangeItem) {\n      endArray.push(array[i]);\n    }\n  }\n  return endArray;\n};\n\n/**\n * Register the clicked item on touch, before dragStart is initiated.\n *\n * dragStart is initiated from a mousemove event, AFTER the mouse/touch is\n * already moving. Therefore, the mouse/touch can sometimes be above an other\n * DOM element than the item itself.\n *\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onTouch = function (event) {\n  // store the touched item, used in _onDragStart\n  this.touchParams.item = this.itemFromTarget(event);\n  this.touchParams.dragLeftItem = event.target.dragLeftItem || false;\n  this.touchParams.dragRightItem = event.target.dragRightItem || false;\n  this.touchParams.itemProps = null;\n};\n\n\n/**\n * Given an group id, returns the index it has.\n *\n * @param {Number} groupID\n * @private\n */\nItemSet.prototype._getGroupIndex = function(groupId) {\n    for (var i = 0; i < this.groupIds.length; i++) {\n        if (groupId == this.groupIds[i])\n            return i;\n    }\n};\n\n/**\n * Start dragging the selected events\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragStart = function (event) {\n  if (this.touchParams.itemIsDragging) { return; }\n  var item = this.touchParams.item || null;\n  var me = this;\n  var props;\n\n  if (item && (item.selected || this.options.itemsAlwaysDraggable)) {\n\n    if (this.options.editable.overrideItems &&\n        !this.options.editable.updateTime &&\n        !this.options.editable.updateGroup) {\n      return;\n    }\n\n    // override options.editable\n    if ((item.editable != null && !item.editable.updateTime && !item.editable.updateGroup)\n        && !this.options.editable.overrideItems) {\n      return;\n    }\n\n    var dragLeftItem = this.touchParams.dragLeftItem;\n    var dragRightItem = this.touchParams.dragRightItem;\n    this.touchParams.itemIsDragging = true;\n    this.touchParams.selectedItem = item;\n\n    if (dragLeftItem) {\n      props = {\n        item: dragLeftItem,\n        initialX: event.center.x,\n        dragLeft:  true,\n        data: this._cloneItemData(item.data)\n      };\n\n      this.touchParams.itemProps = [props];\n    }\n    else if (dragRightItem) {\n      props = {\n        item: dragRightItem,\n        initialX: event.center.x,\n        dragRight: true,\n        data: this._cloneItemData(item.data)\n      };\n\n      this.touchParams.itemProps = [props];\n    }\n    else {\n      var baseGroupIndex = this._getGroupIndex(item.data.group);\n\n      var itemsToDrag = (this.options.itemsAlwaysDraggable && !item.selected) ? [item.id] : this.getSelection();\n\n      this.touchParams.itemProps = itemsToDrag.map(function (id) {\n        var item = me.items[id];\n        var groupIndex = me._getGroupIndex(item.data.group);\n        return {\n          item: item,\n          initialX: event.center.x,\n          groupOffset: baseGroupIndex-groupIndex,\n          data: this._cloneItemData(item.data)\n        };\n      }.bind(this));\n    }\n\n    event.stopPropagation();\n  }\n  else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {\n    // create a new range item when dragging with ctrl key down\n    this._onDragStartAddItem(event);\n  }\n};\n\n/**\n * Start creating a new range item by dragging.\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragStartAddItem = function (event) {\n  var snap = this.options.snap || null;\n\n  if (this.options.rtl) {\n    var xAbs = util.getAbsoluteRight(this.dom.frame);\n    var x = xAbs - event.center.x  + 10;  // plus 10 to compensate for the drag starting as soon as you've moved 10px\n  } else {\n    var xAbs = util.getAbsoluteLeft(this.dom.frame);\n    var x = event.center.x - xAbs - 10;  // minus 10 to compensate for the drag starting as soon as you've moved 10px\n  }\n\n  var time = this.body.util.toTime(x);\n  var scale = this.body.util.getScale();\n  var step = this.body.util.getStep();\n  var start = snap ? snap(time, scale, step) : time;\n  var end = start;\n\n  var itemData = {\n    type: 'range',\n    start: start,\n    end: end,\n    content: 'new item'\n  };\n\n  var id = util.randomUUID();\n  itemData[this.itemsData._fieldId] = id;\n\n  var group = this.groupFromTarget(event);\n  if (group) {\n    itemData.group = group.groupId;\n  }\n  var newItem = new RangeItem(itemData, this.conversion, this.options);\n  newItem.id = id; // TODO: not so nice setting id afterwards\n  newItem.data = this._cloneItemData(itemData);\n  this._addItem(newItem);\n  this.touchParams.selectedItem = newItem;\n  \n  var props = {\n    item: newItem,\n    initialX: event.center.x,\n    data: newItem.data\n  };\n\n  if (this.options.rtl) {\n    props.dragLeft = true;\n  } else {\n    props.dragRight = true;\n  }\n  this.touchParams.itemProps = [props];\n\n  event.stopPropagation();\n};\n\n/**\n * Drag selected items\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDrag = function (event) {\n  if (this.touchParams.itemProps) {\n    event.stopPropagation();\n\n    var me = this;\n    var snap = this.options.snap || null;\n\n    if (this.options.rtl) {\n      var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.right.width;\n    } else {\n      var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width;\n    }\n\n    var scale = this.body.util.getScale();\n    var step = this.body.util.getStep();\n\n    //only calculate the new group for the item that's actually dragged\n    var selectedItem = this.touchParams.selectedItem;\n    var updateGroupAllowed = ((this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup) ||\n                             (!this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateGroup);\n    var newGroupBase = null;\n    if (updateGroupAllowed && selectedItem) {\n      if (selectedItem.data.group != undefined) {\n        // drag from one group to another\n        var group = me.groupFromTarget(event);\n        if (group) {\n          //we know the offset for all items, so the new group for all items\n          //will be relative to this one.\n          newGroupBase = this._getGroupIndex(group.groupId);\n        }\n      }\n    }\n\n    // move\n    this.touchParams.itemProps.forEach(function (props) {\n      var current = me.body.util.toTime(event.center.x - xOffset);\n      var initial = me.body.util.toTime(props.initialX - xOffset);\n\n      if (this.options.rtl) {\n        var offset = -(current - initial); // ms\n      } else {\n        var offset = (current - initial); // ms\n      }\n\n      var itemData = this._cloneItemData(props.item.data); // clone the data\n      if (props.item.editable != null\n        && !props.item.editable.updateTime\n        && !props.item.editable.updateGroup\n        && !me.options.editable.overrideItems) {\n        return;\n      }\n\n      var updateTimeAllowed = ((this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime) ||\n                               (!this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime);\n      if (updateTimeAllowed) {\n        if (props.dragLeft) {\n          // drag left side of a range item\n          if (this.options.rtl) {\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var end = new Date(initialEnd.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.end = snap ? snap(end, scale, step) : end;\n            }\n          } else {\n            if (itemData.start != undefined) {\n              var initialStart = util.convert(props.data.start, 'Date');\n              var start = new Date(initialStart.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n          }\n        }\n        else if (props.dragRight) {\n          // drag right side of a range item\n          if (this.options.rtl) {\n            if (itemData.start != undefined) {\n              var initialStart = util.convert(props.data.start, 'Date');\n              var start = new Date(initialStart.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n          } else {\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var end = new Date(initialEnd.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.end = snap ? snap(end, scale, step) : end;\n            }\n          }\n        }\n        else {\n          // drag both start and end\n          if (itemData.start != undefined) {\n\n            var initialStart = util.convert(props.data.start, 'Date').valueOf();\n            var start = new Date(initialStart + offset);\n\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var duration  = initialEnd.valueOf() - initialStart.valueOf();\n\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n              itemData.end   = new Date(itemData.start.valueOf() + duration);\n            }\n            else {\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n\n\n          }\n        }\n      }\n\n\n      if (updateGroupAllowed && (!props.dragLeft && !props.dragRight) && newGroupBase!=null) {\n        if (itemData.group != undefined) {\n          var newOffset = newGroupBase - props.groupOffset;\n\n          //make sure we stay in bounds\n          newOffset = Math.max(0, newOffset);\n          newOffset = Math.min(me.groupIds.length-1, newOffset);\n\n          itemData.group = me.groupIds[newOffset];\n        }\n      }\n\n      // confirm moving the item\n      itemData = this._cloneItemData(itemData);  // convert start and end to the correct type\n      me.options.onMoving(itemData, function (itemData) {\n        if (itemData) {\n          props.item.setData(this._cloneItemData(itemData, 'Date'));\n        }\n      }.bind(this));\n    }.bind(this));\n\n    this.stackDirty = true; // force re-stacking of all items next redraw\n    this.body.emitter.emit('_change');\n  }\n};\n\n/**\n * Move an item to another group\n * @param {Item} item\n * @param {String | Number} groupId\n * @private\n */\nItemSet.prototype._moveToGroup = function(item, groupId) {\n  var group = this.groups[groupId];\n  if (group && group.groupId != item.data.group) {\n    var oldGroup = item.parent;\n    oldGroup.remove(item);\n    oldGroup.order();\n    group.add(item);\n    group.order();\n\n    item.data.group = group.groupId;\n  }\n};\n\n/**\n * End of dragging selected items\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragEnd = function (event) {\n  this.touchParams.itemIsDragging = false;\n  if (this.touchParams.itemProps) {\n    event.stopPropagation();\n\n    var me = this;\n    var dataset = this.itemsData.getDataSet();\n    var itemProps = this.touchParams.itemProps ;\n    this.touchParams.itemProps = null;\n\n    itemProps.forEach(function (props) {\n      var id = props.item.id;\n      var exists = me.itemsData.get(id, me.itemOptions) != null;\n\n      if (!exists) {\n        // add a new item\n        me.options.onAdd(props.item.data, function (itemData) {\n          me._removeItem(props.item); // remove temporary item\n          if (itemData) {\n            me.itemsData.getDataSet().add(itemData);\n          }\n\n          // force re-stacking of all items next redraw\n          me.stackDirty = true;\n          me.body.emitter.emit('_change');\n        });\n      }\n      else {\n        // update existing item\n        var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type\n        me.options.onMove(itemData, function (itemData) {\n          if (itemData) {\n            // apply changes\n            itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined)\n            dataset.update(itemData);\n          }\n          else {\n            // restore original values\n            props.item.setData(props.data);\n\n            me.stackDirty = true; // force re-stacking of all items next redraw\n            me.body.emitter.emit('_change');\n          }\n        });\n      }\n    }.bind(this));\n  }\n};\n\nItemSet.prototype._onGroupClick = function (event) {\n  var group = this.groupFromTarget(event);\n\n  if (!group.nestedGroups) return;\n\n  var groupsData = this.groupsData;\n  if (this.groupsData instanceof DataView) {\n    groupsData = this.groupsData.getDataSet()\n  }\n\n  group.showNested = !group.showNested;\n\n  var nestedGroups = groupsData.get(group.nestedGroups).map(function(nestedGroup) {\n    if (nestedGroup.visible == undefined) { nestedGroup.visible = true; }\n    nestedGroup.visible = !!group.showNested;\n    return nestedGroup;\n  });\n  groupsData.update(nestedGroups);\n\n  if (group.showNested) {\n    util.removeClassName(group.dom.label, 'collapsed');\n    util.addClassName(group.dom.label, 'expanded');\n  } else {\n    util.removeClassName(group.dom.label, 'expanded');\n    var collapsedDirClassName = this.options.rtl ? 'collapsed-rtl' : 'collapsed'\n    util.addClassName(group.dom.label, collapsedDirClassName);\n  }\n}\n\nItemSet.prototype._onGroupDragStart = function (event) {\n\tif (this.options.groupEditable.order) {\n\t\tthis.groupTouchParams.group = this.groupFromTarget(event);\n\t\t\n\t\tif (this.groupTouchParams.group) {\n\t\t\tevent.stopPropagation();\n\t\t\t\n\t\t\tthis.groupTouchParams.originalOrder = this.groupsData.getIds({\n\t\t\t    order: this.options.groupOrder\n\t\t    });\n\t\t}\n\t}\n}\n\nItemSet.prototype._onGroupDrag = function (event) {\n\tif (this.options.groupEditable.order && this.groupTouchParams.group) {\n\t\tevent.stopPropagation();\n\t\t\n    var groupsData = this.groupsData;\n    if (this.groupsData instanceof DataView) {\n      groupsData = this.groupsData.getDataSet()\n    }\n\t\t// drag from one group to another\n\t\tvar group = this.groupFromTarget(event);\n\t\t\n\t\t// try to avoid toggling when groups differ in height\n\t\tif (group && group.height != this.groupTouchParams.group.height) {\n\t\t\tvar movingUp = (group.top < this.groupTouchParams.group.top);\n\t\t\tvar clientY = event.center ? event.center.y : event.clientY;\n\t\t\tvar targetGroupTop = util.getAbsoluteTop(group.dom.foreground);\n\t\t\tvar draggedGroupHeight = this.groupTouchParams.group.height;\n\t\t\tif (movingUp) {\n\t\t\t\t// skip swapping the groups when the dragged group is not below clientY afterwards\n\t\t\t\tif (targetGroupTop + draggedGroupHeight < clientY) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar targetGroupHeight = group.height;\n\t\t\t\t// skip swapping the groups when the dragged group is not below clientY afterwards\n\t\t\t\tif (targetGroupTop + targetGroupHeight - draggedGroupHeight > clientY) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (group && group != this.groupTouchParams.group) {\n\t\t\tvar targetGroup = groupsData.get(group.groupId);\n\t\t\tvar draggedGroup = groupsData.get(this.groupTouchParams.group.groupId);\n\t\t\t\n\t\t\t// switch groups\n\t\t\tif (draggedGroup && targetGroup) {\n\t\t\t\tthis.options.groupOrderSwap(draggedGroup, targetGroup, groupsData);\n\t\t\t\tgroupsData.update(draggedGroup);\n\t\t\t\tgroupsData.update(targetGroup);\n\t\t\t}\n\t\t\t\n\t\t\t// fetch current order of groups\n\t\t\tvar newOrder = groupsData.getIds({\n\t\t\t  order: this.options.groupOrder\n\t\t  });\n\n\t\t\t\n\t\t\t// in case of changes since _onGroupDragStart\n\t\t\tif (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) {\n\t\t\t\tvar origOrder = this.groupTouchParams.originalOrder;\n\t\t\t\tvar draggedId = this.groupTouchParams.group.groupId;\n\t\t\t\tvar numGroups = Math.min(origOrder.length, newOrder.length);\n\t\t\t\tvar curPos = 0;\n\t\t\t\tvar newOffset = 0;\n\t\t\t\tvar orgOffset = 0;\n\t\t\t\twhile (curPos < numGroups) {\n\t\t\t\t\t// as long as the groups are where they should be step down along the groups order\n\t\t\t\t\twhile ((curPos+newOffset) < numGroups \n\t\t\t\t\t\t&& (curPos+orgOffset) < numGroups \n\t\t\t\t\t\t&& newOrder[curPos+newOffset] == origOrder[curPos+orgOffset]) {\n\t\t\t\t\t\tcurPos++;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// all ok\n\t\t\t\t\tif (curPos+newOffset >= numGroups) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// not all ok\n\t\t\t\t\t// if dragged group was move upwards everything below should have an offset\n\t\t\t\t\tif (newOrder[curPos+newOffset] == draggedId) {\n\t\t\t\t\t\tnewOffset = 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// if dragged group was move downwards everything above should have an offset\n\t\t\t\t\telse if (origOrder[curPos+orgOffset] == draggedId) {\n\t\t\t\t\t\torgOffset = 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} \n\t\t\t\t\t// found a group (apart from dragged group) that has the wrong position -> switch with the \n\t\t\t\t\t// group at the position where other one should be, fix index arrays and continue\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar slippedPosition = newOrder.indexOf(origOrder[curPos+orgOffset])\n\t\t\t\t\t\tvar switchGroup = groupsData.get(newOrder[curPos+newOffset]);\n\t\t\t\t\t\tvar shouldBeGroup = groupsData.get(origOrder[curPos+orgOffset]);\n\t\t\t\t\t\tthis.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData);\n\t\t\t\t\t\tgroupsData.update(switchGroup);\n\t\t\t\t\t\tgroupsData.update(shouldBeGroup);\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar switchGroupId = newOrder[curPos+newOffset];\n\t\t\t\t\t\tnewOrder[curPos+newOffset] = origOrder[curPos+orgOffset];\n\t\t\t\t\t\tnewOrder[slippedPosition] = switchGroupId;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcurPos++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n}\n\nItemSet.prototype._onGroupDragEnd = function (event) {\n\tif (this.options.groupEditable.order && this.groupTouchParams.group) {\n\t\tevent.stopPropagation();\n\t\t\n\t\t// update existing group\n\t\tvar me = this;\n\t\tvar id = me.groupTouchParams.group.groupId;\n\t\tvar dataset = me.groupsData.getDataSet();\n        var groupData = util.extend({}, dataset.get(id)); // clone the data\n        me.options.onMoveGroup(groupData, function (groupData) {\n          if (groupData) {\n            // apply changes\n        \tgroupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined)\n            dataset.update(groupData);\n          }\n          else {\n        \t  \n        \t// fetch current order of groups\n  \t\t\tvar newOrder = dataset.getIds({\n  \t\t\t    order: me.options.groupOrder\n  \t\t    });\n        \t  \n            // restore original order\n        \tif (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) {\n        \t\tvar origOrder = me.groupTouchParams.originalOrder;\n  \t\t\t\tvar numGroups = Math.min(origOrder.length, newOrder.length);\n  \t\t\t\tvar curPos = 0;\n  \t\t\t\twhile (curPos < numGroups) {\n  \t\t\t\t\t// as long as the groups are where they should be step down along the groups order\n  \t\t\t\t\twhile (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) {\n  \t\t\t\t\t    curPos++;\n  \t\t\t\t\t}\n  \t\t\t\t\t\n  \t\t\t\t\t// all ok\n  \t\t\t\t\tif (curPos >= numGroups) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n  \t\t\t\t\t\n\t\t\t\t\t\t// found a group that has the wrong position -> switch with the \n\t\t\t\t\t\t// group at the position where other one should be, fix index arrays and continue\n\t\t\t\t\t\tvar slippedPosition = newOrder.indexOf(origOrder[curPos])\n\t\t\t\t\t\tvar switchGroup = dataset.get(newOrder[curPos]);\n\t\t\t\t\t\tvar shouldBeGroup = dataset.get(origOrder[curPos]);\n\t\t\t\t\t\tme.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset);\n\t\t\t\t\t\tgroupsData.update(switchGroup);\n\t\t\t\t\t\tgroupsData.update(shouldBeGroup);\n  \t\t\t\t\t\t\n  \t\t\t\t\tvar switchGroupId = newOrder[curPos];\n  \t\t\t\t\tnewOrder[curPos] = origOrder[curPos];\n  \t\t\t\t\tnewOrder[slippedPosition] = switchGroupId;\n  \t\t\t\t\t\t\n  \t\t\t\t\tcurPos++;\n  \t\t\t\t}\n  \t\t\t}\n\n          }\n        });\n        \n        me.body.emitter.emit('groupDragged', { groupId: id });\n\t}\n}\n\n/**\n * Handle selecting/deselecting an item when tapping it\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onSelectItem = function (event) {\n  if (!this.options.selectable) return;\n\n  var ctrlKey  = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey);\n  var shiftKey = event.srcEvent && event.srcEvent.shiftKey;\n  if (ctrlKey || shiftKey) {\n    this._onMultiSelectItem(event);\n    return;\n  }\n\n  var oldSelection = this.getSelection();\n\n  var item = this.itemFromTarget(event);\n  var selection = item ? [item.id] : [];\n  this.setSelection(selection);\n\n  var newSelection = this.getSelection();\n\n  // emit a select event,\n  // except when old selection is empty and new selection is still empty\n  if (newSelection.length > 0 || oldSelection.length > 0) {\n    this.body.emitter.emit('select', {\n      items: newSelection,\n      event: util.elementsCensor(event)\n    });\n  }\n};\n\n/**\n * Handle hovering an item\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onMouseOver = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  // Item we just left\n  var related = this.itemFromRelatedTarget(event);\n  if (item === related) {\n    // We haven't changed item, just element in the item\n    return;\n  }\n\n  if (item.getTitle()) {\n    if (item.popup == null) {\n      item.setPopup(new Popup(this.body.dom.root, this.options.tooltip.overflowMethod || 'flip'));\n    }\n\n    var container = this.body.dom.centerContainer;\n    item.popup.setPosition(\n      event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft,\n      event.clientY - util.getAbsoluteTop(container) + container.offsetTop\n    );\n    item.popup.show();\n  }\n\n  this.body.emitter.emit('itemover', {\n    item: item.id,\n    event: util.elementsCensor(event)\n  });\n};\nItemSet.prototype._onMouseOut = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  // Item we are going to\n  var related = this.itemFromRelatedTarget(event);\n  if (item === related) {\n    // We aren't changing item, just element in the item\n    return;\n  }\n\n  if (item.popup != null) {\n    item.popup.hide();\n  }\n\n  this.body.emitter.emit('itemout', {\n    item: item.id,\n    event: util.elementsCensor(event)\n  });\n};\nItemSet.prototype._onMouseMove = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  if (this.options.tooltip.followMouse) {\n    if (item.popup) {\n      if (!item.popup.hidden) {\n        var container = this.body.dom.centerContainer;\n        item.popup.setPosition(\n          event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft,\n          event.clientY - util.getAbsoluteTop(container) + container.offsetTop\n        );\n        item.popup.show(); // Redraw\n      }\n    }\n  }\n};\n\n\n/**\n * Handle updates of an item on double tap\n * @param event\n * @private\n */\nItemSet.prototype._onUpdateItem = function (item) {\n  if (!this.options.selectable) return;\n  if (!this.options.editable.add) return;\n\n  var me = this;\n \n  if (item) {\n    // execute async handler to update the item (or cancel it)\n    var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset\n    this.options.onUpdate(itemData, function (itemData) {\n      if (itemData) {\n        me.itemsData.getDataSet().update(itemData);\n      }\n    });\n  }\n}\n\n/**\n * Handle creation of an item on double tap\n * @param event\n * @private\n */\nItemSet.prototype._onAddItem = function (event) {\n  if (!this.options.selectable) return;\n  if (!this.options.editable.add) return;\n\n  var me = this;\n  var snap = this.options.snap || null;\n  var item = this.itemFromTarget(event);\n\n  if (!item) {\n    // add item\n    if (this.options.rtl) {\n      var xAbs = util.getAbsoluteRight(this.dom.frame);\n      var x = xAbs - event.center.x;\n    } else {\n      var xAbs = util.getAbsoluteLeft(this.dom.frame);\n      var x = event.center.x - xAbs; \n    }\n    // var xAbs = util.getAbsoluteLeft(this.dom.frame);\n    // var x = event.center.x - xAbs;\n    var start = this.body.util.toTime(x);\n    var scale = this.body.util.getScale();\n    var step = this.body.util.getStep();\n\n    var newItemData = {\n      start: snap ? snap(start, scale, step) : start,\n      content: 'new item'\n    };\n\n    if (event.type == 'drop') {\n      var itemData = JSON.parse(event.dataTransfer.getData(\"text\"))\n      newItemData.content = itemData.content; // content is required \n      newItemData.type = itemData.type || 'box';\n      newItemData[this.itemsData._fieldId] = itemData.id || util.randomUUID();\n\n      if (itemData.type == 'range' || (itemData.end && itemData.start)) {\n        if (!itemData.end) {\n          var end = this.body.util.toTime(x + this.props.width / 5);\n          newItemData.end = snap ? snap(end, scale, step) : end;\n        } else {\n          newItemData.end = itemData.end;\n          newItemData.start = itemData.start;\n        }\n      }\n    } else {\n      newItemData[this.itemsData._fieldId] = util.randomUUID();\n\n      // when default type is a range, add a default end date to the new item\n      if (this.options.type === 'range') {\n        var end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    }\n\n    var group = this.groupFromTarget(event);\n    if (group) {\n      newItemData.group = group.groupId;\n    }\n\n    // execute async handler to customize (or cancel) adding an item\n    newItemData = this._cloneItemData(newItemData);     // convert start and end to the correct type\n    this.options.onAdd(newItemData, function (item) {\n      if (item) {\n        me.itemsData.getDataSet().add(item);\n        if (event.type == 'drop') {\n          me.setSelection([item.id]);\n        }\n        // TODO: need to trigger a redraw?\n      }\n    });\n  }\n};\n\n/**\n * Handle selecting/deselecting multiple items when holding an item\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onMultiSelectItem = function (event) {\n  if (!this.options.selectable) return;\n\n  var item = this.itemFromTarget(event);\n\n  if (item) {\n    // multi select items (if allowed)\n\n    var selection = this.options.multiselect\n      ? this.getSelection() // take current selection\n      : [];                 // deselect current selection\n\n    var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false;\n\n    if (shiftKey && this.options.multiselect) {\n      // select all items between the old selection and the tapped item\n      var itemGroup = this.itemsData.get(item.id).group;\n    \t\n      // when filtering get the group of the last selected item\n      var lastSelectedGroup = undefined;\n      if (this.options.multiselectPerGroup) {\n        if (selection.length > 0) {\n          lastSelectedGroup = this.itemsData.get(selection[0]).group;\n        }\n      }\n    \t\n      // determine the selection range\n      if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) {\n        selection.push(item.id);\n      }\n      var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions));\n      \n      if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) {\n        // select all items within the selection range\n        selection = [];\n        for (var id in this.items) {\n          if (this.items.hasOwnProperty(id)) {\n            var _item = this.items[id];\n            var start = _item.data.start;\n            var end = (_item.data.end !== undefined) ? _item.data.end : start;\n\n            if (start >= range.min &&\n                end <= range.max &&\n                (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) &&\n                !(_item instanceof BackgroundItem)) {\n              selection.push(_item.id); // do not use id but item.id, id itself is stringified\n            }\n          }\n        }\n      }\n    }\n    else {\n      // add/remove this item from the current selection\n      var index = selection.indexOf(item.id);\n      if (index == -1) {\n        // item is not yet selected -> select it\n        selection.push(item.id);\n      }\n      else {\n        // item is already selected -> deselect it\n        selection.splice(index, 1);\n      }\n    }\n\n    this.setSelection(selection);\n\n    this.body.emitter.emit('select', {\n      items: this.getSelection(),\n      event: util.elementsCensor(event)\n    });\n  }\n};\n\n/**\n * Calculate the time range of a list of items\n * @param {Array.<Object>} itemsData\n * @return {{min: Date, max: Date}} Returns the range of the provided items\n * @private\n */\nItemSet._getItemRange = function(itemsData) {\n  var max = null;\n  var min = null;\n\n  itemsData.forEach(function (data) {\n    if (min == null || data.start < min) {\n      min = data.start;\n    }\n\n    if (data.end != undefined) {\n      if (max == null || data.end > max) {\n        max = data.end;\n      }\n    }\n    else {\n      if (max == null || data.start > max) {\n        max = data.start;\n      }\n    }\n  });\n\n  return {\n    min: min,\n    max: max\n  }\n};\n\n/**\n * Find an item from an element:\n * searches for the attribute 'timeline-item' in the element's tree\n * @param {HTMLElement} element\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromElement = function(element) {\n  var cur = element;\n  while (cur) {\n    if (cur.hasOwnProperty('timeline-item')) {\n      return cur['timeline-item'];\n    }\n    cur = cur.parentNode;\n  }\n\n  return null;\n};\n\n/**\n * Find an item from an event target:\n * searches for the attribute 'timeline-item' in the event target's element tree\n * @param {Event} event\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromTarget = function(event) {\n  return this.itemFromElement(event.target);\n};\n\n/**\n * Find an item from an event's related target:\n * searches for the attribute 'timeline-item' in the related target's element tree\n * @param {Event} event\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromRelatedTarget = function(event) {\n  return this.itemFromElement(event.relatedTarget);\n};\n\n/**\n * Find the Group from an event target:\n * searches for the attribute 'timeline-group' in the event target's element tree\n * @param {Event} event\n * @return {Group | null} group\n */\nItemSet.prototype.groupFromTarget = function(event) {\n  var clientY = event.center ? event.center.y : event.clientY;\n  for (var i = 0; i < this.groupIds.length; i++) {\n    var groupId = this.groupIds[i];\n    var group = this.groups[groupId];\n    var foreground = group.dom.foreground;\n    var top = util.getAbsoluteTop(foreground);\n    if (clientY > top && clientY < top + foreground.offsetHeight) {\n      return group;\n    }\n\n    if (this.options.orientation.item === 'top') {\n      if (i === this.groupIds.length - 1 && clientY > top) {\n        return group;\n      }\n    }\n    else {\n      if (i === 0 && clientY < top + foreground.offset) {\n        return group;\n      }\n    }\n  }\n\n  return null;\n};\n\n/**\n * Find the ItemSet from an event target:\n * searches for the attribute 'timeline-itemset' in the event target's element tree\n * @param {Event} event\n * @return {ItemSet | null} item\n */\nItemSet.itemSetFromTarget = function(event) {\n  var target = event.target;\n  while (target) {\n    if (target.hasOwnProperty('timeline-itemset')) {\n      return target['timeline-itemset'];\n    }\n    target = target.parentNode;\n  }\n\n  return null;\n};\n\n/**\n * Clone the data of an item, and \"normalize\" it: convert the start and end date\n * to the type (Date, Moment, ...) configured in the DataSet. If not configured,\n * start and end are converted to Date.\n * @param {Object} itemData, typically `item.data`\n * @param {string} [type]  Optional Date type. If not provided, the type from the DataSet is taken\n * @return {Object} The cloned object\n * @private\n */\nItemSet.prototype._cloneItemData = function (itemData, type) {\n  var clone = util.extend({}, itemData);\n\n  if (!type) {\n    // convert start and end date to the type (Date, Moment, ...) configured in the DataSet\n    type = this.itemsData.getDataSet()._options.type;\n  }\n\n  if (clone.start != undefined) {\n    clone.start = util.convert(clone.start, type && type.start || 'Date');\n  }\n  if (clone.end != undefined) {\n    clone.end = util.convert(clone.end , type && type.end || 'Date');\n  }\n\n  return clone;\n};\n\nmodule.exports = ItemSet;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/ItemSet.js","/**\n * Popup is a class to create a popup window with some text\n * @param {Element} container       The container object.\n * @param {string}  overflowMethod  How the popup should act to overflowing ('flip' or 'cap')\n */\nclass Popup {\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || 'cap';\n\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-tooltip';\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = parseInt(x);\n    this.y = parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      this.frame.innerHTML = '';\n      this.frame.appendChild(content);\n    }\n    else {\n      this.frame.innerHTML = content; // string containing text or HTML\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n\n    if (doShow === true) {\n      var height = this.frame.clientHeight;\n      var width = this.frame.clientWidth;\n      var maxHeight = this.frame.parentNode.clientHeight;\n      var maxWidth = this.frame.parentNode.clientWidth;\n\n      var left = 0, top = 0;\n\n      if (this.overflowMethod == 'flip') {\n        var isLeft = false, isTop = true; // Where around the position it's located\n\n        if (this.y - height < this.padding) {\n          isTop = false;\n        }\n\n        if (this.x + width > maxWidth - this.padding) {\n          isLeft = true;\n        }\n\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        top = (this.y - height);\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    }\n    else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n}\n\nexport default Popup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Popup.js","var moment = require('../module/moment');\nvar DateUtil = require('./DateUtil');\nvar util = require('../util');\n\n/**\n * @constructor  TimeStep\n * The class TimeStep is an iterator for dates. You provide a start date and an\n * end date. The class itself determines the best scale (step size) based on the\n * provided start Date, end Date, and minimumStep.\n *\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n *\n * Alternatively, you can set a scale by hand.\n * After creation, you can initialize the class by executing first(). Then you\n * can iterate from the start date to the end date via next(). You can check if\n * the end date is reached with the function hasNext(). After each step, you can\n * retrieve the current date via getCurrent().\n * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours,\n * days, to years.\n *\n * Version: 1.2\n *\n * @param {Date} [start]         The start date, for example new Date(2010, 9, 21)\n *                               or new Date(2010, 9, 21, 23, 45, 00)\n * @param {Date} [end]           The end date\n * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds\n */\nfunction TimeStep(start, end, minimumStep, hiddenDates) {\n  this.moment = moment;\n\n  // variables\n  this.current = this.moment();\n  this._start = this.moment();\n  this._end = this.moment();\n\n  this.autoScale  = true;\n  this.scale = 'day';\n  this.step = 1;\n\n  // initialize the range\n  this.setRange(start, end, minimumStep);\n\n  // hidden Dates options\n  this.switchedDay = false;\n  this.switchedMonth = false;\n  this.switchedYear = false;\n  if (Array.isArray(hiddenDates)) {\n    this.hiddenDates = hiddenDates;\n  }\n  else if (hiddenDates != undefined) {\n    this.hiddenDates = [hiddenDates];\n  }\n  else {\n    this.hiddenDates = [];\n  }\n\n  this.format = TimeStep.FORMAT; // default formatting\n}\n\n// Time formatting\nTimeStep.FORMAT = {\n  minorLabels: {\n    millisecond:'SSS',\n    second:     's',\n    minute:     'HH:mm',\n    hour:       'HH:mm',\n    weekday:    'ddd D',\n    day:        'D',\n    month:      'MMM',\n    year:       'YYYY'\n  },\n  majorLabels: {\n    millisecond:'HH:mm:ss',\n    second:     'D MMMM HH:mm',\n    minute:     'ddd D MMMM',\n    hour:       'ddd D MMMM',\n    weekday:    'MMMM YYYY',\n    day:        'MMMM YYYY',\n    month:      'YYYY',\n    year:       ''\n  }\n};\n\n/**\n * Set custom constructor function for moment. Can be used to set dates\n * to UTC or to set a utcOffset.\n * @param {function} moment\n */\nTimeStep.prototype.setMoment = function (moment) {\n  this.moment = moment;\n\n  // update the date properties, can have a new utcOffset\n  this.current = this.moment(this.current.valueOf());\n  this._start = this.moment(this._start.valueOf());\n  this._end = this.moment(this._end.valueOf());\n};\n\n/**\n * Set custom formatting for the minor an major labels of the TimeStep.\n * Both `minorLabels` and `majorLabels` are an Object with properties:\n * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'.\n * @param {{minorLabels: Object, majorLabels: Object}} format\n */\nTimeStep.prototype.setFormat = function (format) {\n  var defaultFormat = util.deepExtend({}, TimeStep.FORMAT);\n  this.format = util.deepExtend(defaultFormat, format);\n};\n\n/**\n * Set a new range\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n * @param {Date} [start]      The start date and time.\n * @param {Date} [end]        The end date and time.\n * @param {int} [minimumStep] Optional. Minimum step size in milliseconds\n */\nTimeStep.prototype.setRange = function(start, end, minimumStep) {\n  if (!(start instanceof Date) || !(end instanceof Date)) {\n    throw  \"No legal start or end date in method setRange\";\n  }\n\n  this._start = (start != undefined) ? this.moment(start.valueOf()) : new Date();\n  this._end = (end != undefined) ? this.moment(end.valueOf()) : new Date();\n\n  if (this.autoScale) {\n    this.setMinimumStep(minimumStep);\n  }\n};\n\n/**\n * Set the range iterator to the start date.\n */\nTimeStep.prototype.start = function() {\n  this.current = this._start.clone();\n  this.roundToMinor();\n};\n\n/**\n * Round the current date to the first minor date value\n * This must be executed once when the current date is set to start Date\n */\nTimeStep.prototype.roundToMinor = function() {\n  // round to floor\n  // IMPORTANT: we have no breaks in this switch! (this is no bug)\n  // noinspection FallThroughInSwitchStatementJS\n  switch (this.scale) {\n    case 'year':\n      this.current.year(this.step * Math.floor(this.current.year() / this.step));\n      this.current.month(0);\n    case 'month':        this.current.date(1);\n    case 'day':          // intentional fall through\n    case 'weekday':      this.current.hours(0);\n    case 'hour':         this.current.minutes(0);\n    case 'minute':       this.current.seconds(0);\n    case 'second':       this.current.milliseconds(0);\n    //case 'millisecond': // nothing to do for milliseconds\n  }\n\n  if (this.step != 1) {\n    // round down to the first minor value that is a multiple of the current step size\n    switch (this.scale) {\n      case 'millisecond':  this.current.subtract(this.current.milliseconds() % this.step, 'milliseconds');  break;\n      case 'second':       this.current.subtract(this.current.seconds() % this.step, 'seconds'); break;\n      case 'minute':       this.current.subtract(this.current.minutes() % this.step, 'minutes'); break;\n      case 'hour':         this.current.subtract(this.current.hours() % this.step, 'hours'); break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.subtract((this.current.date() - 1) % this.step, 'day'); break;\n      case 'month':        this.current.subtract(this.current.month() % this.step, 'month');  break;\n      case 'year':         this.current.subtract(this.current.year() % this.step, 'year'); break;\n      default: break;\n    }\n  }\n};\n\n/**\n * Check if the there is a next step\n * @return {boolean}  true if the current date has not passed the end date\n */\nTimeStep.prototype.hasNext = function () {\n  return (this.current.valueOf() <= this._end.valueOf());\n};\n\n/**\n * Do the next step\n */\nTimeStep.prototype.next = function() {\n  var prev = this.current.valueOf();\n\n  // Two cases, needed to prevent issues with switching daylight savings\n  // (end of March and end of October)\n  if (this.current.month() < 6)   {\n    switch (this.scale) {\n      case 'millisecond':  this.current.add(this.step, 'millisecond'); break;\n      case 'second':       this.current.add(this.step, 'second'); break;\n      case 'minute':       this.current.add(this.step, 'minute'); break;\n      case 'hour':\n        this.current.add(this.step, 'hour');\n        // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...)\n          // TODO: is this still needed now we use the function of moment.js?\n        this.current.subtract(this.current.hours() % this.step, 'hour');\n        break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.add(this.step, 'day'); break;\n      case 'month':        this.current.add(this.step, 'month'); break;\n      case 'year':         this.current.add(this.step, 'year'); break;\n      default: break;\n    }\n  }\n  else {\n    switch (this.scale) {\n      case 'millisecond':  this.current.add(this.step, 'millisecond'); break;\n      case 'second':       this.current.add(this.step, 'second'); break;\n      case 'minute':       this.current.add(this.step, 'minute'); break;\n      case 'hour':\n        this.current.add(this.moment.duration(this.step, 'hour'));\n\n        // correct for daylight saving\n        // FIXME: use this.current.add(moment.duration(this.step, 'hour'))\n        // see http://momentjs.com/docs/#special-considerations-for-months-and-years\n        if (this.current.hours() % this.step !== 0) {\n          this.current.add(this.step - this.current.hours() % this.step, 'hour');\n        }\n\n        break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.add(this.step, 'day'); break;\n      case 'month':        this.current.add(this.step, 'month'); break;\n      case 'year':         this.current.add(this.step, 'year'); break;\n      default:             break;\n    }\n  }\n\n  if (this.step != 1) {\n    // round down to the correct major value\n    switch (this.scale) {\n      case 'millisecond':  if(this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current.milliseconds(0);  break;\n      case 'second':       if(this.current.seconds() > 0 && this.current.seconds() < this.step) this.current.seconds(0);  break;\n      case 'minute':       if(this.current.minutes() > 0 && this.current.minutes() < this.step) this.current.minutes(0); break;\n      case 'hour':         if(this.current.hours() > 0 && this.current.hours() < this.step) this.current.hours(0);  break;\n      case 'weekday':      // intentional fall through\n      case 'day':          if(this.current.date() < this.step+1) this.current.date(1); break;\n      case 'month':        if(this.current.month() < this.step) this.current.month(0);  break;\n      case 'year':         break; // nothing to do for year\n      default:             break;\n    }\n  }\n\n  // safety mechanism: if current time is still unchanged, move to the end\n  if (this.current.valueOf() == prev) {\n    this.current = this._end.clone();\n  }\n\n  // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates\n  this.switchedDay = false;\n  this.switchedMonth = false;\n  this.switchedYear = false;\n\n  DateUtil.stepOverHiddenDates(this.moment, this, prev);\n};\n\n\n/**\n * Get the current datetime\n * @return {Moment}  current The current date\n */\nTimeStep.prototype.getCurrent = function() {\n  return this.current;\n};\n\n/**\n * Set a custom scale. Autoscaling will be disabled.\n * For example setScale('minute', 5) will result\n * in minor steps of 5 minutes, and major steps of an hour.\n *\n * @param {{scale: string, step: number}} params\n *                               An object containing two properties:\n *                               - A string 'scale'. Choose from 'millisecond', 'second',\n *                                 'minute', 'hour', 'weekday', 'day', 'month', 'year'.\n *                               - A number 'step'. A step size, by default 1.\n *                                 Choose for example 1, 2, 5, or 10.\n */\nTimeStep.prototype.setScale = function(params) {\n  if (params && typeof params.scale == 'string') {\n    this.scale = params.scale;\n    this.step = params.step > 0 ? params.step : 1;\n    this.autoScale = false;\n  }\n};\n\n/**\n * Enable or disable autoscaling\n * @param {boolean} enable  If true, autoascaling is set true\n */\nTimeStep.prototype.setAutoScale = function (enable) {\n  this.autoScale = enable;\n};\n\n\n/**\n * Automatically determine the scale that bests fits the provided minimum step\n * @param {Number} [minimumStep]  The minimum step size in milliseconds\n */\nTimeStep.prototype.setMinimumStep = function(minimumStep) {\n  if (minimumStep == undefined) {\n    return;\n  }\n\n  //var b = asc + ds;\n\n  var stepYear       = (1000 * 60 * 60 * 24 * 30 * 12);\n  var stepMonth      = (1000 * 60 * 60 * 24 * 30);\n  var stepDay        = (1000 * 60 * 60 * 24);\n  var stepHour       = (1000 * 60 * 60);\n  var stepMinute     = (1000 * 60);\n  var stepSecond     = (1000);\n  var stepMillisecond= (1);\n\n  // find the smallest step that is larger than the provided minimumStep\n  if (stepYear*1000 > minimumStep)        {this.scale = 'year';        this.step = 1000;}\n  if (stepYear*500 > minimumStep)         {this.scale = 'year';        this.step = 500;}\n  if (stepYear*100 > minimumStep)         {this.scale = 'year';        this.step = 100;}\n  if (stepYear*50 > minimumStep)          {this.scale = 'year';        this.step = 50;}\n  if (stepYear*10 > minimumStep)          {this.scale = 'year';        this.step = 10;}\n  if (stepYear*5 > minimumStep)           {this.scale = 'year';        this.step = 5;}\n  if (stepYear > minimumStep)             {this.scale = 'year';        this.step = 1;}\n  if (stepMonth*3 > minimumStep)          {this.scale = 'month';       this.step = 3;}\n  if (stepMonth > minimumStep)            {this.scale = 'month';       this.step = 1;}\n  if (stepDay*5 > minimumStep)            {this.scale = 'day';         this.step = 5;}\n  if (stepDay*2 > minimumStep)            {this.scale = 'day';         this.step = 2;}\n  if (stepDay > minimumStep)              {this.scale = 'day';         this.step = 1;}\n  if (stepDay/2 > minimumStep)            {this.scale = 'weekday';     this.step = 1;}\n  if (stepHour*4 > minimumStep)           {this.scale = 'hour';        this.step = 4;}\n  if (stepHour > minimumStep)             {this.scale = 'hour';        this.step = 1;}\n  if (stepMinute*15 > minimumStep)        {this.scale = 'minute';      this.step = 15;}\n  if (stepMinute*10 > minimumStep)        {this.scale = 'minute';      this.step = 10;}\n  if (stepMinute*5 > minimumStep)         {this.scale = 'minute';      this.step = 5;}\n  if (stepMinute > minimumStep)           {this.scale = 'minute';      this.step = 1;}\n  if (stepSecond*15 > minimumStep)        {this.scale = 'second';      this.step = 15;}\n  if (stepSecond*10 > minimumStep)        {this.scale = 'second';      this.step = 10;}\n  if (stepSecond*5 > minimumStep)         {this.scale = 'second';      this.step = 5;}\n  if (stepSecond > minimumStep)           {this.scale = 'second';      this.step = 1;}\n  if (stepMillisecond*200 > minimumStep)  {this.scale = 'millisecond'; this.step = 200;}\n  if (stepMillisecond*100 > minimumStep)  {this.scale = 'millisecond'; this.step = 100;}\n  if (stepMillisecond*50 > minimumStep)   {this.scale = 'millisecond'; this.step = 50;}\n  if (stepMillisecond*10 > minimumStep)   {this.scale = 'millisecond'; this.step = 10;}\n  if (stepMillisecond*5 > minimumStep)    {this.scale = 'millisecond'; this.step = 5;}\n  if (stepMillisecond > minimumStep)      {this.scale = 'millisecond'; this.step = 1;}\n};\n\n/**\n * Snap a date to a rounded value.\n * The snap intervals are dependent on the current scale and step.\n * Static function\n * @param {Date} date    the date to be snapped.\n * @param {string} scale Current scale, can be 'millisecond', 'second',\n *                       'minute', 'hour', 'weekday, 'day', 'month', 'year'.\n * @param {number} step  Current step (1, 2, 4, 5, ...\n * @return {Date} snappedDate\n */\nTimeStep.snap = function(date, scale, step) {\n  var clone = moment(date);\n\n  if (scale == 'year') {\n    var year = clone.year() + Math.round(clone.month() / 12);\n    clone.year(Math.round(year / step) * step);\n    clone.month(0);\n    clone.date(0);\n    clone.hours(0);\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'month') {\n    if (clone.date() > 15) {\n      clone.date(1);\n      clone.add(1, 'month');\n      // important: first set Date to 1, after that change the month.\n    }\n    else {\n      clone.date(1);\n    }\n\n    clone.hours(0);\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'day') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 5:\n      case 2:\n        clone.hours(Math.round(clone.hours() / 24) * 24); break;\n      default:\n        clone.hours(Math.round(clone.hours() / 12) * 12); break;\n    }\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'weekday') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 5:\n      case 2:\n        clone.hours(Math.round(clone.hours() / 12) * 12); break;\n      default:\n        clone.hours(Math.round(clone.hours() / 6) * 6); break;\n    }\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'hour') {\n    switch (step) {\n      case 4:\n        clone.minutes(Math.round(clone.minutes() / 60) * 60); break;\n      default:\n        clone.minutes(Math.round(clone.minutes() / 30) * 30); break;\n    }\n    clone.seconds(0);\n    clone.milliseconds(0);\n  } else if (scale == 'minute') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 15:\n      case 10:\n        clone.minutes(Math.round(clone.minutes() / 5) * 5);\n        clone.seconds(0);\n        break;\n      case 5:\n        clone.seconds(Math.round(clone.seconds() / 60) * 60); break;\n      default:\n        clone.seconds(Math.round(clone.seconds() / 30) * 30); break;\n    }\n    clone.milliseconds(0);\n  }\n  else if (scale == 'second') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 15:\n      case 10:\n        clone.seconds(Math.round(clone.seconds() / 5) * 5);\n        clone.milliseconds(0);\n        break;\n      case 5:\n        clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000); break;\n      default:\n        clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500); break;\n    }\n  }\n  else if (scale == 'millisecond') {\n    var _step = step > 5 ? step / 2 : 1;\n    clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step);\n  }\n\n  return clone;\n};\n\n/**\n * Check if the current value is a major value (for example when the step\n * is DAY, a major value is each first day of the MONTH)\n * @return {boolean} true if current date is major, else false.\n */\nTimeStep.prototype.isMajor = function() {\n  if (this.switchedYear == true) {\n    switch (this.scale) {\n      case 'year':\n      case 'month':\n      case 'weekday':\n      case 'day':\n      case 'hour':\n      case 'minute':\n      case 'second':\n      case 'millisecond':\n        return true;\n      default:\n        return false;\n    }\n  }\n  else if (this.switchedMonth == true) {\n    switch (this.scale) {\n      case 'weekday':\n      case 'day':\n      case 'hour':\n      case 'minute':\n      case 'second':\n      case 'millisecond':\n        return true;\n      default:\n        return false;\n    }\n  }\n  else if (this.switchedDay == true) {\n    switch (this.scale) {\n      case 'millisecond':\n      case 'second':\n      case 'minute':\n      case 'hour':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  var date = this.moment(this.current);\n  switch (this.scale) {\n    case 'millisecond':\n      return (date.milliseconds() == 0);\n    case 'second':\n      return (date.seconds() == 0);\n    case 'minute':\n      return (date.hours() == 0) && (date.minutes() == 0);\n    case 'hour':\n      return (date.hours() == 0);\n    case 'weekday': // intentional fall through\n    case 'day':\n      return (date.date() == 1);\n    case 'month':\n      return (date.month() == 0);\n    case 'year':\n      return false;\n    default:\n      return false;\n  }\n};\n\n\n/**\n * Returns formatted text for the minor axislabel, depending on the current\n * date and the scale. For example when scale is MINUTE, the current time is\n * formatted as \"hh:mm\".\n * @param {Date} [date] custom date. if not provided, current date is taken\n */\nTimeStep.prototype.getLabelMinor = function(date) {\n  if (date == undefined) {\n    date = this.current;\n  }\n\n  if (typeof(this.format.minorLabels) === \"function\") {\n    return this.format.minorLabels(date, this.scale, this.step);\n  }\n\n  var format = this.format.minorLabels[this.scale];\n  return (format && format.length > 0) ? this.moment(date).format(format) : '';\n};\n\n/**\n * Returns formatted text for the major axis label, depending on the current\n * date and the scale. For example when scale is MINUTE, the major scale is\n * hours, and the hour will be formatted as \"hh\".\n * @param {Date} [date] custom date. if not provided, current date is taken\n */\nTimeStep.prototype.getLabelMajor = function(date) {\n  if (date == undefined) {\n    date = this.current;\n  }\n  \n  if (typeof(this.format.majorLabels) === \"function\") {\n    return this.format.majorLabels(date, this.scale, this.step);\n  }\n\n  var format = this.format.majorLabels[this.scale];\n  return (format && format.length > 0) ? this.moment(date).format(format) : '';\n};\n\nTimeStep.prototype.getClassName = function() {\n  var _moment = this.moment;\n  var m = this.moment(this.current);\n  var current = m.locale ? m.locale('en') : m.lang('en'); // old versions of moment have .lang() function\n  var step = this.step;\n\n  function even(value) {\n    return (value / step % 2 == 0) ? ' vis-even' : ' vis-odd';\n  }\n\n  function today(date) {\n    if (date.isSame(new Date(), 'day')) {\n      return ' vis-today';\n    }\n    if (date.isSame(_moment().add(1, 'day'), 'day')) {\n      return ' vis-tomorrow';\n    }\n    if (date.isSame(_moment().add(-1, 'day'), 'day')) {\n      return ' vis-yesterday';\n    }\n    return '';\n  }\n\n  function currentWeek(date) {\n    return date.isSame(new Date(), 'week') ? ' vis-current-week' : '';\n  }\n\n  function currentMonth(date) {\n    return date.isSame(new Date(), 'month') ? ' vis-current-month' : '';\n  }\n\n  function currentYear(date) {\n    return date.isSame(new Date(), 'year') ? ' vis-current-year' : '';\n  }\n\n  switch (this.scale) {\n    case 'millisecond':\n      return today(current) +\n        even(current.milliseconds()).trim();\n\n    case 'second':\n      return today(current) +\n        even(current.seconds()).trim();\n\n    case 'minute':\n      return today(current) +\n        even(current.minutes()).trim();\n\n    case 'hour':\n      return 'vis-h' + current.hours() + \n        (this.step == 4 ? '-h' + (current.hours() + 4) : '') +\n        today(current) +\n        even(current.hours());\n\n    case 'weekday':\n      return 'vis-' + current.format('dddd').toLowerCase() +\n        today(current) +\n        currentWeek(current) +\n        even(current.date());\n\n    case 'day':\n      return 'vis-day' + current.date() +\n        ' vis-' + current.format('MMMM').toLowerCase() +\n        today(current) +\n        currentMonth(current) +\n        (this.step <= 2 ? today(current) : '') +\n        (this.step <= 2 ? ' vis-' + current.format('dddd').toLowerCase() : '' + even(current.date() - 1));\n\n    case 'month':\n      return 'vis-' + current.format('MMMM').toLowerCase() +\n        currentMonth(current) +\n        even(current.month());\n\n    case 'year':\n      var year = current.year();\n      return 'vis-year' + year +\n        currentYear(current) +\n        even(year);\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = TimeStep;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/TimeStep.js","var util = require('../../util');\nvar stack = require('../Stack');\nvar RangeItem = require('./item/RangeItem');\n\n/**\n * @constructor Group\n * @param {Number | String} groupId\n * @param {Object} data\n * @param {ItemSet} itemSet\n */\nfunction Group (groupId, data, itemSet) {\n  this.groupId = groupId;\n  this.subgroups = {};\n  this.subgroupIndex = 0;\n  this.subgroupOrderer = data && data.subgroupOrder;\n  this.itemSet = itemSet;\n  this.isVisible = null;\n  \n  if (data && data.nestedGroups) {\n    this.nestedGroups = data.nestedGroups;\n    if (data.showNested == false) {\n      this.showNested = false;\n    } else {\n      this.showNested = true;\n    }\n  }\n\n  this.nestedInGroup = null;\n\n  this.dom = {};\n  this.props = {\n    label: {\n      width: 0,\n      height: 0\n    }\n  };\n  this.className = null;\n\n  this.items = {};        // items filtered by groupId of this group\n  this.visibleItems = []; // items currently visible in window\n  this.itemsInRange = []; // items currently in range\n  this.orderedItems = {\n    byStart: [],\n    byEnd: []\n  };\n  this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap.\n  var me = this;\n  this.itemSet.body.emitter.on(\"checkRangedItems\", function () {\n    me.checkRangedItems = true;\n  })\n\n  this._create();\n\n  this.setData(data);\n}\n\n/**\n * Create DOM elements for the group\n * @private\n */\nGroup.prototype._create = function() {\n  var label = document.createElement('div');\n  if (this.itemSet.options.groupEditable.order) {\n    label.className = 'vis-label draggable';\n  } else {\n    label.className = 'vis-label';\n  }\n  this.dom.label = label;\n\n  var inner = document.createElement('div');\n  inner.className = 'vis-inner';\n  label.appendChild(inner);\n  this.dom.inner = inner;\n\n  var foreground = document.createElement('div');\n  foreground.className = 'vis-group';\n  foreground['timeline-group'] = this;\n  this.dom.foreground = foreground;\n\n  this.dom.background = document.createElement('div');\n  this.dom.background.className = 'vis-group';\n\n  this.dom.axis = document.createElement('div');\n  this.dom.axis.className = 'vis-group';\n\n  // create a hidden marker to detect when the Timelines container is attached\n  // to the DOM, or the style of a parent of the Timeline is changed from\n  // display:none is changed to visible.\n  this.dom.marker = document.createElement('div');\n  this.dom.marker.style.visibility = 'hidden';\n  this.dom.marker.style.position = 'absolute';\n  this.dom.marker.innerHTML = '';\n  this.dom.background.appendChild(this.dom.marker);\n};\n\n/**\n * Set the group data for this group\n * @param {Object} data   Group data, can contain properties content and className\n */\nGroup.prototype.setData = function(data) {\n  // update contents\n  var content;\n  var templateFunction;\n\n  if (this.itemSet.options && this.itemSet.options.groupTemplate) {\n    templateFunction = this.itemSet.options.groupTemplate.bind(this);\n    content = templateFunction(data, this.dom.inner);\n  } else {\n    content = data && data.content;\n  }\n\n  if (content instanceof Element) {\n    this.dom.inner.appendChild(content);\n    while (this.dom.inner.firstChild) {\n      this.dom.inner.removeChild(this.dom.inner.firstChild);\n    }\n    this.dom.inner.appendChild(content);\n  } else if (content instanceof Object) {\n    templateFunction(data, this.dom.inner);\n  } else if (content !== undefined && content !== null) {\n    this.dom.inner.innerHTML = content;\n  } else {\n    this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null\n  }\n\n  // update title\n  this.dom.label.title = data && data.title || '';\n  if (!this.dom.inner.firstChild) {\n    util.addClassName(this.dom.inner, 'vis-hidden');\n  }\n  else {\n    util.removeClassName(this.dom.inner, 'vis-hidden');\n  }\n\n  if (data && data.nestedGroups) {\n     if (data.showNested == false) {\n      this.showNested = false;\n    } else {\n      this.showNested = true;\n    }\n\n    util.addClassName(this.dom.label, 'vis-nesting-group');\n    if (this.showNested) {\n      util.removeClassName(this.dom.label, 'collapsed');\n      util.addClassName(this.dom.label, 'expanded');\n    } else {\n      util.removeClassName(this.dom.label, 'expanded');\n      var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'\n      util.addClassName(this.dom.label, collapsedDirClassName);\n    }\n  }\n\n  if (data && data.nestedInGroup) {\n    util.addClassName(this.dom.label, 'vis-nested-group');\n    if (this.itemSet.options && this.itemSet.options.rtl) {\n      this.dom.inner.style.paddingRight = '30px';\n    } else {\n      this.dom.inner.style.paddingLeft = '30px';\n    }\n  }\n\n  // update className\n  var className = data && data.className || null;\n  if (className != this.className) {\n    if (this.className) {\n      util.removeClassName(this.dom.label, this.className);\n      util.removeClassName(this.dom.foreground, this.className);\n      util.removeClassName(this.dom.background, this.className);\n      util.removeClassName(this.dom.axis, this.className);\n    }\n    util.addClassName(this.dom.label, className);\n    util.addClassName(this.dom.foreground, className);\n    util.addClassName(this.dom.background, className);\n    util.addClassName(this.dom.axis, className);\n    this.className = className;\n  }\n\n  // update style\n  if (this.style) {\n    util.removeCssText(this.dom.label, this.style);\n    this.style = null;\n  }\n  if (data && data.style) {\n    util.addCssText(this.dom.label, data.style);\n    this.style = data.style;\n  }\n};\n\n/**\n * Get the width of the group label\n * @return {number} width\n */\nGroup.prototype.getLabelWidth = function() {\n  return this.props.label.width;\n};\n\n\n/**\n * Repaint this group\n * @param {{start: number, end: number}} range\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @param {boolean} [restack=false]  Force restacking of all items\n * @return {boolean} Returns true if the group is resized\n */\nGroup.prototype.redraw = function(range, margin, restack) {\n  var resized = false;\n\n  // force recalculation of the height of the items when the marker height changed\n  // (due to the Timeline being attached to the DOM or changed from display:none to visible)\n  var markerHeight = this.dom.marker.clientHeight;\n  if (markerHeight != this.lastMarkerHeight) {\n    this.lastMarkerHeight = markerHeight;\n    util.forEach(this.items, function (item) {\n      item.dirty = true;\n      if (item.displayed) item.redraw();\n    });\n\n    restack = true;\n  }\n\n  // recalculate the height of the subgroups\n  this._calculateSubGroupHeights(margin);\n\n  // calculate actual size and position\n  var foreground = this.dom.foreground;\n  this.top = foreground.offsetTop;\n  this.right = foreground.offsetLeft;\n  this.width = foreground.offsetWidth;\n\n  this.isVisible = this._isGroupVisible(range, margin);\n  // reposition visible items vertically\n  if (typeof this.itemSet.options.order === 'function') {\n    // a custom order function\n\n    if (restack) {\n      // brute force restack of all items\n\n      // show all items\n      var me = this;\n      var limitSize = false;\n      util.forEach(this.items, function (item) {\n        if (!item.displayed) {\n          item.redraw();\n          me.visibleItems.push(item);\n        }\n        item.repositionX(limitSize);\n      });\n\n      // order all items and force a restacking\n      var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) {\n        return me.itemSet.options.order(a.data, b.data);\n      });\n      stack.stack(customOrderedItems, margin, true /* restack=true */);\n    }\n\n    this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n  }\n  else {\n    // no custom order function, lazy stacking\n\n    this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n\n    if (this.itemSet.options.stack) { // TODO: ugly way to access options...\n      stack.stack(this.visibleItems, margin, restack);\n    }\n    else { // no stacking\n      stack.nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups);\n    }\n  }\n\t\n  this._updateSubgroupsSizes();\n\n  // recalculate the height of the group\n  var height = this._calculateHeight(margin);\n\n  // calculate actual size and position\n  var foreground = this.dom.foreground;\n  this.top = foreground.offsetTop;\n  this.right = foreground.offsetLeft;\n  this.width = foreground.offsetWidth;\n  resized = util.updateProperty(this, 'height', height) || resized;\n  // recalculate size of label\n  resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized;\n  resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized;\n\n  // apply new height\n  this.dom.background.style.height  = height + 'px';\n  this.dom.foreground.style.height  = height + 'px';\n  this.dom.label.style.height = height + 'px';\n\n  // update vertical position of items after they are re-stacked and the height of the group is calculated\n  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {\n    var item = this.visibleItems[i];\n    item.repositionY(margin);\n    if (!this.isVisible && this.groupId != \"__background__\") {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  if (!this.isVisible && this.height) {\n    return resized = false;\n  }\n\n  return resized;\n};\n\n/**\n * recalculate the height of the subgroups\n * @private\n */\nGroup.prototype._calculateSubGroupHeights = function (margin) {\n  if (Object.keys(this.subgroups).length > 0) {\n    var me = this;\n\n    this.resetSubgroups();\n\n    util.forEach(this.visibleItems, function (item) {\n      if (item.data.subgroup !== undefined) {\n        me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical);\n        me.subgroups[item.data.subgroup].visible = true;\n      }\n    });\n  }\n};\n\n/**\n * check if group is visible\n * @private\n  */\nGroup.prototype._isGroupVisible = function (range, margin) {\n  var isVisible = \n  (this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis) \n  && (this.top + this.height + margin.axis >= - range.body.domProps.scrollTop);\n  return isVisible;\n}\n\n/**\n * recalculate the height of the group\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @returns {number} Returns the height\n * @private\n */\nGroup.prototype._calculateHeight = function (margin) {\n  // recalculate the height of the group\n  var height;\n  var itemsInRange = this.visibleItems;\n  if (itemsInRange.length > 0) {\n    var min = itemsInRange[0].top;\n    var max = itemsInRange[0].top + itemsInRange[0].height;\n    util.forEach(itemsInRange, function (item) {\n      min = Math.min(min, item.top);\n      max = Math.max(max, (item.top + item.height));\n    });\n    if (min > margin.axis) {\n      // there is an empty gap between the lowest item and the axis\n      var offset = min - margin.axis;\n      max -= offset;\n      util.forEach(itemsInRange, function (item) {\n        item.top -= offset;\n      });\n    }\n    height = max + margin.item.vertical / 2;\n  }\n  else {\n    height = 0;\n  }\n  height = Math.max(height, this.props.label.height);\n\n  return height;\n};\n\n/**\n * Show this group: attach to the DOM\n */\nGroup.prototype.show = function() {\n  if (!this.dom.label.parentNode) {\n    this.itemSet.dom.labelSet.appendChild(this.dom.label);\n  }\n\n  if (!this.dom.foreground.parentNode) {\n    this.itemSet.dom.foreground.appendChild(this.dom.foreground);\n  }\n\n  if (!this.dom.background.parentNode) {\n    this.itemSet.dom.background.appendChild(this.dom.background);\n  }\n\n  if (!this.dom.axis.parentNode) {\n    this.itemSet.dom.axis.appendChild(this.dom.axis);\n  }\n};\n\n/**\n * Hide this group: remove from the DOM\n */\nGroup.prototype.hide = function() {\n  var label = this.dom.label;\n  if (label.parentNode) {\n    label.parentNode.removeChild(label);\n  }\n\n  var foreground = this.dom.foreground;\n  if (foreground.parentNode) {\n    foreground.parentNode.removeChild(foreground);\n  }\n\n  var background = this.dom.background;\n  if (background.parentNode) {\n    background.parentNode.removeChild(background);\n  }\n\n  var axis = this.dom.axis;\n  if (axis.parentNode) {\n    axis.parentNode.removeChild(axis);\n  }\n};\n\n/**\n * Add an item to the group\n * @param {Item} item\n */\nGroup.prototype.add = function(item) {\n  this.items[item.id] = item;\n  item.setParent(this);\n\n  // add to\n  if (item.data.subgroup !== undefined) {\n    if (this.subgroups[item.data.subgroup] === undefined) {\n      this.subgroups[item.data.subgroup] = {\n        height:0, \n        top: 0,\n        start: item.data.start,\n        end: item.data.end,\n        visible: false, \n        index:this.subgroupIndex, \n        items: []\n      };\n      this.subgroupIndex++;\n    }\n\n\n    if (new Date(item.data.start) < new Date(this.subgroups[item.data.subgroup].start)) { \n      this.subgroups[item.data.subgroup].start = item.data.start; \n    }\n    if (new Date(item.data.end) > new Date(this.subgroups[item.data.subgroup].end)) { \n      this.subgroups[item.data.subgroup].end = item.data.end; \n    }\n\n    this.subgroups[item.data.subgroup].items.push(item);\n  }\n  this.orderSubgroups();\n\n  if (this.visibleItems.indexOf(item) == -1) {\n    var range = this.itemSet.body.range; // TODO: not nice accessing the range like this\n    this._checkIfVisible(item, this.visibleItems, range);\n  }\n};\n\nGroup.prototype._updateSubgroupsSizes = function () {\n  var me = this;\n  if (me.subgroups) {\n    for (var subgroup in me.subgroups) {\n      var newStart = me.subgroups[subgroup].items[0].data.start;\n      var newEnd = me.subgroups[subgroup].items[0].data.end;\n\n      me.subgroups[subgroup].items.forEach(function(item) {\n        if (new Date(item.data.start) < new Date(newStart)) { \n          newStart = item.data.start; \n        }\n        if (new Date(item.data.end) > new Date(newEnd)) { \n          newEnd = item.data.end; \n        }\n      })\n\n      me.subgroups[subgroup].start = newStart;\n      me.subgroups[subgroup].end = newEnd;\n\n    }\n  }\n}\n\nGroup.prototype.orderSubgroups = function() {\n  if (this.subgroupOrderer !== undefined) {\n    var sortArray = [];\n    if (typeof this.subgroupOrderer == 'string') {\n      for (var subgroup in this.subgroups) {\n        sortArray.push({subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]})\n      }\n      sortArray.sort(function (a, b) {\n        return a.sortField - b.sortField;\n      })\n    }\n    else if (typeof this.subgroupOrderer == 'function') {\n      for (var subgroup in this.subgroups) {\n        sortArray.push(this.subgroups[subgroup].items[0].data);\n      }\n      sortArray.sort(this.subgroupOrderer);\n    }\n\n    if (sortArray.length > 0) {\n      for (var i = 0; i < sortArray.length; i++) {\n        this.subgroups[sortArray[i].subgroup].index = i;\n      }\n    }\n  }\n};\n\nGroup.prototype.resetSubgroups = function() {\n  for (var subgroup in this.subgroups) {\n    if (this.subgroups.hasOwnProperty(subgroup)) {\n      this.subgroups[subgroup].visible = false;\n    }\n  }\n};\n\n/**\n * Remove an item from the group\n * @param {Item} item\n */\nGroup.prototype.remove = function(item) {\n  delete this.items[item.id];\n  item.setParent(null);\n\n  // remove from visible items\n  var index = this.visibleItems.indexOf(item);\n  if (index != -1) this.visibleItems.splice(index, 1);\n\n  if(item.data.subgroup !== undefined){\n    var subgroup = this.subgroups[item.data.subgroup];\n    if (subgroup){\n      var itemIndex = subgroup.items.indexOf(item);\n      subgroup.items.splice(itemIndex,1);\n      if (!subgroup.items.length){\n        delete this.subgroups[item.data.subgroup];\n        this.subgroupIndex--;\n      } else {\n        this._updateSubgroupsSizes();\n      }\n      this.orderSubgroups();\n    }\n  }\n};\n\n\n/**\n * Remove an item from the corresponding DataSet\n * @param {Item} item\n */\nGroup.prototype.removeFromDataSet = function(item) {\n  this.itemSet.removeItem(item.id);\n};\n\n\n/**\n * Reorder the items\n */\nGroup.prototype.order = function() {\n  var array = util.toArray(this.items);\n  var startArray = [];\n  var endArray = [];\n\n  for (var i = 0; i < array.length; i++) {\n    if (array[i].data.end !== undefined) {\n      endArray.push(array[i]);\n    }\n    startArray.push(array[i]);\n  }\n  this.orderedItems = {\n    byStart: startArray,\n    byEnd: endArray\n  };\n\n  stack.orderByStart(this.orderedItems.byStart);\n  stack.orderByEnd(this.orderedItems.byEnd);\n};\n\n\n/**\n * Update the visible items\n * @param {{byStart: Item[], byEnd: Item[]}} orderedItems   All items ordered by start date and by end date\n * @param {Item[]} visibleItems                             The previously visible items.\n * @param {{start: number, end: number}} range              Visible range\n * @return {Item[]} visibleItems                            The new visible items.\n * @private\n */\nGroup.prototype._updateItemsInRange = function(orderedItems, oldVisibleItems, range) {\n  var visibleItems = [];\n  var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n  var interval = (range.end - range.start) / 4;\n  var lowerBound = range.start - interval;\n  var upperBound = range.end + interval;\n\n  // this function is used to do the binary search.\n  var searchFunction = function (value) {\n    if      (value < lowerBound)  {return -1;}\n    else if (value <= upperBound) {return  0;}\n    else                          {return  1;}\n  }\n\n  // first check if the items that were in view previously are still in view.\n  // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window!\n  // also cleans up invisible items.\n  if (oldVisibleItems.length > 0) {\n    for (var i = 0; i < oldVisibleItems.length; i++) {\n      this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range);\n    }\n  }\n\n  // we do a binary search for the items that have only start values.\n  var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data','start');\n\n  // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values.\n  this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) {\n    return (item.data.start < lowerBound || item.data.start > upperBound);\n  });\n\n  // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown.\n  // We therefore have to brute force check all items in the byEnd list\n  if (this.checkRangedItems == true) {\n    this.checkRangedItems = false;\n    for (i = 0; i < orderedItems.byEnd.length; i++) {\n      this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range);\n    }\n  }\n  else {\n    // we do a binary search for the items that have defined end times.\n    var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data','end');\n\n    // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values.\n    this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) {\n      return (item.data.end < lowerBound || item.data.end > upperBound);\n    });\n  }\n\n  // finally, we reposition all the visible items.\n  for (var i = 0; i < visibleItems.length; i++) {\n    var item = visibleItems[i];\n    if (!item.displayed) item.show();\n    // reposition item horizontally\n    item.repositionX();\n  }\n  \n  return visibleItems;\n};\n\nGroup.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) {\n  if (initialPos != -1) {\n    for (var i = initialPos; i >= 0; i--) {\n      var item = items[i];\n      if (breakCondition(item)) {\n        break;\n      }\n      else {\n        if (visibleItemsLookup[item.id] === undefined) {\n          visibleItemsLookup[item.id] = true;\n          visibleItems.push(item);\n        }\n      }\n    }\n\n    for (var i = initialPos + 1; i < items.length; i++) {\n      var item = items[i];\n      if (breakCondition(item)) {\n        break;\n      }\n      else {\n        if (visibleItemsLookup[item.id] === undefined) {\n          visibleItemsLookup[item.id] = true;\n          visibleItems.push(item);\n        }\n      }\n    }\n  }\n}\n\n\n/**\n * this function is very similar to the _checkIfInvisible() but it does not\n * return booleans, hides the item if it should not be seen and always adds to\n * the visibleItems.\n * this one is for brute forcing and hiding.\n *\n * @param {Item} item\n * @param {Array} visibleItems\n * @param {{start:number, end:number}} range\n * @private\n */\nGroup.prototype._checkIfVisible = function(item, visibleItems, range) {\n    if (item.isVisible(range)) {\n      if (!item.displayed) item.show();\n      // reposition item horizontally\n      item.repositionX();\n      visibleItems.push(item);\n    }\n    else {\n      if (item.displayed) item.hide();\n    }\n};\n\n\n/**\n * this function is very similar to the _checkIfInvisible() but it does not\n * return booleans, hides the item if it should not be seen and always adds to\n * the visibleItems.\n * this one is for brute forcing and hiding.\n *\n * @param {Item} item\n * @param {Array} visibleItems\n * @param {{start:number, end:number}} range\n * @private\n */\nGroup.prototype._checkIfVisibleWithReference = function(item, visibleItems, visibleItemsLookup, range) {\n  if (item.isVisible(range)) {\n    if (visibleItemsLookup[item.id] === undefined) {\n      visibleItemsLookup[item.id] = true;\n      visibleItems.push(item);\n    }\n  }\n  else {\n    if (item.displayed) item.hide();\n  }\n};\n\n\n\nmodule.exports = Group;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Group.js","// Utility functions for ordering and stacking of items\nvar EPSILON = 0.001; // used when checking collisions, to prevent round-off errors\n\n/**\n * Order items by their start data\n * @param {Item[]} items\n */\nexports.orderByStart = function(items) {\n  items.sort(function (a, b) {\n    return a.data.start - b.data.start;\n  });\n};\n\n/**\n * Order items by their end date. If they have no end date, their start date\n * is used.\n * @param {Item[]} items\n */\nexports.orderByEnd = function(items) {\n  items.sort(function (a, b) {\n    var aTime = ('end' in a.data) ? a.data.end : a.data.start,\n        bTime = ('end' in b.data) ? b.data.end : b.data.start;\n\n    return aTime - bTime;\n  });\n};\n\n/**\n * Adjust vertical positions of the items such that they don't overlap each\n * other.\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {boolean} [force=false]\n *            If true, all items will be repositioned. If false (default), only\n *            items having a top===null will be re-stacked\n */\nexports.stack = function(items, margin, force) {\n  if (force) {\n    // reset top position of all items\n    for (var i = 0; i < items.length; i++) {\n      items[i].top = null;\n    }\n  }\n\n  // calculate new, non-overlapping positions\n  for (var i = 0; i < items.length; i++) {\n    var item = items[i];\n    if (item.stack && item.top === null) {\n      // initialize top position\n      item.top = margin.axis;\n\n      do {\n        // TODO: optimize checking for overlap. when there is a gap without items,\n        //       you only need to check for items from the next item on, not from zero\n        var collidingItem = null;\n        for (var j = 0, jj = items.length; j < jj; j++) {\n          var other = items[j];\n          if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item, other.options.rtl)) {\n            collidingItem = other;\n            break;\n          }\n        }\n\n        if (collidingItem != null) {\n          // There is a collision. Reposition the items above the colliding element\n          item.top = collidingItem.top + collidingItem.height + margin.item.vertical;\n        }\n      } while (collidingItem);\n    }\n  }\n};\n\n\n/**\n * Adjust vertical positions of the items without stacking them\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n* @param {subgroups[]} subgroups\n *            All subgroups\n */\n exports.nostack = function(items, margin, subgroups, stackSubgroups) {\n  for (var i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup == undefined) {\n      items[i].top = margin.item.vertical;\n    } else if (items[i].data.subgroup !== undefined && stackSubgroups) {\n      var newTop = 0;\n      for (var subgroup in subgroups) {\n        if (subgroups.hasOwnProperty(subgroup)) {\n          if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) {\n            newTop += subgroups[subgroup].height;\n            subgroups[items[i].data.subgroup].top = newTop;\n          }\n        }\n      }\n      items[i].top = newTop + 0.5 * margin.item.vertical;\n    }\n  }\n  if (!stackSubgroups) {\n    exports.stackSubgroups(items, margin, subgroups)\n  }\n};\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other.\n * @param {subgroups[]} subgroups\n *            All subgroups\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n */\nexports.stackSubgroups = function(items, margin, subgroups) {\n  for (var subgroup in subgroups) {\n    if (subgroups.hasOwnProperty(subgroup)) {\n\n\n      subgroups[subgroup].top = 0;\n      do {\n        // TODO: optimize checking for overlap. when there is a gap without items,\n        //       you only need to check for items from the next item on, not from zero\n        var collidingItem = null;\n        for (var otherSubgroup in subgroups) {\n          if (subgroups[otherSubgroup].top !== null && otherSubgroup !== subgroup && subgroups[subgroup].index > subgroups[otherSubgroup].index && exports.collisionByTimes(subgroups[subgroup], subgroups[otherSubgroup])) {\n            collidingItem = subgroups[otherSubgroup];\n            break;\n          }\n        }\n\n        if (collidingItem != null) {\n          // There is a collision. Reposition the subgroups above the colliding element\n          subgroups[subgroup].top = collidingItem.top + collidingItem.height;\n        }\n      } while (collidingItem);\n    }\n  }\n  for (var i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup !== undefined) {\n      items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n    }\n  }\n}\n\n/**\n * Test if the two provided items collide\n * The items must have parameters left, width, top, and height.\n * @param {Item} a          The first item\n * @param {Item} b          The second item\n * @param {{horizontal: number, vertical: number}} margin\n *                          An object containing a horizontal and vertical\n *                          minimum required margin.\n * @param {boolean} rtl\n * @return {boolean}        true if a and b collide, else false\n */\nexports.collision = function(a, b, margin, rtl) {\n  if (rtl) {\n    return  ((a.right - margin.horizontal + EPSILON)  < (b.right + b.width) &&\n    (a.right + a.width + margin.horizontal - EPSILON) > b.right &&\n    (a.top - margin.vertical + EPSILON)              < (b.top + b.height) &&\n    (a.top + a.height + margin.vertical - EPSILON)   > b.top);\n  } else {\n    return ((a.left - margin.horizontal + EPSILON)   < (b.left + b.width) &&\n    (a.left + a.width + margin.horizontal - EPSILON) > b.left &&\n    (a.top - margin.vertical + EPSILON)              < (b.top + b.height) &&\n    (a.top + a.height + margin.vertical - EPSILON)   > b.top);\n  }\n};\n\n/**\n * Test if the two provided objects collide\n * The objects must have parameters start, end, top, and height.\n * @param {Object} a          The first Object\n * @param {Object} b          The second Object\n * @return {boolean}        true if a and b collide, else false\n */\nexports.collisionByTimes = function(a, b) {\n  return (\n    (a.start <= b.start && a.end >= b.start && a.top < (b.top + b.height) && (a.top + a.height) > b.top ) ||\n    (b.start <= a.start && b.end >= a.start && b.top < (a.top + a.height) && (b.top + b.height) > a.top )\n  )\n}\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Stack.js","var Hammer = require('../../../module/hammer');\nvar Item = require('./Item');\n\n/**\n * @constructor RangeItem\n * @extends Item\n * @param {Object} data             Object containing parameters start, end\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe options\n */\nfunction RangeItem (data, conversion, options) {\n  this.props = {\n    content: {\n      width: 0\n    }\n  };\n  this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data.id);\n    }\n    if (data.end == undefined) {\n      throw new Error('Property \"end\" missing in item ' + data.id);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nRangeItem.prototype = new Item (null, null, null);\n\nRangeItem.prototype.baseClassName = 'vis-item vis-range';\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nRangeItem.prototype.isVisible = function(range) {\n  // determine visibility\n  return (this.data.start < range.end) && (this.data.end > range.start);\n};\n\n/**\n * Repaint the item\n */\nRangeItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n      // background box\n    dom.box = document.createElement('div');\n    // className is updated in redraw()\n\n    // frame box (to prevent the item contents from overflowing)\n    dom.frame = document.createElement('div');\n    dom.frame.className = 'vis-item-overflow';\n    dom.box.appendChild(dom.frame);\n  \n    // visible frame box (showing the frame that is always visible)\n    dom.visibleFrame = document.createElement('div');\n    dom.visibleFrame.className = 'vis-item-visible-frame';\n    dom.box.appendChild(dom.visibleFrame);\n\n    // contents box\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.frame.appendChild(dom.content);\n\n    // attach this item as attribute\n    dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) {\n      throw new Error('Cannot redraw item: parent has no foreground container element');\n    }\n    foreground.appendChild(dom.box);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.box);\n    this._updateStyle(this.dom.box);\n\n    var editable = (this.options.editable.updateTime || \n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className ? (' ' + this.data.className) : '') +\n        (this.selected ? ' vis-selected' : '') + \n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.box.className = this.baseClassName + className;\n\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden';\n\n    // recalculate size\n    // turn off max-width to be able to calculate the real width\n    // this causes an extra browser repaint/reflow, but so be it\n    this.dom.content.style.maxWidth = 'none';\n    this.props.content.width = this.dom.content.offsetWidth;\n    this.height = this.dom.box.offsetHeight;\n    this.dom.content.style.maxWidth = '';\n\n    this.dirty = false;\n  }\n\n  this._repaintOnItemUpdateTimeTooltip(dom.box);\n  this._repaintDeleteButton(dom.box);\n  this._repaintDragCenter();\n  this._repaintDragLeft();\n  this._repaintDragRight();\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nRangeItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nRangeItem.prototype.hide = function() {\n  if (this.displayed) {\n    var box = this.dom.box;\n\n    if (box.parentNode) {\n      box.parentNode.removeChild(box);\n    }\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @param {boolean} [limitSize=true] If true (default), the width of the range\n *                                   item will be limited, as the browser cannot\n *                                   display very wide divs. This means though\n *                                   that the applied left and width may\n *                                   not correspond to the ranges start and end\n * @Override\n */\nRangeItem.prototype.repositionX = function(limitSize) {\n  var parentWidth = this.parent.width;\n  var start = this.conversion.toScreen(this.data.start);\n  var end = this.conversion.toScreen(this.data.end);\n  var contentStartPosition;\n  var contentWidth;\n\n  // limit the width of the range, as browsers cannot draw very wide divs\n  if (limitSize === undefined || limitSize === true) {\n    if (start < -parentWidth) {\n      start = -parentWidth;\n    }\n    if (end > 2 * parentWidth) {\n      end = 2 * parentWidth;\n    }\n  }\n\n  // add 0.5 to compensate floating-point values rounding\n  var boxWidth = Math.max(end - start + 0.5, 1);\n\n  if (this.overflow) {\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n    this.width = boxWidth + this.props.content.width;\n    contentWidth = this.props.content.width;\n\n    // Note: The calculation of width is an optimistic calculation, giving\n    //       a width which will not change when moving the Timeline\n    //       So no re-stacking needed, which is nicer for the eye;\n  }\n  else {\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n    this.width = boxWidth;\n    contentWidth = Math.min(end - start, this.props.content.width);\n  }\n\n  if (this.options.rtl) {\n    this.dom.box.style.right = this.right + 'px';\n  } else {\n    this.dom.box.style.left = this.left + 'px'; \n  }\n  this.dom.box.style.width = boxWidth + 'px';\n\n  switch (this.options.align) {\n    case 'left':\n      if (this.options.rtl) {\n        this.dom.content.style.right = '0';\n      } else {\n        this.dom.content.style.left = '0';\n      }\n      break;\n\n    case 'right':\n      if (this.options.rtl) {\n        this.dom.content.style.right = Math.max((boxWidth - contentWidth), 0) + 'px';\n      } else {\n        this.dom.content.style.left = Math.max((boxWidth - contentWidth), 0) + 'px';\n      }\n      break;\n\n    case 'center':\n      if (this.options.rtl) {\n        this.dom.content.style.right = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';\n      } else {\n        this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';\n      }\n      \n      break;\n\n    default: // 'auto'\n      // when range exceeds left of the window, position the contents at the left of the visible area\n      if (this.overflow) {\n        if (end > 0) {\n          contentStartPosition = Math.max(-start, 0);\n        }\n        else {\n          contentStartPosition = -contentWidth; // ensure it's not visible anymore\n        }\n      }\n      else {\n        if (start < 0) {\n          contentStartPosition = -start;\n        }\n        else {\n          contentStartPosition = 0;\n        }\n      }\n      if (this.options.rtl) {\n        this.dom.content.style.right = contentStartPosition + 'px';\n      } else {\n        this.dom.content.style.left = contentStartPosition + 'px';\n        this.dom.content.style.width = 'calc(100% - ' + contentStartPosition + 'px)';\n      }\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nRangeItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var box = this.dom.box;\n\n  if (orientation == 'top') {\n    box.style.top = this.top + 'px';\n  }\n  else {\n    box.style.top = (this.parent.height - this.top - this.height) + 'px';\n  }\n};\n\n/**\n * Repaint a drag area on the left side of the range when the range is selected\n * @protected\n */\nRangeItem.prototype._repaintDragLeft = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) {\n    // create and show drag area\n    var dragLeft = document.createElement('div');\n    dragLeft.className = 'vis-drag-left';\n    dragLeft.dragLeftItem = this;\n\n    this.dom.box.appendChild(dragLeft);\n    this.dom.dragLeft = dragLeft;\n  }\n  else if (!this.selected && this.dom.dragLeft) {\n    // delete drag area\n    if (this.dom.dragLeft.parentNode) {\n      this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);\n    }\n    this.dom.dragLeft = null;\n  }\n};\n\n/**\n * Repaint a drag area on the right side of the range when the range is selected\n * @protected\n */\nRangeItem.prototype._repaintDragRight = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) {\n    // create and show drag area\n    var dragRight = document.createElement('div');\n    dragRight.className = 'vis-drag-right';\n    dragRight.dragRightItem = this;\n\n    this.dom.box.appendChild(dragRight);\n    this.dom.dragRight = dragRight;\n  }\n  else if (!this.selected && this.dom.dragRight) {\n    // delete drag area\n    if (this.dom.dragRight.parentNode) {\n      this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);\n    }\n    this.dom.dragRight = null;\n  }\n};\n\nmodule.exports = RangeItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/RangeItem.js","var Hammer = require('../../../module/hammer');\nvar util = require('../../../util');\nvar moment = require('../../../module/moment');\n\n\n/**\n * @constructor Item\n * @param {Object} data             Object containing (optional) parameters type,\n *                                  start, end, content, group, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} options          Configuration options\n *                                  // TODO: describe available options\n */\nfunction Item (data, conversion, options) {\n  this.id = null;\n  this.parent = null;\n  this.data = data;\n  this.dom = null;\n  this.conversion = conversion || {};\n  this.options = options || {};  \n  this.selected = false;\n  this.displayed = false;\n  this.groupShowing = true;\n  this.dirty = true;\n  this.popup = null;\n\n  this.top = null;\n  this.right = null;\n  this.left = null;\n  this.width = null;\n  this.height = null;\n\n  this.editable = null;\n  if (this.data && this.data.hasOwnProperty('editable')){\n    if(typeof this.data.editable === 'boolean') {\n        this.editable = {\n          updateTime: this.data.editable,\n          updateGroup: this.data.editable,\n          remove: this.data.editable\n        }\n    }\n    else if(typeof options.editable === 'object') {\n      this.editable = {};\n      util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, data.editable);\n    };\n  }\n}\n\nItem.prototype.stack = true;\n\n/**\n * Select current item\n */\nItem.prototype.select = function() {\n  this.selected = true;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Unselect current item\n */\nItem.prototype.unselect = function() {\n  this.selected = false;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Set data for the item. Existing data will be updated. The id should not\n * be changed. When the item is displayed, it will be redrawn immediately.\n * @param {Object} data\n */\nItem.prototype.setData = function(data) {\n  var groupChanged = data.group != undefined && this.data.group != data.group;\n  if (groupChanged) {\n    this.parent.itemSet._moveToGroup(this, data.group);\n  }\n\n  if (data.hasOwnProperty('editable')){\n    if (typeof data.editable === 'boolean') {\n      this.editable = {\n        updateTime: this.data.editable,\n        updateGroup: this.data.editable,\n        remove: this.data.editable\n      }\n    }\n    else if(typeof options.editable === 'object') {\n      this.editable = {};\n      util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, data.editable);\n    }\n  }\n\n  this.data = data;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Set a parent for the item\n * @param {ItemSet | Group} parent\n */\nItem.prototype.setParent = function(parent) {\n  if (this.displayed) {\n    this.hide();\n    this.parent = parent;\n    if (this.parent) {\n      this.show();\n    }\n  }\n  else {\n    this.parent = parent;\n  }\n};\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nItem.prototype.isVisible = function(range) {\n  return false;\n};\n\n/**\n * Show the Item in the DOM (when not already visible)\n * @return {Boolean} changed\n */\nItem.prototype.show = function() {\n  return false;\n};\n\n/**\n * Hide the Item from the DOM (when visible)\n * @return {Boolean} changed\n */\nItem.prototype.hide = function() {\n  return false;\n};\n\n/**\n * Repaint the item\n */\nItem.prototype.redraw = function() {\n  // should be implemented by the item\n};\n\n/**\n * Reposition the Item horizontally\n */\nItem.prototype.repositionX = function() {\n  // should be implemented by the item\n};\n\n/**\n * Reposition the Item vertically\n */\nItem.prototype.repositionY = function() {\n  // should be implemented by the item\n};\n\n/**\n * Repaint a drag area on the center of the item when the item is selected\n * @protected\n */\nItem.prototype._repaintDragCenter = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) {\n    var me = this;\n\n    // create and show drag area\n    var dragCenter = document.createElement('div');\n    dragCenter.className = 'vis-drag-center';\n    dragCenter.dragCenterItem = this;\n\n    new Hammer(dragCenter).on('doubletap', function (event) {\n      event.stopPropagation();\n      me.parent.itemSet._onUpdateItem(me);\n    });\n\n    if (this.dom.box) {\n      this.dom.box.appendChild(dragCenter);\n    } \n    else if (this.dom.point) {\n      this.dom.point.appendChild(dragCenter);\n    }\n    \n    this.dom.dragCenter = dragCenter;\n  }\n  else if (!this.selected && this.dom.dragCenter) {\n    // delete drag area\n    if (this.dom.dragCenter.parentNode) {\n      this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter);\n    }\n    this.dom.dragCenter = null;\n  }\n};\n\n/**\n * Repaint a delete button on the top right of the item when the item is selected\n * @param {HTMLElement} anchor\n * @protected\n */\nItem.prototype._repaintDeleteButton = function (anchor) {\n  var editable = ((this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove) ||\n                 (!this.options.editable.overrideItems && this.editable != null && this.editable.remove);\n\n  if (this.selected && editable && !this.dom.deleteButton) {\n    // create and show button\n    var me = this;\n\n    var deleteButton = document.createElement('div');\n\n    if (this.options.rtl) {\n      deleteButton.className = 'vis-delete-rtl';\n    } else {\n      deleteButton.className = 'vis-delete';\n    }\n    deleteButton.title = 'Delete this item';\n\n    // TODO: be able to destroy the delete button\n    new Hammer(deleteButton).on('tap', function (event) {\n      event.stopPropagation();\n      me.parent.removeFromDataSet(me);\n    });\n\n    anchor.appendChild(deleteButton);\n    this.dom.deleteButton = deleteButton;\n  }\n  else if (!this.selected && this.dom.deleteButton) {\n    // remove button\n    if (this.dom.deleteButton.parentNode) {\n      this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);\n    }\n    this.dom.deleteButton = null;\n  }\n};\n\n/**\n * Repaint a onChange tooltip on the top right of the item when the item is selected\n * @param {HTMLElement} anchor\n * @protected\n */\nItem.prototype._repaintOnItemUpdateTimeTooltip = function (anchor) {\n  if (!this.options.tooltipOnItemUpdateTime) return;\n\n  var editable = (this.options.editable.updateTime || \n                  this.data.editable === true) &&\n                 this.data.editable !== false;\n\n  if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) {\n    // create and show tooltip\n    var me = this;\n\n    var onItemUpdateTimeTooltip = document.createElement('div');\n\n    onItemUpdateTimeTooltip.className = 'vis-onUpdateTime-tooltip';\n    anchor.appendChild(onItemUpdateTimeTooltip);\n    this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip;\n\n  } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) {\n    // remove button\n    if (this.dom.onItemUpdateTimeTooltip.parentNode) {\n      this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip);\n    }\n    this.dom.onItemUpdateTimeTooltip = null;\n  }\n\n  // position onChange tooltip\n  if (this.dom.onItemUpdateTimeTooltip) {\n\n    // only show when editing\n    this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? 'visible' : 'hidden';\n    \n    // position relative to item's content\n    if (this.options.rtl) {\n      this.dom.onItemUpdateTimeTooltip.style.right = this.dom.content.style.right;\n    } else {\n      this.dom.onItemUpdateTimeTooltip.style.left = this.dom.content.style.left;\n    }\n\n    // position above or below the item depending on the item's position in the window\n    var tooltipOffset = 50; // TODO: should be tooltip height (depends on template)\n    var scrollTop = this.parent.itemSet.body.domProps.scrollTop;\n\n      // TODO: this.top for orientation:true is actually the items distance from the bottom... \n      // (should be this.bottom)\n    var itemDistanceFromTop \n    if (this.options.orientation.item == 'top') {\n      itemDistanceFromTop = this.top;\n    } else {\n      itemDistanceFromTop = (this.parent.height - this.top - this.height)\n    }\n    var isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop;\n\n    if (isCloseToTop) {\n      this.dom.onItemUpdateTimeTooltip.style.bottom = \"\";\n      this.dom.onItemUpdateTimeTooltip.style.top = this.height + 2 + \"px\";\n    } else {\n      this.dom.onItemUpdateTimeTooltip.style.top = \"\";\n      this.dom.onItemUpdateTimeTooltip.style.bottom = this.height + 2 + \"px\";\n    }\n    \n    // handle tooltip content\n    var content;\n    var templateFunction;\n\n    if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) {\n      templateFunction = this.options.tooltipOnItemUpdateTime.template.bind(this);\n      content = templateFunction(this.data);\n    } else {\n      content = 'start: ' + moment(this.data.start).format('MM/DD/YYYY hh:mm');\n      if (this.data.end) { \n        content += '<br> end: ' + moment(this.data.end).format('MM/DD/YYYY hh:mm');\n      }\n    }\n    this.dom.onItemUpdateTimeTooltip.innerHTML = content;\n  }\n};\n\n\n/**\n * Set HTML contents for the item\n * @param {Element} element   HTML element to fill with the contents\n * @private\n */\nItem.prototype._updateContents = function (element) {\n  var content;\n  var templateFunction;\n  var itemVisibleFrameContent;\n  var visibleFrameTemplateFunction; \n  var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset\n\n  var frameElement = this.dom.box || this.dom.point;\n  var itemVisibleFrameContentElement = frameElement.getElementsByClassName('vis-item-visible-frame')[0]\n\n  if (this.options.visibleFrameTemplate) {\n    visibleFrameTemplateFunction = this.options.visibleFrameTemplate.bind(this);\n    itemVisibleFrameContent = visibleFrameTemplateFunction(itemData, frameElement);\n  } else {\n    itemVisibleFrameContent = '';\n  }\n  \n  if (itemVisibleFrameContentElement) {\n    if ((itemVisibleFrameContent instanceof Object) && !(itemVisibleFrameContent instanceof Element)) {\n      visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement)\n    } else {\n       var changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent);\n       if (changed) {\n        // only replace the content when changed\n        if (itemVisibleFrameContent instanceof Element) {\n          itemVisibleFrameContentElement.innerHTML = '';\n          itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent);\n        }\n        else if (itemVisibleFrameContent != undefined) {\n          itemVisibleFrameContentElement.innerHTML = itemVisibleFrameContent;\n        }\n        else {\n          if (!(this.data.type == 'background' && this.data.content === undefined)) {\n            throw new Error('Property \"content\" missing in item ' + this.id);\n          }\n        }\n\n        this.itemVisibleFrameContent = itemVisibleFrameContent;\n       }\n    }\n  }\n\n  if (this.options.template) {\n    templateFunction = this.options.template.bind(this);\n    content = templateFunction(itemData, element);\n  } else {\n    content = this.data.content;\n  }\n\n  if ((content instanceof Object) && !(content instanceof Element)) {\n    templateFunction(itemData, element)\n  } else {\n    var changed = this._contentToString(this.content) !== this._contentToString(content);\n    if (changed) {\n      // only replace the content when changed\n      if (content instanceof Element) {\n        element.innerHTML = '';\n        element.appendChild(content);\n      }\n      else if (content != undefined) {\n        element.innerHTML = content;\n      }\n      else {\n        if (!(this.data.type == 'background' && this.data.content === undefined)) {\n          throw new Error('Property \"content\" missing in item ' + this.id);\n        }\n      }\n\n      this.content = content;\n    }\n  }\n};\n\n/**\n * Set HTML contents for the item\n * @private\n */\nItem.prototype._updateTitle = function () {\n  if (this.data.title != null) {\n    if (this.popup != null) {\n      this.popup.setText(this.data.title || '');\n    }\n  }\n};\n\n/**\n * Process dataAttributes timeline option and set as data- attributes on dom.content\n * @param {Element} element   HTML element to which the attributes will be attached\n * @private\n */\n Item.prototype._updateDataAttributes = function(element) {\n  if (this.options.dataAttributes && this.options.dataAttributes.length > 0) {\n    var attributes = [];\n\n    if (Array.isArray(this.options.dataAttributes)) {\n      attributes = this.options.dataAttributes;\n    }\n    else if (this.options.dataAttributes == 'all') {\n      attributes = Object.keys(this.data);\n    }\n    else {\n      return;\n    }\n\n    for (var i = 0; i < attributes.length; i++) {\n      var name = attributes[i];\n      var value = this.data[name];\n\n      if (value != null) {\n        element.setAttribute('data-' + name, value);\n      }\n      else {\n        element.removeAttribute('data-' + name);\n      }\n    }\n  }\n};\n\n/**\n * Update custom styles of the element\n * @param element\n * @private\n */\nItem.prototype._updateStyle = function(element) {\n  // remove old styles\n  if (this.style) {\n    util.removeCssText(element, this.style);\n    this.style = null;\n  }\n\n  // append new styles\n  if (this.data.style) {\n    util.addCssText(element, this.data.style);\n    this.style = this.data.style;\n  }\n};\n\n\n/**\n * Stringify the items contents\n * @param {string | Element | undefined} content\n * @returns {string | undefined}\n * @private\n */\nItem.prototype._contentToString = function (content) {\n  if (typeof content === 'string') return content;\n  if (content && 'outerHTML' in content) return content.outerHTML;\n  return content;\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nItem.prototype.getWidthLeft = function () {\n  return 0;\n};\n\n/**\n * Return the width of the item right from the max of its start and end date\n * @return {number}\n */\nItem.prototype.getWidthRight = function () {\n  return 0;\n};\n\n/**\n * Return the title of the item\n * @return {string | undefined}\n */\nItem.prototype.getTitle = function () {\n  return this.data.title;\n};\n\n/**\n * Set the popup object, and update the title\n * @param {Popup} popup\n */\nItem.prototype.setPopup = function (popup) {\n  this.popup = popup;\n  this._updateTitle();\n};\n\nmodule.exports = Item;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/Item.js","var util = require('../../util');\nvar Group = require('./Group');\n\n/**\n * @constructor BackgroundGroup\n * @param {Number | String} groupId\n * @param {Object} data\n * @param {ItemSet} itemSet\n */\nfunction BackgroundGroup (groupId, data, itemSet) {\n  Group.call(this, groupId, data, itemSet);\n\n  this.width = 0;\n  this.height = 0;\n  this.top = 0;\n  this.left = 0;\n}\n\nBackgroundGroup.prototype = Object.create(Group.prototype);\n\n/**\n * Repaint this group\n * @param {{start: number, end: number}} range\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @param {boolean} [restack=false]  Force restacking of all items\n * @return {boolean} Returns true if the group is resized\n */\nBackgroundGroup.prototype.redraw = function(range, margin, restack) {\n  var resized = false;\n\n  this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n\n  // calculate actual size\n  this.width = this.dom.background.offsetWidth;\n\n  // apply new height (just always zero for BackgroundGroup\n  this.dom.background.style.height  = '0';\n\n  // update vertical position of items after they are re-stacked and the height of the group is calculated\n  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {\n    var item = this.visibleItems[i];\n    item.repositionY(margin);\n  }\n\n  return resized;\n};\n\n/**\n * Show this group: attach to the DOM\n */\nBackgroundGroup.prototype.show = function() {\n  if (!this.dom.background.parentNode) {\n    this.itemSet.dom.background.appendChild(this.dom.background);\n  }\n};\n\nmodule.exports = BackgroundGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/BackgroundGroup.js","var Item = require('./Item');\nvar util = require('../../../util');\n\n/**\n * @constructor BoxItem\n * @extends Item\n * @param {Object} data             Object containing parameters start\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe available options\n */\nfunction BoxItem (data, conversion, options) {\n  this.props = {\n    dot: {\n      width: 0,\n      height: 0\n    },\n    line: {\n      width: 0,\n      height: 0\n    }\n  };\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nBoxItem.prototype = new Item (null, null, null);\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nBoxItem.prototype.isVisible = function(range) {\n  // determine visibility\n  var isVisible;\n  var align = this.options.align;\n  var msPerPixel = (range.end - range.start) / range.body.dom.center.clientWidth;\n  var widthInMs = this.width * msPerPixel;\n\n  if (align == 'right') {\n    isVisible = (this.data.start.getTime() > range.start ) && (this.data.start.getTime() - widthInMs < range.end);\n  }\n  else if (align == 'left') {\n    isVisible = (this.data.start.getTime() + widthInMs > range.start ) && (this.data.start.getTime() < range.end);\n  }\n  else {\n    // default or 'center'\n    isVisible = (this.data.start.getTime() + widthInMs/2 > range.start ) && (this.data.start.getTime() - widthInMs/2 < range.end);\n  }\n  return isVisible;\n};\n\n/**\n * Repaint the item\n */\nBoxItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // create main box\n    dom.box = document.createElement('DIV');\n\n    // contents box (inside the background box). used for making margins\n    dom.content = document.createElement('DIV');\n    dom.content.className = 'vis-item-content';\n    dom.box.appendChild(dom.content);\n\n    // line to axis\n    dom.line = document.createElement('DIV');\n    dom.line.className = 'vis-line';\n\n    // dot on axis\n    dom.dot = document.createElement('DIV');\n    dom.dot.className = 'vis-dot';\n\n    // attach this item as attribute\n    dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element');\n    foreground.appendChild(dom.box);\n  }\n  if (!dom.line.parentNode) {\n    var background = this.parent.dom.background;\n    if (!background) throw new Error('Cannot redraw item: parent has no background container element');\n    background.appendChild(dom.line);\n  }\n  if (!dom.dot.parentNode) {\n    var axis = this.parent.dom.axis;\n    if (!background) throw new Error('Cannot redraw item: parent has no axis container element');\n    axis.appendChild(dom.dot);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.box);\n    this._updateStyle(this.dom.box);\n\n    var editable = (this.options.editable.updateTime ||\n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className? ' ' + this.data.className : '') +\n        (this.selected ? ' vis-selected' : '') +\n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.box.className = 'vis-item vis-box' + className;\n    dom.line.className = 'vis-item vis-line' + className;\n    dom.dot.className  = 'vis-item vis-dot' + className;\n\n    // set initial position in the visible range of the grid so that the\n    // rendered box size can be determinated correctly, even the content\n    // has a dynamic width (fixes #2032).\n    var previousRight = dom.box.style.right;\n    var previousLeft = dom.box.style.left;\n    if (this.options.rtl) {\n      dom.box.style.right = \"0px\";\n    } else {\n      dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    this.props.dot.height = dom.dot.offsetHeight;\n    this.props.dot.width = dom.dot.offsetWidth;\n    this.props.line.width = dom.line.offsetWidth;\n    this.width = dom.box.offsetWidth;\n    this.height = dom.box.offsetHeight;\n\n    // restore previous position\n    if (this.options.rtl) {\n      dom.box.style.right = previousRight;\n    } else {\n      dom.box.style.left = previousLeft;\n    }\n\n    this.dirty = false;\n  }\n\n  this._repaintOnItemUpdateTimeTooltip(dom.box);\n  this._repaintDragCenter();\n  this._repaintDeleteButton(dom.box);\n};\n\n/**\n * Show the item in the DOM (when not already displayed). The items DOM will\n * be created when needed.\n */\nBoxItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n */\nBoxItem.prototype.hide = function() {\n  if (this.displayed) {\n    var dom = this.dom;\n\n    if (dom.box.parentNode)   dom.box.parentNode.removeChild(dom.box);\n    if (dom.line.parentNode)  dom.line.parentNode.removeChild(dom.line);\n    if (dom.dot.parentNode)   dom.dot.parentNode.removeChild(dom.dot);\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBoxItem.prototype.repositionX = function() {\n  var start = this.conversion.toScreen(this.data.start);\n  var align = this.options.align;\n\n  // calculate left position of the box\n  if (align == 'right') {\n    if (this.options.rtl) {\n      this.right = start - this.width;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.right = (start - this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start - this.width;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.left = (start - this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    }\n  }\n  else if (align == 'left') {\n    if (this.options.rtl) {\n      this.right = start;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = start + 'px';\n      this.dom.dot.style.right = (start + this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = start + 'px';\n      this.dom.dot.style.left = (start + this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    }\n  }\n  else {\n    // default or 'center'\n    if (this.options.rtl) {\n      this.right = start - this.width / 2;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.right = (start - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start - this.width / 2;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = (start - this.props.line.width / 2) + 'px';\n      this.dom.dot.style.left = (start - this.props.dot.width / 2) + 'px';\n    }\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nBoxItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var box = this.dom.box;\n  var line = this.dom.line;\n  var dot = this.dom.dot;\n\n  if (orientation == 'top') {\n    box.style.top     = (this.top || 0) + 'px';\n\n    line.style.top    = '0';\n    line.style.height = (this.parent.top + this.top + 1) + 'px';\n    line.style.bottom = '';\n  }\n  else { // orientation 'bottom'\n    var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty\n    var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;\n\n    box.style.top     = (this.parent.height - this.top - this.height || 0) + 'px';\n    line.style.top    = (itemSetHeight - lineHeight) + 'px';\n    line.style.bottom = '0';\n  }\n\n  dot.style.top = (-this.props.dot.height / 2) + 'px';\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nBoxItem.prototype.getWidthLeft = function () {\n  return this.width / 2;\n};\n\n/**\n * Return the width of the item right from its start date\n * @return {number}\n */\nBoxItem.prototype.getWidthRight = function () {\n  return this.width / 2;\n};\n\nmodule.exports = BoxItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/BoxItem.js","var Item = require('./Item');\n\n/**\n * @constructor PointItem\n * @extends Item\n * @param {Object} data             Object containing parameters start\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe available options\n */\nfunction PointItem (data, conversion, options) {\n  this.props = {\n    dot: {\n      top: 0,\n      width: 0,\n      height: 0\n    },\n    content: {\n      height: 0,\n      marginLeft: 0,\n      marginRight: 0\n    }\n  };\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nPointItem.prototype = new Item (null, null, null);\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nPointItem.prototype.isVisible = function(range) {\n  // determine visibility\n  var msPerPixel = (range.end - range.start) / range.body.dom.center.clientWidth;\n  var widthInMs = this.width * msPerPixel;\n  \n  return (this.data.start.getTime() + widthInMs > range.start ) && (this.data.start < range.end);\n};\n\n/**\n * Repaint the item\n */\nPointItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // background box\n    dom.point = document.createElement('div');\n    // className is updated in redraw()\n\n    // contents box, right from the dot\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.point.appendChild(dom.content);\n\n    // dot at start\n    dom.dot = document.createElement('div');\n    dom.point.appendChild(dom.dot);\n\n    // attach this item as attribute\n    dom.point['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.point.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) {\n      throw new Error('Cannot redraw item: parent has no foreground container element');\n    }\n    foreground.appendChild(dom.point);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.point);\n    this._updateStyle(this.dom.point);\n\n    var editable = (this.options.editable.updateTime || \n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className ? ' ' + this.data.className : '') +\n        (this.selected ? ' vis-selected' : '') +\n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.point.className  = 'vis-item vis-point' + className;\n    dom.dot.className  = 'vis-item vis-dot' + className;\n\n    // recalculate size of dot and contents\n    this.props.dot.width = dom.dot.offsetWidth;\n    this.props.dot.height = dom.dot.offsetHeight;\n    this.props.content.height = dom.content.offsetHeight;\n\n    // resize contents\n    if (this.options.rtl) {\n      dom.content.style.marginRight = 2 * this.props.dot.width + 'px';\n    } else {\n      dom.content.style.marginLeft = 2 * this.props.dot.width + 'px';\n    }\n    //dom.content.style.marginRight = ... + 'px'; // TODO: margin right\n\n    // recalculate size\n    this.width = dom.point.offsetWidth;\n    this.height = dom.point.offsetHeight;\n\n    // reposition the dot\n    dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px';\n    if (this.options.rtl) {\n      dom.dot.style.right = (this.props.dot.width / 2) + 'px';\n    } else {\n      dom.dot.style.left = (this.props.dot.width / 2) + 'px';\n    }\n\n    this.dirty = false;\n  }\n  \n  this._repaintOnItemUpdateTimeTooltip(dom.point);\n  this._repaintDragCenter();\n  this._repaintDeleteButton(dom.point);\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nPointItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n */\nPointItem.prototype.hide = function() {\n  if (this.displayed) {\n    if (this.dom.point.parentNode) {\n      this.dom.point.parentNode.removeChild(this.dom.point);\n    }\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nPointItem.prototype.repositionX = function() {\n  var start = this.conversion.toScreen(this.data.start);\n\n  if (this.options.rtl) {\n    this.right = start - this.props.dot.width;\n\n    // reposition point\n    this.dom.point.style.right = this.right + 'px';\n  } else {\n    this.left = start - this.props.dot.width;\n\n    // reposition point\n    this.dom.point.style.left = this.left + 'px';\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nPointItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var point = this.dom.point;\n  if (orientation == 'top') {\n    point.style.top = this.top + 'px';\n  }\n  else {\n    point.style.top = (this.parent.height - this.top - this.height) + 'px';\n  }\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nPointItem.prototype.getWidthLeft = function () {\n  return this.props.dot.width;\n};\n\n/**\n * Return the width of the item right from  its start date\n * @return {number}\n */\nPointItem.prototype.getWidthRight = function () {\n  return this.props.dot.width;\n};\n\nmodule.exports = PointItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/PointItem.js","var Hammer = require('../../../module/hammer');\nvar Item = require('./Item');\nvar BackgroundGroup = require('../BackgroundGroup');\nvar RangeItem = require('./RangeItem');\n\n/**\n * @constructor BackgroundItem\n * @extends Item\n * @param {Object} data             Object containing parameters start, end\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe options\n */\n// TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation\nfunction BackgroundItem (data, conversion, options) {\n  this.props = {\n    content: {\n      width: 0\n    }\n  };\n  this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data.id);\n    }\n    if (data.end == undefined) {\n      throw new Error('Property \"end\" missing in item ' + data.id);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nBackgroundItem.prototype = new Item (null, null, null);\n\nBackgroundItem.prototype.baseClassName = 'vis-item vis-background';\nBackgroundItem.prototype.stack = false;\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nBackgroundItem.prototype.isVisible = function(range) {\n  // determine visibility\n  return (this.data.start < range.end) && (this.data.end > range.start); \n};\n\n/**\n * Repaint the item\n */\nBackgroundItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // background box\n    dom.box = document.createElement('div');\n    // className is updated in redraw()\n\n    // frame box (to prevent the item contents from overflowing\n    dom.frame = document.createElement('div');\n    dom.frame.className = 'vis-item-overflow';\n    dom.box.appendChild(dom.frame);\n\n    // contents box\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.frame.appendChild(dom.content);\n\n    // Note: we do NOT attach this item as attribute to the DOM,\n    //       such that background items cannot be selected\n    //dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var background = this.parent.dom.background;\n    if (!background) {\n      throw new Error('Cannot redraw item: parent has no background container element');\n    }\n    background.appendChild(dom.box);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.content);\n    this._updateStyle(this.dom.box);\n\n    // update class\n    var className = (this.data.className ? (' ' + this.data.className) : '') +\n        (this.selected ? ' vis-selected' : '');\n    dom.box.className = this.baseClassName + className;\n\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden';\n\n    // recalculate size\n    this.props.content.width = this.dom.content.offsetWidth;\n    this.height = 0; // set height zero, so this item will be ignored when stacking items\n\n    this.dirty = false;\n  }\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nBackgroundItem.prototype.show = RangeItem.prototype.show;\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nBackgroundItem.prototype.hide = RangeItem.prototype.hide;\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX;\n\n/**\n * Reposition the item vertically\n * @Override\n */\nBackgroundItem.prototype.repositionY = function(margin) {\n  var height;\n\n  // special positioning for subgroups\n  if (this.data.subgroup !== undefined) {\n    // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset\n\n    var itemSubgroup = this.data.subgroup;\n    var subgroups = this.parent.subgroups;\n    var subgroupIndex = subgroups[itemSubgroup].index;\n\n    this.dom.box.style.height = this.parent.subgroups[itemSubgroup].height + 'px';\n\n    var orientation = this.options.orientation.item;\n    if (orientation == 'top') { \n      this.dom.box.style.top = this.parent.top + this.parent.subgroups[itemSubgroup].top + 'px';\n    } else {\n      this.dom.box.style.top = (this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height) + 'px';\n    }\n    this.dom.box.style.bottom = '';\n  }\n  // and in the case of no subgroups:\n  else {\n    // we want backgrounds with groups to only show in groups.\n    if (this.parent instanceof BackgroundGroup) {\n      // if the item is not in a group:\n      height = Math.max(this.parent.height,\n          this.parent.itemSet.body.domProps.center.height,\n          this.parent.itemSet.body.domProps.centerContainer.height);\n      this.dom.box.style.top = orientation == 'top' ? '0' : '';\n      this.dom.box.style.bottom = orientation == 'top' ? '' : '0';\n    }\n    else {\n      height = this.parent.height;\n      // same alignment for items when orientation is top or bottom\n      this.dom.box.style.top = this.parent.top + 'px';\n      this.dom.box.style.bottom = '';\n    }\n  }\n  this.dom.box.style.height = height + 'px';\n};\n\nmodule.exports = BackgroundItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/BackgroundItem.js","var util = require('../../util');\nvar Component = require('./Component');\nvar TimeStep = require('../TimeStep');\nvar DateUtil = require('../DateUtil');\nvar moment = require('../../module/moment');\n\n/**\n * A horizontal time axis\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n * @param {Object} [options]        See TimeAxis.setOptions for the available\n *                                  options.\n * @constructor TimeAxis\n * @extends Component\n */\nfunction TimeAxis (body, options) {\n  this.dom = {\n    foreground: null,\n    lines: [],\n    majorTexts: [],\n    minorTexts: [],\n    redundant: {\n      lines: [],\n      majorTexts: [],\n      minorTexts: []\n    }\n  };\n  this.props = {\n    range: {\n      start: 0,\n      end: 0,\n      minimumStep: 0\n    },\n    lineTop: 0\n  };\n\n  this.defaultOptions = {\n    orientation: {\n      axis: 'bottom'\n    },  // axis orientation: 'top' or 'bottom'\n    showMinorLabels: true,\n    showMajorLabels: true,\n    maxMinorChars: 7,\n    format: TimeStep.FORMAT,\n    moment: moment,\n    timeAxis: null\n  };\n  this.options = util.extend({}, this.defaultOptions);\n\n  this.body = body;\n\n  // create the HTML DOM\n  this._create();\n\n  this.setOptions(options);\n}\n\nTimeAxis.prototype = new Component();\n\n/**\n * Set options for the TimeAxis.\n * Parameters will be merged in current options.\n * @param {Object} options  Available options:\n *                          {string} [orientation.axis]\n *                          {boolean} [showMinorLabels]\n *                          {boolean} [showMajorLabels]\n */\nTimeAxis.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend([\n      'showMinorLabels',\n      'showMajorLabels',\n      'maxMinorChars',\n      'hiddenDates',\n      'timeAxis',\n      'moment',\n      'rtl'\n    ], this.options, options);\n\n    // deep copy the format options\n    util.selectiveDeepExtend(['format'], this.options, options);\n\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation.axis = options.orientation;\n      }\n      else if (typeof options.orientation === 'object' && 'axis' in options.orientation) {\n        this.options.orientation.axis = options.orientation.axis;\n      }\n    }\n\n    // apply locale to moment.js\n    // TODO: not so nice, this is applied globally to moment.js\n    if ('locale' in options) {\n      if (typeof moment.locale === 'function') {\n        // moment.js 2.8.1+\n        moment.locale(options.locale);\n      }\n      else {\n        moment.lang(options.locale);\n      }\n    }\n  }\n};\n\n/**\n * Create the HTML DOM for the TimeAxis\n */\nTimeAxis.prototype._create = function() {\n  this.dom.foreground = document.createElement('div');\n  this.dom.background = document.createElement('div');\n\n  this.dom.foreground.className = 'vis-time-axis vis-foreground';\n  this.dom.background.className = 'vis-time-axis vis-background';\n};\n\n/**\n * Destroy the TimeAxis\n */\nTimeAxis.prototype.destroy = function() {\n  // remove from DOM\n  if (this.dom.foreground.parentNode) {\n    this.dom.foreground.parentNode.removeChild(this.dom.foreground);\n  }\n  if (this.dom.background.parentNode) {\n    this.dom.background.parentNode.removeChild(this.dom.background);\n  }\n\n  this.body = null;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nTimeAxis.prototype.redraw = function () {\n  var props = this.props;\n  var foreground = this.dom.foreground;\n  var background = this.dom.background;\n\n  // determine the correct parent DOM element (depending on option orientation)\n  var parent = (this.options.orientation.axis == 'top') ? this.body.dom.top : this.body.dom.bottom;\n  var parentChanged = (foreground.parentNode !== parent);\n\n  // calculate character width and height\n  this._calculateCharSize();\n\n  // TODO: recalculate sizes only needed when parent is resized or options is changed\n  var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none';\n  var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none';\n\n  // determine the width and height of the elemens for the axis\n  props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n  props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n  props.height = props.minorLabelHeight + props.majorLabelHeight;\n  props.width = foreground.offsetWidth;\n\n  props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight -\n      (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height);\n  props.minorLineWidth = 1; // TODO: really calculate width\n  props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;\n  props.majorLineWidth = 1; // TODO: really calculate width\n\n  //  take foreground and background offline while updating (is almost twice as fast)\n  var foregroundNextSibling = foreground.nextSibling;\n  var backgroundNextSibling = background.nextSibling;\n  foreground.parentNode && foreground.parentNode.removeChild(foreground);\n  background.parentNode && background.parentNode.removeChild(background);\n\n  foreground.style.height = this.props.height + 'px';\n\n  this._repaintLabels();\n\n  // put DOM online again (at the same place)\n  if (foregroundNextSibling) {\n    parent.insertBefore(foreground, foregroundNextSibling);\n  }\n  else {\n    parent.appendChild(foreground)\n  }\n  if (backgroundNextSibling) {\n    this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);\n  }\n  else {\n    this.body.dom.backgroundVertical.appendChild(background)\n  }\n  return this._isResized() || parentChanged;\n};\n\n/**\n * Repaint major and minor text labels and vertical grid lines\n * @private\n */\nTimeAxis.prototype._repaintLabels = function () {\n  var orientation = this.options.orientation.axis;\n\n  // calculate range and step (step such that we have space for 7 characters per label)\n  var start = util.convert(this.body.range.start, 'Number');\n  var end = util.convert(this.body.range.end, 'Number');\n  var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf();\n  var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize);\n  minimumStep -= this.body.util.toTime(0).valueOf();\n\n  var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates);\n  step.setMoment(this.options.moment);\n  if (this.options.format) {\n    step.setFormat(this.options.format);\n  }\n  if (this.options.timeAxis) {\n    step.setScale(this.options.timeAxis);\n  }\n  this.step = step;\n\n  // Move all DOM elements to a \"redundant\" list, where they\n  // can be picked for re-use, and clear the lists with lines and texts.\n  // At the end of the function _repaintLabels, left over elements will be cleaned up\n  var dom = this.dom;\n  dom.redundant.lines = dom.lines;\n  dom.redundant.majorTexts = dom.majorTexts;\n  dom.redundant.minorTexts = dom.minorTexts;\n  dom.lines = [];\n  dom.majorTexts = [];\n  dom.minorTexts = [];\n\n  var current;\n  var next;\n  var x;\n  var xNext;\n  var isMajor, nextIsMajor;\n  var width = 0, prevWidth;\n  var line;\n  var labelMinor;\n  var xFirstMajorLabel = undefined;\n  var count = 0;\n  const MAX = 1000;\n  var className;\n\n  step.start();\n  next = step.getCurrent();\n  xNext = this.body.util.toScreen(next);\n  while (step.hasNext() && count < MAX) {\n    count++;\n\n    isMajor = step.isMajor();\n    className = step.getClassName();\n    labelMinor = step.getLabelMinor();\n\n    current = next;\n    x = xNext;\n\n    step.next();\n    next = step.getCurrent();\n    nextIsMajor = step.isMajor();\n    xNext = this.body.util.toScreen(next);\n\n    prevWidth = width;\n    width = xNext - x;\n    var showMinorGrid = (width >= prevWidth * 0.4); // prevent displaying of the 31th of the month on a scale of 5 days\n\n    if (this.options.showMinorLabels && showMinorGrid) {\n      var label = this._repaintMinorText(x, labelMinor, orientation, className);\n      label.style.width = width + 'px'; // set width to prevent overflow\n    }\n\n    if (isMajor && this.options.showMajorLabels) {\n      if (x > 0) {\n        if (xFirstMajorLabel == undefined) {\n          xFirstMajorLabel = x;\n        }\n        label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className);\n      }\n      line = this._repaintMajorLine(x, width, orientation, className);\n    }\n    else { // minor line\n      if (showMinorGrid) {\n        line = this._repaintMinorLine(x, width, orientation, className);\n      }\n      else {\n        if (line) {\n          // adjust the width of the previous grid\n          line.style.width = (parseInt (line.style.width) + width) + 'px';\n        }\n      }\n    }\n  }\n\n  if (count === MAX && !warnedForOverflow) {\n      console.warn(`Something is wrong with the Timeline scale. Limited drawing of grid lines to ${MAX} lines.`);\n      warnedForOverflow = true;\n  }\n\n  // create a major label on the left when needed\n  if (this.options.showMajorLabels) {\n    var leftTime = this.body.util.toTime(0),\n        leftText = step.getLabelMajor(leftTime),\n        widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation\n\n    if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {\n      this._repaintMajorText(0, leftText, orientation, className);\n    }\n  }\n\n  // Cleanup leftover DOM elements from the redundant list\n  util.forEach(this.dom.redundant, function (arr) {\n    while (arr.length) {\n      var elem = arr.pop();\n      if (elem && elem.parentNode) {\n        elem.parentNode.removeChild(elem);\n      }\n    }\n  });\n};\n\n/**\n * Create a minor label for the axis at position x\n * @param {Number} x\n * @param {String} text\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the HTML element of the created label\n * @private\n */\nTimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) {\n  // reuse redundant label\n  var label = this.dom.redundant.minorTexts.shift();\n\n  if (!label) {\n    // create new label\n    var content = document.createTextNode('');\n    label = document.createElement('div');\n    label.appendChild(content);\n    this.dom.foreground.appendChild(label);\n  }\n  this.dom.minorTexts.push(label);\n  label.innerHTML = text;\n\n  label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0';\n\n  if (this.options.rtl) {\n    label.style.left = \"\";\n    label.style.right = x + 'px';\n  } else {\n    label.style.left = x + 'px';\n  };\n  label.className = 'vis-text vis-minor ' + className;\n  //label.title = title;  // TODO: this is a heavy operation\n\n  return label;\n};\n\n/**\n * Create a Major label for the axis at position x\n * @param {Number} x\n * @param {String} text\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the HTML element of the created label\n * @private\n */\nTimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) {\n  // reuse redundant label\n  var label = this.dom.redundant.majorTexts.shift();\n\n  if (!label) {\n    // create label\n    var content = document.createElement('div');\n    label = document.createElement('div');\n    label.appendChild(content);\n    this.dom.foreground.appendChild(label);\n  }\n\n  label.childNodes[0].innerHTML = text;\n  label.className = 'vis-text vis-major ' + className;\n  //label.title = title; // TODO: this is a heavy operation\n\n  label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight  + 'px');\n  if (this.options.rtl) {\n    label.style.left = \"\";\n    label.style.right = x + 'px';\n  } else {\n    label.style.left = x + 'px';\n  };\n\n  this.dom.majorTexts.push(label);\n  return label;\n};\n\n/**\n * Create a minor line for the axis at position x\n * @param {Number} x\n * @param {Number} width\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the created line\n * @private\n */\nTimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) {\n  // reuse redundant line\n  var line = this.dom.redundant.lines.shift();\n  if (!line) {\n    // create vertical line\n    line = document.createElement('div');\n    this.dom.background.appendChild(line);\n  }\n  this.dom.lines.push(line);\n\n  var props = this.props;\n  if (orientation == 'top') {\n    line.style.top = props.majorLabelHeight + 'px';\n  }\n  else {\n    line.style.top = this.body.domProps.top.height + 'px';\n  }\n  line.style.height = props.minorLineHeight + 'px';\n  if (this.options.rtl) {\n    line.style.left = \"\";\n    line.style.right = (x - props.minorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical-rtl vis-minor ' + className;\n  } else {\n    line.style.left = (x - props.minorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical vis-minor ' + className;\n  };\n  line.style.width = width + 'px';\n\n  \n\n  return line;\n};\n\n/**\n * Create a Major line for the axis at position x\n * @param {Number} x\n * @param {Number} width\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the created line\n * @private\n */\nTimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) {\n  // reuse redundant line\n  var line = this.dom.redundant.lines.shift();\n  if (!line) {\n    // create vertical line\n    line = document.createElement('div');\n    this.dom.background.appendChild(line);\n  }\n  this.dom.lines.push(line);\n\n  var props = this.props;\n  if (orientation == 'top') {\n    line.style.top = '0';\n  }\n  else {\n    line.style.top = this.body.domProps.top.height + 'px';\n  }\n\n  if (this.options.rtl) {\n    line.style.left = \"\";\n    line.style.right = (x - props.majorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical-rtl vis-major ' + className;\n  } else {\n    line.style.left = (x - props.majorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical vis-major ' + className;\n  }\n\n  line.style.height = props.majorLineHeight + 'px';\n  line.style.width = width  + 'px';\n\n  return line;\n};\n\n/**\n * Determine the size of text on the axis (both major and minor axis).\n * The size is calculated only once and then cached in this.props.\n * @private\n */\nTimeAxis.prototype._calculateCharSize = function () {\n  // Note: We calculate char size with every redraw. Size may change, for\n  // example when any of the timelines parents had display:none for example.\n\n  // determine the char width and height on the minor axis\n  if (!this.dom.measureCharMinor) {\n    this.dom.measureCharMinor = document.createElement('DIV');\n    this.dom.measureCharMinor.className = 'vis-text vis-minor vis-measure';\n    this.dom.measureCharMinor.style.position = 'absolute';\n\n    this.dom.measureCharMinor.appendChild(document.createTextNode('0'));\n    this.dom.foreground.appendChild(this.dom.measureCharMinor);\n  }\n  this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;\n  this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;\n\n  // determine the char width and height on the major axis\n  if (!this.dom.measureCharMajor) {\n    this.dom.measureCharMajor = document.createElement('DIV');\n    this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure';\n    this.dom.measureCharMajor.style.position = 'absolute';\n\n    this.dom.measureCharMajor.appendChild(document.createTextNode('0'));\n    this.dom.foreground.appendChild(this.dom.measureCharMajor);\n  }\n  this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;\n  this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;\n};\n\n\nvar warnedForOverflow = false;\n\nmodule.exports = TimeAxis;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/TimeAxis.js","var keycharm = require('keycharm');\nvar Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar util = require('../util');\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @constructor\n */\nfunction Activator(container) {\n  this.active = false;\n\n  this.dom = {\n    container: container\n  };\n\n  this.dom.overlay = document.createElement('div');\n  this.dom.overlay.className = 'vis-overlay';\n\n  this.dom.container.appendChild(this.dom.overlay);\n\n  this.hammer = Hammer(this.dom.overlay);\n  this.hammer.on('tap', this._onTapOverlay.bind(this));\n\n  // block all touch events (except tap)\n  var me = this;\n  var events = [\n    'tap', 'doubletap', 'press',\n    'pinch',\n    'pan', 'panstart', 'panmove', 'panend'\n  ];\n  events.forEach(function (event) {\n    me.hammer.on(event, function (event) {\n      event.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this.onClick = function (event) {\n      if (!_hasParent(event.target, container)) {\n        me.deactivate();\n      }\n    };\n    document.body.addEventListener('click', this.onClick);\n  }\n\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = keycharm();\n\n  // keycharm listener only bounded when active)\n  this.escListener = this.deactivate.bind(this);\n}\n\n// turn into an event emitter\nEmitter(Activator.prototype);\n\n// The currently active activator\nActivator.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator.prototype.destroy = function () {\n  this.deactivate();\n\n  // remove dom\n  this.dom.overlay.parentNode.removeChild(this.dom.overlay);\n\n  // remove global event listener\n  if (this.onClick) {\n    document.body.removeEventListener('click', this.onClick);\n  }\n\n  // cleanup hammer instances\n  this.hammer.destroy();\n  this.hammer = null;\n  // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory)\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator.prototype.activate = function () {\n  // we allow only one active activator at a time\n  if (Activator.current) {\n    Activator.current.deactivate();\n  }\n  Activator.current = this;\n\n  this.active = true;\n  this.dom.overlay.style.display = 'none';\n  util.addClassName(this.dom.container, 'vis-active');\n\n  this.emit('change');\n  this.emit('activate');\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  this.keycharm.bind('esc', this.escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator.prototype.deactivate = function () {\n  this.active = false;\n  this.dom.overlay.style.display = '';\n  util.removeClassName(this.dom.container, 'vis-active');\n  this.keycharm.unbind('esc', this.escListener);\n\n  this.emit('change');\n  this.emit('deactivate');\n};\n\n/**\n * Handle a tap event: activate the container\n * @param event\n * @private\n */\nActivator.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\nmodule.exports = Activator;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Activator.js","var Hammer = require('../../module/hammer');\nvar util = require('../../util');\nvar Component = require('./Component');\nvar moment = require('../../module/moment');\nvar locales = require('../locales');\n\n/**\n * A custom time bar\n * @param {{range: Range, dom: Object}} body\n * @param {Object} [options]        Available parameters:\n *                                  {number | string} id\n *                                  {string} locales\n *                                  {string} locale\n * @constructor CustomTime\n * @extends Component\n */\n\nfunction CustomTime (body, options) {\n  this.body = body;\n\n  // default options\n  this.defaultOptions = {\n    moment: moment,\n    locales: locales,\n    locale: 'en',\n    id: undefined,\n    title: undefined\n  };\n  this.options = util.extend({}, this.defaultOptions);\n\n  if (options && options.time) {\n    this.customTime = options.time;\n  } else {\n    this.customTime = new Date();\n  }\n\n  this.eventParams = {}; // stores state parameters while dragging the bar\n\n  this.setOptions(options);\n\n  // create the DOM\n  this._create();\n}\n\nCustomTime.prototype = new Component();\n\n/**\n * Set options for the component. Options will be merged in current options.\n * @param {Object} options  Available parameters:\n *                                  {number | string} id\n *                                  {string} locales\n *                                  {string} locale\n */\nCustomTime.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options);\n  }\n};\n\n/**\n * Create the DOM for the custom time\n * @private\n */\nCustomTime.prototype._create = function() {\n  var bar = document.createElement('div');\n  bar['custom-time'] = this;\n  bar.className = 'vis-custom-time ' + (this.options.id || '');\n  bar.style.position = 'absolute';\n  bar.style.top = '0px';\n  bar.style.height = '100%';\n  this.bar = bar;\n\n  var drag = document.createElement('div');\n  drag.style.position = 'relative';\n  drag.style.top = '0px';\n  drag.style.left = '-10px';\n  drag.style.height = '100%';\n  drag.style.width = '20px';\n\n  function onMouseWheel (e) {\n    this.body.range._onMouseWheel(e);\n  }\n\n  if (drag.addEventListener) {\n    // IE9, Chrome, Safari, Opera\n    drag.addEventListener(\"mousewheel\", onMouseWheel.bind(this), false);\n    // Firefox\n    drag.addEventListener(\"DOMMouseScroll\", onMouseWheel.bind(this), false);\n  } else {\n    // IE 6/7/8\n    drag.attachEvent(\"onmousewheel\", onMouseWheel.bind(this));\n  }\n\n  bar.appendChild(drag);\n  // attach event listeners\n  this.hammer = new Hammer(drag);\n  this.hammer.on('panstart', this._onDragStart.bind(this));\n  this.hammer.on('panmove',  this._onDrag.bind(this));\n  this.hammer.on('panend',   this._onDragEnd.bind(this));\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n};\n\n/**\n * Destroy the CustomTime bar\n */\nCustomTime.prototype.destroy = function () {\n  this.hide();\n\n  this.hammer.destroy();\n  this.hammer = null;\n\n  this.body = null;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nCustomTime.prototype.redraw = function () {\n  var parent = this.body.dom.backgroundVertical;\n  if (this.bar.parentNode != parent) {\n    // attach to the dom\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n    parent.appendChild(this.bar);\n  }\n\n  var x = this.body.util.toScreen(this.customTime);\n\n  var locale = this.options.locales[this.options.locale];\n  if (!locale) {\n    if (!this.warned) {\n      console.log('WARNING: options.locales[\\'' + this.options.locale + '\\'] not found. See http://visjs.org/docs/timeline/#Localization');\n      this.warned = true;\n    }\n    locale = this.options.locales['en']; // fall back on english when not available\n  }\n\n  var title = this.options.title;\n  // To hide the title completely use empty string ''.\n  if (title === undefined) {\n    title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss');\n    title = title.charAt(0).toUpperCase() + title.substring(1);\n  }\n\n  this.bar.style.left = x + 'px';\n  this.bar.title = title;\n\n  return false;\n};\n\n/**\n * Remove the CustomTime from the DOM\n */\nCustomTime.prototype.hide = function () {\n  // remove the line from the DOM\n  if (this.bar.parentNode) {\n    this.bar.parentNode.removeChild(this.bar);\n  }\n};\n\n/**\n * Set custom time.\n * @param {Date | number | string} time\n */\nCustomTime.prototype.setCustomTime = function(time) {\n  this.customTime = util.convert(time, 'Date');\n  this.redraw();\n};\n\n/**\n * Retrieve the current custom time.\n * @return {Date} customTime\n */\nCustomTime.prototype.getCustomTime = function() {\n  return new Date(this.customTime.valueOf());\n};\n\n/**\n  * Set custom title.\n  * @param {Date | number | string} title\n  */\nCustomTime.prototype.setCustomTitle = function(title) {\n  this.options.title = title;\n};\n\n/**\n * Start moving horizontally\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDragStart = function(event) {\n  this.eventParams.dragging = true;\n  this.eventParams.customTime = this.customTime;\n\n  event.stopPropagation();\n};\n\n/**\n * Perform moving operating.\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDrag = function (event) {\n  if (!this.eventParams.dragging) return;\n\n  var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX;\n  var time = this.body.util.toTime(x);\n\n  this.setCustomTime(time);\n\n  // fire a timechange event\n  this.body.emitter.emit('timechange', {\n    id: this.options.id,\n    time: new Date(this.customTime.valueOf()),\n    event: util.elementsCensor(event)\n  });\n\n  event.stopPropagation();\n};\n\n/**\n * Stop moving operating.\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDragEnd = function (event) {\n  if (!this.eventParams.dragging) return;\n\n  // fire a timechanged event\n  this.body.emitter.emit('timechanged', {\n    id: this.options.id,\n    time: new Date(this.customTime.valueOf()),\n    event: util.elementsCensor(event)\n  });\n\n  event.stopPropagation();\n};\n\n/**\n * Find a custom time from an event target:\n * searches for the attribute 'custom-time' in the event target's element tree\n * @param {Event} event\n * @return {CustomTime | null} customTime\n */\nCustomTime.customTimeFromTarget = function(event) {\n  var target = event.target;\n  while (target) {\n    if (target.hasOwnProperty('custom-time')) {\n      return target['custom-time'];\n    }\n    target = target.parentNode;\n  }\n\n  return null;\n};\n\nmodule.exports = CustomTime;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/CustomTime.js","// English\nexports['en'] = {\n  current: 'current',\n  time: 'time'\n};\nexports['en_EN'] = exports['en'];\nexports['en_US'] = exports['en'];\n\n// Italiano\nexports['it'] = {\n  current: 'attuale',\n  time: 'tempo'\n};\nexports['it_IT'] = exports['it'];\nexports['it_CH'] = exports['it'];\n\n// Dutch\nexports['nl'] = {\n  current: 'huidige',\n  time: 'tijd'\n};\nexports['nl_NL'] = exports['nl'];\nexports['nl_BE'] = exports['nl'];\n\n// German\nexports['de'] = {\n  current: 'Aktuelle',\n  time: 'Zeit'\n};\nexports['de_DE'] = exports['de'];\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/locales.js","var util = require('../../util');\nvar Component = require('./Component');\nvar moment = require('../../module/moment');\nvar locales = require('../locales');\n\n/**\n * A current time bar\n * @param {{range: Range, dom: Object, domProps: Object}} body\n * @param {Object} [options]        Available parameters:\n *                                  {Boolean} [showCurrentTime]\n * @constructor CurrentTime\n * @extends Component\n */\nfunction CurrentTime (body, options) {\n  this.body = body;\n\n  // default options\n  this.defaultOptions = {\n    rtl: false,\n    showCurrentTime: true,\n\n    moment: moment,\n    locales: locales,\n    locale: 'en'\n  };\n  this.options = util.extend({}, this.defaultOptions);\n  this.offset = 0;\n\n  this._create();\n\n  this.setOptions(options);\n}\n\nCurrentTime.prototype = new Component();\n\n/**\n * Create the HTML DOM for the current time bar\n * @private\n */\nCurrentTime.prototype._create = function() {\n  var bar = document.createElement('div');\n  bar.className = 'vis-current-time';\n  bar.style.position = 'absolute';\n  bar.style.top = '0px';\n  bar.style.height = '100%';\n\n  this.bar = bar;\n};\n\n/**\n * Destroy the CurrentTime bar\n */\nCurrentTime.prototype.destroy = function () {\n  this.options.showCurrentTime = false;\n  this.redraw(); // will remove the bar from the DOM and stop refreshing\n\n  this.body = null;\n};\n\n/**\n * Set options for the component. Options will be merged in current options.\n * @param {Object} options  Available parameters:\n *                          {boolean} [showCurrentTime]\n */\nCurrentTime.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend(['rtl', 'showCurrentTime', 'moment', 'locale', 'locales'], this.options, options);\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nCurrentTime.prototype.redraw = function() {\n  if (this.options.showCurrentTime) {\n    var parent = this.body.dom.backgroundVertical;\n    if (this.bar.parentNode != parent) {\n      // attach to the dom\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      parent.appendChild(this.bar);\n\n      this.start();\n    }\n\n    var now = this.options.moment(new Date().valueOf() + this.offset);\n    var x = this.body.util.toScreen(now);\n\n    var locale = this.options.locales[this.options.locale];\n    if (!locale) {\n      if (!this.warned) {\n        console.log('WARNING: options.locales[\\'' + this.options.locale + '\\'] not found. See http://visjs.org/docs/timeline/#Localization');\n        this.warned = true;\n      }\n      locale = this.options.locales['en']; // fall back on english when not available\n    }\n    var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss');\n    title = title.charAt(0).toUpperCase() + title.substring(1);\n\n    if (this.options.rtl) {\n      this.bar.style.right = x + 'px';\n    } else {\n      this.bar.style.left = x + 'px';\n    }\n    this.bar.title = title;\n  }\n  else {\n    // remove the line from the DOM\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n    this.stop();\n  }\n\n  return false;\n};\n\n/**\n * Start auto refreshing the current time bar\n */\nCurrentTime.prototype.start = function() {\n  var me = this;\n\n  function update () {\n    me.stop();\n\n    // determine interval to refresh\n    var scale = me.body.range.conversion(me.body.domProps.center.width).scale;\n    var interval = 1 / scale / 10;\n    if (interval < 30)   interval = 30;\n    if (interval > 1000) interval = 1000;\n\n    me.redraw();\n    me.body.emitter.emit('currentTimeTick');\n\n    // start a renderTimer to adjust for the new time\n    me.currentTimeTimer = setTimeout(update, interval);\n  }\n\n  update();\n};\n\n/**\n * Stop auto refreshing the current time bar\n */\nCurrentTime.prototype.stop = function() {\n  if (this.currentTimeTimer !== undefined) {\n    clearTimeout(this.currentTimeTimer);\n    delete this.currentTimeTimer;\n  }\n};\n\n/**\n * Set a current time. This can be used for example to ensure that a client's\n * time is synchronized with a shared server time.\n * @param {Date | String | Number} time     A Date, unix timestamp, or\n *                                          ISO date string.\n */\nCurrentTime.prototype.setCurrentTime = function(time) {\n  var t = util.convert(time, 'Date').valueOf();\n  var now = new Date().valueOf();\n  this.offset = t - now;\n  this.redraw();\n};\n\n/**\n * Get the current time.\n * @return {Date} Returns the current time.\n */\nCurrentTime.prototype.getCurrentTime = function() {\n  return new Date(new Date().valueOf() + this.offset);\n};\n\nmodule.exports = CurrentTime;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/CurrentTime.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet date = 'date';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet moment = 'moment';\nlet any = 'any';\n\nlet allOptions = {\n  configure: {\n    enabled: { 'boolean': bool},\n    filter: { 'boolean': bool,'function': 'function'},\n    container: {dom},\n    __type__: {object, 'boolean': bool,'function': 'function'}\n  },\n\n  //globals :\n  align: {string},\n  rtl: { 'boolean': bool, 'undefined': 'undefined'},\n  rollingMode: { 'boolean': bool, 'undefined': 'undefined'},\n  verticalScroll: { 'boolean': bool, 'undefined': 'undefined'},\n  horizontalScroll: { 'boolean': bool, 'undefined': 'undefined'},\n  autoResize: { 'boolean': bool},\n  throttleRedraw: {number}, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: { 'boolean': bool},\n  dataAttributes: {string, array},\n  editable: {\n    add: { 'boolean': bool, 'undefined': 'undefined'},\n    remove: { 'boolean': bool, 'undefined': 'undefined'},\n    updateGroup: { 'boolean': bool, 'undefined': 'undefined'},\n    updateTime: { 'boolean': bool, 'undefined': 'undefined'},\n    overrideItems: { 'boolean': bool, 'undefined': 'undefined'},\n    __type__: { 'boolean': bool, object}\n  },\n  end: {number, date, string, moment},\n  format: {\n    minorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object, 'function': 'function'}\n    },\n    majorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object, 'function': 'function'}\n    },\n    __type__: {object}\n  },\n  moment: {'function': 'function'},\n  groupOrder: {string, 'function': 'function'},\n  groupEditable: {\n\t add: { 'boolean': bool, 'undefined': 'undefined'},\n\t remove: { 'boolean': bool, 'undefined': 'undefined'},\n\t order: { 'boolean': bool, 'undefined': 'undefined'},\n\t __type__: { 'boolean': bool, object}\n  },\n  groupOrderSwap: {'function': 'function'},\n  height: {string, number},\n  hiddenDates: {\n    start: {date, number, string, moment},\n    end: {date, number, string, moment},\n    repeat: {string},\n    __type__: {object, array}\n  },\n  itemsAlwaysDraggable: { 'boolean': bool},\n  locale:{string},\n  locales:{\n    __any__: {any},\n    __type__: {object}\n  },\n  margin: {\n    axis: {number},\n    item: {\n      horizontal: {number,'undefined': 'undefined'},\n      vertical: {number,'undefined': 'undefined'},\n      __type__: {object,number}\n    },\n    __type__: {object,number}\n  },\n  max: {date, number, string, moment},\n  maxHeight: {number, string},\n  maxMinorChars: {number},\n  min: {date, number, string, moment},\n  minHeight: {number, string},\n  moveable: { 'boolean': bool},\n  multiselect: { 'boolean': bool},\n  multiselectPerGroup: { 'boolean': bool},\n  onAdd: {'function': 'function'},\n  onUpdate: {'function': 'function'},\n  onMove: {'function': 'function'},\n  onMoving: {'function': 'function'},\n  onRemove: {'function': 'function'},\n  onAddGroup: {'function': 'function'},\n  onMoveGroup: {'function': 'function'},\n  onRemoveGroup: {'function': 'function'},\n  order: {'function': 'function'},\n  orientation: {\n    axis: {string,'undefined': 'undefined'},\n    item: {string,'undefined': 'undefined'},\n    __type__: {string, object}\n  },\n  selectable: { 'boolean': bool},\n  showCurrentTime: { 'boolean': bool},\n  showMajorLabels: { 'boolean': bool},\n  showMinorLabels: { 'boolean': bool},\n  stack: { 'boolean': bool},\n  stackSubgroups: { 'boolean': bool},\n  snap: {'function': 'function', 'null': 'null'},\n  start: {date, number, string, moment},\n  template: {'function': 'function'},\n  groupTemplate: {'function': 'function'},\n  visibleFrameTemplate: {string, 'function': 'function'},\n  tooltip: {\n    followMouse: { 'boolean': bool },\n    overflowMethod: { 'string': ['cap', 'flip'] },\n    __type__: {object}\n  },\n  tooltipOnItemUpdateTime: {\n    template: {'function': 'function'},\n    __type__: { 'boolean': bool, object}\n  },\n  timeAxis: {\n    scale: {string,'undefined': 'undefined'},\n    step: {number,'undefined': 'undefined'},\n    __type__: {object}\n  },\n  type: {string},\n  width: {string, number},\n  zoomable: { 'boolean': bool},\n  zoomKey: {string: ['ctrlKey', 'altKey', 'metaKey', '']},\n  zoomMax: {number},\n  zoomMin: {number},\n\n  __type__: {object}\n};\n\nlet configureOptions = {\n  global: {\n    align:  ['center', 'left', 'right'],\n    direction:  false,\n    autoResize: true,\n    clickToUse: false,\n    // dataAttributes: ['all'], // FIXME: can be 'all' or string[]\n    editable: {\n      add: false,\n      remove: false,\n      updateGroup: false,\n      updateTime: false\n    },\n    end: '',\n    format: {\n      minorLabels: {\n        millisecond:'SSS',\n        second:     's',\n        minute:     'HH:mm',\n        hour:       'HH:mm',\n        weekday:    'ddd D',\n        day:        'D',\n        month:      'MMM',\n        year:       'YYYY'\n      },\n      majorLabels: {\n        millisecond:'HH:mm:ss',\n        second:     'D MMMM HH:mm',\n        minute:     'ddd D MMMM',\n        hour:       'ddd D MMMM',\n        weekday:    'MMMM YYYY',\n        day:        'MMMM YYYY',\n        month:      'YYYY',\n        year:       ''\n      }\n    },\n\n    //groupOrder: {string, 'function': 'function'},\n    groupsDraggable: false,\n    height: '',\n    //hiddenDates: {object, array},\n    locale: '',\n    margin: {\n      axis: [20, 0, 100, 1],\n      item: {\n        horizontal: [10, 0, 100, 1],\n        vertical: [10, 0, 100, 1]\n      }\n    },\n    max: '',\n    maxHeight: '',\n    maxMinorChars: [7, 0, 20, 1],\n    min: '',\n    minHeight: '',\n    moveable: false,\n    multiselect: false,\n    multiselectPerGroup: false,\n    //onAdd: {'function': 'function'},\n    //onUpdate: {'function': 'function'},\n    //onMove: {'function': 'function'},\n    //onMoving: {'function': 'function'},\n    //onRename: {'function': 'function'},\n    //order: {'function': 'function'},\n    orientation: {\n      axis: ['both', 'bottom', 'top'],\n      item: ['bottom', 'top']\n    },\n    selectable: true,\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    stack: true,\n    stackSubgroups: true,\n    //snap: {'function': 'function', nada},\n    start: '',\n    //template: {'function': 'function'},\n    //timeAxis: {\n    //  scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'],\n    //  step: [1, 1, 10, 1]\n    //},\n    tooltip: {\n      followMouse: false,\n      overflowMethod: 'flip'\n    },\n    tooltipOnItemUpdateTime: false,\n    type: ['box', 'point', 'range', 'background'],\n    width: '100%',\n    zoomable: true,\n    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1]\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/optionsTimeline.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar moment = require('../module/moment');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar Core = require('./Core');\nvar TimeAxis = require('./component/TimeAxis');\nvar CurrentTime = require('./component/CurrentTime');\nvar CustomTime = require('./component/CustomTime');\nvar LineGraph = require('./component/LineGraph');\n\nvar printStyle = require('../shared/Validator').printStyle;\nvar allOptions = require('./optionsGraph2d').allOptions;\nvar configureOptions = require('./optionsGraph2d').configureOptions;\n\nimport Configurator from '../shared/Configurator';\nimport Validator from '../shared/Validator';\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | Array} [items]\n * @param {Object} [options]  See Graph2d.setOptions for the available options.\n * @constructor\n * @extends Core\n */\nfunction Graph2d (container, items, groups, options) {\n  // if the third element is options, the forth is groups (optionally);\n  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn(\"Graph2d option \\\"throttleRedraw\\\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.\");\n  }\n\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end:   null,\n\n    autoResize: true,\n\n    orientation: {\n      axis: 'bottom',   // axis orientation: 'bottom', 'top', or 'both'\n      item: 'bottom'    // not relevant for Graph2d\n    },\n\n    moment: moment,\n\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null\n  };\n  this.options = util.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: this.on.bind(this),\n      off: this.off.bind(this),\n      emit: this.emit.bind(this)\n    },\n    hiddenDates: [],\n    util: {\n      toScreen: me._toScreen.bind(me),\n      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n      toTime: me._toTime.bind(me),\n      toGlobalTime : me._toGlobalTime.bind(me)\n    }\n  };\n\n  // range\n  this.range = new Range(this.body);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body);\n  this.components.push(this.timeAxis);\n  //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.linegraph = new LineGraph(this.body);\n\n  this.components.push(this.linegraph);\n\n  this.itemsData = null;      // DataSet\n  this.groupsData = null;     // DataSet\n\n\n  this.on('tap', function (event) {\n    me.emit('click', me.getEventProperties(event))\n  });\n  this.on('doubletap', function (event) {\n    me.emit('doubleClick', me.getEventProperties(event))\n  });\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit('contextmenu', me.getEventProperties(event))\n  };\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nGraph2d.prototype = new Core();\n\nGraph2d.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n  if (errorFound === true) {\n    console.log('%cErrors have been found in the supplied options object.', printStyle);\n  }\n\n  Core.prototype.setOptions.call(this, options);\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nGraph2d.prototype.setItems = function(items) {\n  var initialLoad = (this.itemsData == null);\n\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    newDataSet = items;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(items, {\n      type: {\n        start: 'Date',\n        end: 'Date'\n      }\n    });\n  }\n\n  // set items\n  this.itemsData = newDataSet;\n  this.linegraph && this.linegraph.setItems(newDataSet);\n\n  if (initialLoad) {\n    if (this.options.start != undefined || this.options.end != undefined) {\n      var start = this.options.start != undefined ? this.options.start : null;\n      var end   = this.options.end != undefined   ? this.options.end : null;\n      this.setWindow(start, end, {animation: false});\n    }\n    else {\n      this.fit({animation: false});\n    }\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nGraph2d.prototype.setGroups = function(groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    newDataSet = groups;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(groups);\n  }\n\n  this.groupsData = newDataSet;\n  this.linegraph.setGroups(newDataSet);\n};\n\n/**\n * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right).\n * @param groupId\n * @param width\n * @param height\n */\nGraph2d.prototype.getLegend = function(groupId, width, height) {\n  if (width  === undefined) {width  = 15;}\n  if (height === undefined) {height = 15;}\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return this.linegraph.groups[groupId].getLegend(width,height);\n  }\n  else {\n    return \"cannot find group:'\" +  groupId + \"'\";\n  }\n};\n\n/**\n * This checks if the visible option of the supplied group (by ID) is true or false.\n * @param groupId\n * @returns {*}\n */\nGraph2d.prototype.isGroupVisible = function(groupId) {\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return (this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true));\n  }\n  else {\n    return false;\n  }\n};\n\n\n/**\n * Get the data range of the item set.\n * @returns {{min: Date, max: Date}} range  A range with a start and end Date.\n *                                          When no minimum is found, min==null\n *                                          When no maximum is found, max==null\n */\nGraph2d.prototype.getDataRange = function() {\n  var min = null;\n  var max = null;\n\n  // calculate min from start filed\n  for (var groupId in this.linegraph.groups) {\n    if (this.linegraph.groups.hasOwnProperty(groupId)) {\n      if (this.linegraph.groups[groupId].visible == true) {\n        for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) {\n          var item = this.linegraph.groups[groupId].itemsData[i];\n          var value = util.convert(item.x, 'Date').valueOf();\n          min = min == null ? value : min > value ? value : min;\n          max = max == null ? value : max < value ? value : max;\n        }\n      }\n    }\n  }\n\n  return {\n    min: (min != null) ? new Date(min) : null,\n    max: (max != null) ? new Date(max) : null\n  };\n};\n\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nGraph2d.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);\n  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);\n  var time = this._toTime(x);\n\n  var customTime = CustomTime.customTimeFromTarget(event);\n\n  var element = util.getTarget(event);\n  var what = null;\n  if (util.hasParent(element, this.timeAxis.dom.foreground))              {what = 'axis';}\n  else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {what = 'axis';}\n  else if (util.hasParent(element, this.linegraph.yAxisLeft.dom.frame))   {what = 'data-axis';}\n  else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame))  {what = 'data-axis';}\n  else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame))  {what = 'legend';}\n  else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) {what = 'legend';}\n  else if (customTime != null)                {what = 'custom-time';}\n  else if (util.hasParent(element, this.currentTime.bar))                 {what = 'current-time';}\n  else if (util.hasParent(element, this.dom.center))                      {what = 'background';}\n\n  var value = [];\n  var yAxisLeft = this.linegraph.yAxisLeft;\n  var yAxisRight = this.linegraph.yAxisRight;\n  if (!yAxisLeft.hidden && this.itemsData.length > 0) {\n    value.push(yAxisLeft.screenToValue(y));\n  }\n  if (!yAxisRight.hidden && this.itemsData.length > 0) {\n    value.push(yAxisRight.screenToValue(y));\n  }\n\n  return {\n    event: event,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    value: value\n  }\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nGraph2d.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\n\nmodule.exports = Graph2d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Graph2d.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\nvar Component = require('./Component');\nvar DataAxis = require('./DataAxis');\nvar GraphGroup = require('./GraphGroup');\nvar Legend = require('./Legend');\nvar Bars = require('./graph2d_types/bar');\nvar Lines = require('./graph2d_types/line');\nvar Points = require('./graph2d_types/points');\n\nvar UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items\n\n/**\n * This is the constructor of the LineGraph. It requires a Timeline body and options.\n *\n * @param body\n * @param options\n * @constructor\n */\nfunction LineGraph(body, options) {\n  this.id = util.randomUUID();\n  this.body = body;\n\n  this.defaultOptions = {\n    yAxisOrientation: 'left',\n    defaultGroup: 'default',\n    sort: true,\n    sampling: true,\n    stack: false,\n    graphHeight: '400px',\n    shaded: {\n      enabled: false,\n      orientation: 'bottom' // top, bottom, zero\n    },\n    style: 'line', // line, bar\n    barChart: {\n      width: 50,\n      sideBySide: false,\n      align: 'center' // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n      alpha: 0.5\n    },\n    drawPoints: {\n      enabled: true,\n      size: 6,\n      style: 'square' // square, circle\n    },\n    dataAxis: {}, //Defaults are done on DataAxis level\n    legend: {}, //Defaults are done on Legend level\n    groups: {\n      visibility: {}\n    }\n  };\n\n  // options is shared by this lineGraph and all its items\n  this.options = util.extend({}, this.defaultOptions);\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n  this.groups = {};\n  this.abortedGraphUpdate = false;\n  this.updateSVGheight = false;\n  this.updateSVGheightOnResize = false;\n  this.forceGraphUpdate = true;\n\n  var me = this;\n  this.itemsData = null;    // DataSet\n  this.groupsData = null;   // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    'add': function (event, params, senderId) {\n      me._onAdd(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdate(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemove(params.items);\n    }\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    'add': function (event, params, senderId) {\n      me._onAddGroups(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdateGroups(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemoveGroups(params.items);\n    }\n  };\n\n  this.items = {};      // object with an Item for every data item\n  this.selection = [];  // list with the ids of all selected nodes\n  this.lastStart = this.body.range.start;\n  this.touchParams = {}; // stores properties while dragging\n\n  this.svgElements = {};\n  this.setOptions(options);\n  this.groupsUsingDefaultStyles = [0];\n  this.body.emitter.on('rangechanged', function () {\n    me.lastStart = me.body.range.start;\n    me.svg.style.left = util.option.asSize(-me.props.width);\n\n    me.forceGraphUpdate = true;\n    //Is this local redraw necessary? (Core also does a change event!)\n    me.redraw.call(me);\n  });\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n}\n\nLineGraph.prototype = new Component();\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nLineGraph.prototype._create = function () {\n  var frame = document.createElement('div');\n  frame.className = 'vis-line-graph';\n  this.dom.frame = frame;\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  this.svg.style.position = 'relative';\n  this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';\n  this.svg.style.display = 'block';\n  frame.appendChild(this.svg);\n\n  // data axis\n  this.options.dataAxis.orientation = 'left';\n  this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n\n  this.options.dataAxis.orientation = 'right';\n  this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n  delete this.options.dataAxis.orientation;\n\n  // legends\n  this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups);\n  this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups);\n\n  this.show();\n};\n\n/**\n * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.\n * @param {object} options\n */\nLineGraph.prototype.setOptions = function (options) {\n  if (options) {\n    var fields = ['sampling', 'defaultGroup', 'stack', 'height', 'graphHeight', 'yAxisOrientation', 'style', 'barChart', 'dataAxis', 'sort', 'groups'];\n    if (options.graphHeight === undefined && options.height !== undefined) {\n      this.updateSVGheight = true;\n      this.updateSVGheightOnResize = true;\n    }\n    else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) {\n      if (parseInt((options.graphHeight + '').replace(\"px\", '')) < this.body.domProps.centerContainer.height) {\n        this.updateSVGheight = true;\n      }\n    }\n    util.selectiveDeepExtend(fields, this.options, options);\n    util.mergeOptions(this.options, options, 'interpolation');\n    util.mergeOptions(this.options, options, 'drawPoints');\n    util.mergeOptions(this.options, options, 'shaded');\n    util.mergeOptions(this.options, options, 'legend');\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == 'object') {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == 'uniform') {\n            this.options.interpolation.alpha = 0;\n          }\n          else if (options.interpolation.parametrization == 'chordal') {\n            this.options.interpolation.alpha = 1.0;\n          }\n          else {\n            this.options.interpolation.parametrization = 'centripetal';\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n\n    if (this.yAxisLeft) {\n      if (options.dataAxis !== undefined) {\n        this.yAxisLeft.setOptions(this.options.dataAxis);\n        this.yAxisRight.setOptions(this.options.dataAxis);\n      }\n    }\n\n    if (this.legendLeft) {\n      if (options.legend !== undefined) {\n        this.legendLeft.setOptions(this.options.legend);\n        this.legendRight.setOptions(this.options.legend);\n      }\n    }\n\n    if (this.groups.hasOwnProperty(UNGROUPED)) {\n      this.groups[UNGROUPED].setOptions(options);\n    }\n  }\n\n  // this is used to redraw the graph if the visibility of the groups is changed.\n  if (this.dom.frame) { //not on initial run?\n    this.forceGraphUpdate=true;\n    this.body.emitter.emit(\"_change\",{queue: true});\n  }\n};\n\n/**\n * Hide the component from the DOM\n */\nLineGraph.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nLineGraph.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nLineGraph.prototype.setItems = function (items) {\n  var me = this,\n    ids,\n    oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    this.itemsData = items;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    util.forEach(this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n  }\n};\n\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nLineGraph.prototype.setGroups = function (groups) {\n  var me = this;\n  var ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    for (var i = 0; i < ids.length; i++) {\n      this._removeGroup(ids[i]);\n    }\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    this.groupsData = groups;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (this.groupsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n};\n\nLineGraph.prototype._onUpdate = function (ids) {\n  this._updateAllGroupData(ids);\n};\nLineGraph.prototype._onAdd = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onRemove = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onUpdateGroups = function (groupIds) {\n  this._updateAllGroupData(null, groupIds);\n};\nLineGraph.prototype._onAddGroups = function (groupIds) {\n  this._onUpdateGroups(groupIds);\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph\n * @param {Array} groupIds\n * @private\n */\nLineGraph.prototype._onRemoveGroups = function (groupIds) {\n  for (var i = 0; i < groupIds.length; i++) {\n    this._removeGroup(groupIds[i]);\n  }\n  this.forceGraphUpdate = true;\n  this.body.emitter.emit(\"_change\",{queue: true});\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis\n * @param groupId\n * @private\n */\nLineGraph.prototype._removeGroup = function (groupId) {\n  if (this.groups.hasOwnProperty(groupId)) {\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n      this.legendRight.redraw();\n    }\n    else {\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n      this.legendLeft.redraw();\n    }\n    delete this.groups[groupId];\n  }\n}\n\n/**\n * update a group object with the group dataset entree\n *\n * @param group\n * @param groupId\n * @private\n */\nLineGraph.prototype._updateGroup = function (group, groupId) {\n  if (!this.groups.hasOwnProperty(groupId)) {\n    this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.addGroup(groupId, this.groups[groupId]);\n      this.legendRight.addGroup(groupId, this.groups[groupId]);\n    }\n    else {\n      this.yAxisLeft.addGroup(groupId, this.groups[groupId]);\n      this.legendLeft.addGroup(groupId, this.groups[groupId]);\n    }\n  }\n  else {\n    this.groups[groupId].update(group);\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.updateGroup(groupId, this.groups[groupId]);\n      this.legendRight.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n    }\n    else {\n      this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);\n      this.legendLeft.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n};\n\n\n/**\n * this updates all groups, it is used when there is an update the the itemset.\n *\n * @param  {Array} ids\n * @param  {Array} groupIds\n * @private\n */\nLineGraph.prototype._updateAllGroupData = function (ids, groupIds) {\n  if (this.itemsData != null) {\n    var groupsContent = {};\n    var items = this.itemsData.get();\n    var fieldId = this.itemsData._fieldId;\n    var idMap = {};\n    if (ids){\n      ids.map(function (id) {\n        idMap[id] = id;\n      });\n    }\n\n    //pre-Determine array sizes, for more efficient memory claim\n    var groupCounts = {};\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      groupCounts.hasOwnProperty(groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1;\n    }\n\n    //Pre-load arrays from existing groups if items are not changed (not in ids)\n    if (!groupIds && ids) {\n      for (var groupId in this.groups) {\n        if (this.groups.hasOwnProperty(groupId)) {\n          var group = this.groups[groupId];\n          var existing_items = group.getItems();\n\n          groupsContent[groupId] = existing_items.filter(function (item) {\n            return (item[fieldId] !== idMap[item[fieldId]]);\n          });\n          var newLength = groupCounts[groupId];\n          groupCounts[groupId] -= groupsContent[groupId].length;\n          if (groupsContent[groupId].length < newLength) {\n            groupsContent[groupId][newLength - 1] = {};\n          }\n        }\n      }\n    }\n\n    //Now insert data into the arrays.\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      if (!groupIds && ids && (item[fieldId] !== idMap[item[fieldId]])) {\n        continue;\n      }\n      if (!groupsContent.hasOwnProperty(groupId)) {\n        groupsContent[groupId] = new Array(groupCounts[groupId]);\n      }\n      //Copy data (because of unmodifiable DataView input.\n      var extended = util.bridgeObject(item);\n      extended.x = util.convert(item.x, 'Date');\n      extended.orginalY = item.y; //real Y\n      extended.y = Number(item.y);\n      extended[fieldId] = item[fieldId];\n\n      var index= groupsContent[groupId].length - groupCounts[groupId]--;\n      groupsContent[groupId][index] = extended;\n    }\n\n    //Make sure all groups are present, to allow removal of old groups\n    for (var groupId in this.groups){\n      if (this.groups.hasOwnProperty(groupId)){\n        if (!groupsContent.hasOwnProperty(groupId)) {\n          groupsContent[groupId] = new Array(0);\n        }\n      }\n    }\n\n    //Update legendas, style and axis\n    for (var groupId in groupsContent) {\n      if (groupsContent.hasOwnProperty(groupId)) {\n        if (groupsContent[groupId].length == 0) {\n          if (this.groups.hasOwnProperty(groupId)) {\n            this._removeGroup(groupId);\n          }\n        } else {\n          var group = undefined;\n          if (this.groupsData != undefined) {\n            group = this.groupsData.get(groupId);\n          }\n          if (group == undefined) {\n            group = {id: groupId, content: this.options.defaultGroup + groupId};\n          }\n          this._updateGroup(group, groupId);\n          this.groups[groupId].setItems(groupsContent[groupId]);\n        }\n      }\n    }\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\",{queue: true});\n  }\n};\n\n/**\n * Redraw the component, mandatory function\n * @return {boolean} Returns true if the component is resized\n */\nLineGraph.prototype.redraw = function () {\n  var resized = false;\n\n  // calculate actual size and position\n  this.props.width = this.dom.frame.offsetWidth;\n  this.props.height = this.body.domProps.centerContainer.height\n    - this.body.domProps.border.top\n    - this.body.domProps.border.bottom;\n\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  var visibleInterval = this.body.range.end - this.body.range.start;\n  var zoomed = (visibleInterval != this.lastVisibleInterval);\n  this.lastVisibleInterval = visibleInterval;\n\n\n  // the svg element is three times as big as the width, this allows for fully dragging left and right\n  // without reloading the graph. the controls for this are bound to events in the constructor\n  if (resized == true) {\n    this.svg.style.width = util.option.asSize(3 * this.props.width);\n    this.svg.style.left = util.option.asSize(-this.props.width);\n\n    // if the height of the graph is set as proportional, change the height of the svg\n    if ((this.options.height + '').indexOf(\"%\") != -1 || this.updateSVGheightOnResize == true) {\n      this.updateSVGheight = true;\n    }\n  }\n\n  // update the height of the graph on each redraw of the graph.\n  if (this.updateSVGheight == true) {\n    if (this.options.graphHeight != this.props.height + 'px') {\n      this.options.graphHeight = this.props.height + 'px';\n      this.svg.style.height = this.props.height + 'px';\n    }\n    this.updateSVGheight = false;\n  }\n  else {\n    this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';\n  }\n\n  // zoomed is here to ensure that animations are shown correctly.\n  if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) {\n    resized = this._updateGraph() || resized;\n    this.forceGraphUpdate = false;\n  }\n  else {\n    // move the whole svg while dragging\n    if (this.lastStart != 0) {\n      var offset = this.body.range.start - this.lastStart;\n      var range = this.body.range.end - this.body.range.start;\n      if (this.props.width != 0) {\n        var rangePerPixelInv = this.props.width / range;\n        var xOffset = offset * rangePerPixelInv;\n        this.svg.style.left = (-this.props.width - xOffset) + 'px';\n      }\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n  return resized;\n};\n\n\nLineGraph.prototype._getSortedGroupIds = function(){\n  // getting group Ids\n  var grouplist = [];\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      var group = this.groups[groupId];\n      if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) {\n        grouplist.push({id:groupId,zIndex:group.options.zIndex});\n      }\n    }\n  }\n  util.insertSort(grouplist,function(a,b){\n    var az = a.zIndex;\n    var bz = b.zIndex;\n    if (az === undefined) az=0;\n    if (bz === undefined) bz=0;\n    return az==bz? 0: (az<bz ? -1: 1);\n  });\n  var groupIds = new Array(grouplist.length);\n  for (var i=0; i< grouplist.length; i++){\n    groupIds[i] = grouplist[i].id;\n  }\n  return groupIds;\n}\n\n/**\n * Update and redraw the graph.\n *\n */\nLineGraph.prototype._updateGraph = function () {\n  // reset the svg elements\n  DOMutil.prepareElements(this.svgElements);\n  if (this.props.width != 0 && this.itemsData != null) {\n    var group, i;\n    var groupRanges = {};\n    var changeCalled = false;\n    // this is the range of the SVG canvas\n    var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width);\n    var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);\n\n    // getting group Ids\n    var groupIds = this._getSortedGroupIds();\n    if (groupIds.length > 0) {\n      var groupsData = {};\n\n      // fill groups data, this only loads the data we require based on the timewindow\n      this._getRelevantData(groupIds, groupsData, minDate, maxDate);\n\n      // apply sampling, if disabled, it will pass through this function.\n      this._applySampling(groupIds, groupsData);\n\n      // we transform the X coordinates to detect collisions\n      for (i = 0; i < groupIds.length; i++) {\n        this._convertXcoordinates(groupsData[groupIds[i]]);\n      }\n\n      // now all needed data has been collected we start the processing.\n      this._getYRanges(groupIds, groupsData, groupRanges);\n\n      // update the Y axis first, we use this data to draw at the correct Y points\n      changeCalled = this._updateYAxis(groupIds, groupRanges);\n\n      //  at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container.\n      //  Cleanup SVG elements on abort.\n      if (changeCalled == true) {\n        DOMutil.cleanupElements(this.svgElements);\n        this.abortedGraphUpdate = true;\n        return true;\n      }\n      this.abortedGraphUpdate = false;\n\n      // With the yAxis scaled correctly, use this to get the Y values of the points.\n      var below = undefined;\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (this.options.stack === true && this.options.style === 'line') {\n          if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) {\n            if (below != undefined) {\n              this._stack(groupsData[group.id], groupsData[below.id]);\n              if (group.options.shaded.enabled == true && group.options.shaded.orientation !== \"group\"){\n                if (group.options.shaded.orientation == \"top\" && below.options.shaded.orientation !== \"group\"){\n                  below.options.shaded.orientation=\"group\";\n                  below.options.shaded.groupId=group.id;\n                } else {\n                  group.options.shaded.orientation=\"group\";\n                  group.options.shaded.groupId=below.id;\n                }\n              }\n            }\n            below = group;\n          }\n        }\n        this._convertYcoordinates(groupsData[groupIds[i]], group);\n      }\n\n      //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines.\n      var paths = {};\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (group.options.style === 'line' && group.options.shaded.enabled == true) {\n          var dataset = groupsData[groupIds[i]];\n          if (dataset == null || dataset.length == 0) {\n            continue;\n          }\n          if (!paths.hasOwnProperty(groupIds[i])) {\n            paths[groupIds[i]] = Lines.calcPath(dataset, group);\n          }\n          if (group.options.shaded.orientation === \"group\") {\n            var subGroupId = group.options.shaded.groupId;\n            if (groupIds.indexOf(subGroupId) === -1) {\n              console.log(group.id + \": Unknown shading group target given:\" + subGroupId);\n              continue;\n            }\n            if (!paths.hasOwnProperty(subGroupId)) {\n              paths[subGroupId] = Lines.calcPath(groupsData[subGroupId], this.groups[subGroupId]);\n            }\n            Lines.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework);\n          }\n          else {\n            Lines.drawShading(paths[groupIds[i]], group, undefined, this.framework);\n          }\n        }\n      }\n\n      // draw the groups, calculating paths if still necessary.\n      Bars.draw(groupIds, groupsData, this.framework);\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (groupsData[groupIds[i]].length > 0) {\n          switch (group.options.style) {\n            case \"line\":\n              if (!paths.hasOwnProperty(groupIds[i])) {\n                paths[groupIds[i]] = Lines.calcPath(groupsData[groupIds[i]], group);\n              }\n              Lines.draw(paths[groupIds[i]], group, this.framework);\n            //explicit no break;\n            case \"point\":\n            //explicit no break;\n            case \"points\":\n              if (group.options.style == \"point\" || group.options.style == \"points\" || group.options.drawPoints.enabled == true) {\n                Points.draw(groupsData[groupIds[i]], group, this.framework);\n              }\n              break;\n            case \"bar\":\n            // bar needs to be drawn enmasse\n            //explicit no break\n            default:\n            //do nothing...\n          }\n        }\n\n      }\n    }\n  }\n\n  // cleanup unused svg elements\n  DOMutil.cleanupElements(this.svgElements);\n  return false;\n};\n\nLineGraph.prototype._stack = function (data, subData) {\n  var index, dx, dy, subPrevPoint, subNextPoint;\n  index = 0;\n  // for each data point we look for a matching on in the set below\n  for (var j = 0; j < data.length; j++) {\n    subPrevPoint = undefined;\n    subNextPoint = undefined;\n    // we look for time matches or a before-after point\n    for (var k = index; k < subData.length; k++) {\n      // if times match exactly\n      if (subData[k].x === data[j].x) {\n        subPrevPoint = subData[k];\n        subNextPoint = subData[k];\n        index = k;\n        break;\n      }\n      else if (subData[k].x > data[j].x) { // overshoot\n        subNextPoint = subData[k];\n        if (k == 0) {\n          subPrevPoint = subNextPoint;\n        }\n        else {\n          subPrevPoint = subData[k - 1];\n        }\n        index = k;\n        break;\n      }\n    }\n    // in case the last data point has been used, we assume it stays like this.\n    if (subNextPoint === undefined) {\n      subPrevPoint = subData[subData.length - 1];\n      subNextPoint = subData[subData.length - 1];\n    }\n    // linear interpolation\n    dx = subNextPoint.x - subPrevPoint.x;\n    dy = subNextPoint.y - subPrevPoint.y;\n    if (dx == 0) {\n      data[j].y = data[j].orginalY + subNextPoint.y;\n    }\n    else {\n      data[j].y = data[j].orginalY + (dy / dx) * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y\n    }\n  }\n}\n\n\n/**\n * first select and preprocess the data from the datasets.\n * the groups have their preselection of data, we now loop over this data to see\n * what data we need to draw. Sorted data is much faster.\n * more optimization is possible by doing the sampling before and using the binary search\n * to find the end date to determine the increment.\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {date}   minDate\n * @param {date}   maxDate\n * @private\n */\nLineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) {\n  var group, i, j, item;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      var itemsData = group.getItems();\n      // optimization for sorted data\n      if (group.options.sort == true) {\n        var dateComparator = function (a, b) {\n          return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1\n        };\n        var first = Math.max(0, util.binarySearchValue(itemsData, minDate, 'x', 'before', dateComparator));\n        var last = Math.min(itemsData.length, util.binarySearchValue(itemsData, maxDate, 'x', 'after', dateComparator) + 1);\n        if (last <= 0) {\n          last = itemsData.length;\n        }\n        var dataContainer = new Array(last-first);\n        for (j = first; j < last; j++) {\n          item = group.itemsData[j];\n          dataContainer[j-first] = item;\n        }\n        groupsData[groupIds[i]] = dataContainer;\n      }\n      else {\n        // If unsorted data, all data is relevant, just returning entire structure\n        groupsData[groupIds[i]] = group.itemsData;\n      }\n    }\n  }\n};\n\n\n/**\n *\n * @param groupIds\n * @param groupsData\n * @private\n */\nLineGraph.prototype._applySampling = function (groupIds, groupsData) {\n  var group;\n  if (groupIds.length > 0) {\n    for (var i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      if (group.options.sampling == true) {\n        var dataContainer = groupsData[groupIds[i]];\n        if (dataContainer.length > 0) {\n          var increment = 1;\n          var amountOfPoints = dataContainer.length;\n\n          // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop\n          // of width changing of the yAxis.\n          //TODO: This assumes sorted data, but that's not guaranteed!\n          var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x);\n          var pointsPerPixel = amountOfPoints / xDistance;\n          increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel)));\n\n          var sampledData = new Array(amountOfPoints);\n          for (var j = 0; j < amountOfPoints; j += increment) {\n            var idx = Math.round(j/increment);\n            sampledData[idx]=dataContainer[j];\n          }\n          groupsData[groupIds[i]] = sampledData.splice(0,Math.round(amountOfPoints/increment));\n        }\n      }\n    }\n  }\n};\n\n\n/**\n *\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {object} groupRanges  | this is being filled here\n * @private\n */\nLineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) {\n  var groupData, group, i;\n  var combinedDataLeft = [];\n  var combinedDataRight = [];\n  var options;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      groupData = groupsData[groupIds[i]];\n      options = this.groups[groupIds[i]].options;\n      if (groupData.length > 0) {\n        group = this.groups[groupIds[i]];\n        // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n        if (options.stack === true && options.style === 'bar') {\n          if (options.yAxisOrientation === 'left') {\n            combinedDataLeft = combinedDataLeft.concat(group.getItems());\n          }\n          else {\n            combinedDataRight = combinedDataRight.concat(group.getItems());\n          }\n        }\n        else {\n          groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]);\n        }\n      }\n    }\n\n    // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n    Bars.getStackedYRange(combinedDataLeft, groupRanges, groupIds, '__barStackLeft', 'left');\n    Bars.getStackedYRange(combinedDataRight, groupRanges, groupIds, '__barStackRight', 'right');\n  }\n};\n\n\n/**\n * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.\n * @param {Array} groupIds\n * @param {Object} groupRanges\n * @private\n */\nLineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {\n  var resized = false;\n  var yAxisLeftUsed = false;\n  var yAxisRightUsed = false;\n  var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal;\n  // if groups are present\n  if (groupIds.length > 0) {\n    // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop.\n    for (var i = 0; i < groupIds.length; i++) {\n      var group = this.groups[groupIds[i]];\n      if (group && group.options.yAxisOrientation != 'right') {\n        yAxisLeftUsed = true;\n        minLeft = 1e9;\n        maxLeft = -1e9;\n      }\n      else if (group && group.options.yAxisOrientation) {\n        yAxisRightUsed = true;\n        minRight = 1e9;\n        maxRight = -1e9;\n      }\n    }\n\n    // if there are items:\n    for (var i = 0; i < groupIds.length; i++) {\n      if (groupRanges.hasOwnProperty(groupIds[i])) {\n        if (groupRanges[groupIds[i]].ignore !== true) {\n          minVal = groupRanges[groupIds[i]].min;\n          maxVal = groupRanges[groupIds[i]].max;\n\n          if (groupRanges[groupIds[i]].yAxisOrientation != 'right') {\n            yAxisLeftUsed = true;\n            minLeft = minLeft > minVal ? minVal : minLeft;\n            maxLeft = maxLeft < maxVal ? maxVal : maxLeft;\n          }\n          else {\n            yAxisRightUsed = true;\n            minRight = minRight > minVal ? minVal : minRight;\n            maxRight = maxRight < maxVal ? maxVal : maxRight;\n          }\n        }\n      }\n    }\n\n    if (yAxisLeftUsed == true) {\n      this.yAxisLeft.setRange(minLeft, maxLeft);\n    }\n    if (yAxisRightUsed == true) {\n      this.yAxisRight.setRange(minRight, maxRight);\n    }\n  }\n  resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized;\n  resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized;\n\n  if (yAxisRightUsed == true && yAxisLeftUsed == true) {\n    this.yAxisLeft.drawIcons = true;\n    this.yAxisRight.drawIcons = true;\n  }\n  else {\n    this.yAxisLeft.drawIcons = false;\n    this.yAxisRight.drawIcons = false;\n  }\n  this.yAxisRight.master = !yAxisLeftUsed;\n  this.yAxisRight.masterAxis = this.yAxisLeft;\n\n  if (this.yAxisRight.master == false) {\n    if (yAxisRightUsed == true) {\n      this.yAxisLeft.lineOffset = this.yAxisRight.width;\n    }\n    else {\n      this.yAxisLeft.lineOffset = 0;\n    }\n\n    resized = this.yAxisLeft.redraw() || resized;\n    resized = this.yAxisRight.redraw() || resized;\n  }\n  else {\n    resized = this.yAxisRight.redraw() || resized;\n  }\n\n  // clean the accumulated lists\n  var tempGroups = ['__barStackLeft', '__barStackRight', '__lineStackLeft', '__lineStackRight'];\n  for (var i = 0; i < tempGroups.length; i++) {\n    if (groupIds.indexOf(tempGroups[i]) != -1) {\n      groupIds.splice(groupIds.indexOf(tempGroups[i]), 1);\n    }\n  }\n\n  return resized;\n};\n\n\n/**\n * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function\n *\n * @param {boolean} axisUsed\n * @returns {boolean}\n * @private\n * @param axis\n */\nLineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {\n  var changed = false;\n  if (axisUsed == false) {\n    if (axis.dom.frame.parentNode && axis.hidden == false) {\n      axis.hide();\n      changed = true;\n    }\n  }\n  else {\n    if (!axis.dom.frame.parentNode && axis.hidden == true) {\n      axis.show();\n      changed = true;\n    }\n  }\n  return changed;\n};\n\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param datapoints\n * @returns {Array}\n * @private\n */\nLineGraph.prototype._convertXcoordinates = function (datapoints) {\n  var toScreen = this.body.util.toScreen;\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width;\n    datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations\n  }\n};\n\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param datapoints\n * @param group\n * @returns {Array}\n * @private\n */\nLineGraph.prototype._convertYcoordinates = function (datapoints, group) {\n  var axis = this.yAxisLeft;\n  var svgHeight = Number(this.svg.style.height.replace('px', ''));\n  if (group.options.yAxisOrientation == 'right') {\n    axis = this.yAxisRight;\n  }\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y));\n  }\n  group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));\n};\n\n\nmodule.exports = LineGraph;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/LineGraph.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Component = require('./Component');\nvar DataScale = require('./DataScale');\n/**\n * A horizontal time axis\n * @param {Object} [options]        See DataAxis.setOptions for the available\n *                                  options.\n * @constructor DataAxis\n * @extends Component\n * @param body\n */\nfunction DataAxis(body, options, svg, linegraphOptions) {\n  this.id = util.randomUUID();\n  this.body = body;\n\n  this.defaultOptions = {\n    orientation: 'left',  // supported: 'left', 'right'\n    showMinorLabels: true,\n    showMajorLabels: true,\n    icons: false,\n    majorLinesOffset: 7,\n    minorLinesOffset: 4,\n    labelOffsetX: 10,\n    labelOffsetY: 2,\n    iconWidth: 20,\n    width: '40px',\n    visible: true,\n    alignZeros: true,\n    left: {\n      range: {min: undefined, max: undefined},\n      format: function (value) {\n        return '' + parseFloat(value.toPrecision(3));\n      },\n      title: {text: undefined, style: undefined}\n    },\n    right: {\n      range: {min: undefined, max: undefined},\n      format: function (value) {\n        return '' + parseFloat(value.toPrecision(3));\n      },\n      title: {text: undefined, style: undefined}\n    }\n  };\n\n  this.linegraphOptions = linegraphOptions;\n  this.linegraphSVG = svg;\n  this.props = {};\n  this.DOMelements = { // dynamic elements\n    lines: {},\n    labels: {},\n    title: {}\n  };\n\n  this.dom = {};\n  this.scale = undefined;\n  this.range = {start: 0, end: 0};\n\n  this.options = util.extend({}, this.defaultOptions);\n  this.conversionFactor = 1;\n\n  this.setOptions(options);\n  this.width = Number(('' + this.options.width).replace(\"px\", \"\"));\n  this.minWidth = this.width;\n  this.height = this.linegraphSVG.getBoundingClientRect().height;\n  this.hidden = false;\n\n  this.stepPixels = 25;\n  this.zeroCrossing = -1;\n  this.amountOfSteps = -1;\n\n  this.lineOffset = 0;\n  this.master = true;\n  this.masterAxis = null;\n  this.svgElements = {};\n  this.iconsRemoved = false;\n\n  this.groups = {};\n  this.amountOfGroups = 0;\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n\n  var me = this;\n  this.body.emitter.on(\"verticalDrag\", function () {\n    me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px';\n  });\n}\n\nDataAxis.prototype = new Component();\n\n\nDataAxis.prototype.addGroup = function (label, graphOptions) {\n  if (!this.groups.hasOwnProperty(label)) {\n    this.groups[label] = graphOptions;\n  }\n  this.amountOfGroups += 1;\n};\n\nDataAxis.prototype.updateGroup = function (label, graphOptions) {\n  if (!this.groups.hasOwnProperty(label)) {\n    this.amountOfGroups += 1;\n  }\n  this.groups[label] = graphOptions;\n};\n\nDataAxis.prototype.removeGroup = function (label) {\n  if (this.groups.hasOwnProperty(label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\n\n\nDataAxis.prototype.setOptions = function (options) {\n  if (options) {\n    var redraw = false;\n    if (this.options.orientation != options.orientation && options.orientation !== undefined) {\n      redraw = true;\n    }\n    var fields = [\n      'orientation',\n      'showMinorLabels',\n      'showMajorLabels',\n      'icons',\n      'majorLinesOffset',\n      'minorLinesOffset',\n      'labelOffsetX',\n      'labelOffsetY',\n      'iconWidth',\n      'width',\n      'visible',\n      'left',\n      'right',\n      'alignZeros'\n    ];\n    util.selectiveDeepExtend(fields, this.options, options);\n\n    this.minWidth = Number(('' + this.options.width).replace(\"px\", \"\"));\n    if (redraw === true && this.dom.frame) {\n      this.hide();\n      this.show();\n    }\n  }\n};\n\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype._create = function () {\n  this.dom.frame = document.createElement('div');\n  this.dom.frame.style.width = this.options.width;\n  this.dom.frame.style.height = this.height;\n\n  this.dom.lineContainer = document.createElement('div');\n  this.dom.lineContainer.style.width = '100%';\n  this.dom.lineContainer.style.height = this.height;\n  this.dom.lineContainer.style.position = 'relative';\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n  this.svg.style.position = \"absolute\";\n  this.svg.style.top = '0px';\n  this.svg.style.height = '100%';\n  this.svg.style.width = '100%';\n  this.svg.style.display = \"block\";\n  this.dom.frame.appendChild(this.svg);\n};\n\nDataAxis.prototype._redrawGroupIcons = function () {\n  DOMutil.prepareElements(this.svgElements);\n\n  var x;\n  var iconWidth = this.options.iconWidth;\n  var iconHeight = 15;\n  var iconOffset = 4;\n  var y = iconOffset + 0.5 * iconHeight;\n\n  if (this.options.orientation === 'left') {\n    x = iconOffset;\n  }\n  else {\n    x = this.width - iconWidth - iconOffset;\n  }\n\n  var groupArray = Object.keys(this.groups);\n  groupArray.sort(function (a, b) {\n    return (a < b ? -1 : 1);\n  })\n\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {\n      this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n      y += iconHeight + iconOffset;\n    }\n  }\n\n  DOMutil.cleanupElements(this.svgElements);\n  this.iconsRemoved = false;\n};\n\nDataAxis.prototype._cleanupIcons = function () {\n  if (this.iconsRemoved === false) {\n    DOMutil.prepareElements(this.svgElements);\n    DOMutil.cleanupElements(this.svgElements);\n    this.iconsRemoved = true;\n  }\n}\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype.show = function () {\n  this.hidden = false;\n  if (!this.dom.frame.parentNode) {\n    if (this.options.orientation === 'left') {\n      this.body.dom.left.appendChild(this.dom.frame);\n    }\n    else {\n      this.body.dom.right.appendChild(this.dom.frame);\n    }\n  }\n\n  if (!this.dom.lineContainer.parentNode) {\n    this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);\n  }\n};\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype.hide = function () {\n  this.hidden = true;\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n\n  if (this.dom.lineContainer.parentNode) {\n    this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer);\n  }\n};\n\n/**\n * Set a range (start and end)\n * @param end\n * @param start\n * @param end\n */\nDataAxis.prototype.setRange = function (start, end) {\n  this.range.start = start;\n  this.range.end = end;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nDataAxis.prototype.redraw = function () {\n  var resized = false;\n  var activeGroups = 0;\n\n  // Make sure the line container adheres to the vertical scrolling.\n  this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px';\n\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {\n        activeGroups++;\n      }\n    }\n  }\n  if (this.amountOfGroups === 0 || activeGroups === 0) {\n    this.hide();\n  }\n  else {\n    this.show();\n    this.height = Number(this.linegraphSVG.style.height.replace(\"px\", \"\"));\n\n    // svg offsetheight did not work in firefox and explorer...\n    this.dom.lineContainer.style.height = this.height + 'px';\n    this.width = this.options.visible === true ? Number(('' + this.options.width).replace(\"px\", \"\")) : 0;\n\n    var props = this.props;\n    var frame = this.dom.frame;\n\n    // update classname\n    frame.className = 'vis-data-axis';\n\n    // calculate character width and height\n    this._calculateCharSize();\n\n    var orientation = this.options.orientation;\n    var showMinorLabels = this.options.showMinorLabels;\n    var showMajorLabels = this.options.showMajorLabels;\n\n    // determine the width and height of the elements for the axis\n    props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n    props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n\n    props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;\n    props.minorLineHeight = 1;\n    props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;\n    props.majorLineHeight = 1;\n\n    //  take frame offline while updating (is almost twice as fast)\n    if (orientation === 'left') {\n      frame.style.top = '0';\n      frame.style.left = '0';\n      frame.style.bottom = '';\n      frame.style.width = this.width + 'px';\n      frame.style.height = this.height + \"px\";\n      this.props.width = this.body.domProps.left.width;\n      this.props.height = this.body.domProps.left.height;\n    }\n    else { // right\n      frame.style.top = '';\n      frame.style.bottom = '0';\n      frame.style.left = '0';\n      frame.style.width = this.width + 'px';\n      frame.style.height = this.height + \"px\";\n      this.props.width = this.body.domProps.right.width;\n      this.props.height = this.body.domProps.right.height;\n    }\n\n    resized = this._redrawLabels();\n    resized = this._isResized() || resized;\n\n    if (this.options.icons === true) {\n      this._redrawGroupIcons();\n    }\n    else {\n      this._cleanupIcons();\n    }\n\n    this._redrawTitle(orientation);\n  }\n  return resized;\n};\n\n/**\n * Repaint major and minor text labels and vertical grid lines\n * @private\n */\nDataAxis.prototype._redrawLabels = function () {\n  var resized = false;\n  DOMutil.prepareElements(this.DOMelements.lines);\n  DOMutil.prepareElements(this.DOMelements.labels);\n  var orientation = this.options['orientation'];\n  var customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {};\n\n  //Override range with manual options:\n  var autoScaleEnd = true;\n  if (customRange.max != undefined) {\n    this.range.end = customRange.max;\n    autoScaleEnd = false;\n  }\n  var autoScaleStart = true;\n  if (customRange.min != undefined) {\n    this.range.start = customRange.min;\n    autoScaleStart = false;\n  }\n\n  this.scale = new DataScale(\n    this.range.start,\n    this.range.end,\n    autoScaleStart,\n    autoScaleEnd,\n    this.dom.frame.offsetHeight,\n    this.props.majorCharHeight,\n    this.options.alignZeros,\n    this.options[orientation].format\n  );\n\n  if (this.master === false && this.masterAxis != undefined) {\n    this.scale.followScale(this.masterAxis.scale);\n  }\n\n  //Is updated in side-effect of _redrawLabel():\n  this.maxLabelSize = 0;\n\n  var lines = this.scale.getLines();\n  lines.forEach(\n    line=> {\n      var y = line.y;\n      var isMajor = line.major;\n      if (this.options['showMinorLabels'] && isMajor === false) {\n        this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-minor', this.props.minorCharHeight);\n      }\n      if (isMajor) {\n        if (y >= 0) {\n          this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-major', this.props.majorCharHeight);\n        }\n      }\n      if (this.master === true) {\n        if (isMajor) {\n          this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-major', this.options.majorLinesOffset, this.props.majorLineWidth);\n        }\n        else {\n          this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-minor', this.options.minorLinesOffset, this.props.minorLineWidth);\n        }\n      }\n    });\n\n  // Note that title is rotated, so we're using the height, not width!\n  var titleWidth = 0;\n  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n    titleWidth = this.props.titleCharHeight;\n  }\n  var offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15;\n\n  // this will resize the yAxis to accommodate the labels.\n  if (this.maxLabelSize > (this.width - offset) && this.options.visible === true) {\n    this.width = this.maxLabelSize + offset;\n    this.options.width = this.width + \"px\";\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    this.redraw();\n    resized = true;\n  }\n  // this will resize the yAxis if it is too big for the labels.\n  else if (this.maxLabelSize < (this.width - offset) && this.options.visible === true && this.width > this.minWidth) {\n    this.width = Math.max(this.minWidth, this.maxLabelSize + offset);\n    this.options.width = this.width + \"px\";\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    this.redraw();\n    resized = true;\n  }\n  else {\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    resized = false;\n  }\n\n  return resized;\n};\n\nDataAxis.prototype.convertValue = function (value) {\n  return this.scale.convertValue(value);\n};\n\nDataAxis.prototype.screenToValue = function (x) {\n  return this.scale.screenToValue(x);\n};\n\n/**\n * Create a label for the axis at position x\n * @private\n * @param y\n * @param text\n * @param orientation\n * @param className\n * @param characterHeight\n */\nDataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) {\n  // reuse redundant label\n  var label = DOMutil.getDOMElement('div', this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift();\n  label.className = className;\n  label.innerHTML = text;\n  if (orientation === 'left') {\n    label.style.left = '-' + this.options.labelOffsetX + 'px';\n    label.style.textAlign = \"right\";\n  }\n  else {\n    label.style.right = '-' + this.options.labelOffsetX + 'px';\n    label.style.textAlign = \"left\";\n  }\n\n  label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px';\n\n  text += '';\n\n  var largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth);\n  if (this.maxLabelSize < text.length * largestWidth) {\n    this.maxLabelSize = text.length * largestWidth;\n  }\n};\n\n/**\n * Create a minor line for the axis at position y\n * @param y\n * @param orientation\n * @param className\n * @param offset\n * @param width\n */\nDataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) {\n  if (this.master === true) {\n    var line = DOMutil.getDOMElement('div', this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift();\n    line.className = className;\n    line.innerHTML = '';\n\n    if (orientation === 'left') {\n      line.style.left = (this.width - offset) + 'px';\n    }\n    else {\n      line.style.right = (this.width - offset) + 'px';\n    }\n\n    line.style.width = width + 'px';\n    line.style.top = y + 'px';\n  }\n};\n\n/**\n * Create a title for the axis\n * @private\n * @param orientation\n */\nDataAxis.prototype._redrawTitle = function (orientation) {\n  DOMutil.prepareElements(this.DOMelements.title);\n\n  // Check if the title is defined for this axes\n  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n    var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame);\n    title.className = 'vis-y-axis vis-title vis-' + orientation;\n    title.innerHTML = this.options[orientation].title.text;\n\n    // Add style - if provided\n    if (this.options[orientation].title.style !== undefined) {\n      util.addCssText(title, this.options[orientation].title.style);\n    }\n\n    if (orientation === 'left') {\n      title.style.left = this.props.titleCharHeight + 'px';\n    }\n    else {\n      title.style.right = this.props.titleCharHeight + 'px';\n    }\n\n    title.style.width = this.height + 'px';\n  }\n\n  // we need to clean up in case we did not use all elements.\n  DOMutil.cleanupElements(this.DOMelements.title);\n};\n\n\n/**\n * Determine the size of text on the axis (both major and minor axis).\n * The size is calculated only once and then cached in this.props.\n * @private\n */\nDataAxis.prototype._calculateCharSize = function () {\n  // determine the char width and height on the minor axis\n  if (!('minorCharHeight' in this.props)) {\n    var textMinor = document.createTextNode('0');\n    var measureCharMinor = document.createElement('div');\n    measureCharMinor.className = 'vis-y-axis vis-minor vis-measure';\n    measureCharMinor.appendChild(textMinor);\n    this.dom.frame.appendChild(measureCharMinor);\n\n    this.props.minorCharHeight = measureCharMinor.clientHeight;\n    this.props.minorCharWidth = measureCharMinor.clientWidth;\n\n    this.dom.frame.removeChild(measureCharMinor);\n  }\n\n  if (!('majorCharHeight' in this.props)) {\n    var textMajor = document.createTextNode('0');\n    var measureCharMajor = document.createElement('div');\n    measureCharMajor.className = 'vis-y-axis vis-major vis-measure';\n    measureCharMajor.appendChild(textMajor);\n    this.dom.frame.appendChild(measureCharMajor);\n\n    this.props.majorCharHeight = measureCharMajor.clientHeight;\n    this.props.majorCharWidth = measureCharMajor.clientWidth;\n\n    this.dom.frame.removeChild(measureCharMajor);\n  }\n\n  if (!('titleCharHeight' in this.props)) {\n    var textTitle = document.createTextNode('0');\n    var measureCharTitle = document.createElement('div');\n    measureCharTitle.className = 'vis-y-axis vis-title vis-measure';\n    measureCharTitle.appendChild(textTitle);\n    this.dom.frame.appendChild(measureCharTitle);\n\n    this.props.titleCharHeight = measureCharTitle.clientHeight;\n    this.props.titleCharWidth = measureCharTitle.clientWidth;\n\n    this.dom.frame.removeChild(measureCharTitle);\n  }\n};\n\nmodule.exports = DataAxis;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/DataAxis.js","/**\n * Created by ludo on 25-1-16.\n */\n\nfunction DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight, zeroAlign = false, formattingFunction=false) {\n  this.majorSteps = [1, 2, 5, 10];\n  this.minorSteps = [0.25, 0.5, 1, 2];\n  this.customLines = null;\n\n  this.containerHeight = containerHeight;\n  this.majorCharHeight = majorCharHeight;\n  this._start = start;\n  this._end = end;\n\n  this.scale = 1;\n  this.minorStepIdx = -1;\n  this.magnitudefactor = 1;\n  this.determineScale();\n\n  this.zeroAlign = zeroAlign;\n  this.autoScaleStart = autoScaleStart;\n  this.autoScaleEnd = autoScaleEnd;\n\n  this.formattingFunction = formattingFunction;\n\n  if (autoScaleStart || autoScaleEnd) {\n    var me = this;\n    var roundToMinor = function (value) {\n      var rounded = value - (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]));\n      if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) {\n        return rounded + (me.magnitudefactor * me.minorSteps[me.minorStepIdx]);\n      }\n      else {\n        return rounded;\n      }\n    };\n    if (autoScaleStart) {\n      this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx];\n      this._start = roundToMinor(this._start);\n    }\n\n    if (autoScaleEnd) {\n      this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n      this._end = roundToMinor(this._end);\n    }\n    this.determineScale();\n  }\n}\n\nDataScale.prototype.setCharHeight = function (majorCharHeight) {\n  this.majorCharHeight = majorCharHeight;\n};\n\nDataScale.prototype.setHeight = function (containerHeight) {\n  this.containerHeight = containerHeight;\n};\n\nDataScale.prototype.determineScale = function () {\n  var range = this._end - this._start;\n  this.scale = this.containerHeight / range;\n  var minimumStepValue = this.majorCharHeight / this.scale;\n  var orderOfMagnitude = (range > 0)\n      ? Math.round(Math.log(range) / Math.LN10)\n      : 0;\n\n  this.minorStepIdx = -1;\n  this.magnitudefactor = Math.pow(10, orderOfMagnitude);\n\n  var start = 0;\n  if (orderOfMagnitude < 0) {\n    start = orderOfMagnitude;\n  }\n\n  var solutionFound = false;\n  for (var l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) {\n    this.magnitudefactor = Math.pow(10, l);\n    for (var j = 0; j < this.minorSteps.length; j++) {\n      var stepSize = this.magnitudefactor * this.minorSteps[j];\n      if (stepSize >= minimumStepValue) {\n        solutionFound = true;\n        this.minorStepIdx = j;\n        break;\n      }\n    }\n    if (solutionFound === true) {\n      break;\n    }\n  }\n};\n\nDataScale.prototype.is_major = function (value) {\n  return (value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0);\n};\n\nDataScale.prototype.getStep = function(){\n  return this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n};\n\nDataScale.prototype.getFirstMajor = function(){\n  var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n  return this.convertValue(this._start + ((majorStep - (this._start % majorStep)) % majorStep));\n};\n\nDataScale.prototype.formatValue = function(current) {\n  var returnValue = current.toPrecision(5);\n  if (typeof this.formattingFunction === 'function') {\n    returnValue = this.formattingFunction(current);\n  }\n\n  if (typeof returnValue === 'number') {\n    return '' + returnValue;\n  }\n  else if (typeof returnValue === 'string') {\n    return returnValue;\n  }\n  else {\n    return current.toPrecision(5);\n  }\n\n};\n\nDataScale.prototype.getLines = function () {\n  var lines = [];\n  var step = this.getStep();\n  var bottomOffset = (step - (this._start % step)) % step;\n  for (var i = (this._start + bottomOffset); this._end-i > 0.00001; i += step) {\n    if (i != this._start) { //Skip the bottom line\n      lines.push({major: this.is_major(i), y: this.convertValue(i), val: this.formatValue(i)});\n    }\n  }\n  return lines;\n};\n\nDataScale.prototype.followScale = function (other) {\n  var oldStepIdx = this.minorStepIdx;\n  var oldStart = this._start;\n  var oldEnd = this._end;\n\n  var me = this;\n  var increaseMagnitude = function () {\n    me.magnitudefactor *= 2;\n  };\n  var decreaseMagnitude = function () {\n    me.magnitudefactor /= 2;\n  };\n\n  if ((other.minorStepIdx <= 1 && this.minorStepIdx <= 1) || (other.minorStepIdx > 1 && this.minorStepIdx > 1)) {\n    //easy, no need to change stepIdx nor multiplication factor\n  } else if (other.minorStepIdx < this.minorStepIdx) {\n    //I'm 5, they are 4 per major.\n    this.minorStepIdx = 1;\n    if (oldStepIdx == 2) {\n      increaseMagnitude();\n    } else {\n      increaseMagnitude();\n      increaseMagnitude();\n    }\n  } else {\n    //I'm 4, they are 5 per major\n    this.minorStepIdx = 2;\n    if (oldStepIdx == 1) {\n      decreaseMagnitude();\n    } else {\n      decreaseMagnitude();\n      decreaseMagnitude();\n    }\n  }\n\n  //Get masters stats:\n  var lines = other.getLines();\n  var otherZero = other.convertValue(0);\n  var otherStep = other.getStep() * other.scale;\n\n  var done = false;\n  var count = 0;\n  //Loop until magnitude is correct for given constrains.\n  while (!done && count++ <5) {\n\n    //Get my stats:\n    this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor);\n    var newRange = this.containerHeight / this.scale;\n\n    //For the case the magnitudefactor has changed:\n    this._start = oldStart;\n    this._end = this._start + newRange;\n\n    var myOriginalZero = this._end * this.scale;\n    var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n    var majorOffset = this.getFirstMajor() - other.getFirstMajor();\n\n    if (this.zeroAlign) {\n      var zeroOffset = otherZero - myOriginalZero;\n      this._end += (zeroOffset / this.scale);\n      this._start = this._end - newRange;\n    } else {\n      if (!this.autoScaleStart) {\n        this._start += majorStep - (majorOffset / this.scale);\n        this._end = this._start + newRange;\n      } else {\n        this._start -= majorOffset / this.scale;\n        this._end = this._start + newRange;\n      }\n    }\n    if (!this.autoScaleEnd && this._end > oldEnd+0.00001) {\n      //Need to decrease magnitude to prevent scale overshoot! (end)\n      decreaseMagnitude();\n      done = false;\n      continue;\n    }\n    if (!this.autoScaleStart && this._start < oldStart-0.00001) {\n      if (this.zeroAlign && oldStart >= 0) {\n        console.warn(\"Can't adhere to given 'min' range, due to zeroalign\");\n      } else {\n        //Need to decrease magnitude to prevent scale overshoot! (start)\n        decreaseMagnitude();\n        done = false;\n        continue;\n      }\n    }\n    if (this.autoScaleStart && this.autoScaleEnd && newRange < (oldEnd-oldStart)){\n      increaseMagnitude();\n      done = false;\n      continue;\n    }\n    done = true;\n  }\n};\n\nDataScale.prototype.convertValue = function (value) {\n  return this.containerHeight - ((value - this._start) * this.scale);\n};\n\nDataScale.prototype.screenToValue = function (pixels) {\n  return ((this.containerHeight - pixels) / this.scale) + this._start;\n};\n\nmodule.exports = DataScale;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/DataScale.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Bars = require('./graph2d_types/bar');\nvar Lines = require('./graph2d_types/line');\nvar Points = require('./graph2d_types/points');\n\n/**\n * /**\n * @param {object} group            | the object of the group from the dataset\n * @param {string} groupId          | ID of the group\n * @param {object} options          | the default options\n * @param {array} groupsUsingDefaultStyles  | this array has one entree.\n *                                            It is passed as an array so it is passed by reference.\n *                                            It enumerates through the default styles\n * @constructor\n */\nfunction GraphGroup(group, groupId, options, groupsUsingDefaultStyles) {\n  this.id = groupId;\n  var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'drawPoints', 'shaded', 'interpolation', 'zIndex','excludeFromStacking', 'excludeFromLegend'];\n  this.options = util.selectiveBridgeObject(fields, options);\n  this.usingDefaultStyle = group.className === undefined;\n  this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;\n  this.zeroPosition = 0;\n  this.update(group);\n  if (this.usingDefaultStyle == true) {\n    this.groupsUsingDefaultStyles[0] += 1;\n  }\n  this.itemsData = [];\n  this.visible = group.visible === undefined ? true : group.visible;\n}\n\n/**\n * this loads a reference to all items in this group into this group.\n * @param {array} items\n */\nGraphGroup.prototype.setItems = function (items) {\n  if (items != null) {\n    this.itemsData = items;\n    if (this.options.sort == true) {\n      util.insertSort(this.itemsData,function (a, b) {\n        return a.x > b.x ? 1 : -1;\n      });\n    }\n  }\n  else {\n    this.itemsData = [];\n  }\n};\n\nGraphGroup.prototype.getItems = function () {\n  return this.itemsData;\n}\n\n/**\n * this is used for barcharts and shading, this way, we only have to calculate it once.\n * @param pos\n */\nGraphGroup.prototype.setZeroPosition = function (pos) {\n  this.zeroPosition = pos;\n};\n\n/**\n * set the options of the graph group over the default options.\n * @param options\n */\nGraphGroup.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'zIndex','excludeFromStacking', 'excludeFromLegend'];\n    util.selectiveDeepExtend(fields, this.options, options);\n\n    // if the group's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == 'function') {\n      options.drawPoints = {\n        onRender: options.drawPoints\n      }\n    }\n\n    util.mergeOptions(this.options, options, 'interpolation');\n    util.mergeOptions(this.options, options, 'drawPoints');\n    util.mergeOptions(this.options, options, 'shaded');\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == 'object') {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == 'uniform') {\n            this.options.interpolation.alpha = 0;\n          }\n          else if (options.interpolation.parametrization == 'chordal') {\n            this.options.interpolation.alpha = 1.0;\n          }\n          else {\n            this.options.interpolation.parametrization = 'centripetal';\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n  }\n};\n\n\n/**\n * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph\n * @param group\n */\nGraphGroup.prototype.update = function (group) {\n  this.group = group;\n  this.content = group.content || 'graph';\n  this.className = group.className || this.className || 'vis-graph-group' + this.groupsUsingDefaultStyles[0] % 10;\n  this.visible = group.visible === undefined ? true : group.visible;\n  this.style = group.style;\n  this.setOptions(group.options);\n};\n\n/**\n * return the legend entree for this group.\n *\n * @param iconWidth\n * @param iconHeight\n * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}}\n */\nGraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) {\n  if (framework == undefined || framework == null) {\n    var svg = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n    framework = {svg: svg, svgElements:{}, options: this.options, groups: [this]}\n  }\n  if (x == undefined || x == null){\n    x = 0;\n  }\n  if (y == undefined || y == null){\n    y = 0.5 * iconHeight;\n  }\n  switch (this.options.style){\n    case \"line\":\n      Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"points\": //explicit no break\n    case \"point\":\n      Points.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"bar\":\n      Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n  }\n  return {icon: framework.svg, label: this.content, orientation: this.options.yAxisOrientation};\n};\n\nGraphGroup.prototype.getYRange = function (groupData) {\n  var yMin = groupData[0].y;\n  var yMax = groupData[0].y;\n  for (var j = 0; j < groupData.length; j++) {\n    yMin = yMin > groupData[j].y ? groupData[j].y : yMin;\n    yMax = yMax < groupData[j].y ? groupData[j].y : yMax;\n  }\n  return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation};\n};\n\nmodule.exports = GraphGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/GraphGroup.js","var DOMutil = require('../../../DOMutil');\nvar Points = require('./points');\n\nfunction Bargraph(groupId, options) {\n}\n\nBargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n\n  var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  var barWidth = Math.round(0.3 * iconWidth);\n  var originalWidth = group.options.barChart.width;\n  var scale = originalWidth / barWidth;\n  var bar1Height = Math.round(0.4 * iconHeight);\n  var bar2Height = Math.round(0.75 * iconHeight);\n\n  var offset = Math.round((iconWidth - (2 * barWidth)) / 3);\n\n  DOMutil.drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n  DOMutil.drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: (group.options.drawPoints.size / scale),\n      className: group.className\n    };\n    DOMutil.drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg);\n    DOMutil.drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg);\n  }\n\n}\n\n/**\n * draw a bar graph\n *\n * @param groupIds\n * @param processedGroupData\n */\nBargraph.draw = function (groupIds, processedGroupData, framework) {\n  var combinedData = [];\n  var intersections = {};\n  var coreDistance;\n  var key, drawData;\n  var group;\n  var i, j;\n  var barPoints = 0;\n\n  // combine all barchart data\n  for (i = 0; i < groupIds.length; i++) {\n    group = framework.groups[groupIds[i]];\n    if (group.options.style === 'bar') {\n      if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) {\n        for (j = 0; j < processedGroupData[groupIds[i]].length; j++) {\n          combinedData.push({\n            screen_x: processedGroupData[groupIds[i]][j].screen_x,\n            screen_y: processedGroupData[groupIds[i]][j].screen_y,\n            x: processedGroupData[groupIds[i]][j].x,\n            y: processedGroupData[groupIds[i]][j].y,\n            groupId: groupIds[i],\n            label: processedGroupData[groupIds[i]][j].label\n          });\n          barPoints += 1;\n        }\n      }\n    }\n  }\n\n  if (barPoints === 0) {\n    return;\n  }\n\n  // sort by time and by group\n  combinedData.sort(function (a, b) {\n    if (a.screen_x === b.screen_x) {\n      return a.groupId < b.groupId ? -1 : 1;\n    }\n    else {\n      return a.screen_x - b.screen_x;\n    }\n  });\n\n  // get intersections\n  Bargraph._getDataIntersections(intersections, combinedData);\n\n  // plot barchart\n  for (i = 0; i < combinedData.length; i++) {\n    group = framework.groups[combinedData[i].groupId];\n    var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width;\n\n    key = combinedData[i].screen_x;\n    var heightOffset = 0;\n    if (intersections[key] === undefined) {\n      if (i + 1 < combinedData.length) {\n        coreDistance = Math.abs(combinedData[i + 1].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n    }\n    else {\n      var nextKey = i + (intersections[key].amount - intersections[key].resolved);\n      var prevKey = i - (intersections[key].resolved + 1);\n      if (nextKey < combinedData.length) {\n        coreDistance = Math.abs(combinedData[nextKey].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n      intersections[key].resolved += 1;\n\n      if (group.options.stack === true && group.options.excludeFromStacking !== true) {\n        if (combinedData[i].screen_y < group.zeroPosition) {\n          heightOffset = intersections[key].accumulatedNegative;\n          intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y;\n        }\n        else {\n          heightOffset = intersections[key].accumulatedPositive;\n          intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y;\n        }\n      }\n      else if (group.options.barChart.sideBySide === true) {\n        drawData.width = drawData.width / intersections[key].amount;\n        drawData.offset += (intersections[key].resolved) * drawData.width - (0.5 * drawData.width * (intersections[key].amount + 1));\n      }\n    }\n    DOMutil.drawBar(combinedData[i].screen_x + drawData.offset, combinedData[i].screen_y - heightOffset, drawData.width, group.zeroPosition - combinedData[i].screen_y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n    // draw points\n    if (group.options.drawPoints.enabled === true) {\n      let pointData = {\n        screen_x: combinedData[i].screen_x,\n        screen_y: combinedData[i].screen_y - heightOffset,\n        x: combinedData[i].x,\n        y: combinedData[i].y,\n        groupId: combinedData[i].groupId,\n        label: combinedData[i].label\n      };\n      Points.draw([pointData], group, framework, drawData.offset);\n      //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg);\n    }\n  }\n};\n\n\n/**\n * Fill the intersections object with counters of how many datapoints share the same x coordinates\n * @param intersections\n * @param combinedData\n * @private\n */\nBargraph._getDataIntersections = function (intersections, combinedData) {\n  // get intersections\n  var coreDistance;\n  for (var i = 0; i < combinedData.length; i++) {\n    if (i + 1 < combinedData.length) {\n      coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x);\n    }\n    if (i > 0) {\n      coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x));\n    }\n    if (coreDistance === 0) {\n      if (intersections[combinedData[i].screen_x] === undefined) {\n        intersections[combinedData[i].screen_x] = {\n          amount: 0,\n          resolved: 0,\n          accumulatedPositive: 0,\n          accumulatedNegative: 0\n        };\n      }\n      intersections[combinedData[i].screen_x].amount += 1;\n    }\n  }\n};\n\n\n/**\n * Get the width and offset for bargraphs based on the coredistance between datapoints\n *\n * @param coreDistance\n * @param group\n * @param minWidth\n * @returns {{width: Number, offset: Number}}\n * @private\n */\nBargraph._getSafeDrawData = function (coreDistance, group, minWidth) {\n  var width, offset;\n  if (coreDistance < group.options.barChart.width && coreDistance > 0) {\n    width = coreDistance < minWidth ? minWidth : coreDistance\n\n    offset = 0; // recalculate offset with the new width;\n    if (group.options.barChart.align === 'left') {\n      offset -= 0.5 * coreDistance;\n    }\n    else if (group.options.barChart.align === 'right') {\n      offset += 0.5 * coreDistance;\n    }\n  }\n  else {\n    // default settings\n    width = group.options.barChart.width;\n    offset = 0;\n    if (group.options.barChart.align === 'left') {\n      offset -= 0.5 * group.options.barChart.width;\n    }\n    else if (group.options.barChart.align === 'right') {\n      offset += 0.5 * group.options.barChart.width;\n    }\n  }\n\n  return {width: width, offset: offset};\n};\n\nBargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) {\n  if (combinedData.length > 0) {\n    // sort by time and by group\n    combinedData.sort(function (a, b) {\n      if (a.screen_x === b.screen_x) {\n        return a.groupId < b.groupId ? -1 : 1;\n      }\n      else {\n        return a.screen_x - b.screen_x;\n      }\n    });\n    var intersections = {};\n\n    Bargraph._getDataIntersections(intersections, combinedData);\n    groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData);\n    groupRanges[groupLabel].yAxisOrientation = orientation;\n    groupIds.push(groupLabel);\n  }\n}\n\nBargraph._getStackedYRange = function (intersections, combinedData) {\n  var key;\n  var yMin = combinedData[0].screen_y;\n  var yMax = combinedData[0].screen_y;\n  for (var i = 0; i < combinedData.length; i++) {\n    key = combinedData[i].screen_x;\n    if (intersections[key] === undefined) {\n      yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin;\n      yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax;\n    }\n    else {\n      if (combinedData[i].screen_y < 0) {\n        intersections[key].accumulatedNegative += combinedData[i].screen_y;\n      }\n      else {\n        intersections[key].accumulatedPositive += combinedData[i].screen_y;\n      }\n    }\n  }\n  for (var xpos in intersections) {\n    if (intersections.hasOwnProperty(xpos)) {\n      yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin;\n      yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin;\n      yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax;\n      yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax;\n    }\n  }\n\n  return {min: yMin, max: yMax};\n};\n\nmodule.exports = Bargraph;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/bar.js","var DOMutil = require('../../../DOMutil');\n\nfunction Points(groupId, options) {\n}\n\n/**\n * draw the data points\n *\n * @param {Array} dataset\n * @param {Object} JSONcontainer\n * @param {Object} svg            | SVG DOM element\n * @param {GraphGroup} group\n * @param {Number} [offset]\n */\nPoints.draw = function (dataset, group, framework, offset) {\n  offset = offset || 0;\n  var callback = getCallback(framework, group);\n\n  for (var i = 0; i < dataset.length; i++) {\n    if (!callback) {\n      // draw the point the simple way.\n      DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label);\n    }\n    else {\n      var callbackResult = callback(dataset[i], group); // result might be true, false or an object\n      if (callbackResult === true || typeof callbackResult === 'object') {\n        DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label);\n      }\n    }\n  }\n};\n\nPoints.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n\n  var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  //Don't call callback on icon\n  DOMutil.drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg);\n};\n\nfunction getGroupTemplate(group, callbackResult) {\n  callbackResult = (typeof callbackResult === 'undefined') ? {} : callbackResult;\n  return {\n    style: callbackResult.style || group.options.drawPoints.style,\n    styles: callbackResult.styles || group.options.drawPoints.styles,\n    size: callbackResult.size || group.options.drawPoints.size,\n    className: callbackResult.className || group.className\n  };\n}\n\nfunction getCallback(framework, group) {\n  var callback = undefined;\n  // check for the graph2d onRender\n  if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == 'function') {\n    callback = framework.options.drawPoints.onRender;\n  }\n\n  // override it with the group onRender if defined\n  if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == 'function') {\n    callback = group.group.options.drawPoints.onRender;\n  }\n  return callback;\n}\n\n\nmodule.exports = Points;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/points.js","var DOMutil = require('../../../DOMutil');\n\nfunction Line(groupId, options) {\n}\n\nLine.calcPath = function (dataset, group) {\n    if (dataset != null) {\n        if (dataset.length > 0) {\n            var d = [];\n\n            // construct path from dataset\n            if (group.options.interpolation.enabled == true) {\n                d = Line._catmullRom(dataset, group);\n            }\n            else {\n                d = Line._linear(dataset);\n            }\n            return d;\n        }\n    }\n}\n\nLine.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n    var fillHeight = iconHeight * 0.5;\n    var path, fillPath;\n\n    var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n    outline.setAttributeNS(null, \"x\", x);\n    outline.setAttributeNS(null, \"y\", y - fillHeight);\n    outline.setAttributeNS(null, \"width\", iconWidth);\n    outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n    outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n    path = DOMutil.getSVGElement(\"path\", framework.svgElements, framework.svg);\n    path.setAttributeNS(null, \"class\", group.className);\n    if (group.style !== undefined) {\n        path.setAttributeNS(null, \"style\", group.style);\n    }\n\n    path.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \"\");\n    if (group.options.shaded.enabled == true) {\n        fillPath = DOMutil.getSVGElement(\"path\", framework.svgElements, framework.svg);\n        if (group.options.shaded.orientation == 'top') {\n            fillPath.setAttributeNS(null, \"d\", \"M\" + x + \", \" + (y - fillHeight) +\n              \"L\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \" L\" + (x + iconWidth) + \",\" + (y - fillHeight));\n        }\n        else {\n            fillPath.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" \" +\n              \"L\" + x + \",\" + (y + fillHeight) + \" \" +\n              \"L\" + (x + iconWidth) + \",\" + (y + fillHeight) +\n              \"L\" + (x + iconWidth) + \",\" + y);\n        }\n        fillPath.setAttributeNS(null, \"class\", group.className + \" vis-icon-fill\");\n        if (group.options.shaded.style !== undefined && group.options.shaded.style !== \"\") {\n            fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n        }\n    }\n\n    if (group.options.drawPoints.enabled == true) {\n        var groupTemplate = {\n            style: group.options.drawPoints.style,\n            styles: group.options.drawPoints.styles,\n            size: group.options.drawPoints.size,\n            className: group.className\n        };\n        DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg);\n    }\n}\n\nLine.drawShading = function (pathArray, group, subPathArray, framework) {\n    // append shading to the path\n    if (group.options.shaded.enabled == true) {\n        var svgHeight = Number(framework.svg.style.height.replace('px',''));\n        var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);\n        var type = \"L\";\n        if (group.options.interpolation.enabled == true){\n            type = \"C\";\n        }\n        var dFill;\n        var zero = 0;\n        if (group.options.shaded.orientation == 'top') {\n            zero = 0;\n        }\n        else if (group.options.shaded.orientation == 'bottom') {\n            zero = svgHeight;\n        }\n        else {\n            zero = Math.min(Math.max(0, group.zeroPosition), svgHeight);\n        }\n        if (group.options.shaded.orientation == 'group' && (subPathArray != null && subPathArray != undefined)) {\n            dFill = 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" +\n                    this.serializePath(pathArray,type,false) +\n                    ' L'+ subPathArray[subPathArray.length-1][0]+ \",\" + subPathArray[subPathArray.length-1][1] + \" \" +\n                    this.serializePath(subPathArray,type,true) +\n                    subPathArray[0][0]+ \",\"+subPathArray[0][1] + \" Z\";\n        }\n        else {\n            dFill = 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" +\n                    this.serializePath(pathArray,type,false) +\n                    ' V' + zero + ' H'+ pathArray[0][0] + \" Z\";\n        }\n\n        fillPath.setAttributeNS(null, 'class', group.className + ' vis-fill');\n        if (group.options.shaded.style !== undefined) {\n            fillPath.setAttributeNS(null, 'style', group.options.shaded.style);\n        }\n        fillPath.setAttributeNS(null, 'd', dFill);\n    }\n}\n\n/**\n * draw a line graph\n *\n * @param dataset\n * @param group\n */\nLine.draw = function (pathArray, group, framework) {\n    if (pathArray != null && pathArray != undefined) {\n        var path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);\n        path.setAttributeNS(null, \"class\", group.className);\n        if (group.style !== undefined) {\n            path.setAttributeNS(null, \"style\", group.style);\n        }\n\n        var type = \"L\";\n        if (group.options.interpolation.enabled == true){\n            type = \"C\";\n        }\n        // copy properties to path for drawing.\n        path.setAttributeNS(null, 'd', 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" + this.serializePath(pathArray,type,false));\n    }\n};\n\nLine.serializePath = function(pathArray,type,inverse){\n    if (pathArray.length < 2){\n        //Too little data to create a path.\n        return \"\";\n    }\n    var d = type;\n    if (inverse){\n        for (var i = pathArray.length-2; i > 0; i--){\n            d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n        }\n    }\n    else {\n        for (var i = 1; i < pathArray.length; i++){\n            d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n        }\n    }\n    return d;\n}\n\n/**\n * This uses an uniform parametrization of the interpolation algorithm:\n * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al.\n * @param data\n * @returns {string}\n * @private\n */\nLine._catmullRomUniform = function (data) {\n    // catmull rom\n    var p0, p1, p2, p3, bp1, bp2;\n    var d = [];\n    d.push( [ Math.round(data[0].screen_x) , Math.round(data[0].screen_y) ]);\n    var normalization = 1 / 6;\n    var length = data.length;\n    for (var i = 0; i < length - 1; i++) {\n\n        p0 = (i == 0) ? data[0] : data[i - 1];\n        p1 = data[i];\n        p2 = data[i + 1];\n        p3 = (i + 2 < length) ? data[i + 2] : p2;\n\n\n        // Catmull-Rom to Cubic Bezier conversion matrix\n        //    0       1       0       0\n        //  -1/6      1      1/6      0\n        //    0      1/6      1     -1/6\n        //    0       0       1       0\n\n        //    bp0 = { x: p1.x,                               y: p1.y };\n        bp1 = {\n            screen_x: ((-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization),\n            screen_y: ((-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization)\n        };\n        bp2 = {\n            screen_x: (( p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization),\n            screen_y: (( p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization)\n        };\n        //    bp0 = { x: p2.x,                               y: p2.y };\n\n        d.push( [ bp1.screen_x , bp1.screen_y ]);\n        d.push( [ bp2.screen_x , bp2.screen_y ]);\n        d.push( [ p2.screen_x  , p2.screen_y  ]);\n    }\n\n    return d;\n};\n\n/**\n * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.\n * By default, the centripetal parameterization is used because this gives the nicest results.\n * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.\n *\n * One optimization can be used to reuse distances since this is a sliding window approach.\n * @param data\n * @param group\n * @returns {string}\n * @private\n */\nLine._catmullRom = function (data, group) {\n    var alpha = group.options.interpolation.alpha;\n    if (alpha == 0 || alpha === undefined) {\n        return this._catmullRomUniform(data);\n    }\n    else {\n        var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n        var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n        var d = [];\n        d.push( [ Math.round(data[0].screen_x) , Math.round(data[0].screen_y) ]);\n        var length = data.length;\n        for (var i = 0; i < length - 1; i++) {\n\n            p0 = (i == 0) ? data[0] : data[i - 1];\n            p1 = data[i];\n            p2 = data[i + 1];\n            p3 = (i + 2 < length) ? data[i + 2] : p2;\n\n            d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2));\n            d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2));\n            d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2));\n\n            // Catmull-Rom to Cubic Bezier conversion matrix\n\n            // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n            // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n\n            // [   0             1            0          0          ]\n            // [   -d2^2a /N     A/N          d1^2a /N   0          ]\n            // [   0             d3^2a /M     B/M        -d2^2a /M  ]\n            // [   0             0            1          0          ]\n\n            d3powA = Math.pow(d3, alpha);\n            d3pow2A = Math.pow(d3, 2 * alpha);\n            d2powA = Math.pow(d2, alpha);\n            d2pow2A = Math.pow(d2, 2 * alpha);\n            d1powA = Math.pow(d1, alpha);\n            d1pow2A = Math.pow(d1, 2 * alpha);\n\n            A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n            B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n            N = 3 * d1powA * (d1powA + d2powA);\n            if (N > 0) {\n                N = 1 / N;\n            }\n            M = 3 * d3powA * (d3powA + d2powA);\n            if (M > 0) {\n                M = 1 / M;\n            }\n\n            bp1 = {\n                screen_x: ((-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N),\n                screen_y: ((-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N)\n            };\n\n            bp2 = {\n                screen_x: (( d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M),\n                screen_y: (( d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M)\n            };\n\n            if (bp1.screen_x == 0 && bp1.screen_y == 0) {\n                bp1 = p1;\n            }\n            if (bp2.screen_x == 0 && bp2.screen_y == 0) {\n                bp2 = p2;\n            }\n            d.push( [ bp1.screen_x , bp1.screen_y ]);\n            d.push( [ bp2.screen_x , bp2.screen_y ]);\n            d.push( [ p2.screen_x  , p2.screen_y  ]);\n        }\n\n        return d;\n    }\n};\n\n/**\n * this generates the SVG path for a linear drawing between datapoints.\n * @param data\n * @returns {string}\n * @private\n */\nLine._linear = function (data) {\n    // linear\n    var d = [];\n    for (var i = 0; i < data.length; i++) {\n        d.push([ data[i].screen_x , data[i].screen_y ]);\n    }\n    return d;\n};\n\nmodule.exports = Line;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/line.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Component = require('./Component');\n\n/**\n * Legend for Graph2d\n */\nfunction Legend(body, options, side, linegraphOptions) {\n  this.body = body;\n  this.defaultOptions = {\n    enabled: false,\n    icons: true,\n    iconSize: 20,\n    iconSpacing: 6,\n    left: {\n      visible: true,\n      position: 'top-left' // top/bottom - left,center,right\n    },\n    right: {\n      visible: true,\n      position: 'top-right' // top/bottom - left,center,right\n    }\n  }\n\n  this.side = side;\n  this.options = util.extend({},this.defaultOptions);\n  this.linegraphOptions = linegraphOptions;\n\n  this.svgElements = {};\n  this.dom = {};\n  this.groups = {};\n  this.amountOfGroups = 0;\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n\n  this.setOptions(options);\n}\n\nLegend.prototype = new Component();\n\nLegend.prototype.clear = function() {\n  this.groups = {};\n  this.amountOfGroups = 0;\n};\n\nLegend.prototype.addGroup = function(label, graphOptions) {\n\n  // Include a group only if the group option 'excludeFromLegend: false' is not set.\n  if (graphOptions.options.excludeFromLegend != true) {\n    if (!this.groups.hasOwnProperty(label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n};\n\nLegend.prototype.updateGroup = function(label, graphOptions) {\n  this.groups[label] = graphOptions;\n};\n\nLegend.prototype.removeGroup = function(label) {\n  if (this.groups.hasOwnProperty(label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\n\nLegend.prototype._create = function() {\n  this.dom.frame = document.createElement('div');\n  this.dom.frame.className = 'vis-legend';\n  this.dom.frame.style.position = \"absolute\";\n  this.dom.frame.style.top = \"10px\";\n  this.dom.frame.style.display = \"block\";\n\n  this.dom.textArea = document.createElement('div');\n  this.dom.textArea.className = 'vis-legend-text';\n  this.dom.textArea.style.position = \"relative\";\n  this.dom.textArea.style.top = \"0px\";\n\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg',\"svg\");\n  this.svg.style.position = 'absolute';\n  this.svg.style.top = 0 +'px';\n  this.svg.style.width = this.options.iconSize + 5 + 'px';\n  this.svg.style.height = '100%';\n\n  this.dom.frame.appendChild(this.svg);\n  this.dom.frame.appendChild(this.dom.textArea);\n};\n\n/**\n * Hide the component from the DOM\n */\nLegend.prototype.hide = function() {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nLegend.prototype.show = function() {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\nLegend.prototype.setOptions = function(options) {\n  var fields = ['enabled','orientation','icons','left','right'];\n  util.selectiveDeepExtend(fields, this.options, options);\n};\n\nLegend.prototype.redraw = function() {\n  var activeGroups = 0;\n  var groupArray = Object.keys(this.groups);\n  groupArray.sort(function (a,b) {\n    return (a < b ? -1 : 1);\n  })\n\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n      activeGroups++;\n    }\n  }\n\n  if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) {\n    this.hide();\n  }\n  else {\n    this.show();\n    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') {\n      this.dom.frame.style.left = '4px';\n      this.dom.frame.style.textAlign = \"left\";\n      this.dom.textArea.style.textAlign = \"left\";\n      this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px';\n      this.dom.textArea.style.right = '';\n      this.svg.style.left = 0 +'px';\n      this.svg.style.right = '';\n    }\n    else {\n      this.dom.frame.style.right = '4px';\n      this.dom.frame.style.textAlign = \"right\";\n      this.dom.textArea.style.textAlign = \"right\";\n      this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px';\n      this.dom.textArea.style.left = '';\n      this.svg.style.right = 0 +'px';\n      this.svg.style.left = '';\n    }\n\n    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') {\n      this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace(\"px\",\"\")) + 'px';\n      this.dom.frame.style.bottom = '';\n    }\n    else {\n      var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height;\n      this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace(\"px\",\"\")) + 'px';\n      this.dom.frame.style.top = '';\n    }\n\n    if (this.options.icons == false) {\n      this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px';\n      this.dom.textArea.style.right = '';\n      this.dom.textArea.style.left = '';\n      this.svg.style.width = '0px';\n    }\n    else {\n      this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'\n      this.drawLegendIcons();\n    }\n\n    var content = '';\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        content += this.groups[groupId].content + '<br />';\n      }\n    }\n    this.dom.textArea.innerHTML = content;\n    this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px';\n  }\n};\n\nLegend.prototype.drawLegendIcons = function() {\n  if (this.dom.frame.parentNode) {\n    var groupArray = Object.keys(this.groups);\n    groupArray.sort(function (a,b) {\n      return (a < b ? -1 : 1);\n    });\n\n    // this resets the elements so the order is maintained\n    DOMutil.resetElements(this.svgElements);\n\n    var padding = window.getComputedStyle(this.dom.frame).paddingTop;\n    var iconOffset = Number(padding.replace('px',''));\n    var x = iconOffset;\n    var iconWidth = this.options.iconSize;\n    var iconHeight = 0.75 * this.options.iconSize;\n    var y = iconOffset + 0.5 * iconHeight + 3;\n\n    this.svg.style.width = iconWidth + 5 + iconOffset + 'px';\n\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n        y += iconHeight + this.options.iconSpacing;\n      }\n    }\n  }\n};\n\nmodule.exports = Legend;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Legend.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet date = 'date';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet moment = 'moment';\nlet any = 'any';\n\n\nlet allOptions = {\n  configure: {\n    enabled: {'boolean': bool},\n    filter: {'boolean': bool,'function': 'function'},\n    container: {dom},\n    __type__: {object,'boolean': bool,'function': 'function'}\n  },\n\n  //globals :\n  yAxisOrientation: {string:['left','right']},\n  defaultGroup: {string},\n  sort: {'boolean': bool},\n  sampling: {'boolean': bool},\n  stack:{'boolean': bool},\n  graphHeight: {string, number},\n  shaded: {\n    enabled: {'boolean': bool},\n    orientation: {string:['bottom','top','zero','group']}, // top, bottom, zero, group\n    groupId: {object},\n    __type__: {'boolean': bool,object}\n  },\n  style: {string:['line','bar','points']}, // line, bar\n  barChart: {\n    width: {number},\n    minWidth: {number},\n    sideBySide: {'boolean': bool},\n    align: {string:['left','center','right']},\n    __type__: {object}\n  },\n  interpolation: {\n    enabled: {'boolean': bool},\n    parametrization: {string:['centripetal', 'chordal','uniform']}, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    alpha: {number},\n    __type__: {object,'boolean': bool}\n  },\n  drawPoints: {\n    enabled: {'boolean': bool},\n    onRender: { 'function': 'function' },\n    size: {number},\n    style: {string:['square','circle']}, // square, circle\n    __type__: {object,'boolean': bool,'function': 'function'}\n  },\n  dataAxis: {\n    showMinorLabels: {'boolean': bool},\n    showMajorLabels: {'boolean': bool},\n    icons: {'boolean': bool},\n    width: {string, number},\n    visible: {'boolean': bool},\n    alignZeros: {'boolean': bool},\n    left:{\n      range: {min:{number},max:{number},__type__: {object}},\n      format: {'function': 'function'},\n      title: {text:{string,number},style:{string},__type__: {object}},\n      __type__: {object}\n    },\n    right:{\n      range: {min:{number},max:{number},__type__: {object}},\n      format: {'function': 'function'},\n      title: {text:{string,number},style:{string},__type__: {object}},\n      __type__: {object}\n    },\n    __type__: {object}\n  },\n  legend: {\n    enabled: {'boolean': bool},\n    icons: {'boolean': bool},\n    left: {\n      visible: {'boolean': bool},\n      position: {string:['top-right','bottom-right','top-left','bottom-left']},\n      __type__: {object}\n    },\n    right: {\n      visible: {'boolean': bool},\n      position: {string:['top-right','bottom-right','top-left','bottom-left']},\n      __type__: {object}\n    },\n    __type__: {object,'boolean': bool}\n  },\n  groups: {\n    visibility: {any},\n    __type__: {object}\n  },\n\n  autoResize: {'boolean': bool},\n  throttleRedraw: {number}, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: {'boolean': bool},\n  end: {number, date, string, moment},\n  format: {\n    minorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object}\n    },\n    majorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object}\n    },\n    __type__: {object}\n  },\n  moment: {'function': 'function'},\n  height: {string, number},\n  hiddenDates: {\n    start: {date, number, string, moment},\n    end: {date, number, string, moment},\n    repeat: {string},\n    __type__: {object, array}\n  },\n  locale:{string},\n  locales:{\n    __any__: {any},\n    __type__: {object}\n  },\n  max: {date, number, string, moment},\n  maxHeight: {number, string},\n  maxMinorChars: {number},\n  min: {date, number, string, moment},\n  minHeight: {number, string},\n  moveable: {'boolean': bool},\n  multiselect: {'boolean': bool},\n  orientation: {string},\n  showCurrentTime: {'boolean': bool},\n  showMajorLabels: {'boolean': bool},\n  showMinorLabels: {'boolean': bool},\n  start: {date, number, string, moment},\n  timeAxis: {\n    scale: {string,'undefined': 'undefined'},\n    step: {number,'undefined': 'undefined'},\n    __type__: {object}\n  },\n  width: {string, number},\n  zoomable: {'boolean': bool},\n  zoomKey: {string: ['ctrlKey', 'altKey', 'metaKey', '']},\n  zoomMax: {number},\n  zoomMin: {number},\n  zIndex: {number},\n  __type__: {object}\n};\n\nlet configureOptions = {\n  global: {\n    //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly\n    sort: true,\n    sampling: true,\n    stack:false,\n    shaded: {\n      enabled: false,\n      orientation: ['zero','top','bottom','group'] // zero, top, bottom\n    },\n    style: ['line','bar','points'], // line, bar\n    barChart: {\n      width: [50,5,100,5],\n      minWidth: [50,5,100,5],\n      sideBySide: false,\n      align: ['left','center','right'] // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: ['centripetal','chordal','uniform'] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    },\n    drawPoints: {\n      enabled: true,\n      size: [6,2,30,1],\n      style: ['square', 'circle'] // square, circle\n    },\n    dataAxis: {\n      showMinorLabels: true,\n      showMajorLabels: true,\n      icons: false,\n      width: [40,0,200,1],\n      visible: true,\n      alignZeros: true,\n      left:{\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {text:'',style:''}\n      },\n      right:{\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {text:'',style:''}\n      }\n    },\n    legend: {\n      enabled: false,\n      icons: true,\n      left: {\n        visible: true,\n        position: ['top-right','bottom-right','top-left','bottom-left'] // top/bottom - left,right\n      },\n      right: {\n        visible: true,\n        position: ['top-right','bottom-right','top-left','bottom-left'] // top/bottom - left,right\n      }\n    },\n\n    autoResize: true,\n    clickToUse: false,\n    end: '',\n    format: {\n      minorLabels: {\n        millisecond:'SSS',\n        second:     's',\n        minute:     'HH:mm',\n        hour:       'HH:mm',\n        weekday:    'ddd D',\n        day:        'D',\n        month:      'MMM',\n        year:       'YYYY'\n      },\n      majorLabels: {\n        millisecond:'HH:mm:ss',\n        second:     'D MMMM HH:mm',\n        minute:     'ddd D MMMM',\n        hour:       'ddd D MMMM',\n        weekday:    'MMMM YYYY',\n        day:        'MMMM YYYY',\n        month:      'YYYY',\n        year:       ''\n      }\n    },\n\n    height: '',\n    locale: '',\n    max: '',\n    maxHeight: '',\n    maxMinorChars: [7, 0, 20, 1],\n    min: '',\n    minHeight: '',\n    moveable:true,\n    orientation: ['both', 'bottom', 'top'],\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    start: '',\n    width: '100%',\n    zoomable: true,\n    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    zIndex: 0\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/optionsGraph2d.js","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Network\nexports.Network = require('./lib/network/Network');\nexports.network = {\n  Images: require('./lib/network/Images'),\n  dotparser: require('./lib/network/dotparser'),\n  gephiParser: require('./lib/network/gephiParser'),\n  allOptions: require('./lib/network/options')\n};\nexports.network.convertDot   = function (input) {return exports.network.dotparser.DOTToGraph(input)};\nexports.network.convertGephi = function (input,options) {return exports.network.gephiParser.parseGephi(input,options)};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n// WEBPACK FOOTER //\n// ./index-network.js","// Load custom shapes into CanvasRenderingContext2D\nrequire('./shapes');\n\nlet Emitter = require('emitter-component');\nlet util = require('../util');\nlet DataSet = require('../DataSet');\nlet DataView = require('../DataView');\nlet dotparser = require('./dotparser');\nlet gephiParser = require('./gephiParser');\nlet Activator = require('../shared/Activator');\nlet locales = require('./locales');\n\nimport  Images              from './Images';\nimport  Groups              from './modules/Groups';\nimport  NodesHandler        from './modules/NodesHandler';\nimport  EdgesHandler        from './modules/EdgesHandler';\nimport  PhysicsEngine       from './modules/PhysicsEngine';\nimport  ClusterEngine       from './modules/Clustering';\nimport  CanvasRenderer      from './modules/CanvasRenderer';\nimport  Canvas              from './modules/Canvas';\nimport  View                from './modules/View';\nimport  InteractionHandler  from './modules/InteractionHandler';\nimport  SelectionHandler    from \"./modules/SelectionHandler\";\nimport  LayoutEngine        from \"./modules/LayoutEngine\";\nimport  ManipulationSystem  from \"./modules/ManipulationSystem\";\nimport  Configurator        from \"./../shared/Configurator\";\nimport  Validator           from \"./../shared/Validator\";\nimport  {printStyle}        from \"./../shared/Validator\";\nimport  {allOptions, configureOptions} from './options.js';\nimport  KamadaKawai         from \"./modules/KamadaKawai.js\"\n\n\n/**\n * @constructor Network\n * Create a network visualization, displaying nodes and edges.\n *\n * @param {Element} container   The DOM element in which the Network will\n *                                  be created. Normally a div element.\n * @param {Object} data         An object containing parameters\n *                              {Array} nodes\n *                              {Array} edges\n * @param {Object} options      Options\n */\nfunction Network(container, data, options) {\n  if (!(this instanceof Network)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // set constant values\n  this.options = {};\n  this.defaultOptions = {\n    locale: 'en',\n    locales: locales,\n    clickToUse: false\n  };\n  util.extend(this.options, this.defaultOptions);\n\n  // containers for nodes and edges\n  this.body = {\n    container: container,\n    nodes: {},\n    nodeIndices: [],\n    edges: {},\n    edgeIndices: [],\n    emitter: {\n      on:   this.on.bind(this),\n      off:  this.off.bind(this),\n      emit: this.emit.bind(this),\n      once: this.once.bind(this)\n    },\n    eventListeners: {\n      onTap:        function() {},\n      onTouch:      function() {},\n      onDoubleTap:  function() {},\n      onHold:       function() {},\n      onDragStart:  function() {},\n      onDrag:       function() {},\n      onDragEnd:    function() {},\n      onMouseWheel: function() {},\n      onPinch:      function() {},\n      onMouseMove:  function() {},\n      onRelease:    function() {},\n      onContext:    function() {}\n    },\n    data: {\n      nodes: null,      // A DataSet or DataView\n      edges: null       // A DataSet or DataView\n    },\n    functions: {\n      createNode: function() {},\n      createEdge: function() {},\n      getPointer: function() {}\n    },\n    modules: {},\n    view: {\n      scale: 1,\n      translation: {x: 0, y: 0}\n    }\n  };\n\n\n\n  // bind the event listeners\n  this.bindEventListeners();\n\n  // setting up all modules\n  this.images              = new Images(() => this.body.emitter.emit(\"_requestRedraw\")); // object with images\n  this.groups              = new Groups(); // object with groups\n  this.canvas              = new Canvas(this.body);                         // DOM handler\n  this.selectionHandler    = new SelectionHandler(this.body, this.canvas);  // Selection handler\n  this.interactionHandler  = new InteractionHandler(this.body, this.canvas, this.selectionHandler);  // Interaction handler handles all the hammer bindings (that are bound by canvas), key\n  this.view                = new View(this.body, this.canvas);              // camera handler, does animations and zooms\n  this.renderer            = new CanvasRenderer(this.body, this.canvas);    // renderer, starts renderloop, has events that modules can hook into\n  this.physics             = new PhysicsEngine(this.body);                  // physics engine, does all the simulations\n  this.layoutEngine        = new LayoutEngine(this.body);                   // layout engine for inital layout and hierarchical layout\n  this.clustering          = new ClusterEngine(this.body);                  // clustering api\n  this.manipulation        = new ManipulationSystem(this.body, this.canvas, this.selectionHandler); // data manipulation system\n\n  this.nodesHandler        = new NodesHandler(this.body, this.images, this.groups, this.layoutEngine);   // Handle adding, deleting and updating of nodes as well as global options\n  this.edgesHandler        = new EdgesHandler(this.body, this.images, this.groups);   // Handle adding, deleting and updating of edges as well as global options\n\n  this.body.modules[\"kamadaKawai\"] = new KamadaKawai(this.body,150,0.05);   // Layouting algorithm.\n  this.body.modules[\"clustering\"] = this.clustering;\n\n  // create the DOM elements\n  this.canvas._create();\n\n  // apply options\n  this.setOptions(options);\n\n  // load data (the disable start variable will be the same as the enabled clustering)\n  this.setData(data);\n\n}\n\n// Extend Network with an Emitter mixin\nEmitter(Network.prototype);\n\n\n/**\n * Set options\n * @param {Object} options\n */\nNetwork.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    let errorFound = Validator.validate(options, allOptions);\n    if (errorFound === true) {\n      console.log('%cErrors have been found in the supplied options object.', printStyle);\n    }\n\n    // copy the global fields over\n    let fields = ['locale','locales','clickToUse'];\n    util.selectiveDeepExtend(fields,this.options, options);\n\n    // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.\n    options = this.layoutEngine.setOptions(options.layout, options);\n\n    this.canvas.setOptions(options); // options for canvas are in globals\n\n    // pass the options to the modules\n    this.groups.setOptions(options.groups);\n    this.nodesHandler.setOptions(options.nodes);\n    this.edgesHandler.setOptions(options.edges);\n    this.physics.setOptions(options.physics);\n    this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals\n\n    this.interactionHandler.setOptions(options.interaction);\n    this.renderer.setOptions(options.interaction);            // options for rendering are in interaction\n    this.selectionHandler.setOptions(options.interaction);    // options for selection are in interaction\n\n    // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.\n    if (options.groups !== undefined) {\n      this.body.emitter.emit(\"refreshNodes\");\n    }\n    // these two do not have options at the moment, here for completeness\n    //this.view.setOptions(options.view);\n    //this.clustering.setOptions(options.clustering);\n\n    if ('configure' in options) {\n      if (!this.configurator) {\n        this.configurator = new Configurator(this, this.body.container, configureOptions, this.canvas.pixelRatio);\n      }\n\n      this.configurator.setOptions(options.configure);\n    }\n\n    // if the configuration system is enabled, copy all options and put them into the config system\n    if (this.configurator && this.configurator.options.enabled === true) {\n      let networkOptions = {nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};\n      util.deepExtend(networkOptions.nodes,        this.nodesHandler.options);\n      util.deepExtend(networkOptions.edges,        this.edgesHandler.options);\n      util.deepExtend(networkOptions.layout,       this.layoutEngine.options);\n      // load the selectionHandler and render default options in to the interaction group\n      util.deepExtend(networkOptions.interaction,  this.selectionHandler.options);\n      util.deepExtend(networkOptions.interaction,  this.renderer.options);\n\n      util.deepExtend(networkOptions.interaction,  this.interactionHandler.options);\n      util.deepExtend(networkOptions.manipulation, this.manipulation.options);\n      util.deepExtend(networkOptions.physics,      this.physics.options);\n\n      // load globals into the global object\n      util.deepExtend(networkOptions.global,       this.canvas.options);\n      util.deepExtend(networkOptions.global,       this.options);\n\n      this.configurator.setModuleOptions(networkOptions);\n    }\n\n    // handle network global options\n    if (options.clickToUse !== undefined) {\n      if (options.clickToUse === true) {\n        if (this.activator === undefined) {\n          this.activator = new Activator(this.canvas.frame);\n          this.activator.on('change', () => {this.body.emitter.emit(\"activate\")});\n        }\n      }\n      else {\n        if (this.activator !== undefined) {\n          this.activator.destroy();\n          delete this.activator;\n        }\n        this.body.emitter.emit(\"activate\");\n      }\n    }\n    else {\n      this.body.emitter.emit(\"activate\");\n    }\n\n    this.canvas.setSize();\n    // start the physics simulation. Can be safely called multiple times.\n    this.body.emitter.emit(\"startSimulation\");\n  }\n};\n\n\n/**\n * Update the this.body.nodeIndices with the most recent node index list\n * @private\n */\nNetwork.prototype._updateVisibleIndices = function () {\n  let nodes = this.body.nodes;\n  let edges = this.body.edges;\n  this.body.nodeIndices = [];\n  this.body.edgeIndices = [];\n\n  for (let nodeId in nodes) {\n    if (nodes.hasOwnProperty(nodeId)) {\n      if (nodes[nodeId].options.hidden === false) {\n        this.body.nodeIndices.push(nodes[nodeId].id);\n      }\n    }\n  }\n\n  for (let edgeId in edges) {\n    if (edges.hasOwnProperty(edgeId)) {\n      if (edges[edgeId].options.hidden === false) {\n        this.body.edgeIndices.push(edges[edgeId].id);\n      }\n    }\n  }\n};\n\n\n/**\n * Bind all events\n */\nNetwork.prototype.bindEventListeners = function () {\n  // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed.\n  this.body.emitter.on(\"_dataChanged\", () => {\n    // update shortcut lists\n    this._updateVisibleIndices();\n    this.body.emitter.emit(\"_requestRedraw\");\n    // call the dataUpdated event because the only difference between the two is the updating of the indices\n    this.body.emitter.emit(\"_dataUpdated\");\n  });\n\n  // this is called when options of EXISTING nodes or edges have changed.\n  this.body.emitter.on(\"_dataUpdated\", () => {\n    // update values\n    this._updateValueRange(this.body.nodes);\n    this._updateValueRange(this.body.edges);\n    // start simulation (can be called safely, even if already running)\n    this.body.emitter.emit(\"startSimulation\");\n    this.body.emitter.emit(\"_requestRedraw\");\n  });\n};\n\n\n/**\n * Set nodes and edges, and optionally options as well.\n *\n * @param {Object} data              Object containing parameters:\n *                                   {Array | DataSet | DataView} [nodes] Array with nodes\n *                                   {Array | DataSet | DataView} [edges] Array with edges\n *                                   {String} [dot] String containing data in DOT format\n *                                   {String} [gephi] String containing data in gephi JSON format\n *                                   {Options} [options] Object with options\n */\nNetwork.prototype.setData = function (data) {\n  // reset the physics engine.\n  this.body.emitter.emit(\"resetPhysics\");\n  this.body.emitter.emit(\"_resetData\");\n\n  // unselect all to ensure no selections from old data are carried over.\n  this.selectionHandler.unselectAll();\n\n  if (data && data.dot && (data.nodes || data.edges)) {\n    throw new SyntaxError('Data must contain either parameter \"dot\" or ' +\n      ' parameter pair \"nodes\" and \"edges\", but not both.');\n  }\n\n  // set options\n  this.setOptions(data && data.options);\n  // set all data\n  if (data && data.dot) {\n    console.log('The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);');\n    // parse DOT file\n    var dotData = dotparser.DOTToGraph(data.dot);\n    this.setData(dotData);\n    return;\n  }\n  else if (data && data.gephi) {\n    // parse DOT file\n    console.log('The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);');\n    var gephiData = gephiParser.parseGephi(data.gephi);\n    this.setData(gephiData);\n    return;\n  }\n  else {\n    this.nodesHandler.setData(data && data.nodes, true);\n    this.edgesHandler.setData(data && data.edges, true);\n  }\n\n  // emit change in data\n  this.body.emitter.emit(\"_dataChanged\");\n\n  // emit data loaded\n  this.body.emitter.emit(\"_dataLoaded\");\n\n  // find a stable position or start animating to a stable position\n  this.body.emitter.emit(\"initPhysics\");\n};\n\n\n/**\n * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.\n * var network = new vis.Network(..);\n * network.destroy();\n * network = null;\n */\nNetwork.prototype.destroy = function () {\n  this.body.emitter.emit(\"destroy\");\n  // clear events\n  this.body.emitter.off();\n  this.off();\n\n  // delete modules\n  delete this.groups;\n  delete this.canvas;\n  delete this.selectionHandler;\n  delete this.interactionHandler;\n  delete this.view;\n  delete this.renderer;\n  delete this.physics;\n  delete this.layoutEngine;\n  delete this.clustering;\n  delete this.manipulation;\n  delete this.nodesHandler;\n  delete this.edgesHandler;\n  delete this.configurator;\n  delete this.images;\n\n  for (var nodeId in this.body.nodes) {\n    delete this.body.nodes[nodeId];\n  }\n  for (var edgeId in this.body.edges) {\n    delete this.body.edges[edgeId];\n  }\n\n  // remove the container and everything inside it recursively\n  util.recursiveDOMDelete(this.body.container);\n};\n\n\n/**\n * Update the values of all object in the given array according to the current\n * value range of the objects in the array.\n * @param {Object} obj    An object containing a set of Edges or Nodes\n *                        The objects must have a method getValue() and\n *                        setValueRange(min, max).\n * @private\n */\nNetwork.prototype._updateValueRange = function (obj) {\n  var id;\n\n  // determine the range of the objects\n  var valueMin = undefined;\n  var valueMax = undefined;\n  var valueTotal = 0;\n  for (id in obj) {\n    if (obj.hasOwnProperty(id)) {\n      var value = obj[id].getValue();\n      if (value !== undefined) {\n        valueMin = (valueMin === undefined) ? value : Math.min(value, valueMin);\n        valueMax = (valueMax === undefined) ? value : Math.max(value, valueMax);\n        valueTotal += value;\n      }\n    }\n  }\n\n  // adjust the range of all objects\n  if (valueMin !== undefined && valueMax !== undefined) {\n    for (id in obj) {\n      if (obj.hasOwnProperty(id)) {\n        obj[id].setValueRange(valueMin, valueMax, valueTotal);\n      }\n    }\n  }\n};\n\n\n/**\n * Returns true when the Network is active.\n * @returns {boolean}\n */\nNetwork.prototype.isActive = function () {\n  return !this.activator || this.activator.active;\n};\n\n\nNetwork.prototype.setSize             = function() {return this.canvas.setSize.apply(this.canvas,arguments);};\nNetwork.prototype.canvasToDOM         = function() {return this.canvas.canvasToDOM.apply(this.canvas,arguments);};\nNetwork.prototype.DOMtoCanvas         = function() {return this.canvas.DOMtoCanvas.apply(this.canvas,arguments);};\nNetwork.prototype.findNode            = function() {return this.clustering.findNode.apply(this.clustering,arguments);};\nNetwork.prototype.isCluster           = function() {return this.clustering.isCluster.apply(this.clustering,arguments);};\nNetwork.prototype.openCluster         = function() {return this.clustering.openCluster.apply(this.clustering,arguments);};\nNetwork.prototype.cluster             = function() {return this.clustering.cluster.apply(this.clustering,arguments);};\nNetwork.prototype.getNodesInCluster   = function() {return this.clustering.getNodesInCluster.apply(this.clustering,arguments);};\nNetwork.prototype.clusterByConnection = function() {return this.clustering.clusterByConnection.apply(this.clustering,arguments);};\nNetwork.prototype.clusterByHubsize    = function() {return this.clustering.clusterByHubsize.apply(this.clustering,arguments);};\nNetwork.prototype.clusterOutliers     = function() {return this.clustering.clusterOutliers.apply(this.clustering,arguments);};\nNetwork.prototype.getSeed             = function() {return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments);};\nNetwork.prototype.enableEditMode      = function() {return this.manipulation.enableEditMode.apply(this.manipulation,arguments);};\nNetwork.prototype.disableEditMode     = function() {return this.manipulation.disableEditMode.apply(this.manipulation,arguments);};\nNetwork.prototype.addNodeMode         = function() {return this.manipulation.addNodeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.editNode            = function() {return this.manipulation.editNode.apply(this.manipulation,arguments);};\nNetwork.prototype.editNodeMode        = function() {console.log(\"Deprecated: Please use editNode instead of editNodeMode.\"); return this.manipulation.editNode.apply(this.manipulation,arguments);};\nNetwork.prototype.addEdgeMode         = function() {return this.manipulation.addEdgeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.editEdgeMode        = function() {return this.manipulation.editEdgeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.deleteSelected      = function() {return this.manipulation.deleteSelected.apply(this.manipulation,arguments);};\nNetwork.prototype.getPositions        = function() {return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments);};\nNetwork.prototype.storePositions      = function() {return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments);};\nNetwork.prototype.moveNode            = function() {return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments);};\nNetwork.prototype.getBoundingBox      = function() {return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments);};\nNetwork.prototype.getConnectedNodes   = function(objectId) {\n  if (this.body.nodes[objectId] !== undefined) {\n    return this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments);\n  }\n  else {\n    return this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments);\n  }\n};\nNetwork.prototype.getConnectedEdges   = function() {return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments);};\nNetwork.prototype.startSimulation     = function() {return this.physics.startSimulation.apply(this.physics,arguments);};\nNetwork.prototype.stopSimulation      = function() {return this.physics.stopSimulation.apply(this.physics,arguments);};\nNetwork.prototype.stabilize           = function() {return this.physics.stabilize.apply(this.physics,arguments);};\nNetwork.prototype.getSelection        = function() {return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments);};\nNetwork.prototype.setSelection        = function() {return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getSelectedNodes    = function() {return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getSelectedEdges    = function() {return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getNodeAt           = function() {\n  var node = this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);\n  if (node !== undefined && node.id !== undefined) {\n    return node.id;\n  }\n  return node;\n};\nNetwork.prototype.getEdgeAt           = function() {\n    var edge = this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);\n    if (edge !== undefined && edge.id !== undefined) {\n      return edge.id;\n    }\n    return edge;\n  };\nNetwork.prototype.selectNodes         = function() {return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments);};\nNetwork.prototype.selectEdges         = function() {return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments);};\nNetwork.prototype.unselectAll         = function() {\n  this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments);\n  this.redraw();\n};\nNetwork.prototype.redraw              = function() {return this.renderer.redraw.apply(this.renderer,arguments);};\nNetwork.prototype.getScale            = function() {return this.view.getScale.apply(this.view,arguments);};\nNetwork.prototype.getViewPosition     = function() {return this.view.getViewPosition.apply(this.view,arguments);};\nNetwork.prototype.fit                 = function() {return this.view.fit.apply(this.view,arguments);};\nNetwork.prototype.moveTo              = function() {return this.view.moveTo.apply(this.view,arguments);};\nNetwork.prototype.focus               = function() {return this.view.focus.apply(this.view,arguments);};\nNetwork.prototype.releaseNode         = function() {return this.view.releaseNode.apply(this.view,arguments);};\nNetwork.prototype.getOptionsFromConfigurator = function() {\n  let options = {};\n  if (this.configurator) {\n    options = this.configurator.getOptions.apply(this.configurator);\n  }\n  return options;\n};\n\n\n\nmodule.exports = Network;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/Network.js","/**\n * @class Images\n * This class loads images and keeps them stored.\n */\nclass Images{\n    constructor(callback){\n        this.images = {};\n        this.imageBroken = {};\n        this.callback = callback;\n    }\n    \n    /**\n     * @param {string} url                      The Url to cache the image as \n      * @return {Image} imageToLoadBrokenUrlOn  The image object\n     */    \n    _addImageToCache (url, imageToCache) {\n        // IE11 fix -- thanks dponch!\n        if (imageToCache.width === 0) {\n            document.body.appendChild(imageToCache);\n            imageToCache.width = imageToCache.offsetWidth;\n            imageToCache.height = imageToCache.offsetHeight;\n            document.body.removeChild(imageToCache);\n        }\n    \n        this.images[url] = imageToCache;\n    }  \n    \n    /**\n     * @param {string} url                      The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image\n     * @param {string} brokenUrl                Url the broken image to try and load\n     * @return {Image} imageToLoadBrokenUrlOn   The image object\n     */    \n    _tryloadBrokenUrl (url, brokenUrl, imageToLoadBrokenUrlOn) {\n        //If any of the parameters aren't specified then exit the function because nothing constructive can be done\n        if (url === undefined || brokenUrl === undefined || imageToLoadBrokenUrlOn === undefined)  return;\n    \n        //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl\n        imageToLoadBrokenUrlOn.onerror = () => {\n            console.error(\"Could not load brokenImage:\", brokenUrl);\n            //Add an empty image to the cache so that when subsequent load calls are made for the url we don't try load the image and broken image again\n            this._addImageToCache(url, new Image());\n        };\n        \n        //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image\n        imageToLoadBrokenUrlOn.src = brokenUrl;\n    }\n    \n    /**\n     * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked\n     */    \n    _redrawWithImage (imageToRedrawWith) {\n        if (this.callback) {\n            this.callback(imageToRedrawWith);\n        }\n    }\n    \n    /**\n     * @param {string} url          Url of the image\n     * @param {string} brokenUrl    Url of an image to use if the url image is not found\n     * @return {Image} img          The image object\n     */     \n    load (url, brokenUrl, id) {\n        //Try and get the image from the cache, if successful then return the cached image   \n        var cachedImage = this.images[url]; \n        if (cachedImage) return cachedImage;\n        \n        //Create a new image\n        var img = new Image();\n        \n        //Subscribe to the event that is raised if the image loads successfully \n        img.onload = () => {\n            //Add the image to the cache and then request a redraw\n            this._addImageToCache(url, img);\n            this._redrawWithImage(img);\n        };\n        \n        //Subscribe to the event that is raised if the image fails to load\n        img.onerror = () => {\n            console.error(\"Could not load image:\", url);\n            //Try and load the image specified by the brokenUrl using\n            this._tryloadBrokenUrl(url, brokenUrl, img);\n        }\n        \n        //Set the source of the image to the url, this is actuall what kicks off the loading of the image\n        img.src = url;\n        \n        //Return the new image\n        return img;\n    }          \n}\n\nexport default Images;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/Images.js","let util = require('../../util');\n\n/**\n * @class Groups\n * This class can store groups and options specific for groups.\n */\nclass Groups {\n  constructor() {\n    this.clear();\n    this.defaultIndex = 0;\n    this.groupsArray = [];\n    this.groupIndex = 0;\n\n    this.defaultGroups = [\n      {border: \"#2B7CE9\", background: \"#97C2FC\", highlight: {border: \"#2B7CE9\", background: \"#D2E5FF\"}, hover: {border: \"#2B7CE9\", background: \"#D2E5FF\"}}, // 0: blue\n      {border: \"#FFA500\", background: \"#FFFF00\", highlight: {border: \"#FFA500\", background: \"#FFFFA3\"}, hover: {border: \"#FFA500\", background: \"#FFFFA3\"}}, // 1: yellow\n      {border: \"#FA0A10\", background: \"#FB7E81\", highlight: {border: \"#FA0A10\", background: \"#FFAFB1\"}, hover: {border: \"#FA0A10\", background: \"#FFAFB1\"}}, // 2: red\n      {border: \"#41A906\", background: \"#7BE141\", highlight: {border: \"#41A906\", background: \"#A1EC76\"}, hover: {border: \"#41A906\", background: \"#A1EC76\"}}, // 3: green\n      {border: \"#E129F0\", background: \"#EB7DF4\", highlight: {border: \"#E129F0\", background: \"#F0B3F5\"}, hover: {border: \"#E129F0\", background: \"#F0B3F5\"}}, // 4: magenta\n      {border: \"#7C29F0\", background: \"#AD85E4\", highlight: {border: \"#7C29F0\", background: \"#D3BDF0\"}, hover: {border: \"#7C29F0\", background: \"#D3BDF0\"}}, // 5: purple\n      {border: \"#C37F00\", background: \"#FFA807\", highlight: {border: \"#C37F00\", background: \"#FFCA66\"}, hover: {border: \"#C37F00\", background: \"#FFCA66\"}}, // 6: orange\n      {border: \"#4220FB\", background: \"#6E6EFD\", highlight: {border: \"#4220FB\", background: \"#9B9BFD\"}, hover: {border: \"#4220FB\", background: \"#9B9BFD\"}}, // 7: darkblue\n      {border: \"#FD5A77\", background: \"#FFC0CB\", highlight: {border: \"#FD5A77\", background: \"#FFD1D9\"}, hover: {border: \"#FD5A77\", background: \"#FFD1D9\"}}, // 8: pink\n      {border: \"#4AD63A\", background: \"#C2FABC\", highlight: {border: \"#4AD63A\", background: \"#E6FFE3\"}, hover: {border: \"#4AD63A\", background: \"#E6FFE3\"}}, // 9: mint\n\n      {border: \"#990000\", background: \"#EE0000\", highlight: {border: \"#BB0000\", background: \"#FF3333\"}, hover: {border: \"#BB0000\", background: \"#FF3333\"}}, // 10:bright red\n\n      {border: \"#FF6000\", background: \"#FF6000\", highlight: {border: \"#FF6000\", background: \"#FF6000\"}, hover: {border: \"#FF6000\", background: \"#FF6000\"}}, // 12: real orange\n      {border: \"#97C2FC\", background: \"#2B7CE9\", highlight: {border: \"#D2E5FF\", background: \"#2B7CE9\"}, hover: {border: \"#D2E5FF\", background: \"#2B7CE9\"}}, // 13: blue\n      {border: \"#399605\", background: \"#255C03\", highlight: {border: \"#399605\", background: \"#255C03\"}, hover: {border: \"#399605\", background: \"#255C03\"}}, // 14: green\n      {border: \"#B70054\", background: \"#FF007E\", highlight: {border: \"#B70054\", background: \"#FF007E\"}, hover: {border: \"#B70054\", background: \"#FF007E\"}}, // 15: magenta\n      {border: \"#AD85E4\", background: \"#7C29F0\", highlight: {border: \"#D3BDF0\", background: \"#7C29F0\"}, hover: {border: \"#D3BDF0\", background: \"#7C29F0\"}}, // 16: purple\n      {border: \"#4557FA\", background: \"#000EA1\", highlight: {border: \"#6E6EFD\", background: \"#000EA1\"}, hover: {border: \"#6E6EFD\", background: \"#000EA1\"}}, // 17: darkblue\n      {border: \"#FFC0CB\", background: \"#FD5A77\", highlight: {border: \"#FFD1D9\", background: \"#FD5A77\"}, hover: {border: \"#FFD1D9\", background: \"#FD5A77\"}}, // 18: pink\n      {border: \"#C2FABC\", background: \"#74D66A\", highlight: {border: \"#E6FFE3\", background: \"#74D66A\"}, hover: {border: \"#E6FFE3\", background: \"#74D66A\"}}, // 19: mint\n\n      {border: \"#EE0000\", background: \"#990000\", highlight: {border: \"#FF3333\", background: \"#BB0000\"}, hover: {border: \"#FF3333\", background: \"#BB0000\"}} // 20:bright red\n    ];\n\n    this.options = {};\n    this.defaultOptions = {\n      useDefaultGroups: true\n    };\n    util.extend(this.options, this.defaultOptions);\n  }\n\n\n  setOptions(options) {\n    let optionFields = ['useDefaultGroups'];\n\n    if (options !== undefined) {\n      for (let groupName in options) {\n        if (options.hasOwnProperty(groupName)) {\n          if (optionFields.indexOf(groupName) === -1) {\n            let group = options[groupName];\n            this.add(groupName, group);\n          }\n        }\n      }\n    }\n  }\n\n  \n  /**\n   * Clear all groups\n   */\n  clear() {\n    this.groups = {};\n    this.groupsArray = [];\n  }\n  \n  /**\n   * get group options of a groupname. If groupname is not found, a new group\n   * is added.\n   * @param {*} groupname        Can be a number, string, Date, etc.\n   * @return {Object} group      The created group, containing all group options\n   */\n  get(groupname) {\n    let group = this.groups[groupname];\n    if (group === undefined) {\n      if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) {\n        // create new group\n        let index = this.groupIndex % this.groupsArray.length;\n        this.groupIndex++;\n        group = {};\n        group.color = this.groups[this.groupsArray[index]];\n        this.groups[groupname] = group;\n      }\n      else {\n        // create new group\n        let index = this.defaultIndex % this.defaultGroups.length;\n        this.defaultIndex++;\n        group = {};\n        group.color = this.defaultGroups[index];\n        this.groups[groupname] = group;\n      }\n    }\n  \n    return group;\n  }\n  \n  /**\n   * Add a custom group style\n   * @param {String} groupName\n   * @param {Object} style       An object containing borderColor,\n   *                             backgroundColor, etc.\n   * @return {Object} group      The created group object\n   */\n  add(groupName, style) {\n    this.groups[groupName] = style;\n    this.groupsArray.push(groupName);\n    return style;\n  }\n}\n\nexport default Groups;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Groups.js","let util = require(\"../../util\");\nlet DataSet = require('../../DataSet');\nlet DataView = require('../../DataView');\n\nimport Node  from \"./components/Node\";\nimport Label from \"./components/shared/Label\";\n\nclass NodesHandler {\n  constructor(body, images, groups, layoutEngine) {\n    this.body = body;\n    this.images = images;\n    this.groups = groups;\n    this.layoutEngine = layoutEngine;\n\n    // create the node API in the body container\n    this.body.functions.createNode = this.create.bind(this);\n\n    this.nodesListeners = {\n      add: (event, params) => { this.add(params.items); },\n      update: (event, params) => { this.update(params.items, params.data); },\n      remove: (event, params) => { this.remove(params.items); }\n    };\n\n    this.options = {};\n    this.defaultOptions = {\n      borderWidth: 1,\n      borderWidthSelected: 2,\n      brokenImage: undefined,\n      color: {\n        border: '#2B7CE9',\n        background: '#97C2FC',\n        highlight: {\n          border: '#2B7CE9',\n          background: '#D2E5FF'\n        },\n        hover: {\n          border: '#2B7CE9',\n          background: '#D2E5FF'\n        }\n      },\n      fixed: {\n        x: false,\n        y: false\n      },\n      font: {\n        color: '#343434',\n        size: 14, // px\n        face: 'arial',\n        background: 'none',\n        strokeWidth: 0, // px\n        strokeColor: '#ffffff',\n        align: 'center',\n        vadjust: 0,\n        multi: false,\n        bold: {\n          mod: 'bold'\n        },\n        boldital: {\n          mod: 'bold italic'\n        },\n        ital: {\n          mod: 'italic'\n        },\n        mono: {\n          mod: '',\n          size: 15, // px\n          face: 'courier new',\n          vadjust: 2\n        }\n      },\n      group: undefined,\n      hidden: false,\n      icon: {\n        face: 'FontAwesome',  //'FontAwesome',\n        code: undefined,  //'\\uf007',\n        size: 50,  //50,\n        color: '#2B7CE9'   //'#aa00ff'\n      },\n      image: undefined, // --> URL\n      label: undefined,\n      labelHighlightBold: true,\n      level: undefined,\n      margin: {\n        top: 5,\n        right: 5,\n        bottom: 5,\n        left: 5\n      },\n      mass: 1,\n      physics: true,\n      scaling: {\n        min: 10,\n        max: 30,\n        label: {\n          enabled: false,\n          min: 14,\n          max: 30,\n          maxVisible: 30,\n          drawThreshold: 5\n        },\n        customScalingFunction: function (min, max, total, value) {\n          if (max === min) {\n            return 0.5;\n          }\n          else {\n            let scale = 1 / (max - min);\n            return Math.max(0, (value - min) * scale);\n          }\n        }\n      },\n      shadow: {\n        enabled: false,\n        color: 'rgba(0,0,0,0.5)',\n        size: 10,\n        x: 5,\n        y: 5\n      },\n      shape: 'ellipse',\n      shapeProperties: {\n        borderDashes: false, // only for borders\n        borderRadius: 6,     // only for box shape\n        interpolation: true,  // only for image and circularImage shapes\n        useImageSize: false,  // only for image and circularImage shapes\n        useBorderWithImage: false  // only for image shape\n      },\n      size: 25,\n      title: undefined,\n      value: undefined,\n      x: undefined,\n      y: undefined\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // refresh the nodes. Used when reverting from hierarchical layout\n    this.body.emitter.on('refreshNodes', this.refresh.bind(this));\n    this.body.emitter.on('refresh', this.refresh.bind(this));\n    this.body.emitter.on('destroy', () => {\n      util.forEach(this.nodesListeners, (callback, event) => {\n        if (this.body.data.nodes)\n          this.body.data.nodes.off(event, callback);\n      });\n      delete this.body.functions.createNode;\n      delete this.nodesListeners.add;\n      delete this.nodesListeners.update;\n      delete this.nodesListeners.remove;\n      delete this.nodesListeners;\n    });\n  }\n\n  setOptions(options) {\n    this.nodeOptions = options;\n    if (options !== undefined) {\n      Node.parseOptions(this.options, options);\n\n      // update the shape in all nodes\n      if (options.shape !== undefined) {\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId].updateShape();\n          }\n        }\n      }\n\n      // update the font in all nodes\n      if (options.font !== undefined) {\n        Label.parseOptions(this.options.font, options);\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId].updateLabelModule();\n            this.body.nodes[nodeId]._reset();\n          }\n        }\n      }\n\n      // update the shape size in all nodes\n      if (options.size !== undefined) {\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId]._reset();\n          }\n        }\n      }\n\n      // update the state of the letiables if needed\n      if (options.hidden !== undefined || options.physics !== undefined) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n  /**\n   * Set a data set with nodes for the network\n   * @param {Array | DataSet | DataView} nodes         The data containing the nodes.\n   * @private\n   */\n  setData(nodes, doNotEmit = false) {\n    let oldNodesData = this.body.data.nodes;\n\n    if (nodes instanceof DataSet || nodes instanceof DataView) {\n      this.body.data.nodes = nodes;\n    }\n    else if (Array.isArray(nodes)) {\n      this.body.data.nodes = new DataSet();\n      this.body.data.nodes.add(nodes);\n    }\n    else if (!nodes) {\n      this.body.data.nodes = new DataSet();\n    }\n    else {\n      throw new TypeError('Array or DataSet expected');\n    }\n\n    if (oldNodesData) {\n      // unsubscribe from old dataset\n      util.forEach(this.nodesListeners, function (callback, event) {\n        oldNodesData.off(event, callback);\n      });\n    }\n\n    // remove drawn nodes\n    this.body.nodes = {};\n\n    if (this.body.data.nodes) {\n      // subscribe to new dataset\n      let me = this;\n      util.forEach(this.nodesListeners, function (callback, event) {\n        me.body.data.nodes.on(event, callback);\n      });\n\n      // draw all new nodes\n      let ids = this.body.data.nodes.getIds();\n      this.add(ids, true);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n  /**\n   * Add nodes\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  add(ids, doNotEmit = false) {\n    let id;\n    let newNodes = [];\n    for (let i = 0; i < ids.length; i++) {\n      id = ids[i];\n      let properties = this.body.data.nodes.get(id);\n      let node = this.create(properties);\n      newNodes.push(node);\n      this.body.nodes[id] = node; // note: this may replace an existing node\n    }\n\n    this.layoutEngine.positionInitially(newNodes);\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n  /**\n   * Update existing nodes, or create them when not yet existing\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  update(ids, changedData) {\n    let nodes = this.body.nodes;\n    let dataChanged = false;\n    for (let i = 0; i < ids.length; i++) {\n      let id = ids[i];\n      let node = nodes[id];\n      let data = changedData[i];\n      if (node !== undefined) {\n        // update node\n        dataChanged = node.setOptions(data);\n      }\n      else {\n        dataChanged = true;\n        // create node\n        node = this.create(data);\n        nodes[id] = node;\n      }\n    }\n    if (dataChanged === true) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n    else {\n      this.body.emitter.emit(\"_dataUpdated\");\n    }\n  }\n\n  /**\n   * Remove existing nodes. If nodes do not exist, the method will just ignore it.\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  remove(ids) {\n    let nodes = this.body.nodes;\n\n    for (let i = 0; i < ids.length; i++) {\n      let id = ids[i];\n      delete nodes[id];\n    }\n\n    this.body.emitter.emit(\"_dataChanged\");\n  }\n\n\n  /**\n   * create a node\n   * @param properties\n   * @param constructorClass\n   */\n  create(properties, constructorClass = Node) {\n    return new constructorClass(properties, this.body, this.images, this.groups, this.options, this.defaultOptions, this.nodeOptions)\n  }\n\n\n  refresh(clearPositions = false) {\n    let nodes = this.body.nodes;\n    for (let nodeId in nodes) {\n      let node = undefined;\n      if (nodes.hasOwnProperty(nodeId)) {\n        node = nodes[nodeId];\n      }\n      let data = this.body.data.nodes._data[nodeId];\n      if (node !== undefined && data !== undefined) {\n        if (clearPositions === true) {\n          node.setOptions({x:null, y:null});\n        }\n        node.setOptions({ fixed: false });\n        node.setOptions(data);\n      }\n    }\n  }\n\n  /**\n   * Returns the positions of the nodes.\n   * @param ids  --> optional, can be array of nodeIds, can be string\n   * @returns {{}}\n   */\n  getPositions(ids) {\n    let dataArray = {};\n    if (ids !== undefined) {\n      if (Array.isArray(ids) === true) {\n        for (let i = 0; i < ids.length; i++) {\n          if (this.body.nodes[ids[i]] !== undefined) {\n            let node = this.body.nodes[ids[i]];\n            dataArray[ids[i]] = { x: Math.round(node.x), y: Math.round(node.y) };\n          }\n        }\n      }\n      else {\n        if (this.body.nodes[ids] !== undefined) {\n          let node = this.body.nodes[ids];\n          dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) };\n        }\n      }\n    }\n    else {\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        dataArray[this.body.nodeIndices[i]] = { x: Math.round(node.x), y: Math.round(node.y) };\n      }\n    }\n    return dataArray;\n  }\n\n\n  /**\n   * Load the XY positions of the nodes into the dataset.\n   */\n  storePositions() {\n    // todo: add support for clusters and hierarchical.\n    let dataArray = [];\n    var dataset = this.body.data.nodes.getDataSet();\n\n    for (let nodeId in dataset._data) {\n      if (dataset._data.hasOwnProperty(nodeId)) {\n        let node = this.body.nodes[nodeId];\n        if (dataset._data[nodeId].x != Math.round(node.x) || dataset._data[nodeId].y != Math.round(node.y)) {\n          dataArray.push({ id: node.id, x: Math.round(node.x), y: Math.round(node.y) });\n        }\n      }\n    }\n    dataset.update(dataArray);\n  }\n\n  /**\n   * get the bounding box of a node.\n   * @param nodeId\n   * @returns {j|*}\n   */\n  getBoundingBox(nodeId) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      return this.body.nodes[nodeId].shape.boundingBox;\n    }\n  }\n\n\n  /**\n   * Get the Ids of nodes connected to this node.\n   * @param nodeId\n   * @returns {Array}\n   */\n  getConnectedNodes(nodeId) {\n    let nodeList = [];\n    if (this.body.nodes[nodeId] !== undefined) {\n      let node = this.body.nodes[nodeId];\n      let nodeObj = {}; // used to quickly check if node already exists\n      for (let i = 0; i < node.edges.length; i++) {\n        let edge = node.edges[i];\n        if (edge.toId == node.id) { // these are double equals since ids can be numeric or string\n          if (nodeObj[edge.fromId] === undefined) {\n            nodeList.push(edge.fromId);\n            nodeObj[edge.fromId] = true;\n          }\n        }\n        else if (edge.fromId == node.id) { // these are double equals since ids can be numeric or string\n          if (nodeObj[edge.toId] === undefined) {\n            nodeList.push(edge.toId);\n            nodeObj[edge.toId] = true;\n          }\n        }\n      }\n    }\n    return nodeList;\n  }\n\n  /**\n   * Get the ids of the edges connected to this node.\n   * @param nodeId\n   * @returns {*}\n   */\n  getConnectedEdges(nodeId) {\n    let edgeList = [];\n    if (this.body.nodes[nodeId] !== undefined) {\n      let node = this.body.nodes[nodeId];\n      for (let i = 0; i < node.edges.length; i++) {\n        edgeList.push(node.edges[i].id)\n      }\n    }\n    else {\n      console.log(\"NodeId provided for getConnectedEdges does not exist. Provided: \", nodeId);\n    }\n    return edgeList;\n  }\n\n\n  /**\n   * Move a node.\n   * @param String nodeId\n   * @param Number x\n   * @param Number y\n   */\n  moveNode(nodeId, x, y) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      this.body.nodes[nodeId].x = Number(x);\n      this.body.nodes[nodeId].y = Number(y);\n      setTimeout(() => {this.body.emitter.emit(\"startSimulation\")},0);\n    }\n    else {\n      console.log(\"Node id supplied to moveNode does not exist. Provided: \", nodeId);\n    }\n  }\n}\n\nexport default NodesHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/NodesHandler.js","var util = require('../../../util');\n\nimport Label from './shared/Label'\n\nimport Box           from './nodes/shapes/Box'\nimport Circle        from './nodes/shapes/Circle'\nimport CircularImage from './nodes/shapes/CircularImage'\nimport Database      from './nodes/shapes/Database'\nimport Diamond       from './nodes/shapes/Diamond'\nimport Dot           from './nodes/shapes/Dot'\nimport Ellipse       from './nodes/shapes/Ellipse'\nimport Icon          from './nodes/shapes/Icon'\nimport Image         from './nodes/shapes/Image'\nimport Square        from './nodes/shapes/Square'\nimport Star          from './nodes/shapes/Star'\nimport Text          from './nodes/shapes/Text'\nimport Triangle      from './nodes/shapes/Triangle'\nimport TriangleDown  from './nodes/shapes/TriangleDown'\nimport  Validator    from \"../../../shared/Validator\";\nimport  {printStyle} from \"../../../shared/Validator\";\n\n\n/**\n * @class Node\n * A node. A node can be connected to other nodes via one or multiple edges.\n * @param {object} options An object containing options for the node. All\n *                            options are optional, except for the id.\n *                              {number} id     Id of the node. Required\n *                              {string} label  Text label for the node\n *                              {number} x      Horizontal position of the node\n *                              {number} y      Vertical position of the node\n *                              {string} shape  Node shape, available:\n *                                              \"database\", \"circle\", \"ellipse\",\n *                                              \"box\", \"image\", \"text\", \"dot\",\n *                                              \"star\", \"triangle\", \"triangleDown\",\n *                                              \"square\", \"icon\"\n *                              {string} image  An image url\n *                              {string} title  An title text, can be HTML\n *                              {anytype} group A group name or number\n * @param {Network.Images} imagelist    A list with images. Only needed\n *                                            when the node has an image\n * @param {Network.Groups} grouplist    A list with groups. Needed for\n *                                            retrieving group options\n * @param {Object}               constants    An object with default values for\n *                                            example for the color\n *\n */\nclass Node {\n  constructor(options, body, imagelist, grouplist, globalOptions, defaultOptions, nodeOptions) {\n    this.options = util.bridgeObject(globalOptions);\n    this.globalOptions = globalOptions;\n    this.defaultOptions = defaultOptions;\n    this.nodeOptions = nodeOptions;\n    this.body = body;\n\n    this.edges = []; // all edges connected to this node\n\n    // set defaults for the options\n    this.id = undefined;\n    this.imagelist = imagelist;\n    this.grouplist = grouplist;\n\n    // state options\n    this.x = undefined;\n    this.y = undefined;\n    this.baseSize = this.options.size;\n    this.baseFontSize = this.options.font.size;\n    this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate\n    this.selected = false;\n    this.hover = false;\n\n    this.labelModule = new Label(this.body, this.options, false /* Not edge label */);\n    this.setOptions(options);\n  }\n\n\n  /**\n   * Attach a edge to the node\n   * @param {Edge} edge\n   */\n  attachEdge(edge) {\n    if (this.edges.indexOf(edge) === -1) {\n      this.edges.push(edge);\n    }\n  }\n\n\n  /**\n   * Detach a edge from the node\n   * @param {Edge} edge\n   */\n  detachEdge(edge) {\n    var index = this.edges.indexOf(edge);\n    if (index != -1) {\n      this.edges.splice(index, 1);\n    }\n  }\n\n\n  /**\n   * Set or overwrite options for the node\n   * @param {Object} options an object with options\n   * @param {Object} constants  and object with default, global options\n   */\n  setOptions(options) {\n    let currentShape = this.options.shape;\n    if (!options) {\n      return;\n    }\n    // basic options\n    if (options.id !== undefined)    {this.id = options.id;}\n\n    if (this.id === undefined) {\n      throw \"Node must have an id\";\n    }\n\n\n    // set these options locally\n    // clear x and y positions\n    if (options.x !== undefined) {\n      if (options.x === null) {this.x = undefined; this.predefinedPosition = false;}\n      else                    {this.x = parseInt(options.x); this.predefinedPosition = true;}\n    }\n    if (options.y !== undefined) {\n      if (options.y === null) {this.y = undefined; this.predefinedPosition = false;}\n      else                    {this.y = parseInt(options.y); this.predefinedPosition = true;}\n    }\n    if (options.size !== undefined)  {this.baseSize = options.size;}\n    if (options.value !== undefined) {options.value = parseFloat(options.value);}\n\n    // copy group options\n    if (typeof options.group === 'number' || (typeof options.group === 'string' && options.group != '')) {\n      var groupObj = this.grouplist.get(options.group);\n      util.deepExtend(this.options, groupObj);\n      // the color object needs to be completely defined. Since groups can partially overwrite the colors, we parse it again, just in case.\n      this.options.color = util.parseColor(this.options.color);\n    }\n\n    // this transforms all shorthands into fully defined options\n    Node.parseOptions(this.options, options, true, this.globalOptions);\n\n    this.choosify(options);\n\n    // load the images\n    if (this.options.image !== undefined) {\n      if (this.imagelist) {\n        this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage, this.id);\n      }\n      else {\n        throw \"No imagelist provided\";\n      }\n    }\n\n    this.updateLabelModule(options);\n    this.updateShape(currentShape);\n    this.labelModule.propagateFonts(this.nodeOptions, options, this.defaultOptions);\n\n    if (options.hidden !== undefined || options.physics !== undefined) {\n      return true;\n    }\n    return false;\n  }\n\n\n  /**\n   * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.\n   * Static so it can also be used by the handler.\n   * @param parentOptions\n   * @param newOptions\n   * @param allowDeletion\n   * @param globalOptions\n   */\n  static parseOptions(parentOptions, newOptions, allowDeletion = false, globalOptions = {}) {\n    var fields = [\n      'color',\n      'font',\n      'fixed',\n      'shadow'\n    ];\n    util.selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n    // merge the shadow options into the parent.\n    util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions);\n\n    // individual shape newOptions\n    if (newOptions.color !== undefined && newOptions.color !== null) {\n      let parsedColor = util.parseColor(newOptions.color);\n      util.fillIfDefined(parentOptions.color, parsedColor);\n    }\n    else if (allowDeletion === true && newOptions.color === null) {\n      parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options\n    }\n\n    // handle the fixed options\n    if (newOptions.fixed !== undefined && newOptions.fixed !== null) {\n      if (typeof newOptions.fixed === 'boolean') {\n        parentOptions.fixed.x = newOptions.fixed;\n        parentOptions.fixed.y = newOptions.fixed;\n      }\n      else {\n        if (newOptions.fixed.x !== undefined && typeof newOptions.fixed.x === 'boolean') {\n          parentOptions.fixed.x = newOptions.fixed.x;\n        }\n        if (newOptions.fixed.y !== undefined && typeof newOptions.fixed.y === 'boolean') {\n          parentOptions.fixed.y = newOptions.fixed.y;\n        }\n      }\n    }\n\n    // handle the font options\n    if (newOptions.font !== undefined && newOptions.font !== null) {\n      Label.parseOptions(parentOptions.font, newOptions);\n    }\n    else if (allowDeletion === true && newOptions.font === null) {\n      parentOptions.font =  util.bridgeObject(globalOptions.font); // set the object back to the global options\n    }\n\n    // handle the scaling options, specifically the label part\n    if (newOptions.scaling !== undefined) {\n      util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling);\n    }\n  }\n\n  choosify(options) {\n    this.chooser = true;\n\n    let pile = [options, this.options, this.defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenNode = util.topMost(pile, ['chosen', 'node']);\n      if ((typeof chosenNode === 'boolean') || (typeof chosenNode === 'function')) {\n        this.chooser = chosenNode;\n      }\n    }\n  }\n\n  getFormattingValues() {\n    let values = {\n      color: this.options.color.background,\n      borderWidth: this.options.borderWidth,\n      borderColor: this.options.color.border,\n      size: this.options.size,\n      borderDashes: this.options.shapeProperties.borderDashes,\n      borderRadius: this.options.shapeProperties.borderRadius,\n      shadow: this.options.shadow.enabled,\n      shadowColor: this.options.shadow.color,\n      shadowSize: this.options.shadow.size,\n      shadowX: this.options.shadow.x,\n      shadowY: this.options.shadow.y\n    };\n    if (this.selected || this.hover) {\n      if (this.chooser === true) {\n        if (this.selected) {\n          values.borderWidth *= 2;\n          values.color = this.options.color.highlight.background;\n          values.borderColor = this.options.color.highlight.border;\n          values.shadow = this.options.shadow.enabled;\n        } else if (this.hover) {\n          values.color = this.options.color.hover.background;\n          values.borderColor = this.options.color.hover.border;\n          values.shadow = this.options.shadow.enabled;\n        }\n      } else if (typeof this.chooser === 'function') {\n        this.chooser(values, this.options.id, this.selected, this.hover);\n        if (values.shadow === false) {\n          if ((values.shadowColor !== this.options.shadow.color) ||\n              (values.shadowSize !== this.options.shadow.size) ||\n              (values.shadowX !== this.options.shadow.x) ||\n              (values.shadowY !== this.options.shadow.y)) {\n            values.shadow = true;\n          }\n        }\n      }\n    } else {\n      values.shadow = this.options.shadow.enabled;\n    }\n    return values;\n  }\n\n\n  updateLabelModule(options) {\n    if (this.options.label === undefined || this.options.label === null) {\n      this.options.label = '';\n    }\n    this.labelModule.setOptions(this.options, true);\n    if (this.labelModule.baseSize !== undefined) {\n      this.baseFontSize = this.labelModule.baseSize;\n    }\n    this.labelModule.constrain(this.nodeOptions, options, this.defaultOptions);\n    this.labelModule.choosify(this.nodeOptions, options, this.defaultOptions);\n  }\n\n  updateShape(currentShape) {\n    if (currentShape === this.options.shape && this.shape) {\n      this.shape.setOptions(this.options, this.imageObj);\n    }\n    else {\n      // choose draw method depending on the shape\n      switch (this.options.shape) {\n        case 'box':\n          this.shape = new Box(this.options, this.body, this.labelModule);\n          break;\n        case 'circle':\n          this.shape = new Circle(this.options, this.body, this.labelModule);\n          break;\n        case 'circularImage':\n          this.shape = new CircularImage(this.options, this.body, this.labelModule, this.imageObj);\n          break;\n        case 'database':\n          this.shape = new Database(this.options, this.body, this.labelModule);\n          break;\n        case 'diamond':\n          this.shape = new Diamond(this.options, this.body, this.labelModule);\n          break;\n        case 'dot':\n          this.shape = new Dot(this.options, this.body, this.labelModule);\n          break;\n        case 'ellipse':\n          this.shape = new Ellipse(this.options, this.body, this.labelModule);\n          break;\n        case 'icon':\n          this.shape = new Icon(this.options, this.body, this.labelModule);\n          break;\n        case 'image':\n          this.shape = new Image(this.options, this.body, this.labelModule, this.imageObj);\n          break;\n        case 'square':\n          this.shape = new Square(this.options, this.body, this.labelModule);\n          break;\n        case 'star':\n          this.shape = new Star(this.options, this.body, this.labelModule);\n          break;\n        case 'text':\n          this.shape = new Text(this.options, this.body, this.labelModule);\n          break;\n        case 'triangle':\n          this.shape = new Triangle(this.options, this.body, this.labelModule);\n          break;\n        case 'triangleDown':\n          this.shape = new TriangleDown(this.options, this.body, this.labelModule);\n          break;\n        default:\n          this.shape = new Ellipse(this.options, this.body, this.labelModule);\n          break;\n      }\n    }\n    this._reset();\n  }\n\n\n  /**\n   * select this node\n   */\n  select() {\n    this.selected = true;\n    this._reset();\n  }\n\n\n  /**\n   * unselect this node\n   */\n  unselect() {\n    this.selected = false;\n    this._reset();\n  }\n\n\n\n  /**\n   * Reset the calculated size of the node, forces it to recalculate its size\n   * @private\n   */\n  _reset() {\n    this.shape.width = undefined;\n    this.shape.height = undefined;\n  }\n\n\n  /**\n   * get the title of this node.\n   * @return {string} title    The title of the node, or undefined when no title\n   *                           has been set.\n   */\n  getTitle() {\n    return this.options.title;\n  }\n\n\n  /**\n   * Calculate the distance to the border of the Node\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Number} angle        Angle in radians\n   * @returns {number} distance   Distance to the border in pixels\n   */\n  distanceToBorder(ctx, angle) {\n    return this.shape.distanceToBorder(ctx,angle);\n  }\n\n\n  /**\n   * Check if this node has a fixed x and y position\n   * @return {boolean}      true if fixed, false if not\n   */\n  isFixed() {\n    return (this.options.fixed.x && this.options.fixed.y);\n  }\n\n\n  /**\n   * check if this node is selecte\n   * @return {boolean} selected   True if node is selected, else false\n   */\n  isSelected() {\n    return this.selected;\n  }\n\n\n  /**\n   * Retrieve the value of the node. Can be undefined\n   * @return {Number} value\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n\n  /**\n   * Adjust the value range of the node. The node will adjust it's size\n   * based on its value.\n   * @param {Number} min\n   * @param {Number} max\n   */\n  setValueRange(min, max, total) {\n    if (this.options.value !== undefined) {\n      var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);\n      var sizeDiff = this.options.scaling.max - this.options.scaling.min;\n      if (this.options.scaling.label.enabled === true) {\n        var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;\n        this.options.font.size = this.options.scaling.label.min + scale * fontDiff;\n      }\n      this.options.size = this.options.scaling.min + scale * sizeDiff;\n    }\n    else {\n      this.options.size = this.baseSize;\n      this.options.font.size = this.baseFontSize;\n    }\n\n    this.updateLabelModule();\n  }\n\n\n  /**\n   * Draw this node in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  draw(ctx) {\n    let values = this.getFormattingValues();\n    this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values);\n  }\n\n\n  /**\n   * Update the bounding box of the shape\n   */\n  updateBoundingBox(ctx) {\n    this.shape.updateBoundingBox(this.x,this.y,ctx);\n  }\n\n  /**\n   * Recalculate the size of this node in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  resize(ctx) {\n    let values = this.getFormattingValues();\n    this.shape.resize(ctx, this.selected, this.hover, values);\n  }\n\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top, right, bottom\n   * @return {boolean}     True if location is located on node\n   */\n  isOverlappingWith(obj) {\n    return (\n      this.shape.left < obj.right &&\n      this.shape.left + this.shape.width > obj.left &&\n      this.shape.top < obj.bottom &&\n      this.shape.top + this.shape.height > obj.top\n    );\n  }\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top, right, bottom\n   * @return {boolean}     True if location is located on node\n   */\n  isBoundingBoxOverlappingWith(obj) {\n    return (\n      this.shape.boundingBox.left < obj.right &&\n      this.shape.boundingBox.right > obj.left &&\n      this.shape.boundingBox.top < obj.bottom &&\n      this.shape.boundingBox.bottom > obj.top\n    );\n  }\n}\n\nexport default Node;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/Node.js","let util = require('../../../../util');\n\nclass Label {\n  constructor(body, options, edgelabel = false) {\n    this.body = body;\n\n    this.pointToSelf = false;\n    this.baseSize = undefined;\n    this.fontOptions = {};\n    this.setOptions(options);\n    this.size = {top: 0, left: 0, width: 0, height: 0, yLine: 0}; // could be cached\n    this.isEdgeLabel = edgelabel;\n  }\n\n  setOptions(options, allowDeletion = false) {\n    this.elementOptions = options;\n\n    // We want to keep the font options seperated from the node options.\n    // The node options have to mirror the globals when they are not overruled.\n    this.fontOptions = util.deepExtend({},options.font, true);\n\n    if (options.label !== undefined) {\n      this.labelDirty = true;\n    }\n\n    if (options.font !== undefined) {\n      Label.parseOptions(this.fontOptions, options, allowDeletion);\n      if (typeof options.font === 'string') {\n        this.baseSize = this.fontOptions.size;\n      }\n      else if (typeof options.font === 'object') {\n        if (options.font.size !== undefined) {\n          this.baseSize = options.font.size;\n        }\n      }\n    }\n  }\n\n  static parseOptions(parentOptions, newOptions, allowDeletion = false) {\n    if (typeof newOptions.font === 'string') {\n      let newOptionsArray = newOptions.font.split(\" \");\n      parentOptions.size    = newOptionsArray[0].replace(\"px\",'');\n      parentOptions.face    = newOptionsArray[1];\n      parentOptions.color   = newOptionsArray[2];\n      parentOptions.vadjust = 0;\n    }\n    else if (typeof newOptions.font === 'object') {\n      util.fillIfDefined(parentOptions, newOptions.font, allowDeletion);\n    }\n    parentOptions.size    = Number(parentOptions.size);\n    parentOptions.vadjust = Number(parentOptions.vadjust);\n  }\n\n  // set the width and height constraints based on 'nearest' value\n  constrain(elementOptions, options, defaultOptions) {\n    this.fontOptions.constrainWidth = false;\n    this.fontOptions.maxWdt = -1;\n    this.fontOptions.minWdt = -1;\n\n    let pile = [options, elementOptions, defaultOptions];\n\n    let widthConstraint = util.topMost(pile, 'widthConstraint');\n    if (typeof widthConstraint === 'number') {\n      this.fontOptions.maxWdt = Number(widthConstraint);\n      this.fontOptions.minWdt = Number(widthConstraint);\n    } else if (typeof widthConstraint === 'object') {\n      let widthConstraintMaximum = util.topMost(pile, ['widthConstraint', 'maximum']);\n      if (typeof widthConstraintMaximum === 'number') {\n        this.fontOptions.maxWdt = Number(widthConstraintMaximum);\n      }\n      let widthConstraintMinimum = util.topMost(pile, ['widthConstraint', 'minimum'])\n      if (typeof widthConstraintMinimum === 'number') {\n        this.fontOptions.minWdt = Number(widthConstraintMinimum);\n      }\n    }\n\n    this.fontOptions.constrainHeight = false;\n    this.fontOptions.minHgt = -1;\n    this.fontOptions.valign = 'middle';\n\n    let heightConstraint = util.topMost(pile, 'heightConstraint');\n    if (typeof heightConstraint === 'number') {\n      this.fontOptions.minHgt = Number(heightConstraint);\n    } else if (typeof heightConstraint === 'object') {\n      let heightConstraintMinimum = util.topMost(pile, ['heightConstraint', 'minimum']);\n      if (typeof heightConstraintMinimum === 'number') {\n        this.fontOptions.minHgt = Number(heightConstraintMinimum);\n      }\n      let heightConstraintValign = util.topMost(pile, ['heightConstraint', 'valign']);\n      if (typeof heightConstraintValign === 'string') {\n        if ((heightConstraintValign === 'top')||(heightConstraintValign === 'bottom')) {\n            this.fontOptions.valign = heightConstraintValign;\n        }\n      }\n    }\n  }\n\n  // set the selected functions based on 'nearest' value\n  choosify(elementOptions, options, defaultOptions) {\n    this.fontOptions.chooser = true;\n\n    let pile = [options, elementOptions, defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.fontOptions.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenLabel = util.topMost(pile, ['chosen', 'label']);\n      if ((typeof chosenLabel === 'boolean') || (typeof chosenLabel === 'function')) {\n        this.fontOptions.chooser = chosenLabel;\n      }\n    }\n  }\n\n  // When margins are set in an element, adjust sizes is called to remove them\n  // from the width/height constraints. This must be done prior to label sizing.\n  adjustSizes(margins) {\n    let widthBias =  (margins) ? (margins.right + margins.left) : 0;\n    if (this.fontOptions.constrainWidth) {\n      this.fontOptions.maxWdt -= widthBias;\n      this.fontOptions.minWdt -= widthBias;\n    }\n    let heightBias = (margins) ? (margins.top + margins.bottom)  : 0;\n    if (this.fontOptions.constrainHeight) {\n      this.fontOptions.minHgt -= heightBias;\n    }\n  }\n\n  propagateFonts(options, groupOptions, defaultOptions) {\n    if (this.fontOptions.multi) {\n      let mods = [ 'bold', 'ital', 'boldital', 'mono' ];\n      for (const mod of mods) {\n        let optionsFontMod;\n        if (options.font) {\n          optionsFontMod = options.font[mod];\n        }\n        if (typeof optionsFontMod === 'string') {\n          let modOptionsArray = optionsFontMod.split(\" \");\n          this.fontOptions[mod].size  = modOptionsArray[0].replace(\"px\",\"\");\n          this.fontOptions[mod].face  = modOptionsArray[1];\n          this.fontOptions[mod].color = modOptionsArray[2];\n          this.fontOptions[mod].vadjust = this.fontOptions.vadjust;\n          this.fontOptions[mod].mod = defaultOptions.font[mod].mod;\n        } else {\n          // We need to be crafty about loading the modded fonts. We want as\n          // much 'natural' versatility as we can get, so a simple global\n          // change propagates in an expected way, even if not stictly logical.\n\n          // face: We want to capture any direct settings and overrides, but\n          //       fall back to the base font if there aren't any. We make a\n          //       special exception for mono, since we probably don't want to\n          //       sync to a the base font face.\n          //\n          //   if the mod face is in the node's options, use it\n          //   else if the mod face is in the global options, use it\n          //   else if the face is in the global options, use it\n          //   else use the base font's face.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('face')) {\n            this.fontOptions[mod].face = optionsFontMod.face;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('face')) {\n            this.fontOptions[mod].face = groupOptions.font[mod].face;\n          } else if (mod === 'mono') {\n            this.fontOptions[mod].face = defaultOptions.font[mod].face;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('face')) {\n            this.fontOptions[mod].face = groupOptions.font.face;\n          } else {\n            this.fontOptions[mod].face = this.fontOptions.face;\n          }\n\n          // color: this is handled just like the face.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('color')) {\n            this.fontOptions[mod].color = optionsFontMod.color;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('color')) {\n            this.fontOptions[mod].color = groupOptions.font[mod].color;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('color')) {\n            this.fontOptions[mod].color = groupOptions.font.color;\n          } else {\n            this.fontOptions[mod].color = this.fontOptions.color;\n          }\n\n          // mod: this is handled just like the face, except we never grab the\n          // base font's mod. We know they're in the defaultOptions, and unless\n          // we've been steered away from them, we use the default.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = optionsFontMod.mod;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = groupOptions.font[mod].mod;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = groupOptions.font.mod;\n          } else {\n            this.fontOptions[mod].mod = defaultOptions.font[mod].mod;\n          }\n\n          // size: It's important that we size up defaults similarly if we're\n          //       using default faces unless overriden. We want to preserve the\n          //       ratios closely - but if faces have changed, all bets are off.\n          //\n          //   if the mod size is in the node's options, use it\n          //   else if the mod size is in the global options, use it\n          //   else if the mod face is the same as the default and the base face\n          //     is the same as the default, scale the mod size using the same\n          //     ratio\n          //   else if the size is in the global options, use it\n          //   else use the base font's size.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('size')) {\n            this.fontOptions[mod].size = optionsFontMod.size;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('size')) {\n            this.fontOptions[mod].size = groupOptions.font[mod].size;\n          } else if ((this.fontOptions[mod].face === defaultOptions.font[mod].face) &&\n                     (this.fontOptions.face === defaultOptions.font.face)) {\n            let ratio = this.fontOptions.size / Number(defaultOptions.font.size);\n            this.fontOptions[mod].size = defaultOptions.font[mod].size * ratio;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('size')) {\n            this.fontOptions[mod].size = groupOptions.font.size;\n          } else {\n            this.fontOptions[mod].size = this.fontOptions.size;\n          }\n\n          // vadjust: this is handled just like the size.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = optionsFontMod.vadjust;\n          } else if (groupOptions.font &&\n                     groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = groupOptions.font[mod].vadjust;\n          } else if ((this.fontOptions[mod].face === defaultOptions.font[mod].face) &&\n                     (this.fontOptions.face === defaultOptions.font.face)) {\n            let ratio = this.fontOptions.size / Number(defaultOptions.font.size);\n            this.fontOptions[mod].vadjust = defaultOptions.font[mod].vadjust * Math.round(ratio);\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = groupOptions.font.vadjust;\n          } else {\n            this.fontOptions[mod].vadjust = this.fontOptions.vadjust;\n          }\n        }\n        this.fontOptions[mod].size    = Number(this.fontOptions[mod].size);\n        this.fontOptions[mod].vadjust = Number(this.fontOptions[mod].vadjust);\n      }\n    }\n  }\n\n\n  /**\n   * Main function. This is called from anything that wants to draw a label.\n   * @param ctx\n   * @param x\n   * @param y\n   * @param selected\n   * @param baseline\n   */\n  draw(ctx, x, y, selected, hover, baseline = 'middle') {\n    // if no label, return\n    if (this.elementOptions.label === undefined)\n      return;\n\n    // check if we have to render the label\n    let viewFontSize = this.fontOptions.size * this.body.view.scale;\n    if (this.elementOptions.label && viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1)\n      return;\n\n    // update the size cache if required\n    this.calculateLabelSize(ctx, selected, hover, x, y, baseline);\n\n    // create the fontfill background\n    this._drawBackground(ctx);\n    // draw text\n    this._drawText(ctx, selected, hover, x, y, baseline);\n  }\n\n  /**\n   * Draws the label background\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _drawBackground(ctx) {\n    if (this.fontOptions.background !== undefined && this.fontOptions.background !== \"none\") {\n      ctx.fillStyle = this.fontOptions.background;\n\n      let lineMargin = 2;\n\n      if (this.isEdgeLabel) {\n        switch (this.fontOptions.align) {\n          case 'middle':\n            ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height);\n            break;\n          case 'top':\n            ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height);\n            break;\n          case 'bottom':\n            ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height);\n            break;\n          default:\n            ctx.fillRect(this.size.left, this.size.top - 0.5*lineMargin, this.size.width, this.size.height);\n            break;\n        }\n      } else {\n        ctx.fillRect(this.size.left, this.size.top - 0.5*lineMargin, this.size.width, this.size.height);\n      }\n    }\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param x\n   * @param baseline\n   * @private\n   */\n  _drawText(ctx, selected, hover, x, y, baseline = 'middle') {\n    let fontSize = this.fontOptions.size;\n    let viewFontSize = fontSize * this.body.view.scale;\n    // this ensures that there will not be HUGE letters on screen by setting an upper limit on the visible text size (regardless of zoomLevel)\n    if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {\n      fontSize = Number(this.elementOptions.scaling.label.maxVisible) / this.body.view.scale;\n    }\n\n    let yLine = this.size.yLine;\n    [x, yLine] = this._setAlignment(ctx, x, yLine, baseline);\n\n    ctx.textAlign = 'left'\n    x = x - this.size.width / 2; // Shift label 1/2-distance to the left\n    if ((this.fontOptions.valign) && (this.size.height > this.size.labelHeight)) {\n      if (this.fontOptions.valign === 'top') {\n        yLine -= (this.size.height - this.size.labelHeight) / 2;\n      }\n      if (this.fontOptions.valign === 'bottom') {\n        yLine += (this.size.height - this.size.labelHeight) / 2;\n      }\n    }\n\n    // draw the text\n    for (let i = 0; i < this.lineCount; i++) {\n      if (this.lines[i] && this.lines[i].blocks) {\n        let width = 0;\n        if (this.isEdgeLabel || this.fontOptions.align === 'center') {\n          width += (this.size.width - this.lines[i].width) / 2\n        } else if (this.fontOptions.align === 'right') {\n          width += (this.size.width - this.lines[i].width)\n        }\n        for (let j = 0; j < this.lines[i].blocks.length; j++) {\n          let block = this.lines[i].blocks[j];\n          ctx.font = block.font;\n          let [fontColor, strokeColor] = this._getColor(block.color, viewFontSize, block.strokeColor);\n          if (block.strokeWidth > 0) {\n            ctx.lineWidth = block.strokeWidth;\n            ctx.strokeStyle = strokeColor;\n            ctx.lineJoin = 'round';\n          }\n          ctx.fillStyle = fontColor;\n\n          if (block.strokeWidth > 0) {\n            ctx.strokeText(block.text, x + width, yLine + block.vadjust);\n          }\n          ctx.fillText(block.text, x + width, yLine + block.vadjust);\n          width += block.width;\n        }\n        yLine += this.lines[i].height;\n      }\n    }\n  }\n\n  _setAlignment(ctx, x, yLine, baseline) {\n    // check for label alignment (for edges)\n    // TODO: make alignment for nodes\n    if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) {\n      x = 0;\n      yLine = 0;\n\n      let lineMargin = 2;\n      if (this.fontOptions.align === 'top') {\n        ctx.textBaseline = 'alphabetic';\n        yLine -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers\n      }\n      else if (this.fontOptions.align === 'bottom') {\n        ctx.textBaseline = 'hanging';\n        yLine += 2 * lineMargin;// distance from edge, required because we use hanging. Hanging has less difference between browsers\n      }\n      else {\n        ctx.textBaseline = 'middle';\n      }\n    }\n    else {\n      ctx.textBaseline = baseline;\n    }\n    return [x,yLine];\n  }\n\n  /**\n   * fade in when relative scale is between threshold and threshold - 1.\n   * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.\n   *\n   * @param viewFontSize\n   * @returns {*[]}\n   * @private\n   */\n  _getColor(color, viewFontSize, initialStrokeColor) {\n    let fontColor = color || '#000000';\n    let strokeColor = initialStrokeColor || '#ffffff';\n    if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {\n      let opacity = Math.max(0, Math.min(1, 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)));\n      fontColor = util.overrideOpacity(fontColor, opacity);\n      strokeColor = util.overrideOpacity(strokeColor, opacity);\n    }\n    return [fontColor, strokeColor];\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @returns {{width: number, height: number}}\n   */\n  getTextSize(ctx, selected = false, hover = false) {\n    this._processLabel(ctx, selected, hover);\n    return {\n      width: this.size.width,\n      height: this.size.height,\n      lineCount: this.lineCount\n    };\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @param x\n   * @param y\n   * @param baseline\n   */\n  calculateLabelSize(ctx, selected, hover, x = 0, y = 0, baseline = 'middle') {\n    if (this.labelDirty === true) {\n      this._processLabel(ctx, selected, hover);\n    }\n    this.size.left = x - this.size.width * 0.5;\n    this.size.top = y - this.size.height * 0.5;\n    this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;\n    if (baseline === \"hanging\") {\n      this.size.top += 0.5 * this.fontOptions.size;\n      this.size.top += 4;   // distance from node, required because we use hanging. Hanging has less difference between browsers\n      this.size.yLine += 4; // distance from node\n    }\n    this.labelDirty = false;\n  }\n\n  /**\n   * normalize the markup system\n   */\n  decodeMarkupSystem(markupSystem) {\n    let system = 'none';\n    if (markupSystem === 'markdown' || markupSystem === 'md') {\n      system = 'markdown';\n    } else if (markupSystem === true || markupSystem === 'html') {\n      system = 'html'\n    }\n    return system;\n  }\n\n  /**\n   * Explodes a piece of text into single-font blocks using a given markup\n   * @param text\n   * @param markupSystem\n   * @returns [{ text, mod }]\n   */\n  splitBlocks(text, markupSystem) {\n    let system = this.decodeMarkupSystem(markupSystem);\n    if (system === 'none') {\n      return [{\n        text: text,\n        mod: 'normal'\n      }]\n    } else if (system === 'markdown') {\n      return this.splitMarkdownBlocks(text);\n    } else if (system === 'html') {\n      return this.splitHtmlBlocks(text);\n    }\n  }\n\n  splitMarkdownBlocks(text) {\n    let blocks = [];\n    let s = {\n      bold: false,\n      ital: false,\n      mono: false,\n      beginable: true,\n      spacing: false,\n      position: 0,\n      buffer: \"\",\n      modStack: []\n    };\n    s.mod = function() {\n      return (this.modStack.length === 0) ? 'normal' : this.modStack[0];\n    }\n    s.modName = function() {\n      if (this.modStack.length === 0)\n        return 'normal';\n      else if (this.modStack[0] === 'mono')\n        return 'mono';\n      else {\n        if (s.bold && s.ital) {\n          return 'boldital';\n        } else if (s.bold) {\n          return 'bold';\n        } else if (s.ital) {\n          return 'ital';\n        }\n      }\n    }\n    s.emitBlock = function(override = false) {\n      if (this.spacing) {\n        this.add(\" \");\n        this.spacing = false;\n      }\n      if (this.buffer.length > 0) {\n        blocks.push({ text: this.buffer, mod: this.modName() });\n        this.buffer = \"\";\n      }\n    }\n    s.add = function(text) {\n      if (text === \" \") {\n        s.spacing = true;\n      }\n      if (s.spacing) {\n        this.buffer += \" \";\n        this.spacing = false;\n      }\n      if (text != \" \") {\n        this.buffer += text;\n      }\n    }\n    while (s.position < text.length) {\n      let ch = text.charAt(s.position);\n      if (/[ \\t]/.test(ch)) {\n        if (!s.mono) {\n          s.spacing = true;\n        } else {\n          s.add(ch);\n        }\n        s.beginable = true\n      } else if (/\\\\/.test(ch)) {\n        if (s.position < text.length+1) {\n          s.position++;\n          ch = text.charAt(s.position);\n          if (/ \\t/.test(ch)) {\n            s.spacing = true;\n          } else {\n            s.add(ch);\n            s.beginable = false;\n          }\n        }\n      } else if (!s.mono && !s.bold && (s.beginable || s.spacing) && /\\*/.test(ch)) {\n        s.emitBlock();\n        s.bold = true;\n        s.modStack.unshift(\"bold\");\n      } else if (!s.mono && !s.ital && (s.beginable || s.spacing) && /\\_/.test(ch)) {\n        s.emitBlock();\n        s.ital = true;\n        s.modStack.unshift(\"ital\");\n      } else if (!s.mono && (s.beginable || s.spacing) && /`/.test(ch)) {\n        s.emitBlock();\n        s.mono = true;\n        s.modStack.unshift(\"mono\");\n      } else if (!s.mono && (s.mod() === \"bold\") && /\\*/.test(ch)) {\n        if ((s.position === text.length-1) || /[.,_` \\t\\n]/.test(text.charAt(s.position+1))) {\n          s.emitBlock();\n          s.bold = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else if (!s.mono && (s.mod() === \"ital\") && /\\_/.test(ch)) {\n        if ((s.position === text.length-1) || /[.,*` \\t\\n]/.test(text.charAt(s.position+1))) {\n          s.emitBlock();\n          s.ital = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else if (s.mono && (s.mod() === \"mono\") && /`/.test(ch)) {\n        if ((s.position === text.length-1) || (/[.,*_ \\t\\n]/.test(text.charAt(s.position+1)))) {\n          s.emitBlock();\n          s.mono = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else {\n        s.add(ch);\n        s.beginable = false;\n      }\n      s.position++\n    }\n    s.emitBlock();\n    return blocks;\n  }\n\n  splitHtmlBlocks(text) {\n    let blocks = [];\n    let s = {\n      bold: false,\n      ital: false,\n      mono: false,\n      spacing: false,\n      position: 0,\n      buffer: \"\",\n      modStack: []\n    };\n    s.mod = function() {\n      return (this.modStack.length === 0) ? 'normal' : this.modStack[0];\n    }\n    s.modName = function() {\n      if (this.modStack.length === 0)\n        return 'normal';\n      else if (this.modStack[0] === 'mono')\n        return 'mono';\n      else {\n        if (s.bold && s.ital) {\n          return 'boldital';\n        } else if (s.bold) {\n          return 'bold';\n        } else if (s.ital) {\n          return 'ital';\n        }\n      }\n    }\n    s.emitBlock = function(override = false) {\n      if (this.spacing) {\n        this.add(\" \");\n        this.spacing = false;\n      }\n      if (this.buffer.length > 0) {\n        blocks.push({ text: this.buffer, mod: this.modName() });\n        this.buffer = \"\";\n      }\n    }\n    s.add = function(text) {\n      if (text === \" \") {\n        s.spacing = true;\n      }\n      if (s.spacing) {\n        this.buffer += \" \";\n        this.spacing = false;\n      }\n      if (text != \" \") {\n        this.buffer += text;\n      }\n    }\n    while (s.position < text.length) {\n      let ch = text.charAt(s.position);\n      if (/[ \\t]/.test(ch)) {\n        if (!s.mono) {\n          s.spacing = true;\n        } else {\n          s.add(ch);\n        }\n      } else if (/</.test(ch)) {\n        if (!s.mono && !s.bold && /<b>/.test(text.substr(s.position,3))) {\n          s.emitBlock();\n          s.bold = true;\n          s.modStack.unshift(\"bold\");\n          s.position += 2;\n        } else if (!s.mono && !s.ital && /<i>/.test(text.substr(s.position,3))) {\n          s.emitBlock();\n          s.ital = true;\n          s.modStack.unshift(\"ital\");\n          s.position += 2;\n        } else if (!s.mono && /<code>/.test(text.substr(s.position,6))) {\n          s.emitBlock();\n          s.mono = true;\n          s.modStack.unshift(\"mono\");\n          s.position += 5;\n        } else if (!s.mono && (s.mod() === 'bold') && /<\\/b>/.test(text.substr(s.position,4))) {\n          s.emitBlock();\n          s.bold = false;\n          s.modStack.shift();\n          s.position += 3;\n        } else if (!s.mono && (s.mod() === 'ital') && /<\\/i>/.test(text.substr(s.position,4))) {\n          s.emitBlock();\n          s.ital = false;\n          s.modStack.shift();\n          s.position += 3;\n        } else if ((s.mod() === 'mono') && /<\\/code>/.test(text.substr(s.position,7))) {\n          s.emitBlock();\n          s.mono = false;\n          s.modStack.shift();\n          s.position += 6;\n        } else {\n          s.add(ch);\n        }\n      } else if (/&/.test(ch)) {\n        if (/&lt;/.test(text.substr(s.position,4))) {\n          s.add(\"<\");\n          s.position += 3;\n        } else if (/&amp;/.test(text.substr(s.position,5))) {\n          s.add(\"&\");\n          s.position += 4;\n        } else {\n          s.add(\"&\");\n        }\n      } else {\n        s.add(ch);\n      }\n      s.position++\n    }\n    s.emitBlock();\n    return blocks;\n  }\n\n  getFormattingValues(ctx, selected, hover, mod) {\n    let values = {\n      color: (mod === \"normal\") ? this.fontOptions.color : this.fontOptions[mod].color,\n      size: (mod === \"normal\") ? this.fontOptions.size : this.fontOptions[mod].size,\n      face: (mod === \"normal\") ? this.fontOptions.face : this.fontOptions[mod].face,\n      mod: (mod === \"normal\") ? \"\" : this.fontOptions[mod].mod,\n      vadjust: (mod === \"normal\") ? this.fontOptions.vadjust : this.fontOptions[mod].vadjust,\n      strokeWidth: this.fontOptions.strokeWidth,\n      strokeColor: this.fontOptions.strokeColor\n    };\n    if (mod === \"normal\") {\n      if (selected || hover) {\n        if ((this.fontOptions.chooser === true) && (this.elementOptions.labelHighlightBold)) {\n          values.mod = 'bold';\n        } else if (typeof this.fontOptions.chooser === 'function') {\n          this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover);\n        }\n      }\n    } else {\n      if ((selected || hover) && (typeof this.fontOptions.chooser === 'function')) {\n        this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover);\n      }\n    }\n    ctx.font = (values.mod + \" \" + values.size + \"px \" + values.face).replace(/\"/g, \"\");\n    values.font = ctx.font;\n    values.height = values.size;\n    return values;\n  }\n\n  differentState(selected, hover) {\n    return ((selected !== this.fontOptions.selectedState) && (hover !== this.fontOptions.hoverState));\n  }\n\n  /**\n   * This explodes the label string into lines and sets the width, height and number of lines.\n   * @param ctx\n   * @param selected\n   * @private\n   */\n  _processLabel(ctx, selected, hover) {\n    let width = 0;\n    let height = 0;\n    let nlLines = [];\n    let lines = [];\n    let k = 0;\n    lines.add = function(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) {\n      if (this.length == l) {\n        this[l] = { width: 0, height: 0, blocks: [] };\n      }\n      this[l].blocks.push({ text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor });\n    }\n    lines.accumulate = function(l, width, height) {\n      this[l].width += width;\n      this[l].height = height > this[l].height ? height : this[l].height;\n    }\n    lines.addAndAccumulate = function(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) {\n      this.add(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor);\n      this.accumulate(l, width, height);\n    }\n    if (this.elementOptions.label !== undefined) {\n      let nlLines = String(this.elementOptions.label).split('\\n');\n      let lineCount = nlLines.length;\n      if (this.elementOptions.font.multi) {\n        for (let i = 0; i < lineCount; i++) {\n          let blocks = this.splitBlocks(nlLines[i], this.elementOptions.font.multi);\n          let lineWidth = 0;\n          let lineHeight = 0;\n          if (blocks) {\n            if (blocks.length == 0) {\n              let values = this.getFormattingValues(ctx, selected, hover, \"normal\");\n              lines.addAndAccumulate(k, \"\", values.font, values.color, 0, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor);\n              height += lines[k].height;\n              k++;\n              continue;\n            }\n            for (let j = 0; j < blocks.length; j++) {\n              if (this.fontOptions.maxWdt > 0) {\n                let values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod);\n                let words = blocks[j].text.split(\" \");\n                let atStart = true\n                let text = \"\";\n                let measure;\n                let lastMeasure;\n                let w = 0;\n                while (w < words.length) {\n                  let pre = atStart ? \"\" : \" \";\n                  lastMeasure = measure;\n                  measure = ctx.measureText(text + pre + words[w]);\n                  if (lineWidth + measure.width > this.fontOptions.maxWdt) {\n                    lineHeight = (values.height > lineHeight) ? values.height : lineHeight;\n                    lines.add(k, text, values.font, values.color, lastMeasure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                    lines.accumulate(k, lastMeasure.width, lineHeight);\n                    text = \"\";\n                    atStart = true;\n                    lineWidth = 0;\n                    width = lines[k].width > width ? lines[k].width : width;\n                    height += lines[k].height;\n                    k++;\n                  } else {\n                    text = text + pre + words[w];\n                    if (w === words.length-1) {\n                      lineHeight = (values.height > lineHeight) ? values.height : lineHeight;\n                      lineWidth += measure.width;\n                      lines.add(k, text, values.font, values.color, measure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                      lines.accumulate(k, measure.width, lineHeight);\n                      if (j === blocks.length-1) {\n                        width = lines[k].width > width ? lines[k].width : width;\n                        height += lines[k].height;\n                        k++;\n                      }\n                    }\n                    w++;\n                    atStart = false;\n                  }\n                }\n              } else {\n                let values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod);\n                let measure = ctx.measureText(blocks[j].text);\n                lines.addAndAccumulate(k, blocks[j].text, values.font, values.color, measure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                width = lines[k].width > width ? lines[k].width : width;\n                if (blocks.length-1 === j) {\n                  height += lines[k].height;\n                  k++;\n                }\n              }\n            }\n          }\n        }\n      } else {\n        for (let i = 0; i < lineCount; i++) {\n          let values = this.getFormattingValues(ctx, selected, hover, \"normal\");\n          if (this.fontOptions.maxWdt > 0) {\n            let words = nlLines[i].split(\" \");\n            let text = \"\";\n            let measure;\n            let lastMeasure;\n            let w = 0;\n            while (w < words.length) {\n              let pre = (text === \"\") ? \"\" : \" \";\n              lastMeasure = measure;\n              measure = ctx.measureText(text + pre + words[w]);\n              if (measure.width > this.fontOptions.maxWdt) {\n                lines.addAndAccumulate(k, text, values.font, values.color, lastMeasure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor)\n                width = lines[k].width > width ? lines[k].width : width;\n                height += lines[k].height;\n                text = \"\";\n                k++;\n              } else {\n                text = text + pre + words[w];\n                if (w === words.length-1) {\n                  lines.addAndAccumulate(k, text, values.font, values.color, measure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor)\n                  width = lines[k].width > width ? lines[k].width : width;\n                  height += lines[k].height;\n                  k++;\n                }\n                w++;\n              }\n            }\n          } else {\n            let text = nlLines[i];\n            let measure = ctx.measureText(text);\n            lines.addAndAccumulate(k, text, values.font, values.color, measure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor);\n            width = lines[k].width > width ? lines[k].width : width;\n            height += lines[k].height;\n            k++;\n          }\n        }\n      }\n    }\n    if ((this.fontOptions.minWdt > 0) && (width < this.fontOptions.minWdt)) {\n      width = this.fontOptions.minWdt;\n    }\n    this.size.labelHeight = height;\n    if ((this.fontOptions.minHgt > 0) && (height < this.fontOptions.minHgt)) {\n      height = this.fontOptions.minHgt;\n    }\n    this.lines = lines;\n    this.lineCount = lines.length;\n    this.size.width = width;\n    this.size.height = height;\n    this.selectedState = selected;\n    this.hoverState = hover;\n  }\n}\n\nexport default Label;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/shared/Label.js","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 161\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 162\n// module chunks = 0","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/is-iterable.js\n// module id = 163\n// module chunks = 0","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.is-iterable.js\n// module id = 164\n// module chunks = 0","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Box extends NodeBase {\n  constructor (options, body, labelModule) {\n    super(options,body,labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.width === undefined) || this.labelModule.differentState(selected, hover)) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      this.width = this.textSize.width + this.margin.right + this.margin.left;\n      this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.lineWidth = values.borderWidth;\n    ctx.lineWidth /= this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, ctx.lineWidth);\n\n    ctx.fillStyle = values.color;\n\n    ctx.roundRect(this.left, this.top, this.width, this.height, values.borderRadius);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (values.borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    let borderRadius = this.options.shapeProperties.borderRadius; // only effective for box\n    this.boundingBox.left = this.left - borderRadius;\n    this.boundingBox.top = this.top - borderRadius;\n    this.boundingBox.bottom = this.top + this.height + borderRadius;\n    this.boundingBox.right = this.left + this.width + borderRadius;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    let borderWidth = this.options.borderWidth;\n\n    return Math.min(\n        Math.abs((this.width) / 2 / Math.cos(angle)),\n        Math.abs((this.height)  / 2 / Math.sin(angle))) + borderWidth;\n  }\n}\n\nexport default Box;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Box.js","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/get-prototype-of.js\n// module id = 166\n// module chunks = 0","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/get-prototype-of.js\n// module id = 167\n// module chunks = 0","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.get-prototype-of.js\n// module id = 168\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/possibleConstructorReturn.js\n// module id = 169\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/inherits.js\n// module id = 170\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/set-prototype-of.js\n// module id = 171\n// module chunks = 0","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/set-prototype-of.js\n// module id = 172\n// module chunks = 0","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.set-prototype-of.js\n// module id = 173\n// module chunks = 0","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-proto.js\n// module id = 174\n// module chunks = 0","class NodeBase {\n  constructor(options, body, labelModule) {\n    this.body = body;\n    this.labelModule = labelModule;\n    this.setOptions(options);\n    this.top = undefined;\n    this.left = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.radius = undefined;\n    this.margin = undefined;\n    this.boundingBox = {top: 0, left: 0, right: 0, bottom: 0};\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  _setMargins(labelModule) {\n    this.margin = {};\n    if (this.options.margin) {\n      if (typeof this.options.margin == 'object') {\n        this.margin.top = this.options.margin.top;\n        this.margin.right = this.options.margin.right;\n        this.margin.bottom = this.options.margin.bottom;\n        this.margin.left = this.options.margin.left;\n      } else {\n        this.margin.top = this.options.margin;\n        this.margin.right = this.options.margin;\n        this.margin.bottom = this.options.margin;\n        this.margin.left = this.options.margin;\n      }\n    }\n    labelModule.adjustSizes(this.margin)\n  }\n\n  _distanceToBorder(ctx,angle) {\n    var borderWidth = this.options.borderWidth;\n    this.resize(ctx);\n    return Math.min(\n        Math.abs(this.width / 2 / Math.cos(angle)),\n        Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth;\n  }\n\n  enableShadow(ctx, values) {\n    if (values.shadow) {\n      ctx.shadowColor = values.shadowColor;\n      ctx.shadowBlur = values.shadowSize;\n      ctx.shadowOffsetX = values.shadowX;\n      ctx.shadowOffsetY = values.shadowY;\n    }\n  }\n\n  disableShadow(ctx, values) {\n    if (values.shadow) {\n      ctx.shadowColor = 'rgba(0,0,0,0)';\n      ctx.shadowBlur = 0;\n      ctx.shadowOffsetX = 0;\n      ctx.shadowOffsetY = 0;\n    }\n  }\n\n  enableBorderDashes(ctx, values) {\n    if (values.borderDashes !== false) {\n      if (ctx.setLineDash !== undefined) {\n        let dashes = values.borderDashes;\n        if (dashes === true) {\n          dashes = [5,15]\n        }\n        ctx.setLineDash(dashes);\n      }\n      else {\n        console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\");\n        this.options.shapeProperties.borderDashes = false;\n        values.borderDashes = false;\n      }\n    }\n  }\n\n  disableBorderDashes(ctx, values) {\n    if (values.borderDashes !== false) {\n      if (ctx.setLineDash !== undefined) {\n        ctx.setLineDash([0]);\n      }\n      else {\n        console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\");\n        this.options.shapeProperties.borderDashes = false;\n        values.borderDashes = false;\n      }\n    }\n  }\n}\n\nexport default NodeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/NodeBase.js","'use strict';\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass Circle extends CircleImageBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover, values = { size: this.options.size}) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      var diameter = Math.max(this.textSize.width + this.margin.right + this.margin.left,\n                              this.textSize.height + this.margin.top + this.margin.bottom);\n      this.options.size = diameter / 2;\n\n      this.width = diameter;\n      this.height = diameter;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this._drawRawCircle(ctx, x, y, selected, hover, values);\n\n    this.boundingBox.top = y - values.size;\n    this.boundingBox.left = x - values.size;\n    this.boundingBox.right = x + values.size;\n    this.boundingBox.bottom = y + values.size;\n\n    this.updateBoundingBox(x,y);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.width * 0.5;\n  }\n}\n\nexport default Circle;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Circle.js","import NodeBase from '../util/NodeBase'\n\nclass CircleImageBase extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this.labelOffset = 0;\n    this.imageLoaded = false;\n  }\n\n  setOptions(options, imageObj) {\n    this.options = options;\n    if (imageObj) {\n      this.imageObj = imageObj;\n    }\n  }\n\n  /**\n   * This function resizes the image by the options size when the image has not yet loaded. If the image has loaded, we\n   * force the update of the size again.\n   *\n   * @private\n   */\n  _resizeImage() {\n    let force = false;\n    if (!this.imageObj.width || !this.imageObj.height) { // undefined or 0\n      this.imageLoaded = false;\n    }\n    else if (this.imageLoaded === false) {\n      this.imageLoaded = true;\n      force = true;\n    }\n\n    if (!this.width || !this.height || force === true) {  // undefined or 0\n      var width, height, ratio;\n      if (this.imageObj.width && this.imageObj.height) { // not undefined or 0\n        width = 0;\n        height = 0;\n      }\n      if (this.options.shapeProperties.useImageSize === false) {\n        if (this.imageObj.width > this.imageObj.height) {\n          ratio = this.imageObj.width / this.imageObj.height;\n          width = this.options.size * 2 * ratio || this.imageObj.width;\n          height = this.options.size * 2 || this.imageObj.height;\n        }\n        else {\n          if (this.imageObj.width && this.imageObj.height) { // not undefined or 0\n            ratio = this.imageObj.height / this.imageObj.width;\n          }\n          else {\n            ratio = 1;\n          }\n          width = this.options.size * 2;\n          height = this.options.size * 2 * ratio;\n        }\n      }\n      else {\n        // when not using the size property, we use the image size\n        width = this.imageObj.width;\n        height = this.imageObj.height;\n      }\n      this.width = width;\n      this.height = height;\n      this.radius = 0.5 * this.width;\n    }\n\n  }\n\n  _drawRawCircle(ctx, x, y, selected, hover, values) {\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.fillStyle = values.color;\n    ctx.circle(x, y, values.size);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n  }\n\n  _drawImageAtPosition(ctx, values) {\n    if (this.imageObj.width != 0) {\n      // draw the image\n      ctx.globalAlpha = 1.0;\n\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n\n      let factor = (this.imageObj.width / this.width) / this.body.view.scale;\n      if (factor > 2 && this.options.shapeProperties.interpolation === true) {\n        let w = this.imageObj.width;\n        let h = this.imageObj.height;\n        var can2 = document.createElement('canvas');\n        can2.width = w;\n        can2.height = w;\n        var ctx2 = can2.getContext('2d');\n\n        factor *= 0.5;\n        w *= 0.5;\n        h *= 0.5;\n        ctx2.drawImage(this.imageObj, 0, 0, w, h);\n\n        let distance = 0;\n        let iterations = 1;\n        while (factor > 2 && iterations < 4) {\n          ctx2.drawImage(can2, distance, 0, w, h, distance+w, 0, w/2, h/2);\n          distance += w;\n          factor *= 0.5;\n          w *= 0.5;\n          h *= 0.5;\n          iterations += 1;\n        }\n        ctx.drawImage(can2, distance, 0, w, h, this.left, this.top, this.width, this.height);\n      }\n      else {\n        // draw image\n        ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height);\n      }\n\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    }\n  }\n\n  _drawImageLabel(ctx, x, y, selected, hover) {\n    var yLabel;\n    var offset = 0;\n\n    if (this.height !== undefined) {\n      offset = this.height * 0.5;\n      var labelDimensions = this.labelModule.getTextSize(ctx, selected, hover);\n      if (labelDimensions.lineCount >= 1) {\n        offset += labelDimensions.height / 2;\n      }\n    }\n\n    yLabel = y + offset;\n\n    if (this.options.label) {\n      this.labelOffset = offset;\n    }\n    this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');\n  }\n}\n\nexport default CircleImageBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/CircleImageBase.js","'use strict';\n\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass CircularImage extends CircleImageBase {\n  constructor (options, body, labelModule, imageObj) {\n    super(options, body, labelModule);\n    this.imageObj = imageObj;\n    this._swapToImageResizeWhenImageLoaded = true;\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.imageObj.src === undefined) ||\n        (this.imageObj.width === undefined) ||\n        (this.imageObj.height === undefined) ||\n        (this.labelModule.differentState(selected, hover))) {\n      var diameter = this.options.size * 2;\n      this.width = diameter;\n      this.height = diameter;\n      this._swapToImageResizeWhenImageLoaded = true;\n      this.radius = 0.5*this.width;\n    } else {\n      if (this._swapToImageResizeWhenImageLoaded) {\n        this.width = undefined;\n        this.height = undefined;\n        this._swapToImageResizeWhenImageLoaded = false;\n      }\n      this._resizeImage();\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize();\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    let size = Math.min(0.5*this.height, 0.5*this.width);\n\n    // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.\n    this._drawRawCircle(ctx, x, y, selected, hover, values);\n\n    // now we draw in the circle, we save so we can revert the clip operation after drawing.\n    ctx.save();\n    // clip is used to use the stroke in drawRawCircle as an area that we can draw in.\n    ctx.clip();\n    // draw the image\n    this._drawImageAtPosition(ctx, values);\n    // restore so we can again draw on the full canvas\n    ctx.restore();\n\n    this._drawImageLabel(ctx, x, y, selected, hover);\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n    this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n    this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n    this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);\n  }\n\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.width * 0.5;\n  }\n}\n\nexport default CircularImage;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/CircularImage.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Database extends NodeBase {\n  constructor (options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      var size = this.textSize.width + this.margin.right + this.margin.left;\n      this.width = size;\n      this.height = size;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top  = y - this.height / 2;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n\n    ctx.fillStyle = values.color;\n    ctx.database(x - this.width / 2, y - this.height / 2, this.width, this.height);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    this.boundingBox.left = this.left;\n    this.boundingBox.top = this.top;\n    this.boundingBox.bottom = this.top + this.height;\n    this.boundingBox.right = this.left + this.width;\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Database;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Database.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Diamond extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected = this.selected, hover = this.hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'diamond', 4, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Diamond;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Diamond.js","import NodeBase from '../util/NodeBase'\n\nclass ShapeBase extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  _resizeShape(selected = this.selected, hover = this.hover, values = { size: this.options.size }) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      var size = 2 * values.size;\n      this.width = size;\n      this.height = size;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {\n    this._resizeShape(selected, hover, values);\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.fillStyle = values.color;\n    ctx[shape](x, y, values.size);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    if (this.options.label !== undefined) {\n      let yLabel = y + 0.5 * this.height + 3; // the + 3 is to offset it a bit below the node.\n      this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');\n    }\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + 3);\n    }\n  }\n\n\n\n}\n\nexport default ShapeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/ShapeBase.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Dot extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected = this.selected, hover = this.hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'circle', 2, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.options.size;\n  }\n}\n\nexport default Dot;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Dot.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Ellipse extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      var textSize = this.labelModule.getTextSize(ctx, selected, hover);\n\n      this.height = textSize.height * 2;\n      this.width = textSize.width + this.height;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n\n    ctx.fillStyle = values.color;\n    ctx.ellipse(this.left, this.top, this.width, this.height);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, x, y, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover); // just in case\n\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    this.boundingBox.left = this.left;\n    this.boundingBox.top = this.top;\n    this.boundingBox.bottom = this.top + this.height;\n    this.boundingBox.right = this.left + this.width;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    var a = this.width * 0.5;\n    var b = this.height * 0.5;\n    var w = (Math.sin(angle) * a);\n    var h = (Math.cos(angle) * b);\n    return a * b / Math.sqrt(w * w + h * h);\n  }\n}\n\nexport default Ellipse;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Ellipse.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Icon extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.iconSize = {\n        width: Number(this.options.icon.size),\n        height: Number(this.options.icon.size)\n      };\n      this.width = this.iconSize.width + this.margin.right + this.margin.left;\n      this.height = this.iconSize.height + this.margin.top + this.margin.bottom;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.options.icon.size = this.options.icon.size || 50;\n\n    this.left = x - this.width / 2;\n    this.top  = y - this.height / 2;\n    this._icon(ctx, x, y, selected, hover, values);\n\n    if (this.options.label !== undefined) {\n      var iconTextSpacing = 5;\n      this.labelModule.draw(ctx, this.left + this.iconSize.width / 2 + this.margin.left,\n                                 y + this.height / 2 + iconTextSpacing, selected);\n    }\n\n    this.updateBoundingBox(x, y)\n  }\n\n  updateBoundingBox(x, y) {\n    this.boundingBox.top    = y - this.options.icon.size * 0.5;\n    this.boundingBox.left   = x - this.options.icon.size * 0.5;\n    this.boundingBox.right  = x + this.options.icon.size * 0.5;\n    this.boundingBox.bottom = y + this.options.icon.size * 0.5;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      var iconTextSpacing = 5;\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing);\n    }\n  }\n\n  _icon(ctx, x, y, selected, hover, values) {\n    let iconSize = Number(this.options.icon.size);\n\n    if (this.options.icon.code !== undefined) {\n      ctx.font = (selected ? \"bold \" : \"\") + iconSize + \"px \" + this.options.icon.face;\n\n      // draw icon\n      ctx.fillStyle = this.options.icon.color || \"black\";\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"middle\";\n\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n      ctx.fillText(this.options.icon.code, x, y);\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    } else {\n      console.error('When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.')\n    }\n\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Icon;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Icon.js","'use strict';\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass Image extends CircleImageBase {\n  constructor (options, body, labelModule, imageObj) {\n    super(options, body, labelModule);\n    this.imageObj = imageObj;\n  }\n\n  resize() {\n    this._resizeImage();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize();\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    if (this.options.shapeProperties.useBorderWithImage === true) {\n      var neutralborderWidth = this.options.borderWidth;\n      var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth;\n      var borderWidth = (selected ? selectionLineWidth : neutralborderWidth) / this.body.view.scale;\n      ctx.lineWidth = Math.min(this.width, borderWidth);\n\n      ctx.beginPath();\n\n      // setup the line properties.\n      ctx.strokeStyle = selected ? this.options.color.highlight.border : hover ? this.options.color.hover.border : this.options.color.border;\n\n      // set a fillstyle\n      ctx.fillStyle = selected ? this.options.color.highlight.background : hover ? this.options.color.hover.background : this.options.color.background;\n\n      // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image\n      ctx.rect(this.left - 0.5 * ctx.lineWidth,\n        this.top - 0.5 * ctx.lineWidth,\n        this.width + ctx.lineWidth,\n        this.height + ctx.lineWidth);\n      ctx.fill();\n\n      //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n      ctx.save();\n      // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n      if (borderWidth > 0) {\n        this.enableBorderDashes(ctx);\n        //draw the border\n        ctx.stroke();\n        //disable dashed border for other elements\n        this.disableBorderDashes(ctx);\n      }\n      ctx.restore();\n\n      ctx.closePath();\n    }\n\n    this._drawImageAtPosition(ctx, values);\n\n    this._drawImageLabel(ctx, x, y, selected, hover);\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.resize();\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this.boundingBox.top = this.top;\n    this.boundingBox.left = this.left;\n    this.boundingBox.right = this.left + this.width;\n    this.boundingBox.bottom = this.top + this.height;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);\n    }\n  }\n\n  distanceToBorder(ctx, angle) {\n     return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Image;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Image.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Square extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize() {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'square', 2, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Square;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Square.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Star extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected, hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'star', 4, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Star;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Star.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Text extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || this.labelModule.differentState(selected, hover)) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      this.width = this.textSize.width + this.margin.right + this.margin.left;\n      this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this.boundingBox.top = this.top;\n    this.boundingBox.left = this.left;\n    this.boundingBox.right = this.left + this.width;\n    this.boundingBox.bottom = this.top + this.height;\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Text;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Text.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Triangle extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx) {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'triangle', 3, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Triangle;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Triangle.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass TriangleDown extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx) {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'triangleDown', 3, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default TriangleDown;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/TriangleDown.js","var util = require(\"../../util\");\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\n\nimport Edge  from \"./components/Edge\"\nimport Label from \"./components/shared/Label\"\n\nclass EdgesHandler {\n  constructor(body, images, groups) {\n    this.body = body;\n    this.images = images;\n    this.groups = groups;\n\n    // create the edge API in the body container\n    this.body.functions.createEdge = this.create.bind(this);\n\n    this.edgesListeners = {\n      add:    (event, params) => {this.add(params.items);},\n      update: (event, params) => {this.update(params.items);},\n      remove: (event, params) => {this.remove(params.items);}\n    };\n\n    this.options = {};\n    this.defaultOptions = {\n      arrows: {\n        to:     {enabled: false, scaleFactor:1, type: 'arrow'}, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}\n        middle: {enabled: false, scaleFactor:1, type: 'arrow'},\n        from:   {enabled: false, scaleFactor:1, type: 'arrow'}\n      },\n      arrowStrikethrough: true,\n      color: {\n        color:'#848484',\n        highlight:'#848484',\n        hover: '#848484',\n        inherit: 'from',\n        opacity:1.0\n      },\n      dashes: false,\n      font: {\n        color: '#343434',\n        size: 14, // px\n        face: 'arial',\n        background: 'none',\n        strokeWidth: 2, // px\n        strokeColor: '#ffffff',\n        align:'horizontal',\n        multi: false,\n        vadjust: 0,\n        bold: {\n          mod: 'bold'\n        },\n        boldital: {\n          mod: 'bold italic'\n        },\n        ital: {\n          mod: 'italic'\n        },\n        mono: {\n          mod: '',\n          size: 15, // px\n          face: 'courier new',\n          vadjust: 2\n        }\n      },\n      hidden: false,\n      hoverWidth: 1.5,\n      label: undefined,\n      labelHighlightBold: true,\n      length: undefined,\n      physics: true,\n      scaling:{\n        min: 1,\n        max: 15,\n        label: {\n          enabled: true,\n          min: 14,\n          max: 30,\n          maxVisible: 30,\n          drawThreshold: 5\n        },\n        customScalingFunction: function (min,max,total,value) {\n          if (max === min) {\n            return 0.5;\n          }\n          else {\n            var scale = 1 / (max - min);\n            return Math.max(0,(value - min)*scale);\n          }\n        }\n      },\n      selectionWidth: 1.5,\n      selfReferenceSize:20,\n      shadow:{\n        enabled: false,\n        color: 'rgba(0,0,0,0.5)',\n        size:10,\n        x:5,\n        y:5\n      },\n      smooth: {\n        enabled: true,\n        type: \"dynamic\",\n        forceDirection:'none',\n        roundness: 0.5\n      },\n      title:undefined,\n      width: 1,\n      value: undefined\n    };\n\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // this allows external modules to force all dynamic curves to turn static.\n    this.body.emitter.on(\"_forceDisableDynamicCurves\", (type) => {\n      if (type === 'dynamic') {\n        type = 'continuous';\n      }\n      let emitChange = false;\n      for (let edgeId in this.body.edges) {\n        if (this.body.edges.hasOwnProperty(edgeId)) {\n          let edge = this.body.edges[edgeId];\n          let edgeData = this.body.data.edges._data[edgeId];\n\n          // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.\n          // this is because a change in the global would not affect these curves.\n          if (edgeData !== undefined) {\n            let edgeOptions = edgeData.smooth;\n            if (edgeOptions !== undefined) {\n              if (edgeOptions.enabled === true && edgeOptions.type === 'dynamic') {\n                if (type === undefined) {\n                  edge.setOptions({smooth: false});\n                }\n                else {\n                  edge.setOptions({smooth: {type: type}});\n                }\n                emitChange = true;\n              }\n            }\n          }\n        }\n      }\n      if (emitChange === true) {\n        this.body.emitter.emit(\"_dataChanged\");\n      }\n    });\n\n    // this is called when options of EXISTING nodes or edges have changed.\n    this.body.emitter.on(\"_dataUpdated\", () => {\n      this.reconnectEdges();\n    });\n\n    // refresh the edges. Used when reverting from hierarchical layout\n    this.body.emitter.on(\"refreshEdges\", this.refresh.bind(this));\n    this.body.emitter.on(\"refresh\",      this.refresh.bind(this));\n    this.body.emitter.on(\"destroy\",      () => {\n      util.forEach(this.edgesListeners, (callback, event) => {\n        if (this.body.data.edges)\n          this.body.data.edges.off(event, callback);\n      });\n      delete this.body.functions.createEdge;\n      delete this.edgesListeners.add;\n      delete this.edgesListeners.update;\n      delete this.edgesListeners.remove;\n      delete this.edgesListeners;\n    });\n\n  }\n\n  setOptions(options) {\n    this.edgeOptions = options;\n    if (options !== undefined) {\n      // use the parser from the Edge class to fill in all shorthand notations\n      Edge.parseOptions(this.options, options);\n\n      // update smooth settings in all edges\n      let dataChanged = false;\n      if (options.smooth !== undefined) {\n        for (let edgeId in this.body.edges) {\n          if (this.body.edges.hasOwnProperty(edgeId)) {\n            dataChanged = this.body.edges[edgeId].updateEdgeType() || dataChanged;\n          }\n        }\n      }\n\n      // update fonts in all edges\n      if (options.font !== undefined) {\n        // use the parser from the Label class to fill in all shorthand notations\n        Label.parseOptions(this.options.font, options);\n        for (let edgeId in this.body.edges) {\n          if (this.body.edges.hasOwnProperty(edgeId)) {\n            this.body.edges[edgeId].updateLabelModule();\n          }\n        }\n      }\n\n      // update the state of the variables if needed\n      if (options.hidden !== undefined || options.physics !== undefined  || dataChanged === true) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n\n  /**\n   * Load edges by reading the data table\n   * @param {Array | DataSet | DataView} edges    The data containing the edges.\n   * @private\n   * @private\n   */\n  setData(edges, doNotEmit = false) {\n    var oldEdgesData = this.body.data.edges;\n\n    if (edges instanceof DataSet || edges instanceof DataView) {\n      this.body.data.edges = edges;\n    }\n    else if (Array.isArray(edges)) {\n      this.body.data.edges = new DataSet();\n      this.body.data.edges.add(edges);\n    }\n    else if (!edges) {\n      this.body.data.edges = new DataSet();\n    }\n    else {\n      throw new TypeError('Array or DataSet expected');\n    }\n\n    // TODO: is this null or undefined or false?\n    if (oldEdgesData) {\n      // unsubscribe from old dataset\n      util.forEach(this.edgesListeners, (callback, event) => {oldEdgesData.off(event, callback);});\n    }\n\n    // remove drawn edges\n    this.body.edges = {};\n\n    // TODO: is this null or undefined or false?\n    if (this.body.data.edges) {\n      // subscribe to new dataset\n      util.forEach(this.edgesListeners, (callback, event) =>  {this.body.data.edges.on(event, callback);});\n\n      // draw all new nodes\n      var ids = this.body.data.edges.getIds();\n      this.add(ids, true);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n  /**\n   * Add edges\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  add(ids, doNotEmit = false) {\n    var edges = this.body.edges;\n    var edgesData = this.body.data.edges;\n\n    for (let i = 0; i < ids.length; i++) {\n      var id = ids[i];\n\n      var oldEdge = edges[id];\n      if (oldEdge) {\n        oldEdge.disconnect();\n      }\n\n      var data = edgesData.get(id, {\"showInternalIds\" : true});\n      edges[id] = this.create(data);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n\n  /**\n   * Update existing edges, or create them when not yet existing\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  update(ids) {\n    var edges = this.body.edges;\n    var edgesData = this.body.data.edges;\n    var dataChanged = false;\n    for (var i = 0; i < ids.length; i++) {\n      var id = ids[i];\n      var data = edgesData.get(id);\n      var edge = edges[id];\n      if (edge !== undefined) {\n        // update edge\n        edge.disconnect();\n        dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.\n        edge.connect();\n      }\n      else {\n        // create edge\n        this.body.edges[id] = this.create(data);\n        dataChanged = true;\n      }\n    }\n\n    if (dataChanged === true) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n    else {\n      this.body.emitter.emit(\"_dataUpdated\");\n    }\n  }\n\n\n\n  /**\n   * Remove existing edges. Non existing ids will be ignored\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  remove(ids) {\n    var edges = this.body.edges;\n    for (var i = 0; i < ids.length; i++) {\n      var id = ids[i];\n      var edge = edges[id];\n      if (edge !== undefined) {\n        edge.cleanup();\n        edge.disconnect();\n        delete edges[id];\n      }\n    }\n\n    this.body.emitter.emit(\"_dataChanged\");\n  }\n\n  refresh() {\n    let edges = this.body.edges;\n    for (let edgeId in edges) {\n      let edge = undefined;\n      if (edges.hasOwnProperty(edgeId)) {\n        edge = edges[edgeId];\n      }\n      let data = this.body.data.edges._data[edgeId];\n      if (edge !== undefined && data !== undefined) {\n        edge.setOptions(data);\n      }\n    }\n  }\n\n  create(properties) {\n    return new Edge(properties, this.body, this.options, this.defaultOptions, this.edgeOptions)\n  }\n\n  /**\n   * Reconnect all edges\n   * @private\n   */\n  reconnectEdges() {\n    var id;\n    var nodes = this.body.nodes;\n    var edges = this.body.edges;\n\n    for (id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        nodes[id].edges = [];\n      }\n    }\n\n    for (id in edges) {\n      if (edges.hasOwnProperty(id)) {\n        var edge = edges[id];\n        edge.from = null;\n        edge.to = null;\n        edge.connect();\n      }\n    }\n  }\n\n\n  getConnectedNodes(edgeId) {\n    let nodeList = [];\n    if (this.body.edges[edgeId] !== undefined) {\n      let edge = this.body.edges[edgeId];\n      if (edge.fromId) {nodeList.push(edge.fromId);}\n      if (edge.toId)   {nodeList.push(edge.toId);}\n    }\n    return nodeList;\n  }\n\n}\n\nexport default EdgesHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/EdgesHandler.js","var util = require('../../../util');\n\nimport Label              from './shared/Label'\nimport CubicBezierEdge    from './edges/CubicBezierEdge'\nimport BezierEdgeDynamic  from './edges/BezierEdgeDynamic'\nimport BezierEdgeStatic   from './edges/BezierEdgeStatic'\nimport StraightEdge       from './edges/StraightEdge'\n\n/**\n * @class Edge\n *\n * A edge connects two nodes\n * @param {Object} properties     Object with options. Must contain\n *                                At least options from and to.\n *                                Available options: from (number),\n *                                to (number), label (string, color (string),\n *                                width (number), style (string),\n *                                length (number), title (string)\n * @param {Network} network       A Network object, used to find and edge to\n *                                nodes.\n * @param {Object} constants      An object with default values for\n *                                example for the color\n */\nclass Edge {\n  constructor(options, body, globalOptions, defaultOptions, edgeOptions) {\n    if (body === undefined) {\n      throw \"No body provided\";\n    }\n    this.options = util.bridgeObject(globalOptions);\n    this.globalOptions = globalOptions;\n    this.defaultOptions = defaultOptions;\n    this.edgeOptions = edgeOptions;\n    this.body = body;\n\n    // initialize variables\n    this.id = undefined;\n    this.fromId = undefined;\n    this.toId = undefined;\n    this.selected = false;\n    this.hover = false;\n    this.labelDirty = true;\n\n    this.baseWidth = this.options.width;\n    this.baseFontSize = this.options.font.size;\n\n    this.from = undefined; // a node\n    this.to   = undefined; // a node\n\n    this.edgeType = undefined;\n\n    this.connected = false;\n\n    this.labelModule = new Label(this.body, this.options, true /* It's an edge label */);\n    this.setOptions(options);\n  }\n\n\n  /**\n   * Set or overwrite options for the edge\n   * @param {Object} options  an object with options\n   * @param doNotEmit\n   */\n  setOptions(options) {\n    if (!options) {\n      return;\n    }\n\n    Edge.parseOptions(this.options, options, true, this.globalOptions);\n\n    if (options.id !== undefined) {\n      this.id = options.id;\n    }\n    if (options.from !== undefined) {\n      this.fromId = options.from;\n    }\n    if (options.to !== undefined) {\n      this.toId = options.to;\n    }\n    if (options.title !== undefined) {\n      this.title = options.title;\n    }\n    if (options.value !== undefined)  {\n      options.value = parseFloat(options.value);\n    }\n\n    this.choosify(options);\n\n    // update label Module\n    this.updateLabelModule(options);\n    this.labelModule.propagateFonts(this.edgeOptions, options, this.defaultOptions);\n\n    let dataChanged = this.updateEdgeType();\n\n    // if anything has been updates, reset the selection width and the hover width\n    this._setInteractionWidths();\n\n    // A node is connected when it has a from and to node that both exist in the network.body.nodes.\n    this.connect();\n\n    if (options.hidden !== undefined || options.physics !== undefined) {\n      dataChanged = true;\n    }\n\n    return dataChanged;\n  }\n\n  static parseOptions(parentOptions, newOptions, allowDeletion = false, globalOptions = {}) {\n    var fields = [\n      'arrowStrikethrough',\n      'id',\n      'from',\n      'hidden',\n      'hoverWidth',\n      'label',\n      'labelHighlightBold',\n      'length',\n      'line',\n      'opacity',\n      'physics',\n      'scaling',\n      'selectionWidth',\n      'selfReferenceSize',\n      'to',\n      'title',\n      'value',\n      'width'\n    ];\n\n    // only deep extend the items in the field array. These do not have shorthand.\n    util.selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n    util.mergeOptions(parentOptions, newOptions, 'smooth', allowDeletion, globalOptions);\n    util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions);\n\n    if (newOptions.dashes !== undefined && newOptions.dashes !== null) {\n      parentOptions.dashes = newOptions.dashes;\n    }\n    else if (allowDeletion === true && newOptions.dashes === null) {\n      parentOptions.dashes = Object.create(globalOptions.dashes); // this sets the pointer of the option back to the global option.\n    }\n\n    // set the scaling newOptions\n    if (newOptions.scaling !== undefined && newOptions.scaling !== null) {\n      if (newOptions.scaling.min !== undefined) {parentOptions.scaling.min = newOptions.scaling.min;}\n      if (newOptions.scaling.max !== undefined) {parentOptions.scaling.max = newOptions.scaling.max;}\n      util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling);\n    }\n    else if (allowDeletion === true && newOptions.scaling === null) {\n      parentOptions.scaling = Object.create(globalOptions.scaling); // this sets the pointer of the option back to the global option.\n    }\n\n    // handle multiple input cases for arrows\n    if (newOptions.arrows !== undefined && newOptions.arrows !== null) {\n      if (typeof newOptions.arrows === 'string') {\n        let arrows = newOptions.arrows.toLowerCase();\n        parentOptions.arrows.to.enabled     = arrows.indexOf(\"to\")     != -1;\n        parentOptions.arrows.middle.enabled = arrows.indexOf(\"middle\") != -1;\n        parentOptions.arrows.from.enabled   = arrows.indexOf(\"from\")   != -1;\n      }\n      else if (typeof newOptions.arrows === 'object') {\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to',     allowDeletion, globalOptions.arrows);\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', allowDeletion, globalOptions.arrows);\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from',   allowDeletion, globalOptions.arrows);\n      }\n      else {\n        throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\" + JSON.stringify(newOptions.arrows));\n      }\n    }\n    else if (allowDeletion === true && newOptions.arrows === null) {\n      parentOptions.arrows = Object.create(globalOptions.arrows); // this sets the pointer of the option back to the global option.\n    }\n\n    // handle multiple input cases for color\n    if (newOptions.color !== undefined && newOptions.color !== null) {\n      // make a copy of the parent object in case this is referring to the global one (due to object create once, then update)\n      parentOptions.color = util.deepExtend({}, parentOptions.color, true);\n      if (util.isString(newOptions.color)) {\n        parentOptions.color.color     = newOptions.color;\n        parentOptions.color.highlight = newOptions.color;\n        parentOptions.color.hover     = newOptions.color;\n        parentOptions.color.inherit   = false;\n      }\n      else {\n        let colorsDefined = false;\n        if (newOptions.color.color     !== undefined) {parentOptions.color.color     = newOptions.color.color;     colorsDefined = true;}\n        if (newOptions.color.highlight !== undefined) {parentOptions.color.highlight = newOptions.color.highlight; colorsDefined = true;}\n        if (newOptions.color.hover     !== undefined) {parentOptions.color.hover     = newOptions.color.hover;     colorsDefined = true;}\n        if (newOptions.color.inherit   !== undefined) {parentOptions.color.inherit   = newOptions.color.inherit;}\n        if (newOptions.color.opacity   !== undefined) {parentOptions.color.opacity   = Math.min(1,Math.max(0,newOptions.color.opacity));}\n\n        if (newOptions.color.inherit === undefined && colorsDefined === true) {\n          parentOptions.color.inherit = false;\n        }\n      }\n    }\n    else if (allowDeletion === true && newOptions.color === null) {\n      parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options\n    }\n\n    // handle the font settings\n    if (newOptions.font !== undefined && newOptions.font !== null) {\n      Label.parseOptions(parentOptions.font, newOptions);\n    }\n    else if (allowDeletion === true && newOptions.font === null) {\n      parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options\n    }\n  }\n\n  choosify(options) {\n    this.chooser = true;\n\n    let pile = [options, this.options, this.defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenEdge = util.topMost(pile, ['chosen', 'edge']);\n      if ((typeof chosenEdge === 'boolean') || (typeof chosenEdge === 'function')) {\n        this.chooser = chosenEdge;\n      }\n    }\n  }\n\n  getFormattingValues() {\n    let toArrow = (this.options.arrows.to === true) || (this.options.arrows.to.enabled === true)\n    let fromArrow = (this.options.arrows.from === true) || (this.options.arrows.from.enabled === true)\n    let middleArrow = (this.options.arrows.middle === true) || (this.options.arrows.middle.enabled === true)\n    let inheritsColor = this.options.color.inherit;\n    let values = {\n      toArrow: toArrow,\n      toArrowScale: this.options.arrows.to.scaleFactor,\n      toArrowType: this.options.arrows.to.type,\n      middleArrow: middleArrow,\n      middleArrowScale: this.options.arrows.middle.scaleFactor,\n      middleArrowType: this.options.arrows.middle.type,\n      fromArrow: fromArrow,\n      fromArrowScale: this.options.arrows.from.scaleFactor,\n      fromArrowType: this.options.arrows.from.type,\n      arrowStrikethrough: this.options.arrowStrikethrough,\n      color: (inheritsColor? undefined : this.options.color.color),\n      inheritsColor: inheritsColor,\n      opacity: this.options.color.opacity,\n      hidden: this.options.hidden,\n      length: this.options.length,\n      shadow: this.options.shadow.enabled,\n      shadowColor: this.options.shadow.color,\n      shadowSize: this.options.shadow.size,\n      shadowX: this.options.shadow.x,\n      shadowY: this.options.shadow.y,\n      dashes: this.options.dashes,\n      width: this.options.width\n    };\n    if (this.selected || this.hover) {\n      if (this.chooser === true) {\n        if (this.selected) {\n          let selectedWidth = this.options.selectionWidth;\n          if (typeof selectedWidth === 'function') {\n            values.width = selectedWidth(values.width);\n          } else if (typeof selectedWidth === 'number') {\n            values.width += selectedWidth;\n          }\n          values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n          values.color = this.options.color.highlight;\n          values.shadow = this.options.shadow.enabled;\n        } else if (this.hover) {\n          let hoverWidth = this.options.hoverWidth;\n          if (typeof hoverWidth === 'function') {\n            values.width = hoverWidth(values.width);\n          } else if (typeof hoverWidth === 'number') {\n            values.width += hoverWidth;\n          }\n          values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n          values.color = this.options.color.hover;\n          values.shadow = this.options.shadow.enabled;\n        }\n      } else if (typeof this.chooser === 'function') {\n        this.chooser(values, this.options.id, this.selected, this.hover);\n        if (values.color !== undefined) {\n          values.inheritsColor = false;\n        }\n        if (values.shadow === false) {\n          if ((values.shadowColor !== this.options.shadow.color) ||\n              (values.shadowSize !== this.options.shadow.size) ||\n              (values.shadowX !== this.options.shadow.x) ||\n              (values.shadowY !== this.options.shadow.y)) {\n            values.shadow = true;\n          }\n        }\n      }\n    } else {\n      values.shadow = this.options.shadow.enabled;\n      values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n    }\n    return values;\n  }\n\n  /**\n   * update the options in the label module\n   */\n  updateLabelModule(options) {\n    this.labelModule.setOptions(this.options, true);\n    if (this.labelModule.baseSize !== undefined) {\n      this.baseFontSize = this.labelModule.baseSize;\n    }\n    this.labelModule.constrain(this.edgeOptions, options, this.defaultOptions);\n    this.labelModule.choosify(this.edgeOptions, options, this.defaultOptions);\n  }\n\n  /**\n   * update the edge type, set the options\n   * @returns {boolean}\n   */\n  updateEdgeType() {\n    let smooth = this.options.smooth;\n    let dataChanged = false;\n    let changeInType = true;\n    if (this.edgeType !== undefined) {\n      if ((((this.edgeType instanceof BezierEdgeDynamic) &&\n            (smooth.enabled === true) &&\n            (smooth.type === 'dynamic'))) ||\n          (((this.edgeType instanceof CubicBezierEdge) &&\n            (smooth.enabled === true) &&\n            (smooth.type === 'cubicBezier'))) ||\n          (((this.edgeType instanceof BezierEdgeStatic) &&\n            (smooth.enabled === true) &&\n            (smooth.type !== 'dynamic') &&\n            (smooth.type !== 'cubicBezier'))) ||\n          (((this.edgeType instanceof StraightEdge) &&\n            (smooth.type.enabled === false)))) {\n        changeInType = false;\n      }\n      if (changeInType === true) {\n        dataChanged = this.cleanup();\n      }\n    }\n    if (changeInType === true) {\n      if (smooth.enabled === true) {\n        if (smooth.type === 'dynamic') {\n          dataChanged = true;\n          this.edgeType = new BezierEdgeDynamic(this.options, this.body, this.labelModule);\n        } else if (smooth.type === 'cubicBezier') {\n          this.edgeType = new CubicBezierEdge(this.options, this.body, this.labelModule);\n        } else {\n          this.edgeType = new BezierEdgeStatic(this.options, this.body, this.labelModule);\n        }\n      } else {\n        this.edgeType = new StraightEdge(this.options, this.body, this.labelModule);\n      }\n    } else { // if nothing changes, we just set the options.\n      this.edgeType.setOptions(this.options);\n    }\n    return dataChanged;\n  }\n\n  /**\n   * Connect an edge to its nodes\n   */\n  connect() {\n    this.disconnect();\n\n    this.from = this.body.nodes[this.fromId] || undefined;\n    this.to = this.body.nodes[this.toId] || undefined;\n    this.connected = (this.from !== undefined && this.to !== undefined);\n\n    if (this.connected === true) {\n      this.from.attachEdge(this);\n      this.to.attachEdge(this);\n    }\n    else {\n      if (this.from) {\n        this.from.detachEdge(this);\n      }\n      if (this.to) {\n        this.to.detachEdge(this);\n      }\n    }\n\n    this.edgeType.connect();\n  }\n\n\n  /**\n   * Disconnect an edge from its nodes\n   */\n  disconnect() {\n    if (this.from) {\n      this.from.detachEdge(this);\n      this.from = undefined;\n    }\n    if (this.to) {\n      this.to.detachEdge(this);\n      this.to = undefined;\n    }\n\n    this.connected = false;\n  }\n\n\n  /**\n   * get the title of this edge.\n   * @return {string} title    The title of the edge, or undefined when no title\n   *                           has been set.\n   */\n  getTitle() {\n    return this.title;\n  }\n\n\n  /**\n   * check if this node is selecte\n   * @return {boolean} selected   True if node is selected, else false\n   */\n  isSelected() {\n    return this.selected;\n  }\n\n\n\n  /**\n   * Retrieve the value of the edge. Can be undefined\n   * @return {Number} value\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n\n  /**\n   * Adjust the value range of the edge. The edge will adjust it's width\n   * based on its value.\n   * @param {Number} min\n   * @param {Number} max\n   * @param total\n   */\n  setValueRange(min, max, total) {\n    if (this.options.value !== undefined) {\n      var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);\n      var widthDiff = this.options.scaling.max - this.options.scaling.min;\n      if (this.options.scaling.label.enabled === true) {\n        var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;\n        this.options.font.size = this.options.scaling.label.min + scale * fontDiff;\n      }\n      this.options.width = this.options.scaling.min + scale * widthDiff;\n    }\n    else {\n      this.options.width = this.baseWidth;\n      this.options.font.size = this.baseFontSize;\n    }\n\n    this._setInteractionWidths();\n    this.updateLabelModule();\n  }\n\n  _setInteractionWidths() {\n    if (typeof this.options.hoverWidth === 'function') {\n      this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);\n    } else {\n      this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;\n    }\n    if (typeof this.options.selectionWidth === 'function') {\n      this.edgeType.selectionWidth = this.options.selectionWidth(this.options.width);\n    } else {\n      this.edgeType.selectionWidth = this.options.selectionWidth + this.options.width;\n    }\n  }\n\n\n  /**\n   * Redraw a edge\n   * Draw this edge in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  draw(ctx) {\n    let values = this.getFormattingValues();\n    if (values.hidden) {\n      return;\n    }\n\n    // get the via node from the edge type\n    let viaNode = this.edgeType.getViaNode();\n    let arrowData = {};\n\n    // restore edge targets to defaults\n    this.edgeType.fromPoint = this.edgeType.from;\n    this.edgeType.toPoint = this.edgeType.to;\n\n    // from and to arrows give a different end point for edges. we set them here\n    if (values.fromArrow) {\n      arrowData.from = this.edgeType.getArrowData(ctx, 'from', viaNode, this.selected, this.hover, values);\n      if (values.arrowStrikethrough === false)\n        this.edgeType.fromPoint = arrowData.from.core;\n    }\n    if (values.toArrow) {\n      arrowData.to = this.edgeType.getArrowData(ctx, 'to', viaNode, this.selected, this.hover, values);\n      if (values.arrowStrikethrough === false)\n        this.edgeType.toPoint = arrowData.to.core;\n    }\n\n    // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.\n    if (values.middleArrow) {\n      arrowData.middle = this.edgeType.getArrowData(ctx,'middle', viaNode, this.selected, this.hover, values);\n    }\n\n    // draw everything\n    this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);\n    this.drawArrows(ctx, arrowData, values);\n    this.drawLabel (ctx, viaNode);\n  }\n\n\n  drawArrows(ctx, arrowData, values) {\n    if (values.fromArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.from);\n    }\n    if (values.middleArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.middle);\n    }\n    if (values.toArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.to);\n    }\n  }\n\n\n  drawLabel(ctx, viaNode) {\n    if (this.options.label !== undefined) {\n      // set style\n      var node1 = this.from;\n      var node2 = this.to;\n      var selected = (this.from.selected || this.to.selected || this.selected);\n      if (node1.id != node2.id) {\n        this.labelModule.pointToSelf = false;\n        var point = this.edgeType.getPoint(0.5, viaNode);\n        ctx.save();\n\n        // if the label has to be rotated:\n        if (this.options.font.align !== \"horizontal\") {\n          this.labelModule.calculateLabelSize(ctx, selected, this.hover, point.x, point.y);\n          ctx.translate(point.x, this.labelModule.size.yLine);\n          this._rotateForLabelAlignment(ctx);\n        }\n\n        // draw the label\n        this.labelModule.draw(ctx, point.x, point.y, selected, this.hover);\n        ctx.restore();\n      }\n      else {\n        // Ignore the orientations.\n        this.labelModule.pointToSelf = true;\n        var x, y;\n        var radius = this.options.selfReferenceSize;\n        if (node1.shape.width > node1.shape.height) {\n          x = node1.x + node1.shape.width * 0.5;\n          y = node1.y - radius;\n        }\n        else {\n          x = node1.x + radius;\n          y = node1.y - node1.shape.height * 0.5;\n        }\n        point = this._pointOnCircle(x, y, radius, 0.125);\n        this.labelModule.draw(ctx, point.x, point.y, selected, this.hover);\n      }\n    }\n  }\n\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top\n   * @return {boolean}     True if location is located on the edge\n   */\n  isOverlappingWith(obj) {\n    if (this.connected) {\n      var distMax = 10;\n      var xFrom = this.from.x;\n      var yFrom = this.from.y;\n      var xTo = this.to.x;\n      var yTo = this.to.y;\n      var xObj = obj.left;\n      var yObj = obj.top;\n\n      var dist = this.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj);\n\n      return (dist < distMax);\n    }\n    else {\n      return false\n    }\n  }\n\n\n  /**\n   * Rotates the canvas so the text is most readable\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _rotateForLabelAlignment(ctx) {\n    var dy = this.from.y - this.to.y;\n    var dx = this.from.x - this.to.x;\n    var angleInDegrees = Math.atan2(dy, dx);\n\n    // rotate so label it is readable\n    if ((angleInDegrees < -1 && dx < 0) || (angleInDegrees > 0 && dx < 0)) {\n      angleInDegrees = angleInDegrees + Math.PI;\n    }\n\n    ctx.rotate(angleInDegrees);\n  }\n\n\n  /**\n   * Get a point on a circle\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @param {Number} percentage. Value between 0 (line start) and 1 (line end)\n   * @return {Object} point\n   * @private\n   */\n  _pointOnCircle(x, y, radius, percentage) {\n    var angle = percentage * 2 * Math.PI;\n    return {\n      x: x + radius * Math.cos(angle),\n      y: y - radius * Math.sin(angle)\n    }\n  }\n\n\n  select() {\n    this.selected = true;\n  }\n\n\n  unselect() {\n    this.selected = false;\n  }\n\n\n  /**\n   * cleans all required things on delete\n   * @returns {*}\n   */\n  cleanup() {\n    return this.edgeType.cleanup();\n  }\n}\n\nexport default Edge;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/Edge.js","import CubicBezierEdgeBase from './util/CubicBezierEdgeBase'\n\nclass CubicBezierEdge extends CubicBezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNodes) {\n    // get the coordinates of the support points.\n    let via1 = viaNodes[0];\n    let via2 = viaNodes[1];\n\n    // start drawing the line.\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n    // fallback to normal straight edges\n    if (viaNodes === undefined || via1.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  _getViaCoordinates() {\n    let dx = this.from.x - this.to.x;\n    let dy = this.from.y - this.to.y;\n\n    let x1, y1, x2, y2;\n    let roundness =  this.options.smooth.roundness;\n\n    // horizontal if x > y or if direction is forced or if direction is horizontal\n    if ((Math.abs(dx) > Math.abs(dy) || this.options.smooth.forceDirection === true || this.options.smooth.forceDirection === 'horizontal') && this.options.smooth.forceDirection !== 'vertical') {\n      y1 = this.from.y;\n      y2 = this.to.y;\n      x1 = this.from.x - roundness * dx;\n      x2 = this.to.x + roundness * dx;\n    }\n    else {\n      y1 = this.from.y - roundness * dy;\n      y2 = this.to.y + roundness * dy;\n      x1 = this.from.x;\n      x2 = this.to.x;\n    }\n\n    return [{x: x1, y: y1},{x: x2, y: y2}];\n  }\n\n  getViaNode() {\n    return this._getViaCoordinates();\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    return this._findBorderPositionBezier(nearNode, ctx);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3, [via1, via2] = this._getViaCoordinates()) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2);\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param via\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, [via1, via2] = this._getViaCoordinates()) {\n    let t = percentage;\n    let vec = [];\n    vec[0] = Math.pow(1 - t, 3);\n    vec[1] = 3 * t * Math.pow(1 - t, 2);\n    vec[2] = 3 * Math.pow(t,2) * (1 - t);\n    vec[3] = Math.pow(t, 3);\n    let x = vec[0] * this.fromPoint.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.toPoint.x;\n    let y = vec[0] * this.fromPoint.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.toPoint.y;\n\n    return {x: x, y: y};\n  }\n}\n\n\nexport default CubicBezierEdge;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/CubicBezierEdge.js","import BezierEdgeBase from './BezierEdgeBase'\n\nclass CubicBezierEdgeBase extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n   * @param {number} x1 from x\n   * @param {number} y1 from y\n   * @param {number} x2 to x\n   * @param {number} y2 to y\n   * @param {number} x3 point to check x\n   * @param {number} y3 point to check y\n   * @private\n   */\n  _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) { // x3,y3 is the point\n    let minDistance = 1e9;\n    let distance;\n    let i, t, x, y;\n    let lastX = x1;\n    let lastY = y1;\n    let vec = [0,0,0,0]\n    for (i = 1; i < 10; i++) {\n      t = 0.1 * i;\n      vec[0] = Math.pow(1 - t, 3);\n      vec[1] = 3 * t * Math.pow(1 - t, 2);\n      vec[2] = 3 * Math.pow(t,2) * (1 - t);\n      vec[3] = Math.pow(t, 3);\n      x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;\n      y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;\n      if (i > 0) {\n        distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n        minDistance = distance < minDistance ? distance : minDistance;\n      }\n      lastX = x;\n      lastY = y;\n    }\n\n    return minDistance;\n  }\n}\n\nexport default CubicBezierEdgeBase;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/CubicBezierEdgeBase.js","import EdgeBase from './EdgeBase'\n\nclass BezierEdgeBase extends EdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * This function uses binary search to look for the point where the bezier curve crosses the border of the node.\n   *\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   */\n  _findBorderPositionBezier(nearNode, ctx, viaNode = this._getViaCoordinates()) {\n    var maxIterations = 10;\n    var iteration = 0;\n    var low = 0;\n    var high = 1;\n    var pos, angle, distanceToBorder, distanceToPoint, difference;\n    var threshold = 0.2;\n    var node = this.to;\n    var from = false;\n    if (nearNode.id === this.from.id) {\n      node = this.from;\n      from = true;\n    }\n\n    while (low <= high && iteration < maxIterations) {\n      var middle = (low + high) * 0.5;\n\n      pos = this.getPoint(middle, viaNode);\n      angle = Math.atan2((node.y - pos.y), (node.x - pos.x));\n      distanceToBorder = node.distanceToBorder(ctx, angle);\n      distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));\n      difference = distanceToBorder - distanceToPoint;\n      if (Math.abs(difference) < threshold) {\n        break; // found\n      }\n      else if (difference < 0) { // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n        if (from === false) {\n          low = middle;\n        }\n        else {\n          high = middle;\n        }\n      }\n      else {\n        if (from === false) {\n          high = middle;\n        }\n        else {\n          low = middle;\n        }\n      }\n\n      iteration++;\n    }\n    pos.t = middle;\n\n    return pos;\n  }\n\n\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * @param {number} x1 from x\n   * @param {number} y1 from y\n   * @param {number} x2 to x\n   * @param {number} y2 to y\n   * @param {number} x3 point to check x\n   * @param {number} y3 point to check y\n   * @private\n   */\n  _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) { // x3,y3 is the point\n    let minDistance = 1e9;\n    let distance;\n    let i, t, x, y;\n    let lastX = x1;\n    let lastY = y1;\n    for (i = 1; i < 10; i++) {\n      t = 0.1 * i;\n      x = Math.pow(1 - t, 2) * x1 + (2 * t * (1 - t)) * via.x + Math.pow(t, 2) * x2;\n      y = Math.pow(1 - t, 2) * y1 + (2 * t * (1 - t)) * via.y + Math.pow(t, 2) * y2;\n      if (i > 0) {\n        distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n        minDistance = distance < minDistance ? distance : minDistance;\n      }\n      lastX = x;\n      lastY = y;\n    }\n\n    return minDistance;\n  }\n}\n\nexport default BezierEdgeBase;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/BezierEdgeBase.js","let util = require(\"../../../../../util\");\n\nclass EdgeBase {\n  constructor(options, body, labelModule) {\n    this.body = body;\n    this.labelModule = labelModule;\n    this.options = {};\n    this.setOptions(options);\n    this.colorDirty = true;\n    this.color = {};\n    this.selectionWidth = 2;\n    this.hoverWidth = 1.5;\n    this.fromPoint = this.from;\n    this.toPoint = this.to;\n  }\n\n  connect() {\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n  }\n\n  cleanup() {\n    return false;\n  }\n\n  setOptions(options) {\n    this.options = options;\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n    this.id = this.options.id;\n  }\n\n  /**\n   * Redraw a edge as a line\n   * Draw this edge in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   * @private\n   */\n  drawLine(ctx, values, selected, hover, viaNode) {\n    // set style\n    ctx.strokeStyle = this.getColor(ctx, values, selected, hover);\n    ctx.lineWidth = values.width;\n\n    if (values.dashes !== false) {\n      this._drawDashedLine(ctx, values, viaNode);\n    }\n    else {\n      this._drawLine(ctx, values, viaNode);\n    }\n  }\n\n\n  _drawLine(ctx, values, viaNode, fromPoint, toPoint) {\n    if (this.from != this.to) {\n      // draw line\n      this._line(ctx, values, viaNode, fromPoint, toPoint);\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(ctx, values);\n      this._circle(ctx, values, x, y, radius);\n    }\n  }\n\n  _drawDashedLine(ctx, values, viaNode, fromPoint, toPoint) {\n    ctx.lineCap = 'round';\n    let pattern = [5,5];\n    if (Array.isArray(values.dashes) === true) {\n      pattern = values.dashes;\n    }\n\n    // only firefox and chrome support this method, else we use the legacy one.\n    if (ctx.setLineDash !== undefined) {\n      ctx.save();\n\n      // set dash settings for chrome or firefox\n      ctx.setLineDash(pattern);\n      ctx.lineDashOffset = 0;\n\n      // draw the line\n      if (this.from != this.to) {\n        // draw line\n        this._line(ctx, values, viaNode);\n      }\n      else {\n        let [x,y,radius] = this._getCircleData(ctx, values);\n        this._circle(ctx, values, x, y, radius);\n      }\n\n      // restore the dash settings.\n      ctx.setLineDash([0]);\n      ctx.lineDashOffset = 0;\n      ctx.restore();\n    }\n    else { // unsupporting smooth lines\n      if (this.from != this.to) {\n        // draw line\n        ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern);\n      }\n      else {\n        let [x,y,radius] = this._getCircleData(ctx, values);\n        this._circle(ctx, values, x, y, radius);\n      }\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n\n      ctx.stroke();\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    }\n  }\n\n\n  findBorderPosition(nearNode, ctx, options) {\n    if (this.from != this.to) {\n      return this._findBorderPosition(nearNode, ctx, options);\n    }\n    else {\n      return this._findBorderPositionCircle(nearNode, ctx, options);\n    }\n  }\n\n  findBorderPositions(ctx) {\n    let from = {};\n    let to = {};\n    if (this.from != this.to) {\n      from = this._findBorderPosition(this.from, ctx);\n      to = this._findBorderPosition(this.to, ctx);\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(ctx);\n\n      from = this._findBorderPositionCircle(this.from, ctx, {x, y, low:0.25, high:0.6, direction:-1});\n      to = this._findBorderPositionCircle(this.from, ctx, {x, y, low:0.6, high:0.8, direction:1});\n    }\n    return {from, to};\n  }\n\n  _getCircleData(ctx) {\n    let x, y;\n    let node = this.from;\n    let radius = this.options.selfReferenceSize;\n\n    if (ctx !== undefined) {\n      if (node.shape.width === undefined) {\n        node.shape.resize(ctx);\n      }\n    }\n\n    // get circle coordinates\n    if (node.shape.width > node.shape.height) {\n      x = node.x + node.shape.width * 0.5;\n      y = node.y - radius;\n    }\n    else {\n      x = node.x + radius;\n      y = node.y - node.shape.height * 0.5;\n    }\n    return [x,y,radius];\n  }\n\n  /**\n   * Get a point on a circle\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @param {Number} percentage. Value between 0 (line start) and 1 (line end)\n   * @return {Object} point\n   * @private\n   */\n  _pointOnCircle(x, y, radius, percentage) {\n    let angle = percentage * 2 * Math.PI;\n    return {\n      x: x + radius * Math.cos(angle),\n      y: y - radius * Math.sin(angle)\n    }\n  }\n\n  /**\n   * This function uses binary search to look for the point where the circle crosses the border of the node.\n   * @param node\n   * @param ctx\n   * @param options\n   * @returns {*}\n   * @private\n   */\n  _findBorderPositionCircle(node, ctx, options) {\n    let x = options.x;\n    let y = options.y;\n    let low = options.low;\n    let high = options.high;\n    let direction = options.direction;\n\n    let maxIterations = 10;\n    let iteration = 0;\n    let radius = this.options.selfReferenceSize;\n    let pos, angle, distanceToBorder, distanceToPoint, difference;\n    let threshold = 0.05;\n    let middle = (low + high) * 0.5;\n\n    while (low <= high && iteration < maxIterations) {\n      middle = (low + high) * 0.5;\n\n      pos = this._pointOnCircle(x, y, radius, middle);\n      angle = Math.atan2((node.y - pos.y), (node.x - pos.x));\n      distanceToBorder = node.distanceToBorder(ctx, angle);\n      distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));\n      difference = distanceToBorder - distanceToPoint;\n      if (Math.abs(difference) < threshold) {\n        break; // found\n      }\n      else if (difference > 0) { // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n        if (direction > 0) {\n          low = middle;\n        }\n        else {\n          high = middle;\n        }\n      }\n      else {\n        if (direction > 0) {\n          high = middle;\n        }\n        else {\n          low = middle;\n        }\n      }\n      iteration++;\n\n    }\n    pos.t = middle;\n\n    return pos;\n  }\n\n  /**\n   * Get the line width of the edge. Depends on width and whether one of the\n   * connected nodes is selected.\n   * @return {Number} width\n   * @private\n   */\n  getLineWidth(selected, hover) {\n    if (selected === true) {\n      return Math.max(this.selectionWidth, 0.3 / this.body.view.scale);\n    }\n    else {\n      if (hover === true) {\n        return Math.max(this.hoverWidth, 0.3 / this.body.view.scale);\n      }\n      else {\n        return Math.max(this.options.width, 0.3 / this.body.view.scale);\n      }\n    }\n  }\n\n\n  getColor(ctx, values, selected, hover) {\n    if (values.inheritsColor !== false) {\n      // when this is a loop edge, just use the 'from' method\n      if ((values.inheritsColor === 'both') && (this.from.id !== this.to.id)) {\n        let grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y);\n        let fromColor, toColor;\n        fromColor = this.from.options.color.highlight.border;\n        toColor = this.to.options.color.highlight.border;\n\n        if ((this.from.selected === false) && (this.to.selected === false)) {\n          fromColor = util.overrideOpacity(this.from.options.color.border, values.opacity);\n          toColor = util.overrideOpacity(this.to.options.color.border, values.opacity);\n        }\n        else if ((this.from.selected === true) && (this.to.selected === false)) {\n          toColor = this.to.options.color.border;\n        }\n        else if ((this.from.selected === false) && (this.to.selected === true)) {\n          fromColor = this.from.options.color.border;\n        }\n        grd.addColorStop(0, fromColor);\n        grd.addColorStop(1, toColor);\n\n        // -------------------- this returns -------------------- //\n        return grd;\n      }\n\n      if (values.inheritsColor === \"to\") {\n        return util.overrideOpacity(this.to.options.color.border, values.opacity);\n      } else { // \"from\"\n        return util.overrideOpacity(this.from.options.color.border, values.opacity);\n      }\n    } else {\n      return util.overrideOpacity(values.color, values.opacity);\n    }\n  }\n\n  /**\n   * Draw a line from a node to itself, a circle\n   * @param {CanvasRenderingContext2D} ctx\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @private\n   */\n  _circle(ctx, values, x, y, radius) {\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n\n    // draw a circle\n    ctx.beginPath();\n    ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n    ctx.stroke();\n\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n  }\n\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} x3\n   * @param {number} y3\n   * @private\n   */\n  getDistanceToEdge(x1, y1, x2, y2, x3, y3, via, values) { // x3,y3 is the point\n    let returnValue = 0;\n    if (this.from != this.to) {\n      returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via)\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(undefined, values);\n      let dx = x - x3;\n      let dy = y - y3;\n      returnValue = Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);\n    }\n\n    if (this.labelModule.size.left < x3 &&\n      this.labelModule.size.left + this.labelModule.size.width > x3 &&\n      this.labelModule.size.top < y3 &&\n      this.labelModule.size.top + this.labelModule.size.height > y3) {\n      return 0;\n    }\n    else {\n      return returnValue;\n    }\n  }\n\n  _getDistanceToLine(x1, y1, x2, y2, x3, y3) {\n    let px = x2 - x1;\n    let py = y2 - y1;\n    let something = px * px + py * py;\n    let u = ((x3 - x1) * px + (y3 - y1) * py) / something;\n\n    if (u > 1) {\n      u = 1;\n    }\n    else if (u < 0) {\n      u = 0;\n    }\n\n    let x = x1 + u * px;\n    let y = y1 + u * py;\n    let dx = x - x3;\n    let dy = y - y3;\n\n    //# Note: If the actual distance does not matter,\n    //# if you only want to compare what this function\n    //# returns to other results of this function, you\n    //# can just return the squared distance instead\n    //# (i.e. remove the sqrt) to gain a little performance\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param position\n   * @param viaNode\n   */\n  getArrowData(ctx, position, viaNode, selected, hover, values) {\n    // set lets\n    let angle;\n    let arrowPoint;\n    let node1;\n    let node2;\n    let guideOffset;\n    let scaleFactor;\n    let type;\n    let lineWidth = values.width;\n\n    if (position === 'from') {\n      node1 = this.from;\n      node2 = this.to;\n      guideOffset = 0.1;\n      scaleFactor = values.fromArrowScale;\n      type = values.fromArrowType;\n    }\n    else if (position === 'to') {\n      node1 = this.to;\n      node2 = this.from;\n      guideOffset = -0.1;\n      scaleFactor = values.toArrowScale;\n      type = values.toArrowType;\n    }\n    else {\n      node1 = this.to;\n      node2 = this.from;\n      scaleFactor = values.middleArrowScale;\n      type = values.middleArrowType;\n    }\n\n    // if not connected to itself\n    if (node1 != node2) {\n      if (position !== 'middle') {\n        // draw arrow head\n        if (this.options.smooth.enabled === true) {\n          arrowPoint = this.findBorderPosition(node1, ctx, { via: viaNode });\n          let guidePos = this.getPoint(Math.max(0.0, Math.min(1.0, arrowPoint.t + guideOffset)), viaNode);\n          angle = Math.atan2((arrowPoint.y - guidePos.y), (arrowPoint.x - guidePos.x));\n        } else {\n          angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n          arrowPoint = this.findBorderPosition(node1, ctx);\n        }\n      } else {\n        angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n        arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow.\n      }\n    } else {\n      // draw circle\n      let [x,y,radius] = this._getCircleData(ctx);\n\n      if (position === 'from') {\n        arrowPoint = this.findBorderPosition(this.from, ctx, { x, y, low: 0.25, high: 0.6, direction: -1 });\n        angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n      } else if (position === 'to') {\n        arrowPoint = this.findBorderPosition(this.from, ctx, { x, y, low: 0.6, high: 1.0, direction: 1 });\n        angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;\n      } else {\n        arrowPoint = this._pointOnCircle(x, y, radius, 0.175);\n        angle = 3.9269908169872414; // === 0.175 * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n      }\n    }\n\n    let length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.\n\n    var xi = arrowPoint.x - length * 0.9 * Math.cos(angle);\n    var yi = arrowPoint.y - length * 0.9 * Math.sin(angle);\n    let arrowCore = { x: xi, y: yi };\n\n    return { point: arrowPoint, core: arrowCore, angle: angle, length: length, type: type };\n  }\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @param hover\n   * @param arrowData\n   */\n  drawArrowHead(ctx, values, selected, hover, arrowData) {\n    // set style\n    ctx.strokeStyle = this.getColor(ctx, values, selected, hover);\n    ctx.fillStyle = ctx.strokeStyle;\n    ctx.lineWidth = values.width;\n\n    if (arrowData.type && arrowData.type.toLowerCase() === 'circle') {\n      // draw circle at the end of the line\n      ctx.circleEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length);\n    } else {\n      // draw arrow at the end of the line\n      ctx.arrowEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length);\n    }\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n  }\n\n\n  enableShadow(ctx, values) {\n    if (values.shadow === true) {\n      ctx.shadowColor = values.shadowColor;\n      ctx.shadowBlur = values.shadowSize;\n      ctx.shadowOffsetX = values.shadowX;\n      ctx.shadowOffsetY = values.shadowY;\n    }\n  }\n\n  disableShadow(ctx, values) {\n    if (values.shadow === true) {\n      ctx.shadowColor = 'rgba(0,0,0,0)';\n      ctx.shadowBlur = 0;\n      ctx.shadowOffsetX = 0;\n      ctx.shadowOffsetY = 0;\n    }\n  }\n}\n\nexport default EdgeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/EdgeBase.js","import BezierEdgeBase from './util/BezierEdgeBase'\n\nclass BezierEdgeDynamic extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.\n    super(options, body, labelModule); // --> this calls the setOptions below\n    this._boundFunction = () => {this.positionBezierNode();};\n    this.body.emitter.on(\"_repositionBezierNodes\", this._boundFunction);\n  }\n\n  setOptions(options) {\n    // check if the physics has changed.\n    let physicsChange = false;\n    if (this.options.physics !== options.physics) {\n      physicsChange = true;\n    }\n\n    // set the options and the to and from nodes\n    this.options = options;\n    this.id = this.options.id;\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n\n    // setup the support node and connect\n    this.setupSupportNode();\n    this.connect();\n\n    // when we change the physics state of the edge, we reposition the support node.\n    if (physicsChange === true) {\n      this.via.setOptions({physics: this.options.physics})\n      this.positionBezierNode();\n    }\n  }\n\n  connect() {\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n    if (this.from === undefined || this.to === undefined || this.options.physics === false) {\n      this.via.setOptions({physics:false})\n    }\n    else {\n      // fix weird behaviour where a self referencing node has physics enabled\n      if (this.from.id === this.to.id) {\n        this.via.setOptions({physics: false})\n      }\n      else {\n        this.via.setOptions({physics: true})\n      }\n    }\n  }\n\n  /**\n   * remove the support nodes\n   * @returns {boolean}\n   */\n  cleanup() {\n    this.body.emitter.off(\"_repositionBezierNodes\", this._boundFunction);\n    if (this.via !== undefined) {\n      delete this.body.nodes[this.via.id];\n      this.via = undefined;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but\n   * are used for the force calculation.\n   *\n   * The changed data is not called, if needed, it is returned by the main edge constructor.\n   * @private\n   */\n  setupSupportNode() {\n    if (this.via === undefined) {\n      var nodeId = \"edgeId:\" + this.id;\n      var node = this.body.functions.createNode({\n        id: nodeId,\n        shape: 'circle',\n        physics:true,\n        hidden:true\n      });\n      this.body.nodes[nodeId] = node;\n      this.via = node;\n      this.via.parentEdgeId = this.id;\n      this.positionBezierNode();\n    }\n  }\n\n  positionBezierNode() {\n    if (this.via !== undefined && this.from !== undefined && this.to !== undefined) {\n      this.via.x = 0.5 * (this.from.x + this.to.x);\n      this.via.y = 0.5 * (this.from.y + this.to.y);\n    }\n    else if (this.via !== undefined) {\n      this.via.x = 0;\n      this.via.y = 0;\n    }\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNode) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n    // fallback to normal straight edges\n    if (viaNode.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return this.via;\n  }\n\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param viaNode\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, viaNode = this.via) {\n    let t = percentage;\n    let x, y;\n    if (this.from === this.to){\n      let [cx,cy,cr]  = this._getCircleData(this.from)\n      let a = 2 * Math.PI * (1 - t);\n      x = cx + cr * Math.sin(a);\n      y = cy + cr - cr * (1 - Math.cos(a));\n    } else {\n      x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;\n      y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;\n    }\n\n    return {x: x, y: y};\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    return this._findBorderPositionBezier(nearNode, ctx, this.via);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);\n  }\n\n\n}\n\n\nexport default BezierEdgeDynamic;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/BezierEdgeDynamic.js","import BezierEdgeBase from './util/BezierEdgeBase'\n\nclass BezierEdgeStatic extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNode) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n    // fallback to normal straight edges\n    if (viaNode.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return this._getViaCoordinates();\n  }\n\n\n  /**\n   * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.\n   * @returns {{x: undefined, y: undefined}}\n   * @private\n   */\n  _getViaCoordinates() {\n    let xVia = undefined;\n    let yVia = undefined;\n    let factor = this.options.smooth.roundness;\n    let type = this.options.smooth.type;\n    let dx = Math.abs(this.from.x - this.to.x);\n    let dy = Math.abs(this.from.y - this.to.y);\n    if (type === 'discrete' || type === 'diagonalCross') {\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y - factor * dy;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y - factor * dy;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y + factor * dy;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y + factor * dy;\n          }\n        }\n        if (type === \"discrete\") {\n          xVia = dx < factor * dy ? this.from.x : xVia;\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y - factor * dx;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y - factor * dx;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y + factor * dx;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y + factor * dx;\n          }\n        }\n        if (type === \"discrete\") {\n          yVia = dy < factor * dx ? this.from.y : yVia;\n        }\n      }\n    }\n    else if (type === \"straightCross\") {\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {  // up - down\n        xVia = this.from.x;\n        if (this.from.y < this.to.y) {\n          yVia = this.to.y - (1 - factor) * dy;\n        }\n        else {\n          yVia = this.to.y + (1 - factor) * dy;\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right\n        if (this.from.x < this.to.x) {\n          xVia = this.to.x - (1 - factor) * dx;\n        }\n        else {\n          xVia = this.to.x + (1 - factor) * dx;\n        }\n        yVia = this.from.y;\n      }\n    }\n    else if (type === 'horizontal') {\n      if (this.from.x < this.to.x) {\n        xVia = this.to.x - (1 - factor) * dx;\n      }\n      else {\n        xVia = this.to.x + (1 - factor) * dx;\n      }\n      yVia = this.from.y;\n    }\n    else if (type === 'vertical') {\n      xVia = this.from.x;\n      if (this.from.y < this.to.y) {\n        yVia = this.to.y - (1 - factor) * dy;\n      }\n      else {\n        yVia = this.to.y + (1 - factor) * dy;\n      }\n    }\n    else if (type === 'curvedCW') {\n      dx = this.to.x - this.from.x;\n      dy = this.from.y - this.to.y;\n      let radius = Math.sqrt(dx * dx + dy * dy);\n      let pi = Math.PI;\n\n      let originalAngle = Math.atan2(dy, dx);\n      let myAngle = (originalAngle + ((factor * 0.5) + 0.5) * pi) % (2 * pi);\n\n      xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle);\n      yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle);\n    }\n    else if (type === 'curvedCCW') {\n      dx = this.to.x - this.from.x;\n      dy = this.from.y - this.to.y;\n      let radius = Math.sqrt(dx * dx + dy * dy);\n      let pi = Math.PI;\n\n      let originalAngle = Math.atan2(dy, dx);\n      let myAngle = (originalAngle + ((-factor * 0.5) + 0.5) * pi) % (2 * pi);\n\n      xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle);\n      yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle);\n    }\n    else { // continuous\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y - factor * dy;\n            xVia = this.to.x < xVia ? this.to.x : xVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y - factor * dy;\n            xVia = this.to.x > xVia ? this.to.x : xVia;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y + factor * dy;\n            xVia = this.to.x < xVia ? this.to.x : xVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y + factor * dy;\n            xVia = this.to.x > xVia ? this.to.x : xVia;\n          }\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y - factor * dx;\n            yVia = this.to.y > yVia ? this.to.y : yVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y - factor * dx;\n            yVia = this.to.y > yVia ? this.to.y : yVia;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y + factor * dx;\n            yVia = this.to.y < yVia ? this.to.y : yVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y + factor * dx;\n            yVia = this.to.y < yVia ? this.to.y : yVia;\n          }\n        }\n      }\n    }\n    return {x: xVia, y: yVia};\n  }\n\n  _findBorderPosition(nearNode, ctx, options = {}) {\n    return this._findBorderPositionBezier(nearNode, ctx, options.via);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3, viaNode = this._getViaCoordinates()) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param viaNode\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, viaNode = this._getViaCoordinates()) {\n    var t = percentage;\n    var x = Math.pow(1 - t, 2) * this.fromPoint.x + (2 * t * (1 - t)) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;\n    var y = Math.pow(1 - t, 2) * this.fromPoint.y + (2 * t * (1 - t)) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;\n\n    return {x: x, y: y};\n  }\n}\n\n\nexport default BezierEdgeStatic;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/BezierEdgeStatic.js","import EdgeBase from './util/EdgeBase'\n\nclass StraightEdge extends EdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n    ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return undefined;\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param via\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage) {\n    return {\n      x: (1 - percentage) * this.fromPoint.x + percentage * this.toPoint.x,\n      y: (1 - percentage) * this.fromPoint.y + percentage * this.toPoint.y\n    }\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    let node1 = this.to;\n    let node2 = this.from;\n    if (nearNode.id === this.from.id) {\n      node1 = this.from;\n      node2 = this.to;\n    }\n\n    let angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n    let dx = (node1.x - node2.x);\n    let dy = (node1.y - node2.y);\n    let edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);\n    let toBorderDist = nearNode.distanceToBorder(ctx, angle);\n    let toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength;\n\n    let borderPos = {};\n    borderPos.x = (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x;\n    borderPos.y = (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y;\n\n    return borderPos;\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { // x3,y3 is the point\n    return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);\n  }\n\n}\n\nexport default StraightEdge;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/StraightEdge.js","import BarnesHutSolver                      from './components/physics/BarnesHutSolver';\nimport Repulsion                            from './components/physics/RepulsionSolver';\nimport HierarchicalRepulsion                from './components/physics/HierarchicalRepulsionSolver';\nimport SpringSolver                         from './components/physics/SpringSolver';\nimport HierarchicalSpringSolver             from './components/physics/HierarchicalSpringSolver';\nimport CentralGravitySolver                 from './components/physics/CentralGravitySolver';\nimport ForceAtlas2BasedRepulsionSolver      from './components/physics/FA2BasedRepulsionSolver';\nimport ForceAtlas2BasedCentralGravitySolver from './components/physics/FA2BasedCentralGravitySolver';\n\nvar util = require('../../util');\n\n\nclass PhysicsEngine {\n  constructor(body) {\n    this.body = body;\n    this.physicsBody = {physicsNodeIndices:[], physicsEdgeIndices:[], forces: {}, velocities: {}};\n\n    this.physicsEnabled = true;\n    this.simulationInterval = 1000 / 60;\n    this.requiresTimeout = true;\n    this.previousStates = {};\n    this.referenceState = {};\n    this.freezeCache = {};\n    this.renderTimer = undefined;\n\n    // parameters for the adaptive timestep\n    this.adaptiveTimestep = false;\n    this.adaptiveTimestepEnabled = false;\n    this.adaptiveCounter = 0;\n    this.adaptiveInterval = 3;\n\n    this.stabilized = false;\n    this.startedStabilization = false;\n    this.stabilizationIterations = 0;\n    this.ready = false; // will be set to true if the stabilize\n\n    // default options\n    this.options = {};\n    this.defaultOptions = {\n      enabled: true,\n      barnesHut: {\n        theta: 0.5,\n        gravitationalConstant: -2000,\n        centralGravity: 0.3,\n        springLength: 95,\n        springConstant: 0.04,\n        damping: 0.09,\n        avoidOverlap: 0\n      },\n      forceAtlas2Based: {\n        theta: 0.5,\n        gravitationalConstant: -50,\n        centralGravity: 0.01,\n        springConstant: 0.08,\n        springLength: 100,\n        damping: 0.4,\n        avoidOverlap: 0\n      },\n      repulsion: {\n        centralGravity: 0.2,\n        springLength: 200,\n        springConstant: 0.05,\n        nodeDistance: 100,\n        damping: 0.09,\n        avoidOverlap: 0\n      },\n      hierarchicalRepulsion: {\n        centralGravity: 0.0,\n        springLength: 100,\n        springConstant: 0.01,\n        nodeDistance: 120,\n        damping: 0.09\n      },\n      maxVelocity: 50,\n      minVelocity: 0.75,    // px/s\n      solver: 'barnesHut',\n      stabilization: {\n        enabled: true,\n        iterations: 1000,   // maximum number of iteration to stabilize\n        updateInterval: 50,\n        onlyDynamicEdges: false,\n        fit: true\n      },\n      timestep: 0.5,\n      adaptiveTimestep: true\n    };\n    util.extend(this.options, this.defaultOptions);\n    this.timestep = 0.5;\n    this.layoutFailed = false;\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('initPhysics',     () => {this.initPhysics();});\n    this.body.emitter.on('_layoutFailed',   () => {this.layoutFailed = true;});\n    this.body.emitter.on('resetPhysics',    () => {this.stopSimulation(); this.ready = false;});\n    this.body.emitter.on('disablePhysics',  () => {this.physicsEnabled = false; this.stopSimulation();});\n    this.body.emitter.on('restorePhysics',  () => {\n      this.setOptions(this.options);\n      if (this.ready === true) {\n        this.startSimulation();\n      }\n    });\n    this.body.emitter.on('startSimulation', () => {\n      if (this.ready === true) {\n        this.startSimulation();\n      }\n    });\n    this.body.emitter.on('stopSimulation',  () => {this.stopSimulation();});\n    this.body.emitter.on('destroy',         () => {\n      this.stopSimulation(false);\n      this.body.emitter.off();\n    });\n    // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed.\n    this.body.emitter.on(\"_dataChanged\", () => {\n      // update shortcut lists\n      this.updatePhysicsData();\n    });\n\n    // debug: show forces\n    // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._drawForces(ctx);});\n  }\n\n\n  /**\n   * set the physics options\n   * @param options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      if (options === false) {\n        this.options.enabled = false;\n        this.physicsEnabled = false;\n        this.stopSimulation();\n      }\n      else {\n        this.physicsEnabled = true;\n        util.selectiveNotDeepExtend(['stabilization'], this.options, options);\n        util.mergeOptions(this.options, options, 'stabilization');\n\n        if (options.enabled === undefined) {\n          this.options.enabled = true;\n        }\n\n        if (this.options.enabled === false) {\n          this.physicsEnabled = false;\n          this.stopSimulation();\n        }\n\n        // set the timestep\n        this.timestep = this.options.timestep;\n      }\n    }\n    this.init();\n  }\n\n\n  /**\n   * configure the engine.\n   */\n  init() {\n    var options;\n    if (this.options.solver === 'forceAtlas2Based') {\n      options = this.options.forceAtlas2Based;\n      this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else if (this.options.solver === 'repulsion') {\n      options = this.options.repulsion;\n      this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else if (this.options.solver === 'hierarchicalRepulsion') {\n      options = this.options.hierarchicalRepulsion;\n      this.nodesSolver = new HierarchicalRepulsion(this.body, this.physicsBody, options);\n      this.edgesSolver = new HierarchicalSpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else { // barnesHut\n      options = this.options.barnesHut;\n      this.nodesSolver = new BarnesHutSolver(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n\n    this.modelOptions = options;\n  }\n\n\n  /**\n   * initialize the engine\n   */\n  initPhysics() {\n    if (this.physicsEnabled === true && this.options.enabled === true) {\n      if (this.options.stabilization.enabled === true) {\n        this.stabilize();\n      }\n      else {\n        this.stabilized = false;\n        this.ready = true;\n        this.body.emitter.emit('fit', {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom\n        this.startSimulation();\n      }\n    }\n    else {\n      this.ready = true;\n      this.body.emitter.emit('fit');\n    }\n  }\n\n  /**\n   * Start the simulation\n   */\n  startSimulation() {\n    if (this.physicsEnabled === true && this.options.enabled === true) {\n      this.stabilized = false;\n\n      // when visible, adaptivity is disabled.\n      this.adaptiveTimestep = false;\n\n      // this sets the width of all nodes initially which could be required for the avoidOverlap\n      this.body.emitter.emit(\"_resizeNodes\");\n      if (this.viewFunction === undefined) {\n        this.viewFunction = this.simulationStep.bind(this);\n        this.body.emitter.on('initRedraw', this.viewFunction);\n        this.body.emitter.emit('_startRendering');\n      }\n    }\n    else {\n      this.body.emitter.emit('_redraw');\n    }\n  }\n\n\n  /**\n   * Stop the simulation, force stabilization.\n   */\n  stopSimulation(emit = true) {\n    this.stabilized = true;\n    if (emit === true) {\n      this._emitStabilized();\n    }\n    if (this.viewFunction !== undefined) {\n      this.body.emitter.off('initRedraw', this.viewFunction);\n      this.viewFunction = undefined;\n      if (emit === true) {\n        this.body.emitter.emit('_stopRendering');\n      }\n    }\n  }\n\n\n  /**\n   * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.\n   *\n   */\n  simulationStep() {\n    // check if the physics have settled\n    var startTime = Date.now();\n    this.physicsTick();\n    var physicsTime = Date.now() - startTime;\n\n    // run double speed if it is a little graph\n    if ((physicsTime < 0.4 * this.simulationInterval || this.runDoubleSpeed === true) && this.stabilized === false) {\n      this.physicsTick();\n\n      // this makes sure there is no jitter. The decision is taken once to run it at double speed.\n      this.runDoubleSpeed = true;\n    }\n\n    if (this.stabilized === true) {\n      this.stopSimulation();\n    }\n  }\n\n\n  /**\n   * trigger the stabilized event.\n   * @private\n   */\n  _emitStabilized(amountOfIterations = this.stabilizationIterations) {\n    if (this.stabilizationIterations > 1 || this.startedStabilization === true) {\n      setTimeout(() => {\n        this.body.emitter.emit('stabilized', {iterations: amountOfIterations});\n        this.startedStabilization = false;\n        this.stabilizationIterations = 0;\n      }, 0);\n    }\n  }\n\n  /**\n   * A single simulation step (or 'tick') in the physics simulation\n   *\n   * @private\n   */\n  physicsTick() {\n    // this is here to ensure that there is no start event when the network is already stable.\n    if (this.startedStabilization === false) {\n      this.body.emitter.emit('startStabilizing');\n      this.startedStabilization = true;\n    }\n\n    if (this.stabilized === false) {\n      // adaptivity means the timestep adapts to the situation, only applicable for stabilization\n      if (this.adaptiveTimestep === true && this.adaptiveTimestepEnabled === true) {\n        // this is the factor for increasing the timestep on success.\n        let factor = 1.2;\n\n        // we assume the adaptive interval is\n        if (this.adaptiveCounter % this.adaptiveInterval === 0) { // we leave the timestep stable for \"interval\" iterations.\n          // first the big step and revert. Revert saves the reference state.\n          this.timestep = 2 * this.timestep;\n          this.calculateForces();\n          this.moveNodes();\n          this.revert();\n\n          // now the normal step. Since this is the last step, it is the more stable one and we will take this.\n          this.timestep = 0.5 * this.timestep;\n\n          // since it's half the step, we do it twice.\n          this.calculateForces();\n          this.moveNodes();\n          this.calculateForces();\n          this.moveNodes();\n\n          // we compare the two steps. if it is acceptable we double the step.\n          if (this._evaluateStepQuality() === true) {\n            this.timestep = factor * this.timestep;\n          }\n          else {\n            // if not, we decrease the step to a minimum of the options timestep.\n            // if the decreased timestep is smaller than the options step, we do not reset the counter\n            // we assume that the options timestep is stable enough.\n            if (this.timestep/factor < this.options.timestep) {\n              this.timestep = this.options.timestep;\n            }\n            else {\n              // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure\n              // that large instabilities do not form.\n              this.adaptiveCounter = -1; // check again next iteration\n              this.timestep = Math.max(this.options.timestep, this.timestep/factor);\n            }\n          }\n        }\n        else {\n          // normal step, keeping timestep constant\n          this.calculateForces();\n          this.moveNodes();\n        }\n\n        // increment the counter\n        this.adaptiveCounter += 1;\n      }\n      else {\n        // case for the static timestep, we reset it to the one in options and take a normal step.\n        this.timestep = this.options.timestep;\n        this.calculateForces();\n        this.moveNodes();\n      }\n\n      // determine if the network has stabilzied\n      if (this.stabilized === true) {\n        this.revert();\n      }\n\n      this.stabilizationIterations++;\n    }\n  }\n\n  /**\n   * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.\n   *\n   * @private\n   */\n  updatePhysicsData() {\n    this.physicsBody.forces = {};\n    this.physicsBody.physicsNodeIndices = [];\n    this.physicsBody.physicsEdgeIndices = [];\n    let nodes = this.body.nodes;\n    let edges = this.body.edges;\n\n    // get node indices for physics\n    for (let nodeId in nodes) {\n      if (nodes.hasOwnProperty(nodeId)) {\n        if (nodes[nodeId].options.physics === true) {\n          this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);\n        }\n      }\n    }\n\n    // get edge indices for physics\n    for (let edgeId in edges) {\n      if (edges.hasOwnProperty(edgeId)) {\n        if (edges[edgeId].options.physics === true) {\n          this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);\n        }\n      }\n    }\n\n    // get the velocity and the forces vector\n    for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n      let nodeId = this.physicsBody.physicsNodeIndices[i];\n      this.physicsBody.forces[nodeId] = {x:0,y:0};\n\n      // forces can be reset because they are recalculated. Velocities have to persist.\n      if (this.physicsBody.velocities[nodeId] === undefined) {\n        this.physicsBody.velocities[nodeId] = {x:0,y:0};\n      }\n    }\n\n    // clean deleted nodes from the velocity vector\n    for (let nodeId in this.physicsBody.velocities) {\n      if (nodes[nodeId] === undefined) {\n        delete this.physicsBody.velocities[nodeId];\n      }\n    }\n  }\n\n\n  /**\n   * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.\n   */\n  revert() {\n    var nodeIds = Object.keys(this.previousStates);\n    var nodes = this.body.nodes;\n    var velocities = this.physicsBody.velocities;\n    this.referenceState = {};\n\n    for (let i = 0; i < nodeIds.length; i++) {\n      let nodeId = nodeIds[i];\n      if (nodes[nodeId] !== undefined) {\n        if (nodes[nodeId].options.physics === true) {\n          this.referenceState[nodeId] = {\n            positions: {x:nodes[nodeId].x, y:nodes[nodeId].y}\n          };\n          velocities[nodeId].x = this.previousStates[nodeId].vx;\n          velocities[nodeId].y = this.previousStates[nodeId].vy;\n          nodes[nodeId].x = this.previousStates[nodeId].x;\n          nodes[nodeId].y = this.previousStates[nodeId].y;\n        }\n      }\n      else {\n        delete this.previousStates[nodeId];\n      }\n    }\n  }\n\n  /**\n   * This compares the reference state to the current state\n   */\n  _evaluateStepQuality() {\n    let dx, dy, dpos;\n    let nodes = this.body.nodes;\n    let reference = this.referenceState;\n    let posThreshold = 0.3;\n\n    for (let nodeId in this.referenceState) {\n      if (this.referenceState.hasOwnProperty(nodeId) && nodes[nodeId] !== undefined) {\n        dx = nodes[nodeId].x - reference[nodeId].positions.x;\n        dy = nodes[nodeId].y - reference[nodeId].positions.y;\n\n        dpos = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2))\n\n        if (dpos > posThreshold) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * move the nodes one timestep and check if they are stabilized\n   * @returns {boolean}\n   */\n  moveNodes() {\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var maxVelocity = this.options.maxVelocity ? this.options.maxVelocity : 1e9;\n    var maxNodeVelocity = 0;\n    var averageNodeVelocity = 0;\n\n    // the velocity threshold (energy in the system) for the adaptivity toggle\n    var velocityAdaptiveThreshold = 5;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      let nodeVelocity = this._performStep(nodeId, maxVelocity);\n      // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized\n      maxNodeVelocity = Math.max(maxNodeVelocity,nodeVelocity);\n      averageNodeVelocity += nodeVelocity;\n    }\n\n    // evaluating the stabilized and adaptiveTimestepEnabled conditions\n    this.adaptiveTimestepEnabled = (averageNodeVelocity/nodeIndices.length) < velocityAdaptiveThreshold;\n    this.stabilized = maxNodeVelocity < this.options.minVelocity;\n  }\n\n\n  /**\n   * Perform the actual step\n   *\n   * @param nodeId\n   * @param maxVelocity\n   * @returns {number}\n   * @private\n   */\n  _performStep(nodeId,maxVelocity) {\n    let node = this.body.nodes[nodeId];\n    let timestep = this.timestep;\n    let forces = this.physicsBody.forces;\n    let velocities = this.physicsBody.velocities;\n\n    // store the state so we can revert\n    this.previousStates[nodeId] = {x:node.x, y:node.y, vx:velocities[nodeId].x, vy:velocities[nodeId].y};\n\n    if (node.options.fixed.x === false) {\n      let dx   = this.modelOptions.damping * velocities[nodeId].x;   // damping force\n      let ax   = (forces[nodeId].x - dx) / node.options.mass;        // acceleration\n      velocities[nodeId].x += ax * timestep;                         // velocity\n      velocities[nodeId].x = (Math.abs(velocities[nodeId].x) > maxVelocity) ? ((velocities[nodeId].x > 0) ? maxVelocity : -maxVelocity) : velocities[nodeId].x;\n      node.x   += velocities[nodeId].x * timestep;                    // position\n    }\n    else {\n      forces[nodeId].x = 0;\n      velocities[nodeId].x = 0;\n    }\n\n    if (node.options.fixed.y === false) {\n      let dy   = this.modelOptions.damping * velocities[nodeId].y;    // damping force\n      let ay   = (forces[nodeId].y - dy) / node.options.mass;         // acceleration\n      velocities[nodeId].y += ay * timestep;                          // velocity\n      velocities[nodeId].y = (Math.abs(velocities[nodeId].y) > maxVelocity) ? ((velocities[nodeId].y > 0) ? maxVelocity : -maxVelocity) : velocities[nodeId].y;\n      node.y   += velocities[nodeId].y * timestep;                     // position\n    }\n    else {\n      forces[nodeId].y = 0;\n      velocities[nodeId].y = 0;\n    }\n\n    let totalVelocity = Math.sqrt(Math.pow(velocities[nodeId].x,2) + Math.pow(velocities[nodeId].y,2));\n    return totalVelocity;\n  }\n\n\n  /**\n   * calculate the forces for one physics iteration.\n   */\n  calculateForces() {\n    this.gravitySolver.solve();\n    this.nodesSolver.solve();\n    this.edgesSolver.solve();\n  }\n\n\n\n  /**\n   * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization\n   * because only the supportnodes for the smoothCurves have to settle.\n   *\n   * @private\n   */\n  _freezeNodes() {\n    var nodes = this.body.nodes;\n    for (var id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        if (nodes[id].x && nodes[id].y) {\n          this.freezeCache[id] = {x:nodes[id].options.fixed.x,y:nodes[id].options.fixed.y};\n          nodes[id].options.fixed.x = true;\n          nodes[id].options.fixed.y = true;\n        }\n      }\n    }\n  }\n\n  /**\n   * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.\n   *\n   * @private\n   */\n  _restoreFrozenNodes() {\n    var nodes = this.body.nodes;\n    for (var id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        if (this.freezeCache[id] !== undefined) {\n          nodes[id].options.fixed.x = this.freezeCache[id].x;\n          nodes[id].options.fixed.y = this.freezeCache[id].y;\n        }\n      }\n    }\n    this.freezeCache = {};\n  }\n\n  /**\n   * Find a stable position for all nodes\n   */\n  stabilize(iterations = this.options.stabilization.iterations) {\n    if (typeof iterations !== 'number') {\n      console.log('The stabilize method needs a numeric amount of iterations. Switching to default: ', this.options.stabilization.iterations);\n      iterations = this.options.stabilization.iterations;\n    }\n\n    if (this.physicsBody.physicsNodeIndices.length === 0) {\n      this.ready = true;\n      return;\n    }\n\n    // enable adaptive timesteps\n    this.adaptiveTimestep = true && this.options.adaptiveTimestep;\n\n    // this sets the width of all nodes initially which could be required for the avoidOverlap\n    this.body.emitter.emit(\"_resizeNodes\");\n\n    // stop the render loop\n    this.stopSimulation();\n\n    // set stabilze to false\n    this.stabilized = false;\n\n    // block redraw requests\n    this.body.emitter.emit('_blockRedraw');\n    this.targetIterations = iterations;\n\n    // start the stabilization\n    if (this.options.stabilization.onlyDynamicEdges === true) {\n      this._freezeNodes();\n    }\n    this.stabilizationIterations = 0;\n\n    setTimeout(() => this._stabilizationBatch(),0);\n  }\n\n\n  /**\n   * One batch of stabilization\n   * @private\n   */\n  _stabilizationBatch() {\n    // this is here to ensure that there is at least one start event.\n    if (this.startedStabilization === false) {\n      this.body.emitter.emit('startStabilizing');\n      this.startedStabilization = true;\n    }\n\n    var count = 0;\n    while (this.stabilized === false && count < this.options.stabilization.updateInterval && this.stabilizationIterations < this.targetIterations) {\n      this.physicsTick();\n      count++;\n    }\n\n    if (this.stabilized === false && this.stabilizationIterations < this.targetIterations) {\n      this.body.emitter.emit('stabilizationProgress', {iterations: this.stabilizationIterations, total: this.targetIterations});\n      setTimeout(this._stabilizationBatch.bind(this),0);\n    }\n    else {\n      this._finalizeStabilization();\n    }\n  }\n\n\n  /**\n   * Wrap up the stabilization, fit and emit the events.\n   * @private\n   */\n  _finalizeStabilization() {\n    this.body.emitter.emit('_allowRedraw');\n    if (this.options.stabilization.fit === true) {\n      this.body.emitter.emit('fit');\n    }\n\n    if (this.options.stabilization.onlyDynamicEdges === true) {\n      this._restoreFrozenNodes();\n    }\n\n    this.body.emitter.emit('stabilizationIterationsDone');\n    this.body.emitter.emit('_requestRedraw');\n\n    if (this.stabilized === true) {\n      this._emitStabilized();\n    }\n    else {\n      this.startSimulation();\n    }\n\n    this.ready = true;\n  }\n\n\n  _drawForces(ctx) {\n    for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n      let node = this.body.nodes[this.physicsBody.physicsNodeIndices[i]];\n      let force = this.physicsBody.forces[this.physicsBody.physicsNodeIndices[i]];\n      let factor = 20;\n      let colorFactor = 0.03;\n      let forceSize = Math.sqrt(Math.pow(force.x,2) + Math.pow(force.x,2));\n\n      let size = Math.min(Math.max(5,forceSize),15);\n      let arrowSize = 3*size;\n\n      let color = util.HSVToHex((180 - Math.min(1,Math.max(0,colorFactor*forceSize))*180) / 360,1,1);\n\n      ctx.lineWidth = size;\n      ctx.strokeStyle = color;\n      ctx.beginPath();\n      ctx.moveTo(node.x,node.y);\n      ctx.lineTo(node.x+factor*force.x, node.y+factor*force.y);\n      ctx.stroke();\n\n      let angle = Math.atan2(force.y, force.x);\n      ctx.fillStyle = color;\n      ctx.arrowEndpoint(node.x + factor*force.x + Math.cos(angle)*arrowSize, node.y + factor*force.y+Math.sin(angle)*arrowSize, angle, arrowSize);\n      ctx.fill();\n    }\n  }\n\n}\n\nexport default PhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/PhysicsEngine.js","\nclass BarnesHutSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.barnesHutTree;\n    this.setOptions(options);\n    this.randomSeed = 5;\n\n    // debug: show grid\n    //this.body.emitter.on(\"afterDrawing\", (ctx) => {this._debug(ctx,'#ff0000')})\n  }\n\n  setOptions(options) {\n    this.options = options;\n    this.thetaInversed = 1 / this.options.theta;\n    this.overlapAvoidanceFactor = 1 - Math.max(0, Math.min(1,this.options.avoidOverlap)); // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius\n  }\n\n  seededRandom() {\n    var x = Math.sin(this.randomSeed++) * 10000;\n    return x - Math.floor(x);\n  }\n\n\n  /**\n   * This function calculates the forces the nodes apply on each other based on a gravitational model.\n   * The Barnes Hut method is used to speed up this N-body simulation.\n   *\n   * @private\n   */\n  solve() {\n    if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) {\n      let node;\n      let nodes = this.body.nodes;\n      let nodeIndices = this.physicsBody.physicsNodeIndices;\n      let nodeCount = nodeIndices.length;\n\n      // create the tree\n      let barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);\n\n      // for debugging\n      this.barnesHutTree = barnesHutTree;\n\n      // place the nodes one by one recursively\n      for (let i = 0; i < nodeCount; i++) {\n        node = nodes[nodeIndices[i]];\n        if (node.options.mass > 0) {\n          // starting with root is irrelevant, it never passes the BarnesHutSolver condition\n          this._getForceContribution(barnesHutTree.root.children.NW, node);\n          this._getForceContribution(barnesHutTree.root.children.NE, node);\n          this._getForceContribution(barnesHutTree.root.children.SW, node);\n          this._getForceContribution(barnesHutTree.root.children.SE, node);\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.\n   * If a region contains a single node, we check if it is not itself, then we apply the force.\n   *\n   * @param parentBranch\n   * @param node\n   * @private\n   */\n  _getForceContribution(parentBranch, node) {\n    // we get no force contribution from an empty region\n    if (parentBranch.childrenCount > 0) {\n      let dx, dy, distance;\n\n      // get the distance from the center of mass to the node.\n      dx = parentBranch.centerOfMass.x - node.x;\n      dy = parentBranch.centerOfMass.y - node.y;\n      distance = Math.sqrt(dx * dx + dy * dy);\n\n      // BarnesHutSolver condition\n      // original condition : s/d < theta = passed  ===  d/s > 1/theta = passed\n      // calcSize = 1/s --> d * 1/s > 1/theta = passed\n      if (distance * parentBranch.calcSize > this.thetaInversed) {\n        this._calculateForces(distance, dx, dy, node, parentBranch);\n      }\n      else {\n        // Did not pass the condition, go into children if available\n        if (parentBranch.childrenCount === 4) {\n          this._getForceContribution(parentBranch.children.NW, node);\n          this._getForceContribution(parentBranch.children.NE, node);\n          this._getForceContribution(parentBranch.children.SW, node);\n          this._getForceContribution(parentBranch.children.SE, node);\n        }\n        else { // parentBranch must have only one node, if it was empty we wouldnt be here\n          if (parentBranch.children.data.id != node.id) { // if it is not self\n            this._calculateForces(distance, dx, dy, node, parentBranch);\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Calculate the forces based on the distance.\n   *\n   * @param distance\n   * @param dx\n   * @param dy\n   * @param node\n   * @param parentBranch\n   * @private\n   */\n  _calculateForces(distance, dx, dy, node, parentBranch) {\n    if (distance === 0) {\n      distance = 0.1;\n      dx = distance;\n    }\n\n    if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n      distance = Math.max(0.1 + (this.overlapAvoidanceFactor * node.shape.radius), distance - node.shape.radius);\n    }\n\n    // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n    // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n    let gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass / Math.pow(distance,3);\n    let fx = dx * gravityForce;\n    let fy = dy * gravityForce;\n\n    this.physicsBody.forces[node.id].x += fx;\n    this.physicsBody.forces[node.id].y += fy;\n  }\n\n\n  /**\n   * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.\n   *\n   * @param nodes\n   * @param nodeIndices\n   * @private\n   */\n  _formBarnesHutTree(nodes, nodeIndices) {\n    let node;\n    let nodeCount = nodeIndices.length;\n\n    let minX = nodes[nodeIndices[0]].x;\n    let minY = nodes[nodeIndices[0]].y;\n    let maxX = nodes[nodeIndices[0]].x;\n    let maxY = nodes[nodeIndices[0]].y;\n\n    // get the range of the nodes\n    for (let i = 1; i < nodeCount; i++) {\n      let x = nodes[nodeIndices[i]].x;\n      let y = nodes[nodeIndices[i]].y;\n      if (nodes[nodeIndices[i]].options.mass > 0) {\n        if (x < minX) {\n          minX = x;\n        }\n        if (x > maxX) {\n          maxX = x;\n        }\n        if (y < minY) {\n          minY = y;\n        }\n        if (y > maxY) {\n          maxY = y;\n        }\n      }\n    }\n    // make the range a square\n    let sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y\n    if (sizeDiff > 0) {\n      minY -= 0.5 * sizeDiff;\n      maxY += 0.5 * sizeDiff;\n    } // xSize > ySize\n    else {\n      minX += 0.5 * sizeDiff;\n      maxX -= 0.5 * sizeDiff;\n    } // xSize < ySize\n\n\n    let minimumTreeSize = 1e-5;\n    let rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));\n    let halfRootSize = 0.5 * rootSize;\n    let centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY);\n\n    // construct the barnesHutTree\n    let barnesHutTree = {\n      root: {\n        centerOfMass: {x: 0, y: 0},\n        mass: 0,\n        range: {\n          minX: centerX - halfRootSize, maxX: centerX + halfRootSize,\n          minY: centerY - halfRootSize, maxY: centerY + halfRootSize\n        },\n        size: rootSize,\n        calcSize: 1 / rootSize,\n        children: {data: null},\n        maxWidth: 0,\n        level: 0,\n        childrenCount: 4\n      }\n    };\n    this._splitBranch(barnesHutTree.root);\n\n    // place the nodes one by one recursively\n    for (let i = 0; i < nodeCount; i++) {\n      node = nodes[nodeIndices[i]];\n      if (node.options.mass > 0) {\n        this._placeInTree(barnesHutTree.root, node);\n      }\n    }\n\n    // make global\n    return barnesHutTree\n  }\n\n\n  /**\n   * this updates the mass of a branch. this is increased by adding a node.\n   *\n   * @param parentBranch\n   * @param node\n   * @private\n   */\n  _updateBranchMass(parentBranch, node) {\n    let totalMass = parentBranch.mass + node.options.mass;\n    let totalMassInv = 1 / totalMass;\n\n    parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass;\n    parentBranch.centerOfMass.x *= totalMassInv;\n\n    parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass;\n    parentBranch.centerOfMass.y *= totalMassInv;\n\n    parentBranch.mass = totalMass;\n    let biggestSize = Math.max(Math.max(node.height, node.radius), node.width);\n    parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth;\n\n  }\n\n\n  /**\n   * determine in which branch the node will be placed.\n   *\n   * @param parentBranch\n   * @param node\n   * @param skipMassUpdate\n   * @private\n   */\n  _placeInTree(parentBranch, node, skipMassUpdate) {\n    if (skipMassUpdate != true || skipMassUpdate === undefined) {\n      // update the mass of the branch.\n      this._updateBranchMass(parentBranch, node);\n    }\n\n    if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW\n      if (parentBranch.children.NW.range.maxY > node.y) { // in NW\n        this._placeInRegion(parentBranch, node, \"NW\");\n      }\n      else { // in SW\n        this._placeInRegion(parentBranch, node, \"SW\");\n      }\n    }\n    else { // in NE or SE\n      if (parentBranch.children.NW.range.maxY > node.y) { // in NE\n        this._placeInRegion(parentBranch, node, \"NE\");\n      }\n      else { // in SE\n        this._placeInRegion(parentBranch, node, \"SE\");\n      }\n    }\n  }\n\n\n  /**\n   * actually place the node in a region (or branch)\n   *\n   * @param parentBranch\n   * @param node\n   * @param region\n   * @private\n   */\n  _placeInRegion(parentBranch, node, region) {\n    switch (parentBranch.children[region].childrenCount) {\n      case 0: // place node here\n        parentBranch.children[region].children.data = node;\n        parentBranch.children[region].childrenCount = 1;\n        this._updateBranchMass(parentBranch.children[region], node);\n        break;\n      case 1: // convert into children\n              // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)\n              // we move one node a little bit and we do not put it in the tree.\n        if (parentBranch.children[region].children.data.x === node.x &&\n          parentBranch.children[region].children.data.y === node.y) {\n          node.x += this.seededRandom();\n          node.y += this.seededRandom();\n        }\n        else {\n          this._splitBranch(parentBranch.children[region]);\n          this._placeInTree(parentBranch.children[region], node);\n        }\n        break;\n      case 4: // place in branch\n        this._placeInTree(parentBranch.children[region], node);\n        break;\n    }\n  }\n\n\n  /**\n   * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch\n   * after the split is complete.\n   *\n   * @param parentBranch\n   * @private\n   */\n  _splitBranch(parentBranch) {\n    // if the branch is shaded with a node, replace the node in the new subset.\n    let containedNode = null;\n    if (parentBranch.childrenCount === 1) {\n      containedNode = parentBranch.children.data;\n      parentBranch.mass = 0;\n      parentBranch.centerOfMass.x = 0;\n      parentBranch.centerOfMass.y = 0;\n    }\n    parentBranch.childrenCount = 4;\n    parentBranch.children.data = null;\n    this._insertRegion(parentBranch, \"NW\");\n    this._insertRegion(parentBranch, \"NE\");\n    this._insertRegion(parentBranch, \"SW\");\n    this._insertRegion(parentBranch, \"SE\");\n\n    if (containedNode != null) {\n      this._placeInTree(parentBranch, containedNode);\n    }\n  }\n\n\n  /**\n   * This function subdivides the region into four new segments.\n   * Specifically, this inserts a single new segment.\n   * It fills the children section of the parentBranch\n   *\n   * @param parentBranch\n   * @param region\n   * @param parentRange\n   * @private\n   */\n  _insertRegion(parentBranch, region) {\n    let minX, maxX, minY, maxY;\n    let childSize = 0.5 * parentBranch.size;\n    switch (region) {\n      case \"NW\":\n        minX = parentBranch.range.minX;\n        maxX = parentBranch.range.minX + childSize;\n        minY = parentBranch.range.minY;\n        maxY = parentBranch.range.minY + childSize;\n        break;\n      case \"NE\":\n        minX = parentBranch.range.minX + childSize;\n        maxX = parentBranch.range.maxX;\n        minY = parentBranch.range.minY;\n        maxY = parentBranch.range.minY + childSize;\n        break;\n      case \"SW\":\n        minX = parentBranch.range.minX;\n        maxX = parentBranch.range.minX + childSize;\n        minY = parentBranch.range.minY + childSize;\n        maxY = parentBranch.range.maxY;\n        break;\n      case \"SE\":\n        minX = parentBranch.range.minX + childSize;\n        maxX = parentBranch.range.maxX;\n        minY = parentBranch.range.minY + childSize;\n        maxY = parentBranch.range.maxY;\n        break;\n    }\n\n\n    parentBranch.children[region] = {\n      centerOfMass: {x: 0, y: 0},\n      mass: 0,\n      range: {minX: minX, maxX: maxX, minY: minY, maxY: maxY},\n      size: 0.5 * parentBranch.size,\n      calcSize: 2 * parentBranch.calcSize,\n      children: {data: null},\n      maxWidth: 0,\n      level: parentBranch.level + 1,\n      childrenCount: 0\n    };\n  }\n\n\n\n\n  //---------------------------  DEBUGGING BELOW  ---------------------------//\n\n\n  /**\n   * This function is for debugging purposed, it draws the tree.\n   *\n   * @param ctx\n   * @param color\n   * @private\n   */\n  _debug(ctx, color) {\n    if (this.barnesHutTree !== undefined) {\n\n      ctx.lineWidth = 1;\n\n      this._drawBranch(this.barnesHutTree.root, ctx, color);\n    }\n  }\n\n\n  /**\n   * This function is for debugging purposes. It draws the branches recursively.\n   *\n   * @param branch\n   * @param ctx\n   * @param color\n   * @private\n   */\n  _drawBranch(branch, ctx, color) {\n    if (color === undefined) {\n      color = \"#FF0000\";\n    }\n\n    if (branch.childrenCount === 4) {\n      this._drawBranch(branch.children.NW, ctx);\n      this._drawBranch(branch.children.NE, ctx);\n      this._drawBranch(branch.children.SE, ctx);\n      this._drawBranch(branch.children.SW, ctx);\n    }\n    ctx.strokeStyle = color;\n    ctx.beginPath();\n    ctx.moveTo(branch.range.minX, branch.range.minY);\n    ctx.lineTo(branch.range.maxX, branch.range.minY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.maxX, branch.range.minY);\n    ctx.lineTo(branch.range.maxX, branch.range.maxY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.maxX, branch.range.maxY);\n    ctx.lineTo(branch.range.minX, branch.range.maxY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.minX, branch.range.maxY);\n    ctx.lineTo(branch.range.minX, branch.range.minY);\n    ctx.stroke();\n\n    /*\n     if (branch.mass > 0) {\n     ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);\n     ctx.stroke();\n     }\n     */\n  }\n}\n\n\nexport default BarnesHutSolver;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/BarnesHutSolver.js","class RepulsionSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n  /**\n   * Calculate the forces the nodes apply on each other based on a repulsion field.\n   * This field is linearly approximated.\n   *\n   * @private\n   */\n  solve() {\n    var dx, dy, distance, fx, fy, repulsingForce, node1, node2;\n\n    var nodes = this.body.nodes;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // repulsing forces between nodes\n    var nodeDistance = this.options.nodeDistance;\n\n    // approximation constants\n    var a = (-2 / 3) / nodeDistance;\n    var b = 4 / 3;\n\n    // we loop from i over all but the last entree in the array\n    // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n    for (let i = 0; i < nodeIndices.length - 1; i++) {\n      node1 = nodes[nodeIndices[i]];\n      for (let j = i + 1; j < nodeIndices.length; j++) {\n        node2 = nodes[nodeIndices[j]];\n\n        dx = node2.x - node1.x;\n        dy = node2.y - node1.y;\n        distance = Math.sqrt(dx * dx + dy * dy);\n\n        // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.\n        if (distance === 0) {\n          distance = 0.1*Math.random();\n          dx = distance;\n        }\n\n        if (distance < 2 * nodeDistance) {\n          if (distance < 0.5 * nodeDistance) {\n            repulsingForce = 1.0;\n          }\n          else {\n            repulsingForce = a * distance + b; // linear approx of  1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))\n          }\n          repulsingForce = repulsingForce / distance;\n\n          fx = dx * repulsingForce;\n          fy = dy * repulsingForce;\n\n          forces[node1.id].x -= fx;\n          forces[node1.id].y -= fy;\n          forces[node2.id].x += fx;\n          forces[node2.id].y += fy;\n        }\n      }\n    }\n  }\n}\n\n\nexport default RepulsionSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/RepulsionSolver.js","class HierarchicalRepulsionSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * Calculate the forces the nodes apply on each other based on a repulsion field.\n   * This field is linearly approximated.\n   *\n   * @private\n   */\n  solve() {\n    var dx, dy, distance, fx, fy, repulsingForce, node1, node2, i, j;\n\n    var nodes = this.body.nodes;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // repulsing forces between nodes\n    var nodeDistance = this.options.nodeDistance;\n\n    // we loop from i over all but the last entree in the array\n    // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n    for (i = 0; i < nodeIndices.length - 1; i++) {\n      node1 = nodes[nodeIndices[i]];\n      for (j = i + 1; j < nodeIndices.length; j++) {\n        node2 = nodes[nodeIndices[j]];\n\n        // nodes only affect nodes on their level\n        if (node1.level === node2.level) {\n          dx = node2.x - node1.x;\n          dy = node2.y - node1.y;\n          distance = Math.sqrt(dx * dx + dy * dy);\n\n          var steepness = 0.05;\n          if (distance < nodeDistance) {\n            repulsingForce = -Math.pow(steepness * distance, 2) + Math.pow(steepness * nodeDistance, 2);\n          }\n          else {\n            repulsingForce = 0;\n          }\n          // normalize force with\n          if (distance === 0) {\n            distance = 0.01;\n          }\n          else {\n            repulsingForce = repulsingForce / distance;\n          }\n          fx = dx * repulsingForce;\n          fy = dy * repulsingForce;\n\n          forces[node1.id].x -= fx;\n          forces[node1.id].y -= fy;\n          forces[node2.id].x += fx;\n          forces[node2.id].y += fy;\n        }\n      }\n    }\n  }\n}\n\n\nexport default HierarchicalRepulsionSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","class SpringSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * This function calculates the springforces on the nodes, accounting for the support nodes.\n   *\n   * @private\n   */\n  solve() {\n    let edgeLength, edge;\n    let edgeIndices = this.physicsBody.physicsEdgeIndices;\n    let edges = this.body.edges;\n    let node1, node2, node3;\n\n    // forces caused by the edges, modelled as springs\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true && edge.toId !== edge.fromId) {\n        // only calculate forces if nodes are in the same sector\n        if (this.body.nodes[edge.toId] !== undefined && this.body.nodes[edge.fromId] !== undefined) {\n          if (edge.edgeType.via !== undefined) {\n            edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;\n            node1 = edge.to;\n            node2 = edge.edgeType.via;\n            node3 = edge.from;\n\n            this._calculateSpringForce(node1, node2, 0.5 * edgeLength);\n            this._calculateSpringForce(node2, node3, 0.5 * edgeLength);\n          }\n          else {\n            // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use\n            // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.\n            edgeLength = edge.options.length === undefined ? this.options.springLength * 1.5: edge.options.length;\n            this._calculateSpringForce(edge.from, edge.to, edgeLength);\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This is the code actually performing the calculation for the function above.\n   *\n   * @param node1\n   * @param node2\n   * @param edgeLength\n   * @private\n   */\n  _calculateSpringForce(node1, node2, edgeLength) {\n    let dx = (node1.x - node2.x);\n    let dy = (node1.y - node2.y);\n    let distance = Math.max(Math.sqrt(dx * dx + dy * dy),0.01);\n\n    // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n    let springForce = this.options.springConstant * (edgeLength - distance) / distance;\n\n    let fx = dx * springForce;\n    let fy = dy * springForce;\n\n    // handle the case where one node is not part of the physcis\n    if (this.physicsBody.forces[node1.id] !== undefined) {\n      this.physicsBody.forces[node1.id].x += fx;\n      this.physicsBody.forces[node1.id].y += fy;\n    }\n\n    if (this.physicsBody.forces[node2.id] !== undefined) {\n      this.physicsBody.forces[node2.id].x -= fx;\n      this.physicsBody.forces[node2.id].y -= fy;\n    }\n  }\n}\n\nexport default SpringSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/SpringSolver.js","class HierarchicalSpringSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * This function calculates the springforces on the nodes, accounting for the support nodes.\n   *\n   * @private\n   */\n  solve() {\n    var edgeLength, edge;\n    var dx, dy, fx, fy, springForce, distance;\n    var edges = this.body.edges;\n    var factor = 0.5;\n\n    var edgeIndices = this.physicsBody.physicsEdgeIndices;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // initialize the spring force counters\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      forces[nodeId].springFx = 0;\n      forces[nodeId].springFy = 0;\n    }\n\n\n    // forces caused by the edges, modelled as springs\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true) {\n        edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;\n\n        dx = (edge.from.x - edge.to.x);\n        dy = (edge.from.y - edge.to.y);\n        distance = Math.sqrt(dx * dx + dy * dy);\n        distance = distance === 0 ? 0.01 : distance;\n\n        // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n        springForce = this.options.springConstant * (edgeLength - distance) / distance;\n\n        fx = dx * springForce;\n        fy = dy * springForce;\n\n        if (edge.to.level != edge.from.level) {\n          if (forces[edge.toId] !== undefined) {\n            forces[edge.toId].springFx -= fx;\n            forces[edge.toId].springFy -= fy;\n          }\n          if (forces[edge.fromId] !== undefined) {\n            forces[edge.fromId].springFx += fx;\n            forces[edge.fromId].springFy += fy;\n          }\n        }\n        else {\n          if (forces[edge.toId] !== undefined) {\n            forces[edge.toId].x -= factor * fx;\n            forces[edge.toId].y -= factor * fy;\n          }\n          if (forces[edge.fromId] !== undefined) {\n            forces[edge.fromId].x += factor * fx;\n            forces[edge.fromId].y += factor * fy;\n          }\n        }\n      }\n    }\n\n    // normalize spring forces\n    var springForce = 1;\n    var springFx, springFy;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      springFx = Math.min(springForce,Math.max(-springForce,forces[nodeId].springFx));\n      springFy = Math.min(springForce,Math.max(-springForce,forces[nodeId].springFy));\n\n      forces[nodeId].x += springFx;\n      forces[nodeId].y += springFy;\n    }\n\n    // retain energy balance\n    var totalFx = 0;\n    var totalFy = 0;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      totalFx += forces[nodeId].x;\n      totalFy += forces[nodeId].y;\n    }\n    var correctionFx = totalFx / nodeIndices.length;\n    var correctionFy = totalFy / nodeIndices.length;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      forces[nodeId].x -= correctionFx;\n      forces[nodeId].y -= correctionFy;\n    }\n  }\n\n}\n\nexport default HierarchicalSpringSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/HierarchicalSpringSolver.js","class CentralGravitySolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  solve() {\n    let dx, dy, distance, node;\n    let nodes = this.body.nodes;\n    let nodeIndices = this.physicsBody.physicsNodeIndices;\n    let forces = this.physicsBody.forces;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      node = nodes[nodeId];\n      dx = -node.x;\n      dy = -node.y;\n      distance = Math.sqrt(dx * dx + dy * dy);\n\n      this._calculateForces(distance, dx, dy, forces, node);\n    }\n  }\n\n  /**\n   * Calculate the forces based on the distance.\n   * @private\n   */\n  _calculateForces(distance, dx, dy, forces, node) {\n    let gravityForce = (distance === 0) ? 0 : (this.options.centralGravity / distance);\n    forces[node.id].x = dx * gravityForce;\n    forces[node.id].y = dy * gravityForce;\n  }\n}\n\n\nexport default CentralGravitySolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/CentralGravitySolver.js","import BarnesHutSolver from \"./BarnesHutSolver\"\n\nclass ForceAtlas2BasedRepulsionSolver extends BarnesHutSolver {\n  constructor(body, physicsBody, options) {\n    super(body, physicsBody, options);\n  }\n\n  /**\n   * Calculate the forces based on the distance.\n   *\n   * @param distance\n   * @param dx\n   * @param dy\n   * @param node\n   * @param parentBranch\n   * @private\n   */\n  _calculateForces(distance, dx, dy, node, parentBranch) {\n    if (distance === 0) {\n      distance = 0.1 * Math.random();\n      dx = distance;\n    }\n\n    if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n      distance = Math.max(0.1 + (this.overlapAvoidanceFactor * node.shape.radius), distance - node.shape.radius);\n    }\n\n    let degree = (node.edges.length + 1);\n    // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n    // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n    let gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass * degree / Math.pow(distance,2);\n    let fx = dx * gravityForce;\n    let fy = dy * gravityForce;\n\n    this.physicsBody.forces[node.id].x += fx;\n    this.physicsBody.forces[node.id].y += fy;\n  }\n}\n\nexport default ForceAtlas2BasedRepulsionSolver;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","import CentralGravitySolver from \"./CentralGravitySolver\"\n\nclass ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {\n  constructor(body, physicsBody, options) {\n    super(body, physicsBody, options);\n  }\n\n\n  /**\n   * Calculate the forces based on the distance.\n   * @private\n   */\n  _calculateForces(distance, dx, dy, forces, node) {\n    if (distance > 0) {\n      let degree = (node.edges.length + 1);\n      let gravityForce = this.options.centralGravity * degree * node.options.mass;\n      forces[node.id].x = dx * gravityForce;\n      forces[node.id].y = dy * gravityForce;\n    }\n  }\n}\n\nexport default ForceAtlas2BasedCentralGravitySolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","let util = require(\"../../util\");\nimport NetworkUtil from '../NetworkUtil';\nimport Cluster from './components/nodes/Cluster'\n\nclass ClusterEngine {\n  constructor(body) {\n    this.body = body;\n    this.clusteredNodes = {};\n    this.clusteredEdges = {};\n\n    this.options = {};\n    this.defaultOptions = {};\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on('_resetData', () => {this.clusteredNodes = {}; this.clusteredEdges = {};})\n  }\n\n  /**\n  *\n  * @param hubsize\n  * @param options\n  */\n  clusterByHubsize(hubsize, options) {\n    if (hubsize === undefined) {\n      hubsize = this._getHubSize();\n    }\n    else if (typeof(hubsize) === \"object\") {\n      options = this._checkOptions(hubsize);\n      hubsize = this._getHubSize();\n    }\n\n    let nodesToCluster = [];\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let node = this.body.nodes[this.body.nodeIndices[i]];\n      if (node.edges.length >= hubsize) {\n        nodesToCluster.push(node.id);\n      }\n    }\n\n    for (let i = 0; i < nodesToCluster.length; i++) {\n      this.clusterByConnection(nodesToCluster[i],options,true);\n    }\n\n    this.body.emitter.emit('_dataChanged');\n  }\n\n\n  /**\n  * loop over all nodes, check if they adhere to the condition and cluster if needed.\n  * @param options\n  * @param refreshData\n  */\n  cluster(options = {}, refreshData = true) {\n    if (options.joinCondition === undefined) {throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");}\n\n    // check if the options object is fine, append if needed\n    options = this._checkOptions(options);\n\n    let childNodesObj = {};\n    let childEdgesObj = {};\n\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let nodeId = this.body.nodeIndices[i];\n      let node = this.body.nodes[nodeId];\n      let clonedOptions = NetworkUtil.cloneOptions(node);\n      if (options.joinCondition(clonedOptions) === true) {\n        childNodesObj[nodeId] = this.body.nodes[nodeId];\n\n        // collect the nodes that will be in the cluster\n        for (let i = 0; i < node.edges.length; i++) {\n          let edge = node.edges[i];\n          if (this.clusteredEdges[edge.id] === undefined) {\n            childEdgesObj[edge.id] = edge;\n          }\n        }\n      }\n    }\n\n    this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n  }\n\n\n  /**\n   * Cluster all nodes in the network that have only X edges\n   * @param edgeCount\n   * @param options\n   * @param refreshData\n   */\n  clusterByEdgeCount(edgeCount, options, refreshData = true) {\n    options = this._checkOptions(options);\n    let clusters = [];\n    let usedNodes = {};\n    let edge, edges, node, nodeId, relevantEdgeCount;\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let childNodesObj = {};\n      let childEdgesObj = {};\n      nodeId = this.body.nodeIndices[i];\n\n      // if this node is already used in another cluster this session, we do not have to re-evaluate it.\n      if (usedNodes[nodeId] === undefined) {\n        relevantEdgeCount = 0;\n        node = this.body.nodes[nodeId];\n        edges = [];\n        for (let j = 0; j < node.edges.length; j++) {\n          edge = node.edges[j];\n          if (this.clusteredEdges[edge.id] === undefined) {\n            if (edge.toId !== edge.fromId) {\n              relevantEdgeCount++;\n            }\n            edges.push(edge);\n          }\n        }\n\n        // this node qualifies, we collect its neighbours to start the clustering process.\n        if (relevantEdgeCount === edgeCount) {\n          let gatheringSuccessful = true;\n          for (let j = 0; j < edges.length; j++) {\n            edge = edges[j];\n            let childNodeId = this._getConnectedId(edge, nodeId);\n            // add the nodes to the list by the join condition.\n            if (options.joinCondition === undefined) {\n              childEdgesObj[edge.id] = edge;\n              childNodesObj[nodeId] = this.body.nodes[nodeId];\n              childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n              usedNodes[nodeId] = true;\n            }\n            else {\n              let clonedOptions = NetworkUtil.cloneOptions(this.body.nodes[nodeId]);\n              if (options.joinCondition(clonedOptions) === true) {\n                childEdgesObj[edge.id] = edge;\n                childNodesObj[nodeId] = this.body.nodes[nodeId];\n                usedNodes[nodeId] = true;\n              }\n              else {\n                // this node does not qualify after all.\n                gatheringSuccessful = false;\n                break;\n              }\n            }\n          }\n\n          // add to the cluster queue\n          if (Object.keys(childNodesObj).length > 0 && Object.keys(childEdgesObj).length > 0 && gatheringSuccessful === true) {\n            clusters.push({nodes: childNodesObj, edges: childEdgesObj})\n          }\n        }\n      }\n    }\n\n    for (let i = 0; i < clusters.length; i++) {\n      this._cluster(clusters[i].nodes, clusters[i].edges, options, false)\n    }\n\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  /**\n  * Cluster all nodes in the network that have only 1 edge\n  * @param options\n  * @param refreshData\n  */\n  clusterOutliers(options, refreshData = true) {\n    this.clusterByEdgeCount(1,options,refreshData);\n  }\n\n  /**\n   * Cluster all nodes in the network that have only 2 edge\n   * @param options\n   * @param refreshData\n   */\n  clusterBridges(options, refreshData = true) {\n    this.clusterByEdgeCount(2,options,refreshData);\n  }\n\n\n\n  /**\n  * suck all connected nodes of a node into the node.\n  * @param nodeId\n  * @param options\n  * @param refreshData\n  */\n  clusterByConnection(nodeId, options, refreshData = true) {\n    // kill conditions\n    if (nodeId === undefined)             {throw new Error(\"No nodeId supplied to clusterByConnection!\");}\n    if (this.body.nodes[nodeId] === undefined) {throw new Error(\"The nodeId given to clusterByConnection does not exist!\");}\n\n    let node = this.body.nodes[nodeId];\n    options = this._checkOptions(options, node);\n    if (options.clusterNodeProperties.x === undefined) {options.clusterNodeProperties.x = node.x;}\n    if (options.clusterNodeProperties.y === undefined) {options.clusterNodeProperties.y = node.y;}\n    if (options.clusterNodeProperties.fixed === undefined) {\n      options.clusterNodeProperties.fixed = {};\n      options.clusterNodeProperties.fixed.x = node.options.fixed.x;\n      options.clusterNodeProperties.fixed.y = node.options.fixed.y;\n    }\n\n\n    let childNodesObj = {};\n    let childEdgesObj = {};\n    let parentNodeId = node.id;\n    let parentClonedOptions = NetworkUtil.cloneOptions(node);\n    childNodesObj[parentNodeId] = node;\n\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      if (this.clusteredEdges[edge.id] === undefined) {\n        let childNodeId = this._getConnectedId(edge, parentNodeId);\n\n        // if the child node is not in a cluster\n        if (this.clusteredNodes[childNodeId] === undefined) {\n          if (childNodeId !== parentNodeId) {\n            if (options.joinCondition === undefined) {\n              childEdgesObj[edge.id] = edge;\n              childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n            }\n            else {\n              // clone the options and insert some additional parameters that could be interesting.\n              let childClonedOptions = NetworkUtil.cloneOptions(this.body.nodes[childNodeId]);\n              if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) {\n                childEdgesObj[edge.id] = edge;\n                childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n              }\n            }\n          }\n          else {\n            // swallow the edge if it is self-referencing.\n            childEdgesObj[edge.id] = edge;\n          }\n        }\n      }\n    }\n    var childNodeIDs = Object.keys(childNodesObj).map(function(childNode){\n      return childNodesObj[childNode].id;\n    })\n\n    for (childNode in childNodesObj) {\n      var childNode = childNodesObj[childNode];\n      for (var y=0; y < childNode.edges.length; y++){\n        var childEdge = childNode.edges[y];\n        if (childNodeIDs.indexOf(this._getConnectedId(childEdge,childNode.id)) > -1){\n          childEdgesObj[childEdge.id] = childEdge;\n        }\n      }\n    }\n    this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n  }\n\n\n  /**\n  * This function creates the edges that will be attached to the cluster\n  * It looks for edges that are connected to the nodes from the \"outside' of the cluster.\n  *\n  * @param childNodesObj\n  * @param childEdgesObj\n  * @param clusterNodeProperties\n  * @param clusterEdgeProperties\n  * @private\n  */\n  _createClusterEdges (childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) {\n    let edge, childNodeId, childNode, toId, fromId, otherNodeId;\n\n    // loop over all child nodes and their edges to find edges going out of the cluster\n    // these edges will be replaced by clusterEdges.\n    let childKeys = Object.keys(childNodesObj);\n    let createEdges = [];\n    for (let i = 0; i < childKeys.length; i++) {\n      childNodeId = childKeys[i];\n      childNode = childNodesObj[childNodeId];\n\n      // construct new edges from the cluster to others\n      for (let j = 0; j < childNode.edges.length; j++) {\n        edge = childNode.edges[j];\n        // we only handle edges that are visible to the system, not the disabled ones from the clustering process.\n        if (this.clusteredEdges[edge.id] === undefined) {\n          // self-referencing edges will be added to the \"hidden\" list\n          if (edge.toId == edge.fromId) {\n            childEdgesObj[edge.id] = edge;\n          }\n          else {\n            // set up the from and to.\n            if (edge.toId == childNodeId) { // this is a double equals because ints and strings can be interchanged here.\n              toId = clusterNodeProperties.id;\n              fromId = edge.fromId;\n              otherNodeId = fromId;\n            }\n            else {\n              toId = edge.toId;\n              fromId = clusterNodeProperties.id;\n              otherNodeId = toId;\n            }\n          }\n\n          // Only edges from the cluster outwards are being replaced.\n          if (childNodesObj[otherNodeId] === undefined) {\n            createEdges.push({edge: edge, fromId: fromId, toId: toId});\n          }\n        }\n      }\n    }\n\n    // here we actually create the replacement edges. We could not do this in the loop above as the creation process\n    // would add an edge to the edges array we are iterating over.\n    for (let j = 0; j < createEdges.length; j++) {\n      let edge = createEdges[j].edge;\n      // copy the options of the edge we will replace\n      let clonedOptions = NetworkUtil.cloneOptions(edge, 'edge');\n      // make sure the properties of clusterEdges are superimposed on it\n      util.deepExtend(clonedOptions, clusterEdgeProperties);\n\n      // set up the edge\n      clonedOptions.from = createEdges[j].fromId;\n      clonedOptions.to = createEdges[j].toId;\n      clonedOptions.id = 'clusterEdge:' + util.randomUUID();\n      //clonedOptions.id = '(cf: ' + createEdges[j].fromId + \" to: \" + createEdges[j].toId + \")\" + Math.random();\n\n      // create the edge and give a reference to the one it replaced.\n      let newEdge = this.body.functions.createEdge(clonedOptions);\n      newEdge.clusteringEdgeReplacingId = edge.id;\n\n      // also reference the new edge in the old edge\n      this.body.edges[edge.id].edgeReplacedById = newEdge.id;\n\n      // connect the edge.\n      this.body.edges[newEdge.id] = newEdge;\n      newEdge.connect();\n\n      // hide the replaced edge\n      this._backupEdgeOptions(edge);\n      edge.setOptions({physics:false, hidden:true});\n    }\n\n  }\n\n  /**\n  * This function checks the options that can be supplied to the different cluster functions\n  * for certain fields and inserts defaults if needed\n  * @param options\n  * @returns {*}\n  * @private\n  */\n  _checkOptions(options = {}) {\n    if (options.clusterEdgeProperties === undefined)    {options.clusterEdgeProperties = {};}\n    if (options.clusterNodeProperties === undefined)    {options.clusterNodeProperties = {};}\n\n    return options;\n  }\n\n  /**\n  *\n  * @param {Object}    childNodesObj         | object with node objects, id as keys, same as childNodes except it also contains a source node\n  * @param {Object}    childEdgesObj         | object with edge objects, id as keys\n  * @param {Array}     options               | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}\n  * @param {Boolean}   refreshData | when true, do not wrap up\n  * @private\n  */\n  _cluster(childNodesObj, childEdgesObj, options, refreshData = true) {\n    // kill condition: no nodes don't bother\n    if (Object.keys(childNodesObj).length == 0) {return;}\n\n    // allow clusters of 1 if options allow\n    if (Object.keys(childNodesObj).length == 1 && options.clusterNodeProperties.allowSingleNodeCluster != true) {return;}\n\n    // check if this cluster call is not trying to cluster anything that is in another cluster.\n    for (let nodeId in childNodesObj) {\n      if (childNodesObj.hasOwnProperty(nodeId)) {\n        if (this.clusteredNodes[nodeId] !== undefined) {\n          return;\n        }\n      }\n    }\n\n    let clusterNodeProperties = util.deepExtend({},options.clusterNodeProperties);\n\n    // construct the clusterNodeProperties\n    if (options.processProperties !== undefined) {\n      // get the childNode options\n      let childNodesOptions = [];\n      for (let nodeId in childNodesObj) {\n        if (childNodesObj.hasOwnProperty(nodeId)) {\n          let clonedOptions = NetworkUtil.cloneOptions(childNodesObj[nodeId]);\n          childNodesOptions.push(clonedOptions);\n        }\n      }\n\n      // get cluster properties based on childNodes\n      let childEdgesOptions = [];\n      for (let edgeId in childEdgesObj) {\n        if (childEdgesObj.hasOwnProperty(edgeId)) {\n          // these cluster edges will be removed on creation of the cluster.\n          if (edgeId.substr(0, 12) !== \"clusterEdge:\") {\n            let clonedOptions = NetworkUtil.cloneOptions(childEdgesObj[edgeId], 'edge');\n            childEdgesOptions.push(clonedOptions);\n          }\n        }\n      }\n\n      clusterNodeProperties = options.processProperties(clusterNodeProperties, childNodesOptions, childEdgesOptions);\n      if (!clusterNodeProperties) {\n        throw new Error(\"The processProperties function does not return properties!\");\n      }\n    }\n\n    // check if we have an unique id;\n    if (clusterNodeProperties.id === undefined) {clusterNodeProperties.id = 'cluster:' + util.randomUUID();}\n    let clusterId = clusterNodeProperties.id;\n\n    if (clusterNodeProperties.label === undefined) {\n      clusterNodeProperties.label = 'cluster';\n    }\n\n\n    // give the clusterNode a position if it does not have one.\n    let pos = undefined;\n    if (clusterNodeProperties.x === undefined) {\n      pos = this._getClusterPosition(childNodesObj);\n      clusterNodeProperties.x = pos.x;\n    }\n    if (clusterNodeProperties.y === undefined) {\n      if (pos === undefined) {pos = this._getClusterPosition(childNodesObj);}\n      clusterNodeProperties.y = pos.y;\n    }\n\n    // force the ID to remain the same\n    clusterNodeProperties.id = clusterId;\n\n    // create the clusterNode\n    let clusterNode = this.body.functions.createNode(clusterNodeProperties, Cluster);\n    clusterNode.isCluster = true;\n    clusterNode.containedNodes = childNodesObj;\n    clusterNode.containedEdges = childEdgesObj;\n    // cache a copy from the cluster edge properties if we have to reconnect others later on\n    clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;\n\n    // finally put the cluster node into global\n    this.body.nodes[clusterNodeProperties.id] = clusterNode;\n\n    // create the new edges that will connect to the cluster, all self-referencing edges will be added to childEdgesObject here.\n    this._createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties);\n\n    // disable the childEdges\n    for (let edgeId in childEdgesObj) {\n      if (childEdgesObj.hasOwnProperty(edgeId)) {\n        if (this.body.edges[edgeId] !== undefined) {\n          let edge = this.body.edges[edgeId];\n          // cache the options before changing\n          this._backupEdgeOptions(edge);\n          // disable physics and hide the edge\n          edge.setOptions({physics:false, hidden:true});\n        }\n      }\n    }\n\n    // disable the childNodes\n    for (let nodeId in childNodesObj) {\n      if (childNodesObj.hasOwnProperty(nodeId)) {\n        this.clusteredNodes[nodeId] = {clusterId:clusterNodeProperties.id, node: this.body.nodes[nodeId]};\n        this.body.nodes[nodeId].setOptions({hidden:true, physics:false});\n      }\n    }\n\n    // set ID to undefined so no duplicates arise\n    clusterNodeProperties.id = undefined;\n\n    // wrap up\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  _backupEdgeOptions(edge) {\n    if (this.clusteredEdges[edge.id] === undefined) {\n      this.clusteredEdges[edge.id] = {physics: edge.options.physics, hidden: edge.options.hidden};\n    }\n  }\n\n  _restoreEdge(edge) {\n    let originalOptions = this.clusteredEdges[edge.id];\n    if (originalOptions !== undefined) {\n      edge.setOptions({physics: originalOptions.physics, hidden: originalOptions.hidden});\n      delete this.clusteredEdges[edge.id];\n    }\n  }\n\n\n  /**\n  * Check if a node is a cluster.\n  * @param nodeId\n  * @returns {*}\n  */\n  isCluster(nodeId) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      return this.body.nodes[nodeId].isCluster === true;\n    }\n    else {\n      console.log(\"Node does not exist.\");\n      return false;\n    }\n  }\n\n  /**\n  * get the position of the cluster node based on what's inside\n  * @param {object} childNodesObj    | object with node objects, id as keys\n  * @returns {{x: number, y: number}}\n  * @private\n  */\n  _getClusterPosition(childNodesObj) {\n    let childKeys = Object.keys(childNodesObj);\n    let minX = childNodesObj[childKeys[0]].x;\n    let maxX = childNodesObj[childKeys[0]].x;\n    let minY = childNodesObj[childKeys[0]].y;\n    let maxY = childNodesObj[childKeys[0]].y;\n    let node;\n    for (let i = 1; i < childKeys.length; i++) {\n      node = childNodesObj[childKeys[i]];\n      minX = node.x < minX ? node.x : minX;\n      maxX = node.x > maxX ? node.x : maxX;\n      minY = node.y < minY ? node.y : minY;\n      maxY = node.y > maxY ? node.y : maxY;\n    }\n\n\n    return {x: 0.5*(minX + maxX), y: 0.5*(minY + maxY)};\n  }\n\n\n\n  /**\n  * Open a cluster by calling this function.\n  * @param {String}  clusterNodeId | the ID of the cluster node\n  * @param {Boolean} refreshData | wrap up afterwards if not true\n  */\n  openCluster(clusterNodeId, options, refreshData = true) {\n    // kill conditions\n    if (clusterNodeId === undefined)                    {throw new Error(\"No clusterNodeId supplied to openCluster.\");}\n    if (this.body.nodes[clusterNodeId] === undefined)   {throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");}\n    if (this.body.nodes[clusterNodeId].containedNodes === undefined) {\n      console.log(\"The node:\" + clusterNodeId + \" is not a cluster.\");\n      return\n    }\n    let clusterNode = this.body.nodes[clusterNodeId];\n    let containedNodes = clusterNode.containedNodes;\n    let containedEdges = clusterNode.containedEdges;\n\n    // allow the user to position the nodes after release.\n    if (options !== undefined && options.releaseFunction !== undefined && typeof options.releaseFunction === 'function') {\n      let positions = {};\n      let clusterPosition = {x:clusterNode.x, y:clusterNode.y};\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          positions[nodeId] = {x: containedNode.x, y: containedNode.y};\n        }\n      }\n      let newPositions = options.releaseFunction(clusterPosition, positions);\n\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          if (newPositions[nodeId] !== undefined) {\n            containedNode.x = (newPositions[nodeId].x === undefined ? clusterNode.x : newPositions[nodeId].x);\n            containedNode.y = (newPositions[nodeId].y === undefined ? clusterNode.y : newPositions[nodeId].y);\n          }\n        }\n      }\n    }\n    else {\n      // copy the position from the cluster\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          containedNode = containedNodes[nodeId];\n          // inherit position\n          if (containedNode.options.fixed.x === false) {containedNode.x = clusterNode.x;}\n          if (containedNode.options.fixed.y === false) {containedNode.y = clusterNode.y;}\n        }\n      }\n    }\n\n    // release nodes\n    for (let nodeId in containedNodes) {\n      if (containedNodes.hasOwnProperty(nodeId)) {\n        let containedNode = this.body.nodes[nodeId];\n\n        // inherit speed\n        containedNode.vx = clusterNode.vx;\n        containedNode.vy = clusterNode.vy;\n\n        // we use these methods to avoid re-instantiating the shape, which happens with setOptions.\n        containedNode.setOptions({hidden:false, physics:true});\n\n        delete this.clusteredNodes[nodeId];\n      }\n    }\n\n    // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.\n    let edgesToBeDeleted = [];\n    for (let i = 0; i < clusterNode.edges.length; i++) {\n      edgesToBeDeleted.push(clusterNode.edges[i]);\n    }\n\n    // actually handling the deleting.\n    for (let i = 0; i < edgesToBeDeleted.length; i++) {\n      let edge = edgesToBeDeleted[i];\n\n      let otherNodeId = this._getConnectedId(edge, clusterNodeId);\n      // if the other node is in another cluster, we transfer ownership of this edge to the other cluster\n      if (this.clusteredNodes[otherNodeId] !== undefined) {\n        // transfer ownership:\n        let otherCluster = this.body.nodes[this.clusteredNodes[otherNodeId].clusterId];\n        let transferEdge = this.body.edges[edge.clusteringEdgeReplacingId];\n        if (transferEdge !== undefined) {\n          otherCluster.containedEdges[transferEdge.id] = transferEdge;\n\n          // delete local reference\n          delete containedEdges[transferEdge.id];\n\n          // create new cluster edge from the otherCluster:\n          // get to and from\n          let fromId = transferEdge.fromId;\n          let toId = transferEdge.toId;\n          if (transferEdge.toId == otherNodeId) {\n            toId = this.clusteredNodes[otherNodeId].clusterId;\n          }\n          else {\n            fromId = this.clusteredNodes[otherNodeId].clusterId;\n          }\n\n          // clone the options and apply the cluster options to them\n          let clonedOptions = NetworkUtil.cloneOptions(transferEdge, 'edge');\n          util.deepExtend(clonedOptions, otherCluster.clusterEdgeProperties);\n\n          // apply the edge specific options to it.\n          let id = 'clusterEdge:' + util.randomUUID();\n          util.deepExtend(clonedOptions, {from: fromId, to: toId, hidden: false, physics: true, id: id});\n\n          // create it\n          let newEdge = this.body.functions.createEdge(clonedOptions);\n          newEdge.clusteringEdgeReplacingId = transferEdge.id;\n          this.body.edges[id] = newEdge;\n          this.body.edges[id].connect();\n        }\n      }\n      else {\n        let replacedEdge = this.body.edges[edge.clusteringEdgeReplacingId];\n        if (replacedEdge !== undefined) {\n          this._restoreEdge(replacedEdge);\n        }\n      }\n      edge.cleanup();\n      // this removes the edge from node.edges, which is why edgeIds is formed\n      edge.disconnect();\n      delete this.body.edges[edge.id];\n    }\n\n    // handle the releasing of the edges\n    for (let edgeId in containedEdges) {\n      if (containedEdges.hasOwnProperty(edgeId)) {\n        this._restoreEdge(containedEdges[edgeId]);\n      }\n    }\n\n    // remove clusterNode\n    delete this.body.nodes[clusterNodeId];\n\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  getNodesInCluster(clusterId) {\n    let nodesArray = [];\n    if (this.isCluster(clusterId) === true) {\n      let containedNodes = this.body.nodes[clusterId].containedNodes;\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          nodesArray.push(this.body.nodes[nodeId].id)\n        }\n      }\n    }\n\n    return nodesArray;\n  }\n\n  /**\n  * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node\n  * @param nodeId\n  * @returns {Array}\n  */\n  findNode(nodeId) {\n    let stack = [];\n    let max = 100;\n    let counter = 0;\n\n    while (this.clusteredNodes[nodeId] !== undefined && counter < max) {\n      stack.push(this.body.nodes[nodeId].id);\n      nodeId = this.clusteredNodes[nodeId].clusterId;\n      counter++;\n    }\n    stack.push(this.body.nodes[nodeId].id);\n    stack.reverse();\n\n    return stack;\n  }\n\n  /**\n  * Using a clustered nodeId, update with the new options\n  * @param clusteredNodeId\n  * @param {object} newOptions\n  */\n  updateClusteredNode(clusteredNodeId, newOptions) {\n    if (clusteredNodeId === undefined) {throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");}\n    if (newOptions === undefined) {throw new Error(\"No newOptions supplied to updateClusteredNode.\");}\n    if (this.body.nodes[clusteredNodeId] === undefined)   {throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");}\n\n    this.body.nodes[clusteredNodeId].setOptions(newOptions);\n    this.body.emitter.emit('_dataChanged');\n  }\n\n  /**\n  * Using a base edgeId, update all related clustered edges with the new options\n  * @param startEdgeId\n  * @param {object} newOptions\n  */\n  updateEdge(startEdgeId, newOptions) {\n    if (startEdgeId === undefined) {throw new Error(\"No startEdgeId supplied to updateEdge.\");}\n    if (newOptions === undefined) {throw new Error(\"No newOptions supplied to updateEdge.\");}\n    if (this.body.edges[startEdgeId] === undefined)   {throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");}\n\n    let allEdgeIds = this.getClusteredEdges(startEdgeId);\n    for (let i = 0; i < allEdgeIds.length; i++) {\n      var edge = this.body.edges[allEdgeIds[i]];\n      edge.setOptions(newOptions);\n    }\n    this.body.emitter.emit('_dataChanged');\n  }\n\n  /**\n  * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)\n  * @param edgeId\n  * @returns {Array}\n  */\n  getClusteredEdges(edgeId) {\n    let stack = [];\n    let max = 100;\n    let counter = 0;\n\n    while (edgeId !== undefined && this.body.edges[edgeId] !== undefined && counter < max) {\n      stack.push(this.body.edges[edgeId].id);\n      edgeId = this.body.edges[edgeId].edgeReplacedById;\n      counter++;\n    }\n    stack.reverse();\n    return stack;\n  }\n\n  /**\n  * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge\n  * @param clusteredEdgeId\n  * @returns baseEdgeId\n  */\n  getBaseEdge(clusteredEdgeId) {\n    let baseEdgeId = clusteredEdgeId;\n    let max = 100;\n    let counter = 0;\n\n    while (clusteredEdgeId !== undefined && this.body.edges[clusteredEdgeId] !== undefined && counter < max) {\n      clusteredEdgeId = this.body.edges[clusteredEdgeId].clusteringEdgeReplacingId;\n      counter++;\n      if (clusteredEdgeId !== undefined) {\n        baseEdgeId = clusteredEdgeId;\n      }\n    }\n    return baseEdgeId;\n  }\n\n  /**\n  * Get the Id the node is connected to\n  * @param edge\n  * @param nodeId\n  * @returns {*}\n  * @private\n  */\n  _getConnectedId(edge, nodeId) {\n    if (edge.toId != nodeId) {\n      return edge.toId;\n    }\n    else if (edge.fromId != nodeId) {\n      return edge.fromId;\n    }\n    else {\n      return edge.fromId;\n    }\n  }\n\n  /**\n  * We determine how many connections denote an important hub.\n  * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)\n  *\n  * @private\n  */\n  _getHubSize() {\n    let average = 0;\n    let averageSquared = 0;\n    let hubCounter = 0;\n    let largestHub = 0;\n\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let node = this.body.nodes[this.body.nodeIndices[i]];\n      if (node.edges.length > largestHub) {\n        largestHub = node.edges.length;\n      }\n      average += node.edges.length;\n      averageSquared += Math.pow(node.edges.length,2);\n      hubCounter += 1;\n    }\n    average = average / hubCounter;\n    averageSquared = averageSquared / hubCounter;\n\n    let variance = averageSquared - Math.pow(average,2);\n    let standardDeviation = Math.sqrt(variance);\n\n    let hubThreshold = Math.floor(average + 2*standardDeviation);\n\n    // always have at least one to cluster\n    if (hubThreshold > largestHub) {\n      hubThreshold = largestHub;\n    }\n\n    return hubThreshold;\n  };\n\n}\n\n\nexport default ClusterEngine;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Clustering.js","let util = require(\"../util\");\nclass NetworkUtil {\n  constructor() {}\n\n  /**\n   * Find the center position of the network considering the bounding boxes\n   */\n  static getRange(allNodes, specificNodes = []) {\n    var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;\n    if (specificNodes.length > 0) {\n      for (var i = 0; i < specificNodes.length; i++) {\n        node = allNodes[specificNodes[i]];\n        if (minX > node.shape.boundingBox.left) {\n          minX = node.shape.boundingBox.left;\n        }\n        if (maxX < node.shape.boundingBox.right) {\n          maxX = node.shape.boundingBox.right;\n        }\n        if (minY > node.shape.boundingBox.top) {\n          minY = node.shape.boundingBox.top;\n        } // top is negative, bottom is positive\n        if (maxY < node.shape.boundingBox.bottom) {\n          maxY = node.shape.boundingBox.bottom;\n        } // top is negative, bottom is positive\n      }\n    }\n\n    if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n      minY = 0, maxY = 0, minX = 0, maxX = 0;\n    }\n    return {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n  }\n\n  /**\n   * Find the center position of the network\n   */\n  static getRangeCore(allNodes, specificNodes = []) {\n    var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;\n    if (specificNodes.length > 0) {\n      for (var i = 0; i < specificNodes.length; i++) {\n        node = allNodes[specificNodes[i]];\n        if (minX > node.x) {\n          minX = node.x;\n        }\n        if (maxX < node.x) {\n          maxX = node.x;\n        }\n        if (minY > node.y) {\n          minY = node.y;\n        } // top is negative, bottom is positive\n        if (maxY < node.y) {\n          maxY = node.y;\n        } // top is negative, bottom is positive\n      }\n    }\n\n    if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n      minY = 0, maxY = 0, minX = 0, maxX = 0;\n    }\n    return {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n  }\n\n\n  /**\n   * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n   * @returns {{x: number, y: number}}\n   */\n  static findCenter(range) {\n    return {x: (0.5 * (range.maxX + range.minX)),\n      y: (0.5 * (range.maxY + range.minY))};\n  }\n\n\n  /**\n   * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.\n   * @param item\n   * @param type\n   * @returns {{}}\n   */\n  static cloneOptions(item, type) {\n    let clonedOptions = {};\n    if (type === undefined || type === 'node') {\n      util.deepExtend(clonedOptions, item.options, true);\n      clonedOptions.x = item.x;\n      clonedOptions.y = item.y;\n      clonedOptions.amountOfConnections = item.edges.length;\n    }\n    else {\n      util.deepExtend(clonedOptions, item.options, true);\n    }\n    return clonedOptions;\n  }\n\n}\n\nexport default NetworkUtil;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/NetworkUtil.js","import Node from '../Node'\n\n/**\n *\n */\nclass Cluster extends Node {\n  constructor(options, body, imagelist, grouplist, globalOptions) {\n    super(options, body, imagelist, grouplist, globalOptions);\n\n    this.isCluster = true;\n    this.containedNodes = {};\n    this.containedEdges = {};\n  }\n}\n\nexport default Cluster;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/Cluster.js","if (typeof window !== 'undefined') {\n  window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||\n  window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n}\n\nlet util = require('../../util');\n\n\nclass CanvasRenderer {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.redrawRequested = false;\n    this.renderTimer = undefined;\n    this.requiresTimeout = true;\n    this.renderingActive = false;\n    this.renderRequests = 0;\n    this.pixelRatio = undefined;\n    this.allowRedraw = true;\n\n    this.dragging = false;\n    this.options = {};\n    this.defaultOptions = {\n      hideEdgesOnDrag: false,\n      hideNodesOnDrag: false\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this._determineBrowserMethod();\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on(\"dragStart\", () => { this.dragging = true; });\n    this.body.emitter.on(\"dragEnd\", () => { this.dragging = false; });\n    this.body.emitter.on(\"_resizeNodes\", () => { this._resizeNodes(); });\n    this.body.emitter.on(\"_redraw\", () => {\n      if (this.renderingActive === false) {\n        this._redraw();\n      }\n    });\n    this.body.emitter.on(\"_blockRedraw\", () => {this.allowRedraw = false;});\n    this.body.emitter.on(\"_allowRedraw\", () => {this.allowRedraw = true; this.redrawRequested = false;});\n    this.body.emitter.on(\"_requestRedraw\", this._requestRedraw.bind(this));\n    this.body.emitter.on(\"_startRendering\", () => {\n      this.renderRequests += 1;\n      this.renderingActive = true;\n      this._startRendering();\n    });\n    this.body.emitter.on(\"_stopRendering\", () => {\n      this.renderRequests -= 1;\n      this.renderingActive = this.renderRequests > 0;\n      this.renderTimer = undefined;\n    });\n    this.body.emitter.on('destroy',  () => {\n      this.renderRequests = 0;\n      this.allowRedraw = false;\n      this.renderingActive = false;\n      if (this.requiresTimeout === true) {\n        clearTimeout(this.renderTimer);\n      }\n      else {\n        cancelAnimationFrame(this.renderTimer);\n      }\n      this.body.emitter.off();\n    });\n\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['hideEdgesOnDrag','hideNodesOnDrag'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n  }\n\n  _startRendering() {\n    if (this.renderingActive === true) {\n      if (this.renderTimer === undefined) {\n        if (this.requiresTimeout === true) {\n          this.renderTimer = window.setTimeout(this._renderStep.bind(this), this.simulationInterval); // wait this.renderTimeStep milliseconds and perform the animation step function\n        }\n        else {\n          this.renderTimer = window.requestAnimationFrame(this._renderStep.bind(this)); // wait this.renderTimeStep milliseconds and perform the animation step function\n        }\n      }\n    }\n  }\n\n  _renderStep() {\n    if (this.renderingActive === true) {\n      // reset the renderTimer so a new scheduled animation step can be set\n      this.renderTimer = undefined;\n\n      if (this.requiresTimeout === true) {\n        // this schedules a new simulation step\n        this._startRendering();\n      }\n\n      this._redraw();\n\n      if (this.requiresTimeout === false) {\n        // this schedules a new simulation step\n        this._startRendering();\n      }\n    }\n  }\n\n  /**\n   * Redraw the network with the current data\n   * chart will be resized too.\n   */\n  redraw() {\n    this.body.emitter.emit('setSize');\n    this._redraw();\n  }\n\n  /**\n   * Redraw the network with the current data\n   * @param hidden | used to get the first estimate of the node sizes. only the nodes are drawn after which they are quickly drawn over.\n   * @private\n   */\n  _requestRedraw() {\n    if (this.redrawRequested !== true && this.renderingActive === false && this.allowRedraw === true) {\n      this.redrawRequested = true;\n      if (this.requiresTimeout === true) {\n        window.setTimeout(() => {this._redraw(false);}, 0);\n      }\n      else {\n        window.requestAnimationFrame(() => {this._redraw(false);});\n      }\n    }\n  }\n\n  _redraw(hidden = false) {\n    if (this.allowRedraw === true) {\n      this.body.emitter.emit(\"initRedraw\");\n\n      this.redrawRequested = false;\n      let ctx = this.canvas.frame.canvas.getContext('2d');\n\n      // when the container div was hidden, this fixes it back up!\n      if (this.canvas.frame.canvas.width === 0 || this.canvas.frame.canvas.height === 0) {\n        this.canvas.setSize();\n      }\n\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.canvas.frame.canvas.clientWidth;\n      let h = this.canvas.frame.canvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // if the div is hidden, we stop the redraw here for performance.\n      if (this.canvas.frame.clientWidth === 0) {\n        return;\n      }\n\n      // set scaling and translation\n      ctx.save();\n      ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n      ctx.scale(this.body.view.scale, this.body.view.scale);\n\n      ctx.beginPath();\n      this.body.emitter.emit(\"beforeDrawing\", ctx);\n      ctx.closePath();\n\n      if (hidden === false) {\n        if (this.dragging === false || (this.dragging === true && this.options.hideEdgesOnDrag === false)) {\n          this._drawEdges(ctx);\n        }\n      }\n\n      if (this.dragging === false || (this.dragging === true && this.options.hideNodesOnDrag === false)) {\n        this._drawNodes(ctx, hidden);\n      }\n\n      ctx.beginPath();\n      this.body.emitter.emit(\"afterDrawing\", ctx);\n      ctx.closePath();\n\n\n      // restore original scaling and translation\n      ctx.restore();\n      if (hidden === true) {\n        ctx.clearRect(0, 0, w, h);\n      }\n    }\n  }\n\n\n  /**\n   * Redraw all nodes\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Boolean} [alwaysShow]\n   * @private\n   */\n  _resizeNodes() {\n    let ctx = this.canvas.frame.canvas.getContext('2d');\n    if (this.pixelRatio === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    ctx.save();\n    ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n    ctx.scale(this.body.view.scale, this.body.view.scale);\n\n    let nodes = this.body.nodes;\n    let node;\n\n    // resize all nodes\n    for (let nodeId in nodes) {\n      if (nodes.hasOwnProperty(nodeId)) {\n        node = nodes[nodeId];\n        node.resize(ctx);\n        node.updateBoundingBox(ctx, node.selected);\n      }\n    }\n\n    // restore original scaling and translation\n    ctx.restore();\n  }\n\n  /**\n   * Redraw all nodes\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Boolean} [alwaysShow]\n   * @private\n   */\n  _drawNodes(ctx, alwaysShow = false) {\n    let nodes = this.body.nodes;\n    let nodeIndices = this.body.nodeIndices;\n    let node;\n    let selected = [];\n    let margin = 20;\n    let topLeft = this.canvas.DOMtoCanvas({x:-margin,y:-margin});\n    let bottomRight = this.canvas.DOMtoCanvas({\n      x: this.canvas.frame.canvas.clientWidth+margin,\n      y: this.canvas.frame.canvas.clientHeight+margin\n    });\n    let viewableArea = {top:topLeft.y,left:topLeft.x,bottom:bottomRight.y,right:bottomRight.x};\n\n    // draw unselected nodes;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      node = nodes[nodeIndices[i]];\n      // set selected nodes aside\n      if (node.isSelected()) {\n        selected.push(nodeIndices[i]);\n      }\n      else {\n        if (alwaysShow === true) {\n          node.draw(ctx);\n        }\n        else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {\n          node.draw(ctx);\n        }\n        else {\n          node.updateBoundingBox(ctx, node.selected);\n        }\n      }\n    }\n\n    // draw the selected nodes on top\n    for (let i = 0; i < selected.length; i++) {\n      node = nodes[selected[i]];\n      node.draw(ctx);\n    }\n  }\n\n\n  /**\n   * Redraw all edges\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @private\n   */\n  _drawEdges(ctx) {\n    let edges = this.body.edges;\n    let edgeIndices = this.body.edgeIndices;\n    let edge;\n\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true) {\n        edge.draw(ctx);\n      }\n    }\n  }\n\n  /**\n   * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because\n   * some implementations (safari and IE9) did not support requestAnimationFrame\n   * @private\n   */\n  _determineBrowserMethod() {\n    if (typeof window !== 'undefined') {\n      let browserType = navigator.userAgent.toLowerCase();\n      this.requiresTimeout = false;\n      if (browserType.indexOf('msie 9.0') != -1) { // IE 9\n        this.requiresTimeout = true;\n      }\n      else if (browserType.indexOf('safari') != -1) {  // safari\n        if (browserType.indexOf('chrome') <= -1) {\n          this.requiresTimeout = true;\n        }\n      }\n    }\n    else {\n      this.requiresTimeout = true;\n    }\n  }\n\n}\n\nexport default CanvasRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/CanvasRenderer.js","let Hammer = require('../../module/hammer');\nlet hammerUtil = require('../../hammerUtil');\n\nlet util = require('../../util');\n\n/**\n * Create the main frame for the Network.\n * This function is executed once when a Network object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n * @private\n */\nclass Canvas {\n  constructor(body) {\n    this.body = body;\n    this.pixelRatio = 1;\n    this.resizeTimer = undefined;\n    this.resizeFunction = this._onResize.bind(this);\n    this.cameraState = {};\n    this.initialized = false;\n    this.canvasViewCenter = {};\n\n    this.options = {};\n    this.defaultOptions = {\n      autoResize: true,\n      height: '100%',\n      width: '100%'\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // bind the events\n    this.body.emitter.once(\"resize\", (obj) => {\n      if (obj.width !== 0) {\n        this.body.view.translation.x = obj.width * 0.5;\n      }\n      if (obj.height !== 0) {\n        this.body.view.translation.y = obj.height * 0.5;\n      }\n    });\n    this.body.emitter.on(\"setSize\", this.setSize.bind(this));\n    this.body.emitter.on(\"destroy\", () => {\n      this.hammerFrame.destroy();\n      this.hammer.destroy();\n      this._cleanUp();\n    });\n\n\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['width','height','autoResize'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n\n    if (this.options.autoResize === true) {\n      // automatically adapt to a changing size of the browser.\n      this._cleanUp();\n      this.resizeTimer = setInterval(() => {\n        let changed = this.setSize();\n        if (changed === true) {\n          this.body.emitter.emit(\"_requestRedraw\");\n        }\n      }, 1000);\n      this.resizeFunction = this._onResize.bind(this);\n      util.addEventListener(window,'resize',this.resizeFunction);\n    }\n  }\n\n  _cleanUp() {\n    // automatically adapt to a changing size of the browser.\n    if (this.resizeTimer !== undefined) {\n      clearInterval(this.resizeTimer);\n    }\n    util.removeEventListener(window,'resize',this.resizeFunction);\n    this.resizeFunction = undefined;\n  }\n\n  _onResize() {\n    this.setSize();\n    this.body.emitter.emit(\"_redraw\");\n  }\n\n  /**\n   * Get and store the cameraState\n   * @private\n   */\n  _getCameraState(pixelRatio = this.pixelRatio) {\n    if (this.initialized === true) {\n      this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;\n      this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;\n      this.cameraState.scale = this.body.view.scale;\n      this.cameraState.position = this.DOMtoCanvas({\n        x: 0.5 * this.frame.canvas.width / pixelRatio,\n        y: 0.5 * this.frame.canvas.height / pixelRatio\n      });\n    }\n  }\n\n  /**\n   * Set the cameraState\n   * @private\n   */\n  _setCameraState() {\n    if (this.cameraState.scale !== undefined &&\n      this.frame.canvas.clientWidth !== 0 &&\n      this.frame.canvas.clientHeight !== 0 &&\n      this.pixelRatio !== 0 &&\n      this.cameraState.previousWidth > 0) {\n\n      let widthRatio = (this.frame.canvas.width / this.pixelRatio) / this.cameraState.previousWidth;\n      let heightRatio = (this.frame.canvas.height / this.pixelRatio) / this.cameraState.previousHeight;\n      let newScale = this.cameraState.scale;\n\n      if (widthRatio != 1 && heightRatio != 1) {\n        newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);\n      }\n      else if (widthRatio != 1) {\n        newScale = this.cameraState.scale * widthRatio;\n      }\n      else if (heightRatio != 1) {\n        newScale = this.cameraState.scale * heightRatio;\n      }\n\n      this.body.view.scale = newScale;\n      // this comes from the view module.\n      var currentViewCenter = this.DOMtoCanvas({\n        x: 0.5 * this.frame.canvas.clientWidth,\n        y: 0.5 * this.frame.canvas.clientHeight\n      });\n\n      var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n        x: currentViewCenter.x - this.cameraState.position.x,\n        y: currentViewCenter.y - this.cameraState.position.y\n      };\n      this.body.view.translation.x += distanceFromCenter.x * this.body.view.scale;\n      this.body.view.translation.y += distanceFromCenter.y * this.body.view.scale;\n    }\n  }\n\n  _prepareValue(value) {\n    if (typeof value === 'number') {\n      return value + 'px';\n    }\n    else if (typeof value === 'string') {\n      if (value.indexOf('%') !== -1 || value.indexOf('px') !== -1) {\n        return value;\n      }\n      else if (value.indexOf('%') === -1) {\n        return value + 'px';\n      }\n    }\n    throw new Error('Could not use the value supplied for width or height:' + value);\n  }\n\n\n  /**\n   * Create the HTML\n   */\n  _create() {\n    // remove all elements from the container element.\n    while (this.body.container.hasChildNodes()) {\n      this.body.container.removeChild(this.body.container.firstChild);\n    }\n\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-network';\n    this.frame.style.position = 'relative';\n    this.frame.style.overflow = 'hidden';\n    this.frame.tabIndex = 900; // tab index is required for keycharm to bind keystrokes to the div instead of the window\n\n    //////////////////////////////////////////////////////////////////\n\n    this.frame.canvas = document.createElement(\"canvas\");\n    this.frame.canvas.style.position = 'relative';\n    this.frame.appendChild(this.frame.canvas);\n\n    if (!this.frame.canvas.getContext) {\n      let noCanvas = document.createElement( 'DIV' );\n      noCanvas.style.color = 'red';\n      noCanvas.style.fontWeight =  'bold' ;\n      noCanvas.style.padding =  '10px';\n      noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n      this.frame.canvas.appendChild(noCanvas);\n    }\n    else {\n      let ctx = this.frame.canvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n      this.frame.canvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    // add the frame to the container element\n    this.body.container.appendChild(this.frame);\n\n    this.body.view.scale = 1;\n    this.body.view.translation = {x: 0.5 * this.frame.canvas.clientWidth,y: 0.5 * this.frame.canvas.clientHeight};\n\n    this._bindHammer();\n  }\n\n\n  /**\n   * This function binds hammer, it can be repeated over and over due to the uniqueness check.\n   * @private\n   */\n  _bindHammer() {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n    }\n    this.drag = {};\n    this.pinch = {};\n\n    // init hammer\n    this.hammer = new Hammer(this.frame.canvas);\n    this.hammer.get('pinch').set({enable: true});\n    // enable to get better response, todo: test on mobile.\n    this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_ALL});\n\n    hammerUtil.onTouch(this.hammer, (event) => {this.body.eventListeners.onTouch(event)});\n    this.hammer.on('tap',       (event) => {this.body.eventListeners.onTap(event)});\n    this.hammer.on('doubletap', (event) => {this.body.eventListeners.onDoubleTap(event)});\n    this.hammer.on('press',     (event) => {this.body.eventListeners.onHold(event)});\n    this.hammer.on('panstart',  (event) => {this.body.eventListeners.onDragStart(event)});\n    this.hammer.on('panmove',   (event) => {this.body.eventListeners.onDrag(event)});\n    this.hammer.on('panend',    (event) => {this.body.eventListeners.onDragEnd(event)});\n    this.hammer.on('pinch',     (event) => {this.body.eventListeners.onPinch(event)});\n\n    // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?\n    this.frame.canvas.addEventListener('mousewheel',     (event) => {this.body.eventListeners.onMouseWheel(event)});\n    this.frame.canvas.addEventListener('DOMMouseScroll', (event) => {this.body.eventListeners.onMouseWheel(event)});\n\n    this.frame.canvas.addEventListener('mousemove', (event) => {this.body.eventListeners.onMouseMove(event)});\n    this.frame.canvas.addEventListener('contextmenu', (event) => {this.body.eventListeners.onContext(event)});\n\n    this.hammerFrame = new Hammer(this.frame);\n    hammerUtil.onRelease(this.hammerFrame, (event) => {this.body.eventListeners.onRelease(event)});\n  }\n\n\n  /**\n   * Set a new size for the network\n   * @param {string} width   Width in pixels or percentage (for example '800px'\n   *                         or '50%')\n   * @param {string} height  Height in pixels or percentage  (for example '400px'\n   *                         or '30%')\n   */\n  setSize(width = this.options.width, height = this.options.height) {\n    width = this._prepareValue(width);\n    height= this._prepareValue(height);\n\n    let emitEvent = false;\n    let oldWidth = this.frame.canvas.width;\n    let oldHeight = this.frame.canvas.height;\n\n    // update the pixel ratio\n    let ctx = this.frame.canvas.getContext(\"2d\");\n    let previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value\n    this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n    if (width != this.options.width || height != this.options.height || this.frame.style.width != width || this.frame.style.height != height) {\n      this._getCameraState(previousRatio);\n\n      this.frame.style.width = width;\n      this.frame.style.height = height;\n\n      this.frame.canvas.style.width = '100%';\n      this.frame.canvas.style.height = '100%';\n\n      this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);\n      this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);\n\n      this.options.width = width;\n      this.options.height = height;\n\n      this.canvasViewCenter = {\n        x: 0.5 * this.frame.clientWidth,\n        y: 0.5 * this.frame.clientHeight\n      };\n\n      emitEvent = true;\n    }\n    else {\n      // this would adapt the width of the canvas to the width from 100% if and only if\n      // there is a change.\n\n      // store the camera if there is a change in size.\n      if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio) || this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) {\n        this._getCameraState(previousRatio);\n      }\n\n      if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio)) {\n        this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);\n        emitEvent = true;\n      }\n      if (this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) {\n        this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);\n        emitEvent = true;\n      }\n    }\n\n    if (emitEvent === true) {\n      this.body.emitter.emit('resize', {\n        width:Math.round(this.frame.canvas.width / this.pixelRatio),\n        height:Math.round(this.frame.canvas.height / this.pixelRatio),\n        oldWidth: Math.round(oldWidth / this.pixelRatio),\n        oldHeight: Math.round(oldHeight / this.pixelRatio)\n      });\n\n      // restore the camera on change.\n      this._setCameraState();\n    }\n\n\n    // set initialized so the get and set camera will work from now on.\n    this.initialized = true;\n    return emitEvent;\n  };\n\n\n  /**\n   * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to\n   * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n   * @param {number} x\n   * @returns {number}\n   * @private\n   */\n  _XconvertDOMtoCanvas(x) {\n    return (x - this.body.view.translation.x) / this.body.view.scale;\n  }\n\n  /**\n   * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n   * the X coordinate in DOM-space (coordinate point in browser relative to the container div)\n   * @param {number} x\n   * @returns {number}\n   * @private\n   */\n  _XconvertCanvasToDOM(x) {\n    return x * this.body.view.scale + this.body.view.translation.x;\n  }\n\n  /**\n   * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to\n   * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n   * @param {number} y\n   * @returns {number}\n   * @private\n   */\n  _YconvertDOMtoCanvas(y) {\n    return (y - this.body.view.translation.y) / this.body.view.scale;\n  }\n\n  /**\n   * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n   * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)\n   * @param {number} y\n   * @returns {number}\n   * @private\n   */\n  _YconvertCanvasToDOM(y) {\n    return y * this.body.view.scale + this.body.view.translation.y;\n  }\n\n\n  /**\n   *\n   * @param {object} pos   = {x: number, y: number}\n   * @returns {{x: number, y: number}}\n   * @constructor\n   */\n  canvasToDOM (pos) {\n    return {x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y)};\n  }\n\n  /**\n   *\n   * @param {object} pos   = {x: number, y: number}\n   * @returns {{x: number, y: number}}\n   * @constructor\n   */\n  DOMtoCanvas (pos) {\n    return {x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y)};\n  }\n\n}\n\nexport default Canvas;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Canvas.js","let util = require('../../util');\n\nimport NetworkUtil from '../NetworkUtil';\n\nclass View {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.animationSpeed = 1/this.renderRefreshRate;\n    this.animationEasingFunction = \"easeInOutQuint\";\n    this.easingTime = 0;\n    this.sourceScale = 0;\n    this.targetScale = 0;\n    this.sourceTranslation = 0;\n    this.targetTranslation = 0;\n    this.lockedOnNodeId = undefined;\n    this.lockedOnNodeOffset = undefined;\n    this.touchTime = 0;\n\n    this.viewFunction = undefined;\n\n    this.body.emitter.on(\"fit\",                 this.fit.bind(this));\n    this.body.emitter.on(\"animationFinished\",   () => {this.body.emitter.emit(\"_stopRendering\");});\n    this.body.emitter.on(\"unlockNode\",          this.releaseNode.bind(this));\n  }\n\n\n  setOptions(options = {}) {\n    this.options = options;\n  }\n\n\n  /**\n   * This function zooms out to fit all data on screen based on amount of nodes\n   * @param {Object} Options\n   * @param {Boolean} [initialZoom]  | zoom based on fitted formula or range, true = fitted, default = false;\n   */\n  fit(options = {nodes:[]}, initialZoom = false) {\n    let range;\n    let zoomLevel;\n    if (options.nodes === undefined || options.nodes.length === 0) {\n      options.nodes = this.body.nodeIndices;\n    }\n\n\n    if (initialZoom === true) {\n      // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.\n      let positionDefined = 0;\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          let node = this.body.nodes[nodeId];\n          if (node.predefinedPosition === true) {\n            positionDefined += 1;\n          }\n        }\n      }\n      if (positionDefined > 0.5 * this.body.nodeIndices.length) {\n        this.fit(options,false);\n        return;\n      }\n\n      range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n      let numberOfNodes = this.body.nodeIndices.length;\n      zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.\n\n      // correct for larger canvasses.\n      let factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600);\n      zoomLevel *= factor;\n    }\n    else {\n      this.body.emitter.emit(\"_resizeNodes\");\n      range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n      let xDistance = Math.abs(range.maxX - range.minX) * 1.1;\n      let yDistance = Math.abs(range.maxY - range.minY) * 1.1;\n\n      let xZoomLevel = this.canvas.frame.canvas.clientWidth  / xDistance;\n      let yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance;\n\n      zoomLevel = (xZoomLevel <= yZoomLevel) ? xZoomLevel : yZoomLevel;\n    }\n\n    if (zoomLevel > 1.0) {\n      zoomLevel = 1.0;\n    }\n    else if (zoomLevel === 0) {\n      zoomLevel = 1.0;\n    }\n\n    let center = NetworkUtil.findCenter(range);\n    let animationOptions = {position: center, scale: zoomLevel, animation: options.animation};\n    this.moveTo(animationOptions);\n  }\n  \n  // animation\n\n  /**\n   * Center a node in view.\n   *\n   * @param {Number} nodeId\n   * @param {Number} [options]\n   */\n  focus(nodeId, options = {}) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      let nodePosition = {x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y};\n      options.position = nodePosition;\n      options.lockedOnNode = nodeId;\n\n      this.moveTo(options)\n    }\n    else {\n      console.log(\"Node: \" + nodeId + \" cannot be found.\");\n    }\n  }\n\n  /**\n   *\n   * @param {Object} options  |  options.offset   = {x:Number, y:Number}   // offset from the center in DOM pixels\n   *                          |  options.scale    = Number                 // scale to move to\n   *                          |  options.position = {x:Number, y:Number}   // position to move to\n   *                          |  options.animation = {duration:Number, easingFunction:String} || Boolean   // position to move to\n   */\n  moveTo(options) {\n    if (options === undefined) {\n      options = {};\n      return;\n    }\n    if (options.offset    === undefined)           {options.offset    = {x: 0, y: 0};    }\n    if (options.offset.x  === undefined)           {options.offset.x  = 0;               }\n    if (options.offset.y  === undefined)           {options.offset.y  = 0;               }\n    if (options.scale     === undefined)           {options.scale     = this.body.view.scale;  }\n    if (options.position  === undefined)           {options.position  = this.getViewPosition();}\n    if (options.animation === undefined)           {options.animation = {duration:0};    }\n    if (options.animation === false    )           {options.animation = {duration:0};    }\n    if (options.animation === true     )           {options.animation = {};              }\n    if (options.animation.duration === undefined)  {options.animation.duration = 1000;   }  // default duration\n    if (options.animation.easingFunction === undefined)  {options.animation.easingFunction = \"easeInOutQuad\";  } // default easing function\n\n    this.animateView(options);\n  }\n\n  /**\n   *\n   * @param {Object} options  |  options.offset   = {x:Number, y:Number}   // offset from the center in DOM pixels\n   *                          |  options.time     = Number                 // animation time in milliseconds\n   *                          |  options.scale    = Number                 // scale to animate to\n   *                          |  options.position = {x:Number, y:Number}   // position to animate to\n   *                          |  options.easingFunction = String           // linear, easeInQuad, easeOutQuad, easeInOutQuad,\n   *                                                                       // easeInCubic, easeOutCubic, easeInOutCubic,\n   *                                                                       // easeInQuart, easeOutQuart, easeInOutQuart,\n   *                                                                       // easeInQuint, easeOutQuint, easeInOutQuint\n   */\n  animateView(options) {\n    if (options === undefined) {\n      return;\n    }\n    this.animationEasingFunction = options.animation.easingFunction;\n    // release if something focussed on the node\n    this.releaseNode();\n    if (options.locked === true) {\n      this.lockedOnNodeId = options.lockedOnNode;\n      this.lockedOnNodeOffset = options.offset;\n    }\n\n    // forcefully complete the old animation if it was still running\n    if (this.easingTime != 0) {\n      this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.\n    }\n\n    this.sourceScale = this.body.view.scale;\n    this.sourceTranslation = this.body.view.translation;\n    this.targetScale = options.scale;\n\n    // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw\n    // but at least then we'll have the target transition\n    this.body.view.scale = this.targetScale;\n    let viewCenter = this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n\n    let distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n      x: viewCenter.x - options.position.x,\n      y: viewCenter.y - options.position.y\n    };\n    this.targetTranslation = {\n      x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x,\n      y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y\n    };\n\n    // if the time is set to 0, don't do an animation\n    if (options.animation.duration === 0) {\n      if (this.lockedOnNodeId != undefined) {\n        this.viewFunction = this._lockedRedraw.bind(this);\n        this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      }\n      else {\n        this.body.view.scale = this.targetScale;\n        this.body.view.translation = this.targetTranslation;\n        this.body.emitter.emit(\"_requestRedraw\");\n      }\n    }\n    else {\n      this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's\n      this.animationEasingFunction = options.animation.easingFunction;\n\n\n      this.viewFunction = this._transitionRedraw.bind(this);\n      this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      this.body.emitter.emit(\"_startRendering\");\n    }\n  }\n\n  /**\n   * used to animate smoothly by hijacking the redraw function.\n   * @private\n   */\n  _lockedRedraw() {\n    let nodePosition = {x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y};\n    let viewCenter = this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n    let distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n      x: viewCenter.x - nodePosition.x,\n      y: viewCenter.y - nodePosition.y\n    };\n    let sourceTranslation = this.body.view.translation;\n    let targetTranslation = {\n      x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x,\n      y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y\n    };\n\n    this.body.view.translation = targetTranslation;\n  }\n\n  releaseNode() {\n    if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {\n      this.body.emitter.off(\"initRedraw\", this.viewFunction);\n      this.lockedOnNodeId = undefined;\n      this.lockedOnNodeOffset = undefined;\n    }\n  }\n\n  /**\n   *\n   * @param easingTime\n   * @private\n   */\n  _transitionRedraw(finished = false) {\n    this.easingTime += this.animationSpeed;\n    this.easingTime = finished === true ? 1.0 : this.easingTime;\n\n    let progress = util.easingFunctions[this.animationEasingFunction](this.easingTime);\n\n    this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress;\n    this.body.view.translation = {\n      x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress,\n      y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress\n    };\n\n    // cleanup\n    if (this.easingTime >= 1.0) {\n      this.body.emitter.off(\"initRedraw\", this.viewFunction);\n      this.easingTime = 0;\n      if (this.lockedOnNodeId != undefined) {\n        this.viewFunction = this._lockedRedraw.bind(this);\n        this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      }\n      this.body.emitter.emit(\"animationFinished\");\n    }\n  };\n\n\n  getScale() {\n    return this.body.view.scale;\n  }\n\n  getViewPosition() {\n    return this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n  }\n\n\n}\n\nexport default View;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/View.js","let util = require('../../util');\n\nimport NavigationHandler from './components/NavigationHandler'\nimport Popup             from './../../shared/Popup'\n\nclass InteractionHandler {\n  constructor(body, canvas, selectionHandler) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionHandler = selectionHandler;\n    this.navigationHandler = new NavigationHandler(body,canvas);\n\n    // bind the events from hammer to functions in this object\n    this.body.eventListeners.onTap        = this.onTap.bind(this);\n    this.body.eventListeners.onTouch      = this.onTouch.bind(this);\n    this.body.eventListeners.onDoubleTap  = this.onDoubleTap.bind(this);\n    this.body.eventListeners.onHold       = this.onHold.bind(this);\n    this.body.eventListeners.onDragStart  = this.onDragStart.bind(this);\n    this.body.eventListeners.onDrag       = this.onDrag.bind(this);\n    this.body.eventListeners.onDragEnd    = this.onDragEnd.bind(this);\n    this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);\n    this.body.eventListeners.onPinch      = this.onPinch.bind(this);\n    this.body.eventListeners.onMouseMove  = this.onMouseMove.bind(this);\n    this.body.eventListeners.onRelease    = this.onRelease.bind(this);\n    this.body.eventListeners.onContext    = this.onContext.bind(this);\n\n    this.touchTime = 0;\n    this.drag = {};\n    this.pinch = {};\n    this.popup = undefined;\n    this.popupObj = undefined;\n    this.popupTimer = undefined;\n\n    this.body.functions.getPointer = this.getPointer.bind(this);\n\n    this.options = {};\n    this.defaultOptions = {\n      dragNodes:true,\n      dragView: true,\n      hover: false,\n      keyboard: {\n        enabled: false,\n        speed: {x: 10, y: 10, zoom: 0.02},\n        bindToWindow: true\n      },\n      navigationButtons: false,\n      tooltipDelay: 300,\n      zoomView: true\n    };\n    util.extend(this.options,this.defaultOptions);\n\n    this.bindEventListeners()\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('destroy', () => {\n      clearTimeout(this.popupTimer);\n      delete this.body.functions.getPointer;\n    })\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      // extend all but the values in fields\n      let fields = ['hideEdgesOnDrag','hideNodesOnDrag','keyboard','multiselect','selectable','selectConnectedEdges'];\n      util.selectiveNotDeepExtend(fields, this.options, options);\n\n      // merge the keyboard options in.\n      util.mergeOptions(this.options, options, 'keyboard');\n\n      if (options.tooltip) {\n        util.extend(this.options.tooltip, options.tooltip);\n        if (options.tooltip.color) {\n          this.options.tooltip.color = util.parseColor(options.tooltip.color);\n        }\n      }\n    }\n\n    this.navigationHandler.setOptions(this.options);\n  }\n\n\n  /**\n   * Get the pointer location from a touch location\n   * @param {{x: Number, y: Number}} touch\n   * @return {{x: Number, y: Number}} pointer\n   * @private\n   */\n  getPointer(touch) {\n    return {\n      x: touch.x - util.getAbsoluteLeft(this.canvas.frame.canvas),\n      y: touch.y - util.getAbsoluteTop(this.canvas.frame.canvas)\n    };\n  }\n\n\n  /**\n   * On start of a touch gesture, store the pointer\n   * @param event\n   * @private\n   */\n  onTouch(event) {\n    if (new Date().valueOf() - this.touchTime > 50) {\n      this.drag.pointer = this.getPointer(event.center);\n      this.drag.pinched = false;\n      this.pinch.scale = this.body.view.scale;\n      // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  /**\n   * handle tap/click event: select/unselect a node\n   * @private\n   */\n  onTap(event) {\n    let pointer = this.getPointer(event.center);\n    let multiselect = this.selectionHandler.options.multiselect &&\n        (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);\n\n    this.checkSelectionChanges(pointer, event, multiselect);\n    this.selectionHandler._generateClickEvent('click', event, pointer);\n  }\n\n\n  /**\n   * handle doubletap event\n   * @private\n   */\n  onDoubleTap(event) {\n    let pointer = this.getPointer(event.center);\n    this.selectionHandler._generateClickEvent('doubleClick', event, pointer);\n  }\n\n\n\n  /**\n   * handle long tap event: multi select nodes\n   * @private\n   */\n  onHold(event) {\n    let pointer = this.getPointer(event.center);\n    let multiselect = this.selectionHandler.options.multiselect;\n\n    this.checkSelectionChanges(pointer, event, multiselect);\n\n    this.selectionHandler._generateClickEvent('click', event, pointer);\n    this.selectionHandler._generateClickEvent('hold', event, pointer);\n  }\n\n\n  /**\n   * handle the release of the screen\n   *\n   * @private\n   */\n  onRelease(event) {\n    if (new Date().valueOf() - this.touchTime > 10) {\n      let pointer = this.getPointer(event.center);\n      this.selectionHandler._generateClickEvent('release', event, pointer);\n      // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  onContext(event) {\n    let pointer = this.getPointer({x:event.clientX, y:event.clientY});\n    this.selectionHandler._generateClickEvent('oncontext', event, pointer);\n  }\n\n\n  /**\n   *\n   * @param pointer\n   * @param add\n   */\n  checkSelectionChanges(pointer, event, add = false) {\n    let previouslySelectedEdgeCount = this.selectionHandler._getSelectedEdgeCount();\n    let previouslySelectedNodeCount = this.selectionHandler._getSelectedNodeCount();\n    let previousSelection = this.selectionHandler.getSelection();\n    let selected;\n    if (add === true) {\n      selected = this.selectionHandler.selectAdditionalOnPoint(pointer);\n    }\n    else {\n      selected = this.selectionHandler.selectOnPoint(pointer);\n    }\n    let selectedEdgesCount = this.selectionHandler._getSelectedEdgeCount();\n    let selectedNodesCount = this.selectionHandler._getSelectedNodeCount();\n    let currentSelection = this.selectionHandler.getSelection();\n\n    let {nodesChanged, edgesChanged} = this._determineIfDifferent(previousSelection, currentSelection);\n    let nodeSelected = false;\n\n    if (selectedNodesCount - previouslySelectedNodeCount > 0) { // node was selected\n      this.selectionHandler._generateClickEvent('selectNode', event, pointer);\n      selected = true;\n      nodeSelected = true;\n    }\n    else if (nodesChanged === true && selectedNodesCount > 0) {\n      this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection);\n      this.selectionHandler._generateClickEvent('selectNode', event, pointer);\n      nodeSelected = true;\n      selected = true;\n    }\n    else if (selectedNodesCount - previouslySelectedNodeCount < 0) { // node was deselected\n      this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection);\n      selected = true;\n    }\n\n\n    // handle the selected edges\n    if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { // edge was selected\n      this.selectionHandler._generateClickEvent('selectEdge', event, pointer);\n      selected = true;\n    }\n    else if (selectedEdgesCount > 0 && edgesChanged === true) {\n      this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection);\n      this.selectionHandler._generateClickEvent('selectEdge', event, pointer);\n      selected = true;\n    }\n    else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { // edge was deselected\n      this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection);\n      selected = true;\n    }\n\n\n    // fire the select event if anything has been selected or deselected\n    if (selected === true) { // select or unselect\n      this.selectionHandler._generateClickEvent('select', event, pointer);\n    }\n  }\n\n\n  /**\n   * This function checks if the nodes and edges previously selected have changed.\n   * @param previousSelection\n   * @param currentSelection\n   * @returns {{nodesChanged: boolean, edgesChanged: boolean}}\n   * @private\n   */\n  _determineIfDifferent(previousSelection,currentSelection) {\n    let nodesChanged = false;\n    let edgesChanged = false;\n\n    for (let i = 0; i < previousSelection.nodes.length; i++) {\n      if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) {\n        nodesChanged = true;\n      }\n    }\n    for (let i = 0; i < currentSelection.nodes.length; i++) {\n      if (previousSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) {\n        nodesChanged = true;\n      }\n    }\n    for (let i = 0; i < previousSelection.edges.length; i++) {\n      if (currentSelection.edges.indexOf(previousSelection.edges[i]) === -1) {\n        edgesChanged = true;\n      }\n    }\n    for (let i = 0; i < currentSelection.edges.length; i++) {\n      if (previousSelection.edges.indexOf(previousSelection.edges[i]) === -1) {\n        edgesChanged = true;\n      }\n    }\n\n    return {nodesChanged, edgesChanged};\n  }\n\n\n  /**\n   * This function is called by onDragStart.\n   * It is separated out because we can then overload it for the datamanipulation system.\n   *\n   * @private\n   */\n  onDragStart(event) {\n    //in case the touch event was triggered on an external div, do the initial touch now.\n    if (this.drag.pointer === undefined) {\n      this.onTouch(event);\n    }\n\n    // note: drag.pointer is set in onTouch to get the initial touch location\n    let node = this.selectionHandler.getNodeAt(this.drag.pointer);\n\n    this.drag.dragging = true;\n    this.drag.selection = [];\n    this.drag.translation = util.extend({},this.body.view.translation); // copy the object\n    this.drag.nodeId = undefined;\n\n    if (node !== undefined && this.options.dragNodes === true) {\n      this.drag.nodeId = node.id;\n      // select the clicked node if not yet selected\n      if (node.isSelected() === false) {\n        this.selectionHandler.unselectAll();\n        this.selectionHandler.selectObject(node);\n      }\n\n      // after select to contain the node\n      this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer);\n\n      let selection = this.selectionHandler.selectionObj.nodes;\n      // create an array with the selected nodes and their original location and status\n      for (let nodeId in selection) {\n        if (selection.hasOwnProperty(nodeId)) {\n          let object = selection[nodeId];\n          let s = {\n            id: object.id,\n            node: object,\n\n            // store original x, y, xFixed and yFixed, make the node temporarily Fixed\n            x: object.x,\n            y: object.y,\n            xFixed: object.options.fixed.x,\n            yFixed: object.options.fixed.y\n          };\n\n          object.options.fixed.x = true;\n          object.options.fixed.y = true;\n\n          this.drag.selection.push(s);\n        }\n      }\n    }\n    else {\n      // fallback if no node is selected and thus the view is dragged.\n      this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer, undefined, true);\n    }\n  }\n\n\n  /**\n   * handle drag event\n   * @private\n   */\n  onDrag(event) {\n    if (this.drag.pinched === true) {\n      return;\n    }\n\n    // remove the focus on node if it is focussed on by the focusOnNode\n    this.body.emitter.emit('unlockNode');\n\n    let pointer = this.getPointer(event.center);\n\n    let selection = this.drag.selection;\n    if (selection && selection.length && this.options.dragNodes === true) {\n      this.selectionHandler._generateClickEvent('dragging', event, pointer);\n\n      // calculate delta's and new location\n      let deltaX = pointer.x - this.drag.pointer.x;\n      let deltaY = pointer.y - this.drag.pointer.y;\n\n      // update position of all selected nodes\n      selection.forEach((selection) => {\n        let node = selection.node;\n        // only move the node if it was not fixed initially\n        if (selection.xFixed === false) {\n          node.x = this.canvas._XconvertDOMtoCanvas(this.canvas._XconvertCanvasToDOM(selection.x) + deltaX);\n        }\n        // only move the node if it was not fixed initially\n        if (selection.yFixed === false) {\n          node.y = this.canvas._YconvertDOMtoCanvas(this.canvas._YconvertCanvasToDOM(selection.y) + deltaY);\n        }\n      });\n\n      // start the simulation of the physics\n      this.body.emitter.emit('startSimulation');\n    }\n    else {\n      // move the network\n      if (this.options.dragView === true) {\n        this.selectionHandler._generateClickEvent('dragging', event, pointer, undefined, true);\n\n        // if the drag was not started properly because the click started outside the network div, start it now.\n        if (this.drag.pointer === undefined) {\n          this.onDragStart(event);\n          return;\n        }\n        let diffX = pointer.x - this.drag.pointer.x;\n        let diffY = pointer.y - this.drag.pointer.y;\n\n        this.body.view.translation = {x:this.drag.translation.x + diffX, y:this.drag.translation.y + diffY};\n        this.body.emitter.emit('_redraw');\n      }\n    }\n  }\n\n\n  /**\n   * handle drag start event\n   * @private\n   */\n  onDragEnd(event) {\n    this.drag.dragging = false;\n    let selection = this.drag.selection;\n    if (selection && selection.length) {\n      selection.forEach(function (s) {\n        // restore original xFixed and yFixed\n        s.node.options.fixed.x = s.xFixed;\n        s.node.options.fixed.y = s.yFixed;\n      });\n      this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center));\n      this.body.emitter.emit('startSimulation');\n    }\n    else {\n      this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center), undefined, true);\n      this.body.emitter.emit('_requestRedraw');\n    }\n  }\n\n\n\n  /**\n   * Handle pinch event\n   * @param event\n   * @private\n   */\n  onPinch(event) {\n    let pointer = this.getPointer(event.center);\n\n    this.drag.pinched = true;\n    if (this.pinch['scale'] === undefined) {\n      this.pinch.scale = 1;\n    }\n\n    // TODO: enabled moving while pinching?\n    let scale = this.pinch.scale * event.scale;\n    this.zoom(scale, pointer)\n  }\n\n\n  /**\n   * Zoom the network in or out\n   * @param {Number} scale a number around 1, and between 0.01 and 10\n   * @param {{x: Number, y: Number}} pointer    Position on screen\n   * @return {Number} appliedScale    scale is limited within the boundaries\n   * @private\n   */\n  zoom(scale, pointer) {\n    if (this.options.zoomView === true) {\n      let scaleOld = this.body.view.scale;\n      if (scale < 0.00001) {\n        scale = 0.00001;\n      }\n      if (scale > 10) {\n        scale = 10;\n      }\n\n      let preScaleDragPointer = undefined;\n      if (this.drag !== undefined) {\n        if (this.drag.dragging === true) {\n          preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);\n        }\n      }\n      // + this.canvas.frame.canvas.clientHeight / 2\n      let translation = this.body.view.translation;\n\n      let scaleFrac = scale / scaleOld;\n      let tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;\n      let ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;\n\n      this.body.view.scale = scale;\n      this.body.view.translation = {x:tx, y:ty};\n\n      if (preScaleDragPointer != undefined) {\n        let postScaleDragPointer = this.canvas.canvasToDOM(preScaleDragPointer);\n        this.drag.pointer.x = postScaleDragPointer.x;\n        this.drag.pointer.y = postScaleDragPointer.y;\n      }\n\n      this.body.emitter.emit('_requestRedraw');\n\n      if (scaleOld < scale) {\n        this.body.emitter.emit('zoom', {direction: '+', scale: this.body.view.scale, pointer: pointer});\n      }\n      else {\n        this.body.emitter.emit('zoom', {direction: '-', scale: this.body.view.scale, pointer: pointer});\n      }\n    }\n  }\n\n\n  /**\n   * Event handler for mouse wheel event, used to zoom the timeline\n   * See http://adomas.org/javascript-mouse-wheel/\n   *     https://github.com/EightMedia/hammer.js/issues/256\n   * @param {MouseEvent}  event\n   * @private\n   */\n  onMouseWheel(event) {\n    if (this.options.zoomView === true) {\n      // retrieve delta\n      let delta = 0;\n      if (event.wheelDelta) { /* IE/Opera. */\n        delta = event.wheelDelta / 120;\n      }\n      else if (event.detail) { /* Mozilla case. */\n        // In Mozilla, sign of delta is different than in IE.\n        // Also, delta is multiple of 3.\n        delta = -event.detail / 3;\n      }\n\n      // If delta is nonzero, handle it.\n      // Basically, delta is now positive if wheel was scrolled up,\n      // and negative, if wheel was scrolled down.\n      if (delta !== 0) {\n\n        // calculate the new scale\n        let scale = this.body.view.scale;\n        let zoom = delta / 10;\n        if (delta < 0) {\n          zoom = zoom / (1 - zoom);\n        }\n        scale *= (1 + zoom);\n\n        // calculate the pointer location\n        let pointer = this.getPointer({x: event.clientX, y: event.clientY});\n\n        // apply the new scale\n        this.zoom(scale, pointer);\n      }\n\n      // Prevent default actions caused by mouse wheel.\n      event.preventDefault();\n    }\n  }\n\n\n  /**\n   * Mouse move handler for checking whether the title moves over a node with a title.\n   * @param  {Event} event\n   * @private\n   */\n  onMouseMove(event) {\n    let pointer = this.getPointer({x:event.clientX, y:event.clientY});\n    let popupVisible = false;\n\n    // check if the previously selected node is still selected\n    if (this.popup !== undefined) {\n      if (this.popup.hidden === false) {\n        this._checkHidePopup(pointer);\n      }\n\n      // if the popup was not hidden above\n      if (this.popup.hidden === false) {\n        popupVisible = true;\n        this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n        this.popup.show();\n      }\n    }\n\n    // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.\n    if (this.options.keyboard.bindToWindow === false && this.options.keyboard.enabled === true) {\n      this.canvas.frame.focus();\n    }\n\n    // start a timeout that will check if the mouse is positioned above an element\n    if (popupVisible === false) {\n      if (this.popupTimer !== undefined) {\n        clearInterval(this.popupTimer); // stop any running calculationTimer\n        this.popupTimer = undefined;\n      }\n      if (!this.drag.dragging) {\n        this.popupTimer = setTimeout(() => this._checkShowPopup(pointer), this.options.tooltipDelay);\n      }\n    }\n\n    /**\n    * Adding hover highlights\n    */\n    if (this.options.hover === true) {\n      // adding hover highlights\n      let obj = this.selectionHandler.getNodeAt(pointer);\n      if (obj === undefined) {\n        obj = this.selectionHandler.getEdgeAt(pointer);\n      }\n      this.selectionHandler.hoverObject(obj);\n    }\n  }\n\n\n\n  /**\n   * Check if there is an element on the given position in the network\n   * (a node or edge). If so, and if this element has a title,\n   * show a popup window with its title.\n   *\n   * @param {{x:Number, y:Number}} pointer\n   * @private\n   */\n _checkShowPopup(pointer) {\n    let x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n    let y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n    let pointerObj = {\n      left:   x,\n      top:    y,\n      right:  x,\n      bottom: y\n    };\n\n    let previousPopupObjId = this.popupObj === undefined ? undefined : this.popupObj.id;\n    let nodeUnderCursor = false;\n    let popupType = 'node';\n\n    // check if a node is under the cursor.\n    if (this.popupObj === undefined) {\n      // search the nodes for overlap, select the top one in case of multiple nodes\n      let nodeIndices = this.body.nodeIndices;\n      let nodes = this.body.nodes;\n      let node;\n      let overlappingNodes = [];\n      for (let i = 0; i < nodeIndices.length; i++) {\n        node = nodes[nodeIndices[i]];\n        if (node.isOverlappingWith(pointerObj) === true) {\n          if (node.getTitle() !== undefined) {\n            overlappingNodes.push(nodeIndices[i]);\n          }\n        }\n      }\n\n      if (overlappingNodes.length > 0) {\n        // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others\n        this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];\n        // if you hover over a node, the title of the edge is not supposed to be shown.\n        nodeUnderCursor = true;\n      }\n    }\n\n    if (this.popupObj === undefined && nodeUnderCursor === false) {\n      // search the edges for overlap\n      let edgeIndices = this.body.edgeIndices;\n      let edges = this.body.edges;\n      let edge;\n      let overlappingEdges = [];\n      for (let i = 0; i < edgeIndices.length; i++) {\n        edge = edges[edgeIndices[i]];\n        if (edge.isOverlappingWith(pointerObj) === true) {\n          if (edge.connected === true && edge.getTitle() !== undefined) {\n            overlappingEdges.push(edgeIndices[i]);\n          }\n        }\n      }\n\n      if (overlappingEdges.length > 0) {\n        this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];\n        popupType = 'edge';\n      }\n    }\n\n    if (this.popupObj !== undefined) {\n      // show popup message window\n      if (this.popupObj.id !== previousPopupObjId) {\n        if (this.popup === undefined) {\n          this.popup = new Popup(this.canvas.frame);\n        }\n\n        this.popup.popupTargetType = popupType;\n        this.popup.popupTargetId = this.popupObj.id;\n\n        // adjust a small offset such that the mouse cursor is located in the\n        // bottom left location of the popup, and you can easily move over the\n        // popup area\n        this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n        this.popup.setText(this.popupObj.getTitle());\n        this.popup.show();\n        this.body.emitter.emit('showPopup',this.popupObj.id);\n      }\n    }\n    else {\n      if (this.popup !== undefined) {\n        this.popup.hide();\n        this.body.emitter.emit('hidePopup');\n      }\n    }\n  }\n\n\n  /**\n   * Check if the popup must be hidden, which is the case when the mouse is no\n   * longer hovering on the object\n   * @param {{x:Number, y:Number}} pointer\n   * @private\n   */\n _checkHidePopup(pointer) {\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n    let stillOnObj = false;\n    if (this.popup.popupTargetType === 'node') {\n      if (this.body.nodes[this.popup.popupTargetId] !== undefined) {\n        stillOnObj = this.body.nodes[this.popup.popupTargetId].isOverlappingWith(pointerObj);\n\n        // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.\n        // we initially only check stillOnObj because this is much faster.\n        if (stillOnObj === true) {\n          let overNode = this.selectionHandler.getNodeAt(pointer);\n          stillOnObj = overNode === undefined ? false : overNode.id === this.popup.popupTargetId;\n        }\n      }\n    }\n    else {\n      if (this.selectionHandler.getNodeAt(pointer) === undefined) {\n        if (this.body.edges[this.popup.popupTargetId] !== undefined) {\n          stillOnObj = this.body.edges[this.popup.popupTargetId].isOverlappingWith(pointerObj);\n        }\n      }\n    }\n\n\n    if (stillOnObj === false) {\n      this.popupObj = undefined;\n      this.popup.hide();\n      this.body.emitter.emit('hidePopup');\n    }\n  }\n\n}\n\nexport default InteractionHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/InteractionHandler.js","var util = require('../../../util');\nvar Hammer = require('../../../module/hammer');\nvar hammerUtil = require('../../../hammerUtil');\nvar keycharm = require('keycharm');\n\nclass NavigationHandler {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.iconsCreated = false;\n    this.navigationHammers = [];\n    this.boundFunctions = {};\n    this.touchTime = 0;\n    this.activated = false;\n\n\n    this.body.emitter.on(\"activate\",   () => {this.activated = true;  this.configureKeyboardBindings();});\n    this.body.emitter.on(\"deactivate\", () => {this.activated = false; this.configureKeyboardBindings();});\n    this.body.emitter.on(\"destroy\",    () => {if (this.keycharm !== undefined) {this.keycharm.destroy();}});\n\n    this.options = {}\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      this.options = options;\n      this.create();\n    }\n  }\n\n  create() {\n    if (this.options.navigationButtons === true) {\n      if (this.iconsCreated === false) {\n        this.loadNavigationElements();\n      }\n    }\n    else if (this.iconsCreated === true) {\n      this.cleanNavigation();\n    }\n\n    this.configureKeyboardBindings();\n  }\n\n  cleanNavigation() {\n    // clean hammer bindings\n    if (this.navigationHammers.length != 0) {\n      for (var i = 0; i < this.navigationHammers.length; i++) {\n        this.navigationHammers[i].destroy();\n      }\n      this.navigationHammers = [];\n    }\n\n    // clean up previous navigation items\n    if (this.navigationDOM && this.navigationDOM['wrapper'] && this.navigationDOM['wrapper'].parentNode) {\n      this.navigationDOM['wrapper'].parentNode.removeChild(this.navigationDOM['wrapper']);\n    }\n\n    this.iconsCreated = false;\n  }\n\n  /**\n   * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation\n   * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent\n   * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.\n   * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.\n   *\n   * @private\n   */\n  loadNavigationElements() {\n    this.cleanNavigation();\n\n    this.navigationDOM = {};\n    var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends'];\n    var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','_fit'];\n\n    this.navigationDOM['wrapper'] = document.createElement('div');\n    this.navigationDOM['wrapper'].className = 'vis-navigation';\n    this.canvas.frame.appendChild(this.navigationDOM['wrapper']);\n\n    for (var i = 0; i < navigationDivs.length; i++) {\n      this.navigationDOM[navigationDivs[i]] = document.createElement('div');\n      this.navigationDOM[navigationDivs[i]].className = 'vis-button vis-' + navigationDivs[i];\n      this.navigationDOM['wrapper'].appendChild(this.navigationDOM[navigationDivs[i]]);\n\n      var hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);\n      if (navigationDivActions[i] === \"_fit\") {\n        hammerUtil.onTouch(hammer, this._fit.bind(this));\n      }\n      else {\n        hammerUtil.onTouch(hammer, this.bindToRedraw.bind(this,navigationDivActions[i]));\n      }\n\n      this.navigationHammers.push(hammer);\n    }\n\n    // use a hammer for the release so we do not require the one used in the rest of the network\n    // the one the rest uses can be overloaded by the manipulation system.\n    var hammerFrame = new Hammer(this.canvas.frame);\n    hammerUtil.onRelease(hammerFrame, () => {this._stopMovement();});\n    this.navigationHammers.push(hammerFrame);\n\n    this.iconsCreated = true;\n  }\n\n  bindToRedraw(action) {\n    if (this.boundFunctions[action] === undefined) {\n      this.boundFunctions[action] = this[action].bind(this);\n      this.body.emitter.on(\"initRedraw\", this.boundFunctions[action]);\n      this.body.emitter.emit(\"_startRendering\");\n    }\n  }\n\n  unbindFromRedraw(action) {\n    if (this.boundFunctions[action] !== undefined) {\n      this.body.emitter.off(\"initRedraw\", this.boundFunctions[action]);\n      this.body.emitter.emit(\"_stopRendering\");\n      delete this.boundFunctions[action];\n    }\n  }\n\n  /**\n   * this stops all movement induced by the navigation buttons\n   *\n   * @private\n   */\n  _fit() {\n    if (new Date().valueOf() - this.touchTime > 700) { // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)\n      this.body.emitter.emit(\"fit\", {duration: 700});\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  /**\n   * this stops all movement induced by the navigation buttons\n   *\n   * @private\n   */\n  _stopMovement() {\n    for (let boundAction in this.boundFunctions) {\n      if (this.boundFunctions.hasOwnProperty(boundAction)) {\n        this.body.emitter.off(\"initRedraw\", this.boundFunctions[boundAction]);\n        this.body.emitter.emit(\"_stopRendering\");\n      }\n    }\n    this.boundFunctions = {};\n  }\n\n  _moveUp()   {this.body.view.translation.y += this.options.keyboard.speed.y;}\n  _moveDown() {this.body.view.translation.y -= this.options.keyboard.speed.y;}\n  _moveLeft() {this.body.view.translation.x += this.options.keyboard.speed.x;}\n  _moveRight(){this.body.view.translation.x -= this.options.keyboard.speed.x;}\n  _zoomIn() {\n    var scaleOld = this.body.view.scale;\n    var scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);\n    var translation = this.body.view.translation;\n    var scaleFrac = scale / scaleOld;\n    var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;\n    var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;\n\n    this.body.view.scale = scale;\n    this.body.view.translation = { x: tx, y: ty };\n    this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: pointer });\n  }\n  _zoomOut()  {\n    var scaleOld = this.body.view.scale;\n    var scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);\n    var translation = this.body.view.translation;\n    var scaleFrac = scale / scaleOld;\n    var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;\n    var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;\n\n    this.body.view.scale = scale;\n    this.body.view.translation = { x: tx, y: ty };\n    this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: pointer });\n  }\n\n\n  /**\n   * bind all keys using keycharm.\n   */\n  configureKeyboardBindings() {\n    if (this.keycharm !== undefined) {\n      this.keycharm.destroy();\n    }\n\n    if (this.options.keyboard.enabled === true) {\n      if (this.options.keyboard.bindToWindow === true) {\n        this.keycharm = keycharm({container: window, preventDefault: true});\n      }\n      else {\n        this.keycharm = keycharm({container: this.canvas.frame, preventDefault: true});\n      }\n\n      this.keycharm.reset();\n\n      if (this.activated === true) {\n        this.keycharm.bind(\"up\",       () => {this.bindToRedraw(\"_moveUp\")   ;}, \"keydown\");\n        this.keycharm.bind(\"down\",     () => {this.bindToRedraw(\"_moveDown\") ;}, \"keydown\");\n        this.keycharm.bind(\"left\",     () => {this.bindToRedraw(\"_moveLeft\") ;}, \"keydown\");\n        this.keycharm.bind(\"right\",    () => {this.bindToRedraw(\"_moveRight\");}, \"keydown\");\n        this.keycharm.bind(\"=\",        () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"num+\",     () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"num-\",     () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"-\",        () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"[\",        () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"]\",        () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"pageup\",   () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"pagedown\", () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n\n        this.keycharm.bind(\"up\",       () => {this.unbindFromRedraw(\"_moveUp\")   ;}, \"keyup\");\n        this.keycharm.bind(\"down\",     () => {this.unbindFromRedraw(\"_moveDown\") ;}, \"keyup\");\n        this.keycharm.bind(\"left\",     () => {this.unbindFromRedraw(\"_moveLeft\") ;}, \"keyup\");\n        this.keycharm.bind(\"right\",    () => {this.unbindFromRedraw(\"_moveRight\");}, \"keyup\");\n        this.keycharm.bind(\"=\",        () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"num+\",     () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"num-\",     () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"-\",        () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"[\",        () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"]\",        () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"pageup\",   () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"pagedown\", () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n      }\n    }\n  }\n}\n\n\nexport default NavigationHandler;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/NavigationHandler.js","import Node from './components/Node';\nimport Edge from './components/Edge';\n\nlet util = require('../../util');\n\nclass SelectionHandler {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionObj = {nodes: [], edges: []};\n    this.hoverObj = {nodes:{},edges:{}};\n\n    this.options = {};\n    this.defaultOptions = {\n      multiselect: false,\n      selectable: true,\n      selectConnectedEdges: true,\n      hoverConnectedEdges: true\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on(\"_dataChanged\", () => {\n      this.updateSelection()\n    });\n  }\n\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['multiselect','hoverConnectedEdges','selectable','selectConnectedEdges'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n  }\n\n\n  /**\n   * handles the selection part of the tap;\n   *\n   * @param {Object} pointer\n   * @private\n   */\n  selectOnPoint(pointer) {\n    let selected = false;\n    if (this.options.selectable === true) {\n      let obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n      // unselect after getting the objects in order to restore width and height.\n      this.unselectAll();\n\n      if (obj !== undefined) {\n        selected = this.selectObject(obj);\n      }\n      this.body.emitter.emit(\"_requestRedraw\");\n    }\n    return selected;\n  }\n\n  selectAdditionalOnPoint(pointer) {\n    let selectionChanged = false;\n    if (this.options.selectable === true) {\n      let obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n      if (obj !== undefined) {\n        selectionChanged = true;\n        if (obj.isSelected() === true) {\n          this.deselectObject(obj);\n        }\n        else {\n          this.selectObject(obj);\n        }\n\n        this.body.emitter.emit(\"_requestRedraw\");\n      }\n    }\n    return selectionChanged;\n  }\n\n  _generateClickEvent(eventType, event, pointer, oldSelection, emptySelection = false) {\n    let properties;\n    if (emptySelection === true) {\n      properties = {nodes:[], edges:[]};\n    }\n    else {\n      properties = this.getSelection();\n    }\n    properties['pointer'] = {\n      DOM: {x: pointer.x, y: pointer.y},\n      canvas: this.canvas.DOMtoCanvas(pointer)\n    };\n    properties['event'] = event;\n\n    if (oldSelection !== undefined) {\n      properties['previousSelection'] = oldSelection;\n    }\n    this.body.emitter.emit(eventType, properties);\n  }\n\n  selectObject(obj, highlightEdges = this.options.selectConnectedEdges) {\n    if (obj !== undefined) {\n      if (obj instanceof Node) {\n        if (highlightEdges === true) {\n          this._selectConnectedEdges(obj);\n        }\n      }\n      obj.select();\n      this._addToSelection(obj);\n      return true;\n    }\n    return false;\n  }\n\n  deselectObject(obj) {\n    if (obj.isSelected() === true) {\n      obj.selected = false;\n      this._removeFromSelection(obj);\n    }\n  }\n\n\n\n  /**\n   * retrieve all nodes overlapping with given object\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getAllNodesOverlappingWith(object) {\n    let overlappingNodes = [];\n    let nodes = this.body.nodes;\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let nodeId = this.body.nodeIndices[i];\n      if (nodes[nodeId].isOverlappingWith(object)) {\n        overlappingNodes.push(nodeId);\n      }\n    }\n    return overlappingNodes;\n  }\n\n\n  /**\n   * Return a position object in canvasspace from a single point in screenspace\n   *\n   * @param pointer\n   * @returns {{left: number, top: number, right: number, bottom: number}}\n   * @private\n   */\n  _pointerToPositionObject(pointer) {\n    let canvasPos = this.canvas.DOMtoCanvas(pointer);\n    return {\n      left:   canvasPos.x - 1,\n      top:    canvasPos.y + 1,\n      right:  canvasPos.x + 1,\n      bottom: canvasPos.y - 1\n    };\n  }\n\n\n  /**\n   * Get the top node at the a specific point (like a click)\n   *\n   * @param {{x: Number, y: Number}} pointer\n   * @return {Node | undefined} node\n   */\n  getNodeAt(pointer, returnNode = true) {\n    // we first check if this is an navigation controls element\n    let positionObject = this._pointerToPositionObject(pointer);\n    let overlappingNodes = this._getAllNodesOverlappingWith(positionObject);\n    // if there are overlapping nodes, select the last one, this is the\n    // one which is drawn on top of the others\n    if (overlappingNodes.length > 0) {\n      if (returnNode === true) {\n        return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];\n      }\n      else {\n        return overlappingNodes[overlappingNodes.length - 1];\n      }\n    }\n    else {\n      return undefined;\n    }\n  }\n\n\n  /**\n   * retrieve all edges overlapping with given object, selector is around center\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getEdgesOverlappingWith(object, overlappingEdges) {\n    let edges = this.body.edges;\n    for (let i = 0; i < this.body.edgeIndices.length; i++) {\n      let edgeId = this.body.edgeIndices[i];\n      if (edges[edgeId].isOverlappingWith(object)) {\n        overlappingEdges.push(edgeId);\n      }\n    }\n  }\n\n\n  /**\n   * retrieve all nodes overlapping with given object\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getAllEdgesOverlappingWith(object) {\n    let overlappingEdges = [];\n    this._getEdgesOverlappingWith(object,overlappingEdges);\n    return overlappingEdges;\n  }\n\n\n  /**\n   * Place holder. To implement change the getNodeAt to a _getObjectAt. Have the _getObjectAt call\n   * getNodeAt and _getEdgesAt, then priortize the selection to user preferences.\n   *\n   * @param pointer\n   * @returns {undefined}\n   */\n  getEdgeAt(pointer, returnEdge = true) {\n    // Iterate over edges, pick closest within 10\n    var canvasPos = this.canvas.DOMtoCanvas(pointer);\n    var mindist = 10;\n    var overlappingEdge = null;\n    var edges = this.body.edges;\n    for (var i = 0; i < this.body.edgeIndices.length; i++) {\n      var edgeId = this.body.edgeIndices[i];\n      var edge = edges[edgeId];\n      if (edge.connected) {\n        var xFrom = edge.from.x;\n        var yFrom = edge.from.y;\n        var xTo = edge.to.x;\n        var yTo = edge.to.y;\n        var dist = edge.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, canvasPos.x, canvasPos.y);\n        if(dist < mindist){\n          overlappingEdge = edgeId;\n          mindist = dist;\n        }\n      }\n    }\n    if (overlappingEdge) {\n      if (returnEdge === true) {\n        return this.body.edges[overlappingEdge];\n      }\n      else {\n        return overlappingEdge;\n      }\n    }\n    else {\n      return undefined;\n    }\n  }\n\n\n  /**\n   * Add object to the selection array.\n   *\n   * @param obj\n   * @private\n   */\n  _addToSelection(obj) {\n    if (obj instanceof Node) {\n      this.selectionObj.nodes[obj.id] = obj;\n    }\n    else {\n      this.selectionObj.edges[obj.id] = obj;\n    }\n  }\n\n  /**\n   * Add object to the selection array.\n   *\n   * @param obj\n   * @private\n   */\n  _addToHover(obj) {\n    if (obj instanceof Node) {\n      this.hoverObj.nodes[obj.id] = obj;\n    }\n    else {\n      this.hoverObj.edges[obj.id] = obj;\n    }\n  }\n\n\n  /**\n   * Remove a single option from selection.\n   *\n   * @param {Object} obj\n   * @private\n   */\n  _removeFromSelection(obj) {\n    if (obj instanceof Node) {\n      delete this.selectionObj.nodes[obj.id];\n      this._unselectConnectedEdges(obj);\n    }\n    else {\n      delete this.selectionObj.edges[obj.id];\n    }\n  }\n\n  /**\n   * Unselect all. The selectionObj is useful for this.\n   */\n  unselectAll() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        this.selectionObj.nodes[nodeId].unselect();\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        this.selectionObj.edges[edgeId].unselect();\n      }\n    }\n\n    this.selectionObj = {nodes:{},edges:{}};\n  }\n\n\n  /**\n   * return the number of selected nodes\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedNodeCount() {\n    let count = 0;\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  /**\n   * return the selected node\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedNode() {\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        return this.selectionObj.nodes[nodeId];\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * return the selected edge\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedEdge() {\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        return this.selectionObj.edges[edgeId];\n      }\n    }\n    return undefined;\n  }\n\n\n  /**\n   * return the number of selected edges\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedEdgeCount() {\n    let count = 0;\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n\n  /**\n   * return the number of selected objects.\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedObjectCount() {\n    let count = 0;\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        count += 1;\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Check if anything is selected\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _selectionIsEmpty() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        return false;\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * check if one of the selected nodes is a cluster.\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _clusterInSelection() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        if (this.selectionObj.nodes[nodeId].clusterSize > 1) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * select the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _selectConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.select();\n      this._addToSelection(edge);\n    }\n  }\n\n  /**\n   * select the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _hoverConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.hover = true;\n      this._addToHover(edge);\n    }\n  }\n\n\n  /**\n   * unselect the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _unselectConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.unselect();\n      this._removeFromSelection(edge);\n    }\n  }\n\n\n  /**\n   * This is called when someone clicks on a node. either select or deselect it.\n   * If there is an existing selection and we don't want to append to it, clear the existing selection\n   *\n   * @param {Node || Edge} object\n   * @private\n   */\n  blurObject(object) {\n    if (object.hover === true) {\n      object.hover = false;\n      if (object instanceof Node) {\n        this.body.emitter.emit(\"blurNode\", {node: object.id});\n      }\n      else {\n        this.body.emitter.emit(\"blurEdge\", {edge: object.id});\n      }\n    }\n  }\n\n  /**\n   * This is called when someone clicks on a node. either select or deselect it.\n   * If there is an existing selection and we don't want to append to it, clear the existing selection\n   *\n   * @param {Node || Edge} object\n   * @private\n   */\n  hoverObject(object) {\n    let hoverChanged = false;\n    // remove all node hover highlights\n    for (let nodeId in this.hoverObj.nodes) {\n      if (this.hoverObj.nodes.hasOwnProperty(nodeId)) {\n        if (object === undefined || (object instanceof Node && object.id != nodeId) || object instanceof Edge) {\n          this.blurObject(this.hoverObj.nodes[nodeId]);\n          delete this.hoverObj.nodes[nodeId];\n          hoverChanged = true;\n        }\n      }\n    }\n\n    // removing all edge hover highlights\n    for (let edgeId in this.hoverObj.edges) {\n      if (this.hoverObj.edges.hasOwnProperty(edgeId)) {\n        // if the hover has been changed here it means that the node has been hovered over or off\n        // we then do not use the blurObject method here.\n        if (hoverChanged === true) {\n          this.hoverObj.edges[edgeId].hover = false;\n          delete this.hoverObj.edges[edgeId];\n        }\n        // if the blur remains the same and the object is undefined (mouse off) or another\n        // edge has been hovered, or another node has been hovered we blur the edge.\n        else if (object === undefined || (object instanceof Edge && object.id != edgeId) || (object instanceof Node && !object.hover)) {\n          this.blurObject(this.hoverObj.edges[edgeId]);\n          delete this.hoverObj.edges[edgeId];\n          hoverChanged = true;\n        }\n      }\n    }\n\n    if (object !== undefined) {\n      if (object.hover === false) {\n        object.hover = true;\n        this._addToHover(object);\n        hoverChanged = true;\n        if (object instanceof Node) {\n          this.body.emitter.emit(\"hoverNode\", {node: object.id});\n        }\n        else {\n          this.body.emitter.emit(\"hoverEdge\", {edge: object.id});\n        }\n      }\n      if (object instanceof Node && this.options.hoverConnectedEdges === true) {\n        this._hoverConnectedEdges(object);\n      }\n    }\n\n    if (hoverChanged === true) {\n      this.body.emitter.emit('_requestRedraw');\n    }\n  }\n\n\n\n\n  /**\n   *\n   * retrieve the currently selected objects\n   * @return {{nodes: Array.<String>, edges: Array.<String>}} selection\n   */\n  getSelection() {\n    let nodeIds = this.getSelectedNodes();\n    let edgeIds = this.getSelectedEdges();\n    return {nodes:nodeIds, edges:edgeIds};\n  }\n\n  /**\n   *\n   * retrieve the currently selected nodes\n   * @return {String[]} selection    An array with the ids of the\n   *                                            selected nodes.\n   */\n  getSelectedNodes() {\n    let idArray = [];\n    if (this.options.selectable === true) {\n      for (let nodeId in this.selectionObj.nodes) {\n        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n          idArray.push(this.selectionObj.nodes[nodeId].id);\n        }\n      }\n    }\n    return idArray;\n  }\n\n  /**\n   *\n   * retrieve the currently selected edges\n   * @return {Array} selection    An array with the ids of the\n   *                                            selected nodes.\n   */\n  getSelectedEdges() {\n    let idArray = [];\n    if (this.options.selectable === true) {\n      for (let edgeId in this.selectionObj.edges) {\n        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n          idArray.push(this.selectionObj.edges[edgeId].id);\n        }\n      }\n    }\n    return idArray;\n  }\n\n  /**\n   * Updates the current selection\n   * @param {{nodes: Array.<String>, edges: Array.<String>}} Selection\n   * @param {Object} options                                 Options\n   */\n  setSelection(selection, options = {}) {\n    let i, id;\n\n    if (!selection || (!selection.nodes && !selection.edges))\n      throw 'Selection must be an object with nodes and/or edges properties';\n    // first unselect any selected node, if option is true or undefined\n    if (options.unselectAll || options.unselectAll === undefined) {\n      this.unselectAll();\n    }\n    if (selection.nodes) {\n      for (i = 0; i < selection.nodes.length; i++) {\n        id = selection.nodes[i];\n\n        let node = this.body.nodes[id];\n        if (!node) {\n          throw new RangeError('Node with id \"' + id + '\" not found');\n        }\n        // don't select edges with it\n        this.selectObject(node, options.highlightEdges);\n      }\n    }\n\n    if (selection.edges) {\n      for (i = 0; i < selection.edges.length; i++) {\n        id = selection.edges[i];\n\n        let edge = this.body.edges[id];\n        if (!edge) {\n          throw new RangeError('Edge with id \"' + id + '\" not found');\n        }\n        this.selectObject(edge);\n      }\n    }\n    this.body.emitter.emit('_requestRedraw');\n  }\n\n\n  /**\n   * select zero or more nodes with the option to highlight edges\n   * @param {Number[] | String[]} selection     An array with the ids of the\n   *                                            selected nodes.\n   * @param {boolean} [highlightEdges]\n   */\n  selectNodes(selection, highlightEdges = true) {\n    if (!selection || (selection.length === undefined))\n      throw 'Selection must be an array with ids';\n\n    this.setSelection({nodes: selection}, {highlightEdges: highlightEdges});\n  }\n\n\n  /**\n   * select zero or more edges\n   * @param {Number[] | String[]} selection     An array with the ids of the\n   *                                            selected nodes.\n   */\n  selectEdges(selection) {\n    if (!selection || (selection.length === undefined))\n      throw 'Selection must be an array with ids';\n\n    this.setSelection({edges: selection});\n  }\n\n  /**\n   * Validate the selection: remove ids of nodes which no longer exist\n   * @private\n   */\n  updateSelection() {\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        if (!this.body.nodes.hasOwnProperty(nodeId)) {\n          delete this.selectionObj.nodes[nodeId];\n        }\n      }\n    }\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        if (!this.body.edges.hasOwnProperty(edgeId)) {\n          delete this.selectionObj.edges[edgeId];\n        }\n      }\n    }\n  }\n}\n\nexport default SelectionHandler;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/SelectionHandler.js","'use strict';\n\nlet util = require('../../util');\nimport NetworkUtil from '../NetworkUtil';\n\nclass LayoutEngine {\n  constructor(body) {\n    this.body = body;\n\n    this.initialRandomSeed = Math.round(Math.random() * 1000000);\n    this.randomSeed = this.initialRandomSeed;\n    this.setPhysics = false;\n    this.options = {};\n    this.optionsBackup = {physics:{}};\n\n    this.defaultOptions = {\n      randomSeed: undefined,\n      improvedLayout: true,\n      hierarchical: {\n        enabled:false,\n        levelSeparation: 150,\n        nodeSpacing: 100,\n        treeSpacing: 200,\n        blockShifting: true,\n        edgeMinimization: true,\n        parentCentralization: true,\n        direction: 'UD',   // UD, DU, LR, RL\n        sortMethod: 'hubsize' // hubsize, directed\n      }\n    };\n    util.extend(this.options, this.defaultOptions);\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('_dataChanged', () => {\n      this.setupHierarchicalLayout();\n    });\n    this.body.emitter.on('_dataLoaded', () => {\n      this.layoutNetwork();\n    });\n    this.body.emitter.on('_resetHierarchicalLayout', () => {\n      this.setupHierarchicalLayout();\n    });\n  }\n\n  setOptions(options, allOptions) {\n    if (options !== undefined) {\n      let prevHierarchicalState = this.options.hierarchical.enabled;\n      util.selectiveDeepExtend([\"randomSeed\", \"improvedLayout\"],this.options, options);\n      util.mergeOptions(this.options, options, 'hierarchical');\n      if (options.randomSeed !== undefined)     {this.initialRandomSeed = options.randomSeed;}\n\n      if (this.options.hierarchical.enabled === true) {\n        if (prevHierarchicalState === true) {\n          // refresh the overridden options for nodes and edges.\n          this.body.emitter.emit('refresh', true);\n        }\n\n        // make sure the level separation is the right way up\n        if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'DU') {\n          if (this.options.hierarchical.levelSeparation > 0) {\n            this.options.hierarchical.levelSeparation *= -1;\n          }\n        }\n        else {\n          if (this.options.hierarchical.levelSeparation < 0) {\n            this.options.hierarchical.levelSeparation *= -1;\n          }\n        }\n\n        this.body.emitter.emit('_resetHierarchicalLayout');\n        // because the hierarchical system needs it's own physics and smooth curve settings, we adapt the other options if needed.\n        return this.adaptAllOptionsForHierarchicalLayout(allOptions);\n      }\n      else {\n        if (prevHierarchicalState === true) {\n          // refresh the overridden options for nodes and edges.\n          this.body.emitter.emit('refresh');\n          return util.deepExtend(allOptions,this.optionsBackup);\n        }\n      }\n    }\n    return allOptions;\n  }\n\n  adaptAllOptionsForHierarchicalLayout(allOptions) {\n    if (this.options.hierarchical.enabled === true) {\n      // set the physics\n      if (allOptions.physics === undefined || allOptions.physics === true) {\n        allOptions.physics = {\n          enabled:this.optionsBackup.physics.enabled === undefined ? true :  this.optionsBackup.physics.enabled,\n          solver:'hierarchicalRepulsion'\n        };\n        this.optionsBackup.physics.enabled = this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled;\n        this.optionsBackup.physics.solver = this.optionsBackup.physics.solver || 'barnesHut';\n      }\n      else if (typeof allOptions.physics === 'object') {\n        this.optionsBackup.physics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled;\n        this.optionsBackup.physics.solver  = allOptions.physics.solver  || 'barnesHut';\n        allOptions.physics.solver = 'hierarchicalRepulsion';\n      }\n      else if (allOptions.physics !== false) {\n        this.optionsBackup.physics.solver ='barnesHut';\n        allOptions.physics = {solver:'hierarchicalRepulsion'};\n      }\n\n      // get the type of static smooth curve in case it is required\n      let type = 'horizontal';\n      if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'LR') {\n        type = 'vertical';\n      }\n\n      // disable smooth curves if nothing is defined. If smooth curves have been turned on, turn them into static smooth curves.\n      if (allOptions.edges === undefined) {\n        this.optionsBackup.edges = {smooth:{enabled:true, type:'dynamic'}};\n        allOptions.edges = {smooth: false};\n      }\n      else if (allOptions.edges.smooth === undefined) {\n        this.optionsBackup.edges = {smooth:{enabled:true, type:'dynamic'}};\n        allOptions.edges.smooth = false;\n      }\n      else {\n        if (typeof allOptions.edges.smooth === 'boolean') {\n          this.optionsBackup.edges = {smooth:allOptions.edges.smooth};\n          allOptions.edges.smooth = {enabled: allOptions.edges.smooth, type:type}\n        }\n        else {\n          // allow custom types except for dynamic\n          if (allOptions.edges.smooth.type !== undefined && allOptions.edges.smooth.type !== 'dynamic') {\n            type = allOptions.edges.smooth.type;\n          }\n\n          this.optionsBackup.edges = {\n            smooth: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled,\n            type: allOptions.edges.smooth.type === undefined ? 'dynamic' : allOptions.edges.smooth.type,\n            roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness,\n            forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection\n          };\n          allOptions.edges.smooth = {\n            enabled: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled,\n            type:type,\n            roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness,\n            forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection\n          }\n        }\n      }\n\n      // force all edges into static smooth curves. Only applies to edges that do not use the global options for smooth.\n      this.body.emitter.emit('_forceDisableDynamicCurves', type);\n    }\n\n    return allOptions;\n  }\n\n  seededRandom() {\n    let x = Math.sin(this.randomSeed++) * 10000;\n    return x - Math.floor(x);\n  }\n\n  positionInitially(nodesArray) {\n    if (this.options.hierarchical.enabled !== true) {\n      this.randomSeed = this.initialRandomSeed;\n      for (let i = 0; i < nodesArray.length; i++) {\n        let node = nodesArray[i];\n        let radius = 10 * 0.1 * nodesArray.length + 10;\n        let angle = 2 * Math.PI * this.seededRandom();\n        if (node.x === undefined) {\n          node.x = radius * Math.cos(angle);\n        }\n        if (node.y === undefined) {\n          node.y = radius * Math.sin(angle);\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we\n   * cluster them first to reduce the amount.\n   */\n  layoutNetwork() {\n    if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) {\n      // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible\n      // nodes have predefined positions we use this.\n      let positionDefined = 0;\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        if (node.predefinedPosition === true) {\n          positionDefined += 1;\n        }\n      }\n\n      // if less than half of the nodes have a predefined position we continue\n      if (positionDefined < 0.5 * this.body.nodeIndices.length) {\n        let MAX_LEVELS = 10;\n        let level = 0;\n        let clusterThreshold = 100;\n        // if there are a lot of nodes, we cluster before we run the algorithm.\n        if (this.body.nodeIndices.length > clusterThreshold) {\n          let startLength = this.body.nodeIndices.length;\n          while (this.body.nodeIndices.length > clusterThreshold) {\n            //console.time(\"clustering\")\n            level += 1;\n            let before = this.body.nodeIndices.length;\n            // if there are many nodes we do a hubsize cluster\n            if (level % 3 === 0) {\n              this.body.modules.clustering.clusterBridges();\n            }\n            else {\n              this.body.modules.clustering.clusterOutliers();\n            }\n            let after = this.body.nodeIndices.length;\n            if ((before == after && level % 3 !== 0) || level > MAX_LEVELS) {\n              this._declusterAll();\n              this.body.emitter.emit(\"_layoutFailed\");\n              console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\");\n              return;\n            }\n            //console.timeEnd(\"clustering\")\n            //console.log(level,after)\n          }\n          // increase the size of the edges\n          this.body.modules.kamadaKawai.setOptions({springLength: Math.max(150, 2 * startLength)})\n        }\n\n        // position the system for these nodes and edges\n        this.body.modules.kamadaKawai.solve(this.body.nodeIndices, this.body.edgeIndices, true);\n\n        // shift to center point\n        this._shiftToCenter();\n\n        // perturb the nodes a little bit to force the physics to kick in\n        let offset = 70;\n        for (let i = 0; i < this.body.nodeIndices.length; i++) {\n          // Only perturb the nodes that aren't fixed\n          if (this.body.nodes[this.body.nodeIndices[i]].predefinedPosition === false) {\n            this.body.nodes[this.body.nodeIndices[i]].x += (0.5 - this.seededRandom())*offset;\n            this.body.nodes[this.body.nodeIndices[i]].y += (0.5 - this.seededRandom())*offset;\n          }\n        }\n\n        // uncluster all clusters\n        this._declusterAll();\n\n        // reposition all bezier nodes.\n        this.body.emitter.emit(\"_repositionBezierNodes\");\n      }\n    }\n  }\n\n  /**\n   * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view\n   * @private\n   */\n  _shiftToCenter() {\n    let range = NetworkUtil.getRangeCore(this.body.nodes, this.body.nodeIndices);\n    let center = NetworkUtil.findCenter(range);\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      this.body.nodes[this.body.nodeIndices[i]].x -= center.x;\n      this.body.nodes[this.body.nodeIndices[i]].y -= center.y;\n    }\n  }\n\n  _declusterAll() {\n    let clustersPresent = true;\n    while (clustersPresent === true) {\n      clustersPresent = false;\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {\n          clustersPresent = true;\n          this.body.modules.clustering.openCluster(this.body.nodeIndices[i], {}, false);\n        }\n      }\n      if (clustersPresent === true) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n  getSeed() {\n    return this.initialRandomSeed;\n  }\n\n  /**\n   * This is the main function to layout the nodes in a hierarchical way.\n   * It checks if the node details are supplied correctly\n   *\n   * @private\n   */\n  setupHierarchicalLayout() {\n    if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) {\n      // get the size of the largest hubs and check if the user has defined a level for a node.\n      let node, nodeId;\n      let definedLevel = false;\n      let definedPositions = true;\n      let undefinedLevel = false;\n      this.hierarchicalLevels = {};\n      this.lastNodeOnLevel = {};\n      this.hierarchicalChildrenReference = {};\n      this.hierarchicalParentReference = {};\n      this.hierarchicalTrees = {};\n      this.treeIndex = -1;\n\n      this.distributionOrdering = {};\n      this.distributionIndex = {};\n      this.distributionOrderingPresence = {};\n\n\n      for (nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          node = this.body.nodes[nodeId];\n          if (node.options.x === undefined && node.options.y === undefined) {\n            definedPositions = false;\n          }\n          if (node.options.level !== undefined) {\n            definedLevel = true;\n            this.hierarchicalLevels[nodeId] = node.options.level;\n          }\n          else {\n            undefinedLevel = true;\n          }\n        }\n      }\n\n      // if the user defined some levels but not all, alert and run without hierarchical layout\n      if (undefinedLevel === true && definedLevel === true) {\n        throw new Error('To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.');\n        return;\n      }\n      else {\n        // define levels if undefined by the users. Based on hubsize.\n        if (undefinedLevel === true) {\n          if (this.options.hierarchical.sortMethod === 'hubsize') {\n            this._determineLevelsByHubsize();\n          }\n          else if (this.options.hierarchical.sortMethod === 'directed') {\n            this._determineLevelsDirected();\n          }\n          else if (this.options.hierarchical.sortMethod === 'custom') {\n            this._determineLevelsCustomCallback();\n          }\n        }\n\n\n        // fallback for cases where there are nodes but no edges\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            if (this.hierarchicalLevels[nodeId] === undefined) {\n              this.hierarchicalLevels[nodeId] = 0;\n            }\n          }\n        }\n        // check the distribution of the nodes per level.\n        let distribution = this._getDistribution();\n\n        // get the parent children relations.\n        this._generateMap();\n\n        // place the nodes on the canvas.\n        this._placeNodesByHierarchy(distribution);\n\n        // condense the whitespace.\n        this._condenseHierarchy();\n\n        // shift to center so gravity does not have to do much\n        this._shiftToCenter();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  _condenseHierarchy() {\n    // Global var in this scope to define when the movement has stopped.\n    let stillShifting = false;\n    let branches = {};\n    // first we have some methods to help shifting trees around.\n    // the main method to shift the trees\n    let shiftTrees = () => {\n      let treeSizes = getTreeSizes();\n      for (let i = 0; i < treeSizes.length - 1; i++) {\n        let diff = treeSizes[i].max - treeSizes[i+1].min;\n        shiftTree(i + 1, diff + this.options.hierarchical.treeSpacing);\n      }\n    };\n\n    // shift a single tree by an offset\n    let shiftTree = (index, offset) => {\n      for (let nodeId in this.hierarchicalTrees) {\n        if (this.hierarchicalTrees.hasOwnProperty(nodeId)) {\n          if (this.hierarchicalTrees[nodeId] === index) {\n            let node = this.body.nodes[nodeId];\n            let pos = this._getPositionForHierarchy(node);\n            this._setPositionForHierarchy(node, pos + offset, undefined, true);\n          }\n        }\n      }\n    };\n\n    // get the width of a tree\n    let getTreeSize = (index) => {\n      let min = 1e9;\n      let max = -1e9;\n      for (let nodeId in this.hierarchicalTrees) {\n        if (this.hierarchicalTrees.hasOwnProperty(nodeId)) {\n          if (this.hierarchicalTrees[nodeId] === index) {\n            let pos = this._getPositionForHierarchy(this.body.nodes[nodeId]);\n            min = Math.min(pos, min);\n            max = Math.max(pos, max);\n          }\n        }\n      }\n      return {min:min, max:max};\n    };\n\n    // get the width of all trees\n    let getTreeSizes = () => {\n      let treeWidths = [];\n      for (let i = 0; i <= this.treeIndex; i++) {\n        treeWidths.push(getTreeSize(i));\n      }\n      return treeWidths;\n    };\n\n\n    // get a map of all nodes in this branch\n    let getBranchNodes = (source, map) => {\n      map[source.id] = true;\n      if (this.hierarchicalChildrenReference[source.id]) {\n        let children = this.hierarchicalChildrenReference[source.id];\n        if (children.length > 0) {\n          for (let i = 0; i < children.length; i++) {\n            getBranchNodes(this.body.nodes[children[i]], map);\n          }\n        }\n      }\n    };\n\n    // get a min max width as well as the maximum movement space it has on either sides\n    // we use min max terminology because width and height can interchange depending on the direction of the layout\n    let getBranchBoundary = (branchMap, maxLevel = 1e9) => {\n      let minSpace = 1e9;\n      let maxSpace = 1e9;\n      let min = 1e9;\n      let max = -1e9;\n      for (let branchNode in branchMap) {\n        if (branchMap.hasOwnProperty(branchNode)) {\n          let node = this.body.nodes[branchNode];\n          let level = this.hierarchicalLevels[node.id];\n          let position = this._getPositionForHierarchy(node);\n\n          // get the space around the node.\n          let [minSpaceNode, maxSpaceNode] = this._getSpaceAroundNode(node,branchMap);\n          minSpace = Math.min(minSpaceNode, minSpace);\n          maxSpace = Math.min(maxSpaceNode, maxSpace);\n\n          // the width is only relevant for the levels two nodes have in common. This is why we filter on this.\n          if (level <= maxLevel) {\n            min = Math.min(position, min);\n            max = Math.max(position, max);\n          }\n        }\n      }\n\n      return [min, max, minSpace, maxSpace];\n    };\n\n    // get the maximum level of a branch.\n    let getMaxLevel = (nodeId) => {\n      let level = this.hierarchicalLevels[nodeId];\n      if (this.hierarchicalChildrenReference[nodeId]) {\n        let children = this.hierarchicalChildrenReference[nodeId];\n        if (children.length > 0) {\n          for (let i = 0; i < children.length; i++) {\n            level = Math.max(level,getMaxLevel(children[i]));\n          }\n        }\n      }\n      return level;\n    };\n\n    // check what the maximum level is these nodes have in common.\n    let getCollisionLevel = (node1, node2) => {\n      let maxLevel1 = getMaxLevel(node1.id);\n      let maxLevel2 = getMaxLevel(node2.id);\n      return Math.min(maxLevel1, maxLevel2);\n    };\n\n    // check if two nodes have the same parent(s)\n    let hasSameParent = (node1, node2) => {\n      let parents1 = this.hierarchicalParentReference[node1.id];\n      let parents2 = this.hierarchicalParentReference[node2.id];\n      if (parents1 === undefined || parents2 === undefined) {\n        return false;\n      }\n\n      for (let i = 0; i < parents1.length; i++) {\n        for (let j = 0; j < parents2.length; j++) {\n          if (parents1[i] == parents2[j]) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n\n    // condense elements. These can be nodes or branches depending on the callback.\n    let shiftElementsCloser = (callback, levels, centerParents) => {\n      for (let i = 0; i < levels.length; i++) {\n        let level = levels[i];\n        let levelNodes = this.distributionOrdering[level];\n        if (levelNodes.length > 1) {\n          for (let j = 0; j < levelNodes.length - 1; j++) {\n            if (hasSameParent(levelNodes[j],levelNodes[j+1]) === true)  {\n              if (this.hierarchicalTrees[levelNodes[j].id] === this.hierarchicalTrees[levelNodes[j+1].id])  {\n                callback(levelNodes[j],levelNodes[j+1], centerParents);\n              }\n            }}\n        }\n      }\n    };\n\n    // callback for shifting branches\n    let branchShiftCallback = (node1, node2, centerParent = false) => {\n      //window.CALLBACKS.push(() => {\n        let pos1 = this._getPositionForHierarchy(node1);\n        let pos2 = this._getPositionForHierarchy(node2);\n        let diffAbs = Math.abs(pos2 - pos1);\n        //console.log(\"NOW CHEcKING:\", node1.id, node2.id, diffAbs);\n        if (diffAbs > this.options.hierarchical.nodeSpacing) {\n          let branchNodes1 = {}; branchNodes1[node1.id] = true;\n          let branchNodes2 = {}; branchNodes2[node2.id] = true;\n\n          getBranchNodes(node1, branchNodes1);\n          getBranchNodes(node2, branchNodes2);\n\n          // check the largest distance between the branches\n          let maxLevel = getCollisionLevel(node1, node2);\n          let [min1,max1, minSpace1, maxSpace1] = getBranchBoundary(branchNodes1, maxLevel);\n          let [min2,max2, minSpace2, maxSpace2] = getBranchBoundary(branchNodes2, maxLevel);\n\n          //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id, getBranchBoundary(branchNodes2, maxLevel), maxLevel);\n          let diffBranch = Math.abs(max1 - min2);\n          if (diffBranch > this.options.hierarchical.nodeSpacing) {\n            let offset = max1 - min2 + this.options.hierarchical.nodeSpacing;\n            if (offset < -minSpace2 + this.options.hierarchical.nodeSpacing) {\n              offset = -minSpace2 + this.options.hierarchical.nodeSpacing;\n              //console.log(\"RESETTING OFFSET\", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);\n            }\n            if (offset < 0) {\n              //console.log(\"SHIFTING\", node2.id, offset);\n              this._shiftBlock(node2.id, offset);\n              stillShifting = true;\n\n              if (centerParent === true)\n                this._centerParent(node2);\n            }\n          }\n\n        }\n        //this.body.emitter.emit(\"_redraw\");})\n    };\n\n    let minimizeEdgeLength = (iterations, node) => {\n      //window.CALLBACKS.push(() => {\n      //  console.log(\"ts\",node.id);\n        let nodeId = node.id;\n        let allEdges = node.edges;\n        let nodeLevel = this.hierarchicalLevels[node.id];\n\n        // gather constants\n        let C2 = this.options.hierarchical.levelSeparation * this.options.hierarchical.levelSeparation;\n        let referenceNodes = {};\n        let aboveEdges = [];\n        for (let i = 0; i < allEdges.length; i++) {\n          let edge = allEdges[i];\n          if (edge.toId != edge.fromId) {\n            let otherNode = edge.toId == nodeId ? edge.from : edge.to;\n            referenceNodes[allEdges[i].id] = otherNode;\n            if (this.hierarchicalLevels[otherNode.id] < nodeLevel) {\n              aboveEdges.push(edge);\n            }\n          }\n        }\n\n        // differentiated sum of lengths based on only moving one node over one axis\n        let getFx = (point, edges) => {\n          let sum = 0;\n          for (let i = 0; i < edges.length; i++) {\n            if (referenceNodes[edges[i].id] !== undefined) {\n              let a = this._getPositionForHierarchy(referenceNodes[edges[i].id]) - point;\n              sum += a / Math.sqrt(a * a + C2);\n            }\n          }\n          return sum;\n        };\n\n        // doubly differentiated sum of lengths based on only moving one node over one axis\n        let getDFx = (point, edges) => {\n          let sum = 0;\n          for (let i = 0; i < edges.length; i++) {\n            if (referenceNodes[edges[i].id] !== undefined) {\n              let a = this._getPositionForHierarchy(referenceNodes[edges[i].id]) - point;\n              sum -= (C2 * Math.pow(a * a + C2, -1.5));\n            }\n          }\n          return sum;\n        };\n\n        let getGuess = (iterations, edges) => {\n          let guess = this._getPositionForHierarchy(node);\n          // Newton's method for optimization\n          let guessMap = {};\n          for (let i = 0; i < iterations; i++) {\n            let fx = getFx(guess, edges);\n            let dfx = getDFx(guess, edges);\n\n            // we limit the movement to avoid instability.\n            let limit = 40;\n            let ratio = Math.max(-limit, Math.min(limit, Math.round(fx/dfx)));\n            guess = guess - ratio;\n            // reduce duplicates\n            if (guessMap[guess] !== undefined) {\n              break;\n            }\n            guessMap[guess] = i;\n          }\n          return guess;\n        };\n\n        let moveBranch = (guess) => {\n          // position node if there is space\n          let nodePosition = this._getPositionForHierarchy(node);\n\n          // check movable area of the branch\n          if (branches[node.id] === undefined) {\n            let branchNodes = {};\n            branchNodes[node.id] = true;\n            getBranchNodes(node, branchNodes);\n            branches[node.id] = branchNodes;\n          }\n          let [minBranch, maxBranch, minSpaceBranch, maxSpaceBranch] = getBranchBoundary(branches[node.id]);\n\n          let diff = guess - nodePosition;\n\n          // check if we are allowed to move the node:\n          let branchOffset = 0;\n          if (diff > 0) {\n            branchOffset = Math.min(diff, maxSpaceBranch - this.options.hierarchical.nodeSpacing);\n          }\n          else if (diff < 0) {\n            branchOffset = -Math.min(-diff, minSpaceBranch - this.options.hierarchical.nodeSpacing);\n          }\n\n          if (branchOffset != 0) {\n            //console.log(\"moving branch:\",branchOffset, maxSpaceBranch, minSpaceBranch)\n            this._shiftBlock(node.id, branchOffset);\n            //this.body.emitter.emit(\"_redraw\");\n            stillShifting = true;\n          }\n        };\n\n        let moveNode = (guess) => {\n          let nodePosition = this._getPositionForHierarchy(node);\n\n          // position node if there is space\n          let [minSpace, maxSpace] = this._getSpaceAroundNode(node);\n          let diff = guess - nodePosition;\n          // check if we are allowed to move the node:\n          let newPosition = nodePosition;\n          if (diff > 0) {\n            newPosition = Math.min(nodePosition + (maxSpace - this.options.hierarchical.nodeSpacing), guess);\n          }\n          else if (diff < 0) {\n            newPosition = Math.max(nodePosition - (minSpace - this.options.hierarchical.nodeSpacing), guess);\n          }\n\n          if (newPosition !== nodePosition) {\n            //console.log(\"moving Node:\",diff, minSpace, maxSpace);\n            this._setPositionForHierarchy(node, newPosition, undefined, true);\n            //this.body.emitter.emit(\"_redraw\");\n            stillShifting = true;\n          }\n        };\n\n        let guess = getGuess(iterations, aboveEdges);\n        moveBranch(guess);\n        guess = getGuess(iterations, allEdges);\n        moveNode(guess);\n      //})\n    };\n\n    // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n    let minimizeEdgeLengthBottomUp = (iterations) => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < iterations; i++) {\n        stillShifting = false;\n        for (let j = 0; j < levels.length; j++) {\n          let level = levels[j];\n          let levelNodes = this.distributionOrdering[level];\n          for (let k = 0; k < levelNodes.length; k++) {\n            minimizeEdgeLength(1000, levelNodes[k]);\n          }\n        }\n        if (stillShifting !== true) {\n          //console.log(\"FINISHED minimizeEdgeLengthBottomUp IN \" + i);\n          break;\n        }\n      }\n    };\n\n    // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n    let shiftBranchesCloserBottomUp = (iterations) => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < iterations; i++) {\n        stillShifting = false;\n        shiftElementsCloser(branchShiftCallback, levels, true);\n        if (stillShifting !== true) {\n          //console.log(\"FINISHED shiftBranchesCloserBottomUp IN \" + (i+1));\n          break;\n        }\n      }\n    };\n\n    // center all parents\n    let centerAllParents = () => {\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId))\n          this._centerParent(this.body.nodes[nodeId]);\n      }\n    };\n\n    // center all parents\n    let centerAllParentsBottomUp = () => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < levels.length; i++) {\n        let level = levels[i];\n        let levelNodes = this.distributionOrdering[level];\n        for (let j = 0; j < levelNodes.length; j++) {\n          this._centerParent(levelNodes[j]);\n        }\n      }\n    };\n\n    // the actual work is done here.\n    if (this.options.hierarchical.blockShifting === true) {\n      shiftBranchesCloserBottomUp(5);\n      centerAllParents();\n    }\n\n    // minimize edge length\n    if (this.options.hierarchical.edgeMinimization === true) {\n      minimizeEdgeLengthBottomUp(20);\n    }\n\n    if (this.options.hierarchical.parentCentralization === true) {\n      centerAllParentsBottomUp()\n    }\n\n    shiftTrees();\n  }\n\n  /**\n   * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.\n   * This is used to only get the distances to nodes outside of a branch.\n   * @param node\n   * @param map\n   * @returns {*[]}\n   * @private\n   */\n  _getSpaceAroundNode(node, map) {\n    let useMap = true;\n    if (map === undefined) {\n      useMap = false;\n    }\n    let level = this.hierarchicalLevels[node.id];\n    if (level !== undefined) {\n      let index = this.distributionIndex[node.id];\n      let position = this._getPositionForHierarchy(node);\n      let minSpace = 1e9;\n      let maxSpace = 1e9;\n      if (index !== 0) {\n        let prevNode = this.distributionOrdering[level][index - 1];\n        if ((useMap === true && map[prevNode.id] === undefined) || useMap === false) {\n          let prevPos = this._getPositionForHierarchy(prevNode);\n          minSpace = position - prevPos;\n        }\n      }\n\n      if (index != this.distributionOrdering[level].length - 1) {\n        let nextNode = this.distributionOrdering[level][index + 1];\n        if ((useMap === true && map[nextNode.id] === undefined) || useMap === false) {\n          let nextPos = this._getPositionForHierarchy(nextNode);\n          maxSpace = Math.min(maxSpace, nextPos - position);\n        }\n      }\n\n      return [minSpace, maxSpace];\n    }\n    else {\n      return [0, 0];\n    }\n  }\n\n  /**\n   * We use this method to center a parent node and check if it does not cross other nodes when it does.\n   * @param node\n   * @private\n   */\n  _centerParent(node) {\n    if (this.hierarchicalParentReference[node.id]) {\n      let parents = this.hierarchicalParentReference[node.id];\n      for (var i = 0; i < parents.length; i++) {\n        let parentId = parents[i];\n        let parentNode = this.body.nodes[parentId];\n        if (this.hierarchicalChildrenReference[parentId]) {\n          // get the range of the children\n          let minPos = 1e9;\n          let maxPos = -1e9;\n          let children = this.hierarchicalChildrenReference[parentId];\n          if (children.length > 0) {\n            for (let i = 0; i < children.length; i++) {\n              let childNode = this.body.nodes[children[i]];\n              minPos = Math.min(minPos, this._getPositionForHierarchy(childNode));\n              maxPos = Math.max(maxPos, this._getPositionForHierarchy(childNode));\n            }\n          }\n\n          let position = this._getPositionForHierarchy(parentNode);\n          let [minSpace, maxSpace] = this._getSpaceAroundNode(parentNode);\n          let newPosition = 0.5 * (minPos + maxPos);\n          let diff = position - newPosition;\n          if ((diff < 0 && Math.abs(diff) < maxSpace - this.options.hierarchical.nodeSpacing) || (diff > 0 && Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing))  {\n            this._setPositionForHierarchy(parentNode, newPosition, undefined, true);\n          }\n        }\n      }\n    }\n  }\n\n\n\n  /**\n   * This function places the nodes on the canvas based on the hierarchial distribution.\n   *\n   * @param {Object} distribution | obtained by the function this._getDistribution()\n   * @private\n   */\n  _placeNodesByHierarchy(distribution) {\n    this.positionedNodes = {};\n    // start placing all the level 0 nodes first. Then recursively position their branches.\n    for (let level in distribution) {\n      if (distribution.hasOwnProperty(level)) {\n        // sort nodes in level by position:\n        let nodeArray = Object.keys(distribution[level]);\n        nodeArray = this._indexArrayToNodes(nodeArray);\n        this._sortNodeArray(nodeArray);\n        let handledNodeCount = 0;\n\n        for (let i = 0; i < nodeArray.length; i++) {\n          let node = nodeArray[i];\n          if (this.positionedNodes[node.id] === undefined) {\n            let pos = this.options.hierarchical.nodeSpacing * handledNodeCount;\n            // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y\n            if (handledNodeCount > 0) {pos = this._getPositionForHierarchy(nodeArray[i-1]) + this.options.hierarchical.nodeSpacing;}\n            this._setPositionForHierarchy(node, pos, level);\n            this._validataPositionAndContinue(node, level, pos);\n\n            handledNodeCount++;\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes\n   * on a X position that ensures there will be no overlap.\n   *\n   * @param parentId\n   * @param parentLevel\n   * @private\n   */\n  _placeBranchNodes(parentId, parentLevel) {\n    // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.\n    if (this.hierarchicalChildrenReference[parentId] === undefined) {\n      return;\n    }\n\n    // get a list of childNodes\n    let childNodes = [];\n    for (let i = 0; i < this.hierarchicalChildrenReference[parentId].length; i++) {\n      childNodes.push(this.body.nodes[this.hierarchicalChildrenReference[parentId][i]]);\n    }\n\n    // use the positions to order the nodes.\n    this._sortNodeArray(childNodes);\n\n    // position the childNodes\n    for (let i = 0; i < childNodes.length; i++) {\n      let childNode = childNodes[i];\n      let childNodeLevel = this.hierarchicalLevels[childNode.id];\n      // check if the child node is below the parent node and if it has already been positioned.\n      if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) {\n        // get the amount of space required for this node. If parent the width is based on the amount of children.\n        let pos;\n\n        // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y\n        if (i === 0) {pos = this._getPositionForHierarchy(this.body.nodes[parentId]);}\n        else         {pos = this._getPositionForHierarchy(childNodes[i-1]) + this.options.hierarchical.nodeSpacing;}\n        this._setPositionForHierarchy(childNode, pos, childNodeLevel);\n        this._validataPositionAndContinue(childNode, childNodeLevel, pos);\n      }\n      else {\n        return;\n      }\n    }\n\n    // center the parent nodes.\n    let minPos = 1e9;\n    let maxPos = -1e9;\n    for (let i = 0; i < childNodes.length; i++) {\n      let childNodeId = childNodes[i].id;\n      minPos = Math.min(minPos, this._getPositionForHierarchy(this.body.nodes[childNodeId]));\n      maxPos = Math.max(maxPos, this._getPositionForHierarchy(this.body.nodes[childNodeId]));\n    }\n    this._setPositionForHierarchy(this.body.nodes[parentId], 0.5 * (minPos + maxPos), parentLevel);\n  }\n\n\n  /**\n   * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.\n   * Finally it will call _placeBranchNodes to place the branch nodes.\n   * @param node\n   * @param level\n   * @param pos\n   * @private\n   */\n  _validataPositionAndContinue(node, level, pos) {\n    // if overlap has been detected, we shift the branch\n    if (this.lastNodeOnLevel[level] !== undefined) {\n      let previousPos = this._getPositionForHierarchy(this.body.nodes[this.lastNodeOnLevel[level]]);\n      if (pos - previousPos < this.options.hierarchical.nodeSpacing) {\n        let diff = (previousPos + this.options.hierarchical.nodeSpacing) - pos;\n        let sharedParent = this._findCommonParent(this.lastNodeOnLevel[level], node.id);\n        this._shiftBlock(sharedParent.withChild, diff);\n      }\n    }\n\n    // store change in position.\n    this.lastNodeOnLevel[level] = node.id;\n\n    this.positionedNodes[node.id] = true;\n\n    this._placeBranchNodes(node.id, level);\n  }\n\n  /**\n   * Receives an array with node indices and returns an array with the actual node references. Used for sorting based on\n   * node properties.\n   * @param idArray\n   */\n  _indexArrayToNodes(idArray) {\n    let array = [];\n    for (let i = 0; i < idArray.length; i++) {\n      array.push(this.body.nodes[idArray[i]])\n    }\n    return array;\n  }\n\n  /**\n   * This function get the distribution of levels based on hubsize\n   *\n   * @returns {Object}\n   * @private\n   */\n  _getDistribution() {\n    let distribution = {};\n    let nodeId, node;\n\n    // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time.\n    // the fix of X is removed after the x value has been set.\n    for (nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        node = this.body.nodes[nodeId];\n        let level = this.hierarchicalLevels[nodeId] === undefined ? 0 : this.hierarchicalLevels[nodeId];\n        if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n          node.y = this.options.hierarchical.levelSeparation * level;\n          node.options.fixed.y = true;\n        }\n        else {\n          node.x = this.options.hierarchical.levelSeparation * level;\n          node.options.fixed.x = true;\n        }\n        if (distribution[level] === undefined) {\n          distribution[level] = {};\n        }\n        distribution[level][nodeId] = node;\n      }\n    }\n    return distribution;\n  }\n\n\n  /**\n   * Get the hubsize from all remaining unlevelled nodes.\n   *\n   * @returns {number}\n   * @private\n   */\n  _getHubSize() {\n    let hubSize = 0;\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        let node = this.body.nodes[nodeId];\n        if (this.hierarchicalLevels[nodeId] === undefined) {\n          hubSize = node.edges.length < hubSize ? hubSize : node.edges.length;\n        }\n      }\n    }\n    return hubSize;\n  }\n\n\n  /**\n   * this function allocates nodes in levels based on the recursive branching from the largest hubs.\n   *\n   * @param hubsize\n   * @private\n   */\n  _determineLevelsByHubsize() {\n    let hubSize = 1;\n\n    let levelDownstream = (nodeA, nodeB) => {\n      if (this.hierarchicalLevels[nodeB.id] === undefined) {\n        // set initial level\n        if (this.hierarchicalLevels[nodeA.id] === undefined) {\n          this.hierarchicalLevels[nodeA.id] = 0;\n        }\n        // set level\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + 1;\n      }\n    };\n\n    while (hubSize > 0) {\n      // determine hubs\n      hubSize = this._getHubSize();\n      if (hubSize === 0)\n        break;\n\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          let node = this.body.nodes[nodeId];\n          if (node.edges.length === hubSize) {\n            this._crawlNetwork(levelDownstream,nodeId);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * TODO: release feature\n   * @private\n   */\n  _determineLevelsCustomCallback() {\n    let minLevel = 100000;\n\n    // TODO: this should come from options.\n    let customCallback = function(nodeA, nodeB, edge) {\n\n    };\n\n    let levelByDirection = (nodeA, nodeB, edge) => {\n      let levelA = this.hierarchicalLevels[nodeA.id];\n      // set initial level\n      if (levelA === undefined) {this.hierarchicalLevels[nodeA.id] = minLevel;}\n\n      let diff = customCallback(\n        NetworkUtil.cloneOptions(nodeA,'node'),\n        NetworkUtil.cloneOptions(nodeB,'node'),\n        NetworkUtil.cloneOptions(edge,'edge')\n      );\n\n      this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + diff;\n    };\n\n    this._crawlNetwork(levelByDirection);\n    this._setMinLevelToZero();\n  }\n\n  /**\n   * this function allocates nodes in levels based on the direction of the edges\n   *\n   * @param hubsize\n   * @private\n   */\n  _determineLevelsDirected() {\n    let minLevel = 10000;\n    let levelByDirection = (nodeA, nodeB, edge) => {\n      let levelA = this.hierarchicalLevels[nodeA.id];\n      // set initial level\n      if (levelA === undefined) {this.hierarchicalLevels[nodeA.id] = minLevel;}\n      if (edge.toId == nodeB.id) {\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + 1;\n      }\n      else {\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] - 1;\n      }\n    };\n    this._crawlNetwork(levelByDirection);\n    this._setMinLevelToZero();\n  }\n\n\n  /**\n   * Small util method to set the minimum levels of the nodes to zero.\n   * @private\n   */\n  _setMinLevelToZero() {\n    let minLevel = 1e9;\n    // get the minimum level\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        if (this.hierarchicalLevels[nodeId] !== undefined) {\n          minLevel = Math.min(this.hierarchicalLevels[nodeId], minLevel);\n        }\n      }\n    }\n\n    // subtract the minimum from the set so we have a range starting from 0\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        if (this.hierarchicalLevels[nodeId] !== undefined) {\n          this.hierarchicalLevels[nodeId] -= minLevel;\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Update the bookkeeping of parent and child.\n   * @private\n   */\n  _generateMap() {\n    let fillInRelations = (parentNode, childNode) => {\n      if (this.hierarchicalLevels[childNode.id] > this.hierarchicalLevels[parentNode.id]) {\n        let parentNodeId = parentNode.id;\n        let childNodeId = childNode.id;\n        if (this.hierarchicalChildrenReference[parentNodeId] === undefined) {\n          this.hierarchicalChildrenReference[parentNodeId] = [];\n        }\n        this.hierarchicalChildrenReference[parentNodeId].push(childNodeId);\n        if (this.hierarchicalParentReference[childNodeId] === undefined) {\n          this.hierarchicalParentReference[childNodeId] = [];\n        }\n        this.hierarchicalParentReference[childNodeId].push(parentNodeId);\n      }\n    };\n\n    this._crawlNetwork(fillInRelations);\n  }\n\n\n  /**\n   * Crawl over the entire network and use a callback on each node couple that is connected to each other.\n   * @param callback          | will receive nodeA nodeB and the connecting edge. A and B are unique.\n   * @param startingNodeId\n   * @private\n   */\n  _crawlNetwork(callback = function() {}, startingNodeId) {\n    let progress = {};\n    let treeIndex = 0;\n\n    let crawler = (node, tree) => {\n      if (progress[node.id] === undefined) {\n\n        if (this.hierarchicalTrees[node.id] === undefined) {\n          this.hierarchicalTrees[node.id] = tree;\n          this.treeIndex = Math.max(tree, this.treeIndex);\n        }\n\n        progress[node.id] = true;\n        let childNode;\n        for (let i = 0; i < node.edges.length; i++) {\n          if (node.edges[i].connected === true) {\n            if (node.edges[i].toId === node.id) {\n              childNode = node.edges[i].from;\n            }\n            else {\n              childNode = node.edges[i].to;\n            }\n\n            if (node.id !== childNode.id) {\n              callback(node, childNode, node.edges[i]);\n              crawler(childNode, tree);\n            }\n          }\n        }\n      }\n    };\n\n\n    // we can crawl from a specific node or over all nodes.\n    if (startingNodeId === undefined) {\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        if (progress[node.id] === undefined) {\n          crawler(node, treeIndex);\n          treeIndex += 1;\n        }\n      }\n    }\n    else {\n      let node = this.body.nodes[startingNodeId];\n      if (node === undefined) {\n        console.error(\"Node not found:\", startingNodeId);\n        return;\n      }\n      crawler(node);\n    }\n  }\n\n\n  /**\n   * Shift a branch a certain distance\n   * @param parentId\n   * @param diff\n   * @private\n   */\n  _shiftBlock(parentId, diff) {\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      this.body.nodes[parentId].x += diff;\n    }\n    else {\n      this.body.nodes[parentId].y += diff;\n    }\n    if (this.hierarchicalChildrenReference[parentId] !== undefined) {\n      for (let i = 0; i < this.hierarchicalChildrenReference[parentId].length; i++) {\n        this._shiftBlock(this.hierarchicalChildrenReference[parentId][i], diff);\n      }\n    }\n  }\n\n\n  /**\n   * Find a common parent between branches.\n   * @param childA\n   * @param childB\n   * @returns {{foundParent, withChild}}\n   * @private\n   */\n  _findCommonParent(childA,childB) {\n    let parents = {};\n    let iterateParents = (parents,child) => {\n      if (this.hierarchicalParentReference[child] !== undefined) {\n        for (let i = 0; i < this.hierarchicalParentReference[child].length; i++) {\n          let parent = this.hierarchicalParentReference[child][i];\n          parents[parent] = true;\n          iterateParents(parents, parent)\n        }\n      }\n    };\n    let findParent = (parents, child) => {\n      if (this.hierarchicalParentReference[child] !== undefined) {\n        for (let i = 0; i < this.hierarchicalParentReference[child].length; i++) {\n          let parent = this.hierarchicalParentReference[child][i];\n          if (parents[parent] !== undefined) {\n            return {foundParent:parent, withChild:child};\n          }\n          let branch = findParent(parents, parent);\n          if (branch.foundParent !== null) {\n            return branch;\n          }\n        }\n      }\n      return {foundParent:null, withChild:child};\n    };\n\n    iterateParents(parents, childA);\n    return findParent(parents, childB);\n  }\n\n  /**\n   * Abstract the getting of the position so we won't have to repeat the check for direction all the time\n   * @param node\n   * @param position\n   * @param level\n   * @private\n   */\n  _setPositionForHierarchy(node, position, level, doNotUpdate = false) {\n    //console.log('_setPositionForHierarchy',node.id, position)\n    if (doNotUpdate !== true) {\n      if (this.distributionOrdering[level] === undefined) {\n        this.distributionOrdering[level] = [];\n        this.distributionOrderingPresence[level] = {};\n      }\n\n      if (this.distributionOrderingPresence[level][node.id] === undefined) {\n        this.distributionOrdering[level].push(node);\n        this.distributionIndex[node.id] = this.distributionOrdering[level].length - 1;\n      }\n      this.distributionOrderingPresence[level][node.id] = true;\n    }\n\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      node.x = position;\n    }\n    else {\n      node.y = position;\n    }\n  }\n\n  /**\n   * Abstract the getting of the position of a node so we do not have to repeat the direction check all the time.\n   * @param node\n   * @returns {number|*}\n   * @private\n   */\n  _getPositionForHierarchy(node) {\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      return node.x;\n    }\n    else {\n      return node.y;\n    }\n  }\n\n  /**\n   * Use the x or y value to sort the array, allowing users to specify order.\n   * @param nodeArray\n   * @private\n   */\n  _sortNodeArray(nodeArray) {\n    if (nodeArray.length > 1) {\n      if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n        nodeArray.sort(function (a, b) {\n          return a.x - b.x;\n        })\n      }\n      else {\n        nodeArray.sort(function (a, b) {\n          return a.y - b.y;\n        })\n      }\n    }\n  }\n\n\n\n}\n\nexport default LayoutEngine;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/LayoutEngine.js","\nlet util = require('../../util');\nlet Hammer = require('../../module/hammer');\nlet hammerUtil = require('../../hammerUtil');\n\n/**\n * clears the toolbar div element of children\n *\n * @private\n */\nclass ManipulationSystem {\n  constructor(body, canvas, selectionHandler) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionHandler = selectionHandler;\n\n    this.editMode = false;\n    this.manipulationDiv = undefined;\n    this.editModeDiv     = undefined;\n    this.closeDiv        = undefined;\n\n    this.manipulationHammers = [];\n    this.temporaryUIFunctions = {};\n    this.temporaryEventFunctions = [];\n\n    this.touchTime = 0;\n    this.temporaryIds = {nodes: [], edges:[]};\n    this.guiEnabled = false;\n    this.inMode = false;\n    this.selectedControlNode = undefined;\n\n    this.options = {};\n    this.defaultOptions = {\n      enabled: false,\n      initiallyActive: false,\n      addNode: true,\n      addEdge: true,\n      editNode: undefined,\n      editEdge: true,\n      deleteNode: true,\n      deleteEdge: true,\n      controlNodeStyle:{\n        shape:'dot',\n        size:6,\n        color: {background: '#ff0000', border: '#3c3c3c', highlight: {background: '#07f968', border: '#3c3c3c'}},\n        borderWidth: 2,\n        borderWidthSelected: 2\n      }\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on('destroy',     () => {this._clean();});\n    this.body.emitter.on('_dataChanged',this._restore.bind(this));\n    this.body.emitter.on('_resetData',  this._restore.bind(this));\n  }\n\n\n  /**\n   * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.\n   * @private\n   */\n  _restore() {\n    if (this.inMode !== false) {\n      if (this.options.initiallyActive === true) {\n        this.enableEditMode();\n      }\n      else {\n        this.disableEditMode();\n      }\n    }\n  }\n\n  /**\n   * Set the Options\n   * @param options\n   */\n  setOptions(options, allOptions, globalOptions) {\n    if (allOptions !== undefined) {\n      if (allOptions.locale !== undefined)  {this.options.locale = allOptions.locale}   else {this.options.locale = globalOptions.locale;}\n      if (allOptions.locales !== undefined) {this.options.locales = allOptions.locales} else {this.options.locales = globalOptions.locales;}\n    }\n\n    if (options !== undefined) {\n      if (typeof options === 'boolean') {\n        this.options.enabled = options;\n      }\n      else {\n        this.options.enabled = true;\n        util.deepExtend(this.options, options);\n      }\n      if (this.options.initiallyActive === true) {\n        this.editMode = true;\n      }\n      this._setup();\n    }\n  }\n\n\n  /**\n   * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.\n   *\n   * @private\n   */\n  toggleEditMode() {\n    if (this.editMode === true) {\n      this.disableEditMode();\n    }\n    else {\n      this.enableEditMode();\n    }\n  }\n\n\n  enableEditMode() {\n    this.editMode = true;\n\n    this._clean();\n    if (this.guiEnabled === true) {\n      this.manipulationDiv.style.display = 'block';\n      this.closeDiv.style.display = 'block';\n      this.editModeDiv.style.display = 'none';\n      this.showManipulatorToolbar();\n    }\n  }\n\n  disableEditMode() {\n    this.editMode = false;\n\n    this._clean();\n    if (this.guiEnabled === true) {\n      this.manipulationDiv.style.display = 'none';\n      this.closeDiv.style.display = 'none';\n      this.editModeDiv.style.display = 'block';\n      this._createEditButton();\n    }\n  }\n\n  /**\n   * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.\n   *\n   * @private\n   */\n  showManipulatorToolbar() {\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    // reset global variables\n    this.manipulationDOM = {};\n\n    // if the gui is enabled, draw all elements.\n    if (this.guiEnabled === true) {\n      // a _restore will hide these menus\n      this.editMode = true;\n      this.manipulationDiv.style.display = 'block';\n      this.closeDiv.style.display = 'block';\n\n      let selectedNodeCount  = this.selectionHandler._getSelectedNodeCount();\n      let selectedEdgeCount  = this.selectionHandler._getSelectedEdgeCount();\n      let selectedTotalCount = selectedNodeCount + selectedEdgeCount;\n      let locale = this.options.locales[this.options.locale];\n      let needSeperator = false;\n\n\n      if (this.options.addNode !== false) {\n        this._createAddNodeButton(locale);\n        needSeperator = true;\n      }\n      if (this.options.addEdge !== false) {\n        if (needSeperator === true) {\n          this._createSeperator(1);\n        } else {\n          needSeperator = true;\n        }\n        this._createAddEdgeButton(locale);\n      }\n\n      if (selectedNodeCount === 1 && typeof this.options.editNode === 'function') {\n        if (needSeperator === true) {\n          this._createSeperator(2);\n        } else {\n          needSeperator = true;\n        }\n        this._createEditNodeButton(locale);\n      }\n      else if (selectedEdgeCount === 1 && selectedNodeCount === 0 && this.options.editEdge !== false) {\n        if (needSeperator === true) {\n          this._createSeperator(3);\n        } else {\n          needSeperator = true;\n        }\n        this._createEditEdgeButton(locale);\n      }\n\n      // remove buttons\n      if (selectedTotalCount !== 0) {\n        if (selectedNodeCount > 0 && this.options.deleteNode !== false) {\n          if (needSeperator === true) {\n            this._createSeperator(4);\n          }\n          this._createDeleteButton(locale);\n        }\n        else if (selectedNodeCount === 0 && this.options.deleteEdge !== false) {\n          if (needSeperator === true) {\n            this._createSeperator(4);\n          }\n          this._createDeleteButton(locale);\n        }\n      }\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n\n      // refresh this bar based on what has been selected\n      this._temporaryBindEvent('select', this.showManipulatorToolbar.bind(this));\n    }\n\n    // redraw to show any possible changes\n    this.body.emitter.emit('_redraw');\n\n  }\n\n\n  /**\n   * Create the toolbar for adding Nodes\n   */\n  addNodeMode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'addNode';\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['addDescription'] || this.options.locales['en']['addDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    this._temporaryBindEvent('click', this._performAddNode.bind(this));\n  }\n\n  /**\n   * call the bound function to handle the editing of the node. The node has to be selected.\n   */\n  editNode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n    let node = this.selectionHandler._getSelectedNode();\n    if (node !== undefined) {\n      this.inMode = 'editNode';\n      if (typeof this.options.editNode === 'function') {\n        if (node.isCluster !== true) {\n          let data = util.deepExtend({}, node.options, false);\n          data.x = node.x;\n          data.y = node.y;\n\n          if (this.options.editNode.length === 2) {\n            this.options.editNode(data, (finalizedData) => {\n              if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'editNode') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n                this.body.data.nodes.getDataSet().update(finalizedData);\n              }\n              this.showManipulatorToolbar();\n            });\n          }\n          else {\n            throw new Error('The function for edit does not support two arguments (data, callback)');\n          }\n        }\n        else {\n          alert(this.options.locales[this.options.locale]['editClusterError'] || this.options.locales['en']['editClusterError']);\n        }\n      }\n      else {\n        throw new Error('No function has been configured to handle the editing of nodes.');\n      }\n    }\n    else {\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n  /**\n   * create the toolbar to connect nodes\n   */\n  addEdgeMode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'addEdge';\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['edgeDescription'] || this.options.locales['en']['edgeDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    // temporarily overload functions\n    this._temporaryBindUI('onTouch',    this._handleConnect.bind(this));\n    this._temporaryBindUI('onDragEnd',  this._finishConnect.bind(this));\n    this._temporaryBindUI('onDrag',     this._dragControlNode.bind(this));\n    this._temporaryBindUI('onRelease',  this._finishConnect.bind(this));\n\n    this._temporaryBindUI('onDragStart', () => {});\n    this._temporaryBindUI('onHold', () => {});\n  }\n\n  /**\n   * create the toolbar to edit edges\n   */\n  editEdgeMode() {\n    // when using the gui, enable edit mode if it wasn't already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'editEdge';\n    if (typeof this.options.editEdge === 'object' && typeof this.options.editEdge.editWithoutDrag === \"function\") {\n      this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];\n      if (this.edgeBeingEditedId !== undefined) {\n        var edge = this.body.edges[this.edgeBeingEditedId];\n        this._performEditEdge(edge.from, edge.to);\n        return;\n      }\n    }\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['editEdgeDescription'] || this.options.locales['en']['editEdgeDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];\n    if (this.edgeBeingEditedId !== undefined) {\n      let edge = this.body.edges[this.edgeBeingEditedId];\n\n      // create control nodes\n      let controlNodeFrom = this._getNewTargetNode(edge.from.x, edge.from.y);\n      let controlNodeTo = this._getNewTargetNode(edge.to.x, edge.to.y);\n\n      this.temporaryIds.nodes.push(controlNodeFrom.id);\n      this.temporaryIds.nodes.push(controlNodeTo.id);\n\n      this.body.nodes[controlNodeFrom.id] = controlNodeFrom;\n      this.body.nodeIndices.push(controlNodeFrom.id);\n      this.body.nodes[controlNodeTo.id] = controlNodeTo;\n      this.body.nodeIndices.push(controlNodeTo.id);\n\n      // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI\n      this._temporaryBindUI('onTouch', this._controlNodeTouch.bind(this));    // used to get the position\n      this._temporaryBindUI('onTap', () => {});                             // disabled\n      this._temporaryBindUI('onHold', () => {});                             // disabled\n      this._temporaryBindUI('onDragStart', this._controlNodeDragStart.bind(this));// used to select control node\n      this._temporaryBindUI('onDrag', this._controlNodeDrag.bind(this));     // used to drag control node\n      this._temporaryBindUI('onDragEnd', this._controlNodeDragEnd.bind(this));  // used to connect or revert control nodes\n      this._temporaryBindUI('onMouseMove', () => {});                             // disabled\n\n      // create function to position control nodes correctly on movement\n      // automatically cleaned up because we use the temporary bind\n      this._temporaryBindEvent('beforeDrawing', (ctx) => {\n        let positions = edge.edgeType.findBorderPositions(ctx);\n        if (controlNodeFrom.selected === false) {\n          controlNodeFrom.x = positions.from.x;\n          controlNodeFrom.y = positions.from.y;\n        }\n        if (controlNodeTo.selected === false) {\n          controlNodeTo.x = positions.to.x;\n          controlNodeTo.y = positions.to.y;\n        }\n      });\n\n      this.body.emitter.emit('_redraw');\n    }\n    else {\n      this.showManipulatorToolbar();\n    }\n  }\n\n  /**\n   * delete everything in the selection\n   */\n  deleteSelected() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'delete';\n    let selectedNodes = this.selectionHandler.getSelectedNodes();\n    let selectedEdges = this.selectionHandler.getSelectedEdges();\n    let deleteFunction = undefined;\n    if (selectedNodes.length > 0) {\n      for (let i = 0; i < selectedNodes.length; i++) {\n        if (this.body.nodes[selectedNodes[i]].isCluster === true) {\n          alert(this.options.locales[this.options.locale]['deleteClusterError'] || this.options.locales['en']['deleteClusterError']);\n          return;\n        }\n      }\n\n      if (typeof this.options.deleteNode === 'function') {\n        deleteFunction = this.options.deleteNode;\n      }\n    }\n    else if (selectedEdges.length > 0) {\n      if (typeof this.options.deleteEdge === 'function') {\n        deleteFunction = this.options.deleteEdge;\n      }\n    }\n\n    if (typeof deleteFunction === 'function') {\n      let data = {nodes: selectedNodes, edges: selectedEdges};\n      if (deleteFunction.length === 2) {\n        deleteFunction(data, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'delete') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n            this.body.data.edges.getDataSet().remove(finalizedData.edges);\n            this.body.data.nodes.getDataSet().remove(finalizedData.nodes);\n            this.body.emitter.emit('startSimulation');\n            this.showManipulatorToolbar();\n          }\n          else {\n            this.body.emitter.emit('startSimulation');\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for delete does not support two arguments (data, callback)')\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().remove(selectedEdges);\n      this.body.data.nodes.getDataSet().remove(selectedNodes);\n      this.body.emitter.emit('startSimulation');\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n\n\n  //********************************************** PRIVATE ***************************************//\n\n  /**\n   * draw or remove the DOM\n   * @private\n   */\n  _setup() {\n    if (this.options.enabled === true) {\n      // Enable the GUI\n      this.guiEnabled = true;\n\n      this._createWrappers();\n      if (this.editMode === false) {\n        this._createEditButton();\n      }\n      else {\n        this.showManipulatorToolbar();\n      }\n    }\n    else {\n      this._removeManipulationDOM();\n\n      // disable the gui\n      this.guiEnabled = false;\n    }\n  }\n\n\n  /**\n   * create the div overlays that contain the DOM\n   * @private\n   */\n  _createWrappers() {\n    // load the manipulator HTML elements. All styling done in css.\n    if (this.manipulationDiv === undefined) {\n      this.manipulationDiv = document.createElement('div');\n      this.manipulationDiv.className = 'vis-manipulation';\n      if (this.editMode === true) {\n        this.manipulationDiv.style.display = 'block';\n      }\n      else {\n        this.manipulationDiv.style.display = 'none';\n      }\n      this.canvas.frame.appendChild(this.manipulationDiv);\n    }\n\n    // container for the edit button.\n    if (this.editModeDiv === undefined) {\n      this.editModeDiv = document.createElement('div');\n      this.editModeDiv.className = 'vis-edit-mode';\n      if (this.editMode === true) {\n        this.editModeDiv.style.display = 'none';\n      }\n      else {\n        this.editModeDiv.style.display = 'block';\n      }\n      this.canvas.frame.appendChild(this.editModeDiv);\n    }\n\n\n    // container for the close div button\n    if (this.closeDiv === undefined) {\n      this.closeDiv = document.createElement('div');\n      this.closeDiv.className = 'vis-close';\n      this.closeDiv.style.display = this.manipulationDiv.style.display;\n      this.canvas.frame.appendChild(this.closeDiv);\n    }\n  }\n\n\n  /**\n   * generate a new target node. Used for creating new edges and editing edges\n   * @param x\n   * @param y\n   * @returns {*}\n   * @private\n   */\n  _getNewTargetNode(x,y) {\n    let controlNodeStyle = util.deepExtend({}, this.options.controlNodeStyle);\n\n    controlNodeStyle.id = 'targetNode' + util.randomUUID();\n    controlNodeStyle.hidden = false;\n    controlNodeStyle.physics = false;\n    controlNodeStyle.x = x;\n    controlNodeStyle.y = y;\n\n    // we have to define the bounding box in order for the nodes to be drawn immediately\n    let node = this.body.functions.createNode(controlNodeStyle);\n    node.shape.boundingBox = {left: x, right:x, top:y, bottom:y};\n\n    return node;\n  }\n\n\n  /**\n   * Create the edit button\n   */\n  _createEditButton() {\n    // restore everything to it's original state (if applicable)\n    this._clean();\n\n    // reset the manipulationDOM\n    this.manipulationDOM = {};\n\n    // empty the editModeDiv\n    util.recursiveDOMDelete(this.editModeDiv);\n\n\n    // create the contents for the editMode button\n    let locale = this.options.locales[this.options.locale];\n    let button = this._createButton('editMode', 'vis-button vis-edit vis-edit-mode', locale['edit'] || this.options.locales['en']['edit']);\n    this.editModeDiv.appendChild(button);\n\n    // bind a hammer listener to the button, calling the function toggleEditMode.\n    this._bindHammerToDiv(button, this.toggleEditMode.bind(this));\n  }\n\n\n  /**\n   * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.\n   * @private\n   */\n  _clean() {\n    // not in mode\n    this.inMode = false;\n\n    // _clean the divs\n    if (this.guiEnabled === true) {\n      util.recursiveDOMDelete(this.editModeDiv);\n      util.recursiveDOMDelete(this.manipulationDiv);\n\n      // removes all the bindings and overloads\n      this._cleanManipulatorHammers();\n    }\n\n    // remove temporary nodes and edges\n    this._cleanupTemporaryNodesAndEdges();\n\n    // restore overloaded UI functions\n    this._unbindTemporaryUIs();\n\n    // remove the temporaryEventFunctions\n    this._unbindTemporaryEvents();\n\n    // restore the physics if required\n    this.body.emitter.emit('restorePhysics');\n  }\n\n\n  /**\n   * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.\n   * @private\n   */\n  _cleanManipulatorHammers() {\n    // _clean hammer bindings\n    if (this.manipulationHammers.length != 0) {\n      for (let i = 0; i < this.manipulationHammers.length; i++) {\n        this.manipulationHammers[i].destroy();\n      }\n      this.manipulationHammers = [];\n    }\n  }\n\n\n  /**\n   * Remove all DOM elements created by this module.\n   * @private\n   */\n  _removeManipulationDOM() {\n    // removes all the bindings and overloads\n    this._clean();\n\n    // empty the manipulation divs\n    util.recursiveDOMDelete(this.manipulationDiv);\n    util.recursiveDOMDelete(this.editModeDiv);\n    util.recursiveDOMDelete(this.closeDiv);\n\n    // remove the manipulation divs\n    if (this.manipulationDiv) {this.canvas.frame.removeChild(this.manipulationDiv);}\n    if (this.editModeDiv)     {this.canvas.frame.removeChild(this.editModeDiv);}\n    if (this.closeDiv)        {this.canvas.frame.removeChild(this.closeDiv);}\n\n    // set the references to undefined\n    this.manipulationDiv = undefined;\n    this.editModeDiv = undefined;\n    this.closeDiv = undefined;\n  }\n\n\n  /**\n   * create a seperator line. the index is to differentiate in the manipulation dom\n   * @param index\n   * @private\n   */\n  _createSeperator(index = 1) {\n    this.manipulationDOM['seperatorLineDiv' + index] = document.createElement('div');\n    this.manipulationDOM['seperatorLineDiv' + index].className = 'vis-separator-line';\n    this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv' + index]);\n  }\n\n  // ----------------------    DOM functions for buttons    --------------------------//\n\n  _createAddNodeButton(locale) {\n    let button = this._createButton('addNode', 'vis-button vis-add', locale['addNode'] || this.options.locales['en']['addNode']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.addNodeMode.bind(this));\n  }\n\n  _createAddEdgeButton(locale) {\n    let button = this._createButton('addEdge', 'vis-button vis-connect',  locale['addEdge'] || this.options.locales['en']['addEdge']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.addEdgeMode.bind(this));\n  }\n\n  _createEditNodeButton(locale) {\n    let button = this._createButton('editNode', 'vis-button vis-edit', locale['editNode'] || this.options.locales['en']['editNode']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.editNode.bind(this));\n  }\n\n  _createEditEdgeButton(locale) {\n    let button = this._createButton('editEdge', 'vis-button vis-edit',  locale['editEdge'] || this.options.locales['en']['editEdge']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.editEdgeMode.bind(this));\n  }\n\n  _createDeleteButton(locale) {\n    if (this.options.rtl) {\n      var deleteBtnClass = 'vis-button vis-delete-rtl';\n    } else {\n      var deleteBtnClass = 'vis-button vis-delete';\n    }\n    let button = this._createButton('delete', deleteBtnClass, locale['del'] || this.options.locales['en']['del']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.deleteSelected.bind(this));\n  }\n\n  _createBackButton(locale) {\n    let button = this._createButton('back', 'vis-button vis-back', locale['back'] || this.options.locales['en']['back']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.showManipulatorToolbar.bind(this));\n  }\n\n  _createButton(id, className, label, labelClassName = 'vis-label') {\n\n    this.manipulationDOM[id+'Div'] = document.createElement('div');\n    this.manipulationDOM[id+'Div'].className = className;\n    this.manipulationDOM[id+'Label'] = document.createElement('div');\n    this.manipulationDOM[id+'Label'].className = labelClassName;\n    this.manipulationDOM[id+'Label'].innerHTML = label;\n    this.manipulationDOM[id+'Div'].appendChild(this.manipulationDOM[id+'Label']);\n    return this.manipulationDOM[id+'Div'];\n  }\n\n  _createDescription(label) {\n    this.manipulationDiv.appendChild(\n      this._createButton('description', 'vis-button vis-none', label)\n    );\n  }\n\n  // -------------------------- End of DOM functions for buttons ------------------------------//\n\n  /**\n   * this binds an event until cleanup by the clean functions.\n   * @param event\n   * @param newFunction\n   * @private\n   */\n  _temporaryBindEvent(event, newFunction) {\n    this.temporaryEventFunctions.push({event:event, boundFunction:newFunction});\n    this.body.emitter.on(event, newFunction);\n  }\n\n  /**\n   * this overrides an UI function until cleanup by the clean function\n   * @param UIfunctionName\n   * @param newFunction\n   * @private\n   */\n  _temporaryBindUI(UIfunctionName, newFunction) {\n    if (this.body.eventListeners[UIfunctionName] !== undefined) {\n      this.temporaryUIFunctions[UIfunctionName] = this.body.eventListeners[UIfunctionName];\n      this.body.eventListeners[UIfunctionName] = newFunction;\n    }\n    else {\n      throw new Error('This UI function does not exist. Typo? You tried: ' + UIfunctionName + ' possible are: ' + JSON.stringify(Object.keys(this.body.eventListeners)));\n    }\n  }\n\n  /**\n   * Restore the overridden UI functions to their original state.\n   *\n   * @private\n   */\n  _unbindTemporaryUIs() {\n    for (let functionName in this.temporaryUIFunctions) {\n      if (this.temporaryUIFunctions.hasOwnProperty(functionName)) {\n        this.body.eventListeners[functionName] = this.temporaryUIFunctions[functionName];\n        delete this.temporaryUIFunctions[functionName];\n      }\n    }\n    this.temporaryUIFunctions = {};\n  }\n\n  /**\n   * Unbind the events created by _temporaryBindEvent\n   * @private\n   */\n  _unbindTemporaryEvents() {\n    for (let i = 0; i < this.temporaryEventFunctions.length; i++) {\n      let eventName = this.temporaryEventFunctions[i].event;\n      let boundFunction = this.temporaryEventFunctions[i].boundFunction;\n      this.body.emitter.off(eventName, boundFunction);\n    }\n    this.temporaryEventFunctions = [];\n  }\n\n  /**\n   * Bind an hammer instance to a DOM element.\n   * @param domElement\n   * @param funct\n   */\n  _bindHammerToDiv(domElement, boundFunction) {\n    let hammer = new Hammer(domElement, {});\n    hammerUtil.onTouch(hammer, boundFunction);\n    this.manipulationHammers.push(hammer);\n  }\n\n\n  /**\n   * Neatly clean up temporary edges and nodes\n   * @private\n   */\n  _cleanupTemporaryNodesAndEdges() {\n    // _clean temporary edges\n    for (let i = 0; i < this.temporaryIds.edges.length; i++) {\n      this.body.edges[this.temporaryIds.edges[i]].disconnect();\n      delete this.body.edges[this.temporaryIds.edges[i]];\n      let indexTempEdge = this.body.edgeIndices.indexOf(this.temporaryIds.edges[i]);\n      if (indexTempEdge !== -1) {this.body.edgeIndices.splice(indexTempEdge,1);}\n    }\n\n    // _clean temporary nodes\n    for (let i = 0; i < this.temporaryIds.nodes.length; i++) {\n      delete this.body.nodes[this.temporaryIds.nodes[i]];\n      let indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]);\n      if (indexTempNode !== -1) {this.body.nodeIndices.splice(indexTempNode,1);}\n    }\n\n    this.temporaryIds = {nodes: [], edges: []};\n  }\n\n  // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//\n\n  /**\n   * the touch is used to get the position of the initial click\n   * @param event\n   * @private\n   */\n  _controlNodeTouch(event) {\n    this.selectionHandler.unselectAll();\n    this.lastTouch = this.body.functions.getPointer(event.center);\n    this.lastTouch.translation = util.extend({},this.body.view.translation); // copy the object\n  }\n\n\n  /**\n   * the drag start is used to mark one of the control nodes as selected.\n   * @param event\n   * @private\n   */\n  _controlNodeDragStart(event) {\n    let pointer = this.lastTouch;\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n    let from = this.body.nodes[this.temporaryIds.nodes[0]];\n    let to   = this.body.nodes[this.temporaryIds.nodes[1]];\n    let edge = this.body.edges[this.edgeBeingEditedId];\n    this.selectedControlNode = undefined;\n\n    let fromSelect = from.isOverlappingWith(pointerObj);\n    let toSelect = to.isOverlappingWith(pointerObj);\n\n    if (fromSelect === true) {\n      this.selectedControlNode = from;\n      edge.edgeType.from = from;\n    }\n    else if (toSelect === true) {\n      this.selectedControlNode = to;\n      edge.edgeType.to = to;\n    }\n\n    // we use the selection to find the node that is being dragged. We explicitly select it here.\n    if (this.selectedControlNode !== undefined) {\n      this.selectionHandler.selectObject(this.selectedControlNode)\n    }\n\n    this.body.emitter.emit('_redraw');\n  }\n\n  /**\n   * dragging the control nodes or the canvas\n   * @param event\n   * @private\n   */\n  _controlNodeDrag(event) {\n    this.body.emitter.emit('disablePhysics');\n    let pointer = this.body.functions.getPointer(event.center);\n    let pos = this.canvas.DOMtoCanvas(pointer);\n    if (this.selectedControlNode !== undefined) {\n      this.selectedControlNode.x = pos.x;\n      this.selectedControlNode.y = pos.y;\n    }\n    else {\n      // if the drag was not started properly because the click started outside the network div, start it now.\n      let diffX = pointer.x - this.lastTouch.x;\n      let diffY = pointer.y - this.lastTouch.y;\n      this.body.view.translation = {x:this.lastTouch.translation.x + diffX, y:this.lastTouch.translation.y + diffY};\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n\n  /**\n   * connecting or restoring the control nodes.\n   * @param event\n   * @private\n   */\n  _controlNodeDragEnd(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n    let edge = this.body.edges[this.edgeBeingEditedId];\n    // if the node that was dragged is not a control node, return\n    if (this.selectedControlNode === undefined) {\n      return;\n    }\n\n    // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.\n    this.selectionHandler.unselectAll();\n    let overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n    let node = undefined;\n    for (let i = overlappingNodeIds.length-1; i >= 0; i--) {\n      if (overlappingNodeIds[i] !== this.selectedControlNode.id) {\n        node = this.body.nodes[overlappingNodeIds[i]];\n        break;\n      }\n    }\n    // perform the connection\n    if (node !== undefined && this.selectedControlNode !== undefined) {\n      if (node.isCluster === true) {\n        alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError'])\n      }\n      else {\n        let from = this.body.nodes[this.temporaryIds.nodes[0]];\n        if (this.selectedControlNode.id === from.id) {\n          this._performEditEdge(node.id, edge.to.id);\n        }\n        else {\n          this._performEditEdge(edge.from.id, node.id);\n        }\n      }\n    }\n    else {\n      edge.updateEdgeType();\n      this.body.emitter.emit('restorePhysics');\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n  // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//\n\n\n\n  // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//\n  /**\n   * the function bound to the selection event. It checks if you want to connect a cluster and changes the description\n   * to walk the user through the process.\n   *\n   * @private\n   */\n  _handleConnect(event) {\n    // check to avoid double fireing of this function.\n    if (new Date().valueOf() - this.touchTime > 100) {\n      this.lastTouch = this.body.functions.getPointer(event.center);\n      this.lastTouch.translation = util.extend({},this.body.view.translation); // copy the object\n\n      let pointer = this.lastTouch;\n      let node = this.selectionHandler.getNodeAt(pointer);\n\n      if (node !== undefined) {\n        if (node.isCluster === true) {\n          alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError'])\n        }\n        else {\n          // create a node the temporary line can look at\n          let targetNode = this._getNewTargetNode(node.x,node.y);\n          this.body.nodes[targetNode.id] = targetNode;\n          this.body.nodeIndices.push(targetNode.id);\n\n          // create a temporary edge\n          let connectionEdge = this.body.functions.createEdge({\n            id: 'connectionEdge' + util.randomUUID(),\n            from: node.id,\n            to: targetNode.id,\n            physics: false,\n            smooth: {\n              enabled: true,\n              type: 'continuous',\n              roundness: 0.5\n            }\n          });\n          this.body.edges[connectionEdge.id] = connectionEdge;\n          this.body.edgeIndices.push(connectionEdge.id);\n\n          this.temporaryIds.nodes.push(targetNode.id);\n          this.temporaryIds.edges.push(connectionEdge.id);\n        }\n      }\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  _dragControlNode(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    if (this.temporaryIds.nodes[0] !== undefined) {\n      let targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.\n      targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n      targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n      this.body.emitter.emit('_redraw');\n    }\n    else {\n      let diffX = pointer.x - this.lastTouch.x;\n      let diffY = pointer.y - this.lastTouch.y;\n      this.body.view.translation = {x:this.lastTouch.translation.x + diffX, y:this.lastTouch.translation.y + diffY};\n    }\n\n  }\n\n\n  /**\n   * Connect the new edge to the target if one exists, otherwise remove temp line\n   * @param event\n   * @private\n   */\n  _finishConnect(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n    // remember the edge id\n    let connectFromId = undefined;\n    if (this.temporaryIds.edges[0] !== undefined) {\n      connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n    }\n\n    // get the overlapping node but NOT the temporary node;\n    let overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n    let node = undefined;\n    for (let i = overlappingNodeIds.length-1; i >= 0; i--) {\n      // if the node id is NOT a temporary node, accept the node.\n      if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n        node = this.body.nodes[overlappingNodeIds[i]];\n        break;\n      }\n    }\n\n    // clean temporary nodes and edges.\n    this._cleanupTemporaryNodesAndEdges();\n\n    // perform the connection\n    if (node !== undefined) {\n      if (node.isCluster === true) {\n        alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']);\n      }\n      else {\n        if (this.body.nodes[connectFromId] !== undefined && this.body.nodes[node.id] !== undefined) {\n          this._performAddEdge(connectFromId, node.id);\n        }\n      }\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n  // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//\n\n\n  // ------------------------------ Performing all the actual data manipulation ------------------------//\n\n  /**\n   * Adds a node on the specified location\n   */\n  _performAddNode(clickData) {\n    let defaultData = {\n      id: util.randomUUID(),\n      x: clickData.pointer.canvas.x,\n      y: clickData.pointer.canvas.y,\n      label: 'new'\n    };\n\n    if (typeof this.options.addNode === 'function') {\n      if (this.options.addNode.length === 2) {\n        this.options.addNode(defaultData, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'addNode') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n            this.body.data.nodes.getDataSet().add(finalizedData);\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for add does not support two arguments (data,callback)');\n        this.showManipulatorToolbar();\n      }\n    }\n    else {\n      this.body.data.nodes.getDataSet().add(defaultData);\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n  /**\n   * connect two nodes with a new edge.\n   *\n   * @private\n   */\n  _performAddEdge(sourceNodeId, targetNodeId) {\n    let defaultData = {from: sourceNodeId, to: targetNodeId};\n    if (typeof this.options.addEdge === 'function') {\n      if (this.options.addEdge.length === 2) {\n        this.options.addEdge(defaultData, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'addEdge') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n            this.body.data.edges.getDataSet().add(finalizedData);\n            this.selectionHandler.unselectAll();\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for connect does not support two arguments (data,callback)');\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().add(defaultData);\n      this.selectionHandler.unselectAll();\n      this.showManipulatorToolbar();\n    }\n  }\n\n  /**\n   * connect two nodes with a new edge.\n   *\n   * @private\n   */\n  _performEditEdge(sourceNodeId, targetNodeId) {\n    let defaultData = {id: this.edgeBeingEditedId, from: sourceNodeId, to: targetNodeId, label: this.body.data.edges._data[this.edgeBeingEditedId].label };\n    let eeFunct = this.options.editEdge;\n    if (typeof eeFunct === 'object') {\n      eeFunct = eeFunct.editWithoutDrag;\n    }\n    if (typeof eeFunct === 'function') {\n      if (eeFunct.length === 2) {\n        eeFunct(defaultData, (finalizedData) => {\n          if (finalizedData === null || finalizedData === undefined || this.inMode !== 'editEdge') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n            this.body.edges[defaultData.id].updateEdgeType();\n            this.body.emitter.emit('_redraw');\n            this.showManipulatorToolbar();\n          }\n          else {\n            this.body.data.edges.getDataSet().update(finalizedData);\n            this.selectionHandler.unselectAll();\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for edit does not support two arguments (data, callback)');\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().update(defaultData);\n      this.selectionHandler.unselectAll();\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n}\n\nexport default ManipulationSystem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/ManipulationSystem.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet any = 'any';\n\n\nlet allOptions = {\n  configure: {\n    enabled: { boolean: bool },\n    filter: { boolean: bool, string, array, 'function': 'function' },\n    container: { dom },\n    showButton: { boolean: bool },\n    __type__: { object, boolean: bool, string, array, 'function': 'function' }\n  },\n  edges: {\n    arrows: {\n      to: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      middle: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      from: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      __type__: { string: ['from', 'to', 'middle'], object }\n    },\n    arrowStrikethrough: { boolean: bool },\n    chosen: {\n      label: { boolean: bool, 'function': 'function' },\n      edge: { boolean: bool, 'function': 'function' },\n      __type__: { object, boolean: bool }\n    },\n    color: {\n      color: { string },\n      highlight: { string },\n      hover: { string },\n      inherit: { string: ['from', 'to', 'both'], boolean: bool },\n      opacity: { number },\n      __type__: { object, string }\n    },\n    dashes: { boolean: bool, array },\n    font: {\n      color: { string },\n      size: { number }, // px\n      face: { string },\n      background: { string },\n      strokeWidth: { number }, // px\n      strokeColor: { string },\n      align: { string: ['horizontal', 'top', 'middle', 'bottom'] },\n      vadjust: { number },\n      multi: { boolean: bool, string },\n      bold: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      boldital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      ital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      mono: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    hidden: { boolean: bool },\n    hoverWidth: { 'function': 'function', number },\n    label: { string, 'undefined': 'undefined' },\n    labelHighlightBold: { boolean: bool },\n    length: { number, 'undefined': 'undefined' },\n    physics: { boolean: bool },\n    scaling: {\n      min: { number },\n      max: { number },\n      label: {\n        enabled: { boolean: bool },\n        min: { number },\n        max: { number },\n        maxVisible: { number },\n        drawThreshold: { number },\n        __type__: { object, boolean: bool }\n      },\n      customScalingFunction: { 'function': 'function' },\n      __type__: { object }\n    },\n    selectionWidth: { 'function': 'function', number },\n    selfReferenceSize: { number },\n    shadow: {\n      enabled: { boolean: bool },\n      color: { string },\n      size: { number },\n      x: { number },\n      y: { number },\n      __type__: { object, boolean: bool }\n    },\n    smooth: {\n      enabled: { boolean: bool },\n      type: { string: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'] },\n      roundness: { number },\n      forceDirection: { string: ['horizontal', 'vertical', 'none'], boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    title: { string, 'undefined': 'undefined' },\n    width: { number },\n    widthConstraint: {\n      maximum: { number },\n      __type__: { object, boolean: bool, number }\n    },\n    value: { number, 'undefined': 'undefined' },\n    __type__: { object }\n  },\n  groups: {\n    useDefaultGroups: { boolean: bool },\n    __any__: 'get from nodes, will be overwritten below',\n    __type__: { object }\n  },\n  interaction: {\n    dragNodes: { boolean: bool },\n    dragView: { boolean: bool },\n    hideEdgesOnDrag: { boolean: bool },\n    hideNodesOnDrag: { boolean: bool },\n    hover: { boolean: bool },\n    keyboard: {\n      enabled: { boolean: bool },\n      speed: { x: { number }, y: { number }, zoom: { number }, __type__: { object } },\n      bindToWindow: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    multiselect: { boolean: bool },\n    navigationButtons: { boolean: bool },\n    selectable: { boolean: bool },\n    selectConnectedEdges: { boolean: bool },\n    hoverConnectedEdges: { boolean: bool },\n    tooltipDelay: { number },\n    zoomView: { boolean: bool },\n    __type__: { object }\n  },\n  layout: {\n    randomSeed: { 'undefined': 'undefined', number },\n    improvedLayout: { boolean: bool },\n    hierarchical: {\n      enabled: { boolean: bool },\n      levelSeparation: { number },\n      nodeSpacing: { number },\n      treeSpacing: { number },\n      blockShifting: { boolean: bool },\n      edgeMinimization: { boolean: bool },\n      parentCentralization: { boolean: bool },\n      direction: { string: ['UD', 'DU', 'LR', 'RL'] },   // UD, DU, LR, RL\n      sortMethod: { string: ['hubsize', 'directed'] }, // hubsize, directed\n      __type__: { object, boolean: bool }\n    },\n    __type__: { object }\n  },\n  manipulation: {\n    enabled: { boolean: bool },\n    initiallyActive: { boolean: bool },\n    addNode: { boolean: bool, 'function': 'function' },\n    addEdge: { boolean: bool, 'function': 'function' },\n    editNode: { 'function': 'function' },\n    editEdge: {\n      editWithoutDrag: { 'function' : 'function' },\n      __type__: {object, boolean: bool, 'function': 'function' }\n    },\n    deleteNode: { boolean: bool, 'function': 'function' },\n    deleteEdge: { boolean: bool, 'function': 'function' },\n    controlNodeStyle: 'get from nodes, will be overwritten below',\n    __type__: { object, boolean: bool }\n  },\n  nodes: {\n    borderWidth: { number },\n    borderWidthSelected: { number, 'undefined': 'undefined' },\n    brokenImage: { string, 'undefined': 'undefined' },\n    chosen: {\n      label: { boolean: bool, 'function': 'function' },\n      node: { boolean: bool, 'function': 'function' },\n      __type__: { object, boolean: bool }\n    },\n    color: {\n      border: { string },\n      background: { string },\n      highlight: {\n        border: { string },\n        background: { string },\n        __type__: { object, string }\n      },\n      hover: {\n        border: { string },\n        background: { string },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    fixed: {\n      x: { boolean: bool },\n      y: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    font: {\n      align: { string },\n      color: { string },\n      size: { number }, // px\n      face: { string },\n      background: { string },\n      strokeWidth: { number }, // px\n      strokeColor: { string },\n      vadjust: { number },\n      multi: { boolean: bool, string },\n      bold: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      boldital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      ital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      mono: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    group: { string, number, 'undefined': 'undefined' },\n    heightConstraint: {\n      minimum: { number },\n      valign: { string },\n      __type__: { object, boolean: bool, number }\n    },\n    hidden: { boolean: bool },\n    icon: {\n      face: { string },\n      code: { string },  //'\\uf007',\n      size: { number },  //50,\n      color: { string },\n      __type__: { object }\n    },\n    id: { string, number },\n    image: { string, 'undefined': 'undefined' }, // --> URL\n    label: { string, 'undefined': 'undefined' },\n    labelHighlightBold: { boolean: bool },\n    level: { number, 'undefined': 'undefined' },\n    margin: {\n      top: { number },\n      right: { number },\n      bottom: { number },\n      left: { number },\n      __type__: { object, number }\n    },\n    mass: { number },\n    physics: { boolean: bool },\n    scaling: {\n      min: { number },\n      max: { number },\n      label: {\n        enabled: { boolean: bool },\n        min: { number },\n        max: { number },\n        maxVisible: { number },\n        drawThreshold: { number },\n        __type__: { object, boolean: bool }\n      },\n      customScalingFunction: { 'function': 'function' },\n      __type__: { object }\n    },\n    shadow: {\n      enabled: { boolean: bool },\n      color: { string },\n      size: { number },\n      x: { number },\n      y: { number },\n      __type__: { object, boolean: bool }\n    },\n    shape: { string: ['ellipse', 'circle', 'database', 'box', 'text', 'image', 'circularImage', 'diamond', 'dot', 'star', 'triangle', 'triangleDown', 'square', 'icon'] },\n    shapeProperties: {\n      borderDashes: { boolean: bool, array },\n      borderRadius: { number },\n      interpolation: { boolean: bool },\n      useImageSize: { boolean: bool },\n      useBorderWithImage: { boolean: bool },\n      __type__: { object }\n    },\n    size: { number },\n    title: { string, 'undefined': 'undefined' },\n    value: { number, 'undefined': 'undefined' },\n    widthConstraint: {\n      minimum: { number },\n      maximum: { number },\n      __type__: { object, boolean: bool, number }\n    },\n    x: { number },\n    y: { number },\n    __type__: { object }\n  },\n  physics: {\n    enabled: { boolean: bool },\n    barnesHut: {\n      gravitationalConstant: { number },\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      damping: { number },\n      avoidOverlap: { number },\n      __type__: { object }\n    },\n    forceAtlas2Based: {\n      gravitationalConstant: { number },\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      damping: { number },\n      avoidOverlap: { number },\n      __type__: { object }\n    },\n    repulsion: {\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      nodeDistance: { number },\n      damping: { number },\n      __type__: { object }\n    },\n    hierarchicalRepulsion: {\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      nodeDistance: { number },\n      damping: { number },\n      __type__: { object }\n    },\n    maxVelocity: { number },\n    minVelocity: { number },    // px/s\n    solver: { string: ['barnesHut', 'repulsion', 'hierarchicalRepulsion', 'forceAtlas2Based'] },\n    stabilization: {\n      enabled: { boolean: bool },\n      iterations: { number },   // maximum number of iteration to stabilize\n      updateInterval: { number },\n      onlyDynamicEdges: { boolean: bool },\n      fit: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    timestep: { number },\n    adaptiveTimestep: { boolean: bool },\n    __type__: { object, boolean: bool }\n  },\n\n  //globals :\n  autoResize: { boolean: bool },\n  clickToUse: { boolean: bool },\n  locale: { string },\n  locales: {\n    __any__: { any },\n    __type__: { object }\n  },\n  height: { string },\n  width: { string },\n  __type__: { object }\n};\n\nallOptions.groups.__any__ = allOptions.nodes;\nallOptions.manipulation.controlNodeStyle = allOptions.nodes;\n\n\nlet configureOptions = {\n  nodes: {\n    borderWidth: [1, 0, 10, 1],\n    borderWidthSelected: [2, 0, 10, 1],\n    color: {\n      border: ['color', '#2B7CE9'],\n      background: ['color', '#97C2FC'],\n      highlight: {\n        border: ['color', '#2B7CE9'],\n        background: ['color', '#D2E5FF']\n      },\n      hover: {\n        border: ['color', '#2B7CE9'],\n        background: ['color', '#D2E5FF']\n      }\n    },\n    fixed: {\n      x: false,\n      y: false\n    },\n    font: {\n      color: ['color', '#343434'],\n      size: [14, 0, 100, 1], // px\n      face: ['arial', 'verdana', 'tahoma'],\n      background: ['color', 'none'],\n      strokeWidth: [0, 0, 50, 1], // px\n      strokeColor: ['color', '#ffffff']\n    },\n    //group: 'string',\n    hidden: false,\n    labelHighlightBold: true,\n    //icon: {\n    //  face: 'string',  //'FontAwesome',\n    //  code: 'string',  //'\\uf007',\n    //  size: [50, 0, 200, 1],  //50,\n    //  color: ['color','#2B7CE9']   //'#aa00ff'\n    //},\n    //image: 'string', // --> URL\n    physics: true,\n    scaling: {\n      min: [10, 0, 200, 1],\n      max: [30, 0, 200, 1],\n      label: {\n        enabled: false,\n        min: [14, 0, 200, 1],\n        max: [30, 0, 200, 1],\n        maxVisible: [30, 0, 200, 1],\n        drawThreshold: [5, 0, 20, 1]\n      }\n    },\n    shadow: {\n      enabled: false,\n      color: 'rgba(0,0,0,0.5)',\n      size: [10, 0, 20, 1],\n      x: [5, -30, 30, 1],\n      y: [5, -30, 30, 1]\n    },\n    shape: ['ellipse', 'box', 'circle', 'database', 'diamond', 'dot', 'square', 'star', 'text', 'triangle', 'triangleDown'],\n    shapeProperties: {\n      borderDashes: false,\n      borderRadius: [6, 0, 20, 1],\n      interpolation: true,\n      useImageSize: false\n    },\n    size: [25, 0, 200, 1]\n  },\n  edges: {\n    arrows: {\n      to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },\n      middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },\n      from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }\n    },\n    arrowStrikethrough: true,\n    color: {\n      color: ['color', '#848484'],\n      highlight: ['color', '#848484'],\n      hover: ['color', '#848484'],\n      inherit: ['from', 'to', 'both', true, false],\n      opacity: [1, 0, 1, 0.05]\n    },\n    dashes: false,\n    font: {\n      color: ['color', '#343434'],\n      size: [14, 0, 100, 1], // px\n      face: ['arial', 'verdana', 'tahoma'],\n      background: ['color', 'none'],\n      strokeWidth: [2, 0, 50, 1], // px\n      strokeColor: ['color', '#ffffff'],\n      align: ['horizontal', 'top', 'middle', 'bottom']\n    },\n    hidden: false,\n    hoverWidth: [1.5, 0, 5, 0.1],\n    labelHighlightBold: true,\n    physics: true,\n    scaling: {\n      min: [1, 0, 100, 1],\n      max: [15, 0, 100, 1],\n      label: {\n        enabled: true,\n        min: [14, 0, 200, 1],\n        max: [30, 0, 200, 1],\n        maxVisible: [30, 0, 200, 1],\n        drawThreshold: [5, 0, 20, 1]\n      }\n    },\n    selectionWidth: [1.5, 0, 5, 0.1],\n    selfReferenceSize: [20, 0, 200, 1],\n    shadow: {\n      enabled: false,\n      color: 'rgba(0,0,0,0.5)',\n      size: [10, 0, 20, 1],\n      x: [5, -30, 30, 1],\n      y: [5, -30, 30, 1]\n    },\n    smooth: {\n      enabled: true,\n      type: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'],\n      forceDirection: ['horizontal', 'vertical', 'none'],\n      roundness: [0.5, 0, 1, 0.05]\n    },\n    width: [1, 0, 30, 1]\n  },\n  layout: {\n    //randomSeed: [0, 0, 500, 1],\n    //improvedLayout: true,\n    hierarchical: {\n      enabled: false,\n      levelSeparation: [150, 20, 500, 5],\n      nodeSpacing: [100, 20, 500, 5],\n      treeSpacing: [200, 20, 500, 5],\n      blockShifting: true,\n      edgeMinimization: true,\n      parentCentralization: true,\n      direction: ['UD', 'DU', 'LR', 'RL'],   // UD, DU, LR, RL\n      sortMethod: ['hubsize', 'directed'] // hubsize, directed\n    }\n  },\n  interaction: {\n    dragNodes: true,\n    dragView: true,\n    hideEdgesOnDrag: false,\n    hideNodesOnDrag: false,\n    hover: false,\n    keyboard: {\n      enabled: false,\n      speed: { x: [10, 0, 40, 1], y: [10, 0, 40, 1], zoom: [0.02, 0, 0.1, 0.005] },\n      bindToWindow: true\n    },\n    multiselect: false,\n    navigationButtons: false,\n    selectable: true,\n    selectConnectedEdges: true,\n    hoverConnectedEdges: true,\n    tooltipDelay: [300, 0, 1000, 25],\n    zoomView: true\n  },\n  manipulation: {\n    enabled: false,\n    initiallyActive: false\n  },\n  physics: {\n    enabled: true,\n    barnesHut: {\n      //theta: [0.5, 0.1, 1, 0.05],\n      gravitationalConstant: [-2000, -30000, 0, 50],\n      centralGravity: [0.3, 0, 10, 0.05],\n      springLength: [95, 0, 500, 5],\n      springConstant: [0.04, 0, 1.2, 0.005],\n      damping: [0.09, 0, 1, 0.01],\n      avoidOverlap: [0, 0, 1, 0.01]\n    },\n    forceAtlas2Based: {\n      //theta: [0.5, 0.1, 1, 0.05],\n      gravitationalConstant: [-50, -500, 0, 1],\n      centralGravity: [0.01, 0, 1, 0.005],\n      springLength: [95, 0, 500, 5],\n      springConstant: [0.08, 0, 1.2, 0.005],\n      damping: [0.4, 0, 1, 0.01],\n      avoidOverlap: [0, 0, 1, 0.01]\n    },\n    repulsion: {\n      centralGravity: [0.2, 0, 10, 0.05],\n      springLength: [200, 0, 500, 5],\n      springConstant: [0.05, 0, 1.2, 0.005],\n      nodeDistance: [100, 0, 500, 5],\n      damping: [0.09, 0, 1, 0.01]\n    },\n    hierarchicalRepulsion: {\n      centralGravity: [0.2, 0, 10, 0.05],\n      springLength: [100, 0, 500, 5],\n      springConstant: [0.01, 0, 1.2, 0.005],\n      nodeDistance: [120, 0, 500, 5],\n      damping: [0.09, 0, 1, 0.01]\n    },\n    maxVelocity: [50, 0, 150, 1],\n    minVelocity: [0.1, 0.01, 0.5, 0.01],\n    solver: ['barnesHut', 'forceAtlas2Based', 'repulsion', 'hierarchicalRepulsion'],\n    timestep: [0.5, 0.01, 1, 0.01],\n    //adaptiveTimestep: true\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/options.js","// distance finding algorithm\nimport FloydWarshall from \"./components/algorithms/FloydWarshall.js\"\n\n\n/**\n * KamadaKawai positions the nodes initially based on\n *\n * \"AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS\"\n * -- Tomihisa KAMADA and Satoru KAWAI in 1989\n *\n * Possible optimizations in the distance calculation can be implemented.\n */\nclass KamadaKawai {\n  constructor(body, edgeLength, edgeStrength) {\n    this.body = body;\n    this.springLength = edgeLength;\n    this.springConstant = edgeStrength;\n    this.distanceSolver = new FloydWarshall();\n  }\n\n  /**\n   * Not sure if needed but can be used to update the spring length and spring constant\n   * @param options\n   */\n  setOptions(options) {\n    if (options) {\n      if (options.springLength) {\n        this.springLength = options.springLength;\n      }\n      if (options.springConstant) {\n        this.springConstant = options.springConstant;\n      }\n    }\n  }\n\n\n  /**\n   * Position the system\n   * @param nodesArray\n   * @param edgesArray\n   */\n  solve(nodesArray, edgesArray, ignoreClusters = false) {\n    // get distance matrix\n    let D_matrix = this.distanceSolver.getDistances(this.body, nodesArray, edgesArray); // distance matrix\n\n    // get the L Matrix\n    this._createL_matrix(D_matrix);\n\n    // get the K Matrix\n    this._createK_matrix(D_matrix);\n\n    // calculate positions\n    let threshold = 0.01;\n    let innerThreshold = 1;\n    let iterations = 0;\n    let maxIterations = Math.max(1000,Math.min(10*this.body.nodeIndices.length,6000));\n    let maxInnerIterations = 5;\n\n    let maxEnergy = 1e9;\n    let highE_nodeId = 0, dE_dx = 0, dE_dy = 0, delta_m = 0, subIterations = 0;\n\n    while (maxEnergy > threshold && iterations < maxIterations) {\n      iterations += 1;\n      [highE_nodeId, maxEnergy, dE_dx, dE_dy] = this._getHighestEnergyNode(ignoreClusters);\n      delta_m = maxEnergy;\n      subIterations = 0;\n      while(delta_m > innerThreshold && subIterations < maxInnerIterations) {\n        subIterations += 1;\n        this._moveNode(highE_nodeId, dE_dx, dE_dy);\n        [delta_m,dE_dx,dE_dy] = this._getEnergy(highE_nodeId);\n      }\n    }\n  }\n\n  /**\n   * get the node with the highest energy\n   * @returns {*[]}\n   * @private\n   */\n  _getHighestEnergyNode(ignoreClusters) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n    let maxEnergy = 0;\n    let maxEnergyNodeId = nodesArray[0];\n    let dE_dx_max = 0, dE_dy_max = 0;\n\n    for (let nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {\n      let m = nodesArray[nodeIdx];\n      // by not evaluating nodes with predefined positions we should only move nodes that have no positions.\n      if ((nodes[m].predefinedPosition === false || nodes[m].isCluster === true && ignoreClusters === true) || nodes[m].options.fixed.x === true ||  nodes[m].options.fixed.y === true) {\n        let [delta_m,dE_dx,dE_dy] = this._getEnergy(m);\n        if (maxEnergy < delta_m) {\n          maxEnergy = delta_m;\n          maxEnergyNodeId = m;\n          dE_dx_max = dE_dx;\n          dE_dy_max = dE_dy;\n        }\n      }\n    }\n\n    return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];\n  }\n\n  /**\n   * calculate the energy of a single node\n   * @param m\n   * @returns {*[]}\n   * @private\n   */\n  _getEnergy(m) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n\n    let x_m = nodes[m].x;\n    let y_m = nodes[m].y;\n    let dE_dx = 0;\n    let dE_dy = 0;\n    for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n      let i = nodesArray[iIdx];\n      if (i !== m) {\n        let x_i = nodes[i].x;\n        let y_i = nodes[i].y;\n        let denominator = 1.0 / Math.sqrt(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2));\n        dE_dx += this.K_matrix[m][i] * ((x_m - x_i) - this.L_matrix[m][i] * (x_m - x_i) * denominator);\n        dE_dy += this.K_matrix[m][i] * ((y_m - y_i) - this.L_matrix[m][i] * (y_m - y_i) * denominator);\n      }\n    }\n\n    let delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2));\n    return [delta_m, dE_dx, dE_dy];\n  }\n\n  /**\n   * move the node based on it's energy\n   * the dx and dy are calculated from the linear system proposed by Kamada and Kawai\n   * @param m\n   * @param dE_dx\n   * @param dE_dy\n   * @private\n   */\n  _moveNode(m, dE_dx, dE_dy) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n    let d2E_dx2 = 0;\n    let d2E_dxdy = 0;\n    let d2E_dy2 = 0;\n\n    let x_m = nodes[m].x;\n    let y_m = nodes[m].y;\n    for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n      let i = nodesArray[iIdx];\n      if (i !== m) {\n        let x_i = nodes[i].x;\n        let y_i = nodes[i].y;\n        let denominator = 1.0 / Math.pow(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2), 1.5);\n        d2E_dx2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(y_m - y_i, 2) * denominator);\n        d2E_dxdy += this.K_matrix[m][i] * (this.L_matrix[m][i] * (x_m - x_i) * (y_m - y_i) * denominator);\n        d2E_dy2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(x_m - x_i, 2) * denominator);\n      }\n    }\n    // make the variable names easier to make the solving of the linear system easier to read\n    let A = d2E_dx2, B = d2E_dxdy, C = dE_dx, D = d2E_dy2, E = dE_dy;\n\n    // solve the linear system for dx and dy\n    let dy = (C / A + E / B) / (B / A - D / B);\n    let dx = -(B * dy + C) / A;\n\n    // move the node\n    nodes[m].x += dx;\n    nodes[m].y += dy;\n  }\n\n\n  /**\n   * Create the L matrix: edge length times shortest path\n   * @param D_matrix\n   * @private\n   */\n  _createL_matrix(D_matrix) {\n    let nodesArray = this.body.nodeIndices;\n    let edgeLength = this.springLength;\n\n    this.L_matrix = [];\n    for (let i = 0; i < nodesArray.length; i++) {\n      this.L_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        this.L_matrix[nodesArray[i]][nodesArray[j]] = edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];\n      }\n    }\n  }\n\n\n  /**\n   * Create the K matrix: spring constants times shortest path\n   * @param D_matrix\n   * @private\n   */\n  _createK_matrix(D_matrix) {\n    let nodesArray = this.body.nodeIndices;\n    let edgeStrength = this.springConstant;\n\n    this.K_matrix = [];\n    for (let i = 0; i < nodesArray.length; i++) {\n      this.K_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        this.K_matrix[nodesArray[i]][nodesArray[j]] = edgeStrength * Math.pow(D_matrix[nodesArray[i]][nodesArray[j]], -2);\n      }\n    }\n  }\n\n\n\n}\n\nexport default KamadaKawai;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/KamadaKawai.js","/**\n * Created by Alex on 10-Aug-15.\n */\n\n\nclass FloydWarshall {\n  constructor(){}\n\n  getDistances(body, nodesArray, edgesArray) {\n    let D_matrix = {};\n    let edges = body.edges;\n\n    // prepare matrix with large numbers\n    for (let i = 0; i < nodesArray.length; i++) {\n      D_matrix[nodesArray[i]] = {};\n      D_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        D_matrix[nodesArray[i]][nodesArray[j]] = (i == j ? 0 : 1e9);\n        D_matrix[nodesArray[i]][nodesArray[j]] = (i == j ? 0 : 1e9);\n      }\n    }\n\n    // put the weights for the edges in. This assumes unidirectionality.\n    for (let i = 0; i < edgesArray.length; i++) {\n      let edge = edges[edgesArray[i]];\n      // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix\n      if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) {\n        D_matrix[edge.fromId][edge.toId] = 1;\n        D_matrix[edge.toId][edge.fromId] = 1;\n      }\n    }\n\n    let nodeCount = nodesArray.length;\n\n    // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.\n    for (let k = 0; k < nodeCount; k++) {\n      for (let i = 0; i < nodeCount-1; i++) {\n        for (let j = i+1; j < nodeCount; j++) {\n          D_matrix[nodesArray[i]][nodesArray[j]] = Math.min(D_matrix[nodesArray[i]][nodesArray[j]],D_matrix[nodesArray[i]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[j]])\n          D_matrix[nodesArray[j]][nodesArray[i]] = D_matrix[nodesArray[i]][nodesArray[j]];\n        }\n      }\n    }\n\n    return D_matrix;\n  }\n}\n\nexport default FloydWarshall;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/algorithms/FloydWarshall.js","/**\n * Canvas shapes used by Network\n */\nif (typeof CanvasRenderingContext2D !== 'undefined') {\n\n  /**\n   * Draw a circle shape\n   */\n  CanvasRenderingContext2D.prototype.circle = function (x, y, r) {\n    this.beginPath();\n    this.arc(x, y, r, 0, 2 * Math.PI, false);\n    this.closePath();\n  };\n\n  /**\n   * Draw a square shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   size, width and height of the square\n   */\n  CanvasRenderingContext2D.prototype.square = function (x, y, r) {\n    this.beginPath();\n    this.rect(x - r, y - r, r * 2, r * 2);\n    this.closePath();\n  };\n\n  /**\n   * Draw a triangle shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.triangle = function (x, y, r) {\n    // http://en.wikipedia.org/wiki/Equilateral_triangle\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 1.15;\n    y += 0.275 * r;\n\n    var s = r * 2;\n    var s2 = s / 2;\n    var ir = Math.sqrt(3) / 6 * s;      // radius of inner circle\n    var h = Math.sqrt(s * s - s2 * s2); // height\n\n\n    this.moveTo(x, y - (h - ir));\n    this.lineTo(x + s2, y + ir);\n    this.lineTo(x - s2, y + ir);\n    this.lineTo(x, y - (h - ir));\n    this.closePath();\n\n\n  };\n\n  /**\n   * Draw a triangle shape in downward orientation\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r radius\n   */\n  CanvasRenderingContext2D.prototype.triangleDown = function (x, y, r) {\n    // http://en.wikipedia.org/wiki/Equilateral_triangle\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 1.15;\n    y -= 0.275 * r;\n\n    var s = r * 2;\n    var s2 = s / 2;\n    var ir = Math.sqrt(3) / 6 * s;      // radius of inner circle\n    var h = Math.sqrt(s * s - s2 * s2); // height\n\n    this.moveTo(x, y + (h - ir));\n    this.lineTo(x + s2, y - ir);\n    this.lineTo(x - s2, y - ir);\n    this.lineTo(x, y + (h - ir));\n    this.closePath();\n  };\n\n  /**\n   * Draw a star shape, a star with 5 points\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.star = function (x, y, r) {\n    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 0.82;\n    y += 0.1 * r;\n\n    for (var n = 0; n < 10; n++) {\n      var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5;\n      this.lineTo(\n        x + radius * Math.sin(n * 2 * Math.PI / 10),\n        y - radius * Math.cos(n * 2 * Math.PI / 10)\n      );\n    }\n\n    this.closePath();\n  };\n\n  /**\n   * Draw a Diamond shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.diamond = function (x, y, r) {\n    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n    this.beginPath();\n\n    this.lineTo(x, y + r);\n    this.lineTo(x + r, y);\n    this.lineTo(x, y - r);\n    this.lineTo(x - r, y);\n\n\n    this.closePath();\n  };\n\n  /**\n   * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\n   */\n  CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {\n    var r2d = Math.PI / 180;\n    if (w - ( 2 * r ) < 0) {\n      r = ( w / 2 );\n    } //ensure that the radius isn't too large for x\n    if (h - ( 2 * r ) < 0) {\n      r = ( h / 2 );\n    } //ensure that the radius isn't too large for y\n    this.beginPath();\n    this.moveTo(x + r, y);\n    this.lineTo(x + w - r, y);\n    this.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);\n    this.lineTo(x + w, y + h - r);\n    this.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);\n    this.lineTo(x + r, y + h);\n    this.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);\n    this.lineTo(x, y + r);\n    this.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);\n    this.closePath();\n  };\n\n  /**\n   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n   */\n  CanvasRenderingContext2D.prototype.ellipse = function (x, y, w, h) {\n    var kappa = .5522848,\n      ox = (w / 2) * kappa, // control point offset horizontal\n      oy = (h / 2) * kappa, // control point offset vertical\n      xe = x + w,           // x-end\n      ye = y + h,           // y-end\n      xm = x + w / 2,       // x-middle\n      ym = y + h / 2;       // y-middle\n\n    this.beginPath();\n    this.moveTo(x, ym);\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n    this.closePath();\n  };\n\n\n  /**\n   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n   */\n  CanvasRenderingContext2D.prototype.database = function (x, y, w, h) {\n    var f = 1 / 3;\n    var wEllipse = w;\n    var hEllipse = h * f;\n\n    var kappa = .5522848,\n      ox = (wEllipse / 2) * kappa, // control point offset horizontal\n      oy = (hEllipse / 2) * kappa, // control point offset vertical\n      xe = x + wEllipse,           // x-end\n      ye = y + hEllipse,           // y-end\n      xm = x + wEllipse / 2,       // x-middle\n      ym = y + hEllipse / 2,       // y-middle\n      ymb = y + (h - hEllipse / 2),  // y-midlle, bottom ellipse\n      yeb = y + h;                 // y-end, bottom ellipse\n\n    this.beginPath();\n    this.moveTo(xe, ym);\n\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n\n    this.lineTo(xe, ymb);\n\n    this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);\n    this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);\n\n    this.lineTo(x, ym);\n  };\n\n\n  /**\n   * Draw an arrow at the end of a line with the given angle.\n   */\n  CanvasRenderingContext2D.prototype.arrowEndpoint = function (x, y, angle, length) {\n    // tail\n    var xt = x - length * Math.cos(angle);\n    var yt = y - length * Math.sin(angle);\n\n    // inner tail\n    var xi = x - length * 0.9 * Math.cos(angle);\n    var yi = y - length * 0.9 * Math.sin(angle);\n\n    // left\n    var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI);\n    var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI);\n\n    // right\n    var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI);\n    var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI);\n\n    this.beginPath();\n    this.moveTo(x, y);\n    this.lineTo(xl, yl);\n    this.lineTo(xi, yi);\n    this.lineTo(xr, yr);\n    this.closePath();\n  };\n\n  /**\n   * Draw an circle an the end of an line with the given angle.\n   */\n  CanvasRenderingContext2D.prototype.circleEndpoint = function (x, y, angle, length) {\n    var radius = length * 0.4;\n    var xc = x - radius * Math.cos(angle);\n    var yc = y - radius * Math.sin(angle);\n    this.circle(xc, yc, radius);\n  };\n\n  /**\n   * Sets up the dashedLine functionality for drawing\n   * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas\n   * @author David Jordan\n   * @date 2012-08-08\n   */\n  CanvasRenderingContext2D.prototype.dashedLine = function (x, y, x2, y2, pattern) {\n    this.beginPath();\n    this.moveTo(x, y);\n\n    var patternLength = pattern.length;\n    var dx = (x2 - x);\n    var dy = (y2 - y);\n    var slope = dy / dx;\n    var distRemaining = Math.sqrt(dx * dx + dy * dy);\n    var patternIndex = 0;\n    var draw = true;\n    var xStep = 0;\n    var dashLength = pattern[0];\n\n    while (distRemaining >= 0.1) {\n      dashLength = pattern[patternIndex++ % patternLength];\n      if (dashLength > distRemaining) {\n        dashLength = distRemaining;\n      }\n\n      xStep = Math.sqrt(dashLength * dashLength / (1 + slope * slope));\n      xStep = dx < 0 ? -xStep : xStep;\n      x += xStep;\n      y += slope * xStep;\n\n      if (draw === true) {this.lineTo(x,y);}\n      else               {this.moveTo(x,y);}\n\n      distRemaining -= dashLength;\n      draw = !draw;\n    }\n  };\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/shapes.js","/**\n * Parse a text source containing data in DOT language into a JSON object.\n * The object contains two lists: one with nodes and one with edges.\n *\n * DOT language reference: http://www.graphviz.org/doc/info/lang.html\n *\n * DOT language attributes: http://graphviz.org/content/attrs\n *\n * @param {String} data     Text containing a graph in DOT-notation\n * @return {Object} graph   An object containing two parameters:\n *                          {Object[]} nodes\n *                          {Object[]} edges\n */\nfunction parseDOT (data) {\n  dot = data;\n  return parseGraph();\n}\n\n// mapping of attributes from DOT (the keys) to vis.js (the values)\nvar NODE_ATTR_MAPPING = {\n  'fontsize': 'font.size',\n  'fontcolor': 'font.color',\n  'labelfontcolor': 'font.color',\n  'fontname': 'font.face',\n  'color': ['color.border', 'color.background'],\n  'fillcolor': 'color.background',\n  'tooltip': 'title',\n  'labeltooltip': 'title'\n};\nvar EDGE_ATTR_MAPPING = Object.create(NODE_ATTR_MAPPING);\nEDGE_ATTR_MAPPING.color = 'color.color';\n\n// token types enumeration\nvar TOKENTYPE = {\n  NULL : 0,\n  DELIMITER : 1,\n  IDENTIFIER: 2,\n  UNKNOWN : 3\n};\n\n// map with all delimiters\nvar DELIMITERS = {\n  '{': true,\n  '}': true,\n  '[': true,\n  ']': true,\n  ';': true,\n  '=': true,\n  ',': true,\n\n  '->': true,\n  '--': true\n};\n\nvar dot = '';                   // current dot file\nvar index = 0;                  // current index in dot file\nvar c = '';                     // current token character in expr\nvar token = '';                 // current token\nvar tokenType = TOKENTYPE.NULL; // type of the token\n\n/**\n * Get the first character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction first() {\n  index = 0;\n  c = dot.charAt(0);\n}\n\n/**\n * Get the next character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction next() {\n  index++;\n  c = dot.charAt(index);\n}\n\n/**\n * Preview the next character from the dot file.\n * @return {String} cNext\n */\nfunction nextPreview() {\n  return dot.charAt(index + 1);\n}\n\n/**\n * Test whether given character is alphabetic or numeric\n * @param {String} c\n * @return {Boolean} isAlphaNumeric\n */\nvar regexAlphaNumeric = /[a-zA-Z_0-9.:#]/;\nfunction isAlphaNumeric(c) {\n  return regexAlphaNumeric.test(c);\n}\n\n/**\n * Merge all options of object b into object b\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nfunction merge (a, b) {\n  if (!a) {\n    a = {};\n  }\n\n  if (b) {\n    for (var name in b) {\n      if (b.hasOwnProperty(name)) {\n        a[name] = b[name];\n      }\n    }\n  }\n  return a;\n}\n\n/**\n * Set a value in an object, where the provided parameter name can be a\n * path with nested parameters. For example:\n *\n *     var obj = {a: 2};\n *     setValue(obj, 'b.c', 3);     // obj = {a: 2, b: {c: 3}}\n *\n * @param {Object} obj\n * @param {String} path  A parameter name or dot-separated parameter path,\n *                      like \"color.highlight.border\".\n * @param {*} value\n */\nfunction setValue(obj, path, value) {\n  var keys = path.split('.');\n  var o = obj;\n  while (keys.length) {\n    var key = keys.shift();\n    if (keys.length) {\n      // this isn't the end point\n      if (!o[key]) {\n        o[key] = {};\n      }\n      o = o[key];\n    }\n    else {\n      // this is the end point\n      o[key] = value;\n    }\n  }\n}\n\n/**\n * Add a node to a graph object. If there is already a node with\n * the same id, their attributes will be merged.\n * @param {Object} graph\n * @param {Object} node\n */\nfunction addNode(graph, node) {\n  var i, len;\n  var current = null;\n\n  // find root graph (in case of subgraph)\n  var graphs = [graph]; // list with all graphs from current graph to root graph\n  var root = graph;\n  while (root.parent) {\n    graphs.push(root.parent);\n    root = root.parent;\n  }\n\n  // find existing node (at root level) by its id\n  if (root.nodes) {\n    for (i = 0, len = root.nodes.length; i < len; i++) {\n      if (node.id === root.nodes[i].id) {\n        current = root.nodes[i];\n        break;\n      }\n    }\n  }\n\n  if (!current) {\n    // this is a new node\n    current = {\n      id: node.id\n    };\n    if (graph.node) {\n      // clone default attributes\n      current.attr = merge(current.attr, graph.node);\n    }\n  }\n\n  // add node to this (sub)graph and all its parent graphs\n  for (i = graphs.length - 1; i >= 0; i--) {\n    var g = graphs[i];\n\n    if (!g.nodes) {\n      g.nodes = [];\n    }\n    if (g.nodes.indexOf(current) === -1) {\n      g.nodes.push(current);\n    }\n  }\n\n  // merge attributes\n  if (node.attr) {\n    current.attr = merge(current.attr, node.attr);\n  }\n}\n\n/**\n * Add an edge to a graph object\n * @param {Object} graph\n * @param {Object} edge\n */\nfunction addEdge(graph, edge) {\n  if (!graph.edges) {\n    graph.edges = [];\n  }\n  graph.edges.push(edge);\n  if (graph.edge) {\n    var attr = merge({}, graph.edge);     // clone default attributes\n    edge.attr = merge(attr, edge.attr); // merge attributes\n  }\n}\n\n/**\n * Create an edge to a graph object\n * @param {Object} graph\n * @param {String | Number | Object} from\n * @param {String | Number | Object} to\n * @param {String} type\n * @param {Object | null} attr\n * @return {Object} edge\n */\nfunction createEdge(graph, from, to, type, attr) {\n  var edge = {\n    from: from,\n    to: to,\n    type: type\n  };\n\n  if (graph.edge) {\n    edge.attr = merge({}, graph.edge);  // clone default attributes\n  }\n  edge.attr = merge(edge.attr || {}, attr); // merge attributes\n\n  return edge;\n}\n\n/**\n * Get next token in the current dot file.\n * The token and token type are available as token and tokenType\n */\nfunction getToken() {\n  tokenType = TOKENTYPE.NULL;\n  token = '';\n\n  // skip over whitespaces\n  while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {  // space, tab, enter\n    next();\n  }\n\n  do {\n    var isComment = false;\n\n    // skip comment\n    if (c === '#') {\n      // find the previous non-space character\n      var i = index - 1;\n      while (dot.charAt(i) === ' ' || dot.charAt(i) === '\\t') {\n        i--;\n      }\n      if (dot.charAt(i) === '\\n' || dot.charAt(i) === '') {\n        // the # is at the start of a line, this is indeed a line comment\n        while (c != '' && c != '\\n') {\n          next();\n        }\n        isComment = true;\n      }\n    }\n    if (c === '/' && nextPreview() === '/') {\n      // skip line comment\n      while (c != '' && c != '\\n') {\n        next();\n      }\n      isComment = true;\n    }\n    if (c === '/' && nextPreview() === '*') {\n      // skip block comment\n      while (c != '') {\n        if (c === '*' && nextPreview() === '/') {\n          // end of block comment found. skip these last two characters\n          next();\n          next();\n          break;\n        }\n        else {\n          next();\n        }\n      }\n      isComment = true;\n    }\n\n    // skip over whitespaces\n    while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {  // space, tab, enter\n      next();\n    }\n  }\n  while (isComment);\n\n  // check for end of dot file\n  if (c === '') {\n    // token is still empty\n    tokenType = TOKENTYPE.DELIMITER;\n    return;\n  }\n\n  // check for delimiters consisting of 2 characters\n  var c2 = c + nextPreview();\n  if (DELIMITERS[c2]) {\n    tokenType = TOKENTYPE.DELIMITER;\n    token = c2;\n    next();\n    next();\n    return;\n  }\n\n  // check for delimiters consisting of 1 character\n  if (DELIMITERS[c]) {\n    tokenType = TOKENTYPE.DELIMITER;\n    token = c;\n    next();\n    return;\n  }\n\n  // check for an identifier (number or string)\n  // TODO: more precise parsing of numbers/strings (and the port separator ':')\n  if (isAlphaNumeric(c) || c === '-') {\n    token += c;\n    next();\n\n    while (isAlphaNumeric(c)) {\n      token += c;\n      next();\n    }\n    if (token === 'false') {\n      token = false;   // convert to boolean\n    }\n    else if (token === 'true') {\n      token = true;   // convert to boolean\n    }\n    else if (!isNaN(Number(token))) {\n      token = Number(token); // convert to number\n    }\n    tokenType = TOKENTYPE.IDENTIFIER;\n    return;\n  }\n\n  // check for a string enclosed by double quotes\n  if (c === '\"') {\n    next();\n    while (c != '' && (c != '\"' || (c === '\"' && nextPreview() === '\"'))) {\n      token += c;\n      if (c === '\"') { // skip the escape character\n        next();\n      }\n      next();\n    }\n    if (c != '\"') {\n      throw newSyntaxError('End of string \" expected');\n    }\n    next();\n    tokenType = TOKENTYPE.IDENTIFIER;\n    return;\n  }\n\n  // something unknown is found, wrong characters, a syntax error\n  tokenType = TOKENTYPE.UNKNOWN;\n  while (c != '') {\n    token += c;\n    next();\n  }\n  throw new SyntaxError('Syntax error in part \"' + chop(token, 30) + '\"');\n}\n\n/**\n * Parse a graph.\n * @returns {Object} graph\n */\nfunction parseGraph() {\n  var graph = {};\n\n  first();\n  getToken();\n\n  // optional strict keyword\n  if (token === 'strict') {\n    graph.strict = true;\n    getToken();\n  }\n\n  // graph or digraph keyword\n  if (token === 'graph' || token === 'digraph') {\n    graph.type = token;\n    getToken();\n  }\n\n  // optional graph id\n  if (tokenType === TOKENTYPE.IDENTIFIER) {\n    graph.id = token;\n    getToken();\n  }\n\n  // open angle bracket\n  if (token != '{') {\n    throw newSyntaxError('Angle bracket { expected');\n  }\n  getToken();\n\n  // statements\n  parseStatements(graph);\n\n  // close angle bracket\n  if (token != '}') {\n    throw newSyntaxError('Angle bracket } expected');\n  }\n  getToken();\n\n  // end of file\n  if (token !== '') {\n    throw newSyntaxError('End of file expected');\n  }\n  getToken();\n\n  // remove temporary default options\n  delete graph.node;\n  delete graph.edge;\n  delete graph.graph;\n\n  return graph;\n}\n\n/**\n * Parse a list with statements.\n * @param {Object} graph\n */\nfunction parseStatements (graph) {\n  while (token !== '' && token != '}') {\n    parseStatement(graph);\n    if (token === ';') {\n      getToken();\n    }\n  }\n}\n\n/**\n * Parse a single statement. Can be a an attribute statement, node\n * statement, a series of node statements and edge statements, or a\n * parameter.\n * @param {Object} graph\n */\nfunction parseStatement(graph) {\n  // parse subgraph\n  var subgraph = parseSubgraph(graph);\n  if (subgraph) {\n    // edge statements\n    parseEdge(graph, subgraph);\n\n    return;\n  }\n\n  // parse an attribute statement\n  var attr = parseAttributeStatement(graph);\n  if (attr) {\n    return;\n  }\n\n  // parse node\n  if (tokenType != TOKENTYPE.IDENTIFIER) {\n    throw newSyntaxError('Identifier expected');\n  }\n  var id = token; // id can be a string or a number\n  getToken();\n\n  if (token === '=') {\n    // id statement\n    getToken();\n    if (tokenType != TOKENTYPE.IDENTIFIER) {\n      throw newSyntaxError('Identifier expected');\n    }\n    graph[id] = token;\n    getToken();\n    // TODO: implement comma separated list with \"a_list: ID=ID [','] [a_list] \"\n  }\n  else {\n    parseNodeStatement(graph, id);\n  }\n}\n\n/**\n * Parse a subgraph\n * @param {Object} graph    parent graph object\n * @return {Object | null} subgraph\n */\nfunction parseSubgraph (graph) {\n  var subgraph = null;\n\n  // optional subgraph keyword\n  if (token === 'subgraph') {\n    subgraph = {};\n    subgraph.type = 'subgraph';\n    getToken();\n\n    // optional graph id\n    if (tokenType === TOKENTYPE.IDENTIFIER) {\n      subgraph.id = token;\n      getToken();\n    }\n  }\n\n  // open angle bracket\n  if (token === '{') {\n    getToken();\n\n    if (!subgraph) {\n      subgraph = {};\n    }\n    subgraph.parent = graph;\n    subgraph.node = graph.node;\n    subgraph.edge = graph.edge;\n    subgraph.graph = graph.graph;\n\n    // statements\n    parseStatements(subgraph);\n\n    // close angle bracket\n    if (token != '}') {\n      throw newSyntaxError('Angle bracket } expected');\n    }\n    getToken();\n\n    // remove temporary default options\n    delete subgraph.node;\n    delete subgraph.edge;\n    delete subgraph.graph;\n    delete subgraph.parent;\n\n    // register at the parent graph\n    if (!graph.subgraphs) {\n      graph.subgraphs = [];\n    }\n    graph.subgraphs.push(subgraph);\n  }\n\n  return subgraph;\n}\n\n/**\n * parse an attribute statement like \"node [shape=circle fontSize=16]\".\n * Available keywords are 'node', 'edge', 'graph'.\n * The previous list with default attributes will be replaced\n * @param {Object} graph\n * @returns {String | null} keyword Returns the name of the parsed attribute\n *                                  (node, edge, graph), or null if nothing\n *                                  is parsed.\n */\nfunction parseAttributeStatement (graph) {\n  // attribute statements\n  if (token === 'node') {\n    getToken();\n\n    // node attributes\n    graph.node = parseAttributeList();\n    return 'node';\n  }\n  else if (token === 'edge') {\n    getToken();\n\n    // edge attributes\n    graph.edge = parseAttributeList();\n    return 'edge';\n  }\n  else if (token === 'graph') {\n    getToken();\n\n    // graph attributes\n    graph.graph = parseAttributeList();\n    return 'graph';\n  }\n\n  return null;\n}\n\n/**\n * parse a node statement\n * @param {Object} graph\n * @param {String | Number} id\n */\nfunction parseNodeStatement(graph, id) {\n  // node statement\n  var node = {\n    id: id\n  };\n  var attr = parseAttributeList();\n  if (attr) {\n    node.attr = attr;\n  }\n  addNode(graph, node);\n\n  // edge statements\n  parseEdge(graph, id);\n}\n\n/**\n * Parse an edge or a series of edges\n * @param {Object} graph\n * @param {String | Number} from        Id of the from node\n */\nfunction parseEdge(graph, from) {\n  while (token === '->' || token === '--') {\n    var to;\n    var type = token;\n    getToken();\n\n    var subgraph = parseSubgraph(graph);\n    if (subgraph) {\n      to = subgraph;\n    }\n    else {\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Identifier or subgraph expected');\n      }\n      to = token;\n      addNode(graph, {\n        id: to\n      });\n      getToken();\n    }\n\n    // parse edge attributes\n    var attr = parseAttributeList();\n\n    // create edge\n    var edge = createEdge(graph, from, to, type, attr);\n    addEdge(graph, edge);\n\n    from = to;\n  }\n}\n\n/**\n * Parse a set with attributes,\n * for example [label=\"1.000\", shape=solid]\n * @return {Object | null} attr\n */\nfunction parseAttributeList() {\n  var attr = null;\n\n  while (token === '[') {\n    getToken();\n    attr = {};\n    while (token !== '' && token != ']') {\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Attribute name expected');\n      }\n      var name = token;\n\n      getToken();\n      if (token != '=') {\n        throw newSyntaxError('Equal sign = expected');\n      }\n      getToken();\n\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Attribute value expected');\n      }\n      var value = token;\n      setValue(attr, name, value); // name can be a path\n\n      getToken();\n      if (token ==',') {\n        getToken();\n      }\n    }\n\n    if (token != ']') {\n      throw newSyntaxError('Bracket ] expected');\n    }\n    getToken();\n  }\n\n  return attr;\n}\n\n/**\n * Create a syntax error with extra information on current token and index.\n * @param {String} message\n * @returns {SyntaxError} err\n */\nfunction newSyntaxError(message) {\n  return new SyntaxError(message + ', got \"' + chop(token, 30) + '\" (char ' + index + ')');\n}\n\n/**\n * Chop off text after a maximum length\n * @param {String} text\n * @param {Number} maxLength\n * @returns {String}\n */\nfunction chop (text, maxLength) {\n  return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...');\n}\n\n/**\n * Execute a function fn for each pair of elements in two arrays\n * @param {Array | *} array1\n * @param {Array | *} array2\n * @param {function} fn\n */\nfunction forEach2(array1, array2, fn) {\n  if (Array.isArray(array1)) {\n    array1.forEach(function (elem1) {\n      if (Array.isArray(array2)) {\n        array2.forEach(function (elem2)  {\n          fn(elem1, elem2);\n        });\n      }\n      else {\n        fn(elem1, array2);\n      }\n    });\n  }\n  else {\n    if (Array.isArray(array2)) {\n      array2.forEach(function (elem2)  {\n        fn(array1, elem2);\n      });\n    }\n    else {\n      fn(array1, array2);\n    }\n  }\n}\n\n/**\n * Set a nested property on an object\n * When nested objects are missing, they will be created.\n * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}\n * @param {Object} object\n * @param {string} path   A dot separated string like 'font.color'\n * @param {*} value       Value for the property\n * @return {Object} Returns the original object, allows for chaining.\n */\nfunction setProp(object, path, value) {\n  var names = path.split('.');\n  var prop = names.pop();\n\n  // traverse over the nested objects\n  var obj = object;\n  for (var i = 0; i < names.length; i++) {\n    var name = names[i];\n    if (!(name in obj)) {\n      obj[name] = {};\n    }\n    obj = obj[name];\n  }\n\n  // set the property value\n  obj[prop] = value;\n\n  return object;\n}\n\n/**\n * Convert an object with DOT attributes to their vis.js equivalents.\n * @param {Object} attr     Object with DOT attributes\n * @param {Object} mapping\n * @return {Object}         Returns an object with vis.js attributes\n */\nfunction convertAttr (attr, mapping) {\n  var converted = {};\n\n  for (var prop in attr) {\n    if (attr.hasOwnProperty(prop)) {\n      var visProp = mapping[prop];\n      if (Array.isArray(visProp)) {\n        visProp.forEach(function (visPropI) {\n          setProp(converted, visPropI, attr[prop]);\n        })\n      }\n      else if (typeof visProp === 'string') {\n        setProp(converted, visProp, attr[prop]);\n      }\n      else {\n        setProp(converted, prop, attr[prop]);\n      }\n    }\n  }\n\n  return converted;\n}\n\n/**\n * Convert a string containing a graph in DOT language into a map containing\n * with nodes and edges in the format of graph.\n * @param {String} data         Text containing a graph in DOT-notation\n * @return {Object} graphData\n */\nfunction DOTToGraph (data) {\n  // parse the DOT file\n  var dotData = parseDOT(data);\n  var graphData = {\n    nodes: [],\n    edges: [],\n    options: {}\n  };\n\n  // copy the nodes\n  if (dotData.nodes) {\n    dotData.nodes.forEach(function (dotNode) {\n      var graphNode = {\n        id: dotNode.id,\n        label: String(dotNode.label || dotNode.id)\n      };\n      merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));\n      if (graphNode.image) {\n        graphNode.shape = 'image';\n      }\n      graphData.nodes.push(graphNode);\n    });\n  }\n\n  // copy the edges\n  if (dotData.edges) {\n    /**\n     * Convert an edge in DOT format to an edge with VisGraph format\n     * @param {Object} dotEdge\n     * @returns {Object} graphEdge\n     */\n    var convertEdge = function (dotEdge) {\n      var graphEdge = {\n        from: dotEdge.from,\n        to: dotEdge.to\n      };\n      merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));\n      graphEdge.arrows = (dotEdge.type === '->') ? 'to' : undefined;\n\n      return graphEdge;\n    };\n\n    dotData.edges.forEach(function (dotEdge) {\n      var from, to;\n      if (dotEdge.from instanceof Object) {\n        from = dotEdge.from.nodes;\n      }\n      else {\n        from = {\n          id: dotEdge.from\n        }\n      }\n\n      // TODO: support of solid/dotted/dashed edges (attr = 'style')\n      // TODO: support for attributes 'dir' and 'arrowhead' (edge arrows)\n\n      if (dotEdge.to instanceof Object) {\n        to = dotEdge.to.nodes;\n      }\n      else {\n        to = {\n          id: dotEdge.to\n        }\n      }\n\n      if (dotEdge.from instanceof Object && dotEdge.from.edges) {\n        dotEdge.from.edges.forEach(function (subEdge) {\n          var graphEdge = convertEdge(subEdge);\n          graphData.edges.push(graphEdge);\n        });\n      }\n\n      forEach2(from, to, function (from, to) {\n        var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr);\n        var graphEdge = convertEdge(subEdge);\n        graphData.edges.push(graphEdge);\n      });\n\n      if (dotEdge.to instanceof Object && dotEdge.to.edges) {\n        dotEdge.to.edges.forEach(function (subEdge) {\n          var graphEdge = convertEdge(subEdge);\n          graphData.edges.push(graphEdge);\n        });\n      }\n    });\n  }\n\n  // copy the options\n  if (dotData.attr) {\n    graphData.options = dotData.attr;\n  }\n\n  return graphData;\n}\n\n// exports\nexports.parseDOT   = parseDOT;\nexports.DOTToGraph = DOTToGraph;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/dotparser.js","\nfunction parseGephi(gephiJSON, optionsObj) {\n  var edges = [];\n  var nodes = [];\n  var options = {\n    edges: {\n      inheritColor: false\n    },\n    nodes: {\n      fixed: false,\n      parseColor: false\n    }\n  };\n\n  if (optionsObj !== undefined) {\n    if (optionsObj.fixed !== undefined)        {options.nodes.fixed = optionsObj.fixed}\n    if (optionsObj.parseColor !== undefined)   {options.nodes.parseColor = optionsObj.parseColor}\n    if (optionsObj.inheritColor !== undefined) {options.edges.inheritColor = optionsObj.inheritColor}\n  }\n\n  var gEdges = gephiJSON.edges;\n  var gNodes = gephiJSON.nodes;\n  for (var i = 0; i < gEdges.length; i++) {\n    var edge = {};\n    var gEdge = gEdges[i];\n    edge['id'] = gEdge.id;\n    edge['from'] = gEdge.source;\n    edge['to'] = gEdge.target;\n    edge['attributes'] = gEdge.attributes;\n    edge['label'] = gEdge.label;\n    edge['title'] = gEdge.attributes !== undefined ? gEdge.attributes.title : undefined;\n    if (gEdge['type'] === 'Directed') {\n      edge['arrows'] = 'to';\n    }\n//    edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined;\n//    edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size;\n    if (gEdge.color && options.inheritColor === false) {\n      edge['color'] = gEdge.color;\n    }\n    edges.push(edge);\n  }\n\n  for (var i = 0; i < gNodes.length; i++) {\n    var node = {};\n    var gNode = gNodes[i];\n    node['id'] = gNode.id;\n    node['attributes'] = gNode.attributes;\n    node['title'] = gNode.title;\n    node['x'] = gNode.x;\n    node['y'] = gNode.y;\n    node['label'] = gNode.label;\n    node['title'] = gNode.attributes !== undefined ? gNode.attributes.title : undefined;\n    if (options.nodes.parseColor === true) {\n      node['color'] = gNode.color;\n    }\n    else {\n      node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color, highlight: {background:gNode.color, border:gNode.color}, hover:{background:gNode.color, border:gNode.color}} : undefined;\n    }\n    node['size'] = gNode.size;\n    node['fixed'] = options.nodes.fixed && gNode.x !== undefined && gNode.y !== undefined;\n    nodes.push(node);\n  }\n\n  return {nodes:nodes, edges:edges};\n}\n\nexports.parseGephi = parseGephi;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/gephiParser.js","// English\nexports['en'] = {\n  edit: 'Edit',\n  del: 'Delete selected',\n  back: 'Back',\n  addNode: 'Add Node',\n  addEdge: 'Add Edge',\n  editNode: 'Edit Node',\n  editEdge: 'Edit Edge',\n  addDescription: 'Click in an empty space to place a new node.',\n  edgeDescription: 'Click on a node and drag the edge to another node to connect them.',\n  editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.',\n  createEdgeError: 'Cannot link edges to a cluster.',\n  deleteClusterError: 'Clusters cannot be deleted.',\n  editClusterError: 'Clusters cannot be edited.'\n};\nexports['en_EN'] = exports['en'];\nexports['en_US'] = exports['en'];\n\n// German\nexports['de'] = {\n  edit: 'Editieren',\n  del: 'L\\u00f6sche Auswahl',\n  back: 'Zur\\u00fcck',\n  addNode: 'Knoten hinzuf\\u00fcgen',\n  addEdge: 'Kante hinzuf\\u00fcgen',\n  editNode: 'Knoten editieren',\n  editEdge: 'Kante editieren',\n  addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.',\n  edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.',\n  editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.',\n  createEdgeError: 'Es ist nicht m\\u00f6glich, Kanten mit Clustern zu verbinden.',\n  deleteClusterError: 'Cluster k\\u00f6nnen nicht gel\\u00f6scht werden.',\n  editClusterError: 'Cluster k\\u00f6nnen nicht editiert werden.'\n};\nexports['de_DE'] = exports['de'];\n\n// Spanish\nexports['es'] = {\n  edit: 'Editar',\n  del: 'Eliminar selecci\\u00f3n',\n  back: '\\u00c1tras',\n  addNode: 'A\\u00f1adir nodo',\n  addEdge: 'A\\u00f1adir arista',\n  editNode: 'Editar nodo',\n  editEdge: 'Editar arista',\n  addDescription: 'Haga clic en un lugar vac\\u00edo para colocar un nuevo nodo.',\n  edgeDescription: 'Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.',\n  editEdgeDescription: 'Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.',\n  createEdgeError: 'No se puede conectar una arista a un grupo.',\n  deleteClusterError: 'No es posible eliminar grupos.',\n  editClusterError: 'No es posible editar grupos.'\n};\nexports['es_ES'] = exports['es'];\n\n//Italiano\nexports['it'] = {\n  edit: 'Modifica',\n  del: 'Cancella la selezione',\n  back: 'Indietro',\n  addNode: 'Aggiungi un nodo',\n  addEdge: 'Aggiungi un vertice',\n  editNode: 'Modifica il nodo',\n  editEdge: 'Modifica il vertice',\n  addDescription: 'Clicca per aggiungere un nuovo nodo',\n  edgeDescription: 'Clicca su un nodo e trascinalo ad un altro nodo per connetterli.',\n  editEdgeDescription: 'Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.',\n  createEdgeError: 'Non si possono collegare vertici ad un cluster',\n  deleteClusterError: 'I cluster non possono essere cancellati',\n  editClusterError: 'I clusters non possono essere modificati.'\n};\nexports['it_IT'] = exports['it'];\n\n// Dutch\nexports['nl'] = {\n  edit: 'Wijzigen',\n  del: 'Selectie verwijderen',\n  back: 'Terug',\n  addNode: 'Node toevoegen',\n  addEdge: 'Link toevoegen',\n  editNode: 'Node wijzigen',\n  editEdge: 'Link wijzigen',\n  addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.',\n  edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.',\n  editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.',\n  createEdgeError: 'Kan geen link maken naar een cluster.',\n  deleteClusterError: 'Clusters kunnen niet worden verwijderd.',\n  editClusterError: 'Clusters kunnen niet worden aangepast.'\n};\nexports['nl_NL'] = exports['nl'];\nexports['nl_BE'] = exports['nl'];\n\n// Portuguese Brazil\nexports['pt-br'] = {\n  edit: 'Editar',\n  del: 'Remover selecionado',\n  back: 'Voltar',\n  addNode: 'Adicionar nó',\n  addEdge: 'Adicionar aresta',\n  editNode: 'Editar nó',\n  editEdge: 'Editar aresta',\n  addDescription: 'Clique em um espaço em branco para adicionar um novo nó',\n  edgeDescription: 'Clique em um nó e arraste a aresta até outro nó para conectá-los',\n  editEdgeDescription: 'Clique nos pontos de controle e os arraste para um nó para conectá-los',\n  createEdgeError: 'Não foi possível linkar arestas a um cluster.',\n  deleteClusterError: 'Clusters não puderam ser removidos.',\n  editClusterError: 'Clusters não puderam ser editados.'\n};\nexports['pt-BR'] = exports['pt-br'];\nexports['pt_BR'] = exports['pt-br'];\nexports['pt_br'] = exports['pt-br'];\n\n// Russian\nexports['ru'] = {\n  edit: 'Редактировать',\n  del: 'Удалить выбранное',\n  back: 'Назад',\n  addNode: 'Добавить узел',\n  addEdge: 'Добавить ребро',\n  editNode: 'Редактировать узел',\n  editEdge: 'Редактировать ребро',\n  addDescription: 'Кликните в свободное место, чтобы добавить новый узел.',\n  edgeDescription: 'Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.',\n  editEdgeDescription: 'Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.',\n  createEdgeError: 'Невозможно соединить ребра в кластер.',\n  deleteClusterError: 'Кластеры не могут быть удалены',\n  editClusterError: 'Кластеры недоступны для редактирования.'\n};\nexports['ru_RU'] = exports['ru'];\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/locales.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.map b/01_Code/physical_computing_interface/lib/vis/dist/vis.map
new file mode 100644
index 0000000000000000000000000000000000000000..98823da791a4bc2f9f993429a4b45fbd2b41a02b
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.map
@@ -0,0 +1 @@
+{"version":3,"sources":["C:\\Users\\yotamberk\\Desktop\\workspace\\vis/dist/vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","default","instance","Constructor","TypeError","_defineProperty","_defineProperty2","obj","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","_interopRequireDefault","copyOrDelete","a","b","prop","allowDeletion","doDeletion","undefined","_getIterator2","_getIterator3","_create","_create2","_keys","_keys2","_typeof2","_typeof3","moment","uuid","isNumber","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","fillIfDefined","arguments","extend","other","selectiveExtend","Array","isArray","Error","selectiveDeepExtend","constructor","deepExtend","selectiveNotDeepExtend","propsToExclude","indexOf","push","protoExtend","equalArray","len","convert","type","match","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","classNames","classes","className","split","newClasses","concat","filter","join","removeClassName","oldClasses","forEach","callback","toArray","array","updateProperty","throttle","fn","scheduled","requestAnimationFrame","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","Element","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","isPresent","isObject","srcOption","globalPassed","x","globalOption","globalEnabled","enabled","src","dst","binarySearchCustom","orderedItems","comparator","field","field2","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","member","err","self","ReferenceError","_setPrototypeOf","_setPrototypeOf2","subClass","superClass","__proto__","_iterator2","_symbol","_symbol2","_typeof","core","version","__e","hammerMock","noop","on","off","destroy","emit","set","propagating","Hammer","DataSet","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","_stringify","_stringify2","util","Queue","queue","_queue","subscribers","_trigger","params","senderId","subscriber","id","addedIds","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","console","warn","args","ids","firstType","returnType","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","sort","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","DataView","_ids","_onEvent","apply","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","subscribe","unsubscribe","store","uid","Symbol","USE_SYMBOL","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","shift","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","y","groupTemplate","labelObj","point","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","printStyle","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","errorFound","allOptions","Validator","referenceOptions","subObject","usedOptions","path","check","__any__","getSuggestion","referenceOption","is_object","refOptionObj","__type__","checkFields","log","message","printLocation","optionType","refOptionType","print","_isAMomentObject","localSearch","findInOptions","globalSearch","msg","indexMatch","distance","closestMatch","recursive","closestMatchPath","lowerCaseOption","toLowerCase","op","levenshteinDistance","prefix","str","_j","_i","_j2","matrix","charAt","Component","redraw","_isResized","resized","_previousWidth","_previousHeight","global","ctx","hide","$export","source","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","C","Function","virtual","R","U","__g","anObject","IE8_DOM_DEFINE","toPrimitive","dP","O","Attributes","it","NodeBase","labelModule","radius","margin","refreshNeeded","boundingBox","bottom","adjustSizes","angle","borderWidth","resize","abs","cos","sin","shadow","shadowColor","shadowBlur","shadowSize","shadowOffsetX","shadowX","shadowOffsetY","shadowY","borderDashes","setLineDash","dashes","shapeProperties","selected","differentState","view","lineWidth","strokeStyle","borderColor","fillStyle","save","enableBorderDashes","stroke","disableBorderDashes","restore","enableShadow","fill","disableShadow","performStroke","_updateBoundingBox","textSize","getTextSize","_getPrototypeOf","_getPrototypeOf2","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_NodeBase2","_NodeBase3","ShapeBase","_NodeBase","needsRefresh","shape","sizeMultiplier","initContextForDraw","performFill","calculateLabelSize","yLabel","draw","updateBoundingBox","IObject","defined","createDesc","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_d","_e","_s","$keys","enumBugKeys","keys","Point3d","z","subtract","sub","sum","avg","crossProduct","crossproduct","sqrt","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","keycharm","container","_exportFunctions","_bound","keydown","keyup","fromCharCode","code","down","handleEvent","up","keyCode","bound","shiftKey","bind","bindAll","getKey","unbind","newBindings","reset","convertHiddenOptions","hiddenDates","repeat","dateItem","start","end","updateHiddenDates","domProps","centerContainer","range","totalRange","pixelTime","startDate","endDate","duration","offset","runUntil","clone","day","dayOfYear","year","dayOffset","diff","date","month","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","startToFront","endToFront","_applyRange","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","_end","switchedYear","switchedMonth","switchedDay","toScreen","Core","time","conversion","getHiddenDurationBetween","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","toTime","hiddenDuration","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","getHiddenDurationBefore","timeOffset","requiredDuration","previousPoint","snapAwayFromHidden","direction","correctionEnabled","onTouch","hammer","inputHandler","isFirst","onRelease","isFinal","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","getTouchAction","Item","dom","displayed","groupShowing","dirty","editable","_updateEditStatus","stack","select","unselect","group","itemSet","_moveToGroup","stackDirty","subgroup","changeSubgroup","setParent","show","isVisible","repositionX","repositionY","_repaintDragCenter","updateTime","dragCenter","dragCenterItem","emitter","stopPropagation","_onUpdateItem","box","dragLeft","_repaintDeleteButton","anchor","overrideItems","deleteButton","rtl","title","removeFromDataSet","_repaintOnItemUpdateTimeTooltip","tooltipOnItemUpdateTime","onItemUpdateTimeTooltip","touchParams","itemIsDragging","itemDistanceFromTop","scrollTop","orientation","templateFunction","template","innerHTML","_updateContents","itemVisibleFrameContent","visibleFrameTemplateFunction","itemData","itemsData","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","_updateDataAttributes","dataAttributes","attributes","setAttribute","removeAttribute","_updateStyle","outerHTML","updateGroup","getWidthLeft","getWidthRight","getTitle","bitmap","px","random","propertyIsEnumerable","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","context","entry","clearTimeout","setTimeout","Emitter","mixin","_callbacks","once","removeListener","removeAllListeners","callbacks","cb","splice","listeners","hasListeners","TimeAxis","foreground","lines","majorTexts","minorTexts","minimumStep","lineTop","defaultOptions","axis","showMinorLabels","showMajorLabels","maxMinorChars","TimeStep","FORMAT","timeAxis","DateUtil","locale","lang","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","backgroundVertical","timeLabelsize","minorCharWidth","step","setMoment","setFormat","setScale","xNext","isMajor","showMinorGrid","prevWidth","line","labelMinor","xFirstMajorLabel","getCurrent","hasNext","getClassName","getLabelMinor","_repaintMinorText","_repaintMajorText","getLabelMajor","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","text","createTextNode","childNodes","measureCharMinor","clientHeight","measureCharMajor","CustomTime","locales","customTime","eventParams","onMouseWheel","_onMouseWheel","bar","drag","_onDragStart","_onDrag","_onDragEnd","threshold","DIRECTION_HORIZONTAL","warned","toUpperCase","substring","setCustomTime","getCustomTime","setCustomTitle","dragging","deltaX","customTimeFromTarget","Label","ComponentUtil","Box","Circle","CircularImage","Database","Diamond","Dot","Ellipse","Icon","Image","Square","Hexagon","Star","Text","Triangle","TriangleDown","_require","Node","imagelist","grouplist","edges","baseSize","baseFontSize","font","predefinedPosition","edge","index","currentShape","checkMass","parseFloat","parseOptions","chooser","choosify","_load_images","updateLabelModule","updateShape","physics","image","imageObj","load","brokenImage","unselected","imageObjAlt","borderRadius","updateGroupOptions","currentGroup","distanceToBorder","fixed","scaling","customScalingFunction","sizeDiff","fontDiff","getFormattingValues","ret","visible","pointInRect","getSize","nodeId","labelId","parentOptions","newOptions","groupList","groupObj","parsedColor","mass","strId","subOption","allowed","chosen","chosenEdge","rotationPoint","tmp","Iterators","TO_STRING_TAG","DOMIterables","NAME","Collection","proto","val","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","display","contentWindow","open","write","lt","close","create","Properties","ceil","shared","def","has","TAG","tag","stat","$at","iterated","_t","LIBRARY","wksExt","$Symbol","getOwnPropertySymbols","Range","now","hours","minutes","seconds","milliseconds","millisecondsPerPixelCache","rolling","deltaDifference","scaleOffset","moveable","zoomable","zoomMin","zoomMax","rollingMode","follow","touch","animationTimer","_onTouch","_onPinch","rollingModeBtn","startRolling","validateDirection","setRange","stopRolling","interval","animation","center","currentTimeTimer","frameCallback","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","ease","changed","timeoutID","getMillisecondsPerPixel","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","cursor","delta","deltaY","diffRange","safeStart","safeEnd","wheelDelta","detail","zoomKey","pointerDate","pointer","getPointer","clientX","clientY","_pointerToDate","zoom","centerDate","hiddenDurationBefore","hiddenDurationAfter","move","moveTo","hammerUtil","Activator","isActive","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","verticalScroll","adjusted","_setScrollTop","_redraw","horizontalScroll","onMouseScrollSide","handleDragOver","itemAddedToTimeline","dataTransfer","dropEffect","handleDrop","JSON","getData","_onAddItem","_onDropObjectOnItem","getEventProperties","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTopMin","initialDrawDone","initialRangeChangeDone","_origRedraw","properties","initialItemSetDrawn","enable","customTimes","redrawCount","timeAxis2","components","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","_createConfigurator","configure","appliedOptions","setModuleOptions","active","setItems","setGroups","_stopAutoResize","setCustomTimeTitle","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","fit","getDataRange","setWindow","getWindow","zoomIn","percentage","newInterval","zoomOut","maxHeight","minHeight","offsetHeight","borderRootHeight","borderRootWidth","contentHeight","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","RegExp","contentsOverflow","DIRECTION_ALL","centerWidth","repaint","setCurrentTime","currentTime","getCurrentTime","_toTime","_toGlobalTime","_toScreen","_toGlobalScreen","autoResize","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","clearInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","_start","autoScale","minorLabels","millisecond","second","minute","hour","weekday","week","majorLabels","defaultFormat","setMinimumStep","roundToMinor","prev","nextWeek","isSame","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","snap","round","even","today","_moment","currentWeek","currentMonth","CurrentTime","showCurrentTime","stop","Group","groupId","subgroups","subgroupStack","subgroupStackAll","doInnerStack","subgroupIndex","subgroupOrderer","subgroupOrder","nestedGroups","showNested","nestedInGroup","visibleItems","itemsInRange","byStart","byEnd","checkRangedItems","groupEditable","marker","collapsedDirClassName","paddingRight","paddingLeft","getLabelWidth","_didMarkerHeightChange","markerHeight","lastMarkerHeight","redrawQueue","redrawQueueLength","fns","_calculateGroupSizeAndPosition","offsetTop","offsetLeft","_redrawItems","forceRestack","lastIsVisible","visibleSubgroups","stackSubgroups","stackSubgroupsWithInnerStack","customOrderedItems","_updateItemsInRange","nostack","_didResize","labelWidth","labelHeight","_applyGroupHeight","_updateItemsVerticalPosition","ii","returnQueue","_updateSubGroupHeights","_isGroupVisible","_updateSubgroupsSizes","_calculateHeight","resetSubgroups","vertical","labelSet","_addToSubgroup","orderSubgroups","_checkIfVisible","subgroupId","itemEnd","initialEnd","sortArray","sortField","_removeFromSubgroup","itemIndex","removeItem","startArray","endArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","oldSubgroup","newSubgroup","BackgroundGroup","RangeItem","baseClassName","_createDomElement","frame","visibleFrame","_appendDomElement","_updateDirtyDomComponents","maxWidth","_getDomComponentsSizes","getComputedStyle","_updateDomComponentsSizes","sizes","_repaintDomAdditionals","_repaintDragLeft","_repaintDragRight","limitSize","contentStartPosition","contentWidth","parentWidth","align","boxWidth","itemsAlwaysDraggable","dragLeftItem","dragRight","dragRightItem","ColorPicker","Configurator","parentModule","defaultContainer","configureOptions","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","_removePopup","_clean","_this","counter","_handleObject","_makeItem","_makeHeader","generateButton","onclick","_printOptions","onmouseover","onmouseout","optionsContainer","_push","_showPopupIfNeeded","base","_len","_key","div","objectLabel","selectedValue","onchange","_update","_makeLabel","popupString","popupValue","input","oninput","_setupPopup","string","_this2","html","hideTimeout","deleteTimeout","_this3","correspondingElement","checkbox","checked","_this4","defaultColor","backgroundColor","_showColorPicker","_this5","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","solver","enabledPath","enabledValue","_label","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","getOptions","Points","getGroupTemplate","callbackResult","getCallback","framework","DOMutil","dataset","screen_x","screen_y","svgElements","svg","drawIcon","iconWidth","iconHeight","fillHeight","outline","CircleImageBase","labelOffset","setImages","selection_changed","imageTmp","useImageSize","ratio_width","ratio_height","circle","globalAlpha","factor","interpolation","drawImageAtPosition","labelDimensions","lineCount","CubicBezierEdge","BezierEdgeDynamic","BezierEdgeStatic","StraightEdge","Edge","fromId","toId","labelDirty","baseWidth","from","to","edgeType","connected","dataChanged","updateEdgeType","_setInteractionWidths","connect","toArrow","arrows","fromArrow","middleArrow","inheritsColor","inherit","toArrowScale","scaleFactor","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","arrowStrikethrough","selectedWidth","selectionWidth","hoverWidth","smooth","changeInType","cleanup","disconnect","nodes","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","pointToSelf","getPoint","_getRotation","translate","rotate","selfReferenceSize","_pointOnCircle","edgeId","isOverlappingWith","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","yLine","dy","dx","atan2","PI","copyFromGlobals","isValidLabel","fromColor","toColor","colorsDefined","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","nearNode","pos","distanceToPoint","difference","_getViaCoordinates","node","pow","x1","y1","x2","y2","x3","y3","via","minDistance","lastX","lastY","_getDistanceToLine","viaNode1","viaNode2","hasNode1","hasNode2","beginPath","bezierCurveTo","quadraticCurveTo","lineTo","NetworkUtil","allNodes","specificNodes","minY","maxY","minX","maxX","clonedOptions","amountOfConnections","cof","redefine","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","aFunction","that","is","toIObject","arrayIndexOf","names","toObject","ObjectProto","ARG","tryGet","T","callee","fails","KEY","exp","hiddenKeys","getOwnPropertyNames","pIE","gOPD","getOwnPropertyDescriptor","Point2d","Slider","play","MozBorderRadius","slide","onmousedown","_onMouseDown","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","getIndex","setIndex","playNext","setOnChangeCallback","setPlayInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","setValues","which","button","startClientX","startSlideX","onmousemove","_onMouseMove","onmouseup","_onMouseUp","leftToIndex","StepNumber","prettyStep","precision","_current","isNumeric","isFinite","setStep","calculatePrettyStep","log10","LN10","step1","step2","step5","toPrecision","getStep","checkFirst","isEmpty","capitalize","prefixFieldName","fieldName","forceCopy","srcKey","dstKey","safeCopy","setDefaults","DEFAULTS","OPTIONKEYS","PREFIXEDOPTIONKEYS","setSpecialSettings","showGrayBottom","showTooltip","onclick_callback","eye","setBackgroundColor","setDataColor","dataColor","setStyle","setShowLegend","showLegend","setCameraPosition","cameraPosition","tooltip","tooltipStyle","isLegendGraphStyle","STYLE","DOTCOLOR","DOTSIZE","getStyleNumberByName","styleName","number","STYLENAME","checkStyleNumber","valid","styleNumber","strokeWidth","borderStyle","camPos","camera","Camera","setArmRotation","horizontal","setArmLength","BAR","BARCOLOR","BARSIZE","DOT","DOTLINE","GRID","LINE","SURFACE","dot","dot-line","dot-color","dot-size","grid","surface","bar-color","bar-size","armLocation","armRotation","armLength","cameraOffset","offsetMultiplier","cameraLocation","cameraRotation","calculateCameraOrientation","_sign","_sign2","setOffset","sign","mul","getOffset","setArmLocation","getArmRotation","rot","getArmLength","getCameraLocation","getCameraRotation","xa","za","Filter","dataGroup","column","graph","getDistinctValues","selectValue","dataPoints","loaded","onLoadCallback","animationPreload","loadInBackground","isLoaded","getLoadedProgress","getLabel","filterLabel","getColumn","getSelectedValue","getValues","getValue","_getDataPoints","dataView","setOnLoadCallback","progress","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","ItemSet","groupOrderSwap","fromGroup","toGroup","groups","targetOrder","groupOrder","selectable","multiselect","onDropObjectOnItem","objectData","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","showTooltips","followMouse","overflowMethod","itemOptions","groupsData","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","groupData","updatedGroups","nestedGroupId","updatedNestedGroup","_onUpdateGroups","_onRemoveGroups","groupIds","selection","popup","groupTouchParams","BoxItem","PointItem","BackgroundItem","Popup","UNGROUPED","BACKGROUND","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","DIRECTION_VERTICAL","_onMouseOver","_onMouseOut","markDirty","refreshItems","setSelection","getSelection","rawVisibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","scrolled","lastRangeStart","changedStackOption","lastStack","changedStackSubgroupsOption","lastStackSubgroups","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","redrawResults","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","_order","getGroups","_getType","_removeItem","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","_constructByEndArray","itemFromTarget","itemProps","_getGroupIndex","selectedItem","initialX","_cloneItemData","srcEvent","ctrlKey","metaKey","_onDragStartAddItem","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","xAbs","getScale","groupFromTarget","newItem","updateGroupAllowed","newGroupBase","initialStart","initial","newOffset","oldGroup","nestingGroup","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","oldSelection","newSelection","itemFromRelatedTarget","setText","setPosition","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","itemSetFromTarget","force","collidingItem","jj","collision","substack","subgroupHeight","baseTop","newTop","otherSubgroup","collisionByTimes","subgroupItems","doSubStack","widthInMs","getTime","previous","itemSetHeight","lineHeight","marginLeft","marginRight","itemSubgroup","padding","doShow","isLeft","isTop","bool","boolean","function","throttleRedraw","any","onInitialDrawComplete","null","groupsDraggable","LineGraph","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","parametrization","alpha","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","groupsUsingDefaultStyles","DataAxis","GraphGroup","Legend","Bars","Lines","yAxisLeft","yAxisRight","legendLeft","legendRight","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existingItemsMap","existing_items","newLength","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","zIndex","az","bz","groupRanges","minDate","toGlobalTime","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","paths","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","last","dataContainer","increment","amountOfPoints","xDistance","toGlobalScreen","pointsPerPixel","sampledData","idx","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_end","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","DataScale","graphOptions","_redrawGroupIcons","iconOffset","groupArray","getLegend","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","screenToValue","characterHeight","textAlign","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","icon","yMin","yMax","Bargraph","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","accumulatedNegative","accumulatedPositive","dataWidth","pointData","groupLabel","_getStackedYRange","xpos","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","merge","setValue","addNode","graphs","attr","addEdge","createEdge","getToken","tokenType","TOKENTYPE","NULL","token","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","SyntaxError","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","edgeStyles","dashed","solid","dotted","maxLength","forEach2","array1","array2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","DOTToGraph","dotData","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","parseGephi","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","_CachedImage","_CachedImage2","Images","images","imageBroken","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","imageToRedrawWith","cachedImage","img","onload","_fixImageCoordinates","init","_redrawWithImage","_tryloadBrokenUrl","imageToCache","_slicedToArray2","_slicedToArray3","LabelSplitter","multiFontStyle","edgelabel","fontOptions","isEdgeLabel","elementOptions","initFontOptions","newFontOptions","parseFontString","vadjust","constrainWidth","maxWdt","minWdt","constrainHeight","minHgt","valign","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","heightConstraint","heightConstraintMinimum","heightConstraintValign","propagateFonts","constrain","margins","widthBias","heightBias","dstPile","srcPile","addFontToPile","tmpShorthand","opt","multiName","multiFont","optionNames","mod","getFontOption","fontPile","addFontOptionsToPile","getBasicOptions","modOptions","tmpMultiFontOptions","getFontOptions","baseline","viewFontSize","drawThreshold","maxVisible","_drawBackground","_drawText","fillRect","_setAlignment2","_setAlignment","_setAlignment3","blocks","block","_getColor2","_getColor","strokeColor","_getColor3","fontColor","lineJoin","strokeText","fillText","textBaseline","initialStrokeColor","_processLabel","face","labelHighlightBold","fontString","selectedState","hoverState","inText","process","state","_processLabelText","outOptions","inOptions","newOptionsArray","EndPoints","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_line","_getCircleData2","_getCircleData","_getCircleData3","_circle","lineCap","pattern","lineDashOffset","_getCircleData4","_getCircleData5","dashedLine","_getCircleData6","_getCircleData7","_x","_y","_radius","_findBorderPosition","_findBorderPositionCircle","_getCircleData$slice","_getCircleData$slice2","grd","createLinearGradient","addColorStop","arc","_getDistanceToEdge","_getCircleData8","_getCircleData9","py","something","u","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData10","_getCircleData11","EndPoint","points","xt","yt","closePath","Arrow","_EndPoint","transform","drawPath","Bar","BarnesHutSolver","physicsBody","barnesHutTree","randomSeed","thetaInversed","theta","overlapAvoidanceFactor","avoidOverlap","gravitationalConstant","physicsNodeIndices","nodeIndices","nodeCount","_formBarnesHutTree","_getForceContributions","parentBranch","_getForceContribution","children","NW","NE","SW","SE","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","forces","_node","rootSize","halfRootSize","centerX","centerY","level","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","region","_placeInRegion","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","CentralGravitySolver","centralGravity","endPoints","multi","bold","boldital","ital","mono","roundness","forceDirection","maximum","useDefaultGroups","interaction","dragNodes","dragView","hideEdgesOnDrag","hideNodesOnDrag","keyboard","speed","bindToWindow","navigationButtons","selectConnectedEdges","hoverConnectedEdges","tooltipDelay","zoomView","layout","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","manipulation","initiallyActive","editNode","editEdge","editWithoutDrag","deleteNode","deleteEdge","controlNodeStyle","borderWidthSelected","minimum","useBorderWithImage","barnesHut","springLength","springConstant","damping","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","iterations","updateInterval","onlyDynamicEdges","timestep","adaptiveTimestep","addToUnscopables","_k","Arguments","getKeys","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","toInteger","documentElement","TO_STRING","charCodeAt","getIterator","iterFn","classof","getIteratorMethod","$Object","D","DESCRIPTORS","META","$fails","wks","wksDefine","enumKeys","gOPNExt","$GOPD","$DP","gOPN","$JSON","stringify","HIDDEN","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","es6Symbols","wellKnownSymbols","for","keyFor","useSetter","useSimple","replacer","$replacer","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","gOPS","getSymbols","symbols","arg","windowNames","getWindowNames","hooks","hookCallback","isObjectEmpty","isUndefined","res","hasOwnProp","createUTC","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","copyConfig","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","toInt","argumentForCoercion","coercedNumber","compareArrays","dontConvert","lengthDiff","diffs","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","deprecateSimple","deprecations","isFunction","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","output","_calendar","longDateFormat","_longDateFormat","formatUpper","invalidDate","_invalidDate","ordinal","_ordinal","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","addUnitAlias","unit","shorthand","lowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priority","priorities","getPrioritizedUnits","unitsObj","zeroFill","targetLength","forceSign","absNumber","zerosToFill","addFormatToken","padded","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","replaceLongDateFormatTokens","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInYear","isLeapYear","getIsLeapYear","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","modMonth","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","monthsParse","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","resYear","resDayOfYear","localWeekday","weekOffset","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","weekdays","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","normalizeLocale","chooseLocale","loadLocale","oldLocale","globalLocale","_abbr","getSetGlobalLocale","getLocale","defineLocale","baseConfig","abbr","parentLocale","localeFamilies","updateLocale","listLocales","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","weekYear","temp","weekdayOverflow","GG","createLocal","curWeek","gg","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","defaultLocaleMonthsShort","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","defaultLocaleWeekdaysShort","calculateOffset","obsOffset","militaryOffset","numOffset","obsOffsets","hm","configFromRFC2822","parsedArray","configFromString","aspNetJsonRegex","createFromInputFallback","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","ordering","unitHasDecimal","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","days","_milliseconds","_days","_bubble","isDuration","absRound","separator","utcOffset","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","isAfter","isBefore","createAdder","period","dur","isAdding","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","inspect","zone","suffix","inputString","defaultFormatUtc","postformat","humanize","fromNow","toNow","newLocaleData","isoWeekday","unix","toJSON","isValid$2","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","clone$1","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","limit","withSuffix","toISOString$1","abs$1","Y","toFixed","asSeconds","totalSign","ymSign","daysSign","hmsSign","fun","defaultCalendar","sameDay","nextDay","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","parseTwoDigitYear","getSetYear","defaultLocaleMonths","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","prototypeMin","prototypeMax","invalid","isoWeekYear","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","isoWeeks","isoWeeksInYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","webpackPolyfill","webpackEmptyContext","req","resolve","buf","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","_nodeId","rnds","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","eval","Graph3d","graph3d","containerElement","DataGroup","Settings","colX","colY","colZ","colValue","getMouseX","targetTouches","getMouseY","_assign","_assign2","_require2","legendLabel","xLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationAutoStart","axisColor","gridColor","xCenter","yCenter","boxShadow","borderLeft","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yStep","zMin","zMax","zStep","_setScale","xRange","yRange","zRange","valueRange","zCenter","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","ax","ay","cx","cy","cz","sinTx","cosTx","sinTy","cosTy","sinTz","cosTz","bx","by","ex","ey","ez","dz","currentXCenter","canvas","currentYCenter","_calcTranslations","trans","screen","transBottom","dist","sortDepth","_initializeRanges","dg","getDataPoints","dataX","dataY","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","_checkValueField","pointNext","noCanvas","fontWeight","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","_onClick","_setSize","_resizeCanvas","animationStart","dataFilter","slider","animationStop","_resizeCenter","getCameraPosition","_readData","initializeData","_redrawFilter","validate","setPointDrawingMethod","getDataTable","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","getContext","clearRect","_dotSize","_getLegendWidth","isSizeLegend","isValueLegend","ymax","hue","_hsv2rgb","strokeRect","widthMin","legendMin","legendMax","info","getInfo","lineStyle","drawAxisLabelX","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","defaultXStep","defaultYStep","_msg","defaultZStep","from3d","_msg2","xMin2d","xMax2d","H","V","Hi","X","_getStrokeWidth","_redrawBar","xWidth","yWidth","surfaces","corners","transCenter","_polygon","_drawCircle","_calcRadius","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","dotSize","sizeMin","sizeRange","cross","topSideVisible","aDiff","bDiff","zAvg","_drawGridLine","_storeMousePosition","startMouseX","startMouseY","_startCameraOffset","leftButtonDown","touchDown","startStart","startEnd","startArmRotation","moving","diffX","diffY","scaleX","scaleY","offXNew","offYNew","horizontalNew","verticalNew","snapValue","parameters","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","oldLength","_insideTriangle","triangle","bs","cs","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","hasBars","dotWidth","dotHeight","setSize","assign","$assign","K","aLen","desc","colorOptions","dataTable","rawData","_onChange","withBars","defaultXBarWidth","getSmallestDifference","defaultYBarWidth","_initializeRange","getColumnRange","_setRangeDefaults","defaultValueMin","defaultValueMax","_collectRangeSettings","upper","range_label","step_label","settings","expand","smallest_diff","getNumberOfRows","defaultMin","defaultMax","initDataAsMatrix","reload","combine","newMin","newMax","_firstTarget","events","propagatedHandler","_handled","stopped","srcStop","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","pointerType","handler","eventType","hammers","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","each","deprecationMessage","child","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","find","inArray","findByKey","uniqueArray","results","prefixed","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","createInputInstance","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","DEDUP_TIMEOUT","isSyntheticEvent","DEDUP_DISTANCE","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","handlers","oldCssProps","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","dest","MOBILE_REGEX","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","compute","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","curRecognizer","existing","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","Timeline","Graph2d","timeline","forthArgument","directionFromDom","domNode","parentElement","ondblclick","oncontextmenu","onpointerdown","onpointermove","onpointerup","initialFitDone","getItemRange","getStart","getEnd","getItemVerticalScroll","leftHeight","shouldScroll","itemTop","currentScrollHeight","targetOffset","scrollOffset","newDataSet","focus","startPos","initialVerticalScroll","verticalAnimationFrame","willDraw","setFinalVerticalPosition","finalVerticalScroll","finalVerticalCallback","minItem","maxItem","startSide","endSide","lhs","rhs","snappedTime","what","pageX","pageY","toggleRollingMode","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","_rgbaArray","rgbObj","_setColor","_generateHueCircle","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","putImageData","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","pinch","_moveSelector","sat","sfac","getImageData","newLeft","linegraph","initialLoad","isGroupVisible","Network","network","dotparser","gephiParser","convertDot","convertGephi","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","bindEventListeners","Groups","Canvas","selectionHandler","SelectionHandler","interactionHandler","InteractionHandler","View","renderer","CanvasRenderer","PhysicsEngine","layoutEngine","LayoutEngine","clustering","ClusterEngine","ManipulationSystem","nodesHandler","NodesHandler","edgesHandler","EdgesHandler","KamadaKawai","networkOptions","_updateVisibleIndices","_isClusteredNode","fromNode","toNode","edgeNodesPresent","_isClusteredEdge","_updateState","_updateValueRange","unselectAll","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","roundRect","r2d","ellipse_vis","ox","oy","xe","ye","xm","ym","database","wEllipse","hEllipse","ymb","yeb","patternLength","slope","distRemaining","patternIndex","dashLength","hexagon","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError","CachedImage","NUM_ITERATIONS","h2","h4","h8","h16","w4","w8","w16","coordinates","_fillMipMap","drawImage","_to","defaultIndex","groupsArray","defaultGroups","optionFields","groupName","groupname","shouldCreate","_index","nodesListeners","_nodeId2","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","oldValue","clearPositions","dataArray","_node2","nodeList","nodeObj","edgeList","isIterable","LabelAccumulator","textWidth","measureText","finalize","nlLines","splitBlocks","_text","splitStringIntoLines","_mod","_text2","append","newLine","_i2","markupSystem","system","spacing","buffer","modStack","modName","emitBlock","ch","unshift","beginable","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","curWidth","words","pre","newText","overMaxWidth","appendLast","getLongestFit","word","getLongestFitWord","newW","tmpText","_add","tmpLines","tmpLine","firstEmptyBlock","tmpBlocks","determineLineHeights","determineLabelSize","removeEmptyBlocks","_setMargins","dimensions","getDimensionsFromLabel","_addBoundingBoxMargin","$getPrototypeOf","setPrototypeOf","buggy","_CircleImageBase2","_CircleImageBase3","_CircleImageBase","diameter","_drawRawCircle","_resizeImage","switchImages","clip","_drawImageAtPosition","_drawImageLabel","_distanceToBorder","_ShapeBase2","_ShapeBase3","_ShapeBase","_drawShape","_icon","neutralborderWidth","selectionLineWidth","edgesListeners","edgeData","smoothOptions","reconnectEdges","_edgeId","oldEdgesData","edgesData","oldEdge","showInternalIds","_addMissingEdges","_removeInvalidEdges","edgesToDelete","addIds","_CubicBezierEdgeBase2","_CubicBezierEdgeBase3","_CubicBezierEdgeBase","viaNodes","via1","via2","_bezierCurve","_findBorderPositionBezier","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref4","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","cr","xVia","yVia","stepX","stepY","_stepX","_stepY","_stepX2","_stepY2","pi","originalAngle","myAngle","_pi","_originalAngle","_myAngle","_stepX3","_stepY3","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","Repulsion","HierarchicalRepulsion","SpringSolver","HierarchicalSpringSolver","ForceAtlas2BasedRepulsionSolver","ForceAtlas2BasedCentralGravitySolver","physicsEdgeIndices","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","runDoubleSpeed","amountOfIterations","solve","moveNodes","_evaluateStepQuality","_startStabilizing","physicsStep","revert","adjustTimeStep","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","maxV","calculateComponentVelocity","targetIterations","_freezeNodes","_stabilizationBatch","running","sendProgress","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","edgeLength","node3","_calculateSpringForce","springForce","springFx","springFy","totalFx","totalFy","_i3","correctionFx","correctionFy","_i4","_nodeId3","_BarnesHutSolver2","_BarnesHutSolver3","_BarnesHutSolver","degree","_CentralGravitySolver2","_CentralGravitySolver3","_CentralGravitySolver","Cluster","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","checkJoinCondition","findClusterData","foundCluster","gatheringSuccessful","childNodeId","_getConnectedId","_m","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdges","_j3","createdEdge","_edge","newEdge","matchToDirection","matchFromDirection","_createClusteredEdge","clusteringEdgeReplacingIds","edgeReplacedById","_backupEdgeOptions","tmpNodesToRemove","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","_clonedOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_clusterEdges","originalOptions","clusterNodeId","parentIndex","parentClusterNodeId","_openChildCluster","releaseFunction","clusterPosition","newPositions","_nodeId4","_containedNode","_nodeId5","_containedNode2","edgesToBeDeleted","otherNode","transferId","transferEdge","otherCluster","_restoreEdge","nodesArray","_nodeId6","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","getBaseEdges","IdsToHandle","doneIds","foundIds","nextId","nextEdge","replacingIds","replacingId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","baseEdge","extraOptions","childEdges","_obj","_createClusterEdges","_edge2","_nodeId7","clusteredNode","deletedNodeIds","deletedEdgeIds","eachClusterNode","_node3","endPointsValid","replacedIds","numValid","containedEdgeId","containedEdge","deletedEdgeId","_filter","shouldBeClustered","clusterFrom","_getClusterNodeForNode","clusterTo","continueLoop","clustersToOpen","numNodes","allowSingle","_Node","childClusterId","childCluster","clusterEdge","parentClusterEdge","srcId","_initRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","redrawRequested","renderingActive","renderRequests","allowRedraw","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","timer","myWindow","_requestNextFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_setPixelRatio","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","newWidth","newHeight","_setCameraState","numerator","_determinePixelRatio","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","NavigationHandler","navigationHandler","popupObj","popupTimer","pinched","checkSelectionChanges","_generateClickEvent","previousSelection","selectAdditionalOnPoint","selectOnPoint","currentSelection","deselectedItems","_determineDifference","selectedItems","firstSet","secondSet","arrayDiff","firstArr","secondArr","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","hoverObj","updateSelection","selectionChanged","deselectObject","DOM","emptySelection","_initBaseEvent","getClickedItems","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","emitBlurEvent","emitHoverEvent","_hoverConnectedEdges","idArray","RangeError","getItemsOnPoint","_ret","HorizontalStrategy","VerticalStrategy","HierarchicalStatus","childrenReference","parentReference","trees","distributionOrdering","levels","distributionIndex","isTree","treeIndex","treeId","accumulator","_getMaxLevel","nodeA","nodeB","minLevel","min_x","max_x","min_y","max_y","parents1","parents2","curLevel","initialRandomSeed","setPhysics","optionsBackup","setupHierarchicalLayout","layoutNetwork","curveType","prevHierarchicalState","setDirectionStrategy","adaptAllOptionsForHierarchicalLayout","backupPhysics","indices","clusterOptions","startLength","before","clusterBridges","_declusterAll","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","lastNodeOnLevel","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","ensureLevel","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","getTreeSizes","treeWidths","numTrees","getTreeSize","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","getPosition","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode3","minSpaceNode","maxSpaceNode","getCollisionLevel","maxLevel1","getMaxLevel","maxLevel2","shiftElementsCloser","centerParents","hier","levelNodes","hasSameParent","inSameSubNetwork","branchShiftCallback","centerParent","diffAbs","branchNodes1","branchNodes2","branchNodeBoundary1","branchNodeBoundary2","max1","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","branchBoundary","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode4","_getSpaceAroundNode5","newPosition","getLevels","treeSizes","shiftBy","useMap","prevNode","nextNode","nextPos","parents","parentId","_getCenterPosition","_getSpaceAroundNode6","_getSpaceAroundNode7","positionedNodes","nodeArray","_indexArrayToNodes","handledNodeCount","_validatePositionAndContinue","parentLevel","childRef","_i5","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","fix","hubSizes","hubSize","_getActiveEdges","_this6","levelDownstream","_getHubSizes","_crawlNetwork","_this7","levelByDirection","levelA","setMinLevelToZero","_this8","isBidirectional","otherEdge","levelB","_this9","fillInRelations","addRelation","checkIfTree","_this10","startingNodeId","crawler","tree","setTreeIndex","_this11","shifter","childA","childB","_this12","iterateParents","parentRef","findParent","foundParent","isVertical","minPos","maxPos","DirectionInterface","abstract","fake_use","_DirectionInterface","addToOrdering","_DirectionInterface2","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","_getSelectedNodeCount","selectedEdgeCount","_getSelectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","_dragStartEdge","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","_FloydWarshall","_FloydWarshall2","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode3","_moveNode","_getEnergy2","_getEnergy","_getEnergy3","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy4","_getEnergy5","_E_sums$m","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","_mIdx","colm","kcolm","lcolm","cell","oldDx","oldDy","FloydWarshall","knode","inode","icolm","jnode","jcolm"],"mappings":"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","file":"vis"}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.min.css b/01_Code/physical_computing_interface/lib/vis/dist/vis.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..f345ff5325cc0a229b0965e19bd0a36b0b94c039
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.min.css
@@ -0,0 +1 @@
+.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%)}div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:159px;text-align:right;padding-right:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:10px;text-align:left;padding-left:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{box-sizing:content-box;border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;cursor:pointer;padding:0 8px 0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"\26F6"}.vis-rolling-mode-btn:hover{opacity:1}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-nested-group{background:#f5f5f5}.vis-label.vis-nesting-group.expanded:before{content:"\25BC"}.vis-label.vis-nesting-group.collapsed-rtl:before{content:"\25C0"}.vis-label.vis-nesting-group.collapsed:before{content:"\25B6"}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/lib/vis/dist/vis.min.js b/01_Code/physical_computing_interface/lib/vis/dist/vis.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..1136c8a151feba3db42c8dcd35c676e04f75f8db
--- /dev/null
+++ b/01_Code/physical_computing_interface/lib/vis/dist/vis.min.js
@@ -0,0 +1,47 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=123)}([function(t,e,i){e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,i){e.__esModule=!0;var o=i(169),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(){function t(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),(0,n.default)(t,o.key,o)}}return function(e,i,o){return i&&t(e.prototype,i),o&&t(e,o),e}}()},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i,o){var n=!1;!0===o&&(n=null===e[i]&&void 0!==t[i]),n?delete t[i]:t[i]=e[i]}var s=i(77),r=o(s),a=i(29),h=o(a),d=i(8),l=o(d),u=i(6),c=o(u),p=i(9),f=i(157);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(m.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return f.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,c.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var s in t)void 0!==i[s]&&(null===i[s]||"object"!==(0,c.default)(i[s])?n(t,i,s,o):"object"===(0,c.default)(t[s])&&e.fillIfDefined(t[s],i[s],o))},e.extend=function(t,e){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n])}return t},e.selectiveExtend=function(t,e,i){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var o=2;o<arguments.length;o++)for(var n=arguments[o],s=0;s<t.length;s++){var r=t[s];n&&n.hasOwnProperty(r)&&(e[r]=n[r])}return e},e.selectiveDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r=0;r<t.length;r++){var a=t[r];if(o.hasOwnProperty(a))if(o[a]&&o[a].constructor===Object)void 0===i[a]&&(i[a]={}),i[a].constructor===Object?e.deepExtend(i[a],o[a],!1,s):n(i,o,a,s);else{if(Array.isArray(o[a]))throw new TypeError("Arrays are not supported by deepExtend");n(i,o,a,s)}}return i},e.selectiveNotDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r in o)if(o.hasOwnProperty(r)&&-1===t.indexOf(r))if(o[r]&&o[r].constructor===Object)void 0===i[r]&&(i[r]={}),i[r].constructor===Object?e.deepExtend(i[r],o[r]):n(i,o,r,s);else if(Array.isArray(o[r])){i[r]=[];for(var a=0;a<o[r].length;a++)i[r].push(o[r][a])}else n(i,o,r,s);return i},e.deepExtend=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var r in i)if(i.hasOwnProperty(r)||!0===o)if(i[r]&&i[r].constructor===Object)void 0===t[r]&&(t[r]={}),t[r].constructor===Object?e.deepExtend(t[r],i[r],o):n(t,i,r,s);else if(Array.isArray(i[r])){t[r]=[];for(var a=0;a<i[r].length;a++)t[r].push(i[r][a])}else n(t,i,r,s);return t},e.equalArray=function(t,e){if(t.length!=e.length)return!1;for(var i=0,o=t.length;i<o;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var o;if(void 0!==t){if(null===t)return null;if(!i)return t;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return e.isString(t)&&!isNaN(Date.parse(t))?p(t).valueOf():Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(p.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return o=m.exec(t),o?new Date(Number(o[1])):p(new Date(t)).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return p(t);if(t instanceof Date)return p(t.valueOf());if(p.isMoment(t))return p(t);if(e.isString(t))return o=m.exec(t),p(o?Number(o[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(p.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return o=m.exec(t),o?new Date(Number(o[1])).toISOString():p(t).format();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){o=m.exec(t);return"/Date("+(o?new Date(Number(o[1])).valueOf():new Date(t).valueOf())+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var m=/^\/?Date\((\-?\d+)/i;e.getType=function(t){var e=void 0===t?"undefined":(0,c.default)(t);return"object"==e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var i=[],o=0;o<t.length;o++)i.push(t[o]);return i.push(e),i},e.copyArray=function(t){for(var e=[],i=0;i<t.length;i++)e.push(t[i]);return e},e.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left},e.getAbsoluteRight=function(t){return t.getBoundingClientRect().right},e.getAbsoluteTop=function(t){return t.getBoundingClientRect().top},e.addClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.concat(o.filter(function(t){return i.indexOf(t)<0})),t.className=i.join(" ")},e.removeClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.filter(function(t){return o.indexOf(t)<0}),t.className=i.join(" ")},e.forEach=function(t,e){var i,o;if(Array.isArray(t))for(i=0,o=t.length;i<o;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},e.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.updateProperty=function(t,e,i){return t[e]!==i&&(t[e]=i,!0)},e.throttle=function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame(function(){e=!1,t()}))}},e.addEventListener=function(t,e,i,o){t.addEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){var o;return-1!=t.indexOf("rgba")?t:-1!=t.indexOf("rgb")?(o=t.substr(t.indexOf("(")+1).replace(")","").split(","),"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"):(o=e.hexToRGB(t),null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")")},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var v={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,l.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=v.split(t.style.cssText),n=v.split(i),s=e.extend(o,n);t.style.cssText=v.join(s)},e.removeCssText=function(t,e){var i=v.split(t.style.cssText),o=v.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=v.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if(null!==i&&"object"===(void 0===i?"undefined":(0,c.default)(i))){for(var o=(0,h.default)(i),n=0;n<t.length;n++)i.hasOwnProperty(t[n])&&"object"==(0,c.default)(i[t[n]])&&(o[t[n]]=e.bridgeObject(i[t[n]]));return o}return null},e.bridgeObject=function(t){if(null!==t&&"object"===(void 0===t?"undefined":(0,c.default)(t))){var i=(0,h.default)(t);if(t instanceof Element)i=t;else{i=(0,h.default)(t);for(var o in t)t.hasOwnProperty(o)&&"object"==(0,c.default)(t[o])&&(i[o]=e.bridgeObject(t[o]))}return i}return null},e.insertSort=function(t,e){for(var i=0;i<t.length;i++){for(var o=t[i],n=i;n>0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=function(t){return null!==t&&void 0!==t},s=function(t){return null!==t&&"object"===(void 0===t?"undefined":(0,c.default)(t))};if(!s(t))throw new Error("Parameter mergeTarget must be an object");if(!s(e))throw new Error("Parameter options must be an object");if(!n(i))throw new Error("Parameter option must have a value");if(!s(o))throw new Error("Parameter globalOptions must be an object");var r=e[i],a=s(o)&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(o),d=a?o[i]:void 0,l=d?d.enabled:void 0;if(void 0!==r){if("boolean"==typeof r)return s(t[i])||(t[i]={}),void(t[i].enabled=r);if(null===r&&!s(t[i])){if(!n(d))return;t[i]=(0,h.default)(d)}if(s(r)){var u=!0;void 0!==r.enabled?u=r.enabled:void 0!==l&&(u=d.enabled),function(t,e,i){s(t[i])||(t[i]={});var o=e[i],n=t[i];for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])}(t,e,i),t[i].enabled=u}}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){var s,r,a,h,d=0,l=0,u=t.length-1;for(n=void 0!=n?n:function(t,e){return t==e?0:t<e?-1:1};l<=u&&d<1e4;){if(h=Math.floor(.5*(u+l)),s=t[Math.max(0,h-1)][i],r=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==n(r,e))return h;if(n(s,e)<0&&n(r,e)>0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,s=void 0;try{for(var a,h=(0,r.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l<e.length;l++)i&&(i=i[e[l]]);if(void 0!==i)break}}}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}},function(t,e,i){t.exports={default:i(194),__esModule:!0}},function(t,e,i){e.__esModule=!0;var o=i(6),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":(0,n.default)(e))&&"function"!=typeof e?t:e}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(196),s=o(n),r=i(29),a=o(r),h=i(6),d=o(h);e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":(0,d.default)(e)));t.prototype=(0,a.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(s.default?(0,s.default)(t,e):t.__proto__=e)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(142),s=o(n),r=i(144),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return void 0===t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":void 0===t?"undefined":h(t)}},function(t,e){var i=t.exports={version:"2.5.1"};"number"==typeof __e&&(__e=i)},function(t,e,i){t.exports={default:i(140),__esModule:!0}},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(154)},function(t,e,i){function o(){var t=function(){};return{on:t,off:t,destroy:t,emit:t,get:function(e){return{set:t}}}}if("undefined"!=typeof window){var n=i(175),s=window.Hammer||i(176);t.exports=n(s,{preventDefault:"mouse"})}else t.exports=function(){return o()}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=(0,l.default)(this._options.type),o=0,n=i.length;o<n;o++){var s=i[o],r=this._options.type[s];this._type[s]="Date"==r||"ISODate"==r||"ASPDate"==r?"Date":r}this._subscribers={},t&&this.add(t),this.setOptions(e)}var s=i(19),r=o(s),a=i(6),h=o(a),d=i(8),l=o(d),u=i(2),c=i(43);n.prototype.setOptions=function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=c.extend(this,{replace:["add","update","remove"]})),"object"===(0,h.default)(t.queue)&&this._queue.setOptions(t.queue)))},n.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},n.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},n.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var o=[];t in this._subscribers&&(o=o.concat(this._subscribers[t])),"*"in this._subscribers&&(o=o.concat(this._subscribers["*"]));for(var n=0,s=o.length;n<s;n++){var r=o[n];r.callback&&r.callback(t,e,i||null)}},n.prototype.add=function(t,e){var i,o=[],n=this;if(Array.isArray(t))for(var s=0,r=t.length;s<r;s++)i=n._addItem(t[s]),o.push(i);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");i=n._addItem(t),o.push(i)}return o.length&&this._trigger("add",{items:o},e),o},n.prototype.update=function(t,e){var i=[],o=[],n=[],s=[],r=this,a=r._fieldId,d=function(t){var e=t[a];if(r._data[e]){var h=u.extend({},r._data[e]);e=r._updateItem(t),o.push(e),s.push(t),n.push(h)}else e=r._addItem(t),i.push(e)};if(Array.isArray(t))for(var l=0,c=t.length;l<c;l++)t[l]&&"object"===(0,h.default)(t[l])?d(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");d(t)}if(i.length&&this._trigger("add",{items:i},e),o.length){var p={items:o,oldData:n,data:s};this._trigger("update",p,e)}return i.concat(o)},n.prototype.get=function(t){var e,i,o,n=this,s=u.getType(arguments[0]);"String"==s||"Number"==s?(e=arguments[0],o=arguments[1]):"Array"==s?(i=arguments[0],o=arguments[1]):o=arguments[0];var r;if(o&&o.returnType){r=-1==["Array","Object"].indexOf(o.returnType)?"Array":o.returnType}else r="Array";var a,h,d,c,p,f=o&&o.type||this._options.type,m=o&&o.filter,v=[];if(void 0!=e)(a=n._getItem(e,f))&&m&&!m(a)&&(a=null);else if(void 0!=i)for(c=0,p=i.length;c<p;c++)a=n._getItem(i[c],f),m&&!m(a)||v.push(a);else for(h=(0,l.default)(this._data),c=0,p=h.length;c<p;c++)d=h[c],a=n._getItem(d,f),m&&!m(a)||v.push(a);if(o&&o.order&&void 0==e&&this._sort(v,o.order),o&&o.fields){var g=o.fields;if(void 0!=e)a=this._filterFields(a,g);else for(c=0,p=v.length;c<p;c++)v[c]=this._filterFields(v[c],g)}if("Object"==r){var y,b={};for(c=0,p=v.length;c<p;c++)y=v[c],b[y.id]=y;return b}return void 0!=e?a:v},n.prototype.getIds=function(t){var e,i,o,n,s,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,u=(0,l.default)(r),c=[];if(a)if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&s.push(n);for(this._sort(s,h),e=0,i=s.length;e<i;e++)c.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&c.push(n[this._fieldId]);else if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;e<i;e++)c.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=r[o],c.push(n[this._fieldId]);return c},n.prototype.getDataSet=function(){return this},n.prototype.forEach=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=this._data,d=(0,l.default)(h);if(e&&e.order){var u=this.get(e);for(i=0,o=u.length;i<o;i++)n=u[i],s=n[this._fieldId],t(n,s)}else for(i=0,o=d.length;i<o;i++)s=d[i],n=this._getItem(s,a),r&&!r(n)||t(n,s)},n.prototype.map=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=[],d=this._data,u=(0,l.default)(d);for(i=0,o=u.length;i<o;i++)n=u[i],s=this._getItem(n,a),r&&!r(s)||h.push(t(s,n));return e&&e.order&&this._sort(h,e.order),h},n.prototype._filterFields=function(t,e){if(!t)return t;var i,o,n={},s=(0,l.default)(t),r=s.length;if(Array.isArray(e))for(i=0;i<r;i++)o=s[i],-1!=e.indexOf(o)&&(n[o]=t[o]);else for(i=0;i<r;i++)o=s[i],e.hasOwnProperty(o)&&(n[e[o]]=t[o]);return n},n.prototype._sort=function(t,e){if(u.isString(e)){var i=e;t.sort(function(t,e){var o=t[i],n=e[i];return o>n?1:o<n?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},n.prototype.remove=function(t,e){var i,o,n,s,r=[],a=[],h=[];for(h=Array.isArray(t)?t:[t],i=0,o=h.length;i<o;i++)(s=this._remove(h[i]))&&void 0!=(n=s[this._fieldId])&&(r.push(n),a.push(s));return r.length&&this._trigger("remove",{items:r,oldData:a},e),r},n.prototype._remove=function(t){var e,i;return u.isNumber(t)||u.isString(t)?i=t:t&&"object"===(void 0===t?"undefined":(0,h.default)(t))&&(i=t[this._fieldId]),void 0!==i&&this._data[i]?(e=this._data[i],delete this._data[i],this.length--,e):null},n.prototype.clear=function(t){var e,i,o=(0,l.default)(this._data),n=[];for(e=0,i=o.length;e<i;e++)n.push(this._data[o[e]]);return this._data={},this.length=0,this._trigger("remove",{items:o,oldData:n},t),o},n.prototype.max=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d>r)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d<r)&&(s=h,r=d)}return s},n.prototype.distinct=function(t){var e,i,o,n=this._data,s=(0,l.default)(n),r=[],a=this._options.type&&this._options.type[t]||null,h=0;for(e=0,o=s.length;e<o;e++){var d=s[e],c=n[d],p=c[t],f=!1;for(i=0;i<h;i++)if(r[i]==p){f=!0;break}f||void 0===p||(r[h]=p,h++)}if(a)for(e=0,o=r.length;e<o;e++)r[e]=u.convert(r[e],a);return r},n.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=u.randomUUID(),t[this._fieldId]=e;var i,o,n={},s=(0,l.default)(t);for(i=0,o=s.length;i<o;i++){var r=s[i],a=this._type[r];n[r]=u.convert(t[r],a)}return this._data[e]=n,this.length++,e},n.prototype._getItem=function(t,e){var i,o,n,s,r=this._data[t];if(!r)return null;var a={},h=(0,l.default)(r);if(e)for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=u.convert(o,e[i]);else for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=o;return a[this._fieldId]||(a[this._fieldId]=r.id),a},n.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+(0,r.default)(t)+")");var i=this._data[e];if(!i)throw new Error("Cannot update item: no item with id "+e+" found");for(var o=(0,l.default)(t),n=0,s=o.length;n<s;n++){var a=o[n],h=this._type[a];i[a]=u.convert(t[a],h)}return e},t.exports=n},function(t,e,i){function o(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(11);o.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;o<n;o++)s.push(this._data._data[e[o]]);this._ids={},this.length=0,this._trigger("remove",{items:e,oldData:s})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),o=0,n=e.length;o<n;o++)i=e[o],this._ids[i]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){var t,e,i,o=this._data.getIds({filter:this._options&&this._options.filter}),n=(0,s.default)(this._ids),r={},a=[],h=[],d=[];for(e=0,i=o.length;e<i;e++)t=o[e],r[t]=!0,this._ids[t]||(a.push(t),this._ids[t]=!0);for(e=0,i=n.length;e<i;e++)t=n[e],r[t]||(h.push(t),d.push(this._data._data[t]),delete this._ids[t]);this.length+=a.length-h.length,a.length&&this._trigger("add",{items:a}),h.length&&this._trigger("remove",{items:h,oldData:d})},o.prototype.get=function(t){var e,i,o,n=this,s=r.getType(arguments[0]);"String"==s||"Number"==s||"Array"==s?(e=arguments[0],i=arguments[1],o=arguments[2]):(i=arguments[0],o=arguments[1]);var a=r.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(t){return n._options.filter(t)&&i.filter(t)});var h=[];return void 0!=e&&h.push(e),h.push(a),h.push(o),this._data&&this._data.get.apply(this._data,h)},o.prototype.getIds=function(t){var e;if(this._data){var i,o=this._options.filter;i=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},o.prototype.map=function(t,e){var i=[];if(this._data){var o,n=this._options.filter;o=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,i=this._data.map(t,{filter:o,order:e&&e.order})}else i=[];return i},o.prototype.getDataSet=function(){for(var t=this;t instanceof o;)t=t._data;return t||null},o.prototype._onEvent=function(t,e,i){var o,n,s,r,a=e&&e.items,h=[],d=[],l=[],u=[],c=[],p=[];if(a&&this._data){switch(t){case"add":for(o=0,n=a.length;o<n;o++)s=a[o],(r=this.get(s))&&(this._ids[s]=!0,h.push(s));break;case"update":for(o=0,n=a.length;o<n;o++)s=a[o],r=this.get(s),r?this._ids[s]?(d.push(s),c.push(e.data[o]),u.push(e.oldData[o])):(this._ids[s]=!0,h.push(s)):this._ids[s]&&(delete this._ids[s],l.push(s),p.push(e.oldData[o]));break;case"remove":for(o=0,n=a.length;o<n;o++)s=a[o],this._ids[s]&&(delete this._ids[s],l.push(s),p.push(e.oldData[o]))}this.length+=h.length-l.length,h.length&&this._trigger("add",{items:h},i),d.length&&this._trigger("update",{items:d,oldData:u,data:c},i),l.length&&this._trigger("remove",{items:l,oldData:p},i)}},o.prototype.on=a.prototype.on,o.prototype.off=a.prototype.off,o.prototype._trigger=a.prototype._trigger,o.prototype.subscribe=o.prototype.on,o.prototype.unsubscribe=o.prototype.off,t.exports=o},function(t,e,i){var o=i(57)("wks"),n=i(40),s=i(18).Symbol,r="function"==typeof s;(t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))}).store=o},function(t,e,i){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}},e.resetElements=function(t){e.prepareElements(t),e.cleanupElements(t),e.prepareElements(t)},e.getSVGElement=function(t,e,i){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(19),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=!1,v=void 0,g="background: #FFeeee; color: #dd0000",y=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"validate",value:function(e,i,o){m=!1,v=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),m}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){if(void 0===o[e]&&void 0===o.__any__)return void t.getSuggestion(e,o,n);var s=e,r=!0;void 0===o[e]&&void 0!==o.__any__&&(s="__any__",r="object"===t.getType(i[e]));var a=o[s];r&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,o,s,a,n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=function(i){console.log("%c"+i+t.printLocation(r,e),g)},h=t.getType(i[e]),l=s[h];void 0!==l?"array"===t.getType(l)&&-1===l.indexOf(i[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(l)+' not "'+i[e]+'". '),m=!0):"object"===h&&"__any__"!==n&&(r=f.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print((0,d.default)(s))+". Received ["+h+'] "'+i[e]+'"'),m=!0)}},{key:"getType",value:function(t){var e=void 0===t?"undefined":(0,a.default)(t);return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,v,[],!0),r=void 0
+;r=void 0!==n.indexMatch?" in "+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n':s.distance<=4&&n.distance>s.distance?" in "+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):n.distance<=8?'. Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e):". Did you mean one of these: "+t.print((0,d.default)(i))+t.printLocation(o,e),console.log('%cUnknown option detected: "'+e+'"'+r,g),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&!0===n){var c=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,d=c.indexMatch)}else-1!==l.toLowerCase().indexOf(h)&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n<t.length;n++){for(var s=0;s<n+1;s++)o+="  ";o+=t[n]+": {\n"}for(var r=0;r<t.length+1;r++)o+="  ";o+=e+"\n";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)o+="  ";o+="}\n"}return o+"\n\n"}},{key:"print",value:function(t){return(0,s.default)(t).replace(/(\")|(\[)|(\])|(,"__type__")/g,"").replace(/(\,)/g,", ")}},{key:"levenshteinDistance",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,o=[];for(i=0;i<=e.length;i++)o[i]=[i];var n;for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}();e.default=y,e.printStyle=g},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(2);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=o},function(t,e,i){var o=i(18),n=i(7),s=i(80),r=i(26),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e,i){t.exports={default:i(160),__esModule:!0}},function(t,e,i){var o=i(27),n=i(81),s=i(53),r=Object.defineProperty;e.f=i(21)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){t.exports=!i(28)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,d.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"_setMargins",value:function(t){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(t,e){var i=this.options.borderWidth;return this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:"enableShadow",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:"disableBorderDashes",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:"needsRefresh",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:"initContextForDraw",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:"performStroke",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:"performFill",value:function(t,e){this.enableShadow(t,e),t.fill(),this.disableShadow(t,e),this.performStroke(t,e)}},{key:"_addBoundingBoxMargin",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:"_updateBoundingBox",value:function(t,e,i,o,n){void 0!==i&&this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n)}},{key:"getDimensionsFromLabel",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width,n=this.textSize.height;return 0===o&&(o=14,n=14),{width:o,height:n}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){this.labelModule.getTextSize(t,e,i);var n=2*o.size;this.width=n,this.height=n,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){if(this.resize(t,s,r,a),this.left=o-this.width/2,this.top=n-this.height/2,this.initContextForDraw(t,a),t[e](o,n,a.size),this.performFill(t,a),void 0!==this.options.label){this.labelModule.calculateLabelSize(t,s,r,o,n,"hanging");var h=n+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(t,o,h,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),e}(m.default);e.default=v},function(t,e,i){var o=i(78),n=i(51);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(20),n=i(39);t.exports=i(21)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(32);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){t.exports={default:i(138),__esModule:!0}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(188),s=o(n),r=i(77),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,h=(0,a.default)(t);!(o=(r=h.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e){t.exports={}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){var o=i(84),n=i(58);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){function o(t,e,i){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==i?i:0}o.subtract=function(t,e){var i=new o;return i.x=t.x-e.x,i.y=t.y-e.y,i.z=t.z-e.z,i},o.add=function(t,e){var i=new o;return i.x=t.x+e.x,i.y=t.y+e.y,i.z=t.z+e.z,i},o.avg=function(t,e){return new o((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},o.crossProduct=function(t,e){var i=new o;return i.x=t.y*e.z-t.z*e.y,i.y=t.z*e.x-t.x*e.z,i.z=t.x*e.y-t.y*e.x,i},o.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=o},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(0,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;e<=122;e++)r[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;n<o.length;n++)void 0===o[n].shift?o[n].fn(t):1==o[n].shift&&1==t.shiftKey?o[n].fn(t):0==o[n].shift&&0==t.shiftKey&&o[n].fn(t);1==i&&t.preventDefault()}};return n.bind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);void 0===s[i][r[t].code]&&(s[i][r[t].code]=[]),s[i][r[t].code].push({fn:e,shift:r[t].shift})},n.bindAll=function(t,e){void 0===e&&(e="keydown");for(var i in r)r.hasOwnProperty(i)&&n.bind(i,t,e)},n.getKey=function(t){for(var e in r)if(r.hasOwnProperty(e)){if(1==t.shiftKey&&1==r[e].shift&&t.keyCode==r[e].code)return e;if(0==t.shiftKey&&0==r[e].shift&&t.keyCode==r[e].code)return e;if(t.keyCode==r[e].code&&"shift"==e)return e}return"unknown key, currently not supported"},n.unbind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);if(void 0!==e){var o=[],n=s[i][r[t].code];if(void 0!==n)for(var a=0;a<n.length;a++)n[a].fn==e&&n[a].shift==r[t].shift||o.push(s[i][r[t].code][a]);s[i][r[t].code]=o}else s[i][r[t].code]=[]},n.reset=function(){s={keydown:{},keyup:{}}},n.destroy=function(){s={keydown:{},keyup:{}},o.removeEventListener("keydown",a,!0),o.removeEventListener("keyup",h,!0)},o.addEventListener("keydown",a,!0),o.addEventListener("keyup",h,!0),n}return t})},function(t,e,i){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n<o.length;n++)if(void 0===o[n].repeat){var s={};s.start=t(o[n].start).toDate().valueOf(),s.end=t(o[n].end).toDate().valueOf(),i.hiddenDates.push(s)}i.hiddenDates.sort(function(t,e){return t.start-e.start})}},e.updateHiddenDates=function(t,i,o){if(o&&!Array.isArray(o))return e.updateHiddenDates(t,i,[o]);if(o&&void 0!==i.domProps.centerContainer.width){e.convertHiddenOptions(t,i,o);for(var n=t(i.range.start),s=t(i.range.end),r=i.range.end-i.range.start,a=r/i.domProps.centerContainer.width,h=0;h<o.length;h++)if(void 0!==o[h].repeat){var d=t(o[h].start),l=t(o[h].end);if("Invalid Date"==d._d)throw new Error("Supplied start date is not valid: "+o[h].start);if("Invalid Date"==l._d)throw new Error("Supplied end date is not valid: "+o[h].end);var u=l-d;if(u>=4*a){var c=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(c=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-c,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),m=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(m),l.day(m),l.add(f,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),p.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(c=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(c,"months"),p.add(1,"months");break;case"yearly":d.year()!=l.year()&&(c=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(c,"years"),p.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d<p;)switch(i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),o[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(i);var v=e.isHidden(i.range.start,i.hiddenDates),g=e.isHidden(i.range.end,i.hiddenDates),y=i.range.start,b=i.range.end;1==v.hidden&&(y=1==i.range.startToFront?v.startDate-1:v.endDate+1),1==g.hidden&&(b=1==i.range.endToFront?g.startDate-1:g.endDate+1),1!=v.hidden&&1!=g.hidden||i.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],o=0;o<e.length;o++)for(var n=0;n<e.length;n++)o!=n&&1!=e[n].remove&&1!=e[o].remove&&(e[n].start>=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(o=0;o<e.length;o++)!0!==e[o].remove&&i.push(e[o]);t.hiddenDates=i,t.hiddenDates.sort(function(t,e){return t.start-e.start})},e.printDates=function(t){for(var e=0;e<t.length;e++)console.log(e,new Date(t[e].start),new Date(t[e].end),t[e].start,t[e].end,t[e].remove)},e.stepOverHiddenDates=function(t,e,i){for(var o=!1,n=e.current.valueOf(),s=0;s<e.hiddenDates.length;s++){var r=e.hiddenDates[s].start,a=e.hiddenDates[s].end;if(n>=r&&n<a){o=!0;break}}if(1==o&&n<e._end.valueOf()&&n!=i){var h=t(i),d=t(a);h.year()!=d.year()?e.switchedYear=!0:h.month()!=d.month()?e.switchedMonth=!0:h.dayOfYear()!=d.dayOfYear()&&(e.switchedDay=!0),e.current=d}},e.toScreen=function(t,i,o){var n;if(0==t.body.hiddenDates.length)return n=t.range.conversion(o),(i.valueOf()-n.offset)*n.scale;var s=e.isHidden(i,t.body.hiddenDates);1==s.hidden&&(i=s.startDate);var r=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end);if(i<t.range.start){n=t.range.conversion(o,r);var a=e.getHiddenDurationBeforeStart(t.body.hiddenDates,i,n.offset);return i=t.options.moment(i).toDate().valueOf(),i+=a,-(n.offset-i.valueOf())*n.scale}if(i>t.range.end){var h={start:t.range.start,end:i};return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale}return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a);return new Date(h+a+t.range.start)},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<i&&(o+=r-s)}return o},e.getHiddenDurationBeforeStart=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<=i&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s<e.length;s++){var r=e[s].start,a=e[s].end;r>=i.start&&a<i.end&&o>=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r<t.length;r++){var a=t[r].start,h=t[r].end;if(a>=e.start&&h<e.end){if(n+=a-s,s=h,n>=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?o<0?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i<e.length;i++){var o=e[i].start,n=e[i].end;if(t>=o&&t<n)return{hidden:!0,startDate:o,endDate:n}}return{hidden:!1,startDate:o,endDate:n}}},function(t,e,i){e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch,e.disablePreventDefaultVertically=function(t){return t.getTouchAction=function(){return["pan-y"]},t}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(6),r=o(s),a=i(8),h=o(a),d=i(10),l=i(2),u=i(9);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){void 0!=t.group&&this.data.group!=t.group&&null!=this.parent&&this.parent.itemSet._moveToGroup(this,t.group),this.parent&&(this.parent.stackDirty=!0),void 0!=t.subgroup&&this.data.subgroup!=t.subgroup&&null!=this.parent&&this.parent.changeSubgroup(this,this.data.subgroup,t.subgroup),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this;var i=new d(e);i.on("tap",function(e){t.parent.itemSet.body.emitter.emit("click",{event:e,item:t.id})}),i.on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t),t.parent.itemSet.body.emitter.emit("doubleClick",{event:e,item:t.id})}),this.dom.box?this.dom.dragLeft?this.dom.box.insertBefore(e,this.dom.dragLeft):this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(o).on("tap",function(t){t.stopPropagation(),i.parent.removeFromDataSet(i)}),t.appendChild(o),this.dom.deleteButton=o}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||!0===this.data.editable)&&!1!==this.data.editable;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;o+this.parent.top-50<-n?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var s,r;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(r=this.options.tooltipOnItemUpdateTime.template.bind(this),s=r(this.data)):(s="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(s+="<br> end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=s}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else if(this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o)){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else if(this._contentToString(this.content)!==this._contentToString(e)){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},n.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=(0,h.default)(this.data)}for(var i=0;i<e.length;i++){var o=e[i],n=this.data[o];null!=n?t.setAttribute("data-"+o,n):t.removeAttribute("data-"+o)}}},n.prototype._updateStyle=function(t){this.style&&(l.removeCssText(t,this.style),this.style=null),this.data.style&&(l.addCssText(t,this.data.style),this.style=this.data.style)},n.prototype._contentToString=function(t){return"string"==typeof t?t:t&&"outerHTML"in t?t.outerHTML:t},n.prototype._updateEditStatus=function(){this.options&&("boolean"==typeof this.options.editable?this.editable={updateTime:this.options.editable,updateGroup:this.options.editable,remove:this.options.editable}:"object"===(0,r.default)(this.options.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.options.editable))),this.options&&this.options.editable&&!0===this.options.editable.overrideItems||this.data&&("boolean"==typeof this.data.editable?this.editable={updateTime:this.data.editable,updateGroup:this.data.editable,remove:this.data.editable}:"object"===(0,r.default)(this.data.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.data.editable)))},n.prototype.getWidthLeft=function(){return 0},n.prototype.getWidthRight=function(){return 0},n.prototype.getTitle=function(){return this.data.title},t.exports=n},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e,i){var o=i(51);t.exports=function(t){return Object(o(t))}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){function o(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}o.prototype.setOptions=function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()},o.extend=function(t,e){var i=new o(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){i.flush()};var n=[{name:"flush",original:void 0}];if(e&&e.replace)for(var s=0;s<e.replace.length;s++){var r=e.replace[s];n.push({name:r,original:t[r]}),i.replace(t,r)}return i._extended={object:t,methods:n},i},o.prototype.destroy=function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var o=e[i];o.original?t[o.name]=o.original:delete t[o.name]}this._extended=null}},o.prototype.replace=function(t,e){var i=this,o=t[e];if(!o)throw new Error("Method "+e+" undefined");t[e]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];i.queue({args:t,fn:o,context:this})}},o.prototype.queue=function(t){"function"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()},o.prototype._flushIfNeeded=function(){if(this._queue.length>this.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},o.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=o},function(t,e){function i(t){if(t)return o(t)}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var o,n=0;n<i.length;n++)if((o=i[n])===e||o.fn===e){i.splice(n,1);break}return this},i.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),i=this._callbacks[t];if(i){i=i.slice(0);for(var o=0,n=i.length;o<n;++o)i[o].apply(this,e)}return this},i.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},i.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:h.FORMAT,moment:l,timeAxis:null},this.options=r.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(16),h=i(66),d=i(36),l=i(9);o.prototype=new a,o.prototype.setOptions=function(t){t&&(r.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment","rtl"],this.options,t),r.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===(0,s.default)(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof l.locale?l.locale(t.locale):l.lang(t.locale)))},o.prototype._create=function(){this.dom.foreground=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.foreground.className="vis-time-axis vis-foreground",this.dom.background.className="vis-time-axis vis-background"},o.prototype.destroy=function(){this.dom.foreground.parentNode&&this.dom.foreground.parentNode.removeChild(this.dom.foreground),this.dom.background.parentNode&&this.dom.background.parentNode.removeChild(this.dom.background),this.body=null},o.prototype.redraw=function(){var t=this.props,e=this.dom.foreground,i=this.dom.background,o="top"==this.options.orientation.axis?this.body.dom.top:this.body.dom.bottom,n=e.parentNode!==o;this._calculateCharSize()
+;var s=this.options.showMinorLabels&&"none"!==this.options.orientation.axis,r=this.options.showMajorLabels&&"none"!==this.options.orientation.axis;t.minorLabelHeight=s?t.minorCharHeight:0,t.majorLabelHeight=r?t.majorCharHeight:0,t.height=t.minorLabelHeight+t.majorLabelHeight,t.width=e.offsetWidth,t.minorLineHeight=this.body.domProps.root.height-t.majorLabelHeight-("top"==this.options.orientation.axis?this.body.domProps.bottom.height:this.body.domProps.top.height),t.minorLineWidth=1,t.majorLineHeight=t.minorLineHeight+t.majorLabelHeight,t.majorLineWidth=1;var a=e.nextSibling,h=i.nextSibling;return e.parentNode&&e.parentNode.removeChild(e),i.parentNode&&i.parentNode.removeChild(i),e.style.height=this.props.height+"px",this._repaintLabels(),a?o.insertBefore(e,a):o.appendChild(e),h?this.body.dom.backgroundVertical.insertBefore(i,h):this.body.dom.backgroundVertical.appendChild(i),this._isResized()||n},o.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=r.convert(this.body.range.start,"Number"),i=r.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var s=new h(new Date(e),new Date(i),n,this.body.hiddenDates,this.options);s.setMoment(this.options.moment),this.options.format&&s.setFormat(this.options.format),this.options.timeAxis&&s.setScale(this.options.timeAxis),this.step=s;var a=this.dom;a.redundant.lines=a.lines,a.redundant.majorTexts=a.majorTexts,a.redundant.minorTexts=a.minorTexts,a.lines=[],a.majorTexts=[],a.minorTexts=[];var l,c,p,f,m,v,g,y,b,_=0,w=void 0,x=0;for(s.start(),l=s.getCurrent(),p=this.body.util.toScreen(l);s.hasNext()&&x<1e3;){switch(x++,f=s.isMajor(),b=s.getClassName(),y=s.getLabelMinor(),l,c=p,s.next(),l=s.getCurrent(),s.isMajor(),p=this.body.util.toScreen(l),v=_,_=p-c,s.scale){case"week":m=!0;break;default:m=_>=.4*v}if(this.options.showMinorLabels&&m){var k=this._repaintMinorText(c,y,t,b);k.style.width=_+"px"}f&&this.options.showMajorLabels?(c>0&&(void 0==w&&(w=c),k=this._repaintMajorText(c,s.getLabelMajor(),t,b)),g=this._repaintMajorLine(c,_,t,b)):m?g=this._repaintMinorLine(c,_,t,b):g&&(g.style.width=parseInt(g.style.width)+_+"px")}if(1e3!==x||u||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to 1000 lines."),u=!0),this.options.showMajorLabels){var S=this.body.util.toTime(0),D=s.getLabelMajor(S),M=D.length*(this.props.majorCharWidth||10)+10;(void 0==w||M<w)&&this._repaintMajorText(0,D,t,b)}r.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},o.prototype._repaintMinorText=function(t,e,i,o){var n=this.dom.redundant.minorTexts.shift();if(!n){var s=document.createTextNode("");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.minorTexts.push(n),n.innerHTML=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",n.className="vis-text vis-minor "+o,n},o.prototype._repaintMajorText=function(t,e,i,o){var n=this.dom.redundant.majorTexts.shift();if(!n){var s=document.createElement("div");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return n.childNodes[0].innerHTML=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",this.dom.majorTexts.push(n),n},o.prototype._repaintMinorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-minor "+o):(n.style.left=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-minor "+o),n.style.width=e+"px",n},o.prototype._repaintMajorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?"0":this.body.domProps.top.height+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-major "+o):(n.style.left=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-major "+o),n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="vis-text vis-major vis-measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth};var u=!1;t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={moment:a,locales:h,locale:"en",id:void 0,title:void 0},this.options=s.extend({},this.defaultOptions),e&&e.time?this.customTime=e.time:this.customTime=new Date,this.eventParams={},this.setOptions(e),this._create()}var n=i(10),s=i(2),r=i(16),a=i(9),h=i(98);o.prototype=new r,o.prototype.setOptions=function(t){t&&s.selectiveExtend(["moment","locale","locales","id"],this.options,t)},o.prototype._create=function(){function t(t){this.body.range._onMouseWheel(t)}var e=document.createElement("div");e["custom-time"]=this,e.className="vis-custom-time "+(this.options.id||""),e.style.position="absolute",e.style.top="0px",e.style.height="100%",this.bar=e;var i=document.createElement("div");i.style.position="relative",i.style.top="0px",i.style.left="-10px",i.style.height="100%",i.style.width="20px",i.addEventListener?(i.addEventListener("mousewheel",t.bind(this),!1),i.addEventListener("DOMMouseScroll",t.bind(this),!1)):i.attachEvent("onmousewheel",t.bind(this)),e.appendChild(i),this.hammer=new n(i),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:n.DIRECTION_HORIZONTAL})},o.prototype.destroy=function(){this.hide(),this.hammer.destroy(),this.hammer=null,this.body=null},o.prototype.redraw=function(){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale];i||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),i=this.options.locales.en);var o=this.options.title;return void 0===o?(o=i.time+": "+this.options.moment(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss"),o=o.charAt(0).toUpperCase()+o.substring(1)):"function"==typeof o&&(o=o.call(this.customTime)),this.bar.style.left=e+"px",this.bar.title=o,!1},o.prototype.hide=function(){this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar)},o.prototype.setCustomTime=function(t){this.customTime=s.convert(t,"Date"),this.redraw()},o.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},o.prototype.setCustomTitle=function(t){this.options.title=t},o.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation()},o.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=this.body.util.toScreen(this.eventParams.customTime)+t.deltaX,i=this.body.util.toTime(e);this.setCustomTime(i),this.body.emitter.emit("timechange",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation()}},o.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation())},o.customTimeFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("custom-time"))return e["custom-time"];e=e.parentNode}return null},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(117).default,l=i(48).default,u=i(193).default,c=i(200).default,p=i(201).default,f=i(202).default,m=i(203).default,v=i(204).default,g=i(205).default,y=i(206).default,b=i(207).default,_=i(208).default,w=i(209).default,x=i(210).default,k=i(211).default,S=i(212).default,D=i(213).default,M=i(15),C=M.printStyle,O=function(){function t(e,i,o,n,r,a){(0,s.default)(this,t),this.options=h.bridgeObject(r),this.globalOptions=r,this.defaultOptions=a,this.body=i,this.edges=[],this.id=void 0,this.imagelist=o,this.grouplist=n,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new d(this.body,this.options,!1),this.setOptions(e)}return(0,a.default)(t,[{key:"attachEdge",value:function(t){-1===this.edges.indexOf(t)&&this.edges.push(t)}},{key:"detachEdge",value:function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1)}},{key:"setOptions",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error("Node must have an id");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=parseInt(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=parseInt(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=parseFloat(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var o=[e,this.options,this.defaultOptions];return this.chooser=l.choosify("node",o),this._load_images(),this.updateLabelModule(e),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:"_load_images",value:function(){if("circularImage"===this.options.shape||"image"===this.options.shape){if(void 0===this.options.image)throw new Error("Option image must be defined for node type '"+this.options.shape+"'");if(void 0===this.imagelist)throw new Error("Internal Error: No images provided");if("string"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error("No unselected image provided");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:"getFormattingValues",value:function(){var t={color:this.options.color.background,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};return this.selected||this.hover?!0===this.chooser?this.selected?(t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):"function"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,t}},{key:"updateLabelModule",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=""),t.updateGroupOptions(this.options,e,this.grouplist);var i=this.grouplist.get(this.options.group,!1),o=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,o),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateShape",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case"box":this.shape=new u(this.options,this.body,this.labelModule);break;case"circle":this.shape=new c(this.options,this.body,this.labelModule);break;case"circularImage":this.shape=new p(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"database":this.shape=new f(this.options,this.body,this.labelModule);break;case"diamond":this.shape=new m(this.options,this.body,this.labelModule);break;case"dot":this.shape=new v(this.options,this.body,this.labelModule);break;case"ellipse":this.shape=new g(this.options,this.body,this.labelModule);break;case"icon":this.shape=new y(this.options,this.body,this.labelModule);break;case"image":this.shape=new b(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"square":this.shape=new _(this.options,this.body,this.labelModule);break;case"hexagon":this.shape=new w(this.options,this.body,this.labelModule);break;case"star":this.shape=new x(this.options,this.body,this.labelModule);break;case"text":this.shape=new k(this.options,this.body,this.labelModule);break;case"triangle":this.shape=new S(this.options,this.body,this.labelModule);break;case"triangleDown":this.shape=new D(this.options,this.body,this.labelModule);break;default:this.shape=new g(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:"select",value:function(){this.selected=!0,this.needsRefresh()}},{key:"unselect",value:function(){this.selected=!1,this.needsRefresh()}},{key:"needsRefresh",value:function(){this.shape.refreshNeeded=!0}},{key:"getTitle",value:function(){return this.options.title}},{key:"distanceToBorder",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:"isFixed",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"getLabelSize",value:function(){return this.labelModule.size()}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),n=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*s}this.options.size=this.options.scaling.min+o*n}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:"draw",value:function(t){var e=this.getFormattingValues();this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)}},{key:"updateBoundingBox",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:"resize",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:"getItemsOnPoint",value:function(t){var e=[];return this.labelModule.visible()&&l.pointInRect(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),l.pointInRect(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:"updateGroupOptions",value:function(t,e,i){if(void 0!==i){var o=t.group;if(void 0!==e&&void 0!==e.group&&o!==e.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof o||"string"==typeof o&&""!=o){var n=i.get(o);h.selectiveNotDeepExtend(["font"],t,n),t.color=h.parseColor(t.color)}}}},{key:"parseOptions",value:function(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments[4],r=["color","fixed","shadow"];if(h.selectiveNotDeepExtend(r,e,i,o),t.checkMass(i),h.mergeOptions(e,i,"shadow",n),void 0!==i.color&&null!==i.color){var a=h.parseColor(i.color);h.fillIfDefined(e.color,a)}else!0===o&&null===i.color&&(e.color=h.bridgeObject(n.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===o&&null===i.font&&(e.font=h.bridgeObject(n.font)),t.updateGroupOptions(e,i,s),void 0!==i.scaling&&h.mergeOptions(e.scaling,i.scaling,"label",n.scaling)}},{key:"checkMass",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i="";void 0!==e&&(i=" in node id: "+e),console.log("%cNegative or zero mass disallowed"+i+", setting mass to 1.",C),t.mass=1}}}]),t}();e.default=O},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(2),u=function(){function t(){(0,a.default)(this,t)}return(0,d.default)(t,null,[{key:"choosify",value:function(t,e){var i=["node","edge","label"],o=!0,n=l.topMost(e,"chosen");if("boolean"==typeof n)o=n;else if("object"===(void 0===n?"undefined":(0,s.default)(n))){if(-1===i.indexOf(t))throw new Error("choosify: subOption '"+t+"' should be one of '"+i.join("', '")+"'");var r=l.topMost(e,["chosen",t]);"boolean"!=typeof r&&"function"!=typeof r||(o=r)}return o}},{key:"pointInRect",value:function(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var o={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var n=-i.angle;e={x:Math.cos(n)*o.x-Math.sin(n)*o.y,y:Math.sin(n)*o.x+Math.cos(n)*o.y}}else e=o}var s=t.x+t.width,r=t.y+t.width;return t.left<e.x&&s>e.x&&t.top<e.y&&r>e.y}},{key:"isValidLabel",value:function(t){return"string"==typeof t&&""!==t}}]),t}();e.default=u},function(t,e,i){i(125);for(var o=i(18),n=i(26),s=i(31),r=i(13)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),h=0;h<a.length;h++){var d=a[h],l=o[d],u=l&&l.prototype;u&&!u[r]&&n(u,r,d),s[d]=s.Array}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,e){t.exports=!0},function(t,e,i){var o=i(32);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e,i){var o=i(27),n=i(130),s=i(58),r=i(56)("IE_PROTO"),a=function(){},h=function(){var t,e=i(82)("iframe"),o=s.length;for(e.style.display="none",i(134).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;o--;)delete h.prototype[s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a.prototype=o(t),i=new a,a.prototype=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(57)("keys"),n=i(40);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(18),n=o["__core-js_shared__"]||(o["__core-js_shared__"]={});t.exports=function(t){return n[t]||(n[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){var o=i(20).f,n=i(22),s=i(13)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(135)(!0);i(79)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){e.f=i(13)},function(t,e,i){var o=i(18),n=i(7),s=i(52),r=i(61),a=i(20).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){var i=p().hours(0).minutes(0).seconds(0).milliseconds(0),o=i.clone().add(-3,"days").valueOf(),n=i.clone().add(3,"days").valueOf();this.millisecondsPerPixelCache=void 0,void 0===e?(this.start=o,this.end=n):(this.start=e.start||o,this.end=e.end||n),this.rolling=!1,this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={rtl:!1,start:null,end:null,moment:p,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10,rollingMode:{follow:!1,offset:.5}},this.options=c.extend({},this.defaultOptions),this.props={touch:{}},this.animationTimer=null,this.body.emitter.on("panstart",this._onDragStart.bind(this)),this.body.emitter.on("panmove",this._onDrag.bind(this)),this.body.emitter.on("panend",this._onDragEnd.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.body.dom.rollingModeBtn.addEventListener("click",this.startRolling.bind(this)),this.setOptions(e)}function s(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}var r=i(8),a=o(r),h=i(19),d=o(h),l=i(6),u=o(l),c=i(2),p=i(9),f=i(16),m=i(36);n.prototype=new f,n.prototype.setOptions=function(t){if(t){var e=["animation","direction","min","max","zoomMin","zoomMax","moveable","zoomable","moment","activate","hiddenDates","zoomKey","rtl","showCurrentTime","rollingMode","horizontalScroll"];c.selectiveExtend(e,this.options,t),t.rollingMode&&t.rollingMode.follow&&this.startRolling(),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},n.prototype.startRolling=function(){function t(){e.stopRolling(),e.rolling=!0;var i=e.end-e.start,o=c.convert(new Date,"Date").valueOf(),n=o-i*e.options.rollingMode.offset,s=o+i*(1-e.options.rollingMode.offset),r={animation:!1};e.setRange(n,s,r),i=1/e.conversion(e.body.domProps.center.width).scale/10,i<30&&(i=30),i>1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){i||(i={}),!0!==i.byUser&&(i.byUser=!1);var s=this,r=void 0!=t?c.convert(t,"Date").valueOf():null,h=void 0!=e?c.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),this.millisecondsPerPixelCache=void 0,i.animation){var l=this.start,p=this.end,f="object"===(0,u.default)(i.animation)&&"duration"in i.animation?i.animation.duration:500,v="object"===(0,u.default)(i.animation)&&"easingFunction"in i.animation?i.animation.easingFunction:"easeInOutQuad",g=c.easingFunctions[v];if(!g)throw new Error("Unknown easing function "+(0,d.default)(v)+". Choose from: "+(0,a.default)(c.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1;return function t(){if(!s.props.touch.dragging){var e=(new Date).valueOf(),a=e-y,d=g(a/f),u=a>f,c=u||null===r?r:l+(r-l)*d,v=u||null===h?h:p+(h-p)*d;_=s._applyRange(c,v),m.updateHiddenDates(s.options.moment,s.body,s.options.hiddenDates),b=b||_;var w={start:new Date(s.start),end:new Date(s.end),byUser:i.byUser,event:i.event};if(n&&n(d,_,u),_&&s.body.emitter.emit("rangechange",w),u){if(b&&(s.body.emitter.emit("rangechanged",w),o))return o()}else s.animationTimer=setTimeout(t,20)}}()}var _=this._applyRange(r,h);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:i.byUser,event:i.event};if(this.body.emitter.emit("rangechange",w),clearTimeout(s.timeoutID),s.timeoutID=setTimeout(function(){s.body.emitter.emit("rangechanged",w)},200),o)return o()}},n.prototype.getMillisecondsPerPixel=function(){return void 0===this.millisecondsPerPixelCache&&(this.millisecondsPerPixelCache=(this.end-this.start)/this.body.dom.center.clientWidth),this.millisecondsPerPixelCache},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?c.convert(t,"Date").valueOf():this.start,n=null!=e?c.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?c.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?c.convert(this.options.min,"Date").valueOf():null;if(isNaN(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(n<o&&(n=o),null!==r&&o<r&&(i=r-o,o+=i,n+=i,null!=s&&n>s&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o<r&&(o=r)),null!==this.options.zoomMin){var a=parseFloat(this.options.zoomMin);if(a<0&&(a=0),n-o<a){this.end-this.start===a&&o>=this.start-.5&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var h=parseFloat(this.options.zoomMax);h<0&&(h=0),n-o>h&&(this.end-this.start===h&&o<this.start&&n>this.end?(o=this.start,n=this.end):(i=n-o-h,o+=i/2,n-=i/2))}var d=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,d},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start;o-=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);var n,r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;n=this.options.rtl?i/r*o:-i/r*o;var a=this.props.touch.start+n,h=this.props.touch.end+n,d=m.snapAwayFromHidden(this.body.hiddenDates,a,this.previousDelta-i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0);if(d!=a||l!=h)return this.deltaDifference+=i,this.props.touch.start=d,this.props.touch.end=l,void this._onDrag(t);this.previousDelta=i,this._applyRange(a,h);var u=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:u,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.prototype._onDragEnd=function(t){this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end),byUser:!0,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),!(this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable)&&this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var i;i=e<0?1-e/5:1/(1+e/5);var o;if(this.rolling)o=this.start+(this.end-this.start)*this.options.rollingMode.offset;else{var n=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);o=this._pointerToDate(n)}this.zoom(i,o,e,t),t.preventDefault()}},n.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0,c.preventDefault(t)},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){c.preventDefault(t),this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d);var l={animation:!1,byUser:!0,event:t};this.setRange(r,a,l),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e,i=t.center?t.center.x:t.clientX;e=this.options.rtl?i-c.getAbsoluteLeft(this.body.dom.centerContainer):c.getAbsoluteRight(this.body.dom.centerContainer)-i;var o=this.body.util.toTime(e);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:c.getAbsoluteRight(e)-t.x,y:t.y-c.getAbsoluteTop(e)}:{x:t.x-c.getAbsoluteLeft(e),y:t.y-c.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0)
+;var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l);var u={animation:!1,byUser:!0,event:o};this.setRange(a,h,u),this.startToFront=!1,this.endToFront=!0},n.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},n.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:null};this.setRange(o,n,s)},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){}var s=i(19),r=o(s),a=i(6),h=o(a),d=i(44),l=i(10),u=i(37),c=i(2),p=i(45),f=i(97),m=i(36),v=i(46);d(n.prototype),n.prototype._create=function(t){function e(t){this.isActive()&&this.emit("mousewheel",t);var e=0,i=0;if("detail"in t&&(i=-1*t.detail),"wheelDelta"in t&&(i=t.wheelDelta),"wheelDeltaY"in t&&(i=t.wheelDeltaY),"wheelDeltaX"in t&&(e=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=-1*i,i=0),"deltaY"in t&&(i=-1*t.deltaY),"deltaX"in t&&(e=t.deltaX),this.options.zoomKey&&!t[this.options.zoomKey])if(t.preventDefault(),this.options.verticalScroll&&Math.abs(i)>=Math.abs(e)){var o=this.props.scrollTop,n=o+i;this.isActive()&&(this._setScrollTop(n),this._redraw(),this.emit("scroll",t))}else if(this.options.horizontalScroll){var s=Math.abs(e)>=Math.abs(i)?e:i,r=s/120*(this.range.end-this.range.start)/20,a=this.range.start+r,h=this.range.end+r,d={animation:!1,byUser:!0,event:t};this.range.setRange(a,h,d)}}function i(t){if(s.options.verticalScroll&&(t.preventDefault(),s.isActive())){var e=-t.target.scrollTop;s._setScrollTop(e),s._redraw(),s.emit("scrollSide",t)}}function o(t){if(t.preventDefault&&t.preventDefault(),!(!t.target.className.indexOf("vis")>-1||a))return t.dataTransfer.dropEffect="move",a=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e||!e.content)return}catch(t){return!1}return a=!1,t.center={x:t.clientX,y:t.clientY},"item"!==e.target?s.itemSet._onAddItem(t):s.itemSet._onDropObjectOnItem(t),s.emit("drop",s.getEventProperties(t)),!1}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.rollingModeBtn=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.rollingModeBtn.className="vis-rolling-mode-btn",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){!0===this.initialDrawDone&&this._redraw()}.bind(this)),this.on("rangechanged",function(){this.initialRangeChangeDone||(this.initialRangeChangeDone=!0)}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=c.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={},["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var a=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,this.initialRangeChangeDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(c.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),"object"!==(0,h.default)(this.options.orientation)&&(this.options.orientation={item:void 0,axis:void 0}),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(t.orientation)&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new p(this.body);i.setOptions=function(t){var e=t?c.extend({},t):{};e.orientation="top",p.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var n=c.deepExtend({},this.options);this.components.forEach(function(t){c.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},n.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?c.convert(t,"Date").valueOf():new Date;if(this.customTimes.some(function(t){return t.options.id===e}))throw new Error("A custom time with id "+(0,r.default)(e)+" already exists");var o=new v(this.body,c.extend({},this.options,{time:i,id:e}));return this.customTimes.push(o),this.components.push(o),this._redraw(),e},n.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.prototype.fit=function(t,e){var i=this.getDataRange();if(null!==i.min||null!==i.max){var o=i.max-i.min,n=new Date(i.min.valueOf()-.01*o),s=new Date(i.max.valueOf()+.01*o),r=!t||void 0===t.animation||t.animation;this.range.setRange(n,s,{animation:r},e)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i,o){"function"==typeof arguments[2]&&(o=arguments[2],i={});var n,s;1==arguments.length?(s=arguments[0],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n})):2==arguments.length&&"function"==typeof arguments[1]?(s=arguments[0],o=arguments[1],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n},o)):(n=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,{animation:n},o))},n.prototype.moveTo=function(t,e,i){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.range.end-this.range.start,n=c.convert(t,"Date").valueOf(),s=n-o/2,r=n+o/2,a=!e||void 0===e.animation||e.animation;this.range.setRange(s,r,{animation:a},i)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=r/(1+t),h=(r-a)/2,d=n+h,l=s-h;this.setWindow(d,l,e,i)}},n.prototype.zoomOut=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=n-r*t/2,h=s+r*t/2;this.setWindow(a,h,e,i)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(c.addClassName(o.root,"vis-top"),c.removeClassName(o.root,"vis-bottom")):(c.removeClassName(o.root,"vis-top"),c.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=c.option.asSize(e.maxHeight,""),o.root.style.minHeight=c.option.asSize(e.minHeight,""),o.root.style.width=c.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=o.root.offsetWidth-o.root.clientWidth,0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(i.borderRootWidth=i.borderRootHeight),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=c.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=c.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.height<i.centerContainer.height)&&(o.left.style.top=a+"px",o.right.style.top=a+"px",o.rightContainer.className=o.rightContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),o.leftContainer.className=o.leftContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right,this._setDOM());var u=i.center.height>i.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});if(t){if(this.redrawCount<5)return void this.body.emitter.emit("_change");console.log("WARNING: infinite loop in redraw?")}else this.redrawCount=0;this.body.emitter.emit("changed")}},n.prototype._setDOM=function(){var t=this.props,e=this.dom;t.leftContainer.width=t.left.width,t.rightContainer.width=t.right.width;var i=t.root.width-t.left.width-t.right.width-t.borderRootWidth;t.center.width=i,t.centerContainer.width=i,t.top.width=i,t.bottom.width=i,e.background.style.height=t.background.height+"px",e.backgroundVertical.style.height=t.background.height+"px",e.backgroundHorizontal.style.height=t.centerContainer.height+"px",e.centerContainer.style.height=t.centerContainer.height+"px",e.leftContainer.style.height=t.leftContainer.height+"px",e.rightContainer.style.height=t.rightContainer.height+"px",e.background.style.width=t.background.width+"px",e.backgroundVertical.style.width=t.centerContainer.width+"px",e.backgroundHorizontal.style.width=t.background.width+"px",e.centerContainer.style.width=t.center.width+"px",e.top.style.width=t.top.width+"px",e.bottom.style.width=t.bottom.width+"px",e.background.style.left="0",e.background.style.top="0",e.backgroundVertical.style.left=t.left.width+t.border.left+"px",e.backgroundVertical.style.top="0",e.backgroundHorizontal.style.left="0",e.backgroundHorizontal.style.top=t.top.height+"px",e.centerContainer.style.left=t.left.width+"px",e.centerContainer.style.top=t.top.height+"px",e.leftContainer.style.left="0",e.leftContainer.style.top=t.top.height+"px",e.rightContainer.style.left=t.left.width+t.center.width+"px",e.rightContainer.style.top=t.top.height+"px",e.top.style.left=t.left.width+"px",e.top.style.top="0",e.bottom.style.left=t.left.width+"px",e.bottom.style.top=t.top.height+t.centerContainer.height+"px",e.center.style.left="0",e.left.style.left="0",e.right.style.left="0"},n.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},n.prototype.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},n.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},n.prototype._toTime=function(t){return m.toTime(this,t,this.props.center.width)},n.prototype._toGlobalTime=function(t){return m.toTime(this,t,this.props.root.width)},n.prototype._toScreen=function(t){return m.toScreen(this,t,this.props.center.width)},n.prototype._toGlobalScreen=function(t){return m.toScreen(this,t,this.props.root.width)},n.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},n.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){if(1!=t.options.autoResize)return void t._stopAutoResize();t.dom.root&&(t.dom.root.offsetWidth==t.props.lastWidth&&t.dom.root.offsetHeight==t.props.lastHeight||(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,t.props.scrollbarWidth=c.getScrollBarWidth(),t.body.emitter.emit("_change")))},c.addEventListener(window,"resize",this._onResize),t.dom.root&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight),this.watchTimer=setInterval(this._onResize,1e3)},n.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),this._onResize&&(c.removeEventListener(window,"resize",this._onResize),this._onResize=null)},n.prototype._onTouch=function(t){this.touch.allowDragging=!0,this.touch.initialScrollTop=this.props.scrollTop},n.prototype._onPinch=function(t){this.touch.allowDragging=!1},n.prototype._onDrag=function(t){if(t&&this.touch.allowDragging){var e=t.deltaY,i=this._getScrollTop(),o=this._setScrollTop(this.touch.initialScrollTop+e);this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),o!=i&&this.emit("verticalDrag")}},n.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},n.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("top"!=this.options.orientation.item&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop<t&&(this.props.scrollTop=t),this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),this.props.scrollTop},n.prototype._getScrollTop=function(){return this.props.scrollTop},n.prototype._createConfigurator=function(){throw new Error("Cannot invoke abstract method _createConfigurator")},t.exports=n},function(t,e,i){function o(t,e,i,s,r){this.moment=n,this.current=this.moment(),this._start=this.moment(),this._end=this.moment(),this.autoScale=!0,this.scale="day",this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,Array.isArray(s)?this.hiddenDates=s:this.hiddenDates=void 0!=s?[s]:[],this.format=o.FORMAT,this.options=r||{}}var n=i(9),s=i(36),r=i(2);o.FORMAT={minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},o.prototype.setMoment=function(t){this.moment=t,this.current=this.moment(this.current.valueOf()),this._start=this.moment(this._start.valueOf()),this._end=this.moment(this._end.valueOf())},o.prototype.setFormat=function(t){var e=r.deepExtend({},o.FORMAT);this.format=r.deepExtend(e,t)},o.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?this.moment(t.valueOf()):new Date,this._end=void 0!=e?this.moment(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},o.prototype.start=function(){this.current=this._start.clone(),this.roundToMinor()},o.prototype.roundToMinor=function(){switch("week"==this.scale&&this.current.weekday(0),this.scale){case"year":this.current.year(this.step*Math.floor(this.current.year()/this.step)),this.current.month(0);case"month":this.current.date(1);case"week":case"day":case"weekday":this.current.hours(0);case"hour":this.current.minutes(0);case"minute":this.current.seconds(0);case"second":this.current.milliseconds(0)}if(1!=this.step)switch(this.scale){case"millisecond":this.current.subtract(this.current.milliseconds()%this.step,"milliseconds");break;case"second":this.current.subtract(this.current.seconds()%this.step,"seconds");break;case"minute":this.current.subtract(this.current.minutes()%this.step,"minutes");break;case"hour":this.current.subtract(this.current.hours()%this.step,"hours");break;case"weekday":case"day":this.current.subtract((this.current.date()-1)%this.step,"day");break;case"week":this.current.subtract(this.current.week()%this.step,"week");break;case"month":this.current.subtract(this.current.month()%this.step,"month");break;case"year":this.current.subtract(this.current.year()%this.step,"year")}},o.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},o.prototype.next=function(){var t=this.current.valueOf();switch(this.scale){case"millisecond":this.current.add(this.step,"millisecond");break;case"second":this.current.add(this.step,"second");break;case"minute":this.current.add(this.step,"minute");break;case"hour":this.current.add(this.step,"hour"),this.current.month()<6?this.current.subtract(this.current.hours()%this.step,"hour"):this.current.hours()%this.step!=0&&this.current.add(this.step-this.current.hours()%this.step,"hour");break;case"weekday":case"day":this.current.add(this.step,"day");break;case"week":if(0!==this.current.weekday())this.current.weekday(0),this.current.add(this.step,"week");else if(!1===this.options.showMajorLabels)this.current.add(this.step,"week");else{var e=this.current.clone();e.add(1,"week"),e.isSame(this.current,"month")?this.current.add(this.step,"week"):(this.current.add(this.step,"week"),this.current.date(1))}break;case"month":this.current.add(this.step,"month");break;case"year":this.current.add(this.step,"year")}if(1!=this.step)switch(this.scale){case"millisecond":this.current.milliseconds()>0&&this.current.milliseconds()<this.step&&this.current.milliseconds(0);break;case"second":this.current.seconds()>0&&this.current.seconds()<this.step&&this.current.seconds(0);break;case"minute":this.current.minutes()>0&&this.current.minutes()<this.step&&this.current.minutes(0);break;case"hour":this.current.hours()>0&&this.current.hours()<this.step&&this.current.hours(0);break;case"weekday":case"day":this.current.date()<this.step+1&&this.current.date(1);break;case"week":this.current.week()<this.step&&this.current.week(1);break;case"month":this.current.month()<this.step&&this.current.month(0)}this.current.valueOf()==t&&(this.current=this._end.clone()),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,s.stepOverHiddenDates(this.moment,this,t)},o.prototype.getCurrent=function(){return this.current},o.prototype.setScale=function(t){t&&"string"==typeof t.scale&&(this.scale=t.scale,this.step=t.step>0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){31104e9>t&&(this.scale="year",this.step=1e3),15552e9>t&&(this.scale="year",this.step=500),31104e8>t&&(this.scale="year",this.step=100),15552e8>t&&(this.scale="year",this.step=50),31104e7>t&&(this.scale="year",this.step=10),15552e7>t&&(this.scale="year",this.step=5),31104e6>t&&(this.scale="year",this.step=1),7776e6>t&&(this.scale="month",this.step=3),2592e6>t&&(this.scale="month",this.step=1),432e6>t&&(this.scale="day",this.step=5),1728e5>t&&(this.scale="day",this.step=2),864e5>t&&(this.scale="day",this.step=1),432e5>t&&(this.scale="weekday",this.step=1),144e5>t&&(this.scale="hour",this.step=4),36e5>t&&(this.scale="hour",this.step=1),9e5>t&&(this.scale="minute",this.step=15),6e5>t&&(this.scale="minute",this.step=10),3e5>t&&(this.scale="minute",this.step=5),6e4>t&&(this.scale="minute",this.step=1),15e3>t&&(this.scale="second",this.step=15),1e4>t&&(this.scale="second",this.step=10),5e3>t&&(this.scale="second",this.step=5),1e3>t&&(this.scale="second",this.step=1),200>t&&(this.scale="millisecond",this.step=200),100>t&&(this.scale="millisecond",this.step=100),50>t&&(this.scale="millisecond",this.step=50),10>t&&(this.scale="millisecond",this.step=10),5>t&&(this.scale="millisecond",this.step=5),1>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("week"==e)o.weekday()>2?(o.weekday(0),o.add(1,"week")):o.weekday(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.scale){case"year":case"month":case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.scale){case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":case"week":return 1==t.date();case"month":return 0==t.month();case"year":default:return!1}},o.prototype.getLabelMinor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];switch(this.scale){case"week":if(this.isMajor()&&0!==t.weekday())return"";default:return e&&e.length>0?this.moment(t).format(e):""}},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/a%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(n().add(1,"day"),"day")?" vis-tomorrow":t.isSame(n().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}var n=this.moment,s=this.moment(this.current),r=s.locale?s.locale("en"):s.lang("en"),a=this.step,h=[];switch(this.scale){case"millisecond":h.push(e(r)),h.push(t(r.milliseconds()));break;case"second":h.push(e(r)),h.push(t(r.seconds()));break;case"minute":h.push(e(r)),h.push(t(r.minutes()));break;case"hour":h.push("vis-h"+r.hours()+(4==this.step?"-h"+(r.hours()+4):"")),h.push(e(r)),h.push(t(r.hours()));break;case"weekday":h.push("vis-"+r.format("dddd").toLowerCase()),h.push(e(r)),h.push(i(r)),h.push(t(r.date()));break;case"day":h.push("vis-day"+r.date()),h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(e(r)),h.push(o(r)),h.push(this.step<=2?e(r):""),h.push(this.step<=2?"vis-"+r.format("dddd").toLowerCase():""),
+h.push(t(r.date()-1));break;case"week":h.push("vis-week"+r.format("w")),h.push(i(r)),h.push(t(r.week()));break;case"month":h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(o(r)),h.push(t(r.month()));break;case"year":h.push("vis-year"+r.year()),h.push(function(t){return t.isSame(new Date,"year")?" vis-current-year":""}(r)),h.push(t(r.year()))}return h.filter(String).join(" ")},t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={rtl:!1,showCurrentTime:!0,moment:r,locales:a,locale:"en"},this.options=n.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var n=i(2),s=i(16),r=i(9),a=i(98);o.prototype=new s,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-current-time",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},o.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},o.prototype.setOptions=function(t){t&&n.selectiveExtend(["rtl","showCurrentTime","moment","locale","locales"],this.options,t)},o.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=this.options.moment((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),o=this.options.locales[this.options.locale];o||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),o=this.options.locales.en);var n=o.current+" "+o.time+": "+e.format("dddd, MMMM Do YYYY, H:mm:ss");n=n.charAt(0).toUpperCase()+n.substring(1),this.options.rtl?this.bar.style.right=i+"px":this.bar.style.left=i+"px",this.bar.title=n}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},o.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,o=1/i/10;o<30&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.groupId=t,this.subgroups={},this.subgroupStack={},this.subgroupStackAll=!1,this.doInnerStack=!1,this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,this.stackDirty=!0,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),e&&e.subgroupStack)if("boolean"==typeof e.subgroupStack)this.doInnerStack=e.subgroupStack,this.subgroupStackAll=e.subgroupStack;else for(var o in e.subgroupStack)this.subgroupStack[o]=e.subgroupStack[o],this.doInnerStack=this.doInnerStack||e.subgroupStack[o];this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var n=this;this.itemSet.body.emitter.on("checkRangedItems",function(){n.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(100);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else e instanceof Object?i(t,this.dom.inner):this.dom.inner.innerHTML=void 0!==e&&null!==e?e:this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?r.removeClassName(this.dom.inner,"vis-hidden"):r.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),r.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(r.removeClassName(this.dom.label,o),r.addClassName(this.dom.label,"expanded")):(r.removeClassName(this.dom.label,"expanded"),r.addClassName(this.dom.label,o))}else this.nestedGroups&&(this.nestedGroups=null,o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed",r.removeClassName(this.dom.label,o),r.removeClassName(this.dom.label,"expanded"),r.removeClassName(this.dom.label,"vis-nesting-group"));t&&t.nestedInGroup&&(r.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(r.removeClassName(this.dom.label,this.className),r.removeClassName(this.dom.foreground,this.className),r.removeClassName(this.dom.background,this.className),r.removeClassName(this.dom.axis,this.className)),r.addClassName(this.dom.label,n),r.addClassName(this.dom.foreground,n),r.addClassName(this.dom.background,n),r.addClassName(this.dom.axis,n),this.className=n),this.style&&(r.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(r.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype._didMarkerHeightChange=function(){var t=this.dom.marker.clientHeight;if(t!=this.lastMarkerHeight){this.lastMarkerHeight=t;var e={},i=0;r.forEach(this.items,function(t,o){if(t.dirty=!0,t.displayed){e[o]=t.redraw(!0),i=e[o].length}});if(i>0)for(var o=0;o<i;o++)r.forEach(e,function(t){t[o]()});return!0}},o.prototype._calculateGroupSizeAndPosition=function(){var t=this.dom.foreground.offsetTop,e=this.dom.foreground.offsetLeft,i=this.dom.foreground.offsetWidth;this.top=t,this.right=e,this.width=i},o.prototype._redrawItems=function(t,e,i,o){if(t||this.stackDirty||this.isVisible&&!e){var n={},s=null;if("function"==typeof this.itemSet.options.order){var h=this,d={},l=0;if(r.forEach(this.items,function(t,e){t.displayed||(d[e]=t.redraw(!0),l=d[e].length,h.visibleItems.push(t))}),l>0)for(var u=0;u<l;u++)r.forEach(d,function(t){t[u]()});if(r.forEach(this.items,function(t){t.repositionX(!1)}),this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else{var c=this.orderedItems.byStart.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stack(c,i,!0)}this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o)}else if(this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o),this.itemSet.options.stack)if(this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items;a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else a.stack(this.visibleItems,i,!0);else a.nostack(this.visibleItems,i,this.subgroups,this.itemSet.options.stackSubgroups);this.stackDirty=!1}},o.prototype._didResize=function(t,e){t=r.updateProperty(this,"height",e)||t;var i=this.dom.inner.clientWidth,o=this.dom.inner.clientHeight;return t=r.updateProperty(this.props.label,"width",i)||t,t=r.updateProperty(this.props.label,"height",o)||t},o.prototype._applyGroupHeight=function(t){this.dom.background.style.height=t+"px",this.dom.foreground.style.height=t+"px",this.dom.label.style.height=t+"px"},o.prototype._updateItemsVerticalPosition=function(t){for(var e=0,i=this.visibleItems.length;e<i;e++){var o=this.visibleItems[e];o.repositionY(t),this.isVisible||"__background__"==this.groupId||o.displayed&&o.hide()}},o.prototype.redraw=function(t,e,i,o){var n,s=!1,r=this.isVisible,a=[function(){i=this._didMarkerHeightChange.bind(this)}.bind(this),this._updateSubGroupHeights.bind(this,e),this._calculateGroupSizeAndPosition.bind(this),function(){this.isVisible=this._isGroupVisible.bind(this)(t,e)}.bind(this),function(){this._redrawItems.bind(this)(i,r,e,t)}.bind(this),this._updateSubgroupsSizes.bind(this),function(){n=this._calculateHeight.bind(this)(e)}.bind(this),this._calculateGroupSizeAndPosition.bind(this),function(){s=this._didResize.bind(this)(s,n)}.bind(this),function(){this._applyGroupHeight.bind(this)(n)}.bind(this),function(){this._updateItemsVerticalPosition.bind(this)(e)}.bind(this),function(){return!this.isVisible&&this.height&&(s=!1),s}];if(o)return a;var h;return a.forEach(function(t){h=t()}),h},o.prototype._updateSubGroupHeights=function(t){if((0,s.default)(this.subgroups).length>0){var e=this;this.resetSubgroups(),r.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},o.prototype._isGroupVisible=function(t,e){return this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(r.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,r.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},o.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),this.stackDirty=!0,void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end||t.data.start,visible:!1,index:this.subgroupIndex,items:[],stack:this.subgroupStackAll||this.subgroupStack[e]||!1},this.subgroupIndex++),new Date(t.data.start)<new Date(this.subgroups[e].start)&&(this.subgroups[e].start=t.data.start);var i=t.data.end||t.data.start;new Date(i)>new Date(this.subgroups[e].end)&&(this.subgroups[e].end=i),this.subgroups[e].items.push(t)},o.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.end||t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.start,n=i-1;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)<new Date(o)&&(o=t.data.start);var e=t.data.end||t.data.start;new Date(e)>new Date(n)&&(n=e)}),t.subgroups[e].start=o,t.subgroups[e].end=new Date(n-1)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t,e=[];if("string"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push({subgroup:t,sortField:this.subgroups[t].items[0].data[this.subgroupOrderer]});e.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push(this.subgroups[t].items[0].data);e.sort(this.subgroupOrderer)}if(e.length>0)for(var i=0;i<e.length;i++)this.subgroups[e[i].subgroup].index=i}},o.prototype.resetSubgroups=function(){for(var t in this.subgroups)this.subgroups.hasOwnProperty(t)&&(this.subgroups[t].visible=!1,this.subgroups[t].height=0)},o.prototype.remove=function(t){delete this.items[t.id],t.setParent(null),this.stackDirty=!0;var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1),void 0!==t.data.subgroup&&(this._removeFromSubgroup(t),this.orderSubgroups())},o.prototype._removeFromSubgroup=function(t,e){if(void 0!=(e=e||t.data.subgroup)){var i=this.subgroups[e];if(i){var o=i.items.indexOf(t);o>=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},o.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},o.prototype.order=function(){for(var t=r.toArray(this.items),e=[],i=[],o=0;o<t.length;o++)void 0!==t[o].data.end&&i.push(t[o]),e.push(t[o]);this.orderedItems={byStart:e,byEnd:i},a.orderByStart(this.orderedItems.byStart),a.orderByEnd(this.orderedItems.byEnd)},o.prototype._updateItemsInRange=function(t,e,i){var o=[],n={},s=(i.end-i.start)/4,a=i.start-s,h=i.end+s,d=function(t){return t<a?-1:t<=h?0:1};if(e.length>0)for(var l=0;l<e.length;l++)this._checkIfVisibleWithReference(e[l],o,n,i);var u=r.binarySearchCustom(t.byStart,d,"data","start");if(this._traceVisible(u,t.byStart,o,n,function(t){return t.data.start<a||t.data.start>h}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;l<t.byEnd.length;l++)this._checkIfVisibleWithReference(t.byEnd[l],o,n,i);else{var c=r.binarySearchCustom(t.byEnd,d,"data","end");this._traceVisible(c,t.byEnd,o,n,function(t){return t.data.end<a||t.data.end>h})}var p={},f=0;for(l=0;l<o.length;l++){var m=o[l];if(!m.displayed){p[l]=m.redraw(!0),f=p[l].length}}if(f>0)for(var v=0;v<f;v++)r.forEach(p,function(t){t[v]()});for(l=0;l<o.length;l++)o[l].repositionX();return o},o.prototype._traceVisible=function(t,e,i,o,n){if(-1!=t){var s,r;for(s=t;s>=0&&(r=e[s],!n(r));s--)void 0===o[r.id]&&(o[r.id]=!0,i.push(r));for(s=t+1;s<e.length&&(r=e[s],!n(r));s++)void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}},o.prototype._checkIfVisible=function(t,e,i){t.isVisible(i)?(t.displayed||t.show(),t.repositionX(),e.push(t)):t.displayed&&t.hide()},o.prototype._checkIfVisibleWithReference=function(t,e,i,o){t.isVisible(o)?void 0===i[t.id]&&(i[t.id]=!0,e.push(t)):t.displayed&&t.hide()},o.prototype.changeSubgroup=function(t,e,i){this._removeFromSubgroup(t,e),this._addToSubgroup(t,i),this.orderSubgroups()},t.exports=o},function(t,e,i){function o(t,e,i){r.call(this,t,e,i),this.width=0,this.height=0,this.top=0,this.left=0}var n=i(29),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(68);o.prototype=(0,s.default)(r.prototype),o.prototype.redraw=function(t,e,i){this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.width=this.dom.background.offsetWidth,this.dom.background.style.height="0";for(var o=0,n=this.visibleItems.length;o<n;o++){this.visibleItems[o].repositionY(e)}return!1},o.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-range",o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.visibleFrame=document.createElement("div"),this.dom.visibleFrame.className="vis-item-visible-frame",this.dom.box.appendChild(this.dom.visibleFrame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className=this.baseClassName+e,this.dom.content.style.maxWidth="none"}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.frame).overflow,{content:{width:this.dom.content.offsetWidth},box:{height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=t.box.height,this.dom.content.style.maxWidth="",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDeleteButton(this.dom.box),this._repaintDragCenter(),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end),r=void 0===this.data.align?this.options.align:this.data.align;!1===this.data.limitSize||void 0!==t&&!0!==t||(n<-o&&(n=-o),s>2*o&&(s=2*o));var a=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=a+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=a,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=a+"px",r){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(a-i,0)+"px":this.dom.content.style.left=Math.max(a-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((a-i)/2,0)+"px":this.dom.content.style.left=Math.max((a-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+e+"px)")}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,this.dom.box.appendChild(t),this.dom.dragLeft=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragLeft||(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},o.prototype._repaintDragRight=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,this.dom.box.appendChild(t),this.dom.dragRight=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragRight||(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(179).default,f=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},c.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new p(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===(void 0===t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),!1===this.options.filter&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):!0!==e&&-1===e.indexOf(n)||(o=!0),!1!==o&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(!0===this.options.showButton){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:"_clean",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:"_getValue",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:"_makeItem",value:function(t){if(!0===this.allowCreation){var e=document.createElement("div");e.className="vis-configuration vis-config-item vis-config-s"+t.length;for(var i=arguments.length,o=Array(i>1?i-1:0),n=1;n<i;n++)o[n-1]=arguments[n];return o.forEach(function(t){e.appendChild(t)}),this.domElements.push(e),this.domElements.length}return 0}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerHTML=t,this._makeItem([],e)}},{key:"_makeLabel",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,o.innerHTML=!0===i?"<i><b>"+t+":</b></i>":t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;s<t.length;s++){var r=document.createElement("option");r.value=t[s],s===n&&(r.selected="selected"),r.innerHTML=t[s],o.appendChild(r)}var a=this;o.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,o)}},{key:"_makeRange",value:function(t,e,i){var o=t[0],n=t[1],s=t[2],r=t[3],a=document.createElement("input");a.className="vis-configuration vis-config-range";try{a.type="range",a.min=n,a.max=s}catch(t){}a.step=r;var h="",d=0;if(void 0!==e){e<0&&1.2*e<n?(a.min=Math.ceil(1.2*e),d=a.min,h="range increased"):e/1.2<n&&(a.min=Math.ceil(e/1.2),d=a.min,h="range increased"),1.2*e>s&&1!==s&&(a.max=Math.ceil(1.2*e),d=a.max,h="range increased"),a.value=e}else a.value=o;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var c=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,c,a,l);""!==h&&this.popupHistory[p]!==d&&(this.popupHistory[p]=d,this._setupPopup(h,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var o=document.createElement("div");o.id="vis-configuration-popup",o.className="vis-configuration-popup",o.innerHTML=t,o.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:o,index:e}}}},{key:"_removePopup",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:"_showPopupIfNeeded",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index],i=e.getBoundingClientRect();this.popupDiv.html.style.left=i.left+"px",this.popupDiv.html.style.top=i.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=setTimeout(function(){t.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=setTimeout(function(){t._removePopup()},1800)}}},{key:"_makeCheckbox",value:function(t,e,i){var o=document.createElement("input");o.type="checkbox",o.className="vis-configuration vis-config-checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"===(void 0===t?"undefined":(0,a.default)(t))?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var n=this;o.onchange=function(){n._update(this.checked,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeTextInput",value:function(t,e,i){var o=document.createElement("input");o.type="text",o.className="vis-configuration vis-config-text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var n=this;o.onchange=function(){n._update(this.value,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeColorField",value:function(t,e,i){var o=this,n=t[1],s=document.createElement("div");e=void 0===e?n:e,"none"!==e?(s.className="vis-configuration vis-config-colorBlock",s.style.backgroundColor=e):s.className="vis-configuration vis-config-colorBlock none",e=void 0===e?n:e,s.onclick=function(){o._showColorPicker(e,s,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,s)}},{key:"_showColorPicker",value:function(t,e,i){var o=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback(function(t){var n="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=n,o._update(n,i)}),this.colorPicker.setCloseCallback(function(){e.onclick=function(){o._showColorPicker(t,e,i)}})}},{key:"_handleObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!1,n=this.options.filter,s=!1;for(var r in t)if(t.hasOwnProperty(r)){o=!0;var a=t[r],h=c.copyAndExtendArray(e,r);if("function"==typeof n&&!1===(o=n(r,e))&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==o){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(-1!==e.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(l=!1),!0===l)if(void 0!==a.enabled){var u=c.copyAndExtendArray(h,"enabled"),p=this._getValue(u);if(!0===p){var f=this._makeLabel(r,h,!0);this._makeItem(h,f),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,p,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}return s}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i;t="true"===t||t,t="false"!==t&&t;for(var n=0;n<e.length;n++)"global"!==e[n]&&(void 0===o[e[n]]&&(o[e[n]]={}),n!==e.length-1?o=o[e[n]]:o[e[n]]=t);return i}},{key:"_printOptions",value:function(){var t=this.getOptions();this.optionsContainer.innerHTML="<pre>var options = "+(0,s.default)(t,null,2)+"</pre>"}},{key:"getOptions",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}();e.default=f},function(t,e,i){function o(t,e){}function n(t,e){return e=void 0===e?{}:e,{style:e.style||t.options.drawPoints.style,
+styles:e.styles||t.options.drawPoints.styles,size:e.size||t.options.drawPoints.size,className:e.className||t.className}}function s(t,e){var i=void 0;return t.options&&t.options.drawPoints&&t.options.drawPoints.onRender&&"function"==typeof t.options.drawPoints.onRender&&(i=t.options.drawPoints.onRender),e.group.options&&e.group.options.drawPoints&&e.group.options.drawPoints.onRender&&"function"==typeof e.group.options.drawPoints.onRender&&(i=e.group.options.drawPoints.onRender),i}var r=i(6),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(14);o.draw=function(t,e,i,o){o=o||0;for(var r=s(i,e),d=0;d<t.length;d++)if(r){var l=r(t[d],e);!0!==l&&"object"!==(void 0===l?"undefined":(0,a.default)(l))||h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e,l),i.svgElements,i.svg,t[d].label)}else h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e),i.svgElements,i.svg,t[d].label)},o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,d=h.getSVGElement("rect",r.svgElements,r.svg);d.setAttributeNS(null,"x",e),d.setAttributeNS(null,"y",i-a),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",2*a),d.setAttributeNS(null,"class","vis-outline"),h.drawPoint(e+.5*o,i,n(t),r.svgElements,r.svg)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n.labelOffset=0,n.selected=!1,n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"setOptions",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:"setImages",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:"switchImages",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_resizeImage",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,o=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:o=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*o}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,o){this.initContextForDraw(t,o),t.circle(e,i,o.size),this.performFill(t,o)}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale),this.imageObj.drawImageAtPosition(t,i,this.left,this.top,this.width,this.height),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(29),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(117).default,v=i(48).default,g=i(215).default,y=i(217).default,b=i(218).default,_=i(219).default,w=function(){function t(e,i,o,n){if((0,u.default)(this,t),void 0===i)throw new Error("No body provided");this.options=f.bridgeObject(o),this.globalOptions=o,this.defaultOptions=n,this.body=i,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new m(this.body,this.options,!0),this.setOptions(e)}return(0,p.default)(t,[{key:"setOptions",value:function(e){if(e){t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=parseFloat(e.value));var i=[e,this.options,this.defaultOptions];this.chooser=v.choosify("edge",i),this.updateLabelModule(e);var o=this.updateEdgeType();return this._setInteractionWidths(),this.connect(),void 0===e.hidden&&void 0===e.physics||(o=!0),o}}},{key:"getFormattingValues",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,o=this.options.color.inherit,n={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,arrowStrikethrough:this.options.arrowStrikethrough,color:o?void 0:this.options.color.color,inheritsColor:o,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var s=this.options.selectionWidth;"function"==typeof s?n.width=s(n.width):"number"==typeof s&&(n.width+=s),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.highlight,n.shadow=this.options.shadow.enabled}else if(this.hover){var r=this.options.hoverWidth;"function"==typeof r?n.width=r(n.width):"number"==typeof r&&(n.width+=r),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.hover,n.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(n,this.options.id,this.selected,this.hover),void 0!==n.color&&(n.inheritsColor=!1),!1===n.shadow&&(n.shadowColor===this.options.shadow.color&&n.shadowSize===this.options.shadow.size&&n.shadowX===this.options.shadow.x&&n.shadowY===this.options.shadow.y||(n.shadow=!0)));else n.shadow=this.options.shadow.enabled,n.width=Math.max(n.width,.3/this.body.view.scale);return n}},{key:"updateLabelModule",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof y&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof g&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof b&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof _&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new y(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new g(this.options,this.body,this.labelModule):this.edgeType=new b(this.options,this.body,this.labelModule):this.edgeType=new _(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),n=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*s}this.options.width=this.options.scaling.min+o*n}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),o={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(o.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=o.from.core)),e.toArrow&&(o.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=o.to.core)),e.middleArrow&&(o.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e)),this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawArrows(t,o,e),this.drawLabel(t,i)}}},{key:"drawArrows",value:function(t,e,i){i.fromArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.from),i.middleArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.middle),i.toArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.to)}},{key:"drawLabel",value:function(t,e){if(void 0!==this.options.label){var i=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),i.id!=o.id){this.labelModule.pointToSelf=!1;var n=this.edgeType.getPoint(.5,e);t.save();var s=this._getRotation(t);0!=s.angle&&(t.translate(s.x,s.y),t.rotate(s.angle)),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var r,a,h=this.options.selfReferenceSize;i.shape.width>i.shape.height?(r=i.x+.5*i.shape.width,a=i.y-h):(r=i.x+h,a=i.y-.5*i.shape.height),n=this._pointOnCircle(r,a,h,.125),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();v.pointInRect(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var o={left:t.x,top:t.y};return this.isOverlappingWith(o)&&e.push({edgeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,o=this.to.x,n=this.to.y,s=t.left,r=t.top;return this.edgeType.getDistanceToEdge(e,i,o,n,s,r)<10}return!1}},{key:"_getRotation",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var o={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return o;if("horizontal"===this.options.font.align)return o;var n=this.from.y-this.to.y,s=this.from.x-this.to.x,r=Math.atan2(n,s);return(r<-1&&s<0||r>0&&s<0)&&(r+=Math.PI),o.angle=r,o}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=["arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width","font","chosen","widthConstraint"];if(f.selectiveDeepExtend(r,t,e,i),v.isValidLabel(e.label)?t.label=e.label:t.label=void 0,f.mergeOptions(t,e,"smooth",o),f.mergeOptions(t,e,"shadow",o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=(0,d.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),f.mergeOptions(t.scaling,e.scaling,"label",o.scaling)):!0===i&&null===e.scaling&&(t.scaling=(0,d.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var h=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=h.indexOf("to"),t.arrows.middle.enabled=-1!=h.indexOf("middle"),t.arrows.from.enabled=-1!=h.indexOf("from")}else{if("object"!==(0,a.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));f.mergeOptions(t.arrows,e.arrows,"to",o.arrows),f.mergeOptions(t.arrows,e.arrows,"middle",o.arrows),f.mergeOptions(t.arrows,e.arrows,"from",o.arrows)}else!0===i&&null===e.arrows&&(t.arrows=(0,d.default)(o.arrows));if(void 0!==e.color&&null!==e.color){var l=e.color,u=t.color;if(n)f.deepExtend(u,o.color,!1,i);else for(var c in u)u.hasOwnProperty(c)&&delete u[c];if(f.isString(u))u.color=u,u.highlight=u,u.hover=u,u.inherit=!1,void 0===l.opacity&&(u.opacity=1);else{var p=!1;void 0!==l.color&&(u.color=l.color,p=!0),void 0!==l.highlight&&(u.highlight=l.highlight,p=!0),void 0!==l.hover&&(u.hover=l.hover,p=!0),void 0!==l.inherit&&(u.inherit=l.inherit),void 0!==l.opacity&&(u.opacity=Math.min(1,Math.max(0,l.opacity))),!0===p?u.inherit=!1:void 0===u.inherit&&(u.inherit="from")}}else!0===i&&null===e.color&&(t.color=f.bridgeObject(o.color));!0===i&&null===e.font&&(t.font=f.bridgeObject(o.font))}}]),t}();e.default=w},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_findBorderPositionBezier",value:function(t,e){var i,o,n,s,r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),h=0,d=0,l=1,u=this.to,c=!1;for(t.id===this.from.id&&(u=this.from,c=!0);d<=l&&h<10;){var p=.5*(d+l);if(i=this.getPoint(p,a),o=Math.atan2(u.y-i.y,u.x-i.x),n=u.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-u.x,2)+Math.pow(i.y-u.y,2)),r=n-s,Math.abs(r)<.2)break;r<0?!1===c?d=p:l=p:!1===c?l=p:d=p,h++}return i.t=p,i}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r){var a=1e9,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=t,f=e;for(d=1;d<10;d++)l=.1*d,u=Math.pow(1-l,2)*t+2*l*(1-l)*r.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*r.y+Math.pow(l,2)*o,d>0&&(h=this._getDistanceToLine(p,f,u,c,n,s),a=h<a?h:a),p=u,f=c;return a}},{key:"_bezierCurve",value:function(t,e,i,o){var n=void 0!==i&&void 0!==i.x,s=void 0!==o&&void 0!==o.x;t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),n&&s?t.bezierCurveTo(i.x,i.y,o.x,o.y,this.toPoint.x,this.toPoint.y):n?t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,null,[{key:"getRange",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)e=t[i[a]],s>e.shape.boundingBox.left&&(s=e.shape.boundingBox.left),r<e.shape.boundingBox.right&&(r=e.shape.boundingBox.right),o>e.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n<e.shape.boundingBox.bottom&&(n=e.shape.boundingBox.bottom);return 1e9===s&&-1e9===r&&1e9===o&&-1e9===n&&(o=0,n=0,s=0,r=0),{minX:s,maxX:r,minY:o,maxY:n}}},{key:"getRangeCore",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)e=t[i[a]],s>e.x&&(s=e.x),r<e.x&&(r=e.x),o>e.y&&(o=e.y),n<e.y&&(n=e.y);return 1e9===s&&-1e9===r&&1e9===o&&-1e9===n&&(o=0,n=0,s=0,r=0),{minX:s,maxX:r,minY:o,maxY:n}}},{key:"findCenter",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:"cloneOptions",value:function(t,e){var i={};return void 0===e||"node"===e?(h.deepExtend(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):h.deepExtend(i,t.options,!0),i}}]),t}();e.default=d},function(t,e,i){t.exports={default:i(124),__esModule:!0}},function(t,e,i){var o=i(50);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e,i){var o=i(52),n=i(17),s=i(83),r=i(26),a=i(22),h=i(31),d=i(129),l=i(59),u=i(85),c=i(13)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in M)return M[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",S="values"==v,D=!1,M=t.prototype,C=M[c]||M["@@iterator"]||v&&M[v],O=C||x(v),E=v?S?x("entries"):O:void 0,T="Array"==e?M.entries||C:C;if(T&&(w=u(T.call(new t)))!==Object.prototype&&w.next&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),S&&C&&"values"!==C.name&&(D=!0,O=function(){return C.call(this)}),o&&!y||!p&&!D&&M[c]||r(M,c,O),h[e]=O,h[k]=f,v)if(b={values:S?O:x("values"),keys:g?O:x("keys"),entries:E},y)for(_ in b)_ in M||s(M,_,b[_]);else n(n.P+n.F*(p||D),e,b);return b}},function(t,e,i){var o=i(128);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e,i){t.exports=!i(21)&&!i(28)(function(){return 7!=Object.defineProperty(i(82)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){var o=i(32),n=i(18).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){t.exports=i(26)},function(t,e,i){var o=i(22),n=i(25),s=i(131)(!1),r=i(56)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(22),n=i(41),s=i(56)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(50),n=i(13)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){var o=i(17),n=i(7),s=i(28);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){var o=i(84),n=i(58).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(42),n=i(39),s=i(25),r=i(53),a=i(22),h=i(81),d=Object.getOwnPropertyDescriptor;e.f=i(21)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e,i){t.exports={default:i(162),__esModule:!0}},function(t,e,i){function o(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=o},function(t,e,i){function o(t,e){if(void 0===t)throw new Error("No container element defined");if(this.container=t,this.visible=!e||void 0==e.visible||e.visible,this.visible){this.frame=document.createElement("DIV"),this.frame.style.width="100%",this.frame.style.position="relative",this.container.appendChild(this.frame),this.frame.prev=document.createElement("INPUT"),this.frame.prev.type="BUTTON",this.frame.prev.value="Prev",this.frame.appendChild(this.frame.prev),this.frame.play=document.createElement("INPUT"),this.frame.play.type="BUTTON",this.frame.play.value="Play",this.frame.appendChild(this.frame.play),this.frame.next=document.createElement("INPUT"),this.frame.next.type="BUTTON",this.frame.next.value="Next",this.frame.appendChild(this.frame.next),this.frame.bar=document.createElement("INPUT"),this.frame.bar.type="BUTTON",this.frame.bar.style.position="absolute",this.frame.bar.style.border="1px solid red",this.frame.bar.style.width="100px",this.frame.bar.style.height="6px",this.frame.bar.style.borderRadius="2px",this.frame.bar.style.MozBorderRadius="2px",this.frame.bar.style.border="1px solid #7F7F7F",this.frame.bar.style.backgroundColor="#E5E5E5",this.frame.appendChild(this.frame.bar),this.frame.slide=document.createElement("INPUT"),this.frame.slide.type="BUTTON",this.frame.slide.style.margin="0px",this.frame.slide.value=" ",this.frame.slide.style.position="relative",this.frame.slide.style.left="-100px",this.frame.appendChild(this.frame.slide);var i=this;this.frame.slide.onmousedown=function(t){i._onMouseDown(t)},this.frame.prev.onclick=function(t){i.prev(t)},this.frame.play.onclick=function(t){i.togglePlay(t)},this.frame.next.onclick=function(t){i.next(t)}}this.onChangeCallback=void 0,this.values=[],this.index=void 0,this.playTimeout=void 0,this.playInterval=1e3,this.playLoop=!0}var n=i(2);o.prototype.prev=function(){var t=this.getIndex();t>0&&(t--,this.setIndex(t))},o.prototype.next=function(){var t=this.getIndex();t<this.values.length-1&&(t++,this.setIndex(t))},o.prototype.playNext=function(){var t=new Date,e=this.getIndex();e<this.values.length-1?(e++,this.setIndex(e)):this.playLoop&&(e=0,this.setIndex(e));var i=new Date,o=i-t,n=Math.max(this.playInterval-o,0),s=this;this.playTimeout=setTimeout(function(){s.playNext()},n)},o.prototype.togglePlay=function(){void 0===this.playTimeout?this.play():this.stop()},o.prototype.play=function(){this.playTimeout||(this.playNext(),this.frame&&(this.frame.play.value="Stop"))},o.prototype.stop=function(){clearInterval(this.playTimeout),this.playTimeout=void 0,this.frame&&(this.frame.play.value="Play")},o.prototype.setOnChangeCallback=function(t){this.onChangeCallback=t},o.prototype.setPlayInterval=function(t){this.playInterval=t},o.prototype.getPlayInterval=function(){return this.playInterval},o.prototype.setPlayLoop=function(t){this.playLoop=t},o.prototype.onChange=function(){void 0!==this.onChangeCallback&&this.onChangeCallback()},o.prototype.redraw=function(){if(this.frame){this.frame.bar.style.top=this.frame.clientHeight/2-this.frame.bar.offsetHeight/2+"px",this.frame.bar.style.width=this.frame.clientWidth-this.frame.prev.clientWidth-this.frame.play.clientWidth-this.frame.next.clientWidth-30+"px";var t=this.indexToLeft(this.index);this.frame.slide.style.left=t+"px"}},o.prototype.setValues=function(t){this.values=t,this.values.length>0?this.setIndex(0):this.index=void 0},o.prototype.setIndex=function(t){if(!(t<this.values.length))throw new Error("Index out of range");this.index=t,this.redraw(),this.onChange()},o.prototype.getIndex=function(){return this.index},o.prototype.get=function(){return this.values[this.index]},o.prototype._onMouseDown=function(t){if(t.which?1===t.which:1===t.button){this.startClientX=t.clientX,this.startSlideX=parseFloat(this.frame.slide.style.left),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},n.addEventListener(document,"mousemove",this.onmousemove),n.addEventListener(document,"mouseup",this.onmouseup),n.preventDefault(t)}},o.prototype.leftToIndex=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t-3,o=Math.round(i/e*(this.values.length-1));return o<0&&(o=0),o>this.values.length-1&&(o=this.values.length-1),o},o.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10;return t/(this.values.length-1)*e+3},o.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,o=this.leftToIndex(i);this.setIndex(o),n.preventDefault()},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",n.removeEventListener(document,"mousemove",this.onmousemove),n.removeEventListener(document,"mouseup",this.onmouseup),n.preventDefault()},t.exports=o},function(t,e,i){function o(t,e,i,o){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,o)}o.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.prototype.setRange=function(t,e,i,o){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(i))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t||0,this._end=e||0,this.setStep(i,o)},o.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),!0===this.prettyStep?this._step=o.calculatePrettyStep(t):this._step=t)},o.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),o=2*Math.pow(10,Math.round(e(t/2))),n=5*Math.pow(10,Math.round(e(t/5))),s=i;return Math.abs(o-t)<=Math.abs(s-t)&&(s=o),Math.abs(n-t)<=Math.abs(s-t)&&(s=n),s<=0&&(s=1),s},o.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},o.prototype.getStep=function(){return this._step},o.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()<this._start&&this.next()},o.prototype.next=function(){this._current+=this._step},o.prototype.end=function(){return this._current>this._end},t.exports=o},function(t,e,i){function o(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function n(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+n(e)}function r(t,e,i,o){for(var n,r,a=0;a<i.length;++a)n=i[a],r=s(o,n),e[r]=t[n]}function a(t,e,i,o){for(var n,r,a=0;a<i.length;++a)n=i[a],void 0!==t[n]&&(r=s(o,n),e[r]=t[n])}function h(t,e){if(void 0===t||o(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");C=t,r(t,e,D),r(t,e,M,"default"),l(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new x(0,0,-1)}function d(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===C||o(C))throw new Error("DEFAULTS not set for module Settings");a(t,e,D),a(t,e,M,"default"),l(t,e)}}function l(t,e){void 0!==t.backgroundColor&&m(t.backgroundColor,e),v(t.dataColor,e),f(t.style,e),u(t.showLegend,e),g(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&_.selectiveDeepExtend(["tooltipStyle"],e,t)}function u(t,e){if(void 0===t){if(void 0===C.showLegend){var i=e.style===k.DOTCOLOR||e.style===k.DOTSIZE;e.showLegend=i}}else e.showLegend=t}function c(t){var e=S[t];return void 0===e?-1:e}function p(t){var e=!1;for(var i in k)if(k[i]===t){e=!0;break}return e}function f(t,e){if(void 0!==t){var i;if("string"==typeof t){if(-1===(i=c(t)))throw new Error("Style '"+t+"' is invalid")}else{if(!p(t))throw new Error("Style '"+t+"' is invalid");i=t}e.style=i}}function m(t,e){var i="white",o="gray",n=1;if("string"==typeof t)i=t,o="none",n=0;else{if("object"!==(void 0===t?"undefined":(0,b.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(i=t.fill),void 0!==t.stroke&&(o=t.stroke),void 0!==t.strokeWidth&&(n=t.strokeWidth)}e.frame.style.backgroundColor=i,e.frame.style.borderColor=o,e.frame.style.borderWidth=n+"px",e.frame.style.borderStyle="solid"}function v(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function g(t,e){var i=t;void 0!==i&&(void 0===e.camera&&(e.camera=new w),e.camera.setArmRotation(i.horizontal,i.vertical),e.camera.setArmLength(i.distance))}var y=i(6),b=function(t){return t&&t.__esModule?t:{default:t}}(y),_=i(2),w=i(95),x=i(34),k={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},S={dot:k.DOT,"dot-line":k.DOTLINE,"dot-color":k.DOTCOLOR,"dot-size":k.DOTSIZE,line:k.LINE,grid:k.GRID,surface:k.SURFACE,bar:k.BAR,"bar-color":k.BARCOLOR,"bar-size":k.BARSIZE},D=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],M=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],C=void 0;t.exports.STYLE=k,t.exports.setDefaults=h,t.exports.setOptions=d,t.exports.setCameraPosition=g},function(t,e,i){function o(){this.armLocation=new r,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraOffset=new r,this.offsetMultiplier=.6,this.cameraLocation=new r,this.cameraRotation=new r(.5*Math.PI,0,0),this.calculateCameraOrientation()}var n=i(165),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(34);o.prototype.setOffset=function(t,e){var i=Math.abs,o=s.default,n=this.offsetMultiplier,r=this.armLength*n;i(t)>r&&(t=o(t)*r),i(e)>r&&(e=o(e)*r),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},o.prototype.getOffset=function(){return this.cameraOffset},o.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},o.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),void 0===t&&void 0===e||this.calculateCameraOrientation()},o.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},o.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())},
+o.prototype.getArmLength=function(){return this.armLength},o.prototype.getCameraLocation=function(){return this.cameraLocation},o.prototype.getCameraRotation=function(){return this.cameraRotation},o.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal;var t=this.cameraRotation.x,e=this.cameraRotation.z,i=this.cameraOffset.x,o=this.cameraOffset.y,n=Math.sin,s=Math.cos;this.cameraLocation.x=this.cameraLocation.x+i*s(e)+o*-n(e)*s(t),this.cameraLocation.y=this.cameraLocation.y+i*n(e)+o*s(e)*s(t),this.cameraLocation.z=this.cameraLocation.z+o*n(t)},t.exports=o},function(t,e,i){function o(t,e,i){this.dataGroup=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=t.getDistinctValues(this.column),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var n=i(12);o.prototype.isLoaded=function(){return this.loaded},o.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},o.prototype.getLabel=function(){return this.graph.filterLabel},o.prototype.getColumn=function(){return this.column},o.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},o.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var o=new n(this.dataGroup.getDataSet(),{filter:function(t){return t[i.column]==i.value}}).get();e=this.dataGroup._getDataPoints(o),this.dataPoints[t]=e}return e},o.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},o.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},o.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t<this.values.length){void 0===e.progress&&(e.progress=document.createElement("DIV"),e.progress.style.position="absolute",e.progress.style.color="gray",e.appendChild(e.progress));var i=this.getLoadedProgress();e.progress.innerHTML="Loading animation... "+i+"%",e.progress.style.bottom="60px",e.progress.style.left="10px";var o=this;setTimeout(function(){o.loadInBackground(t+1)},10),this.loaded=!1}else this.loaded=!0,void 0!==e.progress&&(e.removeChild(e.progress),e.progress=void 0),this.onLoadCallback&&this.onLoadCallback()},t.exports=o},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this;["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){n(i.target,t)||e.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function n(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var s=i(35),r=i(44),a=i(10),h=i(2);r(o.prototype),o.current=null,o.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},o.prototype.activate=function(){o.current&&o.current.deactivate(),o.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},o.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},o.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=o},function(t,e,i){e.en={current:"current",time:"time"},e.en_EN=e.en,e.en_US=e.en,e.it={current:"attuale",time:"tempo"},e.it_IT=e.it,e.it_CH=e.it,e.nl={current:"huidige",time:"tijd"},e.nl_NL=e.nl,e.nl_BE=e.nl,e.de={current:"Aktuelle",time:"Zeit"},e.de_DE=e.de,e.fr={current:"actuel",time:"heure"},e.fr_FR=e.fr,e.fr_CA=e.fr,e.fr_BE=e.fr,e.es={current:"corriente",time:"hora"},e.es_ES=e.es},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.body=t,this.defaultOptions={type:null,orientation:{item:"bottom"},align:"auto",stack:!0,stackSubgroups:!0,groupOrderSwap:function(t,e,i){var o=e.order;e.order=t.order,t.order=o},groupOrder:"order",selectable:!0,multiselect:!1,itemsAlwaysDraggable:{item:!1,range:!1},editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1,overrideItems:!1},groupEditable:{order:!1,add:!1,remove:!1},snap:p.snap,onDropObjectOnItem:function(t,e,i){i(e)},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},onAddGroup:function(t,e){e(t)},onMoveGroup:function(t,e){e(t)},onRemoveGroup:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1},this.options=l.extend({},this.defaultOptions),this.options.rtl=e.rtl,this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){if(i._onAddGroups(e.items),i.groupsData&&i.groupsData.length>0){var n=i.groupsData.getDataSet();n.get().forEach(function(t){if(t.nestedGroups){0!=t.showNested&&(t.showNested=!0);var e=[];t.nestedGroups.forEach(function(i){var o=n.get(i);o&&(o.nestedInGroup=t.id,0==t.showNested&&(o.visible=!1),e=e.concat(o))}),n.update(e,o)}})}},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.popup=null,this.touchParams={},this.groupTouchParams={},this._create(),this.setOptions(e)}var s=i(29),r=o(s),a=i(6),h=o(a),d=i(10),l=i(2),u=i(11),c=i(12),p=i(66),f=i(16),m=i(68),v=i(69),g=i(101),y=i(102),b=i(70),_=i(103),w=i(104).default,x="__ungrouped__",k="__background__";n.prototype=new f,n.types={background:_,box:g,range:b,point:y},n.prototype._create=function(){var t=document.createElement("div");t.className="vis-itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="vis-background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="vis-foreground",t.appendChild(i),this.dom.foreground=i;var o=document.createElement("div");o.className="vis-axis",this.dom.axis=o;var n=document.createElement("div");n.className="vis-labelset",this.dom.labelSet=n,this._updateUngrouped();var s=new v(k,null,this);s.show(),this.groups[k]=s,this.hammer=new d(this.body.dom.centerContainer),this.hammer.on("hammer.input",function(t){t.isFirst&&this._onTouch(t)}.bind(this)),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_HORIZONTAL}),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("press",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.options.rtl?this.groupHammer=new d(this.body.dom.rightContainer):this.groupHammer=new d(this.body.dom.leftContainer),this.groupHammer.on("tap",this._onGroupClick.bind(this)),this.groupHammer.on("panstart",this._onGroupDragStart.bind(this)),this.groupHammer.on("panmove",this._onGroupDrag.bind(this)),this.groupHammer.on("panend",this._onGroupDragEnd.bind(this)),this.groupHammer.get("pan").set({threshold:5,direction:d.DIRECTION_VERTICAL}),this.body.dom.centerContainer.addEventListener("mouseover",this._onMouseOver.bind(this)),this.body.dom.centerContainer.addEventListener("mouseout",this._onMouseOut.bind(this)),this.body.dom.centerContainer.addEventListener("mousemove",this._onMouseMove.bind(this)),this.body.dom.centerContainer.addEventListener("contextmenu",this._onDragEnd.bind(this)),this.body.dom.centerContainer.addEventListener("mousewheel",this._onMouseWheel.bind(this)),this.show()},n.prototype.setOptions=function(t){if(t){var e=["type","rtl","align","order","stack","stackSubgroups","selectable","multiselect","multiselectPerGroup","groupOrder","dataAttributes","template","groupTemplate","visibleFrameTemplate","hide","snap","groupOrderSwap","showTooltips","tooltip","tooltipOnItemUpdateTime"];l.selectiveExtend(e,this.options,t),"itemsAlwaysDraggable"in t&&("boolean"==typeof t.itemsAlwaysDraggable?(this.options.itemsAlwaysDraggable.item=t.itemsAlwaysDraggable,this.options.itemsAlwaysDraggable.range=!1):"object"===(0,h.default)(t.itemsAlwaysDraggable)&&(l.selectiveExtend(["item","range"],this.options.itemsAlwaysDraggable,t.itemsAlwaysDraggable),this.options.itemsAlwaysDraggable.item||(this.options.itemsAlwaysDraggable.range=!1))),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.item="top"===t.orientation?"top":"bottom":"object"===(0,h.default)(t.orientation)&&"item"in t.orientation&&(this.options.orientation.item=t.orientation.item)),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"===(0,h.default)(t.margin)&&(l.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"===(0,h.default)(t.margin.item)&&l.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable,this.options.editable.overrideItems=!1):"object"===(0,h.default)(t.editable)&&l.selectiveExtend(["updateTime","updateGroup","add","remove","overrideItems"],this.options.editable,t.editable)),"groupEditable"in t&&("boolean"==typeof t.groupEditable?(this.options.groupEditable.order=t.groupEditable,this.options.groupEditable.add=t.groupEditable,this.options.groupEditable.remove=t.groupEditable):"object"===(0,h.default)(t.groupEditable)&&l.selectiveExtend(["order","add","remove"],this.options.groupEditable,t.groupEditable));["onDropObjectOnItem","onAdd","onUpdate","onRemove","onMove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup"].forEach(function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this)),this.markDirty()}},n.prototype.markDirty=function(t){this.groupIds=[],t&&t.refreshItems&&l.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()})},n.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},n.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},n.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||(this.options.rtl?this.body.dom.right.appendChild(this.dom.labelSet):this.body.dom.left.appendChild(this.dom.labelSet))},n.prototype.setSelection=function(t){var e,i,o,n;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;e<i;e++)o=this.selection[e],(n=this.items[o])&&n.unselect();for(this.selection=[],e=0,i=t.length;e<i;e++)o=t[e],(n=this.items[o])&&(this.selection.push(o),n.select())},n.prototype.getSelection=function(){return this.selection.concat([])},n.prototype.getVisibleItems=function(){var t,e,i=this.body.range.getRange();this.options.rtl?(t=this.body.util.toScreen(i.start),e=this.body.util.toScreen(i.end)):(e=this.body.util.toScreen(i.start),t=this.body.util.toScreen(i.end));var o=[];for(var n in this.groups)if(this.groups.hasOwnProperty(n))for(var s=this.groups[n],r=s.isVisible?s.visibleItems:[],a=0;a<r.length;a++){var h=r[a];this.options.rtl?h.right<e&&h.right+h.width>t&&o.push(h.id):h.left<t&&h.left+h.width>e&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;i<o;i++)if(e[i]==t){e.splice(i,1);break}},n.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=l.option.asSize,o=this.options,n=o.orientation.item,s=!1,r=this.dom.frame;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.options.rtl?this.props.right=this.body.domProps.right.width+this.body.domProps.border.right:this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,r.className="vis-itemset",s=this._orderGroups()||s;var a=e.end-e.start,h=a!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth,d=e.start!=this.lastRangeStart,u=o.stack!=this.lastStack,c=o.stackSubgroups!=this.lastStackSubgroups,p=h||d||u||c;this.lastVisibleInterval=a,this.lastRangeStart=e.start,this.lastStack=o.stack,this.lastStackSubgroups=o.stackSubgroups,this.props.lastWidth=this.props.width;var f=this._firstGroup(),m={item:t.item,axis:t.axis},v={item:t.item,axis:t.item.vertical/2},g=0,y=t.axis+t.item.vertical;this.groups[k].redraw(e,v,p);var b={},_=0;if(l.forEach(this.groups,function(t,i){if(i!==k){var o=t==f?m:v;b[i]=t.redraw(e,o,p,!0),_=b[i].length}}),_>0){for(var w={},x=0;x<_;x++)l.forEach(b,function(t,e){w[e]=t[x]()});l.forEach(this.groups,function(t,e){if(e!==k){var i=w[e];s=i||s,g+=t.height}}),g=Math.max(g,y)}return g=Math.max(g,y),r.style.height=i(g),this.props.width=r.offsetWidth,this.props.height=g,this.dom.axis.style.top=i("top"==n?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.options.rtl?this.dom.axis.style.right="0":this.dom.axis.style.left="0",this.initialItemSetDrawn=!0,s=this._isResized()||s},n.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t];return this.groups[e]||this.groups[x]||null},n.prototype._updateUngrouped=function(){var t,e,i=this.groups[x];if(this.groupsData){if(i){i.hide(),delete this.groups[x];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){i=new m(null,null,this),this.groups[x]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},n.prototype.getLabelSet=function(){return this.dom.labelSet},n.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(l.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;l.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},n.prototype.getItems=function(){return this.itemsData},n.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(l.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var o=this.groupsData;this.groupsData instanceof c&&(o=this.groupsData.getDataSet()),o.get().forEach(function(t){t.nestedGroups&&t.nestedGroups.forEach(function(e){var i=o.get(e);i.nestedInGroup=t.id,0==t.showNested&&(i.visible=!1),o.update(i)})});var n=this.id;l.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype.getGroups=function(){return this.groupsData},n.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},n.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},n.prototype._getGroupId=function(t){return"background"==this._getType(t)&&void 0==t.group?k:this.groupsData?t.group:x},n.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,o=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=o?e._getType(o):null,a=n.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,o):(i=s.selected,e._removeItem(s),s=null)),!s&&o){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(o,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onAdd=n.prototype._onUpdate,n.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.body.emitter.emit("_change",{queue:!0}))},n.prototype._order=function(){l.forEach(this.groups,function(t){t.order()})},n.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},n.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==x||t==k)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=(0,r.default)(e.options);l.extend(n,{height:null}),o=new m(t,i,e),e.groups[t]=o;for(var s in e.items)if(e.items.hasOwnProperty(s)){var a=e.items[s];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder});t=this._orderNestedGroups(t);var e=!l.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},n.prototype._orderNestedGroups=function(t){var e=[];return t.forEach(function(t){var i=this.groupsData.get(t);if(i.nestedInGroup||e.push(t),i.nestedGroups){var o=this.groupsData.get({filter:function(e){return e.nestedInGroup==t},order:this.options.groupOrder}),n=o.map(function(t){return t.id});e=e.concat(n)}},this),e},n.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i?i&&i.data&&i.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1,i&&i.add(t)},n.prototype._updateItem=function(t,e){t.setData(e);var i=this._getGroupId(t.data),o=this.groups[i];o?o&&o.data&&o.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1},n.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},n.prototype._constructByEndArray=function(t){for(var e=[],i=0;i<t.length;i++)t[i]instanceof b&&e.push(t[i]);return e},n.prototype._onTouch=function(t){this.touchParams.item=this.itemFromTarget(t),this.touchParams.dragLeftItem=t.target.dragLeftItem||!1,this.touchParams.dragRightItem=t.target.dragRightItem||!1,this.touchParams.itemProps=null},n.prototype._getGroupIndex=function(t){for(var e=0;e<this.groupIds.length;e++)if(t==this.groupIds[e])return e},n.prototype._onDragStart=function(t){if(!this.touchParams.itemIsDragging){var e,i=this.touchParams.item||null,o=this;if(i&&(i.selected||this.options.itemsAlwaysDraggable.item)){if(this.options.editable.overrideItems&&!this.options.editable.updateTime&&!this.options.editable.updateGroup)return;if(null!=i.editable&&!i.editable.updateTime&&!i.editable.updateGroup&&!this.options.editable.overrideItems)return;var n=this.touchParams.dragLeftItem,s=this.touchParams.dragRightItem;if(this.touchParams.itemIsDragging=!0,this.touchParams.selectedItem=i,n)e={item:n,initialX:t.center.x,dragLeft:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(s)e={item:s,initialX:t.center.x,dragRight:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey))this._onDragStartAddItem(t);else{this.groupIds.length<1&&this.redraw();var r=this._getGroupIndex(i.data.group),a=this.options.itemsAlwaysDraggable.item&&!i.selected?[i.id]:this.getSelection();this.touchParams.itemProps=a.map(function(e){var i=o.items[e],n=o._getGroupIndex(i.data.group);return{item:i,initialX:t.center.x,groupOffset:r-n,data:this._cloneItemData(i.data)}}.bind(this))}t.stopPropagation()}else this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey)&&this._onDragStartAddItem(t)}},n.prototype._onDragStartAddItem=function(t){var e,i,o=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x+10):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e-10);var n=this.body.util.toTime(i),s=this.body.util.getScale(),r=this.body.util.getStep(),a=o?o(n,s,r):n,h=a,d={type:"range",start:a,end:h,content:"new item"},u=l.randomUUID();d[this.itemsData._fieldId]=u;var c=this.groupFromTarget(t);c&&(d.group=c.groupId);var p=new b(d,this.conversion,this.options);p.id=u,p.data=this._cloneItemData(d),this._addItem(p),this.touchParams.selectedItem=p;var f={item:p,initialX:t.center.x,data:p.data};this.options.rtl?f.dragLeft=!0:f.dragRight=!0,this.touchParams.itemProps=[f],t.stopPropagation()},n.prototype._onDrag=function(t){if(this.touchParams.itemProps){t.stopPropagation();var e,i=this,o=this.options.snap||null;e=this.options.rtl?this.body.dom.root.offsetLeft+this.body.domProps.right.width:this.body.dom.root.offsetLeft+this.body.domProps.left.width;var n=this.body.util.getScale(),s=this.body.util.getStep(),r=this.touchParams.selectedItem,a=(this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateGroup||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateGroup,h=null;if(a&&r&&void 0!=r.data.group){var d=i.groupFromTarget(t);d&&(h=this._getGroupIndex(d.groupId))}this.touchParams.itemProps.forEach(function(d){var u,c,p,f,m,v=i.body.util.toTime(t.center.x-e),g=i.body.util.toTime(d.initialX-e);u=this.options.rtl?-(v-g):v-g;var y=this._cloneItemData(d.item.data);if(null==d.item.editable||d.item.editable.updateTime||d.item.editable.updateGroup||i.options.editable.overrideItems){if((this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateTime||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateTime)if(d.dragLeft)this.options.rtl?void 0!=y.end&&(p=l.convert(d.data.end,"Date"),m=new Date(p.valueOf()+u),y.end=o?o(m,n,s):m):void 0!=y.start&&(c=l.convert(d.data.start,"Date"),f=new Date(c.valueOf()+u),y.start=o?o(f,n,s):f);else if(d.dragRight)this.options.rtl?void 0!=y.start&&(c=l.convert(d.data.start,"Date"),f=new Date(c.valueOf()+u),y.start=o?o(f,n,s):f):void 0!=y.end&&(p=l.convert(d.data.end,"Date"),m=new Date(p.valueOf()+u),y.end=o?o(m,n,s):m);else if(void 0!=y.start)if(c=l.convert(d.data.start,"Date").valueOf(),f=new Date(c+u),void 0!=y.end){p=l.convert(d.data.end,"Date");var b=p.valueOf()-c.valueOf();y.start=o?o(f,n,s):f,y.end=new Date(y.start.valueOf()+b)}else y.start=o?o(f,n,s):f;if(a&&!d.dragLeft&&!d.dragRight&&null!=h&&void 0!=y.group){var _=h-d.groupOffset;_=Math.max(0,_),_=Math.min(i.groupIds.length-1,_),y.group=i.groupIds[_]}y=this._cloneItemData(y),i.options.onMoving(y,function(t){t&&d.item.setData(this._cloneItemData(t,"Date"))}.bind(this))}}.bind(this)),this.body.emitter.emit("_change")}},n.prototype._moveToGroup=function(t,e){var i=this.groups[e];if(i&&i.groupId!=t.data.group){var o=t.parent;o.remove(t),o.order(),t.data.group=i.groupId,i.add(t),i.order()}},n.prototype._onDragEnd=function(t){if(this.touchParams.itemIsDragging=!1,this.touchParams.itemProps){t.stopPropagation();var e=this,i=this.itemsData.getDataSet(),o=this.touchParams.itemProps;this.touchParams.itemProps=null,o.forEach(function(t){var o=t.item.id;if(null!=e.itemsData.get(o,e.itemOptions)){var n=this._cloneItemData(t.item.data);e.options.onMove(n,function(n){n?(n[i._fieldId]=o,i.update(n)):(t.item.setData(t.data),e.body.emitter.emit("_change"))})}else e.options.onAdd(t.item.data,function(i){e._removeItem(t.item),i&&e.itemsData.getDataSet().add(i),e.body.emitter.emit("_change")})}.bind(this))}},n.prototype._onGroupClick=function(t){var e=this.groupFromTarget(t);if(e&&e.nestedGroups){var i=this.groupsData.getDataSet(),o=i.get(e.groupId);void 0==o.showNested&&(o.showNested=!0),o.showNested=!o.showNested;var n=i.get(e.nestedGroups).map(function(t){return t.visible=o.showNested,t});if(i.update(n.concat(o)),o.showNested)l.removeClassName(e.dom.label,"collapsed"),l.addClassName(e.dom.label,"expanded");else{l.removeClassName(e.dom.label,"expanded");var s=this.options.rtl?"collapsed-rtl":"collapsed";l.addClassName(e.dom.label,s)}}},n.prototype._onGroupDragStart=function(t){this.options.groupEditable.order&&(this.groupTouchParams.group=this.groupFromTarget(t),this.groupTouchParams.group&&(t.stopPropagation(),this.groupTouchParams.originalOrder=this.groupsData.getIds({order:this.options.groupOrder})))},n.prototype._onGroupDrag=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this.groupsData;this.groupsData instanceof c&&(e=this.groupsData.getDataSet());var i=this.groupFromTarget(t);if(i&&i.height!=this.groupTouchParams.group.height){var o=i.top<this.groupTouchParams.group.top,n=t.center?t.center.y:t.clientY,s=l.getAbsoluteTop(i.dom.foreground),r=this.groupTouchParams.group.height;if(o){if(s+r<n)return}else{if(s+i.height-r>n)return}}if(i&&i!=this.groupTouchParams.group){var a=e.get(i.groupId),h=e.get(this.groupTouchParams.group.groupId);h&&a&&(this.options.groupOrderSwap(h,a,e),e.update(h),e.update(a));var d=e.getIds({order:this.options.groupOrder});if(!l.equalArray(d,this.groupTouchParams.originalOrder))for(var u=this.groupTouchParams.originalOrder,p=this.groupTouchParams.group.groupId,f=Math.min(u.length,d.length),m=0,v=0,g=0;m<f;){for(;m+v<f&&m+g<f&&d[m+v]==u[m+g];)m++;if(m+v>=f)break;if(d[m+v]==p)v=1;else if(u[m+g]==p)g=1;else{var y=d.indexOf(u[m+g]),b=e.get(d[m+v]),_=e.get(u[m+g]);this.options.groupOrderSwap(b,_,e),e.update(b),e.update(_);var w=d[m+v];d[m+v]=u[m+g],d[y]=w,m++}}}}},n.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=l.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!l.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a<r;){for(;a<r&&n[a]==s[a];)a++;if(a>=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),u=o.get(s[a]);e.options.groupOrderSwap(d,u,o),o.update(d),o.update(u);var c=n[a];n[a]=s[a],n[h]=c,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){if(e!==this.itemFromRelatedTarget(t)){var i=e.getTitle();if(this.options.showTooltips&&i){null==this.popup&&(this.popup=new w(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(i);var o=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(o)+o.offsetLeft,t.clientY-l.getAbsoluteTop(o)+o.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){e!==this.itemFromRelatedTarget(t)&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){if(this.itemFromTarget(t)&&this.options.showTooltips&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var e=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(e)+e.offsetLeft,t.clientY-l.getAbsoluteTop(e)+e.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onDropObjectOnItem=function(t){var e=this.itemFromTarget(t),i=JSON.parse(t.dataTransfer.getData("text"));this.options.onDropObjectOnItem(i,e)},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e,i,o=this,n=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e);var s,r,a=this.body.util.toTime(i),h=this.body.util.getScale(),d=this.body.util.getStep();"drop"==t.type?(r=JSON.parse(t.dataTransfer.getData("text")),r.content=r.content?r.content:"new item",r.start=r.start?r.start:n?n(a,h,d):a,r.type=r.type||"box",r[this.itemsData._fieldId]=r.id||l.randomUUID(),"range"!=r.type||r.end||(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s)):(r={start:n?n(a,h,d):a,content:"new item"},r[this.itemsData._fieldId]=l.randomUUID(),"range"===this.options.type&&(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s));var u=this.groupFromTarget(t);u&&(r.group=u.groupId),r=this._cloneItemData(r),this.options.onAdd(r,function(e){e&&(o.itemsData.getDataSet().add(e),"drop"==t.type&&o.setSelection([e.id]))})}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){
+var i=this.options.multiselect?this.getSelection():[];if((t.srcEvent&&t.srcEvent.shiftKey||!1)&&this.options.multiselect){var o=this.itemsData.get(e.id).group,s=void 0;this.options.multiselectPerGroup&&i.length>0&&(s=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=s&&s!=o||i.push(e.id);var r=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||s==o){i=[];for(var a in this.items)if(this.items.hasOwnProperty(a)){var h=this.items[a],d=h.data.start,l=void 0!==h.data.end?h.data.end:d;!(d>=r.min&&l<=r.max)||this.options.multiselectPerGroup&&s!=this.itemsData.get(h.id).group||h instanceof _||i.push(h.id)}}}else{var u=i.indexOf(e.id);-1==u?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.start<i)&&(i=t.start),void 0!=t.end?(null==e||t.end>e)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){var e=t.center?t.center.y:t.clientY,i=this.groupIds;i.length<=0&&this.groupsData&&(i=this.groupsData.getIds({order:this.options.groupOrder}));for(var o=0;o<i.length;o++){var n=i[o],s=this.groups[n],r=s.dom.foreground,a=l.getAbsoluteTop(r);if(e>a&&e<a+r.offsetHeight)return s;if("top"===this.options.orientation.item){if(o===this.groupIds.length-1&&e>a)return s}else if(0===o&&e<a+r.offset)return s}return null},n.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},n.prototype._cloneItemData=function(t,e){var i=l.extend({},t);return e||(e=this.itemsData.getDataSet()._options.type),void 0!=i.start&&(i.start=l.convert(i.start,e&&e.start||"Date")),void 0!=i.end&&(i.end=l.convert(i.end,e&&e.end||"Date")),i},t.exports=n},function(t,e,i){e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){return("end"in t.data?t.data.end:t.data.start)-("end"in e.data?e.data.end:e.data.start)})},e.stack=function(t,i,o){if(o)for(var n=0;n<t.length;n++)t[n].top=null;for(var n=0;n<t.length;n++){var s=t[n];if(s.stack&&null===s.top){s.top=i.axis;do{for(var r=null,a=0,h=t.length;a<h;a++){var d=t[a];if(null!==d.top&&d!==s&&d.stack&&e.collision(s,d,i.item,d.options.rtl)){r=d;break}}null!=r&&(s.top=r.top+r.height+i.item.vertical)}while(r)}}},e.substack=function(t,i,o){for(var n=0;n<t.length;n++)t[n].top=null;var s=o.height;for(n=0;n<t.length;n++){var r=t[n];if(r.stack&&null===r.top){r.top=r.baseTop;do{for(var a=null,h=0,d=t.length;h<d;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item,l.options.rtl)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical),r.top+r.height>s&&(s=r.top+r.height)}while(a)}}o.height=s-o.top+.5*i.item.vertical},e.nostack=function(t,i,o,n){for(var s=0;s<t.length;s++)if(void 0==t[s].data.subgroup)t[s].top=i.item.vertical;else if(void 0!==t[s].data.subgroup&&n){var r=0;for(var a in o)o.hasOwnProperty(a)&&1==o[a].visible&&o[a].index<o[t[s].data.subgroup].index&&(r+=o[a].height,o[t[s].data.subgroup].top=r);t[s].top=r+.5*i.item.vertical}n||e.stackSubgroups(t,i,o)},e.stackSubgroups=function(t,i,o){for(var n in o)if(o.hasOwnProperty(n)){o[n].top=0;do{var s=null;for(var r in o)if(null!==o[r].top&&r!==n&&o[n].index>o[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;a<t.length;a++)void 0!==t[a].data.subgroup&&(t[a].top=o[t[a].data.subgroup].top+.5*i.item.vertical)},e.stackSubgroupsWithInnerStack=function(t,i,o){var n=!1,s=[];for(var r in o)o[r].hasOwnProperty("index")?s[o[r].index]=r:s.push(r);for(var a=0;a<s.length;a++)if(r=s[a],o.hasOwnProperty(r)){n=n||o[r].stack,o[r].top=0;for(var h in o)o[h].visible&&o[r].index>o[h].index&&(o[r].top+=o[h].height);for(var d=t[r],l=0;l<d.length;l++)void 0!==d[l].data.subgroup&&(d[l].top=o[d[l].data.subgroup].top+.5*i.item.vertical,o[r].stack&&(d[l].baseTop=d[l].top));n&&o[r].stack&&e.substack(t[r],i,o[r])}},e.collision=function(t,e,i,o){return o?t.right-i.horizontal+.001<e.right+e.width&&t.right+t.width+i.horizontal-.001>e.right&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top:t.left-i.horizontal+.001<e.left+e.width&&t.left+t.width+i.horizontal-.001>e.left&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.top<e.top+e.height&&t.top+t.height>e.top||e.start<=t.start&&e.end>=t.start&&e.top<t.top+t.height&&e.top+e.height>t.top}},function(t,e,i){function o(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.options.align,i=this.width*t.getMillisecondsPerPixel();return"right"==e?this.data.start.getTime()>t.start&&this.data.start.getTime()-i<t.end:"left"==e?this.data.start.getTime()+i>t.start&&this.data.start.getTime()<t.end:this.data.start.getTime()+i/2>t.start&&this.data.start.getTime()-i/2<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("DIV"),this.dom.content=document.createElement("DIV"),this.dom.content.className="vis-item-content",this.dom.box.appendChild(this.dom.content),this.dom.line=document.createElement("DIV"),this.dom.line.className="vis-line",this.dom.dot=document.createElement("DIV"),this.dom.dot.className="vis-dot",this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}if(!this.dom.line.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(this.dom.line)}if(!this.dom.dot.parentNode){var i=this.parent.dom.axis;if(!e)throw new Error("Cannot redraw item: parent has no axis container element");i.appendChild(this.dom.dot)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className="vis-item vis-box"+e,this.dom.line.className="vis-item vis-line"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{previous:{right:this.dom.box.style.right,left:this.dom.box.style.left},dot:{height:this.dom.dot.offsetHeight,width:this.dom.dot.offsetWidth},line:{width:this.dom.line.offsetWidth},box:{width:this.dom.box.offsetWidth,height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.options.rtl?this.dom.box.style.right="0px":this.dom.box.style.left="0px",this.props.dot.height=t.dot.height,this.props.dot.width=t.dot.width,this.props.line.width=t.line.width,this.width=t.box.width,this.height=t.box.height,this.options.rtl?this.dom.box.style.right=t.previous.right:this.dom.box.style.left=t.previous.left,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.box)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom;t.box.parentNode&&t.box.parentNode.removeChild(t.box),t.line.parentNode&&t.line.parentNode.removeChild(t.line),t.dot.parentNode&&t.dot.parentNode.removeChild(t.dot),this.displayed=!1}},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start),e=this.options.align;"right"==e?this.options.rtl?(this.right=t-this.width,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t-this.width,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width+"px",this.dom.dot.style.left=t-this.props.line.width/2-this.props.dot.width/2+"px"):"left"==e?this.options.rtl?(this.right=t,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t+"px",this.dom.dot.style.right=t+this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t+"px",this.dom.dot.style.left=t+this.props.line.width/2-this.props.dot.width/2+"px"):this.options.rtl?(this.right=t-this.width/2,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.dot.width/2+"px"):(this.left=t-this.width/2,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width/2+"px",this.dom.dot.style.left=t-this.props.dot.width/2+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box,i=this.dom.line,o=this.dom.dot;if("top"==t)e.style.top=(this.top||0)+"px",i.style.top="0",i.style.height=this.parent.top+this.top+1+"px",i.style.bottom="";else{var n=this.parent.itemSet.props.height,s=n-this.parent.top-this.parent.height+this.top;e.style.top=(this.parent.height-this.top-this.height||0)+"px",i.style.top=n-s+"px",i.style.bottom="0"}o.style.top=-this.props.dot.height/2+"px"},o.prototype.getWidthLeft=function(){return this.width/2},o.prototype.getWidthRight=function(){return this.width/2},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={dot:{top:0,width:0,height:0},content:{height:0,marginLeft:0,marginRight:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.width*t.getMillisecondsPerPixel();return this.data.start.getTime()+e>t.start&&this.data.start<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.point=document.createElement("div"),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.point.appendChild(this.dom.content),this.dom.dot=document.createElement("div"),this.dom.point.appendChild(this.dom.dot),this.dom.point["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.point.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.point)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.point),this._updateStyle(this.dom.point);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.point.className="vis-item vis-point"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{dot:{width:this.dom.dot.offsetWidth,height:this.dom.dot.offsetHeight},content:{width:this.dom.content.offsetWidth,height:this.dom.content.offsetHeight},point:{width:this.dom.point.offsetWidth,height:this.dom.point.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.dot.width=t.dot.width,this.props.dot.height=t.dot.height,this.props.content.height=t.content.height,this.options.rtl?this.dom.content.style.marginRight=2*this.props.dot.width+"px":this.dom.content.style.marginLeft=2*this.props.dot.width+"px",this.width=t.point.width,this.height=t.point.height,this.dom.dot.style.top=(this.height-this.props.dot.height)/2+"px",this.options.rtl?this.dom.dot.style.right=this.props.dot.width/2+"px":this.dom.dot.style.left=this.props.dot.width/2+"px",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.point),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.point)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){this.displayed&&(this.dom.point.parentNode&&this.dom.point.parentNode.removeChild(this.dom.point),this.displayed=!1)},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start);this.options.rtl?(this.right=t-this.props.dot.width,this.dom.point.style.right=this.right+"px"):(this.left=t-this.props.dot.width,this.dom.point.style.left=this.left+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.point;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype.getWidthLeft=function(){return this.props.dot.width},o.prototype.getWidthRight=function(){return this.props.dot.width},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(38),s=i(69),r=i(70);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-background",o.prototype.stack=!1,o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.background;if(!t)throw new Error("Cannot redraw item: parent has no background container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var t=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");this.dom.box.className=this.baseClassName+t}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.content).overflow,{content:{width:this.dom.content.offsetWidth}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=0,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup;this.dom.box.style.height=this.parent.subgroups[o].height+"px",this.dom.box.style.top="top"==i?this.parent.top+this.parent.subgroups[o].top+"px":this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>n-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),r<this.padding&&(r=this.padding),s=this.x,s+i+this.padding>n&&(s=n-i-this.padding),s<this.padding&&(s=this.padding);this.frame.style.left=s+"px",this.frame.style.top=r+"px",this.frame.style.visibility="visible",this.hidden=!1}else this.hide()}},{key:"hide",value:function(){this.hidden=!0,this.frame.style.left="0",this.frame.style.top="0",this.frame.style.visibility="hidden"}},{key:"destroy",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}();e.default=h},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},align:{string:o},rtl:{boolean:n,undefined:"undefined"},rollingMode:{follow:{boolean:n},offset:{number:s,undefined:"undefined"},__type__:{object:r}},verticalScroll:{boolean:n,undefined:"undefined"},horizontalScroll:{boolean:n,undefined:"undefined"},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},dataAttributes:{string:o,array:"array"},editable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},updateGroup:{boolean:n,undefined:"undefined"},updateTime:{boolean:n,undefined:"undefined"},overrideItems:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},__type__:{object:r}},moment:{function:"function"},groupOrder:{string:o,function:"function"},groupEditable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},order:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},groupOrderSwap:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},itemsAlwaysDraggable:{item:{boolean:n,undefined:"undefined"},range:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},limitSize:{boolean:n},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},margin:{axis:{number:s},item:{horizontal:{number:s,undefined:"undefined"},vertical:{number:s,undefined:"undefined"},__type__:{object:r,number:s}},__type__:{object:r,number:s}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},multiselectPerGroup:{boolean:n},onAdd:{function:"function"},onDropObjectOnItem:{function:"function"},onUpdate:{function:"function"},onMove:{function:"function"},onMoving:{function:"function"},onRemove:{function:"function"},onAddGroup:{function:"function"},onMoveGroup:{function:"function"},onRemoveGroup:{function:"function"},onInitialDrawComplete:{function:"function"},order:{function:"function"},orientation:{axis:{string:o,undefined:"undefined"},item:{string:o,undefined:"undefined"},__type__:{string:o,object:r}},selectable:{boolean:n},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},stack:{boolean:n},stackSubgroups:{boolean:n},snap:{function:"function",null:"null"},start:{date:"date",number:s,string:o,moment:"moment"},template:{function:"function"},groupTemplate:{function:"function"},visibleFrameTemplate:{string:o,function:"function"},showTooltips:{boolean:n},tooltip:{followMouse:{boolean:n},overflowMethod:{string:["cap","flip"]},__type__:{object:r}},tooltipOnItemUpdateTime:{template:{function:"function"},__type__:{boolean:n,object:r}},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},type:{string:o},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},__type__:{object:r}},h={global:{align:["center","left","right"],direction:!1,autoResize:!0,clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,stackSubgroups:!0,start:"",showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1,type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=a,e.configureOptions=h},function(t,e,i){function o(t,e){this.id=r.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=r.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=r.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(11),d=i(12),l=i(16),u=i(107),c=i(109),p=i(112),f=i(110),m=i(111),v=i(72);o.prototype=new l,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-line-graph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new p(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new p(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))<this.body.domProps.centerContainer.height&&(this.updateSVGheight=!0),r.selectiveDeepExtend(e,this.options,t),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),r.mergeOptions(this.options,t,"legend"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty("__ungrouped__")&&this.groups.__ungrouped__.setOptions(t)}this.dom.frame&&(this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0}))},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(r.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;r.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}},o.prototype.setGroups=function(t){var e,i=this;if(this.groupsData){r.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null;for(var o=0;o<e.length;o++)this._removeGroup(e[o])}if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var n=this.id;r.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}},o.prototype._onUpdate=function(t){this._updateAllGroupData(t)},o.prototype._onAdd=function(t){this._onUpdate(t)},o.prototype._onRemove=function(t){this._onUpdate(t)},o.prototype._onUpdateGroups=function(t){this._updateAllGroupData(null,t)},o.prototype._onAddGroups=function(t){this._onUpdateGroups(t)},o.prototype._onRemoveGroups=function(t){for(var e=0;e<t.length;e++)this._removeGroup(t[e]);this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})},o.prototype._removeGroup=function(t){this.groups.hasOwnProperty(t)&&("right"==this.groups[t].options.yAxisOrientation?(this.yAxisRight.removeGroup(t),this.legendRight.removeGroup(t),this.legendRight.redraw()):(this.yAxisLeft.removeGroup(t),this.legendLeft.removeGroup(t),this.legendLeft.redraw()),delete this.groups[t])},o.prototype._updateGroup=function(t,e){this.groups.hasOwnProperty(e)?(this.groups[e].update(t),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.updateGroup(e,this.groups[e]),this.legendRight.updateGroup(e,this.groups[e]),this.yAxisLeft.removeGroup(e),this.legendLeft.removeGroup(e)):(this.yAxisLeft.updateGroup(e,this.groups[e]),this.legendLeft.updateGroup(e,this.groups[e]),this.yAxisRight.removeGroup(e),this.legendRight.removeGroup(e))):(this.groups[e]=new c(t,e,this.options,this.groupsUsingDefaultStyles),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.addGroup(e,this.groups[e]),this.legendRight.addGroup(e,this.groups[e])):(this.yAxisLeft.addGroup(e,this.groups[e]),this.legendLeft.addGroup(e,this.groups[e]))),this.legendLeft.redraw(),this.legendRight.redraw()},o.prototype._updateAllGroupData=function(t,e){if(null!=this.itemsData){var i={},o=this.itemsData.get(),n=this.itemsData._fieldId,s={};t&&t.map(function(t){s[t]=t});for(var a={},h=0;h<o.length;h++){var d=o[h],l=d.group;null!==l&&void 0!==l||(l="__ungrouped__"),a.hasOwnProperty(l)?a[l]++:a[l]=1}var u={};if(!e&&t)for(l in this.groups)if(this.groups.hasOwnProperty(l)){v=this.groups[l];var c=v.getItems();i[l]=c.filter(function(t){return u[t[n]]=t[n],t[n]!==s[t[n]]});var p=a[l];a[l]-=i[l].length,i[l].length<p&&(i[l][p-1]={})}for(h=0;h<o.length;h++)if(d=o[h],l=d.group,null!==l&&void 0!==l||(l="__ungrouped__"),e||!t||d[n]===s[d[n]]||!u.hasOwnProperty(d[n])){i.hasOwnProperty(l)||(i[l]=new Array(a[l]));var f=r.bridgeObject(d);f.x=r.convert(d.x,"Date"),f.end=r.convert(d.end,"Date"),f.orginalY=d.y,f.y=Number(d.y),
+f[n]=d[n];var m=i[l].length-a[l]--;i[l][m]=f}for(l in this.groups)this.groups.hasOwnProperty(l)&&(i.hasOwnProperty(l)||(i[l]=new Array(0)));for(l in i)if(i.hasOwnProperty(l))if(0==i[l].length)this.groups.hasOwnProperty(l)&&this._removeGroup(l);else{var v=void 0;void 0!=this.groupsData&&(v=this.groupsData.get(l)),void 0==v&&(v={id:l,content:this.options.defaultGroup+l}),this._updateGroup(v,l),this.groups[l].setItems(i[l])}this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})}},o.prototype.redraw=function(){var t=!1;this.props.width=this.dom.frame.offsetWidth,this.props.height=this.body.domProps.centerContainer.height-this.body.domProps.border.top-this.body.domProps.border.bottom,t=this._isResized()||t;var e=this.body.range.end-this.body.range.start,i=e!=this.lastVisibleInterval;if(this.lastVisibleInterval=e,1==t&&(this.svg.style.width=r.option.asSize(3*this.props.width),this.svg.style.left=r.option.asSize(-this.props.width),-1==(this.options.height+"").indexOf("%")&&1!=this.updateSVGheightOnResize||(this.updateSVGheight=!0)),1==this.updateSVGheight?(this.options.graphHeight!=this.props.height+"px"&&(this.options.graphHeight=this.props.height+"px",this.svg.style.height=this.props.height+"px"),this.updateSVGheight=!1):this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",1==t||1==i||1==this.abortedGraphUpdate||1==this.forceGraphUpdate)t=this._updateGraph()||t,this.forceGraphUpdate=!1;else if(0!=this.lastStart){var o=this.body.range.start-this.lastStart,n=this.body.range.end-this.body.range.start;if(0!=this.props.width){var s=this.props.width/n,a=o*s;this.svg.style.left=-this.props.width-a+"px"}}return this.legendLeft.redraw(),this.legendRight.redraw(),t},o.prototype._getSortedGroupIds=function(){var t=[];for(var e in this.groups)if(this.groups.hasOwnProperty(e)){var i=this.groups[e];1!=i.visible||void 0!==this.options.groups.visibility[e]&&1!=this.options.groups.visibility[e]||t.push({id:e,zIndex:i.options.zIndex})}r.insertSort(t,function(t,e){var i=t.zIndex,o=e.zIndex;return void 0===i&&(i=0),void 0===o&&(o=0),i==o?0:i<o?-1:1});for(var o=new Array(t.length),n=0;n<t.length;n++)o[n]=t[n].id;return o},o.prototype._updateGraph=function(){if(a.prepareElements(this.svgElements),0!=this.props.width&&null!=this.itemsData){var t,e,i={},o=this.body.util.toGlobalTime(-this.body.domProps.root.width),n=this.body.util.toGlobalTime(2*this.body.domProps.root.width),s=this._getSortedGroupIds();if(s.length>0){var r={};for(this._getRelevantData(s,r,o,n),this._applySampling(s,r),e=0;e<s.length;e++)this._convertXcoordinates(r[s[e]]);if(this._getYRanges(s,r,i),1==this._updateYAxis(s,i))return a.cleanupElements(this.svgElements),this.abortedGraphUpdate=!0,!0;this.abortedGraphUpdate=!1;var h=void 0;for(e=0;e<s.length;e++)t=this.groups[s[e]],!0===this.options.stack&&"line"===this.options.style&&(void 0!=t.options.excludeFromStacking&&t.options.excludeFromStacking||(void 0!=h&&(this._stack(r[t.id],r[h.id]),1==t.options.shaded.enabled&&"group"!==t.options.shaded.orientation&&("top"==t.options.shaded.orientation&&"group"!==h.options.shaded.orientation?(h.options.shaded.orientation="group",h.options.shaded.groupId=t.id):(t.options.shaded.orientation="group",t.options.shaded.groupId=h.id))),h=t)),this._convertYcoordinates(r[s[e]],t);var d={};for(e=0;e<s.length;e++)if(t=this.groups[s[e]],"line"===t.options.style&&1==t.options.shaded.enabled){var l=r[s[e]];if(null==l||0==l.length)continue;if(d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(l,t)),"group"===t.options.shaded.orientation){var u=t.options.shaded.groupId;if(-1===s.indexOf(u)){console.log(t.id+": Unknown shading group target given:"+u);continue}d.hasOwnProperty(u)||(d[u]=m.calcPath(r[u],this.groups[u])),m.drawShading(d[s[e]],t,d[u],this.framework)}else m.drawShading(d[s[e]],t,void 0,this.framework)}for(f.draw(s,r,this.framework),e=0;e<s.length;e++)if(t=this.groups[s[e]],r[s[e]].length>0)switch(t.options.style){case"line":d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(r[s[e]],t)),m.draw(d[s[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(r[s[e]],t,this.framework)}}}return a.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;a<t.length;a++){s=void 0,r=void 0;for(var h=i;h<e.length;h++){if(e[h].x===t[a].x){s=e[h],r=e[h],i=h;break}if(e[h].x>t[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,t[a].y=0==o?t[a].orginalY+r.y:t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,s,a,h;if(t.length>0)for(s=0;s<t.length;s++){n=this.groups[t[s]];var d=n.getItems();if(1==n.options.sort){var l=function(t,e){return t.getTime()==e.getTime()?0:t<e?-1:1},u=Math.max(0,r.binarySearchValue(d,i,"x","before",l)),c=Math.min(d.length,r.binarySearchValue(d,o,"x","after",l)+1);c<=0&&(c=d.length);var p=new Array(c-u);for(a=u;a<c;a++)h=n.itemsData[a],p[a-u]=h;e[t[s]]=p}else e[t[s]]=n.itemsData}},o.prototype._applySampling=function(t,e){var i;if(t.length>0)for(var o=0;o<t.length;o++)if(i=this.groups[t[o]],1==i.options.sampling){var n=e[t[o]];if(n.length>0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l<r;l+=s){var u=Math.round(l/s);d[u]=n[l]}e[t[o]]=d.splice(0,Math.round(r/s))}}},o.prototype._getYRanges=function(t,e,i){var o,n,s,r,a=[],h=[];if(t.length>0){for(s=0;s<t.length;s++)o=e[t[s]],r=this.groups[t[s]].options,o.length>0&&(n=this.groups[t[s]],!0===r.stack&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));f.getStackedYRange(a,i,t,"__barStackLeft","left"),f.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var u=0;u<t.length;u++){var c=this.groups[t[u]];c&&"right"!=c.options.yAxisOrientation?(s=!0,a=1e9,d=-1e9):c&&c.options.yAxisOrientation&&(r=!0,h=1e9,l=-1e9)}for(u=0;u<t.length;u++)e.hasOwnProperty(t[u])&&!0!==e[t[u]].ignore&&(i=e[t[u]].min,o=e[t[u]].max,"right"!=e[t[u]].yAxisOrientation?(s=!0,a=a>i?i:a,d=d<o?o:d):(r=!0,h=h>i?i:h,l=l<o?o:l));1==s&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}n=this._toggleAxisVisiblity(s,this.yAxisLeft)||n,n=this._toggleAxisVisiblity(r,this.yAxisRight)||n,1==r&&1==s?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!s,this.yAxisRight.masterAxis=this.yAxisLeft,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,n=this.yAxisLeft.redraw()||n,n=this.yAxisRight.redraw()||n):n=this.yAxisRight.redraw()||n;var p=["__barStackLeft","__barStackRight","__lineStackLeft","__lineStackRight"];for(u=0;u<p.length;u++)-1!=t.indexOf(p[u])&&t.splice(t.indexOf(p[u]),1);return n},o.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},o.prototype._convertXcoordinates=function(t){for(var e=this.body.util.toScreen,i=0;i<t.length;i++)t[i].screen_x=e(t[i].x)+this.props.width,t[i].screen_y=t[i].y,void 0!=t[i].end?t[i].screen_end=e(t[i].end)+this.props.width:t[i].screen_end=void 0},o.prototype._convertYcoordinates=function(t,e){var i=this.yAxisLeft,o=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(i=this.yAxisRight);for(var n=0;n<t.length;n++)t[n].screen_y=Math.round(i.convertValue(t[n].y));e.setZeroPosition(Math.min(o,i.convertValue(0)))},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=r.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!1,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,left:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}},right:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}}},this.linegraphOptions=o,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.scale=void 0,this.range={start:0,end:0},this.options=r.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.getBoundingClientRect().height,this.hidden=!1,this.stepPixels=25,this.zeroCrossing=-1,this.amountOfSteps=-1,this.lineOffset=0,this.master=!0,this.masterAxis=null,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups};var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(16),d=i(108);o.prototype=new h,o.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},o.prototype.updateGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.amountOfGroups+=1),this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","left","right","alignZeros"];r.selectiveDeepExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),!0===e&&this.dom.frame&&(this.hide(),this.show())}},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},o.prototype._redrawGroupIcons=function(){a.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=11.5;t="left"===this.options.orientation?4:this.width-e-4;var o=(0,s.default)(this.groups);o.sort(function(t,e){return t<e?-1:1});for(var n=0;n<o.length;n++){var r=o[n];!0!==this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&!0!==this.linegraphOptions.visibility[r]||(this.groups[r].getLegend(e,15,this.framework,t,i),i+=19)}a.cleanupElements(this.svgElements),this.iconsRemoved=!1},o.prototype._cleanupIcons=function(){!1===this.iconsRemoved&&(a.prepareElements(this.svgElements),a.cleanupElements(this.svgElements),this.iconsRemoved=!0)},o.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"===this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},o.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},o.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},o.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(!0!==this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&!0!==this.linegraphOptions.visibility[i]||e++);if(0===this.amountOfGroups||0===e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=!0===this.options.visible?Number((""+this.options.width).replace("px","")):0;var o=this.props,n=this.dom.frame;n.className="vis-data-axis",this._calculateCharSize();var s=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;o.minorLabelHeight=r?o.minorCharHeight:0,o.majorLabelHeight=a?o.majorCharHeight:0,o.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,o.minorLineHeight=1,o.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,o.majorLineHeight=1,"left"===s?(n.style.top="0",n.style.left="0",n.style.bottom="",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.left.width,this.props.height=this.body.domProps.left.height):(n.style.top="",n.style.bottom="0",n.style.left="0",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.right.width,this.props.height=this.body.domProps.right.height),t=this._redrawLabels(),t=this._isResized()||t,!0===this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(s)}return t},o.prototype._redrawLabels=function(){var t=this,e=!1;a.prepareElements(this.DOMelements.lines),a.prepareElements(this.DOMelements.labels);var i=this.options.orientation,o=void 0!=this.options[i].range?this.options[i].range:{},n=!0;void 0!=o.max&&(this.range.end=o.max,n=!1);var s=!0;void 0!=o.min&&(this.range.start=o.min,s=!1),this.scale=new d(this.range.start,this.range.end,s,n,this.dom.frame.offsetHeight,this.props.majorCharHeight,this.options.alignZeros,this.options[i].format),!1===this.master&&void 0!=this.masterAxis&&this.scale.followScale(this.masterAxis.scale),this.maxLabelSize=0,this.scale.getLines().forEach(function(e){var o=e.y,n=e.major;t.options.showMinorLabels&&!1===n&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-minor",t.props.minorCharHeight),n&&o>=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),!0===t.master&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var r=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(r=this.props.titleCharHeight);var h=!0===this.options.icons?Math.max(this.options.iconWidth,r)+this.options.labelOffsetX+15:r+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-h&&!0===this.options.visible?(this.width=this.maxLabelSize+h,this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSize<this.width-h&&!0===this.options.visible&&this.width>this.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+h),this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var s=a.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize<e.length*r&&(this.maxLabelSize=e.length*r)},o.prototype._redrawLine=function(t,e,i,o,n){if(!0===this.master){var s=a.getDOMElement("div",this.DOMelements.lines,this.dom.lineContainer);s.className=i,s.innerHTML="","left"===e?s.style.left=this.width-o+"px":s.style.right=this.width-o+"px",s.style.width=n+"px",s.style.top=t+"px"}},o.prototype._redrawTitle=function(t){if(a.prepareElements(this.DOMelements.title),void 0!==this.options[t].title&&void 0!==this.options[t].title.text){var e=a.getDOMElement("div",this.DOMelements.title,this.dom.frame);e.className="vis-y-axis vis-title vis-"+t,e.innerHTML=this.options[t].title.text,void 0!==this.options[t].title.style&&r.addCssText(e,this.options[t].title.style),"left"===t?e.style.left=this.props.titleCharHeight+"px":e.style.right=this.props.titleCharHeight+"px",e.style.width=this.height+"px"}a.cleanupElements(this.DOMelements.title)},o.prototype._calculateCharSize=function(){if(!("minorCharHeight"in this.props)){var t=document.createTextNode("0"),e=document.createElement("div");e.className="vis-y-axis vis-minor vis-measure",e.appendChild(t),this.dom.frame.appendChild(e),this.props.minorCharHeight=e.clientHeight,this.props.minorCharWidth=e.clientWidth,this.dom.frame.removeChild(e)}if(!("majorCharHeight"in this.props)){var i=document.createTextNode("0"),o=document.createElement("div");o.className="vis-y-axis vis-major vis-measure",o.appendChild(i),this.dom.frame.appendChild(o),this.props.majorCharHeight=o.clientHeight,this.props.majorCharWidth=o.clientWidth,this.dom.frame.removeChild(o)}if(!("titleCharHeight"in this.props)){var n=document.createTextNode("0"),s=document.createElement("div");s.className="vis-y-axis vis-title vis-measure",s.appendChild(n),this.dom.frame.appendChild(s),this.props.titleCharHeight=s.clientHeight,this.props.titleCharWidth=s.clientWidth,this.dom.frame.removeChild(s)}},t.exports=o},function(t,e,i){function o(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>h.magnitudefactor*h.minorSteps[h.minorStepIdx]*.5?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}o.prototype.setCharHeight=function(t){this.majorCharHeight=t},o.prototype.setHeight=function(t){this.containerHeight=t},o.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r<this.minorSteps.length;r++){if(this.magnitudefactor*this.minorSteps[r]>=e){n=!0,this.minorStepIdx=r;break}}if(!0===n)break}},o.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])==0},o.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},o.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},o.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},o.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},o.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdx<this.minorStepIdx?(this.minorStepIdx=1,2==e?s():(s(),s())):(this.minorStepIdx=2,1==e?r():(r(),r())));for(var a=t.convertValue(0),h=t.getStep()*t.scale,d=!1,l=0;!d&&l++<5;){this.scale=h/(this.minorSteps[this.minorStepIdx]*this.magnitudefactor);var u=this.containerHeight/this.scale;this._start=i,this._end=this._start+u;var c=this._end*this.scale,p=this.magnitudefactor*this.majorSteps[this.minorStepIdx],f=this.getFirstMajor()-t.getFirstMajor();if(this.zeroAlign){var m=a-c;this._end+=m/this.scale,this._start=this._end-u}else this.autoScaleStart?(this._start-=f/this.scale,this._end=this._start+u):(this._start+=p-f/this.scale,this._end=this._start+u);if(!this.autoScaleEnd&&this._end>o+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start<i-1e-5){if(!(this.zeroAlign&&i>=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&u<o-i?(s(),d=!1):d=!0}}},o.prototype.convertValue=function(t){return this.containerHeight-(t-this._start)*this.scale},o.prototype.screenToValue=function(t){return(this.containerHeight-t)/this.scale+this._start},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=e;var n=["sampling","style","sort","yAxisOrientation","barChart","drawPoints","shaded","interpolation","zIndex","excludeFromStacking","excludeFromLegend"];this.options=r.selectiveBridgeObject(n,i),this.usingDefaultStyle=void 0===t.className,this.groupsUsingDefaultStyles=o,this.zeroPosition=0,this.update(t),1==this.usingDefaultStyle&&(this.groupsUsingDefaultStyles[0]+=1),this.itemsData=[],this.visible=void 0===t.visible||t.visible}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(110),h=i(111),d=i(72);o.prototype.setItems=function(t){null!=t?(this.itemsData=t,1==this.options.sort&&r.insertSort(this.itemsData,function(t,e){return t.x>e.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];r.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){i={svg:document.createElementNS("http://www.w3.org/2000/svg","svg"),svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":h.drawIcon(this,o,n,t,e,i);break;case"points":case"point":d.drawIcon(this,o,n,t,e,i);break;case"bar":a.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;o<t.length;o++)e=e>t[o].y?t[o].y:e,i=i<t[o].y?t[o].y:i;return{min:e,max:i,yAxisOrientation:this.options.yAxisOrientation}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(14),s=i(72);o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,h=n.getSVGElement("rect",r.svgElements,r.svg);h.setAttributeNS(null,"x",e),h.setAttributeNS(null,"y",i-a),h.setAttributeNS(null,"width",o),h.setAttributeNS(null,"height",2*a),h.setAttributeNS(null,"class","vis-outline");var d=Math.round(.3*o),l=t.options.barChart.width,u=l/d,c=Math.round(.4*s),p=Math.round(.75*s),f=Math.round((o-2*d)/3);if(n.drawBar(e+.5*d+f,i+a-c-1,d,c,t.className+" vis-bar",r.svgElements,r.svg,t.style),n.drawBar(e+1.5*d+f+2,i+a-p-1,d,p,t.className+" vis-bar",r.svgElements,r.svg,t.style),1==t.options.drawPoints.enabled){var m={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size/u,className:t.className};n.drawPoint(e+.5*d+f,i+a-c-1,m,r.svgElements,r.svg),n.drawPoint(e+1.5*d+f+2,i+a-p-1,m,r.svgElements,r.svg)}},o.draw=function(t,e,i){var r,a,h,d,l,u,c=[],p={},f=0;for(l=0;l<t.length;l++)if(d=i.groups[t[l]],"bar"===d.options.style&&!0===d.visible&&(void 0===i.options.groups.visibility[t[l]]||!0===i.options.groups.visibility[t[l]]))for(u=0;u<e[t[l]].length;u++)c.push({screen_x:e[t[l]][u].screen_x,screen_end:e[t[l]][u].screen_end,screen_y:e[t[l]][u].screen_y,x:e[t[l]][u].x,end:e[t[l]][u].end,y:e[t[l]][u].y,groupId:t[l],label:e[t[l]][u].label}),f+=1;if(0!==f)for(c.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x}),o._getDataIntersections(p,c),l=0;l<c.length;l++){d=i.groups[c[l].groupId];var m=void 0!=d.options.barChart.minWidth?d.options.barChart.minWidth:.1*d.options.barChart.width;a=c[l].screen_x;var v=0;if(void 0===p[a])l+1<c.length&&(r=Math.abs(c[l+1].screen_x-a)),h=o._getSafeDrawData(r,d,m);else{var g=l+(p[a].amount-p[a].resolved);g<c.length&&(r=Math.abs(c[g].screen_x-a)),h=o._getSafeDrawData(r,d,m),p[a].resolved+=1,!0===d.options.stack&&!0!==d.options.excludeFromStacking?c[l].screen_y<d.zeroPosition?(v=p[a].accumulatedNegative,p[a].accumulatedNegative+=d.zeroPosition-c[l].screen_y):(v=p[a].accumulatedPositive,p[a].accumulatedPositive+=d.zeroPosition-c[l].screen_y):!0===d.options.barChart.sideBySide&&(h.width=h.width/p[a].amount,h.offset+=p[a].resolved*h.width-.5*h.width*(p[a].amount+1))}var y=h.width,b=c[l].screen_x;if(void 0!=c[l].screen_end?(y=c[l].screen_end-c[l].screen_x,b+=.5*y):b+=h.offset,n.drawBar(b,c[l].screen_y-v,y,d.zeroPosition-c[l].screen_y,d.className+" vis-bar",i.svgElements,i.svg,d.style),!0===d.options.drawPoints.enabled){var _={screen_x:c[l].screen_x,screen_y:c[l].screen_y-v,x:c[l].x,y:c[l].y,groupId:c[l].groupId,label:c[l].label};s.draw([_],d,i,h.offset)}}},o._getDataIntersections=function(t,e){for(var i,o=0;o<e.length;o++)o+1<e.length&&(i=Math.abs(e[o+1].screen_x-e[o].screen_x)),o>0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t<e.options.barChart.width&&t>0?(o=t<i?i:t,n=0,"left"===e.options.barChart.align?n-=.5*t:"right"===e.options.barChart.align&&(n+=.5*t)):(o=e.options.barChart.width,n=0,"left"===e.options.barChart.align?n-=.5*e.options.barChart.width:"right"===e.options.barChart.align&&(n+=.5*e.options.barChart.width)),{width:o,offset:n}},o.getStackedYRange=function(t,e,i,n,s){if(t.length>0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x});var r={};o._getDataIntersections(r,t),e[n]=o._getStackedYRange(r,t),e[n].yAxisOrientation=s,i.push(n)}},o._getStackedYRange=function(t,e){for(var i,o=e[0].screen_y,n=e[0].screen_y,s=0;s<e.length;s++)i=e[s].screen_x,void 0===t[i]?(o=o>e[s].screen_y?e[s].screen_y:o,n=n<e[s].screen_y?e[s].screen_y:n):e[s].screen_y<0?t[i].accumulatedNegative+=e[s].screen_y:t[i].accumulatedPositive+=e[s].screen_y;for(var r in t)t.hasOwnProperty(r)&&(o=o>t[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n<t[r].accumulatedNegative?t[r].accumulatedNegative:n,n=n<t[r].accumulatedPositive?t[r].accumulatedPositive:n);return{min:o,max:n}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(14);o.calcPath=function(t,e){if(null!=t&&t.length>0){return 1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o,n=e;if(i)for(o=t.length-2;o>0;o--)n+=t[o][0]+","+t[o][1]+" ";else for(o=1;o<t.length;o++)n+=t[o][0]+","+t[o][1]+" ";return n},o._catmullRomUniform=function(t){var e,i,o,n,s,r,a=[];a.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var h=t.length,d=0;d<h-1;d++)e=0==d?t[0]:t[d-1],i=t[d],o=t[d+1],n=d+2<h?t[d+2]:o,s={screen_x:(-e.screen_x+6*i.screen_x+o.screen_x)*(1/6),screen_y:(-e.screen_y+6*i.screen_y+o.screen_y)*(1/6)},r={screen_x:(i.screen_x+6*o.screen_x-n.screen_x)*(1/6),screen_y:(i.screen_y+6*o.screen_y-n.screen_y)*(1/6)},a.push([s.screen_x,s.screen_y]),a.push([r.screen_x,r.screen_y]),a.push([o.screen_x,o.screen_y]);return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);var o,n,s,r,a,h,d,l,u,c,p,f,m,v,g,y,b,_,w,x=[];x.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var k=t.length,S=0;S<k-1;S++)o=0==S?t[0]:t[S-1],n=t[S],s=t[S+1],r=S+2<k?t[S+2]:s,
+d=Math.sqrt(Math.pow(o.screen_x-n.screen_x,2)+Math.pow(o.screen_y-n.screen_y,2)),l=Math.sqrt(Math.pow(n.screen_x-s.screen_x,2)+Math.pow(n.screen_y-s.screen_y,2)),u=Math.sqrt(Math.pow(s.screen_x-r.screen_x,2)+Math.pow(s.screen_y-r.screen_y,2)),v=Math.pow(u,i),y=Math.pow(u,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),w=Math.pow(d,i),_=Math.pow(d,2*i),c=2*_+3*w*g+b,p=2*y+3*v*g+b,f=3*w*(w+g),f>0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+c*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+c*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i<t.length;i++)e.push([t[i].screen_x,t[i].screen_y]);return e},t.exports=o},function(t,e,i){function o(t,e,i,o){this.body=t,this.defaultOptions={enabled:!1,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},this.side=i,this.options=r.extend({},this.defaultOptions),this.linegraphOptions=o,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.setOptions(e)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(16);o.prototype=new h,o.prototype.clear=function(){this.groups={},this.amountOfGroups=0},o.prototype.addGroup=function(t,e){1!=e.options.excludeFromLegend&&(this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1)},o.prototype.updateGroup=function(t,e){this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="vis-legend-text",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];r.selectiveDeepExtend(e,this.options,t)},o.prototype.redraw=function(){var t=0,e=(0,s.default)(this.groups);e.sort(function(t,e){return t<e?-1:1});for(var i=0;i<e.length;i++){var o=e[i];1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||t++}if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var n=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+n+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var r="";for(i=0;i<e.length;i++)o=e[i],1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||(r+=this.groups[o].content+"<br />");this.dom.textArea.innerHTML=r,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,s.default)(this.groups);t.sort(function(t,e){return t<e?-1:1}),a.resetElements(this.svgElements);var e=window.getComputedStyle(this.dom.frame).paddingTop,i=Number(e.replace("px","")),o=i,n=this.options.iconSize,r=.75*this.options.iconSize,h=i+.5*r+3;this.svg.style.width=n+5+i+"px";for(var d=0;d<t.length;d++){var l=t[d];1!=this.groups[l].visible||void 0!==this.linegraphOptions.visibility[l]&&1!=this.linegraphOptions.visibility[l]||(this.groups[l].getLegend(n,r,this.framework,o,h),h+=r+this.options.iconSpacing)}}},t.exports=o},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},yAxisOrientation:{string:["left","right"]},defaultGroup:{string:o},sort:{boolean:n},sampling:{boolean:n},stack:{boolean:n},graphHeight:{string:o,number:s},shaded:{enabled:{boolean:n},orientation:{string:["bottom","top","zero","group"]},groupId:{object:r},__type__:{boolean:n,object:r}},style:{string:["line","bar","points"]},barChart:{width:{number:s},minWidth:{number:s},sideBySide:{boolean:n},align:{string:["left","center","right"]},__type__:{object:r}},interpolation:{enabled:{boolean:n},parametrization:{string:["centripetal","chordal","uniform"]},alpha:{number:s},__type__:{object:r,boolean:n}},drawPoints:{enabled:{boolean:n},onRender:{function:"function"},size:{number:s},style:{string:["square","circle"]},__type__:{object:r,boolean:n,function:"function"}},dataAxis:{showMinorLabels:{boolean:n},showMajorLabels:{boolean:n},icons:{boolean:n},width:{string:o,number:s},visible:{boolean:n},alignZeros:{boolean:n},left:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},right:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},__type__:{object:r}},legend:{enabled:{boolean:n},icons:{boolean:n},left:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},right:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},__type__:{object:r,boolean:n}},groups:{visibility:{any:"any"},__type__:{object:r}},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},moment:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},orientation:{string:o},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},start:{date:"date",number:s,string:o,moment:"moment"},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},zIndex:{number:s},__type__:{object:r}},h={global:{sort:!0,sampling:!0,stack:!1,shaded:{enabled:!1,orientation:["zero","top","bottom","group"]},style:["line","bar","points"],barChart:{width:[50,5,100,5],minWidth:[50,5,100,5],sideBySide:!1,align:["left","center","right"]},interpolation:{enabled:!0,parametrization:["centripetal","chordal","uniform"]},drawPoints:{enabled:!0,size:[6,2,30,1],style:["square","circle"]},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:[40,0,200,1],visible:!0,alignZeros:!0,left:{title:{text:"",style:""}},right:{title:{text:"",style:""}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]},right:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]}},autoResize:!0,clickToUse:!1,end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},height:"",locale:"",max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!0,orientation:["both","bottom","top"],showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,start:"",width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1],zIndex:0}};e.allOptions=a,e.configureOptions=h},function(t,e,i){function o(t){return R=t,f()}function n(){A=0,z=R.charAt(0)}function s(){A++,z=R.charAt(A)}function r(){return R.charAt(A+1)}function a(t){return B.test(t)}function h(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function d(t,e,i){for(var o=e.split("."),n=t;o.length;){var s=o.shift();o.length?(n[s]||(n[s]={}),n=n[s]):n[s]=i}}function l(t,e){for(var i,o,n=null,s=[t],r=t;r.parent;)s.push(r.parent),r=r.parent;if(r.nodes)for(i=0,o=r.nodes.length;i<o;i++)if(e.id===r.nodes[i].id){n=r.nodes[i];break}for(n||(n={id:e.id},t.node&&(n.attr=h(n.attr,t.node))),i=s.length-1;i>=0;i--){var a=s[i];a.nodes||(a.nodes=[]),-1===a.nodes.indexOf(n)&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function u(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function c(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(F=I.NULL,L="";" "===z||"\t"===z||"\n"===z||"\r"===z;)s();do{var t=!1;if("#"===z){for(var e=A-1;" "===R.charAt(e)||"\t"===R.charAt(e);)e--;if("\n"===R.charAt(e)||""===R.charAt(e)){for(;""!=z&&"\n"!=z;)s();t=!0}}if("/"===z&&"/"===r()){for(;""!=z&&"\n"!=z;)s();t=!0}if("/"===z&&"*"===r()){for(;""!=z;){if("*"===z&&"/"===r()){s(),s();break}s()}t=!0}for(;" "===z||"\t"===z||"\n"===z||"\r"===z;)s()}while(t);if(""===z)return void(F=I.DELIMITER);var i=z+r();if(N[i])return F=I.DELIMITER,L=i,s(),void s();if(N[z])return F=I.DELIMITER,L=z,void s();if(a(z)||"-"===z){for(L+=z,s();a(z);)L+=z,s();return"false"===L?L=!1:"true"===L?L=!0:isNaN(Number(L))||(L=Number(L)),void(F=I.IDENTIFIER)}if('"'===z){for(s();""!=z&&('"'!=z||'"'===z&&'"'===r());)'"'===z?(L+=z,s()):"\\"===z&&"n"===r()?(L+="\n",s()):L+=z,s();if('"'!=z)throw x('End of string " expected');return s(),void(F=I.IDENTIFIER)}for(F=I.UNKNOWN;""!=z;)L+=z,s();throw new SyntaxError('Syntax error in part "'+k(L,30)+'"')}function f(){var t={};if(n(),p(),"strict"===L&&(t.strict=!0,p()),"graph"!==L&&"digraph"!==L||(t.type=L,p()),F===I.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)v(t),";"===L&&p()}function v(t){var e=g(t);if(e)return void _(t,e);if(!y(t)){if(F!=I.IDENTIFIER)throw x("Identifier expected");var i=L;if(p(),"="===L){if(p(),F!=I.IDENTIFIER)throw x("Identifier expected");t[i]=L,p()}else b(t,i)}}function g(t){var e=null;if("subgraph"===L&&(e={},e.type="subgraph",p(),F===I.IDENTIFIER&&(e.id=L,p())),"{"===L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function y(t){return"node"===L?(p(),t.node=w(),"node"):"edge"===L?(p(),t.edge=w(),"edge"):"graph"===L?(p(),t.graph=w(),"graph"):null}function b(t,e){var i={id:e},o=w();o&&(i.attr=o),l(t,i),_(t,e)}function _(t,e){for(;"->"===L||"--"===L;){var i,o=L;p();var n=g(t);if(n)i=n;else{if(F!=I.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,l(t,{id:i}),p()}u(t,c(t,e,i,o,w())),e=i}}function w(){for(var t=null,e={dashed:!0,solid:!1,dotted:[1,5]};"["===L;){for(p(),t={};""!==L&&"]"!=L;){if(F!=I.IDENTIFIER)throw x("Attribute name expected");var i=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),F!=I.IDENTIFIER)throw x("Attribute value expected");var o=L;"style"===i&&(o=e[o]),d(t,i,o),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+k(L,30)+'" (char '+A+")")}function k(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r<o.length;r++){var a=o[r];a in s||(s[a]={}),s=s[a]}return s[n]=i,t}function M(t,e){var i={};for(var o in t)if(t.hasOwnProperty(o)){var n=e[o];Array.isArray(n)?n.forEach(function(e){D(i,e,t[o])}):"string"==typeof n?D(i,n,t[o]):D(i,o,t[o])}return i}function C(t){var e=o(t),i={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};h(e,M(t.attr,T)),e.image&&(e.shape="image"),i.nodes.push(e)}),e.edges){var n=function(t){var e={from:t.from,to:t.to};return h(e,M(t.attr,P)),e.arrows="->"===t.type?"to":void 0,e};e.edges.forEach(function(t){var e,o;e=t.from instanceof Object?t.from.nodes:{id:t.from},o=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=n(t);i.edges.push(e)}),S(e,o,function(e,o){var s=c(i,e.id,o.id,t.type,t.attr),r=n(s);i.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=n(t);i.edges.push(e)})})}return e.attr&&(i.options=e.attr),i}var O=i(29),E=function(t){return t&&t.__esModule?t:{default:t}}(O),T={fontsize:"font.size",fontcolor:"font.color",labelfontcolor:"font.color",fontname:"font.face",color:["color.border","color.background"],fillcolor:"color.background",tooltip:"title",labeltooltip:"title"},P=(0,E.default)(T);P.color="color.color",P.style="dashes";var I={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},N={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},R="",A=0,z="",L="",F=I.NULL,B=/[a-zA-Z_0-9.:#]/;e.parseDOT=o,e.DOTToGraph=C},function(t,e,i){function o(t,e){var i=[],o=[],n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==e&&(void 0!==e.fixed&&(n.nodes.fixed=e.fixed),void 0!==e.parseColor&&(n.nodes.parseColor=e.parseColor),void 0!==e.inheritColor&&(n.edges.inheritColor=e.inheritColor));for(var s=t.edges,r=t.nodes,a=0;a<s.length;a++){var h={},d=s[a];h.id=d.id,h.from=d.source,h.to=d.target,h.attributes=d.attributes,h.label=d.label,h.title=void 0!==d.attributes?d.attributes.title:void 0,"Directed"===d.type&&(h.arrows="to"),d.color&&!1===n.inheritColor&&(h.color=d.color),i.push(h)}for(var l=0;l<r.length;l++){var u={},c=r[l];u.id=c.id,u.attributes=c.attributes,u.x=c.x,u.y=c.y,u.label=c.label,u.title=void 0!==c.attributes?c.attributes.title:c.title,!0===n.nodes.parseColor?u.color=c.color:u.color=void 0!==c.color?{background:c.color,border:c.color,highlight:{background:c.color,border:c.color},hover:{background:c.color,border:c.color}}:void 0,u.size=c.size,u.fixed=n.nodes.fixed&&void 0!==c.x&&void 0!==c.y,o.push(u)}return{nodes:o,edges:i}}e.parseGephi=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(185),d=o(h),l=function(){function t(e){(0,s.default)(this,t),this.images={},this.imageBroken={},this.callback=e}return(0,a.default)(t,[{key:"_tryloadBrokenUrl",value:function(t,e,i){if(void 0!==t&&void 0!==i){if(void 0===e)return void console.warn("No broken url image defined");i.onerror=function(){console.error("Could not load brokenImage:",e)},i.image.src=e}}},{key:"_redrawWithImage",value:function(t){this.callback&&this.callback(t)}},{key:"load",value:function(t,e){var i=this,o=this.images[t];if(o)return o;var n=new d.default;return this.images[t]=n,n.image.onload=function(){i._fixImageCoordinates(n.image),n.init(),i._redrawWithImage(n)},n.image.onerror=function(){console.error("Could not load image:",t),i._tryloadBrokenUrl(t,e,n)},n.image.src=t,n}},{key:"_fixImageCoordinates",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(48).default,f=i(191).default,m=["bold","ital","boldital","mono"],v=function(){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,d.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),p.isValidLabel(t.label)?this.labelDirty=!0:t.label="",void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"===(0,a.default)(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:"initFontOptions",value:function(e){var i=this;if(c.forEach(m,function(t){i.fontOptions[t]={}}),t.parseFontString(this.fontOptions,e))return void(this.fontOptions.vadjust=0);c.forEach(e,function(t,e){void 0!==t&&null!==t&&"object"!==(void 0===t?"undefined":(0,a.default)(t))&&(i.fontOptions[e]=t)})}},{key:"constrain",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=c.topMost(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"===(void 0===i?"undefined":(0,a.default)(i))){var o=c.topMost(t,["widthConstraint","maximum"]);"number"==typeof o&&(e.maxWdt=Number(o));var n=c.topMost(t,["widthConstraint","minimum"]);"number"==typeof n&&(e.minWdt=Number(n))}var s=c.topMost(t,"heightConstraint");if("number"==typeof s)e.minHgt=Number(s);else if("object"===(void 0===s?"undefined":(0,a.default)(s))){var r=c.topMost(t,["heightConstraint","minimum"]);"number"==typeof r&&(e.minHgt=Number(r));var h=c.topMost(t,["heightConstraint","valign"]);"string"==typeof h&&("top"!==h&&"bottom"!==h||(e.valign=h))}return e}},{key:"update",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),c.deepExtend(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=p.choosify("label",e)}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:"addFontToPile",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:"getBasicOptions",value:function(e){for(var i={},o=0;o<e.length;++o){var n=e[o],s={};t.parseFontString(s,n)&&(n=s),c.forEach(n,function(t,e){void 0!==t&&(i.hasOwnProperty(e)||(-1!==m.indexOf(e)?i[e]={}:i[e]=t))})}return i}},{key:"getFontOption",value:function(e,i,o){for(var n=void 0,s=0;s<e.length;++s){var r=e[s];if(r.hasOwnProperty(i)){if(void 0===(n=r[i])||null===n)continue;var a={};if(t.parseFontString(a,n)&&(n=a),n.hasOwnProperty(o))return n[o]}}if(this.fontOptions.hasOwnProperty(o))return this.fontOptions[o];throw new Error("Did not find value for multi-font for property: '"+o+"'")}},{key:"getFontOptions",value:function(t,e){for(var i={},o=["color","size","face","mod","vadjust"],n=0;n<o.length;++n){var s=o[n];i[s]=this.getFontOption(t,e,s)}return i}},{key:"propagateFonts",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var o=0;o<m.length;++o)!function(t){var o=m[t],n=e.fontOptions[o],s=e.getFontOptions(i,o);c.forEach(s,function(t,e){n[e]=t}),n.size=Number(n.size),n.vadjust=Number(n.vadjust)}(o)}},{key:"draw",value:function(t,e,i,o,n){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r<this.elementOptions.scaling.label.drawThreshold-1||(r>=this.elementOptions.scaling.label.maxVisible&&(r=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,o,n,e,i,s),this._drawBackground(t),this._drawText(t,e,this.size.yLine,s,r))}}},{key:"_drawBackground",value:function(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:"_drawText",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",n=arguments[4],r=this._setAlignment(t,e,i,o),a=(0,s.default)(r,2);e=a[0],i=a[1],t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var h=0;h<this.lineCount;h++){var d=this.lines[h];if(d&&d.blocks){var l=0;this.isEdgeLabel||"center"===this.fontOptions.align?l+=(this.size.width-d.width)/2:"right"===this.fontOptions.align&&(l+=this.size.width-d.width);for(var u=0;u<d.blocks.length;u++){var c=d.blocks[u];t.font=c.font;var p=this._getColor(c.color,n,c.strokeColor),f=(0,s.default)(p,2),m=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin="round"),t.fillStyle=m,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=d.height}}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=c.overrideOpacity(o,s),n=c.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(t,e,i,o){var n=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},s={color:n(this.fontOptions,o,"color"),size:n(this.fontOptions,o,"size"),face:n(this.fontOptions,o,"face"),mod:n(this.fontOptions,o,"mod"),vadjust:n(this.fontOptions,o,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===o&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?s.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(s,this.elementOptions.id,e,i));var r="";return void 0!==s.mod&&""!==s.mod&&(r+=s.mod+" "),r+=s.size+"px "+s.face,t.font=r.replace(/"/g,""),s.font=t.font,s.height=s.size,s}},{key:"differentState",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:"_processLabelText",value:function(t,e,i,o){return new f(t,this,e,i).process(o)}},{key:"_processLabel",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var o=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&o.width<this.fontOptions.minWdt&&(o.width=this.fontOptions.minWdt),this.size.labelHeight=o.height,this.fontOptions.minHgt>0&&o.height<this.fontOptions.minHgt&&(o.height=this.fontOptions.minHgt),this.lines=o.lines,this.lineCount=o.lines.length,this.size.width=o.width,this.size.height=o.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:"visible",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:"parseFontString",value:function(t,e){if(!e||"string"!=typeof e)return!1;var i=e.split(" ");return t.size=i[0].replace("px",""),t.face=i[1],t.color=i[2],!0}}]),t}();e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(2),u=i(119).default,c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.options={},this.setOptions(e),this.colorDirty=!0,this.color={},this.selectionWidth=2,this.hoverWidth=1.5,this.fromPoint=this.from,this.toPoint=this.to}return(0,d.default)(t,[{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to]}},{key:"cleanup",value:function(){return!1}},{key:"setOptions",value:function(t){this.options=t,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.id=this.options.id}},{key:"drawLine",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,n):this._drawLine(t,e,n)}},{key:"_drawLine",value:function(t,e,i,o,n){if(this.from!=this.to)this._line(t,e,i,o,n);else{var r=this._getCircleData(t),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2];this._circle(t,e,h,d,l)}}},{key:"_drawDashedLine",value:function(t,e,i,o,n){t.lineCap="round";var r=[5,5];if(!0===Array.isArray(e.dashes)&&(r=e.dashes),void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var a=this._getCircleData(t),h=(0,s.default)(a,3),d=h[0],l=h[1],u=h[2];this._circle(t,e,d,l,u)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),p=(0,s.default)(c,3),f=p[0],m=p[1],v=p[2];this._circle(t,e,f,m,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:"findBorderPosition",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:"findBorderPositions",value:function(t){var e={},i={};if(this.from!=this.to)e=this._findBorderPosition(this.from,t),i=this._findBorderPosition(this.to,t);else{var o=this._getCircleData(t).slice(0,2),n=(0,s.default)(o,2),r=n[0],a=n[1];e=this._findBorderPositionCircle(this.from,t,{x:r,y:a,low:.25,high:.6,direction:-1}),i=this._findBorderPositionCircle(this.from,t,{x:r,y:a,low:.6,high:.8,direction:1})}return{from:e,to:i}}},{key:"_getCircleData",value:function(t){var e=void 0,i=void 0,o=this.from,n=this.options.selfReferenceSize;return void 0!==t&&void 0===o.shape.width&&o.shape.resize(t),o.shape.width>o.shape.height?(e=o.x+.5*o.shape.width,i=o.y-n):(e=o.x+n,i=o.y-.5*o.shape.height),[e,i,n]}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){for(var o=i.x,n=i.y,s=i.low,r=i.high,a=i.direction,h=0,d=this.options.selfReferenceSize,l=void 0,u=void 0,c=void 0,p=void 0,f=void 0,m=.5*(s+r);s<=r&&h<10&&(m=.5*(s+r),l=this._pointOnCircle(o,n,d,m),u=Math.atan2(t.y-l.y,t.x-l.x),c=t.distanceToBorder(e,u),p=Math.sqrt(Math.pow(l.x-t.x,2)+Math.pow(l.y-t.y,2)),f=c-p,!(Math.abs(f)<.05));)f>0?a>0?s=m:r=m:a>0?r=m:s=m,h++;return l.t=m,l}},{key:"getLineWidth",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this.body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(t,e,i,o){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){var n=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,!1===this.from.selected&&!1===this.to.selected?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?r=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(s=this.from.options.color.border),n.addColorStop(0,s),n.addColorStop(1,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle",
+value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,h){var d=0;if(this.from!=this.to)d=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2],m=c-n,v=p-r;d=Math.abs(Math.sqrt(m*m+v*v)-f)}return d}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,h=r*r+a*a,d=((n-t)*r+(s-e)*a)/h;d>1?d=1:d<0&&(d=0);var l=t+d*r,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=r.width;if("from"===e?(d=this.from,l=this.to,u=.1,c=r.fromArrowScale,p=r.fromArrowType):"to"===e?(d=this.to,l=this.from,u=-.1,c=r.toArrowScale,p=r.toArrowType):(d=this.to,l=this.from,c=r.middleArrowScale,p=r.middleArrowType),d!=l)if("middle"!==e)if(!0===this.options.smooth.enabled){h=this.findBorderPosition(d,t,{via:i});var m=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);a=Math.atan2(h.y-m.y,h.x-m.x)}else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.5,i);else{var v=this._getCircleData(t),g=(0,s.default)(v,3),y=g[0],b=g[1],_=g[2];"from"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),a=-2*h.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),a=-2*h.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(h=this._pointOnCircle(y,b,_,.175),a=3.9269908169872414)}"middle"===e&&c<0&&(f*=-1);var w=15*c+3*f;return{point:h,core:{x:h.x-.9*w*Math.cos(a),y:h.y-.9*w*Math.sin(a)},angle:a,length:w,type:p}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,u.draw(t,n),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(4),a=o(r),h=i(5),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"transform",value:function(t,e){t instanceof Array||(t=[t]);for(var i=e.point.x,o=e.point.y,n=e.angle,s=e.length,r=0;r<t.length;++r){var a=t[r],h=a.x*Math.cos(n)-a.y*Math.sin(n),d=a.x*Math.sin(n)+a.y*Math.cos(n);a.x=i+s*h,a.y=o+s*d}}},{key:"drawPath",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),m=function(t){function e(){return(0,u.default)(this,e),(0,a.default)(this,(e.__proto__||(0,s.default)(e)).apply(this,arguments))}return(0,d.default)(e,t),(0,p.default)(e,null,[{key:"draw",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];f.transform(i,e),f.drawPath(t,i)}}]),e}(f),v=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i={x:-.4,y:0};f.transform(i,e),t.circle(i.x,i.y,.4*e.length)}}]),t}(),g=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];f.transform(i,e),f.drawPath(t,i)}}]),t}(),y=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case"circle":v.draw(t,e);break;case"bar":g.draw(t,e);break;case"arrow":default:m.draw(t,e)}}}]),t}();e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(o),this.randomSeed=5}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"solve",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s<o;s++)t=e[i[s]],t.options.mass>0&&this._getForceContributions(n.root,t)}}},{key:"_getForceContributions",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=void 0,o=void 0,n=void 0;i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,n=Math.sqrt(i*i+o*o),n*t.calcSize>this.thetaInversed?this._calculateForces(n,i,o,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(n,i,o,e,t)}}},{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1,e=t),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=this.options.gravitationalConstant*n.mass*o.options.mass/Math.pow(t,3),r=e*s,a=i*s;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i=void 0,o=e.length,n=t[e[0]].x,s=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y,h=1;h<o;h++){var d=t[e[h]],l=d.x,u=d.y;d.options.mass>0&&(l<n&&(n=l),l>r&&(r=l),u<s&&(s=u),u>a&&(a=u))}var c=Math.abs(r-n)-Math.abs(a-s);c>0?(s-=.5*c,a+=.5*c):(n+=.5*c,r-=.5*c);var p=Math.max(1e-5,Math.abs(r-n)),f=.5*p,m=.5*(n+r),v=.5*(s+a),g={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:m-f,maxX:m+f,minY:v-f,maxY:v+f},size:p,calcSize:1/p,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(g.root);for(var y=0;y<o;y++)i=t[e[y]],i.options.mass>0&&this._placeInTree(g.root,i);return g}},{key:"_updateBranchMass",value:function(t,e){var i=t.centerOfMass,o=t.mass+e.options.mass,n=1/o;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=n,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=n,t.mass=o;var s=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<s?s:t.maxWidth}},{key:"_placeInTree",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var o=t.children.NW.range,n=void 0;n=o.maxX>e.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,n)}},{key:"_placeInRegion",value:function(t,e,i){var o=t.children[i];switch(o.childrenCount){case 0:o.children.data=e,o.childrenCount=1,this._updateBranchMass(o,e);break;case 1:o.children.data.x===e.x&&o.children.data.y===e.y?(e.x+=this.seededRandom(),e.y+=this.seededRandom()):(this._splitBranch(o),this._placeInTree(o,e));break;case 4:this._placeInTree(o,e)}}},{key:"_splitBranch",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}},{key:"_insertRegion",value:function(t,e){var i=void 0,o=void 0,n=void 0,s=void 0,r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY,s=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY,s=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY+r,s=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY+r,s=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:n,maxY:s},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value:function(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t=void 0,e=void 0,i=void 0,o=void 0,n=this.body.nodes,s=this.physicsBody.physicsNodeIndices,r=this.physicsBody.forces,a=0;a<s.length;a++){o=n[s[a]],t=-o.x,e=-o.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,r,o)}}},{key:"_calculateForces",value:function(t,e,i,o,n){var s=0===t?0:this.options.centralGravity/t;o[n.id].x=e*s,o[n.id].y=i*s}}]),t}();e.default=h},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a=["arrow","circle","bar"],h={configure:{enabled:{boolean:n},filter:{boolean:n,string:o,array:"array",function:"function"},container:{dom:"dom"},showButton:{boolean:n},__type__:{object:r,boolean:n,string:o,array:"array",function:"function"}},edges:{arrows:{to:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},middle:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},from:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},__type__:{string:["from","to","middle"],object:r}},arrowStrikethrough:{boolean:n},chosen:{label:{boolean:n,function:"function"},edge:{boolean:n,function:"function"},__type__:{object:r,boolean:n}},color:{color:{string:o},highlight:{string:o},hover:{string:o},inherit:{string:["from","to","both"],boolean:n},opacity:{number:s},__type__:{object:r,string:o}},dashes:{boolean:n,array:"array"},font:{color:{string:o},size:{number:s},face:{string:o},background:{string:o},strokeWidth:{number:s},strokeColor:{string:o},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:s},multi:{boolean:n,string:o},bold:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},boldital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},ital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},mono:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},__type__:{object:r,string:o}},hidden:{boolean:n},hoverWidth:{function:"function",number:s},label:{string:o,undefined:"undefined"},labelHighlightBold:{boolean:n},length:{number:s,undefined:"undefined"},physics:{boolean:n},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:n},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:n}},customScalingFunction:{function:"function"},__type__:{object:r}},selectionWidth:{function:"function",number:s},selfReferenceSize:{number:s},shadow:{enabled:{boolean:n},color:{string:o},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:n}},smooth:{enabled:{boolean:n},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:s},forceDirection:{string:["horizontal","vertical","none"],boolean:n},__type__:{object:r,boolean:n}},title:{string:o,undefined:"undefined"},width:{number:s},widthConstraint:{maximum:{number:s},__type__:{object:r,boolean:n,number:s}},value:{number:s,undefined:"undefined"},__type__:{object:r}},groups:{useDefaultGroups:{boolean:n},__any__:"get from nodes, will be overwritten below",__type__:{object:r}},interaction:{dragNodes:{boolean:n},dragView:{boolean:n},hideEdgesOnDrag:{boolean:n},hideNodesOnDrag:{boolean:n},hover:{boolean:n},keyboard:{enabled:{boolean:n},speed:{x:{number:s},y:{number:s},zoom:{number:s},__type__:{object:r}},bindToWindow:{boolean:n},__type__:{object:r,boolean:n}},multiselect:{boolean:n},navigationButtons:{boolean:n},selectable:{boolean:n},selectConnectedEdges:{boolean:n},hoverConnectedEdges:{boolean:n},tooltipDelay:{number:s},zoomView:{boolean:n},__type__:{object:r}},layout:{randomSeed:{undefined:"undefined",number:s},improvedLayout:{boolean:n},hierarchical:{enabled:{boolean:n},levelSeparation:{number:s},nodeSpacing:{number:s},treeSpacing:{number:s},blockShifting:{boolean:n},edgeMinimization:{boolean:n},parentCentralization:{boolean:n},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:r,boolean:n}},__type__:{object:r}},manipulation:{enabled:{boolean:n},initiallyActive:{boolean:n},addNode:{boolean:n,function:"function"},addEdge:{boolean:n,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:r,boolean:n,function:"function"}},deleteNode:{boolean:n,function:"function"},deleteEdge:{boolean:n,function:"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:r,boolean:n}},nodes:{borderWidth:{number:s},borderWidthSelected:{number:s,undefined:"undefined"},brokenImage:{string:o,undefined:"undefined"},chosen:{label:{boolean:n,function:"function"},node:{boolean:n,function:"function"},__type__:{object:r,boolean:n}},color:{border:{string:o},background:{string:o},highlight:{border:{string:o},background:{string:o},__type__:{object:r,string:o}},hover:{border:{string:o},background:{string:o},__type__:{object:r,string:o}},__type__:{object:r,string:o}},fixed:{x:{boolean:n},y:{boolean:n},__type__:{object:r,boolean:n}},font:{align:{string:o},color:{string:o},size:{number:s},face:{string:o},background:{string:o},strokeWidth:{number:s},strokeColor:{string:o},vadjust:{number:s},multi:{boolean:n,string:o},bold:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},boldital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},ital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},mono:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},__type__:{object:r,string:o}},group:{string:o,number:s,undefined:"undefined"},heightConstraint:{minimum:{number:s},valign:{string:o},__type__:{object:r,boolean:n,number:s}},hidden:{boolean:n},icon:{face:{string:o},code:{string:o},size:{number:s},color:{string:o},__type__:{object:r}},id:{string:o,number:s},image:{selected:{string:o,undefined:"undefined"},unselected:{string:o,undefined:"undefined"},__type__:{object:r,string:o}},label:{string:o,undefined:"undefined"},labelHighlightBold:{boolean:n},level:{number:s,undefined:"undefined"},margin:{top:{number:s},right:{number:s},bottom:{number:s},left:{number:s},__type__:{object:r,number:s}},mass:{number:s},physics:{boolean:n},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:n},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:n}},customScalingFunction:{function:"function"},__type__:{object:r}},shadow:{enabled:{boolean:n},color:{string:o},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:n}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},shapeProperties:{borderDashes:{boolean:n,array:"array"},borderRadius:{number:s},interpolation:{boolean:n},useImageSize:{boolean:n},useBorderWithImage:{boolean:n},__type__:{object:r}},size:{number:s},title:{string:o,dom:"dom",undefined:"undefined"},value:{number:s,undefined:"undefined"},widthConstraint:{minimum:{number:s},maximum:{number:s},__type__:{object:r,boolean:n,number:s}},x:{number:s},y:{number:s},__type__:{object:r}},physics:{enabled:{boolean:n},barnesHut:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},forceAtlas2Based:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},repulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},hierarchicalRepulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},maxVelocity:{number:s},minVelocity:{number:s},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:n},iterations:{number:s},updateInterval:{number:s},onlyDynamicEdges:{boolean:n},fit:{boolean:n},__type__:{object:r,boolean:n}},timestep:{number:s},adaptiveTimestep:{boolean:n},__type__:{object:r,boolean:n}},autoResize:{boolean:n},clickToUse:{boolean:n},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},height:{string:o},width:{string:o},__type__:{object:r}};h.groups.__any__=h.nodes,h.manipulation.controlNodeStyle=h.nodes;var d={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]}};e.allOptions=h,e.configureOptions=d},function(t,e,i){var o=i(2);o.extend(e,i(159)),o.extend(e,i(177)),o.extend(e,i(181))},function(t,e,i){i(49),i(60),t.exports=i(136)},function(t,e,i){var o=i(126),n=i(127),s=i(31),r=i(25);t.exports=i(79)(Array,"Array",function(t,e){this._t=r(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,i=this._i++;return!t||i>=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(54),n=i(39),s=i(59),r={};i(26)(r,i(13)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(20),n=i(27),s=i(33);t.exports=i(21)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(25),n=i(132),s=i(133);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if((a=h[l++])!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(55),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e,i){var o=i(55),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(18).document;t.exports=o&&o.documentElement},function(t,e,i){var o=i(55),n=i(51);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):r-56320+(s-55296<<10)+65536)}}},function(t,e,i){var o=i(27),n=i(137);t.exports=i(7).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(86),n=i(13)("iterator"),s=i(31);t.exports=i(7).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){i(139);var o=i(7).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(17);o(o.S,"Object",{create:i(54)})},function(t,e,i){i(141),t.exports=i(7).Object.keys},function(t,e,i){var o=i(41),n=i(33);i(87)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(143),__esModule:!0}},function(t,e,i){i(60),i(49),t.exports=i(61).f("iterator")},function(t,e,i){t.exports={default:i(145),__esModule:!0}},function(t,e,i){i(146),i(151),i(152),i(153),t.exports=i(7).Symbol},function(t,e,i){var o=i(18),n=i(22),s=i(21),r=i(17),a=i(83),h=i(147).KEY,d=i(28),l=i(57),u=i(59),c=i(40),p=i(13),f=i(61),m=i(62),v=i(148),g=i(149),y=i(27),b=i(25),_=i(53),w=i(39),x=i(54),k=i(150),S=i(89),D=i(20),M=i(33),C=S.f,O=D.f,E=k.f,T=o.Symbol,P=o.JSON,I=P&&P.stringify,N=p("_hidden"),R=p("toPrimitive"),A={}.propertyIsEnumerable,z=l("symbol-registry"),L=l("symbols"),F=l("op-symbols"),B=Object.prototype,j="function"==typeof T,H=o.QObject,W=!H||!H.prototype||!H.prototype.findChild,Y=s&&d(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=C(B,e);o&&delete B[e],O(t,e,i),o&&t!==B&&O(B,e,o)}:O,G=function(t){var e=L[t]=x(T.prototype);return e._k=t,e},V=j&&"symbol"==typeof T.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof T},U=function(t,e,i){return t===B&&U(F,e,i),y(t),e=_(e,!0),y(i),n(L,e)?(i.enumerable?(n(t,N)&&t[N][e]&&(t[N][e]=!1),i=x(i,{enumerable:w(0,!1)})):(n(t,N)||O(t,N,w(1,{})),t[N][e]=!0),Y(t,e,i)):O(t,e,i)},q=function(t,e){y(t);for(var i,o=v(e=b(e)),n=0,s=o.length;s>n;)U(t,i=o[n++],e[i]);return t},X=function(t,e){return void 0===e?x(t):q(x(t),e)},Z=function(t){var e=A.call(this,t=_(t,!0));return!(this===B&&n(L,t)&&!n(F,t))&&(!(e||!n(this,t)||!n(L,t)||n(this,N)&&this[N][t])||e)},K=function(t,e){if(t=b(t),e=_(e,!0),t!==B||!n(L,e)||n(F,e)){var i=C(t,e);return!i||!n(L,e)||n(t,N)&&t[N][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=E(b(t)),o=[],s=0;i.length>s;)n(L,e=i[s++])||e==N||e==h||o.push(e);return o},$=function(t){for(var e,i=t===B,o=E(i?F:b(t)),s=[],r=0;o.length>r;)!n(L,e=o[r++])||i&&!n(B,e)||s.push(L[e]);return s};j||(T=function(){if(this instanceof T)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===B&&e.call(F,i),n(this,N)&&n(this[N],t)&&(this[N][t]=!1),Y(this,t,w(1,i))};return s&&W&&Y(B,t,{configurable:!0,set:e}),G(t)},a(T.prototype,"toString",function(){return this._k}),S.f=K,D.f=U,i(88).f=k.f=J,i(42).f=Z,i(63).f=$,s&&!i(52)&&a(B,"propertyIsEnumerable",Z,!0),f.f=function(t){return G(p(t))}),r(r.G+r.W+r.F*!j,{Symbol:T});for(var Q="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Q.length>tt;)p(Q[tt++]);for(var et=M(p.store),it=0;et.length>it;)m(et[it++]);r(r.S+r.F*!j,"Symbol",{for:function(t){return n(z,t+="")?z[t]:z[t]=T(t)},keyFor:function(t){if(!V(t))throw TypeError(t+" is not a symbol!");for(var e in z)if(z[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!j,"Object",{create:X,defineProperty:U,defineProperties:q,getOwnPropertyDescriptor:K,getOwnPropertyNames:J,getOwnPropertySymbols:$}),P&&r(r.S+r.F*(!j||d(function(){var t=T();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!V(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&g(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!V(e))return e}),o[1]=e,I.apply(P,o)}}}),T.prototype[R]||i(26)(T.prototype,R,T.prototype.valueOf),u(T,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(40)("meta"),n=i(32),s=i(22),r=i(20).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(28)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},p=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:p}},function(t,e,i){var o=i(33),n=i(63),s=i(42);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e,i){var o=i(50);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(25),n=i(88).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e){},function(t,e,i){i(62)("asyncIterator")},function(t,e,i){i(62)("observable")},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(0,function(){function e(){return Co.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function n(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}function s(t){return void 0===t}function r(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i<t.length;++i)o.push(e(t[i],i));return o}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function l(t,e){for(var i in e)d(e,i)&&(t[i]=e[i]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function u(t,e,i,o){return Se(t,e,i,o,!0).utc()}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function p(t){return null==t._pf&&(t._pf=c()),t._pf}function f(t){if(null==t._isValid){var e=p(t),i=Oo.call(e.parsedDateParts,function(t){return null!=t}),o=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(o=o&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return o;t._isValid=o}return t._isValid}function m(t){var e=u(NaN);return null!=t?l(p(e),t):p(e).userInvalidated=!0,e}function v(t,e){var i,o,n;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=p(e)),s(e._locale)||(t._locale=e._locale),Eo.length>0)for(i=0;i<Eo.length;i++)o=Eo[i],n=e[o],s(n)||(t[o]=n);return t}function g(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===To&&(To=!0,e.updateOffset(this),To=!1)}function y(t){return t instanceof g||null!=t&&null!=t._isAMomentObject}function b(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function _(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=b(e)),i}function w(t,e,i){var o,n=Math.min(t.length,e.length),s=Math.abs(t.length-e.length),r=0;for(o=0;o<n;o++)(i&&t[o]!==e[o]||!i&&_(t[o])!==_(e[o]))&&r++;return r+s}function x(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function k(t,i){var o=!0;return l(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),o){for(var n,s=[],r=0;r<arguments.length;r++){if(n="","object"==typeof arguments[r]){n+="\n["+r+"] "
+;for(var a in arguments[0])n+=a+": "+arguments[0][a]+", ";n=n.slice(0,-2)}else n=arguments[r];s.push(n)}x(t+"\nArguments: "+Array.prototype.slice.call(s).join("")+"\n"+(new Error).stack),o=!1}return i.apply(this,arguments)},i)}function S(t,i){null!=e.deprecationHandler&&e.deprecationHandler(t,i),Po[t]||(x(i),Po[t]=!0)}function D(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function M(t){var e,i;for(i in t)e=t[i],D(e)?this[i]=e:this["_"+i]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function C(t,e){var i,n=l({},t);for(i in e)d(e,i)&&(o(t[i])&&o(e[i])?(n[i]={},l(n[i],t[i]),l(n[i],e[i])):null!=e[i]?n[i]=e[i]:delete n[i]);for(i in t)d(t,i)&&!d(e,i)&&o(t[i])&&(n[i]=l({},n[i]));return n}function O(t){null!=t&&this.set(t)}function E(t,e,i){var o=this._calendar[t]||this._calendar.sameElse;return D(o)?o.call(e,i):o}function T(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function P(){return this._invalidDate}function I(t){return this._ordinal.replace("%d",t)}function N(t,e,i,o){var n=this._relativeTime[i];return D(n)?n(t,e,i,o):n.replace(/%d/i,t)}function R(t,e){var i=this._relativeTime[t>0?"future":"past"];return D(i)?i(e):i.replace(/%s/i,e)}function A(t,e){var i=t.toLowerCase();Lo[i]=Lo[i+"s"]=Lo[e]=t}function z(t){return"string"==typeof t?Lo[t]||Lo[t.toLowerCase()]:void 0}function L(t){var e,i,o={};for(i in t)d(t,i)&&(e=z(i))&&(o[e]=t[i]);return o}function F(t,e){Fo[t]=e}function B(t){var e=[];for(var i in t)e.push({unit:i,priority:Fo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,e,i){var o=""+Math.abs(t),n=e-o.length;return(t>=0?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function H(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Wo[t]=n),e&&(Wo[e[0]]=function(){return j(n.apply(this,arguments),e[1],e[2])}),i&&(Wo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Y(t){var e,i,o=t.match(Bo);for(e=0,i=o.length;e<i;e++)Wo[o[e]]?o[e]=Wo[o[e]]:o[e]=W(o[e]);return function(e){var n,s="";for(n=0;n<i;n++)s+=D(o[n])?o[n].call(e,t):o[n];return s}}function G(t,e){return t.isValid()?(e=V(e,t.localeData()),Ho[e]=Ho[e]||Y(e),Ho[e](t)):t.localeData().invalidDate()}function V(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(jo.lastIndex=0;o>=0&&jo.test(t);)t=t.replace(jo,i),jo.lastIndex=0,o-=1;return t}function U(t,e,i){an[t]=D(e)?e:function(t,o){return t&&i?i:e}}function q(t,e){return d(an,t)?an[t](e._strict,e._locale):new RegExp(X(t))}function X(t){return Z(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function Z(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function K(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),r(e)&&(o=function(t,i){i[e]=_(t)}),i=0;i<t.length;i++)hn[t[i]]=o}function J(t,e){K(t,function(t,i,o,n){o._w=o._w||{},e(t,o._w,o,n)})}function $(t,e,i){null!=e&&d(hn,t)&&hn[t](e,i._a,i,t)}function Q(t){return tt(t)?366:365}function tt(t){return t%4==0&&t%100!=0||t%400==0}function et(){return tt(this.year())}function it(t,i){return function(o){return null!=o?(nt(this,t,o),e.updateOffset(this,i),this):ot(this,t)}}function ot(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function nt(t,e,i){t.isValid()&&!isNaN(i)&&("FullYear"===e&&tt(t.year())?t._d["set"+(t._isUTC?"UTC":"")+e](i,t.month(),ht(i,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](i))}function st(t){return t=z(t),D(this[t])?this[t]():this}function rt(t,e){if("object"==typeof t){t=L(t);for(var i=B(t),o=0;o<i.length;o++)this[i[o].unit](t[i[o].unit])}else if(t=z(t),D(this[t]))return this[t](e);return this}function at(t,e){return(t%e+e)%e}function ht(t,e){if(isNaN(t)||isNaN(e))return NaN;var i=at(e,12);return t+=(e-i)/12,1===i?tt(t)?29:28:31-i%7%2}function dt(t,e){return t?i(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||_n).test(e)?"format":"standalone"][t.month()]:i(this._months)?this._months:this._months.standalone}function lt(t,e){return t?i(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[_n.test(e)?"format":"standalone"][t.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ut(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)s=u([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(s,"").toLocaleLowerCase();return i?"MMM"===e?(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null):(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):"MMM"===e?-1!==(n=yn.call(this._shortMonthsParse,r))?n:(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):-1!==(n=yn.call(this._longMonthsParse,r))?n:(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null)}function ct(t,e,i){var o,n,s;if(this._monthsParseExact)return ut.call(this,t,e,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(n=u([2e3,o]),i&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),i||this._monthsParse[o]||(s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[o].test(t))return o;if(i&&"MMM"===e&&this._shortMonthsParse[o].test(t))return o;if(!i&&this._monthsParse[o].test(t))return o}}function pt(t,e){var i;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=_(e);else if(e=t.localeData().monthsParse(e),!r(e))return t;return i=Math.min(t.date(),ht(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t}function ft(t){return null!=t?(pt(this,t),e.updateOffset(this,!0),this):ot(this,"Month")}function mt(){return ht(this.year(),this.month())}function vt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=kn),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function gt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Sn),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function yt(){function t(t,e){return e.length-t.length}var e,i,o=[],n=[],s=[];for(e=0;e<12;e++)i=u([2e3,e]),o.push(this.monthsShort(i,"")),n.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(o.sort(t),n.sort(t),s.sort(t),e=0;e<12;e++)o[e]=Z(o[e]),n[e]=Z(n[e]);for(e=0;e<24;e++)s[e]=Z(s[e]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function bt(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return t<100&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i;return-(7+_t(t,0,o).getUTCDay()-e)%7+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=Q(s)+d):d>Q(t)?(s=t+1,r=d-Q(t)):(s=t,r=d),{year:s,dayOfYear:r}}function kt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(Q(t)-o+n)/7}function Dt(t){return kt(t,this._week.dow,this._week.doy).week}function Mt(){return this._week.dow}function Ct(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=kt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function It(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Nt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Rt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function At(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=yn.call(this._weekdaysParse,r),-1!==n?n:null):"ddd"===e?(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null):(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"dddd"===e?-1!==(n=yn.call(this._weekdaysParse,r))?n:-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"ddd"===e?-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):-1!==(n=yn.call(this._minWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null)}function zt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return At.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=u([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Lt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Bt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=En),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Tn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Yt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=u([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=Z(a[e]),h[e]=Z(h[e]),d[e]=Z(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Gt(){return this.hours()%12||12}function Vt(){return this.hours()||24}function Ut(t,e){H(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,i,o,n,s=0;s<t.length;){for(n=Kt(t[s]).split("-"),e=n.length,i=Kt(t[s+1]),i=i?i.split("-"):null;e>0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&w(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!zn[e]&&void 0!==t&&t&&t.exports)try{i=In._abbr;!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return zn[e]}function Qt(t,e){var i;return t&&(i=s(e)?ie(t):te(t,e))&&(In=i),In._abbr}function te(t,e){if(null!==e){var i=An;if(e.abbr=t,null!=zn[t])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=zn[t]._config;else if(null!=e.parentLocale){if(null==zn[e.parentLocale])return Ln[e.parentLocale]||(Ln[e.parentLocale]=[]),Ln[e.parentLocale].push({name:t,config:e}),null;i=zn[e.parentLocale]._config}return zn[t]=new O(C(i,e)),Ln[t]&&Ln[t].forEach(function(t){te(t.name,t.config)}),Qt(t),zn[t]}return delete zn[t],null}function ee(t,e){if(null!=e){var i,o=An;null!=zn[t]&&(o=zn[t]._config),e=C(o,e),i=new O(e),i.parentLocale=zn[t],zn[t]=i,Qt(t)}else null!=zn[t]&&(null!=zn[t].parentLocale?zn[t]=zn[t].parentLocale:null!=zn[t]&&delete zn[t]);return zn[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return In;if(!i(t)){if(e=$t(t))return e;t=[t]}return Jt(t)}function oe(){return Io(zn)}function ne(t){var e,i=t._a;return i&&-2===p(t).overflow&&(e=i[ln]<0||i[ln]>11?ln:i[un]<1||i[un]>ht(i[dn],i[ln])?un:i[cn]<0||i[cn]>24||24===i[cn]&&(0!==i[pn]||0!==i[fn]||0!==i[mn])?cn:i[pn]<0||i[pn]>59?pn:i[fn]<0||i[fn]>59?fn:i[mn]<0||i[mn]>999?mn:-1,p(t)._overflowDayOfYear&&(e<dn||e>un)&&(e=un),p(t)._overflowWeeks&&-1===e&&(e=vn),p(t)._overflowWeekday&&-1===e&&(e=gn),p(t).overflow=e),t}function se(t,e,i){return null!=t?t:null!=e?e:i}function re(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function ae(t){var e,i,o,n,s=[];if(!t._d){for(o=re(t),t._w&&null==t._a[un]&&null==t._a[ln]&&he(t),null!=t._dayOfYear&&(n=se(t._a[dn],o[dn]),(t._dayOfYear>Q(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[ln]=i.getUTCMonth(),t._a[un]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[cn]&&0===t._a[pn]&&0===t._a[fn]&&0===t._a[mn]&&(t._nextDay=!0,t._a[cn]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[cn]=24),t._w&&void 0!==t._w.d&&t._w.d!==t._d.getDay()&&(p(t).weekdayMismatch=!0)}}function he(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=se(e.GG,t._a[dn],kt(De(),1,4).year),o=se(e.W,1),((n=se(e.E,1))<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=kt(De(),s,r);i=se(e.gg,t._a[dn],d.year),o=se(e.w,d.week),null!=e.d?((n=e.d)<0||n>6)&&(h=!0):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[dn]=a.year,t._dayOfYear=a.dayOfYear)}function de(t){var e,i,o,n,s,r,a=t._i,h=Fn.exec(a)||Bn.exec(a);if(h){for(p(t).iso=!0,e=0,i=Hn.length;e<i;e++)if(Hn[e][1].exec(h[1])){n=Hn[e][0],o=!1!==Hn[e][2];break}if(null==n)return void(t._isValid=!1);if(h[3]){for(e=0,i=Wn.length;e<i;e++)if(Wn[e][1].exec(h[3])){s=(h[2]||" ")+Wn[e][0];break}if(null==s)return void(t._isValid=!1)}if(!o&&null!=s)return void(t._isValid=!1);if(h[4]){if(!jn.exec(h[4]))return void(t._isValid=!1);r="Z"}t._f=n+(s||"")+(r||""),ge(t)}else t._isValid=!1}function le(t,e,i,o,n,s){var r=[ue(t),xn.indexOf(e),parseInt(i,10),parseInt(o,10),parseInt(n,10)];return s&&r.push(parseInt(s,10)),r}function ue(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}function ce(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function pe(t,e,i){if(t){if(Cn.indexOf(t)!==new Date(e[0],e[1],e[2]).getDay())return p(i).weekdayMismatch=!0,i._isValid=!1,!1}return!0}function fe(t,e,i){if(t)return Vn[t];if(e)return 0;var o=parseInt(i,10),n=o%100;return(o-n)/100*60+n}function me(t){var e=Gn.exec(ce(t._i));if(e){var i=le(e[4],e[3],e[2],e[5],e[6],e[7]);if(!pe(e[1],i,t))return;t._a=i,t._tzm=fe(e[8],e[9],e[10]),t._d=_t.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),p(t).rfc2822=!0}else t._isValid=!1}function ve(t){var i=Yn.exec(t._i);if(null!==i)return void(t._d=new Date(+i[1]));de(t),!1===t._isValid&&(delete t._isValid,me(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function ge(t){if(t._f===e.ISO_8601)return void de(t);if(t._f===e.RFC_2822)return void me(t);t._a=[],p(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=V(t._f,t._locale).match(Bo)||[],i=0;i<n.length;i++)s=n[i],o=(a.match(q(s,t))||[])[0],o&&(r=a.substr(0,a.indexOf(o)),r.length>0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Wo[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),$(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=h-d,a.length>0&&p(t).unusedInput.push(a),t._a[cn]<=12&&!0===p(t).bigHour&&t._a[cn]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[cn]=ye(t._locale,t._a[cn],t._meridiem),ae(t),ne(t)}function ye(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function be(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;n<t._f.length;n++)s=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[n],ge(e),f(e)&&(s+=p(e).charsLeftOver,s+=10*p(e).unusedTokens.length,p(e).score=s,(null==o||s<o)&&(o=s,i=e));l(t,i||e)}function _e(t){if(!t._d){var e=L(t._i);t._a=h([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),ae(t)}}function we(t){var e=new g(ne(xe(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function xe(t){var e=t._i,o=t._f;return t._locale=t._locale||ie(t._l),null===e||void 0===o&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),y(e)?new g(ne(e)):(a(e)?t._d=e:i(o)?be(t):o?ge(t):ke(t),f(t)||(t._d=null),t))}function ke(t){var n=t._i;s(n)?t._d=new Date(e.now()):a(n)?t._d=new Date(n.valueOf()):"string"==typeof n?ve(t):i(n)?(t._a=h(n.slice(0),function(t){return parseInt(t,10)}),ae(t)):o(n)?_e(t):r(n)?t._d=new Date(n):e.createFromInputFallback(t)}function Se(t,e,s,r,a){var h={};return!0!==s&&!1!==s||(r=s,s=void 0),(o(t)&&n(t)||i(t)&&0===t.length)&&(t=void 0),h._isAMomentObject=!0,h._useUTC=h._isUTC=a,h._l=s,h._i=t,h._f=e,h._strict=r,we(h)}function De(t,e,i,o){return Se(t,e,i,o,!1)}function Me(t,e){var o,n;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return De();for(o=e[0],n=1;n<e.length;++n)e[n].isValid()&&!e[n][t](o)||(o=e[n]);return o}function Ce(){return Me("isBefore",[].slice.call(arguments,0))}function Oe(){return Me("isAfter",[].slice.call(arguments,0))}function Ee(t){for(var e in t)if(-1===yn.call(Zn,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var i=!1,o=0;o<Zn.length;++o)if(t[Zn[o]]){if(i)return!1;parseFloat(t[Zn[o]])!==_(t[Zn[o]])&&(i=!0)}return!0}function Te(){return this._isValid}function Pe(){return Ke(NaN)}function Ie(t){var e=L(t),i=e.year||0,o=e.quarter||0,n=e.month||0,s=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._isValid=Ee(e),this._milliseconds=+l+1e3*d+6e4*h+1e3*a*60*60,this._days=+r+7*s,this._months=+n+3*o+12*i,this._data={},this._locale=ie(),this._bubble()}function Ne(t){return t instanceof Ie}function Re(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ae(t,e){H(t,0,0,function(){var t=this.utcOffset(),i="+";return t<0&&(t=-t,i="-"),i+j(~~(t/60),2)+e+j(~~t%60,2)})}function ze(t,e){var i=(e||"").match(t);if(null===i)return null;var o=i[i.length-1]||[],n=(o+"").match(Kn)||["-",0,0],s=60*n[1]+_(n[2]);return 0===s?0:"+"===n[0]?s:-s}function Le(t,i){var o,n;return i._isUTC?(o=i.clone(),n=(y(t)||a(t)?t.valueOf():De(t).valueOf())-o.valueOf(),o._d.setTime(o._d.valueOf()+n),e.updateOffset(o,!1),o):De(t).local()}function Fe(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Be(t,i,o){var n,s=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=ze(nn,t)))return this}else Math.abs(t)<16&&!o&&(t*=60);return!this._isUTC&&i&&(n=Fe(this)),this._offset=t,this._isUTC=!0,null!=n&&this.add(n,"m"),s!==t&&(!i||this._changeInProgress?ei(this,Ke(t-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?s:Fe(this)}function je(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function He(t){return this.utcOffset(0,t)}function We(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Fe(this),"m")),this}function Ye(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=ze(on,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ge(t){return!!this.isValid()&&(t=t?De(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function Ve(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ue(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=xe(t),t._a){var e=t._isUTC?u(t._a):De(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qe(){return!!this.isValid()&&!this._isUTC}function Xe(){return!!this.isValid()&&this._isUTC}function Ze(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ke(t,e){var i,o,n,s=t,a=null;return Ne(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:r(t)?(s={},e?s[e]=t:s.milliseconds=t):(a=Jn.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[un])*i,h:_(a[cn])*i,m:_(a[pn])*i,s:_(a[fn])*i,ms:_(Re(1e3*a[mn]))*i}):(a=$n.exec(t))?(i="-"===a[1]?-1:(a[1],1),s={y:Je(a[2],i),M:Je(a[3],i),w:Je(a[4],i),d:Je(a[5],i),h:Je(a[6],i),m:Je(a[7],i),s:Je(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Qe(De(s.from),De(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ie(s),Ne(t)&&d(t,"_locale")&&(o._locale=t._locale),o}function Je(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $e(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function Qe(t,e){var i;return t.isValid()&&e.isValid()?(e=Le(e,t),t.isBefore(e)?i=$e(t,e):(i=$e(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ti(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(S(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ke(i,o),ei(this,n,t),this}}function ei(t,i,o,n){var s=i._milliseconds,r=Re(i._days),a=Re(i._months);t.isValid()&&(n=null==n||n,a&&pt(t,ot(t,"Month")+a*o),r&&nt(t,"Date",ot(t,"Date")+r*o),s&&t._d.setTime(t._d.valueOf()+s*o),n&&e.updateOffset(t,r||a))}function ii(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function oi(t,i){var o=t||De(),n=Le(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(D(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,De(o)))}function ni(){return new g(this)}function si(t,e){var i=y(t)?t:De(t);return!(!this.isValid()||!i.isValid())&&(e=z(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()<this.clone().startOf(e).valueOf())}function ri(t,e){var i=y(t)?t:De(t);return!(!this.isValid()||!i.isValid())&&(e=z(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()<i.valueOf():this.clone().endOf(e).valueOf()<i.valueOf())}function ai(t,e,i,o){return o=o||"()",("("===o[0]?this.isAfter(t,i):!this.isBefore(t,i))&&(")"===o[1]?this.isBefore(e,i):!this.isAfter(e,i))}function hi(t,e){var i,o=y(t)?t:De(t);return!(!this.isValid()||!o.isValid())&&(e=z(e||"millisecond"),"millisecond"===e?this.valueOf()===o.valueOf():(i=o.valueOf(),this.clone().startOf(e).valueOf()<=i&&i<=this.clone().endOf(e).valueOf()))}function di(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function li(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ui(t,e,i){var o,n,s;if(!this.isValid())return NaN;if(o=Le(t,this),!o.isValid())return NaN;switch(n=6e4*(o.utcOffset()-this.utcOffset()),e=z(e)){case"year":s=ci(this,o)/12;break;case"month":s=ci(this,o);break;case"quarter":s=ci(this,o)/3;break;case"second":s=(this-o)/1e3;break;case"minute":s=(this-o)/6e4;break;case"hour":s=(this-o)/36e5;break;case"day":s=(this-o-n)/864e5;break;case"week":s=(this-o-n)/6048e5;break;default:s=this-o}return i?s:b(s)}function ci(t,e){var i,o,n=12*(e.year()-t.year())+(e.month()-t.month()),s=t.clone().add(n,"months");return e-s<0?(i=t.clone().add(n-1,"months"),o=(e-s)/(s-i)):(i=t.clone().add(n+1,"months"),o=(e-s)/(i-s)),-(n+o)||0}function pi(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function fi(){if(!this.isValid())return null;var t=this.clone().utc();return t.year()<0||t.year()>9999?G(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):D(Date.prototype.toISOString)?this.toDate().toISOString():G(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function mi(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=e+'[")]';return this.format(i+o+"-MM-DD[T]HH:mm:ss.SSS"+n)}function vi(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=G(this,t);return this.localeData().postformat(i)}function gi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function yi(t){return this.from(De(),t)}function bi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _i(t){return this.to(De(),t)}function wi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function xi(){return this._locale}function ki(t){switch(t=z(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Si(t){return void 0===(t=z(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function Di(){return this._d.valueOf()-6e4*(this._offset||0)}function Mi(){return Math.floor(this.valueOf()/1e3)}function Ci(){return new Date(this.valueOf())}function Oi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Ei(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Ti(){return this.isValid()?this.toISOString():null}function Pi(){return f(this)}function Ii(){return l({},p(this))}function Ni(){return p(this).overflow}function Ri(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ai(t,e){H(0,[t,t.length],0,e)}function zi(t){return ji.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Li(t){return ji.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Fi(){return St(this.year(),1,4)}function Bi(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function ji(t,e,i,o,n){var s;return null==t?kt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Hi.call(this,t,e,i,o,n))}function Hi(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Wi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Yi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Gi(t,e){e[mn]=_(1e3*("0."+t))}function Vi(){return this._isUTC?"UTC":""}function Ui(){return this._isUTC?"Coordinated Universal Time":""}function qi(t){return De(1e3*t)}function Xi(){return De.apply(null,arguments).parseZone()}function Zi(t){return t}function Ki(t,e,i,o){var n=ie(),s=u().set(o,e);return n[i](s,t)}function Ji(t,e,i){if(r(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ki(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ki(t,o,i,"month");return n}function $i(t,e,i,o){"boolean"==typeof t?(r(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,r(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ki(e,(i+s)%7,o,"day");var a,h=[];for(a=0;a<7;a++)h[a]=Ki(e,(a+s)%7,o,"day");return h}function Qi(t,e){return Ji(t,e,"months")}function to(t,e){return Ji(t,e,"monthsShort")}function eo(t,e,i){return $i(t,e,i,"weekdays")}function io(t,e,i){return $i(t,e,i,"weekdaysShort")}function oo(t,e,i){return $i(t,e,i,"weekdaysMin")}function no(){var t=this._data;return this._milliseconds=ds(this._milliseconds),this._days=ds(this._days),this._months=ds(this._months),t.milliseconds=ds(t.milliseconds),t.seconds=ds(t.seconds),t.minutes=ds(t.minutes),t.hours=ds(t.hours),t.months=ds(t.months),t.years=ds(t.years),this}function so(t,e,i,o){var n=Ke(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function ro(t,e){return so(this,t,e,1)}function ao(t,e){return so(this,t,e,-1)}function ho(t){return t<0?Math.floor(t):Math.ceil(t)}function lo(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*ho(co(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=b(s/1e3),h.seconds=t%60,e=b(t/60),h.minutes=e%60,i=b(e/60),h.hours=i%24,r+=b(i/24),n=b(uo(r)),a+=n,
+r-=ho(co(n)),o=b(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function uo(t){return 4800*t/146097}function co(t){return 146097*t/4800}function po(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if("month"===(t=z(t))||"year"===t)return e=this._days+o/864e5,i=this._months+uo(e),"month"===t?i:i/12;switch(e=this._days+Math.round(co(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function fo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function mo(t){return function(){return this.as(t)}}function vo(){return Ke(this)}function go(t){return t=z(t),this.isValid()?this[t+"s"]():NaN}function yo(t){return function(){return this.isValid()?this._data[t]:NaN}}function bo(){return b(this.days()/7)}function _o(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function wo(t,e,i){var o=Ke(t).abs(),n=Ds(o.as("s")),s=Ds(o.as("m")),r=Ds(o.as("h")),a=Ds(o.as("d")),h=Ds(o.as("M")),d=Ds(o.as("y")),l=n<=Ms.ss&&["s",n]||n<Ms.s&&["ss",n]||s<=1&&["m"]||s<Ms.m&&["mm",s]||r<=1&&["h"]||r<Ms.h&&["hh",r]||a<=1&&["d"]||a<Ms.d&&["dd",a]||h<=1&&["M"]||h<Ms.M&&["MM",h]||d<=1&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=i,_o.apply(null,l)}function xo(t){return void 0===t?Ds:"function"==typeof t&&(Ds=t,!0)}function ko(t,e){return void 0!==Ms[t]&&(void 0===e?Ms[t]:(Ms[t]=e,"s"===t&&(Ms.ss=e-1),!0))}function So(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=wo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Do(t){return(t>0)-(t<0)||+t}function Mo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Cs(this._milliseconds)/1e3,n=Cs(this._days),s=Cs(this._months);t=b(o/60),e=b(t/60),o%=60,t%=60,i=b(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o?o.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var p=c<0?"-":"",f=Do(this._months)!==Do(c)?"-":"",m=Do(this._days)!==Do(c)?"-":"",v=Do(this._milliseconds)!==Do(c)?"-":"";return p+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(h?m+h+"D":"")+(d||l||u?"T":"")+(d?v+d+"H":"")+(l?v+l+"M":"")+(u?v+u+"S":"")}var Co,Oo;Oo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o<i;o++)if(o in e&&t.call(this,e[o],o,e))return!0;return!1};var Eo=e.momentProperties=[],To=!1,Po={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var Io;Io=Object.keys?Object.keys:function(t){var e,i=[];for(e in t)d(t,e)&&i.push(e);return i};var No={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ro={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ao=/\d{1,2}/,zo={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Lo={},Fo={},Bo=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,jo=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ho={},Wo={},Yo=/\d/,Go=/\d\d/,Vo=/\d{3}/,Uo=/\d{4}/,qo=/[+-]?\d{6}/,Xo=/\d\d?/,Zo=/\d\d\d\d?/,Ko=/\d\d\d\d\d\d?/,Jo=/\d{1,3}/,$o=/\d{1,4}/,Qo=/[+-]?\d{1,6}/,tn=/\d+/,en=/[+-]?\d+/,on=/Z|[+-]\d\d:?\d\d/gi,nn=/Z|[+-]\d\d(?::?\d\d)?/gi,sn=/[+-]?\d+(\.\d{1,3})?/,rn=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,an={},hn={},dn=0,ln=1,un=2,cn=3,pn=4,fn=5,mn=6,vn=7,gn=8;H("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),A("year","y"),F("year",1),U("Y",en),U("YY",Xo,Go),U("YYYY",$o,Uo),U("YYYYY",Qo,qo),U("YYYYYY",Qo,qo),K(["YYYYY","YYYYYY"],dn),K("YYYY",function(t,i){i[dn]=2===t.length?e.parseTwoDigitYear(t):_(t)}),K("YY",function(t,i){i[dn]=e.parseTwoDigitYear(t)}),K("Y",function(t,e){e[dn]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return _(t)+(_(t)>68?1900:2e3)};var yn,bn=it("FullYear",!0);yn=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),H("MMMM",0,0,function(t){return this.localeData().months(this,t)}),A("month","M"),F("month",8),U("M",Xo),U("MM",Xo,Go),U("MMM",function(t,e){return e.monthsShortRegex(t)}),U("MMMM",function(t,e){return e.monthsRegex(t)}),K(["M","MM"],function(t,e){e[ln]=_(t)-1}),K(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[ln]=n:p(i).invalidMonth=t});var _n=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,wn="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),xn="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),kn=rn,Sn=rn;H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),A("week","w"),A("isoWeek","W"),F("week",5),F("isoWeek",5),U("w",Xo),U("ww",Xo,Go),U("W",Xo),U("WW",Xo,Go),J(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=_(t)});var Dn={dow:0,doy:6};H("d",0,"do","day"),H("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),H("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),H("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),A("day","d"),A("weekday","e"),A("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),U("d",Xo),U("e",Xo),U("E",Xo),U("dd",function(t,e){return e.weekdaysMinRegex(t)}),U("ddd",function(t,e){return e.weekdaysShortRegex(t)}),U("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:p(i).invalidWeekday=t}),J(["d","e","E"],function(t,e,i,o){e[o]=_(t)});var Mn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Cn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),On="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),En=rn,Tn=rn,Pn=rn;H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Gt),H("k",["kk",2],0,Vt),H("hmm",0,0,function(){return""+Gt.apply(this)+j(this.minutes(),2)}),H("hmmss",0,0,function(){return""+Gt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)}),H("Hmm",0,0,function(){return""+this.hours()+j(this.minutes(),2)}),H("Hmmss",0,0,function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)}),Ut("a",!0),Ut("A",!1),A("hour","h"),F("hour",13),U("a",qt),U("A",qt),U("H",Xo),U("h",Xo),U("k",Xo),U("HH",Xo,Go),U("hh",Xo,Go),U("kk",Xo,Go),U("hmm",Zo),U("hmmss",Ko),U("Hmm",Zo),U("Hmmss",Ko),K(["H","HH"],cn),K(["k","kk"],function(t,e,i){var o=_(t);e[cn]=24===o?0:o}),K(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),K(["h","hh"],function(t,e,i){e[cn]=_(t),p(i).bigHour=!0}),K("hmm",function(t,e,i){var o=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o)),p(i).bigHour=!0}),K("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o,2)),e[fn]=_(t.substr(n)),p(i).bigHour=!0}),K("Hmm",function(t,e,i){var o=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o))}),K("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o,2)),e[fn]=_(t.substr(n))});var In,Nn=/[ap]\.?m?\.?/i,Rn=it("Hours",!0),An={calendar:No,longDateFormat:Ro,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Ao,relativeTime:zo,months:wn,monthsShort:xn,week:Dn,weekdays:Mn,weekdaysMin:On,weekdaysShort:Cn,meridiemParse:Nn},zn={},Ln={},Fn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Bn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jn=/Z|[+-]\d\d(?::?\d\d)?/,Hn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Yn=/^\/?Date\((\-?\d+)/i,Gn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Vn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=k("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Un=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=De.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()}),qn=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=De.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}),Xn=function(){return Date.now?Date.now():+new Date},Zn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ae("Z",":"),Ae("ZZ",""),U("Z",nn),U("ZZ",nn),K(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=ze(nn,t)});var Kn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Jn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$n=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Ke.fn=Ie.prototype,Ke.invalid=Pe;var Qn=ti(1,"add"),ts=ti(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var es=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ai("gggg","weekYear"),Ai("ggggg","weekYear"),Ai("GGGG","isoWeekYear"),Ai("GGGGG","isoWeekYear"),A("weekYear","gg"),A("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),U("G",en),U("g",en),U("GG",Xo,Go),U("gg",Xo,Go),U("GGGG",$o,Uo),U("gggg",$o,Uo),U("GGGGG",Qo,qo),U("ggggg",Qo,qo),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=_(t)}),J(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),H("Q",0,"Qo","quarter"),A("quarter","Q"),F("quarter",7),U("Q",Yo),K("Q",function(t,e){e[ln]=3*(_(t)-1)}),H("D",["DD",2],"Do","date"),A("date","D"),F("date",9),U("D",Xo),U("DD",Xo,Go),U("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),K(["D","DD"],un),K("Do",function(t,e){e[un]=_(t.match(Xo)[0],10)});var is=it("Date",!0);H("DDD",["DDDD",3],"DDDo","dayOfYear"),A("dayOfYear","DDD"),F("dayOfYear",4),U("DDD",Jo),U("DDDD",Vo),K(["DDD","DDDD"],function(t,e,i){i._dayOfYear=_(t)}),H("m",["mm",2],0,"minute"),A("minute","m"),F("minute",14),U("m",Xo),U("mm",Xo,Go),K(["m","mm"],pn);var os=it("Minutes",!1);H("s",["ss",2],0,"second"),A("second","s"),F("second",15),U("s",Xo),U("ss",Xo,Go),K(["s","ss"],fn);var ns=it("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),A("millisecond","ms"),F("millisecond",16),U("S",Jo,Yo),U("SS",Jo,Go),U("SSS",Jo,Vo);var ss;for(ss="SSSS";ss.length<=9;ss+="S")U(ss,tn);for(ss="S";ss.length<=9;ss+="S")K(ss,Gi);var rs=it("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var as=g.prototype;as.add=Qn,as.calendar=oi,as.clone=ni,as.diff=ui,as.endOf=Si,as.format=vi,as.from=gi,as.fromNow=yi,as.to=bi,as.toNow=_i,as.get=st,as.invalidAt=Ni,as.isAfter=si,as.isBefore=ri,as.isBetween=ai,as.isSame=hi,as.isSameOrAfter=di,as.isSameOrBefore=li,as.isValid=Pi,as.lang=es,as.locale=wi,as.localeData=xi,as.max=qn,as.min=Un,as.parsingFlags=Ii,as.set=rt,as.startOf=ki,as.subtract=ts,as.toArray=Oi,as.toObject=Ei,as.toDate=Ci,as.toISOString=fi,as.inspect=mi,as.toJSON=Ti,as.toString=pi,as.unix=Mi,as.valueOf=Di,as.creationData=Ri,as.year=bn,as.isLeapYear=et,as.weekYear=zi,as.isoWeekYear=Li,as.quarter=as.quarters=Wi,as.month=ft,as.daysInMonth=mt,as.week=as.weeks=Ot,as.isoWeek=as.isoWeeks=Et,as.weeksInYear=Bi,as.isoWeeksInYear=Fi,as.date=is,as.day=as.days=Lt,as.weekday=Ft,as.isoWeekday=Bt,as.dayOfYear=Yi,as.hour=as.hours=Rn,as.minute=as.minutes=os,as.second=as.seconds=ns,as.millisecond=as.milliseconds=rs,as.utcOffset=Be,as.utc=He,as.local=We,as.parseZone=Ye,as.hasAlignedHourOffset=Ge,as.isDST=Ve,as.isLocal=qe,as.isUtcOffset=Xe,as.isUtc=Ze,as.isUTC=Ze,as.zoneAbbr=Vi,as.zoneName=Ui,as.dates=k("dates accessor is deprecated. Use date instead.",is),as.months=k("months accessor is deprecated. Use month instead",ft),as.years=k("years accessor is deprecated. Use year instead",bn),as.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",je),as.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ue);var hs=O.prototype;hs.calendar=E,hs.longDateFormat=T,hs.invalidDate=P,hs.ordinal=I,hs.preparse=Zi,hs.postformat=Zi,hs.relativeTime=N,hs.pastFuture=R,hs.set=M,hs.months=dt,hs.monthsShort=lt,hs.monthsParse=ct,hs.monthsRegex=gt,hs.monthsShortRegex=vt,hs.week=Dt,hs.firstDayOfYear=Ct,hs.firstDayOfWeek=Mt,hs.weekdays=It,hs.weekdaysMin=Rt,hs.weekdaysShort=Nt,hs.weekdaysParse=zt,hs.weekdaysRegex=jt,hs.weekdaysShortRegex=Ht,hs.weekdaysMinRegex=Wt,hs.isPM=Xt,hs.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=k("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ie);var ds=Math.abs,ls=mo("ms"),us=mo("s"),cs=mo("m"),ps=mo("h"),fs=mo("d"),ms=mo("w"),vs=mo("M"),gs=mo("y"),ys=yo("milliseconds"),bs=yo("seconds"),_s=yo("minutes"),ws=yo("hours"),xs=yo("days"),ks=yo("months"),Ss=yo("years"),Ds=Math.round,Ms={ss:44,s:45,m:45,h:22,d:26,M:11},Cs=Math.abs,Os=Ie.prototype;return Os.isValid=Te,Os.abs=no,Os.add=ro,Os.subtract=ao,Os.as=po,Os.asMilliseconds=ls,Os.asSeconds=us,Os.asMinutes=cs,Os.asHours=ps,Os.asDays=fs,Os.asWeeks=ms,Os.asMonths=vs,Os.asYears=gs,Os.valueOf=fo,Os._bubble=lo,Os.clone=vo,Os.get=go,Os.milliseconds=ys,Os.seconds=bs,Os.minutes=_s,Os.hours=ws,Os.days=xs,Os.weeks=bo,Os.months=ks,Os.years=Ss,Os.humanize=So,Os.toISOString=Mo,Os.toString=Mo,Os.toJSON=Mo,Os.locale=wi,Os.localeData=xi,Os.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Mo),Os.lang=es,H("X",0,0,"unix"),H("x",0,0,"valueOf"),U("x",en),U("X",sn),K("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),K("x",function(t,e,i){i._d=new Date(_(t))}),e.version="2.19.1",function(t){Co=t}(De),e.fn=as,e.min=Ce,e.max=Oe,e.now=Xn,e.utc=u,e.unix=qi,e.months=Qi,e.isDate=a,e.locale=Qt,e.invalid=m,e.duration=Ke,e.isMoment=y,e.weekdays=eo,e.parseZone=Xi,e.localeData=ie,e.isDuration=Ne,e.monthsShort=to,e.weekdaysMin=oo,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=io,e.normalizeUnits=z,e.relativeTimeRounding=xo,e.relativeTimeThreshold=ko,e.calendarFormat=ii,e.prototype=as,e})}).call(e,i(155)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=156},function(t,e,i){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:g+1,d=a-v+(h-g)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>v)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=a,g=h,m=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var u=a/4294967296*1e4&268435455;s[n++]=u>>>8&255,s[n++]=255&u,s[n++]=u>>>24&15|16,s[n++]=u>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var c=t.node||f,p=0;p<6;p++)s[n+p]=c[p];return e||o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;a<16;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:void 0!==e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var p=r(),f=[1|p[0],p[1],p[2],p[3],p[4],p[5]],m=16383&(p[6]<<8|p[7]),v=0,g=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,i(158))},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Graph3d=i(161),e.graph3d={Camera:i(95),Filter:i(96),Point2d:i(91),Point3d:i(34),Slider:i(92),StepNumber:i(93)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){var o=i(7),n=o.JSON||(o.JSON={stringify:JSON.stringify});t.exports=function(t){return n.stringify.apply(n,arguments)}},function(t,e,i){function o(t,e,i){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.dataGroup=new _,this.dataPoints=null,this.create(),f.setDefaults(o.DEFAULTS,this),this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.setOptions(i),this.setData(e)}function n(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function s(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(90),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(44),d=i(2),l=i(34),u=i(91),c=i(92),p=i(93),f=i(94),m=i(15).default,v=i(15),g=v.printStyle,y=i(172),b=y.allOptions,_=i(173);o.STYLE=f.STYLE;o.DEFAULTS={width:"400px",height:"400px",filterLabel:"time",legendLabel:"value",xLabel:"x",yLabel:"y",zLabel:"z",xValueLabel:function(t){return t},yValueLabel:function(t){return t},zValueLabel:function(t){return t},showXAxis:!0,showYAxis:!0,showZAxis:!0,showGrid:!0,showPerspective:!0,showShadow:!1,keepAspectRatio:!0,verticalRatio:.5,dotSizeRatio:.02,dotSizeMinFraction:.5,dotSizeMaxFraction:2.5,showAnimationControls:void 0,animationInterval:1e3,animationPreload:!1,animationAutoStart:void 0,axisColor:"#4D4D4D",gridColor:"#D3D3D3",xCenter:"55%",yCenter:"50%",style:o.STYLE.DOT,tooltip:!1,tooltipStyle:{content:{padding:"10px",border:"1px solid #4d4d4d",color:"#1a1a1a",background:"rgba(255,255,255,0.7)",borderRadius:"2px",boxShadow:"5px 5px 10px rgba(128,128,128,0.5)"},line:{height:"40px",width:"0",borderLeft:"1px solid #4d4d4d"},dot:{height:"0",width:"0",border:"5px solid #4d4d4d",borderRadius:"5px"}},dataColor:{fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},cameraPosition:{horizontal:1,vertical:.5,distance:1.7},showLegend:void 0,backgroundColor:void 0,xBarWidth:void 0,yBarWidth:void 0,valueMin:void 0,valueMax:void 0,xMin:void 0,xMax:void 0,xStep:void 0,yMin:void 0,yMax:void 0,yStep:void 0,zMin:void 0,zMax:void 0,zStep:void 0},h(o.prototype),o.prototype._setScale=function(){this.scale=new l(1/this.xRange.range(),1/this.yRange.range(),1/this.zRange.range()),this.keepAspectRatio&&(this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y),this.scale.z*=this.verticalRatio,void 0!==this.valueRange&&(this.scale.value=1/this.valueRange.range());var t=this.xRange.center()*this.scale.x,e=this.yRange.center()*this.scale.y,i=this.zRange.center()*this.scale.z;this.camera.setArmLocation(t,e,i)},o.prototype._convert3Dto2D=function(t){var e=this._convertPointToTranslation(t);return this._convertTranslationToScreen(e)},o.prototype._convertPointToTranslation=function(t){var e=this.camera.getCameraLocation(),i=this.camera.getCameraRotation(),o=t.x*this.scale.x,n=t.y*this.scale.y,s=t.z*this.scale.z,r=e.x,a=e.y,h=e.z,d=Math.sin(i.x),u=Math.cos(i.x),c=Math.sin(i.y),p=Math.cos(i.y),f=Math.sin(i.z),m=Math.cos(i.z);return new l(p*(f*(n-a)+m*(o-r))-c*(s-h),d*(p*(s-h)+c*(f*(n-a)+m*(o-r)))+u*(m*(n-a)-f*(o-r)),u*(p*(s-h)+c*(f*(n-a)+m*(o-r)))-d*(m*(n-a)-f*(o-r)))},o.prototype._convertTranslationToScreen=function(t){var e,i,o=this.eye.x,n=this.eye.y,s=this.eye.z,r=t.x,a=t.y,h=t.z;return this.showPerspective?(e=s/h*(r-o),i=s/h*(a-n)):(e=r*(-s/this.camera.getArmLength()),i=a*(-s/this.camera.getArmLength())),new u(this.currentXCenter+e*this.frame.canvas.clientWidth,this.currentYCenter-i*this.frame.canvas.clientWidth)},o.prototype._calcTranslations=function(t){for(var e=0;e<t.length;e++){var i=t[e];i.trans=this._convertPointToTranslation(i.point),i.screen=this._convertTranslationToScreen(i.trans);var o=this._convertPointToTranslation(i.bottom);i.dist=this.showPerspective?o.length():-o.z}var n=function(t,e){return e.dist-t.dist};t.sort(n)},o.prototype._initializeRanges=function(){var t=this.dataGroup;this.xRange=t.xRange,this.yRange=t.yRange,this.zRange=t.zRange,this.valueRange=t.valueRange,this.xStep=t.xStep,this.yStep=t.yStep,this.zStep=t.zStep,this.xBarWidth=t.xBarWidth,this.yBarWidth=t.yBarWidth,this.colX=t.colX,this.colY=t.colY,this.colZ=t.colZ,this.colValue=t.colValue,this._setScale()},o.prototype.getDataPoints=function(t){for(var e=[],i=0;i<t.length;i++){var o=new l;o.x=t[i][this.colX]||0,o.y=t[i][this.colY]||0,o.z=t[i][this.colZ]||0,o.data=t[i],void 0!==this.colValue&&(o.value=t[i][this.colValue]||0);var n={};n.point=o,n.bottom=new l(o.x,o.y,this.zRange.min),n.trans=void 0,n.screen=void 0,e.push(n)}return e},o.prototype._getDataPoints=function(t){var e,i,n,s,r=[];if(this.style===o.STYLE.GRID||this.style===o.STYLE.SURFACE){var a=this.dataGroup.getDistinctValues(this.colX,t),h=this.dataGroup.getDistinctValues(this.colY,t);r=this.getDataPoints(t);var d=[];for(n=0;n<r.length;n++){s=r[n];var l=a.indexOf(s.point.x),u=h.indexOf(s.point.y);void 0===d[l]&&(d[l]=[]),d[l][u]=s}for(e=0;e<d.length;e++)for(i=0;i<d[e].length;i++)d[e][i]&&(d[e][i].pointRight=e<d.length-1?d[e+1][i]:void 0,d[e][i].pointTop=i<d[e].length-1?d[e][i+1]:void 0,d[e][i].pointCross=e<d.length-1&&i<d[e].length-1?d[e+1][i+1]:void 0)}else if(this._checkValueField(t),r=this.getDataPoints(t),this.style===o.STYLE.LINE)for(n=0;n<r.length;n++)n>0&&(r[n-1].pointNext=r[n]);return r},o.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),this.frame.filter=document.createElement("div"),this.frame.filter.style.position="absolute",this.frame.filter.style.bottom="0px",this.frame.filter.style.left="0px",this.frame.filter.style.width="100%",this.frame.appendChild(this.frame.filter);var e=this,i=function(t){e._onMouseDown(t)},o=function(t){e._onTouchStart(t)},n=function(t){e._onWheel(t)},s=function(t){e._onTooltip(t)},r=function(t){e._onClick(t)};d.addEventListener(this.frame.canvas,"mousedown",i),d.addEventListener(this.frame.canvas,"touchstart",o),d.addEventListener(this.frame.canvas,"mousewheel",n),d.addEventListener(this.frame.canvas,"mousemove",s),d.addEventListener(this.frame.canvas,"click",r),this.containerElement.appendChild(this.frame)},o.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},o.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},o.prototype.animationStart=function(){if(this.animationAutoStart&&this.dataGroup.dataFilter){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()}},o.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},o.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},o.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},o.prototype._readData=function(t){this.dataPoints=this.dataGroup.initializeData(this,t,this.style),this._initializeRanges(),this._redrawFilter()},o.prototype.setData=function(t){void 0!==t&&null!==t&&(this._readData(t),this.redraw(),this.animationStart())},o.prototype.setOptions=function(t){if(void 0!==t){!0===m.validate(t,b)&&console.log("%cErrors have been found in the supplied options object.",g),this.animationStop(),f.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.setData(this.dataGroup.getDataTable()),this.animationStart()}},o.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case o.STYLE.BAR:t=o.prototype._redrawBarGraphPoint;break;case o.STYLE.BARCOLOR:t=o.prototype._redrawBarColorGraphPoint;break;case o.STYLE.BARSIZE:t=o.prototype._redrawBarSizeGraphPoint;break;case o.STYLE.DOT:t=o.prototype._redrawDotGraphPoint;break;case o.STYLE.DOTLINE:t=o.prototype._redrawDotLineGraphPoint;break;case o.STYLE.DOTCOLOR:t=o.prototype._redrawDotColorGraphPoint;break;case o.STYLE.DOTSIZE:t=o.prototype._redrawDotSizeGraphPoint;break;case o.STYLE.SURFACE:t=o.prototype._redrawSurfaceGraphPoint;break;case o.STYLE.GRID:t=o.prototype._redrawGridGraphPoint;break;case o.STYLE.LINE:t=o.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},o.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},o.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},o.prototype._redrawClear=function(){var t=this.frame.canvas;t.getContext("2d").clearRect(0,0,t.width,t.height)},o.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},o.prototype._getLegendWidth=function(){var t;if(this.style===o.STYLE.DOTSIZE){t=this._dotSize()*this.dotSizeMaxFraction}else t=this.style===o.STYLE.BARSIZE?this.xBarWidth:20;return t},o.prototype._redrawLegend=function(){if(!0===this.showLegend&&this.style!==o.STYLE.LINE&&this.style!==o.STYLE.BARSIZE){var t=this.style===o.STYLE.BARSIZE||this.style===o.STYLE.DOTSIZE,e=this.style===o.STYLE.DOTSIZE||this.style===o.STYLE.DOTCOLOR||this.style===o.STYLE.BARCOLOR,i=Math.max(.25*this.frame.clientHeight,100),n=this.margin,s=this._getLegendWidth(),r=this.frame.clientWidth-this.margin,a=r-s,h=n+i,d=this._getContext();if(d.lineWidth=1,d.font="14px arial",!1===t){var l,c=i;for(l=0;l<c;l++){var f=(l-0)/(c-0),m=240*f,v=this._hsv2rgb(m,1,1);d.strokeStyle=v,d.beginPath(),d.moveTo(a,n+l),d.lineTo(r,n+l),d.stroke()}d.strokeStyle=this.axisColor,d.strokeRect(a,n,s,i)}else{var g;this.style===o.STYLE.DOTSIZE?g=s*(this.dotSizeMinFraction/this.dotSizeMaxFraction):(this.style,o.STYLE.BARSIZE),d.strokeStyle=this.axisColor,d.fillStyle=this.dataColor.fill,d.beginPath(),d.moveTo(a,n),d.lineTo(r,n),d.lineTo(a+g,h),d.lineTo(a,h),d.closePath(),d.fill(),d.stroke()}var y=e?this.valueRange.min:this.zRange.min,b=e?this.valueRange.max:this.zRange.max,_=new p(y,b,(b-y)/5,!0);_.start(!0);for(var w,x;!_.end();)l=h-(_.getCurrent()-y)/(b-y)*i,w=new u(a-5,l),x=new u(a,l),this._line(d,w,x),d.textAlign="right",d.textBaseline="middle",d.fillStyle=this.axisColor,d.fillText(_.getCurrent(),a-10,l),_.next();d.textAlign="right",d.textBaseline="top";var k=this.legendLabel;d.fillText(k,r,h+this.margin)}},o.prototype._redrawFilter=function(){var t=this.dataGroup.dataFilter,e=this.frame.filter;if(e.innerHTML="",!t)return void(e.slider=void 0);var i={visible:this.showAnimationControls},o=new c(e,i);e.slider=o,e.style.padding="10px",o.setValues(t.values),o.setPlayInterval(this.animationInterval);var n=this,s=function(){var t=n.dataGroup.dataFilter,e=o.getIndex();t.selectValue(e),n.dataPoints=t._getDataPoints(),n.redraw()};o.setOnChangeCallback(s)},o.prototype._redrawSlider=function(){void 0!==this.frame.filter.slider&&this.frame.filter.slider.redraw()},o.prototype._redrawInfo=function(){var t=this.dataGroup.getInfo();if(void 0!==t){var e=this._getContext();e.font="14px arial",e.lineStyle="gray",e.fillStyle="gray",e.textAlign="left",e.textBaseline="top";var i=this.margin,o=this.margin;e.fillText(t,i,o)}},o.prototype._line=function(t,e,i,o){void 0!==o&&(t.strokeStyle=o),t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(i.x,i.y),t.stroke()},o.prototype.drawAxisLabelX=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e)
+;Math.cos(2*o)>0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelY=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e);Math.cos(2*o)<0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelZ=function(t,e,i,o){void 0===o&&(o=0);var n=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(i,n.x-o,n.y)},o.prototype._line3d=function(t,e,i,o){var n=this._convert3Dto2D(e),s=this._convert3Dto2D(i);this._line(t,n,s,o)},o.prototype._redrawAxis=function(){var t,e,i,o,n,s,r,a,h,d,c,f=this._getContext();f.font=24/this.camera.getArmLength()+"px arial";var m,v=.025/this.scale.x,g=.025/this.scale.y,y=5/this.camera.getArmLength(),b=this.camera.getArmRotation().horizontal,_=new u(Math.cos(b),Math.sin(b)),w=this.xRange,x=this.yRange,k=this.zRange;for(f.lineWidth=1,o=void 0===this.defaultXStep,i=new p(w.min,w.max,this.xStep,o),i.start(!0);!i.end();){var S=i.getCurrent();if(this.showGrid?(t=new l(S,x.min,k.min),e=new l(S,x.max,k.min),this._line3d(f,t,e,this.gridColor)):this.showXAxis&&(t=new l(S,x.min,k.min),e=new l(S,x.min+v,k.min),this._line3d(f,t,e,this.axisColor),t=new l(S,x.max,k.min),e=new l(S,x.max-v,k.min),this._line3d(f,t,e,this.axisColor)),this.showXAxis){r=_.x>0?x.min:x.max,m=new l(S,r,k.min);var D="  "+this.xValueLabel(S)+"  ";this.drawAxisLabelX(f,m,D,b,y)}i.next()}for(f.lineWidth=1,o=void 0===this.defaultYStep,i=new p(x.min,x.max,this.yStep,o),i.start(!0);!i.end();){var M=i.getCurrent();if(this.showGrid?(t=new l(w.min,M,k.min),e=new l(w.max,M,k.min),this._line3d(f,t,e,this.gridColor)):this.showYAxis&&(t=new l(w.min,M,k.min),e=new l(w.min+g,M,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,M,k.min),e=new l(w.max-g,M,k.min),this._line3d(f,t,e,this.axisColor)),this.showYAxis){s=_.y>0?w.min:w.max,m=new l(s,M,k.min);var C="  "+this.yValueLabel(M)+"  ";this.drawAxisLabelY(f,m,C,b,y)}i.next()}if(this.showZAxis){for(f.lineWidth=1,o=void 0===this.defaultZStep,i=new p(k.min,k.max,this.zStep,o),i.start(!0),s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max;!i.end();){var O=i.getCurrent(),E=new l(s,r,O),T=this._convert3Dto2D(E);e=new u(T.x-y,T.y),this._line(f,T,e,this.axisColor);var P=this.zValueLabel(O)+" ";this.drawAxisLabelZ(f,E,P,5),i.next()}f.lineWidth=1,t=new l(s,r,k.min),e=new l(s,r,k.max),this._line3d(f,t,e,this.axisColor)}if(this.showXAxis){var I,N;f.lineWidth=1,I=new l(w.min,x.min,k.min),N=new l(w.max,x.min,k.min),this._line3d(f,I,N,this.axisColor),I=new l(w.min,x.max,k.min),N=new l(w.max,x.max,k.min),this._line3d(f,I,N,this.axisColor)}this.showYAxis&&(f.lineWidth=1,t=new l(w.min,x.min,k.min),e=new l(w.min,x.max,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,x.min,k.min),e=new l(w.max,x.max,k.min),this._line3d(f,t,e,this.axisColor));var R=this.xLabel;R.length>0&&this.showXAxis&&(c=.1/this.scale.y,s=(w.max+3*w.min)/4,r=_.x>0?x.min-c:x.max+c,n=new l(s,r,k.min),this.drawAxisLabelX(f,n,R,b));var A=this.yLabel;A.length>0&&this.showYAxis&&(d=.1/this.scale.x,s=_.y>0?w.min-d:w.max+d,r=(x.max+3*x.min)/4,n=new l(s,r,k.min),this.drawAxisLabelY(f,n,A,b));var z=this.zLabel;z.length>0&&this.showZAxis&&(h=30,s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max,a=(k.max+3*k.min)/4,n=new l(s,r,a),this.drawAxisLabelZ(f,n,z,h))},o.prototype._hsv2rgb=function(t,e,i){var o,n,s,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:o=r,n=h,s=0;break;case 1:o=h,n=r,s=0;break;case 2:o=0,n=r,s=h;break;case 3:o=0,n=h,s=r;break;case 4:o=h,n=0,s=r;break;case 5:o=r,n=0,s=h;break;default:o=0,n=0,s=0}return"RGB("+parseInt(255*o)+","+parseInt(255*n)+","+parseInt(255*s)+")"},o.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-this.eye.z/this.camera.getArmLength()*this.dataColor.strokeWidth:this.dataColor.strokeWidth},o.prototype._redrawBar=function(t,e,i,o,n,s){var r,a=this,h=e.point,d=this.zRange.min,u=[{point:new l(h.x-i,h.y-o,h.z)},{point:new l(h.x+i,h.y-o,h.z)},{point:new l(h.x+i,h.y+o,h.z)},{point:new l(h.x-i,h.y+o,h.z)}],c=[{point:new l(h.x-i,h.y-o,d)},{point:new l(h.x+i,h.y-o,d)},{point:new l(h.x+i,h.y+o,d)},{point:new l(h.x-i,h.y+o,d)}];u.forEach(function(t){t.screen=a._convert3Dto2D(t.point)}),c.forEach(function(t){t.screen=a._convert3Dto2D(t.point)});var p=[{corners:u,center:l.avg(c[0].point,c[2].point)},{corners:[u[0],u[1],c[1],c[0]],center:l.avg(c[1].point,c[0].point)},{corners:[u[1],u[2],c[2],c[1]],center:l.avg(c[2].point,c[1].point)},{corners:[u[2],u[3],c[3],c[2]],center:l.avg(c[3].point,c[2].point)},{corners:[u[3],u[0],c[0],c[3]],center:l.avg(c[0].point,c[3].point)}];e.surfaces=p;for(var f=0;f<p.length;f++){r=p[f];var m=this._convertPointToTranslation(r.center);r.dist=this.showPerspective?m.length():-m.z}p.sort(function(t,e){var i=e.dist-t.dist;return i||(t.corners===u?1:e.corners===u?-1:0)}),t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=s,t.fillStyle=n;for(var v=2;v<p.length;v++)r=p[v],this._polygon(t,r.corners)},o.prototype._polygon=function(t,e,i,o){if(!(e.length<2)){void 0!==i&&(t.fillStyle=i),void 0!==o&&(t.strokeStyle=o),t.beginPath(),t.moveTo(e[0].screen.x,e[0].screen.y);for(var n=1;n<e.length;++n){var s=e[n];t.lineTo(s.screen.x,s.screen.y)}t.closePath(),t.fill(),t.stroke()}},o.prototype._drawCircle=function(t,e,i,o,n){var s=this._calcRadius(e,n);t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=o,t.fillStyle=i,t.beginPath(),t.arc(e.screen.x,e.screen.y,s,0,2*Math.PI,!0),t.fill(),t.stroke()},o.prototype._getColorsRegular=function(t){var e=240*(1-(t.point.z-this.zRange.min)*this.scale.z/this.verticalRatio);return{fill:this._hsv2rgb(e,1,1),border:this._hsv2rgb(e,1,.8)}},o.prototype._getColorsColor=function(t){var e,i;if("string"==typeof t.point.value)e=t.point.value,i=t.point.value;else{var o=240*(1-(t.point.value-this.valueRange.min)*this.scale.value);e=this._hsv2rgb(o,1,1),i=this._hsv2rgb(o,1,.8)}return{fill:e,border:i}},o.prototype._getColorsSize=function(){return{fill:this.dataColor.fill,border:this.dataColor.stroke}},o.prototype._calcRadius=function(t,e){void 0===e&&(e=this._dotSize());var i;return i=this.showPerspective?e/-t.trans.z:e*(-this.eye.z/this.camera.getArmLength()),i<0&&(i=0),i},o.prototype._redrawBarGraphPoint=function(t,e){var i=this.xBarWidth/2,o=this.yBarWidth/2,n=this._getColorsRegular(e);this._redrawBar(t,e,i,o,n.fill,n.border)},o.prototype._redrawBarColorGraphPoint=function(t,e){var i=this.xBarWidth/2,o=this.yBarWidth/2,n=this._getColorsColor(e);this._redrawBar(t,e,i,o,n.fill,n.border)},o.prototype._redrawBarSizeGraphPoint=function(t,e){var i=(e.point.value-this.valueRange.min)/this.valueRange.range(),o=this.xBarWidth/2*(.8*i+.2),n=this.yBarWidth/2*(.8*i+.2),s=this._getColorsSize();this._redrawBar(t,e,o,n,s.fill,s.border)},o.prototype._redrawDotGraphPoint=function(t,e){var i=this._getColorsRegular(e);this._drawCircle(t,e,i.fill,i.border)},o.prototype._redrawDotLineGraphPoint=function(t,e){var i=this._convert3Dto2D(e.bottom);t.lineWidth=1,this._line(t,i,e.screen,this.gridColor),this._redrawDotGraphPoint(t,e)},o.prototype._redrawDotColorGraphPoint=function(t,e){var i=this._getColorsColor(e);this._drawCircle(t,e,i.fill,i.border)},o.prototype._redrawDotSizeGraphPoint=function(t,e){var i=this._dotSize(),o=(e.point.value-this.valueRange.min)/this.valueRange.range(),n=i*this.dotSizeMinFraction,s=i*this.dotSizeMaxFraction-n,r=n+s*o,a=this._getColorsSize();this._drawCircle(t,e,a.fill,a.border,r)},o.prototype._redrawSurfaceGraphPoint=function(t,e){var i=e.pointRight,o=e.pointTop,n=e.pointCross;if(void 0!==e&&void 0!==i&&void 0!==o&&void 0!==n){var s,r,a=!0;if(this.showGrayBottom||this.showShadow){var h=l.subtract(n.trans,e.trans),d=l.subtract(o.trans,i.trans),u=l.crossProduct(h,d),c=u.length();a=u.z>0}if(a){var p,f=(e.point.z+i.point.z+o.point.z+n.point.z)/4,m=240*(1-(f-this.zRange.min)*this.scale.z/this.verticalRatio);this.showShadow?(p=Math.min(1+u.x/c/2,1),s=this._hsv2rgb(m,1,p),r=s):(p=1,s=this._hsv2rgb(m,1,p),r=this.axisColor)}else s="gray",r=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var v=[e,i,n,o];this._polygon(t,v,s,r)}},o.prototype._drawGridLine=function(t,e,i){if(void 0!==e&&void 0!==i){var o=(e.point.z+i.point.z)/2,n=240*(1-(o-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(n,1,1),this._line(t,e.screen,i.screen)}},o.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},o.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},o.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t<this.dataPoints.length;t++){var i=this.dataPoints[t];this._pointDrawingMethod.call(this,e,i)}},o.prototype._storeMousePosition=function(t){this.startMouseX=n(t),this.startMouseY=s(t),this._startCameraOffset=this.camera.getOffset()},o.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this._storeMousePosition(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},o.prototype._onMouseMove=function(t){this.moving=!0,t=t||window.event;var e=parseFloat(n(t))-this.startMouseX,i=parseFloat(s(t))-this.startMouseY;if(t&&!0===t.ctrlKey){var o=.5*this.frame.clientWidth,r=.5*this.frame.clientHeight,a=(this._startCameraOffset.x||0)-e/o*this.camera.armLength*.8,h=(this._startCameraOffset.y||0)+i/r*this.camera.armLength*.8;this.camera.setOffset(a,h),this._storeMousePosition(t)}else{var l=this.startArmRotation.horizontal+e/200,u=this.startArmRotation.vertical+i/200,c=Math.sin(4/360*2*Math.PI);Math.abs(Math.sin(l))<c&&(l=Math.round(l/Math.PI)*Math.PI-.001),Math.abs(Math.cos(l))<c&&(l=(Math.round(l/Math.PI-.5)+.5)*Math.PI-.001),Math.abs(Math.sin(u))<c&&(u=Math.round(u/Math.PI)*Math.PI),Math.abs(Math.cos(u))<c&&(u=(Math.round(u/Math.PI-.5)+.5)*Math.PI),this.camera.setArmRotation(l,u)}this.redraw();var p=this.getCameraPosition();this.emit("cameraPositionChange",p),d.preventDefault(t)},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",this.leftButtonDown=!1,d.removeEventListener(document,"mousemove",this.onmousemove),d.removeEventListener(document,"mouseup",this.onmouseup),d.preventDefault(t)},o.prototype._onClick=function(t){if(this.onclick_callback){if(this.moving)this.moving=!1;else{var e=this.frame.getBoundingClientRect(),i=n(t)-e.left,o=s(t)-e.top,r=this._dataPointFromXY(i,o);r&&this.onclick_callback(r.point.data)}d.preventDefault(t)}},o.prototype._onTooltip=function(t){var e=this.frame.getBoundingClientRect(),i=n(t)-e.left,o=s(t)-e.top;if(this.showTooltip){if(this.tooltipTimeout&&clearTimeout(this.tooltipTimeout),this.leftButtonDown)return void this._hideTooltip();if(this.tooltip&&this.tooltip.dataPoint){var r=this._dataPointFromXY(i,o);r!==this.tooltip.dataPoint&&(r?this._showTooltip(r):this._hideTooltip())}else{var a=this;this.tooltipTimeout=setTimeout(function(){a.tooltipTimeout=null;var t=a._dataPointFromXY(i,o);t&&a._showTooltip(t)},300)}}},o.prototype._onTouchStart=function(t){this.touchDown=!0;var e=this;this.ontouchmove=function(t){e._onTouchMove(t)},this.ontouchend=function(t){e._onTouchEnd(t)},d.addEventListener(document,"touchmove",e.ontouchmove),d.addEventListener(document,"touchend",e.ontouchend),this._onMouseDown(t)},o.prototype._onTouchMove=function(t){this._onMouseMove(t)},o.prototype._onTouchEnd=function(t){this.touchDown=!1,d.removeEventListener(document,"touchmove",this.ontouchmove),d.removeEventListener(document,"touchend",this.ontouchend),this._onMouseUp(t)},o.prototype._onWheel=function(t){t||(t=window.event);var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this.camera.getArmLength(),o=i*(1-e/10);this.camera.setArmLength(o),this.redraw(),this._hideTooltip()}var n=this.getCameraPosition();this.emit("cameraPositionChange",n),d.preventDefault(t)},o.prototype._insideTriangle=function(t,e){function i(t){return t>0?1:t<0?-1:0}var o=e[0],n=e[1],s=e[2],r=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),a=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x)),h=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},o.prototype._dataPointFromXY=function(t,e){var i,n=null,s=null,r=null,a=new u(t,e);if(this.style===o.STYLE.BAR||this.style===o.STYLE.BARCOLOR||this.style===o.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var h=n.surfaces;if(h)for(var d=h.length-1;d>=0;d--){var l=h[d],c=l.corners,p=[c[0].screen,c[1].screen,c[2].screen],f=[c[2].screen,c[3].screen,c[0].screen];if(this._insideTriangle(a,p)||this._insideTriangle(a,f))return n}}else for(i=0;i<this.dataPoints.length;i++){n=this.dataPoints[i];var m=n.screen;if(m){var v=Math.abs(t-m.x),g=Math.abs(e-m.y),y=Math.sqrt(v*v+g*g);(null===r||y<r)&&y<100&&(r=y,s=n)}}return s},o.prototype.hasBars=function(t){return t==o.STYLE.BAR||t==o.STYLE.BARCOLOR||t==o.STYLE.BARSIZE},o.prototype._showTooltip=function(t){var e,i,o;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,o=this.tooltip.dom.dot):(e=document.createElement("div"),(0,a.default)(e.style,{},this.tooltipStyle.content),e.style.position="absolute",i=document.createElement("div"),(0,a.default)(i.style,{},this.tooltipStyle.line),i.style.position="absolute",o=document.createElement("div"),(0,a.default)(o.style,{},this.tooltipStyle.dot),o.style.position="absolute",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:o}}),this._hideTooltip(),this.tooltip.dataPoint=t,"function"==typeof this.showTooltip?e.innerHTML=this.showTooltip(t.point):e.innerHTML="<table><tr><td>"+this.xLabel+":</td><td>"+t.point.x+"</td></tr><tr><td>"+this.yLabel+":</td><td>"+t.point.y+"</td></tr><tr><td>"+this.zLabel+":</td><td>"+t.point.z+"</td></tr></table>",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,h=o.offsetWidth,d=o.offsetHeight,l=t.screen.x-n/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-n),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=l+"px",e.style.top=t.screen.y-r-s+"px",o.style.left=t.screen.x-h/2+"px",o.style.top=t.screen.y-d/2+"px"},o.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},o.prototype.setCameraPosition=function(t){f.setCameraPosition(t,this),this.redraw()},o.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=o},function(t,e,i){i(163),t.exports=i(7).Object.assign},function(t,e,i){var o=i(17);o(o.S+o.F,"Object",{assign:i(164)})},function(t,e,i){var o=i(33),n=i(63),s=i(42),r=i(41),a=i(78),h=Object.assign;t.exports=!h||i(28)(function(){var t={},e={},i=Symbol(),o="abcdefghijklmnopqrst";return t[i]=7,o.split("").forEach(function(t){e[t]=t}),7!=h({},t)[i]||Object.keys(h({},e)).join("")!=o})?function(t,e){for(var i=r(t),h=arguments.length,d=1,l=n.f,u=s.f;h>d;)for(var c,p=a(arguments[d++]),f=l?o(p).concat(l(p)):o(p),m=f.length,v=0;m>v;)u.call(p,c=f[v++])&&(i[c]=p[c]);return i}:h},function(t,e,i){t.exports={default:i(166),__esModule:!0}},function(t,e,i){i(167),t.exports=i(7).Math.sign},function(t,e,i){var o=i(17);o(o.S,"Math",{sign:i(168)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,i){t.exports={default:i(170),__esModule:!0}},function(t,e,i){i(171);var o=i(7).Object;t.exports=function(t,e,i){return o.defineProperty(t,e,i)}},function(t,e,i){var o=i(17);o(o.S+o.F*!i(21),"Object",{defineProperty:i(20).f})},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r={fill:{string:o},stroke:{string:o},strokeWidth:{number:s},__type__:{string:o,object:"object",undefined:"undefined"}},a={animationAutoStart:{boolean:n,undefined:"undefined"},animationInterval:{number:s},animationPreload:{boolean:n},axisColor:{string:o},backgroundColor:r,xBarWidth:{number:s,undefined:"undefined"},yBarWidth:{number:s,undefined:"undefined"},cameraPosition:{distance:{number:s},horizontal:{number:s},vertical:{number:s},__type__:{object:"object"}},xCenter:{string:o},yCenter:{string:o},dataColor:r,dotSizeMinFraction:{number:s},dotSizeMaxFraction:{number:s},dotSizeRatio:{number:s},filterLabel:{string:o},gridColor:{string:o},onclick:{function:"function"},keepAspectRatio:{boolean:n},xLabel:{string:o},yLabel:{string:o},zLabel:{string:o},legendLabel:{string:o},xMin:{number:s,undefined:"undefined"},yMin:{number:s,undefined:"undefined"},zMin:{number:s,undefined:"undefined"},xMax:{number:s,undefined:"undefined"},yMax:{number:s,undefined:"undefined"},zMax:{number:s,undefined:"undefined"},showAnimationControls:{boolean:n,undefined:"undefined"},showGrid:{boolean:n},showLegend:{boolean:n,undefined:"undefined"},showPerspective:{boolean:n},showShadow:{boolean:n},showXAxis:{boolean:n},showYAxis:{boolean:n},showZAxis:{boolean:n},xStep:{number:s,undefined:"undefined"},yStep:{number:s,undefined:"undefined"},zStep:{number:s,undefined:"undefined"},style:{number:s,string:["bar","bar-color","bar-size","dot","dot-line","dot-color","dot-size","line","grid","surface"]},tooltip:{boolean:n,function:"function"},tooltipStyle:{content:{color:{string:o},background:{string:o},border:{string:o},borderRadius:{string:o},boxShadow:{string:o},padding:{string:o},__type__:{object:"object"}},line:{borderLeft:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},dot:{border:{string:o},borderRadius:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},__type__:{object:"object"}},xValueLabel:{function:"function"},yValueLabel:{function:"function"},zValueLabel:{function:"function"},valueMax:{number:s,undefined:"undefined"},valueMin:{number:s,undefined:"undefined"},verticalRatio:{number:s},height:{string:o},width:{string:o},__type__:{object:"object"}};e.allOptions=a},function(t,e,i){function o(){this.dataTable=null}var n=i(11),s=i(12),r=i(174),a=i(96),h=i(94),d=i(34);o.prototype.initializeData=function(t,e,i){if(void 0!==e){Array.isArray(e)&&(e=new n(e));var o;if(!(e instanceof n||e instanceof s))throw new Error("Array, DataSet, or DataView expected");if(o=e.get(),0!=o.length){this.style=i,this.dataSet&&this.dataSet.off("*",this._onChange),this.dataSet=e,this.dataTable=o;var r=this;this._onChange=function(){t.setData(r.dataSet)},this.dataSet.on("*",this._onChange),this.colX="x",this.colY="y",this.colZ="z";var h=t.hasBars(i);if(h&&(void 0!==t.defaultXBarWidth?this.xBarWidth=t.defaultXBarWidth:this.xBarWidth=this.getSmallestDifference(o,this.colX)||1,void 0!==t.defaultYBarWidth?this.yBarWidth=t.defaultYBarWidth:this.yBarWidth=this.getSmallestDifference(o,this.colY)||1),this._initializeRange(o,this.colX,t,h),this._initializeRange(o,this.colY,t,h),this._initializeRange(o,this.colZ,t,!1),o[0].hasOwnProperty("style")){this.colValue="style";var d=this.getColumnRange(o,this.colValue);this._setRangeDefaults(d,t.defaultValueMin,t.defaultValueMax),this.valueRange=d}this.getDataTable()[0].hasOwnProperty("filter")&&void 0===this.dataFilter&&(this.dataFilter=new a(this,"filter",t),this.dataFilter.setOnLoadCallback(function(){t.redraw()}));return this.dataFilter?this.dataFilter._getDataPoints():this._getDataPoints(this.getDataTable())}}},o.prototype._collectRangeSettings=function(t,e){if(-1==["x","y","z"].indexOf(t))throw new Error("Column '"+t+"' invalid");var i=t.toUpperCase();return{barWidth:this[t+"BarWidth"],min:e["default"+i+"Min"],max:e["default"+i+"Max"],step:e["default"+i+"Step"],range_label:t+"Range",step_label:t+"Step"}},o.prototype._initializeRange=function(t,e,i,o){var n=this._collectRangeSettings(e,i),s=this.getColumnRange(t,e);o&&"z"!=e&&s.expand(n.barWidth/2),this._setRangeDefaults(s,n.min,n.max),this[n.range_label]=s,this[n.step_label]=void 0!==n.step?n.step:s.range()/5},o.prototype.getDistinctValues=function(t,e){void 0===e&&(e=this.dataTable);for(var i=[],o=0;o<e.length;o++){var n=e[o][t]||0;-1===i.indexOf(n)&&i.push(n)}return i.sort(function(t,e){return t-e})},o.prototype.getSmallestDifference=function(t,e){for(var i=this.getDistinctValues(t,e),o=null,n=1;n<i.length;n++){var s=i[n]-i[n-1];(null==o||o>s)&&(o=s)}return o},o.prototype.getColumnRange=function(t,e){for(var i=new r,o=0;o<t.length;o++){var n=t[o][e];i.adjust(n)}return i},o.prototype.getNumberOfRows=function(){return this.dataTable.length},o.prototype._setRangeDefaults=function(t,e,i){void 0!==e&&(t.min=e),void 0!==i&&(t.max=i),t.max<=t.min&&(t.max=t.min+1)},o.prototype.getDataTable=function(){return this.dataTable},o.prototype.getDataSet=function(){return this.dataSet},o.prototype.getDataPoints=function(t){for(var e=[],i=0;i<t.length;i++){var o=new d;o.x=t[i][this.colX]||0,o.y=t[i][this.colY]||0,o.z=t[i][this.colZ]||0,o.data=t[i],void 0!==this.colValue&&(o.value=t[i][this.colValue]||0);var n={};n.point=o,n.bottom=new d(o.x,o.y,this.zRange.min),n.trans=void 0,n.screen=void 0,e.push(n)}return e},o.prototype.initDataAsMatrix=function(t){var e,i,o,n,s=this.getDistinctValues(this.colX,t),r=this.getDistinctValues(this.colY,t),a=this.getDataPoints(t),h=[];for(o=0;o<a.length;o++){n=a[o];var d=s.indexOf(n.point.x),l=r.indexOf(n.point.y);void 0===h[d]&&(h[d]=[]),h[d][l]=n}for(e=0;e<h.length;e++)for(i=0;i<h[e].length;i++)h[e][i]&&(h[e][i].pointRight=e<h.length-1?h[e+1][i]:void 0,h[e][i].pointTop=i<h[e].length-1?h[e][i+1]:void 0,h[e][i].pointCross=e<h.length-1&&i<h[e].length-1?h[e+1][i+1]:void 0);return a},o.prototype.getInfo=function(){var t=this.dataFilter;if(t)return t.getLabel()+": "+t.getSelectedValue()},o.prototype.reload=function(){this.dataTable&&this.setData(this.dataTable)},o.prototype._getDataPoints=function(t){var e=[];if(this.style===h.STYLE.GRID||this.style===h.STYLE.SURFACE)e=this.initDataAsMatrix(t);else if(this._checkValueField(t),e=this.getDataPoints(t),this.style===h.STYLE.LINE)for(var i=0;i<e.length;i++)i>0&&(e[i-1].pointNext=e[i]);return e},o.prototype._checkValueField=function(t){if(this.style===h.STYLE.BARCOLOR||this.style===h.STYLE.BARSIZE||this.style===h.STYLE.DOTCOLOR||this.style===h.STYLE.DOTSIZE){if(void 0===this.colValue)throw new Error("Expected data to have  field 'style'  for graph style '"+this.style+"'");if(void 0===t[0][this.colValue])throw new Error("Expected data to have  field '"+this.colValue+"'  for graph style '"+this.style+"'")}},t.exports=o},function(t,e,i){function o(){this.min=void 0,this.max=void 0}o.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.max<t)&&(this.max=t))},o.prototype.combine=function(t){this.add(t.min),this.add(t.max)},o.prototype.expand=function(t){if(void 0!==t){var e=this.min-t,i=this.max+t;if(e>i)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=i}},o.prototype.range=function(){return this.max-this.min},o.prototype.center=function(){return(this.min+this.max)/2},t.exports=o},function(t,e,i){var o,n,s;!function(i){n=[],o=i,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a<s.length;a++)if(r=s[a]._handlers[e.type])for(var h=0;h<r.length&&!i;h++)r[h](e);n=n.parentNode}}var r=o||{preventDefault:!1};if(i.Manager){var a=i,h=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a(t,o),o)};return a.assign(h,a),h.Manager=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a.Manager(t,o),o)},h}var d=Object.create(i),l=i.element;return l.hammer||(l.hammer=[]),l.hammer.push(d),i.on("hammer.input",function(e){!0!==r.preventDefault&&r.preventDefault!==e.pointerType||e.preventDefault(),e.isFirst&&(t=e.target)}),d._handlers={},d.on=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o||(d._handlers[t]=o=[],i.on(t,s)),o.push(e)}),d},d.off=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o&&(o=e?o.filter(function(t){return t!==e}):[],o.length>0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o<t.length;)e.call(i,t[o],o,t),o++;else for(o in t)t.hasOwnProperty(o)&&e.call(i,t[o],o,t)}function u(t,e,i){var o="DEPRECATED METHOD: "+e+"\n"+i+" AT \n";return function(){var e=new Error("get-stack-trace"),i=e&&e.stack?e.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ft(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;o<t.length;){if(i&&t[o][i]==e||!i&&t[o]===e)return o;o++}return-1}function x(t){return Array.prototype.slice.call(t,0)}function k(t,e,i){for(var o=[],n=[],s=0;s<t.length;){var r=e?t[s][e]:t[s];w(n,r)<0&&o.push(t[s]),n[s]=r,s++}return i&&(o=e?o.sort(function(t,i){return t[e]>i[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s<mt.length;){if(i=mt[s],(o=i?i+n:e)in t)return o;s++}return a}function D(){return kt++}function M(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||n}function C(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){f(t.options.enable,[t])&&i.handler(e)},this.init()}function O(t){var e=t.options.inputClass;return new(e||(Mt?W:Ct?V:Dt?q:H))(t,E)}function E(t,e,i){var o=i.pointers.length,n=i.changedPointers.length,s=e&Et&&o-n==0,r=e&(Pt|It)&&o-n==0;i.isFirst=!!s,i.isFinal=!!r,s&&(t.session={}),i.eventType=e,T(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function T(t,e){var i=t.session,o=e.pointers,n=o.length;i.firstInput||(i.firstInput=N(e)),n>1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=R(o);e.timeStamp=_t(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=L(a,h),P(i,e),e.offsetDirection=z(e.deltaX,e.deltaY);var d=A(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=bt(d.x)>bt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?B(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Et&&s.eventType!==Pt||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=It&&(h>Ot||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=A(h,d,l);o=u.x,n=u.y,i=bt(u.x)>bt(u.y)?u.x:u.y,s=z(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:yt(t.pointers[i].clientX),clientY:yt(t.pointers[i].clientY)},i++;return{timeStamp:_t(),pointers:e,center:R(e),deltaX:t.deltaX,deltaY:t.deltaY}}function R(t){var e=t.length;if(1===e)return{x:yt(t[0].clientX),y:yt(t[0].clientY)};for(var i=0,o=0,n=0;n<e;)i+=t[n].clientX,o+=t[n].clientY,n++;return{x:yt(i/e),y:yt(o/e)}}function A(t,e,i){return{x:e/t||0,y:i/t||0}}function z(t,e){return t===e?Nt:bt(t)>=bt(e)?t<0?Rt:At:e<0?zt:Lt}function L(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function F(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function B(t,e){return F(e[1],e[0],Wt)+F(t[1],t[0],Wt)}function j(t,e){return L(e[0],e[1],Wt)/L(t[0],t[1],Wt)}function H(){this.evEl=Gt,this.evWin=Vt,this.pressed=!1,C.apply(this,arguments)}function W(){this.evEl=Xt,this.evWin=Zt,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Jt,this.evWin=$t,this.started=!1,C.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Pt|It)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=te,this.targetIds={},C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Et|Tt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Et)for(n=0;n<s.length;)o[s[n].identifier]=!0,n++;for(n=0;n<r.length;)o[r[n].identifier]&&a.push(r[n]),e&(Pt|It)&&delete o[r[n].identifier],n++;return a.length?[k(s.concat(a),"identifier",!0),a]:void 0}function q(){C.apply(this,arguments);var t=p(this.handler,this);this.touch=new V(this.manager,t),this.mouse=new H(this.manager,t),this.primaryTouch=null,this.lastTouches=[]}function X(t,e){t&Et?(this.primaryTouch=e.changedPointers[0].identifier,Z.call(this,e)):t&(Pt|It)&&Z.call(this,e)}function Z(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY};this.lastTouches.push(i);var o=this.lastTouches,n=function(){var t=o.indexOf(i);t>-1&&o.splice(t,1)};setTimeout(n,ee)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o<this.lastTouches.length;o++){var n=this.lastTouches[o],s=Math.abs(e-n.x),r=Math.abs(i-n.y);if(s<=ie&&r<=ie)return!0}return!1}function J(t,e){this.manager=t,this.set(e)}function $(t){if(b(t,ae))return ae;var e=b(t,he),i=b(t,de);return e&&i?ae:e||i?e?he:de:b(t,re)?re:se}function Q(t){this.options=ft({},this.defaults,t||{}),this.id=D(),this.manager=null,this.options.enable=m(this.options.enable,!0),this.state=ue,this.simultaneous={},this.requireFail=[]}
+function tt(t){return t&ve?"cancel":t&fe?"end":t&pe?"move":t&ce?"start":""}function et(t){return t==Lt?"down":t==zt?"up":t==Rt?"left":t==At?"right":""}function it(t,e){var i=e.manager;return i?i.get(t):t}function ot(){Q.apply(this,arguments)}function nt(){ot.apply(this,arguments),this.pX=null,this.pY=null}function st(){ot.apply(this,arguments)}function rt(){Q.apply(this,arguments),this._timer=null,this._input=null}function at(){ot.apply(this,arguments)}function ht(){ot.apply(this,arguments)}function dt(){Q.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function lt(t,e){return e=e||{},e.recognizers=m(e.recognizers,lt.defaults.preset),new ut(t,e)}function ut(t,e){this.options=ft({},lt.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=O(this),this.touchAction=new J(this,this.options.touchAction),ct(this,!0),l(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function ct(t,e){var i=t.element;if(i.style){var o;l(t.options.cssProps,function(n,s){o=S(i.style,s),e?(t.oldCssProps[o]=i.style[o],i.style[o]=n):i.style[o]=t.oldCssProps[o]||""}),e||(t.oldCssProps={})}}function pt(t,e){var i=s.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}var ft,mt=["","webkit","Moz","MS","ms","o"],vt=s.createElement("div"),gt="function",yt=Math.round,bt=Math.abs,_t=Date.now;ft="function"!=typeof Object.assign?function(t){if(t===a||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),i=1;i<arguments.length;i++){var o=arguments[i];if(o!==a&&null!==o)for(var n in o)o.hasOwnProperty(n)&&(e[n]=o[n])}return e}:Object.assign;var wt=u(function(t,e,i){for(var o=Object.keys(e),n=0;n<o.length;)(!i||i&&t[o[n]]===a)&&(t[o[n]]=e[o[n]]),n++;return t},"extend","Use `assign`."),xt=u(function(t,e){return wt(t,e,!0)},"merge","Use `assign`."),kt=1,St=/mobile|tablet|ip(ad|hone|od)|android/i,Dt="ontouchstart"in n,Mt=S(n,"PointerEvent")!==a,Ct=Dt&&St.test(navigator.userAgent),Ot=25,Et=1,Tt=2,Pt=4,It=8,Nt=1,Rt=2,At=4,zt=8,Lt=16,Ft=Rt|At,Bt=zt|Lt,jt=Ft|Bt,Ht=["x","y"],Wt=["clientX","clientY"];C.prototype={handler:function(){},init:function(){this.evEl&&v(this.element,this.evEl,this.domHandler),this.evTarget&&v(this.target,this.evTarget,this.domHandler),this.evWin&&v(M(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(M(this.element),this.evWin,this.domHandler)}};var Yt={mousedown:Et,mousemove:Tt,mouseup:Pt},Gt="mousedown",Vt="mousemove mouseup";c(H,C,{handler:function(t){var e=Yt[t.type];e&Et&&0===t.button&&(this.pressed=!0),e&Tt&&1!==t.which&&(e=Pt),this.pressed&&(e&Pt&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var Ut={pointerdown:Et,pointermove:Tt,pointerup:Pt,pointercancel:It,pointerout:It},qt={2:"touch",3:"pen",4:"mouse",5:"kinect"},Xt="pointerdown",Zt="pointermove pointerup pointercancel";n.MSPointerEvent&&!n.PointerEvent&&(Xt="MSPointerDown",Zt="MSPointerMove MSPointerUp MSPointerCancel"),c(W,C,{handler:function(t){var e=this.store,i=!1,o=t.type.toLowerCase().replace("ms",""),n=Ut[o],s=qt[t.pointerType]||t.pointerType,r="touch"==s,a=w(e,t.pointerId,"pointerId");n&Et&&(0===t.button||r)?a<0&&(e.push(t),a=e.length-1):n&(Pt|It)&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,n,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i&&e.splice(a,1))}});var Kt={touchstart:Et,touchmove:Tt,touchend:Pt,touchcancel:It},Jt="touchstart",$t="touchstart touchmove touchend touchcancel";c(Y,C,{handler:function(t){var e=Kt[t.type];if(e===Et&&(this.started=!0),this.started){var i=G.call(this,t,e);e&(Pt|It)&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}}});var Qt={touchstart:Et,touchmove:Tt,touchend:Pt,touchcancel:It},te="touchstart touchmove touchend touchcancel";c(V,C,{handler:function(t){var e=Qt[t.type],i=U.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}});var ee=2500,ie=25;c(q,C,{handler:function(t,e,i){var o="touch"==i.pointerType,n="mouse"==i.pointerType;if(!(n&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)X.call(this,e,i);else if(n&&K.call(this,i))return;this.callback(t,e,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var oe=S(vt.style,"touchAction"),ne=oe!==a,se="auto",re="manipulation",ae="none",he="pan-x",de="pan-y",le=function(){if(!ne)return!1;var t={},e=n.CSS&&n.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(i){t[i]=!e||n.CSS.supports("touch-action",i)}),t}();J.prototype={set:function(t){"compute"==t&&(t=this.compute()),ne&&this.manager.element.style&&le[t]&&(this.manager.element.style[oe]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),$(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=b(o,ae)&&!le[ae],s=b(o,de)&&!le[de],r=b(o,he)&&!le[he];if(n){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}return r&&s?void 0:n||s&&i&Ft||r&&i&Bt?this.preventSrc(e):void 0},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var ue=1,ce=2,pe=4,fe=8,me=fe,ve=16;Q.prototype={defaults:{},set:function(t){return ft(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=it(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=it(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=it(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=it(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<fe&&e(i.options.event+tt(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=fe&&e(i.options.event+tt(o))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|ue)))return!1;t++}return!0},recognize:function(t){var e=ft({},t);if(!f(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(me|ve|32)&&(this.state=ue),this.state=this.process(e),this.state&(ce|pe|fe|ve)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},c(ot,Q,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,i=t.eventType,o=e&(ce|pe),n=this.attrTest(t);return o&&(i&It||!n)?e|ve:o||n?i&Pt?e|fe:e&ce?e|pe:ce:32}}),c(nt,ot,{defaults:{event:"pan",threshold:10,pointers:1,direction:jt},getTouchAction:function(){var t=this.options.direction,e=[];return t&Ft&&e.push(de),t&Bt&&e.push(he),e},directionTest:function(t){var e=this.options,i=!0,o=t.distance,n=t.direction,s=t.deltaX,r=t.deltaY;return n&e.direction||(e.direction&Ft?(n=0===s?Nt:s<0?Rt:At,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?Nt:r<0?zt:Lt,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return ot.prototype.attrTest.call(this,t)&&(this.state&ce||!(this.state&ce)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(st,ot,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ce)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(rt,Q,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime>e.time;if(this._input=t,!o||!i||t.eventType&(Pt|It)&&!n)this.reset();else if(t.eventType&Et)this.reset(),this._timer=h(function(){this.state=me,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return me;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===me&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=_t(),this.manager.emit(this.options.event,this._input)))}}),c(at,ot,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ce)}}),c(ht,ot,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ft|Bt,pointers:1},getTouchAction:function(){return nt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ft|Bt)?e=t.overallVelocity:i&Ft?e=t.overallVelocityX:i&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&bt(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(dt,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime<e.time;if(this.reset(),t.eventType&Et&&0===this.count)return this.failTimeout();if(o&&n&&i){if(t.eventType!=Pt)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<e.interval,r=!this.pCenter||L(this.pCenter,t.center)<e.posThreshold;this.pTime=t.timeStamp,this.pCenter=t.center,r&&s?this.count+=1:this.count=1,this._input=t;if(0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=h(function(){this.state=me,this.tryEmit()},e.interval,this),ce):me}return 32},failTimeout:function(){return this._timer=h(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==me&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),lt.VERSION="2.0.7",lt.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[at,{enable:!1}],[st,{enable:!1},["rotate"]],[ht,{direction:Ft}],[nt,{direction:Ft},["swipe"]],[dt],[dt,{event:"doubletap",taps:2},["tap"]],[rt]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};ut.prototype={set:function(t){return ft(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){this.touchAction.preventDefaults(t);var i,o=this.recognizers,n=e.curRecognizer;(!n||n&&n.state&me)&&(n=e.curRecognizer=null);for(var s=0;s<o.length;)i=o[s],2===e.stopped||n&&i!=n&&!i.canRecognizeWith(n)?i.reset():i.recognize(t),!n&&i.state&(ce|pe|fe)&&(n=e.curRecognizer=i),s++}},get:function(t){if(t instanceof Q)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event==t)return e[i];return null},add:function(t){if(d(t,"add",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(d(t,"remove",this))return this;if(t=this.get(t)){var e=this.recognizers,i=w(e,t);-1!==i&&(e.splice(i,1),this.touchAction.update())}return this},on:function(t,e){if(t!==a&&e!==a){var i=this.handlers;return l(_(t),function(t){i[t]=i[t]||[],i[t].push(e)}),this}},off:function(t,e){if(t!==a){var i=this.handlers;return l(_(t),function(t){e?i[t]&&i[t].splice(w(i[t],e),1):delete i[t]}),this}},emit:function(t,e){this.options.domEvents&&pt(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var o=0;o<i.length;)i[o](e),o++}},destroy:function(){this.element&&ct(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},ft(lt,{INPUT_START:Et,INPUT_MOVE:Tt,INPUT_END:Pt,INPUT_CANCEL:It,STATE_POSSIBLE:ue,STATE_BEGAN:ce,STATE_CHANGED:pe,STATE_ENDED:fe,STATE_RECOGNIZED:me,STATE_CANCELLED:ve,STATE_FAILED:32,DIRECTION_NONE:Nt,DIRECTION_LEFT:Rt,DIRECTION_RIGHT:At,DIRECTION_UP:zt,DIRECTION_DOWN:Lt,DIRECTION_HORIZONTAL:Ft,DIRECTION_VERTICAL:Bt,DIRECTION_ALL:jt,Manager:ut,Input:C,TouchAction:J,TouchInput:V,MouseInput:H,PointerEventInput:W,TouchMouseInput:q,SingleTouchInput:Y,Recognizer:Q,AttrRecognizer:ot,Tap:dt,Pan:nt,Swipe:ht,Pinch:st,Rotate:at,Press:rt,on:v,off:g,each:l,merge:xt,extend:wt,assign:ft,inherit:c,bindFn:p,prefixed:S}),(void 0!==n?n:"undefined"!=typeof self?self:{}).Hammer=lt,(o=function(){return lt}.call(e,i,e,t))!==a&&(t.exports=o)}(window,document)},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Timeline=i(178),e.Graph2d=i(180),e.timeline={Core:i(65),DateUtil:i(36),Range:i(64),stack:i(100),TimeStep:i(66),components:{items:{Item:i(38),BackgroundItem:i(103),BoxItem:i(101),PointItem:i(102),RangeItem:i(70)},BackgroundGroup:i(69),Component:i(16),CurrentTime:i(67),CustomTime:i(46),DataAxis:i(107),DataScale:i(108),GraphGroup:i(109),Group:i(68),ItemSet:i(99),Legend:i(112),LineGraph:i(106),TimeAxis:i(45)}},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){function o(t,e,i,n){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof d||i instanceof l)&&i instanceof Object){var s=n;n=i,i=s}n&&n.throttleRedraw&&console.warn('Timeline option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var r=this;if(this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:a,width:null,height:null,maxHeight:null,minHeight:null},this.options=h.deepExtend({},this.defaultOptions),this._create(t),!n||n&&void 0===n.rtl){this.dom.root.style.visibility="hidden";for(var c,m=this.dom.root;!c&&m;)c=window.getComputedStyle(m,null).direction,m=m.parentElement;this.options.rtl=c&&"rtl"==c.toLowerCase()}else this.options.rtl=n.rtl;this.options.rollingMode=n&&n.rollingMode,this.options.onInitialDrawComplete=n&&n.onInitialDrawComplete,this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{getScale:function(){return r.timeAxis.step.scale},getStep:function(){return r.timeAxis.step.step},toScreen:r._toScreen.bind(r),toGlobalScreen:r._toGlobalScreen.bind(r),toTime:r._toTime.bind(r),toGlobalTime:r._toGlobalTime.bind(r)}},this.range=new u(this.body,this.options),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new p(this.body,this.options),this.timeAxis2=null,this.components.push(this.timeAxis),this.currentTime=new f(this.body,this.options),this.components.push(this.currentTime),this.itemSet=new v(this.body,this.options),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,this.dom.root.onclick=function(t){r.emit("click",r.getEventProperties(t))},this.dom.root.ondblclick=function(t){r.emit("doubleClick",r.getEventProperties(t))},this.dom.root.oncontextmenu=function(t){r.emit("contextmenu",r.getEventProperties(t))},this.dom.root.onmouseover=function(t){r.emit("mouseOver",r.getEventProperties(t))},window.PointerEvent?(this.dom.root.onpointerdown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onpointermove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onpointerup=function(t){r.emit("mouseUp",r.getEventProperties(t))}):(this.dom.root.onmousemove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onmousedown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onmouseup=function(t){r.emit("mouseUp",r.getEventProperties(t))}),this.initialFitDone=!1,this.on("changed",function(){if(null!=this.itemsData&&!this.options.rollingMode){if(!r.initialFitDone)if(r.initialFitDone=!0,void 0!=r.options.start||void 0!=r.options.end){if(void 0==r.options.start||void 0==r.options.end)var t=r.getItemRange();var e=void 0!=r.options.start?r.options.start:t.min,i=void 0!=r.options.end?r.options.end:t.max;r.setWindow(e,i,{animation:!1})}else r.fit({animation:!1});!r.initialDrawDone&&r.initialRangeChangeDone&&(r.initialDrawDone=!0,r.dom.root.style.visibility="visible",r.options.onInitialDrawComplete&&setTimeout(function(){return r.options.onInitialDrawComplete()},0))}}),n&&this.setOptions(n),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}function n(t){return h.convert(t.data.start,"Date").valueOf()}function s(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return h.convert(e,"Date").valueOf()}function r(t,e){var i=t.props.leftContainer.height,o=t.props.left.height,n=e.parent,s=n.top,r=!0,a=t.timeAxis.options.orientation.axis,h=function(){return"bottom"==a?n.height-e.top-e.height:e.top},d=-1*t._getScrollTop(),l=s+h(),u=e.height;return l<d?s+i<=s+h()+u&&(s+=h()-t.itemSet.options.margin.item.vertical):l+u>d+i?s+=h()+u-i+t.itemSet.options.margin.item.vertical:r=!1,s=Math.min(s,o-i),{shouldScroll:r,scrollOffset:s,itemTop:l}}var a=i(9),h=i(2),d=i(11),l=i(12),u=i(64),c=i(65),p=i(45),f=i(67),m=i(46),v=i(99),g=i(15).printStyle,y=i(105).allOptions,b=i(105).configureOptions,_=i(71).default,w=i(15).default;o.prototype=new c,o.prototype._createConfigurator=function(){return new _(this,this.dom.container,b)},o.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},o.prototype.setOptions=function(t){if(!0===w.validate(t,y)&&console.log("%cErrors have been found in the supplied options object.",g),c.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var e=this.itemsData;if(e){var i=this.getSelection();this.setItems(null),this.setItems(e),this.setSelection(i)}}},o.prototype.setItems=function(t){var e;e=t?t instanceof d||t instanceof l?t:new d(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},o.prototype.setGroups=function(t){var e;if(t){var i=function(t){return!1!==t.visible};e=t instanceof d||t instanceof l?new l(t,{filter:i}):new d(t.filter(i))}else e=null;this.groupsData=e,this.itemSet.setGroups(e)},o.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},o.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},o.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},o.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||e<n)&&(n=e),(null===s||i>s)&&(s=i)}),null!==n&&null!==s){var a=this,h=this.itemSet.items[i[0]],d=-1*this._getScrollTop(),l=null,u=function(t,e,i){var o=r(a,h);if(l||(l=o),l.itemTop!=o.itemTop||l.shouldScroll){l.itemTop!=o.itemTop&&o.shouldScroll&&(l=o,d=-1*a._getScrollTop());var n=d,s=l.scrollOffset,u=i?s:n+(s-n)*t;a._setScrollTop(-u),e||a._redraw()}},c=function(){var t=r(a,h);t.shouldScroll&&t.itemTop!=l.itemTop&&(a._setScrollTop(-t.scrollOffset),a._redraw())},p=function(){c(),setTimeout(c,100)},f=(n+s)/2,m=Math.max(this.range.end-this.range.start,1.1*(s-n)),v=!e||void 0===e.animation||e.animation;v||(l={shouldScroll:!1,scrollOffset:-1,itemTop:-1}),this.range.setRange(f-m/2,f+m/2,{animation:v},p,u)}}},o.prototype.fit=function(t,e){var i,o=!t||void 0===t.animation||t.animation,n=this.itemsData&&this.itemsData.getDataSet();1===n.length&&void 0===n.get()[0].end?(i=this.getDataRange(),this.moveTo(i.min.valueOf(),{animation:o},e)):(i=this.getItemRange(),this.range.setRange(i.min,i.max,{animation:o},e))},o.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,r=null;if(null!=e&&null!=i){var a=i-e;a<=0&&(a=10);var d=a/this.props.center.width,l={},u=0;h.forEach(this.itemSet.items,function(t,e){if(t.groupShowing){l[e]=t.redraw(!0),u=l[e].length}});if(u>0)for(var c=0;c<u;c++)h.forEach(l,function(t){t[c]()});if(h.forEach(this.itemSet.items,function(t){var a,h,l=n(t),u=s(t);this.options.rtl?(a=l-(t.getWidthRight()+10)*d,h=u+(t.getWidthLeft()+10)*d):(a=l-(t.getWidthLeft()+10)*d,h=u+(t.getWidthRight()+10)*d),a<e&&(e=a,o=t),h>i&&(i=h,r=t)}.bind(this)),o&&r){var p=o.getWidthLeft()+10,f=r.getWidthRight()+10,m=this.props.center.width-p-f;m>0&&(this.options.rtl?(e=n(o)-f*a/m,i=s(r)+p*a/m):(e=n(o)-p*a/m,i=s(r)+f*a/m))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},o.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=h.convert(i.start,"Date").valueOf(),n=h.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||o<t)&&(t=o),(null===e||n>e)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e,i=t.center?t.center.x:t.clientX,o=t.center?t.center.y:t.clientY;e=this.options.rtl?h.getAbsoluteRight(this.dom.centerContainer)-i:i-h.getAbsoluteLeft(this.dom.centerContainer);var n=o-h.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=m.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),c=this._toTime(e),p=d?d(c,l,u):c,f=h.getTarget(t),v=null;return null!=s?v="item":null!=a?v="custom-time":h.hasParent(f,this.timeAxis.dom.foreground)?v="axis":this.timeAxis2&&h.hasParent(f,this.timeAxis2.dom.foreground)?v="axis":h.hasParent(f,this.itemSet.dom.labelSet)?v="group-label":h.hasParent(f,this.currentTime.bar)?v="current-time":h.hasParent(f,this.dom.center)&&(v="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:v,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:e,y:n,time:c,snappedTime:p}},o.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(10),u=i(37),c=i(2),p=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),!0===c.isString(t)){if(!0===c.isValidRGB(t)){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(!0===c.isValidRGBA(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===c.isValidHex(t)){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=c.extend({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=c.extend({},t)),this.color=t;var e=c.RGBToHSV(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,n=this.centerCoordinates.x+o*Math.sin(i*e.h),s=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=n-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d")
+;this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/this.r,d=void 0;for(s=0;s<360;s++)for(r=0;r<this.r;r++)o=this.centerCoordinates.x+r*Math.sin(a*s),n=this.centerCoordinates.y+r*Math.cos(a*s),d=c.HSVToRGB(s*(1/360),r*h,1),t.fillStyle="rgb("+d.r+","+d.g+","+d.b+")",t.fillRect(o-.5,n-.5,2,2);t.strokeStyle="rgba(0,0,0,1)",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,e,i)}this.generated=!0}},{key:"_moveSelector",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,o=t.center.y-e.top,n=.5*this.colorPickerDiv.clientHeight,s=.5*this.colorPickerDiv.clientWidth,r=i-s,a=o-n,h=Math.atan2(r,a),d=.98*Math.min(Math.sqrt(r*r+a*a),s),l=Math.cos(h)*d+n,u=Math.sin(h)*d+s;this.colorPickerSelector.style.top=l-.5*this.colorPickerSelector.clientHeight+"px",this.colorPickerSelector.style.left=u-.5*this.colorPickerSelector.clientWidth+"px";var p=h/(2*Math.PI);p=p<0?p+1:p;var f=d/this.r,m=c.RGBToHSV(this.color.r,this.color.g,this.color.b);m.h=p,m.s=f;var v=c.HSVToRGB(m.h,m.s,m.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),t}();e.default=p},function(t,e,i){function o(t,e,i,o){if(!(Array.isArray(i)||i instanceof r||i instanceof a)&&i instanceof Object){var d=o;o=i,i=d}o&&o.throttleRedraw&&console.warn('Graph2d option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var c=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:n,width:null,height:null,maxHeight:null,minHeight:null},this.options=s.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{toScreen:c._toScreen.bind(c),toGlobalScreen:c._toGlobalScreen.bind(c),toTime:c._toTime.bind(c),toGlobalTime:c._toGlobalTime.bind(c)}},this.range=new h(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.currentTime=new u(this.body),this.components.push(this.currentTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){c.emit("click",c.getEventProperties(t))}),this.on("doubletap",function(t){c.emit("doubleClick",c.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){c.emit("contextmenu",c.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var n=i(9),s=i(2),r=i(11),a=i(12),h=i(64),d=i(65),l=i(45),u=i(67),c=i(46),p=i(106),f=i(15).printStyle,m=i(113).allOptions,v=i(113).configureOptions,g=i(71).default,y=i(15).default;o.prototype=new d,o.prototype.setOptions=function(t){!0===y.validate(t,m)&&console.log("%cErrors have been found in the supplied options object.",f),d.prototype.setOptions.call(this,t)},o.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof r||t instanceof a?t:new r(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},o.prototype.setGroups=function(t){var e;e=t?t instanceof r||t instanceof a?t:new r(t):null,this.groupsData=e,this.linegraph.setGroups(e)},o.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:'"+t+"'"},o.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]&&(this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]))},o.prototype.getDataRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var o=0;o<this.linegraph.groups[i].itemsData.length;o++){var n=this.linegraph.groups[i].itemsData[o],r=s.convert(n.x,"Date").valueOf();t=null==t?r:t>r?r:t,e=null==e?r:e<r?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-s.getAbsoluteLeft(this.dom.centerContainer),n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this._toTime(o),a=c.customTimeFromTarget(t),h=s.getTarget(t),d=null;s.hasParent(h,this.timeAxis.dom.foreground)?d="axis":this.timeAxis2&&s.hasParent(h,this.timeAxis2.dom.foreground)?d="axis":s.hasParent(h,this.linegraph.yAxisLeft.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.yAxisRight.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.legendLeft.dom.frame)?d="legend":s.hasParent(h,this.linegraph.legendRight.dom.frame)?d="legend":null!=a?d="custom-time":s.hasParent(h,this.currentTime.bar)?d="current-time":s.hasParent(h,this.dom.center)&&(d="background");var l=[],u=this.linegraph.yAxisLeft,p=this.linegraph.yAxisRight;return!u.hidden&&this.itemsData.length>0&&l.push(u.screenToValue(n)),!p.hidden&&this.itemsData.length>0&&l.push(p.screenToValue(n)),{event:t,what:d,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:r,value:l}},o.prototype._createConfigurator=function(){return new g(this,this.dom.container,v)},t.exports=o},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Network=i(182),e.network={Images:i(116),dotparser:i(114),gephiParser:i(115),allOptions:i(122)},e.network.convertDot=function(t){return e.network.dotparser.DOTToGraph(t)},e.network.convertGephi=function(t,i){return e.network.gephiParser.parseGephi(t,i)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){function o(t,e,i){var n=this;if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:d,clickToUse:!1},s.extend(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this),once:this.once.bind(this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}}},this.bindEventListeners(),this.images=new l(function(){return n.body.emitter.emit("_requestRedraw")}),this.groups=new u,this.canvas=new g(this.body),this.selectionHandler=new _(this.body,this.canvas),this.interactionHandler=new b(this.body,this.canvas,this.selectionHandler),this.view=new y(this.body,this.canvas),this.renderer=new v(this.body,this.canvas),this.physics=new f(this.body),this.layoutEngine=new w(this.body),this.clustering=new m(this.body),this.manipulation=new x(this.body,this.canvas,this.selectionHandler),this.nodesHandler=new c(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new p(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new T(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}i(183);var n=i(44),s=i(2),r=i(114),a=i(115),h=i(97),d=i(184),l=i(116).default,u=i(186).default,c=i(187).default,p=i(214).default,f=i(220).default,m=i(227).default,v=i(229).default,g=i(230).default,y=i(231).default,b=i(232).default,_=i(234).default,w=i(235).default,x=i(237).default,k=i(71).default,S=i(15).default,D=i(15),M=D.printStyle,C=i(122),O=C.allOptions,E=C.configureOptions,T=i(238).default;n(o.prototype),o.prototype.setOptions=function(t){var e=this;if(void 0!==t){!0===S.validate(t,O)&&console.log("%cErrors have been found in the supplied options object.",M);var i=["locale","locales","clickToUse"];if(s.selectiveDeepExtend(i,this.options,t),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new k(this,this.body.container,E,this.canvas.pixelRatio)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var o={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};s.deepExtend(o.nodes,this.nodesHandler.options),s.deepExtend(o.edges,this.edgesHandler.options),s.deepExtend(o.layout,this.layoutEngine.options),s.deepExtend(o.interaction,this.selectionHandler.options),s.deepExtend(o.interaction,this.renderer.options),s.deepExtend(o.interaction,this.interactionHandler.options),s.deepExtend(o.manipulation,this.manipulation.options),s.deepExtend(o.physics,this.physics.options),s.deepExtend(o.global,this.canvas.options),s.deepExtend(o.global,this.options),this.configurator.setModuleOptions(o)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new h(this.canvas.frame),this.activator.on("change",function(){e.body.emitter.emit("activate")})):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},o.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(var i in t)t.hasOwnProperty(i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],s=t[n.fromId],r=t[n.toId],a=void 0!==s&&void 0!==r,h=!this.clustering._isClusteredEdge(o)&&!1===n.options.hidden&&a&&!1===s.options.hidden&&!1===r.options.hidden;h&&this.body.edgeIndices.push(n.id)}},o.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.edgesHandler._updateState(),t.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit("startSimulation"),t.body.emitter.emit("_requestRedraw")})},o.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or  parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.log("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var e=r.DOTToGraph(t.dot);return void this.setData(e)}if(t&&t.gephi){console.log("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=a.parseGephi(t.gephi);return void this.setData(i)}this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},o.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(var t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&delete this.body.nodes[t];for(var e in this.body.edges)this.body.edges.hasOwnProperty(e)&&delete this.body.edges[e];s.recursiveDOMDelete(this.body.container)},o.prototype._updateValueRange=function(t){var e,i=void 0,o=void 0,n=0;for(e in t)if(t.hasOwnProperty(e)){var s=t[e].getValue();void 0!==s&&(i=void 0===i?s:Math.min(s,i),o=void 0===o?s:Math.max(s,o),n+=s)}if(void 0!==i&&void 0!==o)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,o,n)},o.prototype.isActive=function(){return!this.activator||this.activator.active},o.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},o.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},o.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},o.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},o.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},o.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},o.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},o.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},o.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},o.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},o.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},o.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},o.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},o.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},o.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},o.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.editNodeMode=function(){return console.log("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},o.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},o.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},o.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},o.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},o.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},o.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},o.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},o.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},o.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},o.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},o.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},o.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},o.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},o.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments)},o.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments)},o.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},o.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},o.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.redraw()},o.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},o.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},o.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},o.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},o.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},o.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},o.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},o.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t},t.exports=o},function(t,e,i){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath(),i*=1.15,e+=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e-(r-s)),this.lineTo(t+n,e+s),this.lineTo(t-n,e+s),this.lineTo(t,e-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath(),i*=1.15,e-=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e+(r-s)),this.lineTo(t+n,e-s),this.lineTo(t-n,e-s),this.lineTo(t,e+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath(),i*=.82,e+=.1*i;for(var o=0;o<10;o++){var n=o%2==0?1.3*i:.5*i;this.lineTo(t+n*Math.sin(2*o*Math.PI/10),e-n*Math.cos(2*o*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(t,e,i){this.beginPath(),this.lineTo(t,e+i),this.lineTo(t+i,e),this.lineTo(t,e-i),this.lineTo(t-i,e),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,o,n){var s=Math.PI/180;i-2*n<0&&(n=i/2),o-2*n<0&&(n=o/2),this.beginPath(),this.moveTo(t+n,e),this.lineTo(t+i-n,e),this.arc(t+i-n,e+n,n,270*s,360*s,!1),this.lineTo(t+i,e+o-n),this.arc(t+i-n,e+o-n,n,0,90*s,!1),this.lineTo(t+n,e+o),this.arc(t+n,e+o-n,n,90*s,180*s,!1),this.lineTo(t,e+n),this.arc(t+n,e+n,n,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse_vis=function(t,e,i,o){var n=i/2*.5522848,s=o/2*.5522848,r=t+i,a=e+o,h=t+i/2,d=e+o/2;this.beginPath(),this.moveTo(t,d),this.bezierCurveTo(t,d-s,h-n,e,h,e),this.bezierCurveTo(h+n,e,r,d-s,r,d),this.bezierCurveTo(r,d+s,h+n,a,h,a),this.bezierCurveTo(h-n,a,t,d+s,t,d),this.closePath()},CanvasRenderingContext2D.prototype.database=function(t,e,i,o){var n=i,s=o*(1/3),r=n/2*.5522848,a=s/2*.5522848,h=t+n,d=e+s,l=t+n/2,u=e+s/2,c=e+(o-s/2),p=e+o;this.beginPath(),this.moveTo(h,u),this.bezierCurveTo(h,u+a,l+r,d,l,d),this.bezierCurveTo(l-r,d,t,u+a,t,u),this.bezierCurveTo(t,u-a,l-r,e,l,e),this.bezierCurveTo(l+r,e,h,u-a,h,u),this.lineTo(h,c),this.bezierCurveTo(h,c+a,l+r,p,l,p),this.bezierCurveTo(l-r,p,t,c+a,t,c),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,o,n){this.beginPath(),this.moveTo(t,e);for(var s=n.length,r=i-t,a=o-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,u=!0,c=0,p=n[0];d>=.1;)p=n[l++%s],p>d&&(p=d),c=Math.sqrt(p*p/(1+h*h)),c=r<0?-c:c,t+=c,e+=h*c,!0===u?this.lineTo(t,e):this.moveTo(t,e),d-=p,u=!u},CanvasRenderingContext2D.prototype.hexagon=function(t,e,i){this.beginPath();var o=2*Math.PI/6;this.moveTo(t+i,e);for(var n=1;n<6;n++)this.lineTo(t+i*Math.cos(o*n),e+i*Math.sin(o*n));this.closePath()})},function(t,e,i){e.en={edit:"Edit",del:"Delete selected",back:"Back",addNode:"Add Node",addEdge:"Add Edge",editNode:"Edit Node",editEdge:"Edit Edge",addDescription:"Click in an empty space to place a new node.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",createEdgeError:"Cannot link edges to a cluster.",deleteClusterError:"Clusters cannot be deleted.",editClusterError:"Clusters cannot be edited."},e.en_EN=e.en,e.en_US=e.en,e.de={edit:"Editieren",del:"Lösche Auswahl",back:"Zurück",addNode:"Knoten hinzufügen",addEdge:"Kante hinzufügen",editNode:"Knoten editieren",editEdge:"Kante editieren",addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",deleteClusterError:"Cluster können nicht gelöscht werden.",editClusterError:"Cluster können nicht editiert werden."},e.de_DE=e.de,e.es={edit:"Editar",del:"Eliminar selección",back:"Átras",addNode:"Añadir nodo",addEdge:"Añadir arista",editNode:"Editar nodo",editEdge:"Editar arista",addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",createEdgeError:"No se puede conectar una arista a un grupo.",deleteClusterError:"No es posible eliminar grupos.",editClusterError:"No es posible editar grupos."},e.es_ES=e.es,e.it={edit:"Modifica",del:"Cancella la selezione",back:"Indietro",addNode:"Aggiungi un nodo",addEdge:"Aggiungi un vertice",editNode:"Modifica il nodo",editEdge:"Modifica il vertice",addDescription:"Clicca per aggiungere un nuovo nodo",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",createEdgeError:"Non si possono collegare vertici ad un cluster",deleteClusterError:"I cluster non possono essere cancellati",editClusterError:"I clusters non possono essere modificati."},e.it_IT=e.it,e.nl={edit:"Wijzigen",del:"Selectie verwijderen",back:"Terug",addNode:"Node toevoegen",addEdge:"Link toevoegen",editNode:"Node wijzigen",editEdge:"Link wijzigen",addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",createEdgeError:"Kan geen link maken naar een cluster.",deleteClusterError:"Clusters kunnen niet worden verwijderd.",editClusterError:"Clusters kunnen niet worden aangepast."},e.nl_NL=e.nl,e.nl_BE=e.nl,e["pt-br"]={edit:"Editar",del:"Remover selecionado",back:"Voltar",addNode:"Adicionar nó",addEdge:"Adicionar aresta",editNode:"Editar nó",editEdge:"Editar aresta",addDescription:"Clique em um espaço em branco para adicionar um novo nó",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",createEdgeError:"Não foi possível linkar arestas a um cluster.",deleteClusterError:"Clusters não puderam ser removidos.",editClusterError:"Clusters não puderam ser editados."},e["pt-BR"]=e["pt-br"],e.pt_BR=e["pt-br"],e.pt_br=e["pt-br"],e.ru={edit:"Редактировать",del:"Удалить выбранное",back:"Назад",addNode:"Добавить узел",addEdge:"Добавить ребро",editNode:"Редактировать узел",editEdge:"Редактировать ребро",addDescription:"Кликните в свободное место, чтобы добавить новый узел.",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",createEdgeError:"Невозможно соединить ребра в кластер.",deleteClusterError:"Кластеры не могут быть удалены",editClusterError:"Кластеры недоступны для редактирования."},e.ru_RU=e.ru,e.cn={edit:"编辑",del:"删除选定",back:"返回",addNode:"添加节点",addEdge:"添加连接线",editNode:"编辑节点",editEdge:"编辑连接线",addDescription:"单击空白处放置新节点。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",createEdgeError:"无法将连接线连接到群集。",deleteClusterError:"无法删除群集。",editClusterError:"无法编辑群集。"},e.zh_CN=e.cn},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(){(0,s.default)(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return(0,a.default)(t,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),o=Math.floor(e/4),n=Math.floor(e/8),s=Math.floor(e/16),r=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),d=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,r,i],[r,0,a,o],[r,o,h,n],[5*h,o,d,s]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var o=this.coordinates[i-1],n=this.coordinates[i];t.drawImage(this.canvas,o[0],o[1],o[2],o[3],n[0],n[1],n[2],n[3])}}},{key:"drawImageAtPosition",value:function(t,e,i,o,n,s){if(this.initialized())if(e>2){e*=.5;for(var r=0;e>2&&r<this.NUM_ITERATIONS;)e*=.5,r+=1;r>=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);var a=this.coordinates[r];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,o,n,s)}else t.drawImage(this.image,i,o,n,s)}}]),t}();e.default=h},function(t,e,i){
+function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=function(){function t(){(0,s.default)(this,t),this.clear(),this.defaultIndex=0,this.groupsArray=[],this.groupIndex=0,this.defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},h.extend(this.options,this.defaultOptions)}return(0,a.default)(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(t.hasOwnProperty(i)&&-1===e.indexOf(i)){var o=t[i];this.add(i,o)}}},{key:"clear",value:function(){this.groups={},this.groupsArray=[]}},{key:"get",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.groups[t];if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this.groupsArray.length>0){var o=this.groupIndex%this.groupsArray.length;this.groupIndex++,i={},i.color=this.groups[this.groupsArray[o]],this.groups[t]=i}else{var n=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,i={},i.color=this.defaultGroups[n],this.groups[t]=i}return i}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(47).default,c=function(){function t(e,i,o,n){var r=this;if((0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data,e.oldData)},remove:function(t,e){r.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative";this.options=h.bridgeObject(this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){if(u.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font)for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i].needsRefresh());if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof d||t instanceof l)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new d,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new d}if(i&&h.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;h.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n<t.length;n++){i=t[n];var s=this.body.data.nodes.get(i),r=this.create(s);o.push(r),this.body.nodes[i]=r}this.layoutEngine.positionInitially(o),!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(t,e,i){for(var o=this.body.nodes,n=!1,s=0;s<t.length;s++){var r=t[s],a=o[r],h=e[s];void 0!==a?a.setOptions(h)&&(n=!0):(n=!0,a=this.create(h),o[r]=a)}n||void 0===i||(n=e.some(function(t,e){var o=i[e];return o&&o.level!==t.level})),!0===n?this.body.emitter.emit("_dataChanged"):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit("_dataChanged")}},{key:"create",value:function(t){return new(arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];h.forEach(this.body.nodes,function(i,o){var n=t.body.data.nodes.get(o);void 0!==n&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(n))})}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(!0===Array.isArray(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var o=this.body.nodes[t[i]];e[t[i]]={x:Math.round(o.x),y:Math.round(o.y)}}}else if(void 0!==this.body.nodes[t]){var n=this.body.nodes[t];e[t]={x:Math.round(n.x),y:Math.round(n.y)}}}else for(var s=0;s<this.body.nodeIndices.length;s++){var r=this.body.nodes[this.body.nodeIndices[s]];e[this.body.nodeIndices[s]]={x:Math.round(r.x),y:Math.round(r.y)}}return e}},{key:"storePositions",value:function(){var t=[],e=this.body.data.nodes.getDataSet();for(var i in e._data)if(e._data.hasOwnProperty(i)){var o=this.body.nodes[i];e._data[i].x==Math.round(o.x)&&e._data[i].y==Math.round(o.y)||t.push({id:o.id,x:Math.round(o.x),y:Math.round(o.y)})}e.update(t)}},{key:"getBoundingBox",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:"getConnectedNodes",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var o=this.body.nodes[t],n={},s=0;s<o.edges.length;s++){var r=o.edges[s];"to"!==e&&r.toId==o.id?void 0===n[r.fromId]&&(i.push(r.fromId),n[r.fromId]=!0):"from"!==e&&r.fromId==o.id&&void 0===n[r.toId]&&(i.push(r.toId),n[r.toId]=!0)}return i}},{key:"getConnectedEdges",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],o=0;o<i.edges.length;o++)e.push(i.edges[o].id);else console.log("NodeId provided for getConnectedEdges does not exist. Provided: ",t);return e}},{key:"moveNode",value:function(t,e,i){var o=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),setTimeout(function(){o.body.emitter.emit("startSimulation")},0)):console.log("Node id supplied to moveNode does not exist. Provided: ",t)}}]),t}();e.default=c},function(t,e,i){t.exports={default:i(189),__esModule:!0}},function(t,e,i){i(49),i(60),t.exports=i(190)},function(t,e,i){var o=i(86),n=i(13)("iterator"),s=i(31);t.exports=i(7).isIterable=function(t){var e=Object(t);return void 0!==e[n]||"@@iterator"in e||s.hasOwnProperty(o(e))}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(192).default,d=i(48).default,l=function(){function t(e,i,o,n){var r=this;(0,s.default)(this,t),this.ctx=e,this.parent=i;var a=function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,o,n,i),a=0;if(""!==t){a=r.ctx.measureText(t).width}return{width:a,values:s}};this.lines=new h(a)}return(0,a.default)(t,[{key:"process",value:function(t){if(!d.isValidLabel(t))return this.lines.finalize();var e=this.parent.fontOptions;t=t.replace(/\r\n/g,"\n"),t=t.replace(/\r/g,"\n");var i=String(t).split("\n"),o=i.length;if(e.multi)for(var n=0;n<o;n++){var s=this.splitBlocks(i[n],e.multi);if(void 0!==s)if(0!==s.length){if(e.maxWdt>0)for(var r=0;r<s.length;r++){var a=s[r].mod,h=s[r].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<s.length;l++){var u=s[l].mod,c=s[l].text;this.lines.append(c,u)}this.lines.newLine()}else this.lines.newLine("")}else if(e.maxWdt>0)for(var p=0;p<o;p++)this.splitStringIntoLines(i[p]);else for(var f=0;f<o;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:"decodeMarkupSystem",value:function(t){var e="none";return"markdown"===t||"md"===t?e="markdown":!0!==t&&"html"!==t||(e="html"),e}},{key:"splitHtmlBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position<t.length;){var o=t.charAt(i.position);/[ \t]/.test(o)?i.mono?i.add(o):i.spacing=!0:/</.test(o)?i.mono||i.bold||!/<b>/.test(t.substr(i.position,3))?i.mono||i.ital||!/<i>/.test(t.substr(i.position,3))?!i.mono&&/<code>/.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/&lt;/.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&amp;/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position<t.length;){var o=t.charAt(i.position);/[ \t]/.test(o)?(i.mono?i.add(o):i.spacing=!0,i.beginable=!0):/\\/.test(o)?i.position<t.length+1&&(i.position++,o=t.charAt(i.position),/ \t/.test(o)?i.spacing=!0:(i.add(o),i.beginable=!1)):i.mono||i.bold||!i.beginable&&!i.spacing||!/\*/.test(o)?i.mono||i.ital||!i.beginable&&!i.spacing||!/\_/.test(o)?!i.mono&&(i.beginable||i.spacing)&&/`/.test(o)?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono")):!i.mono&&"bold"===i.mod()&&/\*/.test(o)?i.position===t.length-1||/[.,_` \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.bold=!1,i.modStack.shift()):i.add(o):!i.mono&&"ital"===i.mod()&&/\_/.test(o)?i.position===t.length-1||/[.,*` \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.ital=!1,i.modStack.shift()):i.add(o):i.mono&&"mono"===i.mod()&&/`/.test(o)?i.position===t.length-1||/[.,*_ \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.mono=!1,i.modStack.shift()):i.add(o):(i.add(o),i.beginable=!1):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital")):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold")),i.position++}return i.emitBlock(),e}},{key:"splitBlocks",value:function(t,e){var i=this.decodeMarkupSystem(e);return"none"===i?[{text:t,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(t):"html"===i?this.splitHtmlBlocks(t):void 0}},{key:"overMaxWidth",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(t){for(var e="",i=0;i<t.length;){var o=""===e?"":" ",n=e+o+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:"getLongestFitWord",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(t.slice(0,e));)e++;return e}},{key:"splitStringIntoLines",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t=t.replace(/^( +)/g,"$1\r"),t=t.replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r");for(var o=t.split("\r");o.length>0;){var n=this.getLongestFit(o);if(0===n){var s=o[0],r=this.getLongestFitWord(s);this.lines.newLine(s.slice(0,r),e),o[0]=s.slice(r)}else{var a=n;" "===o[n-1]?n--:" "===o[a]&&a++;var h=o.slice(0,n).join("");n==o.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),o=o.slice(a)}}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(90),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=function(){function t(e){(0,a.default)(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return(0,d.default)(t,[{key:"_add",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var o=e;void 0!==e&&""!==e||(o=" ");var n=this.measureText(o,i),r=(0,s.default)({},n.values);r.text=e,r.width=n.width,r.mod=i,void 0!==e&&""!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:"curWidth",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:"append",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}},{key:"newLine",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}},{key:"determineLineHeights",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var o=0;o<e.blocks.length;o++){var n=e.blocks[o];i<n.height&&(i=n.height)}e.height=i}}},{key:"determineLabelSize",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var o=this.lines[i];o.width>t&&(t=o.width),e+=o.height}this.width=t,this.height=e}},{key:"removeEmptyBlocks",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var o={};(0,s.default)(o,i),o.blocks=[];for(var n=void 0,r=[],a=0;a<i.blocks.length;a++){var h=i.blocks[a];0!==h.width?r.push(h):void 0===n&&(n=h)}0===r.length&&void 0!==n&&r.push(n),o.blocks=r,t.push(o)}}return t}},{key:"finalize",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.width=o.width+this.margin.right+this.margin.left,this.height=o.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n);var s=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(s)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(m.default);e.default=v},function(t,e,i){i(195),t.exports=i(7).Object.getPrototypeOf},function(t,e,i){var o=i(41),n=i(85);i(87)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(197),__esModule:!0}},function(t,e,i){i(198),t.exports=i(7).Object.setPrototypeOf},function(t,e,i){var o=i(17);o(o.S,"Object",{setPrototypeOf:i(199).set})},function(t,e,i){var o=i(32),n=i(27),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(80)(Function.call,i(89).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=Math.max(o.width+this.margin.right+this.margin.left,o.height+this.margin.top+this.margin.bottom);this.options.size=n/2,this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=o.width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.height=2*o.height,this.width=o.width+o.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,s),t.ellipse_vis(this.left,this.top,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+5,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,o,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,!0===this.options.shapeProperties.useBorderWithImage){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),this.performStroke(t,s),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this._updateBoundingBox(t,e),void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}
+}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"hexagon",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(74).default,c=function(){function t(e,i,o){var n=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.body.functions.createEdge=this.create.bind(this),this.edgesListeners={add:function(t,e){n.add(e.items)},update:function(t,e){n.update(e.items)},remove:function(t,e){n.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},selectionWidth:1.5,selfReferenceSize:20,shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},h.deepExtend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_forceDisableDynamicCurves",function(e){var i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===e&&(e="continuous");var o=!1;for(var n in t.body.edges)if(t.body.edges.hasOwnProperty(n)){var s=t.body.edges[n],r=t.body.data.edges._data[n];if(void 0!==r){var a=r.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===e?s.setOptions({smooth:!1}):s.setOptions({smooth:{type:e}}),o=!0)}}!0===i&&!0===o&&t.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){t.reconnectEdges()}),this.body.emitter.on("refreshEdges",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.edgesListeners,function(e,i){t.body.data.edges&&t.body.data.edges.off(i,e)}),delete t.body.functions.createEdge,delete t.edgesListeners.add,delete t.edgesListeners.update,delete t.edgesListeners.remove,delete t.edgesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){u.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)this.body.edges.hasOwnProperty(i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var o in this.body.edges)this.body.edges.hasOwnProperty(o)&&this.body.edges[o].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof d||t instanceof l)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new d,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new d}if(o&&h.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){h.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;n<t.length;n++){var s=t[n],r=i[s];r&&r.disconnect();var a=o.get(s,{showInternalIds:!0});i[s]=this.create(a)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,o=!1,n=0;n<t.length;n++){var s=t[n],r=i.get(s),a=e[s];void 0!==a?(a.disconnect(),o=a.setOptions(r)||o,a.connect()):(this.body.edges[s]=this.create(r),o=!0)}!0===o?(this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),this.body.emitter.emit("_dataChanged")):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;h.forEach(t,function(t){var e=i[t];void 0!==e&&e.remove()}),e&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var t=this;h.forEach(this.body.edges,function(e,i){var o=t.body.data.edges._data[i];void 0!==o&&e.setOptions(o)})}},{key:"create",value:function(t){return new u(t,this.body,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var o=i[t];o.from=null,o.to=null,o.connect()}}},{key:"getConnectedNodes",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var t=this,e=[];h.forEach(this.body.edges,function(i,o){var n=t.body.nodes[i.toId],s=t.body.nodes[i.fromId];void 0!==n&&!0===n.isCluster||void 0!==s&&!0===s.isCluster||void 0!==n&&void 0!==s||e.push(o)}),this.remove(e,!1)}},{key:"_addMissingEdges",value:function(){var t=this.body.edges,e=this.body.data.edges,i=[];e.forEach(function(e,o){void 0===t[o]&&i.push(o)}),this.add(i,!0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(3),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(4),p=o(c),f=i(5),m=o(f),v=i(216),g=o(v),y=function(t){function e(t,i,o){return(0,d.default)(this,e),(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,m.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];this._bezierCurve(t,e,o,n)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),h=(0,s.default)(a,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];return a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3),{x:a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,y:a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y}}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var h=1e9,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=t,m=e,v=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,v[0]=Math.pow(1-u,3),v[1]=3*u*Math.pow(1-u,2),v[2]=3*Math.pow(u,2)*(1-u),v[3]=Math.pow(u,3),c=v[0]*t+v[1]*r.x+v[2]*a.x+v[3]*i,p=v[0]*e+v[1]*r.y+v[2]*a.y+v[3]*o,l>0&&(d=this._getDistanceToLine(f,m,c,p,n,s),h=d<h?d:h),f=c,m=p;return h}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(3),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(4),p=o(c),f=i(5),m=o(f),v=i(75),g=o(v),y=function(t){function e(t,i,o){(0,d.default)(this,e);var n=(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o));return n._boundFunction=function(){n.positionBezierNode()},n.body.emitter.on("_repositionBezierNodes",n._boundFunction),n}return(0,m.default)(e,t),(0,u.default)(e,[{key:"setOptions",value:function(t){var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var t="edgeId:"+this.id,e=this.body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this.body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2],u=2*Math.PI*(1-i);o=h+l*Math.sin(u),n=d+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o){var r=void 0,a=void 0;r=a=n<=s?i*s:i*n,this.from.x>this.to.x&&(r=-r),this.from.y>=this.to.y&&(a=-a),t=this.from.x+r,e=this.from.y+a,"discrete"===o&&(n<=s?t=n<i*s?this.from.x:t:e=s<i*n?this.from.y:e)}else if("straightCross"===o){var h=(1-i)*n,d=(1-i)*s;n<=s?(h=0,this.from.y<this.to.y&&(d=-d)):(this.from.x<this.to.x&&(h=-h),d=0),t=this.to.x+h,e=this.to.y+d}else if("horizontal"===o){var l=(1-i)*n;this.from.x<this.to.x&&(l=-l),t=this.to.x+l,e=this.from.y}else if("vertical"===o){var u=(1-i)*s;this.from.y<this.to.y&&(u=-u),t=this.from.x,e=this.to.y+u}else if("curvedCW"===o){n=this.to.x-this.from.x,s=this.from.y-this.to.y;var c=Math.sqrt(n*n+s*s),p=Math.PI,f=Math.atan2(s,n),m=(f+(.5*i+.5)*p)%(2*p);t=this.from.x+(.5*i+.5)*c*Math.sin(m),e=this.from.y+(.5*i+.5)*c*Math.cos(m)}else if("curvedCCW"===o){n=this.to.x-this.from.x,s=this.from.y-this.to.y;var v=Math.sqrt(n*n+s*s),g=Math.PI,y=Math.atan2(s,n),b=(y+(.5*-i+.5)*g)%(2*g);t=this.from.x+(.5*i+.5)*v*Math.sin(b),e=this.from.y+(.5*i+.5)*v*Math.cos(b)}else{var _=void 0,w=void 0;_=w=n<=s?i*s:i*n,this.from.x>this.to.x&&(_=-_),this.from.y>=this.to.y&&(w=-w),t=this.from.x+_,e=this.from.y+w,n<=s?t=this.from.x<=this.to.x?this.to.x<t?this.to.x:t:this.to.x>t?this.to.x:t:e=this.from.y>=this.to.y?this.to.y>e?this.to.y:e:this.to.y<e?this.to.y:e}return{x:t,y:e}}},{key:"_findBorderPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),h=t.distanceToBorder(e,n),d=(a-h)/a,l={};return l.x=(1-d)*o.x+d*i.x,l.y=(1-d)*o.y+d*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(120).default,u=i(221).default,c=i(222).default,p=i(223).default,f=i(224).default,m=i(121).default,v=i(225).default,g=i(226).default,y=i(2),b=i(119).default,_=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},y.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,d.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){!0===t.ready&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(!1===t?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):!0===t?(this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation()):(this.physicsEnabled=!0,y.selectiveNotDeepExtend(["stabilization"],this.options,t),y.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new v(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new g(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new u(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new c(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new l(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick(),(Date.now()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:"physicsTick",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled){this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1}else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:"updatePhysicsData",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)t.hasOwnProperty(i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var o in e)e.hasOwnProperty(o)&&!0===e[o].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[o].id);for(var n=0;n<this.physicsBody.physicsNodeIndices.length;n++){var s=this.physicsBody.physicsNodeIndices[n];this.physicsBody.forces[s]={x:0,y:0},void 0===this.physicsBody.velocities[s]&&(this.physicsBody.velocities[s]={x:0,y:0})}for(var r in this.physicsBody.velocities)void 0===t[r]&&delete this.physicsBody.velocities[r]}},{key:"revert",value:function(){var t=(0,s.default)(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var o=0;o<t.length;o++){var n=t[o];void 0!==e[n]?!0===e[n].options.physics&&(this.referenceState[n]={positions:{x:e[n].x,y:e[n].y}},i[n].x=this.previousStates[n].vx,i[n].y=this.previousStates[n].vy,e[n].x=this.previousStates[n].x,e[n].y=this.previousStates[n].y):delete this.previousStates[n]}}},{key:"_evaluateStepQuality",value:function(){var t=void 0,e=void 0,i=this.body.nodes,o=this.referenceState;for(var n in this.referenceState)if(this.referenceState.hasOwnProperty(n)&&void 0!==i[n]&&(t=i[n].x-o[n].positions.x,e=i[n].y-o[n].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,o=0;o<t.length;o++){var n=t[o],s=this._performStep(n);e=Math.max(e,s),i+=s}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:"calculateComponentVelocity",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var o=this.options.maxVelocity||1e9;return Math.abs(t)>o&&(t=t>0?o:-o),t}},{key:"_performStep",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t],o=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:o.x,vy:o.y},!1===e.options.fixed.x?(o.x=this.calculateComponentVelocity(o.x,i.x,e.options.mass),e.x+=o.x*this.timestep):(i.x=0,o.x=0),!1===e.options.fixed.y?(o.y=this.calculateComponentVelocity(o.y,i.y,e.options.mass),e.y+=o.y*this.timestep):(i.y=0,o.y=0),Math.sqrt(Math.pow(o.x,2)+Math.pow(o.y,2))}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)if(t.hasOwnProperty(e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;if("number"!=typeof e&&(e=this.options.stabilization.iterations,console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",e)),0===this.physicsBody.physicsNodeIndices.length)return void(this.ready=!0);this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,setTimeout(function(){return t._stabilizationBatch()},0)}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit("stabilizationProgress",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;i(),e()?setTimeout(this._stabilizationBatch.bind(this),0):this._finalizeStabilization()}},{key:"_finalizeStabilization",value:function(){this.body.emitter.emit("_allowRedraw"),!0===this.options.stabilization.fit&&this.body.emitter.emit("fit"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit("stabilizationIterationsDone"),this.body.emitter.emit("_requestRedraw"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:"_drawForces",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],o=this.body.nodes[i],n=this.physicsBody.forces[i],s=Math.sqrt(Math.pow(n.x,2)+Math.pow(n.x,2)),r=Math.min(Math.max(5,s),15),a=3*r,h=y.HSVToHex((180-180*Math.min(1,Math.max(0,.03*s)))/360,1,1),d={x:o.x+20*n.x,y:o.y+20*n.y};t.lineWidth=r,t.strokeStyle=h,t.beginPath(),t.moveTo(o.x,o.y),t.lineTo(d.x,d.y),t.stroke();var l=Math.atan2(n.y,n.x);t.fillStyle=h,b.draw(t,{type:"arrow",point:d,angle:l,length:a}),t.fill()}}}]),t}();e.default=_},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,h=this.body.nodes,d=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,p=0;p<d.length-1;p++){r=h[d[p]];for(var f=p+1;f<d.length;f++)a=h[d[f]],t=a.x-r.x,e=a.y-r.y,i=Math.sqrt(t*t+e*e),0===i&&(i=.1*Math.random(),t=i),i<2*u&&(s=i<.5*u?1:c*i+4/3,s/=i,o=t*s,n=e*s,l[r.id].x-=o,l[r.id].y-=n,l[a.id].x+=o,l[a.id].y+=n)}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){var t,e,i,o,n,s,r,a,h,d,l=this.body.nodes,u=this.physicsBody.physicsNodeIndices,c=this.physicsBody.forces,p=this.options.nodeDistance;for(h=0;h<u.length-1;h++)for(r=l[u[h]],d=h+1;d<u.length;d++)if(a=l[u[d]],r.level===a.level){t=a.x-r.x,e=a.y-r.y,i=Math.sqrt(t*t+e*e)
+;s=i<p?-Math.pow(.05*i,2)+Math.pow(.05*p,2):0,0===i?i=.01:s/=i,o=t*s,n=e*s,c[r.id].x-=o,c[r.id].y-=n,c[a.id].x+=o,c[a.id].y+=n}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t=void 0,e=void 0,i=this.physicsBody.physicsEdgeIndices,o=this.body.edges,n=void 0,s=void 0,r=void 0,a=0;a<i.length;a++)e=o[i[a]],!0===e.connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,n=e.to,s=e.edgeType.via,r=e.from,this._calculateSpringForce(n,s,.5*t),this._calculateSpringForce(s,r,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:"_calculateSpringForce",value:function(t,e,i){var o=t.x-e.x,n=t.y-e.y,s=Math.max(Math.sqrt(o*o+n*n),.01),r=this.options.springConstant*(i-s)/s,a=o*r,h=n*r;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,h=this.body.edges,d=this.physicsBody.physicsEdgeIndices,l=this.physicsBody.physicsNodeIndices,u=this.physicsBody.forces,c=0;c<l.length;c++){var p=l[c];u[p].springFx=0,u[p].springFy=0}for(var f=0;f<d.length;f++)e=h[d[f]],!0===e.connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,o=e.from.y-e.to.y,a=Math.sqrt(i*i+o*o),a=0===a?.01:a,r=this.options.springConstant*(t-a)/a,n=i*r,s=o*r,e.to.level!=e.from.level?(void 0!==u[e.toId]&&(u[e.toId].springFx-=n,u[e.toId].springFy-=s),void 0!==u[e.fromId]&&(u[e.fromId].springFx+=n,u[e.fromId].springFy+=s)):(void 0!==u[e.toId]&&(u[e.toId].x-=.5*n,u[e.toId].y-=.5*s),void 0!==u[e.fromId]&&(u[e.fromId].x+=.5*n,u[e.fromId].y+=.5*s)));r=1;for(var m,v,g=0;g<l.length;g++){var y=l[g];m=Math.min(r,Math.max(-r,u[y].springFx)),v=Math.min(r,Math.max(-r,u[y].springFy)),u[y].x+=m,u[y].y+=v}for(var b=0,_=0,w=0;w<l.length;w++){var x=l[w];b+=u[x].x,_+=u[x].y}for(var k=b/l.length,S=_/l.length,D=0;D<l.length;D++){var M=l[D];u[M].x-=k,u[M].y-=S}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(120),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1*Math.random(),e=t),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=o.edges.length+1,r=this.options.gravitationalConstant*n.mass*o.options.mass*s/Math.pow(t,2),a=e*r,h=i*r;this.physicsBody.forces[o.id].x+=a,this.physicsBody.forces[o.id].y+=h}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(121),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_calculateForces",value:function(t,e,i,o,n){if(t>0){var s=n.edges.length+1,r=this.options.centralGravity*s*n.options.mass;o[n.id].x=e*r,o[n.id].y=i*r}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(76).default,f=i(228).default,m=i(74).default,v=i(47).default,g=function(){function t(e){var i=this;(0,d.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===(void 0===t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o<this.body.nodeIndices.length;o++){var n=this.body.nodes[this.body.nodeIndices[o]];n.edges.length>=t&&i.push(n.id)}for(var s=0;s<i.length;s++)this.clusterByConnection(i[s],e,!0);this.body.emitter.emit("_dataChanged")}},{key:"cluster",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");e=this._checkOptions(e);var o={},n={};c.forEach(this.body.nodes,function(i,s){var r=p.cloneOptions(i);!0===e.joinCondition(r)&&(o[s]=i,c.forEach(i.edges,function(e){void 0===t.clusteredEdges[e.id]&&(n[e.id]=e)}))}),this._cluster(o,n,e,i)}},{key:"clusterByEdgeCount",value:function(t,e){var i=this,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var n=[],r={},a=void 0,h=void 0,d=void 0,l=0;l<this.body.nodeIndices.length;l++){var u,c,f;!function(o){var l={},m={},v=i.body.nodeIndices[o],g=i.body.nodes[v];if(void 0===r[v]){d=0,h=[];for(var y=0;y<g.edges.length;y++)a=g.edges[y],void 0===i.clusteredEdges[a.id]&&(a.toId!==a.fromId&&d++,h.push(a));if(d===t){u=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=p.cloneOptions(t);return e.joinCondition(i)};for(var b=!0,_=0;_<h.length;_++){a=h[_];var w=i._getConnectedId(a,v);if(!u(g)){b=!1;break}m[a.id]=a,l[v]=g,l[w]=i.body.nodes[w],r[v]=!0}if((0,s.default)(l).length>0&&(0,s.default)(m).length>0&&!0===b)if(c=function(){for(var t=0;t<n.length;++t)for(var e in l)if(void 0!==n[t].nodes[e])return n[t]},void 0!==(f=c())){for(var x in l)void 0===f.nodes[x]&&(f.nodes[x]=l[x]);for(var k in m)void 0===f.edges[k]&&(f.edges[k]=m[k])}else n.push({nodes:l,edges:m})}}}(l)}for(var l=0;l<n.length;l++)this._cluster(n[l].nodes,n[l].edges,e,!1);!0===o&&this.body.emitter.emit("_dataChanged")}},{key:"clusterOutliers",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,h=p.cloneOptions(o);n[a]=o;for(var d=0;d<o.edges.length;d++){var l=o.edges[d];if(void 0===this.clusteredEdges[l.id]){var u=this._getConnectedId(l,a);if(void 0===this.clusteredNodes[u])if(u!==a)if(void 0===e.joinCondition)r[l.id]=l,n[u]=this.body.nodes[u];else{var c=p.cloneOptions(this.body.nodes[u]);!0===e.joinCondition(h,c)&&(r[l.id]=l,n[u]=this.body.nodes[u])}else r[l.id]=l}}var f=(0,s.default)(n).map(function(t){return n[t].id});for(m in n)if(n.hasOwnProperty(m))for(var m=n[m],v=0;v<m.edges.length;v++){var g=m.edges[v];f.indexOf(this._getConnectedId(g,m.id))>-1&&(r[g.id]=g)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=(0,s.default)(t),c=[],p=0;p<u.length;p++){r=u[p],a=t[r];for(var f=0;f<a.edges.length;f++)n=a.edges[f],void 0===this.clusteredEdges[n.id]&&(n.toId==n.fromId?e[n.id]=n:n.toId==r?(h=i.id,d=n.fromId,l=d):(h=n.toId,d=i.id,l=h),void 0===t[l]&&c.push({edge:n,fromId:d,toId:h}))}for(var m=[],v=0;v<c.length;v++){var g=c[v],y=g.edge,b=function(t){for(var e=0;e<m.length;e++){var i=m[e],o=t.fromId===i.fromId&&t.toId===i.toId,n=t.fromId===i.toId&&t.toId===i.fromId;if(o||n)return i}return null}(g);null===b?(b=this._createClusteredEdge(g.fromId,g.toId,y,o),m.push(b)):b.clusteringEdgeReplacingIds.push(y.id),this.body.edges[y.id].edgeReplacedById=b.id,this._backupEdgeOptions(y),y.setOptions({physics:!1})}}},{key:"_checkOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],n=[];for(var r in t)t.hasOwnProperty(r)&&void 0!==this.clusteredNodes[r]&&n.push(r);for(var a=0;a<n.length;++a)delete t[n[a]];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var h=c.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var d=[];for(var l in t)if(t.hasOwnProperty(l)){var u=p.cloneOptions(t[l]);d.push(u)}var m=[];for(var v in e)if(e.hasOwnProperty(v)&&"clusterEdge:"!==v.substr(0,12)){var g=p.cloneOptions(e[v],"edge");m.push(g)}if(!(h=i.processProperties(h,d,m)))throw new Error("The processProperties function does not return properties!")}void 0===h.id&&(h.id="cluster:"+c.randomUUID());var y=h.id;void 0===h.label&&(h.label="cluster");var b=void 0;void 0===h.x&&(b=this._getClusterPosition(t),h.x=b.x),void 0===h.y&&(void 0===b&&(b=this._getClusterPosition(t)),h.y=b.y),h.id=y;var _=this.body.functions.createNode(h,f);_.containedNodes=t,_.containedEdges=e,_.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[h.id]=_,this._clusterEdges(t,e,h,i.clusterEdgeProperties),h.id=void 0,!0===o&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,h=1;h<e.length;h++)a=t[e[h]],i=a.x<i?a.x:i,o=a.x>o?a.x:o,n=a.y<n?a.y:n,r=a.y>r?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");var o=this.body.nodes[t];if(void 0===o)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==o.isCluster||void 0===o.containedNodes||void 0===o.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");var n=this.findNode(t),s=n.indexOf(t)-1;if(s>=0){var r=n[s];return this.body.nodes[r]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=o.containedNodes,h=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var d={},l={x:o.x,y:o.y};for(var u in a)if(a.hasOwnProperty(u)){var p=this.body.nodes[u];d[u]={x:p.x,y:p.y}}var f=e.releaseFunction(l,d);for(var m in a)if(a.hasOwnProperty(m)){var v=this.body.nodes[m];void 0!==f[m]&&(v.x=void 0===f[m].x?o.x:f[m].x,v.y=void 0===f[m].y?o.y:f[m].y)}}else c.forEach(a,function(t){!1===t.options.fixed.x&&(t.x=o.x),!1===t.options.fixed.y&&(t.y=o.y)});for(var g in a)if(a.hasOwnProperty(g)){var y=this.body.nodes[g];y.vx=o.vx,y.vy=o.vy,y.setOptions({physics:!0}),delete this.clusteredNodes[g]}for(var b=[],_=0;_<o.edges.length;_++)b.push(o.edges[_]);for(var w=0;w<b.length;w++){for(var x=b[w],k=this._getConnectedId(x,t),S=this.clusteredNodes[k],D=0;D<x.clusteringEdgeReplacingIds.length;D++){var M=x.clusteringEdgeReplacingIds[D],C=this.body.edges[M];if(void 0!==C)if(void 0!==S){var O=this.body.nodes[S.clusterId];O.containedEdges[C.id]=C,delete h[C.id];var E=C.fromId,T=C.toId;C.toId==k?T=S.clusterId:E=S.clusterId,this._createClusteredEdge(E,T,C,O.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(C)}x.remove()}for(var P in h)h.hasOwnProperty(P)&&this._restoreEdge(h[P]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit("_dataChanged")}},{key:"getNodesInCluster",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var o in i)i.hasOwnProperty(o)&&e.push(this.body.nodes[o].id)}return e}},{key:"findNode",value:function(t){for(var e=[],i=0,o=void 0;void 0!==this.clusteredNodes[t]&&i<100;){if(void 0===(o=this.body.nodes[t]))return[];e.push(o.id),t=this.clusteredNodes[t].clusterId,i++}return void 0===(o=this.body.nodes[t])?[]:(e.push(o.id),e.reverse(),e)}},{key:"updateClusteredNode",value:function(t,e){if(void 0===t)throw new Error("No clusteredNodeId supplied to updateClusteredNode.");if(void 0===e)throw new Error("No newOptions supplied to updateClusteredNode.");if(void 0===this.body.nodes[t])throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist.");this.body.nodes[t].setOptions(e),this.body.emitter.emit("_dataChanged")}},{key:"updateEdge",value:function(t,e){if(void 0===t)throw new Error("No startEdgeId supplied to updateEdge.");if(void 0===e)throw new Error("No newOptions supplied to updateEdge.");if(void 0===this.body.edges[t])throw new Error("The startEdgeId supplied to updateEdge does not exist.");for(var i=this.getClusteredEdges(t),o=0;o<i.length;o++){this.body.edges[i[o]].setOptions(e)}this.body.emitter.emit("_dataChanged")}},{key:"getClusteredEdges",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return e.reverse(),e}},{key:"getBaseEdge",value:function(t){return this.getBaseEdges(t)[0]}},{key:"getBaseEdges",value:function(t){for(var e=[t],i=[],o=[],n=0;e.length>0&&n<100;){var s=e.pop();if(void 0!==s){var r=this.body.edges[s];if(void 0!==r){n++;var a=r.clusteringEdgeReplacingIds;if(void 0===a)o.push(s);else for(var h=0;h<a.length;++h){var d=a[h];-1===e.indexOf(a)&&-1===i.indexOf(a)&&e.push(d)}i.push(s)}}}return o}},{key:"_getConnectedId",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:"_getHubSize",value:function(){for(var t=0,e=0,i=0,o=0,n=0;n<this.body.nodeIndices.length;n++){var s=this.body.nodes[this.body.nodeIndices[n]];s.edges.length>o&&(o=s.edges.length),t+=s.edges.length,e+=Math.pow(s.edges.length,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r),h=Math.floor(t+2*a);return h>o&&(h=o),h}},{key:"_createClusteredEdge",value:function(t,e,i,o,n){var s=p.cloneOptions(i,"edge");c.deepExtend(s,o),s.from=t,s.to=e,s.id="clusterEdge:"+c.randomUUID(),void 0!==n&&c.deepExtend(s,n);var r=this.body.functions.createEdge(s);return r.clusteringEdgeReplacingIds=[i.id],r.connect(),this.body.edges[r.id]=r,r}},{key:"_clusterEdges",value:function(t,e,i,o){if(e instanceof m){var n=e,s={};s[n.id]=n,e=s}if(t instanceof v){var r=t,a={};a[r.id]=r,t=a}if(void 0===i||null===i)throw new Error("_clusterEdges: parameter clusterNode required");void 0===o&&(o=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,o);for(var h in e)if(e.hasOwnProperty(h)&&void 0!==this.body.edges[h]){var d=this.body.edges[h];this._backupEdgeOptions(d),d.setOptions({physics:!1})}for(var l in t)t.hasOwnProperty(l)&&(this.clusteredNodes[l]={clusterId:i.id,node:this.body.nodes[l]},this.body.nodes[l].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(t,e){var i=[];return c.forEach(t,function(t){e(t)&&i.push(t)}),i}},{key:"_updateState",value:function(){var t=this,e=void 0,i=[],o=[],n=function(e){c.forEach(t.body.nodes,function(t){!0===t.isCluster&&e(t)})};for(e in this.clusteredNodes)if(this.clusteredNodes.hasOwnProperty(e)){var r=this.body.nodes[e];void 0===r&&i.push(e)}n(function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]});for(var a=0;a<i.length;a++)delete this.clusteredNodes[i[a]];c.forEach(this.clusteredEdges,function(e){var i=t.body.edges[e];void 0!==i&&i.endPointsValid()||o.push(e)}),n(function(t){c.forEach(t.containedEdges,function(t,e){t.endPointsValid()||-1!==o.indexOf(e)||o.push(e)})}),c.forEach(this.body.edges,function(e,i){var n=!0,s=e.clusteringEdgeReplacingIds;if(void 0!==s){var r=0;c.forEach(s,function(e){var i=t.body.edges[e];void 0!==i&&i.endPointsValid()&&(r+=1)}),n=r>0}e.endPointsValid()&&n||o.push(i)}),n(function(e){c.forEach(o,function(i){delete e.containedEdges[i],c.forEach(e.edges,function(n,s){if(n.id===i)return void(e.edges[s]=null);n.clusteringEdgeReplacingIds=t._filter(n.clusteringEdgeReplacingIds,function(t){return-1===o.indexOf(t)})}),e.edges=t._filter(e.edges,function(t){return null!==t})})}),c.forEach(o,function(e){delete t.clusteredEdges[e]}),c.forEach(o,function(e){delete t.body.edges[e]});var h=(0,s.default)(this.body.edges);c.forEach(h,function(e){var i=t.body.edges[e],o=t._isClusteredNode(i.fromId)||t._isClusteredNode(i.toId);if(o!==t._isClusteredEdge(i.id)){if(!o)throw new Error("remove edge from clustering not implemented!");var n=t._getClusterNodeForNode(i.fromId);void 0!==n&&t._clusterEdges(t.body.nodes[i.fromId],i,n);var s=t._getClusterNodeForNode(i.toId);void 0!==s&&t._clusterEdges(t.body.nodes[i.toId],i,s)}});for(var d=!1,l=!0;l;)!function(){var e=[];n(function(t){var i=(0,s.default)(t.containedNodes).length,o=!0===t.options.allowSingleNodeCluster;(o&&i<1||!o&&i<2)&&e.push(t.id)});for(var i=0;i<e.length;++i)t.openCluster(e[i],{},!1);l=e.length>0,d=d||l}();d&&this._updateState()}},{key:"_isClusteredNode",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:"_isClusteredEdge",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(2),m=i(47).default,v=function(t){function e(t,i,o,n,r,h){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o,n,r,h));return d.isCluster=!0,d.containedNodes={},d.containedEdges={},d}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_openChildCluster",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error("node with id: "+t+" not in current cluster");if(!i.isCluster)throw new Error("node with id: "+t+" is not a cluster");delete this.containedNodes[t],f.forEach(i.edges,function(t){delete e.containedEdges[t.id]}),f.forEach(i.containedNodes,function(t,i){e.containedNodes[i]=t}),i.containedNodes={},f.forEach(i.containedEdges,function(t,i){e.containedEdges[i]=t}),i.containedEdges={},f.forEach(i.edges,function(t){f.forEach(e.edges,function(i){var o=i.clusteringEdgeReplacingIds.indexOf(t.id);-1!==o&&(f.forEach(t.clusteringEdgeReplacingIds,function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id}),i.clusteringEdgeReplacingIds.splice(o,1))})}),i.edges=[]}}]),e}(m);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){var t;void 0!==window&&(t=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===t?function(t){t()}:t}Object.defineProperty(e,"__esModule",{value:!0});var s=i(0),r=o(s),a=i(1),h=o(a),d=i(2),l=function(){function t(e,i){(0,r.default)(this,t),n(),this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideNodesOnDrag:!1},d.extend(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return(0,h.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("dragStart",function(){t.dragging=!0}),this.body.emitter.on("dragEnd",function(){t.dragging=!1}),this.body.emitter.on("_resizeNodes",function(){t._resizeNodes()}),this.body.emitter.on("_redraw",function(){!1===t.renderingActive&&t._redraw()}),this.body.emitter.on("_blockRedraw",function(){t.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){t.allowRedraw=!0,t.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",this._requestRedraw.bind(this)),this.body.emitter.on("_startRendering",function(){t.renderRequests+=1,t.renderingActive=!0,t._startRendering()}),this.body.emitter.on("_stopRendering",function(){t.renderRequests-=1,t.renderingActive=t.renderRequests>0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,!0===t.requiresTimeout?clearTimeout(t.renderTimer):window.cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];d.selectiveDeepExtend(e,this.options,t)}}},{key:"_requestNextFrame",value:function(t,e){if("undefined"!=typeof window){var i=void 0,o=window;return!0===this.requiresTimeout?i=o.setTimeout(t,e):o.requestAnimationFrame&&(i=o.requestAnimationFrame(t)),i}}},{key:"_startRendering",value:function(){!0===this.renderingActive&&void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(this._renderStep.bind(this),this.simulationInterval))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame(function(){t._redraw(!1)},0))}},{key:"_redraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1,0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var e=this.canvas.getContext(),i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&this._drawEdges(e),(!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),!0===t&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=this.canvas.DOMtoCanvas({x:-20,y:-20}),a=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),h={top:r.y,left:r.x,bottom:a.y,right:a.x},d=0;d<o.length;d++)n=i[o[d]],n.isSelected()?s.push(o[d]):!0===e?n.draw(t):!0===n.isBoundingBoxOverlappingWith(h)?n.draw(t):n.updateBoundingBox(t,n.selected);for(var l=0;l<s.length;l++)n=i[s[l]],n.draw(t)}},{key:"_drawEdges",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,o=void 0,n=0;n<i.length;n++)o=e[i[n]],!0===o.connected&&o.draw(t)}},{key:"_determineBrowserMethod",value:function(){if("undefined"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,-1!=t.indexOf("msie 9.0")?this.requiresTimeout=!0:-1!=t.indexOf("safari")&&t.indexOf("chrome")<=-1&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(10),d=i(37),l=i(2),u=function(){function t(e){(0,s.default)(this,t),this.body=e,this.pixelRatio=1,this.resizeTimer=void 0,this.resizeFunction=this._onResize.bind(this),this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this.options={},this.defaultOptions={autoResize:!0,height:"100%",width:"100%"},l.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.once("resize",function(e){0!==e.width&&(t.body.view.translation.x=.5*e.width),0!==e.height&&(t.body.view.translation.y=.5*e.height)}),this.body.emitter.on("setSize",this.setSize.bind(this)),this.body.emitter.on("destroy",function(){t.hammerFrame.destroy(),t.hammer.destroy(),t._cleanUp()})}},{key:"setOptions",value:function(t){var e=this;if(void 0!==t){var i=["width","height","autoResize"];l.selectiveDeepExtend(i,this.options,t)}!0===this.options.autoResize&&(this._cleanUp(),this.resizeTimer=setInterval(function(){!0===e.setSize()&&e.body.emitter.emit("_requestRedraw")},1e3),this.resizeFunction=this._onResize.bind(this),l.addEventListener(window,"resize",this.resizeFunction))}},{key:"_cleanUp",value:function(){void 0!==this.resizeTimer&&clearInterval(this.resizeTimer),l.removeEventListener(window,"resize",this.resizeFunction),this.resizeFunction=void 0}},{key:"_onResize",value:function(){this.setSize(),this.body.emitter.emit("_redraw")}},{key:"_getCameraState",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==t.indexOf("%")||-1!==t.indexOf("px"))return t;if(-1===t.indexOf("%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new h(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:h.DIRECTION_ALL}),d.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new h(this.frame),d.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(s),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var r=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)
+;this.frame.canvas.width===r&&this.frame.canvas.height===a||this._getCameraState(s),this.frame.canvas.width!==r&&(this.frame.canvas.width=r,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");var e=1;return"undefined"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(76).default,l=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){o.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),!0===e){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];!0===r.predefinedPosition&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=d.getRange(this.body.nodes,t.nodes);o=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;o*=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600)}else{this.body.emitter.emit("_resizeNodes"),i=d.getRange(this.body.nodes,t.nodes);var a=1.1*Math.abs(i.maxX-i.minX),h=1.1*Math.abs(i.maxY-i.minY),l=this.canvas.frame.canvas.clientWidth/a,u=this.canvas.frame.canvas.clientHeight/h;o=l<=u?l:u}o>1?o=1:0===o&&(o=1);var c=d.findCenter(i),p={position:c,scale:o,animation:t.animation};this.moveTo(p)}},{key:"focus",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){if(void 0===t)return void(t={});void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=h.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(233).default,l=i(104).default,u=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new d(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},h.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];h.selectiveNotDeepExtend(e,this.options,t),h.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(h.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=h.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-h.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-h.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e),this.selectionHandler._generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler._generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.selectionHandler.getSelection(),n=!1;n=!0===i?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var s=this.selectionHandler.getSelection(),r=this._determineDifference(o,s),a=this._determineDifference(s,o);r.edges.length>0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,o),n=!0),r.nodes.length>0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,o),n=!0),a.nodes.length>0&&(this.selectionHandler._generateClickEvent("selectNode",e,t),n=!0),a.edges.length>0&&(this.selectionHandler._generateClickEvent("selectEdge",e,t),n=!0),!0===n&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineDifference",value:function(t,e){var i=function(t,e){for(var i=[],o=0;o<t.length;o++){var n=t[o];-1===e.indexOf(n)&&i.push(n)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:"onDragStart",value:function(t){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=h.extend({},this.body.view.translation),this.drag.nodeId=void 0,void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler._generateClickEvent("dragStart",t,this.drag.pointer);var i=this.selectionHandler.selectionObj.nodes;for(var o in i)if(i.hasOwnProperty(o)){var n=i[o],s={id:n.id,node:n,x:n.x,y:n.y,xFixed:n.options.fixed.x,yFixed:n.options.fixed.y};n.options.fixed.x=!0,n.options.fixed.y=!0,this.drag.selection.push(s)}}else this.selectionHandler._generateClickEvent("dragStart",t,this.drag.pointer,void 0,!0)}},{key:"onDrag",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit("unlockNode");var i=this.getPointer(t.center),o=this.drag.selection;if(o&&o.length&&!0===this.options.dragNodes){this.selectionHandler._generateClickEvent("dragging",t,i);var n=i.x-this.drag.pointer.x,s=i.y-this.drag.pointer.y;o.forEach(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+n)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+s))}),this.body.emitter.emit("startSimulation")}else if(!0===this.options.dragView){if(this.selectionHandler._generateClickEvent("dragging",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var r=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+r,y:this.drag.translation.y+a},this.body.emitter.emit("_requestRedraw")}}}},{key:"onDragEnd",value:function(t){this.drag.dragging=!1;var e=this.drag.selection;e&&e.length?(e.forEach(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed}),this.selectionHandler._generateClickEvent("dragEnd",t,this.getPointer(t.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler._generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}},{key:"onPinch",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:"zoom",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var o=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));var n=this.body.view.translation,s=t/i,r=(1-s)*e.x+n.x*s,a=(1-s)*e.y+n.y*s;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},void 0!=o){var h=this.canvas.canvasToDOM(o);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),i<t?this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:e})}}},{key:"onMouseWheel",value:function(t){if(!0===this.options.zoomView){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),0!==e){var i=this.body.view.scale,o=e/10;e<0&&(o/=1-o),i*=1+o;var n=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(i,n)}t.preventDefault()}}},{key:"onMouseMove",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),o=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(o=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===o&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=setTimeout(function(){return e._checkShowPopup(i)},this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:"_checkShowPopup",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),o={left:e,top:i,right:e,bottom:i},n=void 0===this.popupObj?void 0:this.popupObj.id,s=!1,r="node";if(void 0===this.popupObj){for(var a=this.body.nodeIndices,h=this.body.nodes,d=void 0,u=[],c=0;c<a.length;c++)d=h[a[c]],!0===d.isOverlappingWith(o)&&void 0!==d.getTitle()&&u.push(a[c]);u.length>0&&(this.popupObj=h[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&!1===s){for(var p=this.body.edgeIndices,f=this.body.edges,m=void 0,v=[],g=0;g<p.length;g++)m=f[p[g]],!0===m.isOverlappingWith(o)&&!0===m.connected&&void 0!==m.getTitle()&&v.push(p[g]);v.length>0&&(this.popupObj=f[v[v.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new l(this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var o=this.selectionHandler.getNodeAt(t);i=void 0!==o&&o.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(10),d=i(37),l=i(35),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:"loadNavigationElements",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],i=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","_fit"];this.navigationDOM.wrapper=document.createElement("div"),this.navigationDOM.wrapper.className="vis-navigation",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var o=0;o<e.length;o++){this.navigationDOM[e[o]]=document.createElement("div"),this.navigationDOM[e[o]].className="vis-button vis-"+e[o],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[o]]);var n=new h(this.navigationDOM[e[o]]);"_fit"===i[o]?d.onTouch(n,this._fit.bind(this)):d.onTouch(n,this.bindToRedraw.bind(this,i[o])),this.navigationHammers.push(n)}var s=new h(this.canvas.frame);d.onRelease(s,function(){t._stopMovement()}),this.navigationHammers.push(s),this.iconsCreated=!0}},{key:"bindToRedraw",value:function(t){void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=this[t].bind(this),this.body.emitter.on("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_startRendering"))}},{key:"unbindFromRedraw",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"),delete this.boundFunctions[t])}},{key:"_fit",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)this.boundFunctions.hasOwnProperty(t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled&&(!0===this.options.keyboard.bindToWindow?this.keycharm=l({container:window,preventDefault:!0}):this.keycharm=l({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(this.keycharm.bind("up",function(){t.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){t.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){t.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){t.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){t.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){t.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){t.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){t.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){t.unbindFromRedraw("_zoomOut")},"keyup")))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(47).default,d=i(74).default,l=i(2),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionObj={nodes:[],edges:[]},this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},l.extend(this.options,this.defaultOptions),this.body.emitter.on("_dataChanged",function(){o.updateSelection()})}return(0,a.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){var e=["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"];l.selectiveDeepExtend(e,this.options,t)}}},{key:"selectOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return e}},{key:"selectAdditionalOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return e}},{key:"_initBaseEvent",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:"_generateClickEvent",value:function(t,e,i,o){var n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=this._initBaseEvent(e,i);if(!0===n)s.nodes=[],s.edges=[];else{var r=this.getSelection();s.nodes=r.nodes,s.edges=r.edges}void 0!==o&&(s.previousSelection=o),"click"==t&&(s.items=this.getClickedItems(i)),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof h&&!0===e&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o<this.body.nodeIndices.length;o++){var n=this.body.nodeIndices[o];i[n].isOverlappingWith(t)&&e.push(n)}return e}},{key:"_pointerToPositionObject",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:"getNodeAt",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?!0===e?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,o=0;o<this.body.edgeIndices.length;o++){var n=this.body.edgeIndices[o];i[n].isOverlappingWith(t)&&e.push(n)}}},{key:"_getAllEdgesOverlappingWith",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:"getEdgeAt",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r<this.body.edgeIndices.length;r++){var a=this.body.edgeIndices[r],h=s[a];if(h.connected){var d=h.from.x,l=h.from.y,u=h.to.x,c=h.to.y,p=h.edgeType.getDistanceToEdge(d,l,u,c,i.x,i.y);p<o&&(n=a,o=p)}}return null!==n?!0===e?this.body.edges[n]:n:void 0}},{key:"_addToSelection",value:function(t){t instanceof h?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t}},{key:"_addToHover",value:function(t){t instanceof h?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:"_removeFromSelection",value:function(t){t instanceof h?(delete this.selectionObj.nodes[t.id],this._unselectConnectedEdges(t)):delete this.selectionObj.edges[t.id]}},{key:"unselectAll",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].unselect();for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&this.selectionObj.edges[e].unselect();this.selectionObj={nodes:{},edges:{}}}},{key:"_getSelectedNodeCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedNode",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t]}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t]}},{key:"_getSelectedEdgeCount",value:function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedObjectCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t}},{key:"_selectionIsEmpty",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0}},{key:"_clusterInSelection",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.select(),this._addToSelection(i)}}},{key:"_hoverConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:"_unselectConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.unselect(),this._removeFromSelection(i)}}},{key:"emitBlurEvent",value:function(t,e,i){var o=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof h?(o.node=i.id,this.body.emitter.emit("blurNode",o)):(o.edge=i.id,this.body.emitter.emit("blurEdge",o)))}},{key:"emitHoverEvent",value:function(t,e,i){var o=this._initBaseEvent(t,e),n=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),n=!0,i instanceof h?(o.node=i.id,this.body.emitter.emit("hoverNode",o)):(o.edge=i.id,this.body.emitter.emit("hoverEdge",o))),n}},{key:"hoverObject",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var o=!1;for(var n in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(n)&&(void 0===i||i instanceof h&&i.id!=n||i instanceof d)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[n]),delete this.hoverObj.nodes[n],o=!0);for(var s in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(s)&&(!0===o?(this.hoverObj.edges[s].hover=!1,delete this.hoverObj.edges[s]):(void 0===i||i instanceof d&&i.id!=s||i instanceof h&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[s]),delete this.hoverObj.edges[s],o=!0));void 0!==i&&(o=o||this.emitHoverEvent(t,e,i),i instanceof h&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)),!0===o&&this.body.emitter.emit("_requestRedraw")}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodes(),edges:this.getSelectedEdges()}}},{key:"getSelectedNodes",value:function(){var t=[];if(!0===this.options.selectable)for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&t.push(this.selectionObj.nodes[e].id);return t}},{key:"getSelectedEdges",value:function(){var t=[];if(!0===this.options.selectable)for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&t.push(this.selectionObj.edges[e].id);return t}},{key:"setSelection",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0
+;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties";if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i<t.nodes.length;i++){o=t.nodes[i];var n=this.body.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this.selectObject(n,e.highlightEdges)}if(t.edges)for(i=0;i<t.edges.length;i++){o=t.edges[i];var s=this.body.edges[o];if(!s)throw new RangeError('Edge with id "'+o+'" not found');this.selectObject(s)}this.body.emitter.emit("_requestRedraw")}},{key:"selectNodes",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},{key:"getClickedItems",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],o=this.body.nodeIndices,n=this.body.nodes,s=o.length-1;s>=0;s--){var r=n[o[s]],a=r.getItemsOnPoint(e);i.push.apply(i,a)}for(var h=this.body.edgeIndices,d=this.body.edges,l=h.length-1;l>=0;l--){var u=d[h[l]],c=u.getItemsOnPoint(e);i.push.apply(i,c)}return i}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(76).default,v=i(236),g=v.HorizontalStrategy,y=v.VerticalStrategy,b=function(){function t(){(0,u.default)(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return(0,p.default)(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={};return function t(o){if(void 0!==i[o])return i[o];var n=e.levels[o];if(e.childrenReference[o]){var s=e.childrenReference[o];if(s.length>0)for(var r=0;r<s.length;r++)n=Math.max(n,t(s[r]))}return i[o]=n,n}(t)}},{key:"levelDownstream",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:"setMinLevelToZero",value:function(t){var e=1e9;for(var i in t)t.hasOwnProperty(i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var o in t)t.hasOwnProperty(o)&&void 0!==this.levels[o]&&(this.levels[o]-=e)}},{key:"getTreeSize",value:function(t,e){var i=1e9,o=-1e9,n=1e9,s=-1e9;for(var r in this.trees)if(this.trees.hasOwnProperty(r)&&this.trees[r]===e){var a=t[r];i=Math.min(a.x,i),o=Math.max(a.x,o),n=Math.min(a.y,n),s=Math.max(a.y,s)}return{min_x:i,max_x:o,min_y:n,max_y:s}}},{key:"hasSameParent",value:function(t,e){var i=this.parentReference[t.id],o=this.parentReference[e.id];if(void 0===i||void 0===o)return!1;for(var n=0;n<i.length;n++)for(var s=0;s<o.length;s++)if(i[n]==o[s])return!0;return!1}},{key:"inSameSubNetwork",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:"getLevels",value:function(){return(0,d.default)(this.distributionOrdering)}},{key:"addToOrdering",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,o=this.distributionOrdering[e];for(var n in o)if(o[n]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_=function(){function t(e){(0,u.default)(this,t),this.body=e,this.initialRandomSeed=Math.round(1e6*Math.random()),this.randomSeed=this.initialRandomSeed,this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:"UD",sortMethod:"hubsize"}},f.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,p.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",function(){t.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_adjustEdgesForHierarchicalLayout",function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit("_forceDisableDynamicCurves",e,!1)}})}},{key:"setOptions",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,o=i.enabled;if(f.selectiveDeepExtend(["randomSeed","improvedLayout"],this.options,t),f.mergeOptions(this.options,t,"hierarchical"),void 0!==t.randomSeed&&(this.initialRandomSeed=t.randomSeed),!0===i.enabled)return!0===o&&this.body.emitter.emit("refresh",!0),"RL"===i.direction||"DU"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===o)return this.body.emitter.emit("refresh"),f.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"===(0,a.default)(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var o=t.edges.smooth;void 0!==o.type&&"dynamic"!==o.type&&(i=o.type),this.optionsBackup.edges={smooth:void 0===o.enabled||o.enabled,type:void 0===o.type?"dynamic":o.type,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection},t.edges.smooth={enabled:void 0===o.enabled||o.enabled,type:i,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"positionInitially",value:function(t){if(!0!==this.options.hierarchical.enabled){this.randomSeed=this.initialRandomSeed;for(var e=t.length+50,i=0;i<t.length;i++){var o=t[i],n=2*Math.PI*this.seededRandom();void 0===o.x&&(o.x=e*Math.cos(n)),void 0===o.y&&(o.y=e*Math.sin(n))}}}},{key:"layoutNetwork",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var o=0,n={clusterNodeProperties:{shape:"ellipse",label:"",group:"",font:{multi:!1}},clusterEdgeProperties:{label:"",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>150){for(var s=t.length;t.length>150&&o<=10;){o+=1;var r=t.length;o%3==0?this.body.modules.clustering.clusterBridges(n):this.body.modules.clustering.clusterOutliers(n);if(r==t.length&&o%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}o>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var a=0;a<t.length;a++){var h=this.body.nodes[t[a]];!1===h.predefinedPosition&&(h.x+=70*(.5-this.seededRandom()),h.y+=70*(.5-this.seededRandom()))}this._declusterAll(),this.body.emitter.emit("_repositionBezierNodes")}}}},{key:"_shiftToCenter",value:function(){for(var t=m.getRangeCore(this.body.nodes,this.body.nodeIndices),e=m.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var o=this.body.nodes[this.body.nodeIndices[i]];o.x-=e.x,o.y-=e.y}}},{key:"_declusterAll",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit("_dataChanged")}}},{key:"getSeed",value:function(){return this.initialRandomSeed}},{key:"setupHierarchicalLayout",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t=void 0,e=void 0,i=!1,o=!1;this.lastNodeOnLevel={},this.hierarchical=new b;for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):o=!0);if(!0===o&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===o){var n=this.options.hierarchical.sortMethod;"hubsize"===n?this._determineLevelsByHubsize():"directed"===n?this._determineLevelsDirected():"custom"===n&&this._determineLevelsCustomCallback()}for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&this.hierarchical.ensureLevel(s);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(e,i){var o=t.hierarchical.trees;for(var n in o)o.hasOwnProperty(n)&&o[n]===e&&t.direction.shift(n,i)},n=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,o){if(!o[i.id]&&(o[i.id]=!0,t.hierarchical.childrenReference[i.id])){var n=t.hierarchical.childrenReference[i.id];if(n.length>0)for(var s=0;s<n.length;s++)e(t.body.nodes[n[s]],o)}},a=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,r=1e9,a=-1e9;for(var h in e)if(e.hasOwnProperty(h)){var d=t.body.nodes[h],l=t.hierarchical.levels[d.id],u=t.direction.getPosition(d),c=t._getSpaceAroundNode(d,e),p=(0,s.default)(c,2),f=p[0],m=p[1];o=Math.min(f,o),n=Math.min(m,n),l<=i&&(r=Math.min(u,r),a=Math.max(u,a))}return[r,a,o,n]},h=function(e,i){var o=t.hierarchical.getMaxLevel(e.id),n=t.hierarchical.getMaxLevel(i.id);return Math.min(o,n)},d=function(e,i,o){for(var n=t.hierarchical,s=0;s<i.length;s++){var r=i[s],a=n.distributionOrdering[r];if(a.length>1)for(var h=0;h<a.length-1;h++){var d=a[h],l=a[h+1];n.hasSameParent(d,l)&&n.inSameSubNetwork(d,l)&&e(d,l,o)}}},l=function(i,o){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=t.direction.getPosition(i),d=t.direction.getPosition(o),l=Math.abs(d-s),u=t.options.hierarchical.nodeSpacing;if(l>u){var c={},p={};r(i,c),r(o,p);var f=h(i,o),m=a(c,f),v=a(p,f),g=m[1],y=v[0],b=v[2];if(Math.abs(g-y)>u){var _=g-y+u;_<-b+u&&(_=-b+u),_<0&&(t._shiftBlock(o.id,_),e=!0,!0===n&&t._centerParent(o))}}},u=function(o,n){for(var h=n.id,d=n.edges,l=t.hierarchical.levels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},p=[],f=0;f<d.length;f++){var m=d[f];if(m.toId!=m.fromId){var v=m.toId==h?m.from:m.to;c[d[f].id]=v,t.hierarchical.levels[v.id]<l&&p.push(m)}}var g=function(e,i){for(var o=0,n=0;n<i.length;n++)if(void 0!==c[i[n].id]){var s=t.direction.getPosition(c[i[n].id])-e;o+=s/Math.sqrt(s*s+u)}return o},y=function(e,i){for(var o=0,n=0;n<i.length;n++)if(void 0!==c[i[n].id]){var s=t.direction.getPosition(c[i[n].id])-e;o-=u*Math.pow(s*s+u,-1.5)}return o},b=function(e,i){for(var o=t.direction.getPosition(n),s={},r=0;r<e;r++){var a=g(o,i),h=y(o,i);if(o-=Math.max(-40,Math.min(40,Math.round(a/h))),void 0!==s[o])break;s[o]=r}return o},_=b(o,p);!function(o){var s=t.direction.getPosition(n);if(void 0===i[n.id]){var h={};r(n,h),i[n.id]=h}var d=a(i[n.id]),l=d[2],u=d[3],c=o-s,p=0;c>0?p=Math.min(c,u-t.options.hierarchical.nodeSpacing):c<0&&(p=-Math.min(-c,l-t.options.hierarchical.nodeSpacing)),0!=p&&(t._shiftBlock(n.id,p),e=!0)}(_),_=b(o,d),function(i){var o=t.direction.getPosition(n),r=t._getSpaceAroundNode(n),a=(0,s.default)(r,2),h=a[0],d=a[1],l=i-o,u=o;l>0?u=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t.direction.setPosition(n,u),e=!0)}(_)};!0===this.options.hierarchical.blockShifting&&(function(i){var o=t.hierarchical.getLevels();o=o.reverse();for(var n=0;n<i&&(e=!1,d(l,o,!0),!0===e);n++);}(5),function(){for(var e in t.body.nodes)t.body.nodes.hasOwnProperty(e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var o=t.hierarchical.getLevels();o=o.reverse();for(var n=0;n<i;n++){e=!1;for(var s=0;s<o.length;s++)for(var r=o[s],a=t.hierarchical.distributionOrdering[r],h=0;h<a.length;h++)u(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=e.reverse();for(var i=0;i<e.length;i++)for(var o=e[i],n=t.hierarchical.distributionOrdering[o],s=0;s<n.length;s++)t._centerParent(n[s])}(),function(){for(var e=n(),i=0,s=0;s<e.length-1;s++){i+=e[s].max-e[s+1].min+t.options.hierarchical.treeSpacing,o(s+1,i)}}()}},{key:"_getSpaceAroundNode",value:function(t,e){var i=!0;void 0===e&&(i=!1);var o=this.hierarchical.levels[t.id];if(void 0!==o){var n=this.hierarchical.distributionIndex[t.id],s=this.direction.getPosition(t),r=this.hierarchical.distributionOrdering[o],a=1e9,h=1e9;if(0!==n){var d=r[n-1];if(!0===i&&void 0===e[d.id]||!1===i){a=s-this.direction.getPosition(d)}}if(n!=r.length-1){var l=r[n+1];if(!0===i&&void 0===e[l.id]||!1===i){var u=this.direction.getPosition(l);h=Math.min(h,u-s)}}return[a,h]}return[0,0]}},{key:"_centerParent",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var o=e[i],n=this.body.nodes[o],r=this.hierarchical.childrenReference[o];if(void 0!==r){var a=this._getCenterPosition(r),h=this.direction.getPosition(n),d=this._getSpaceAroundNode(n),l=(0,s.default)(d,2),u=l[0],c=l[1],p=h-a;(p<0&&Math.abs(p)<c-this.options.hierarchical.nodeSpacing||p>0&&Math.abs(p)<u-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(n,a)}}}},{key:"_placeNodesByHierarchy",value:function(t){this.positionedNodes={};for(var e in t)if(t.hasOwnProperty(e)){var i=(0,d.default)(t[e]);i=this._indexArrayToNodes(i),this.direction.sort(i);for(var o=0,n=0;n<i.length;n++){var s=i[n];if(void 0===this.positionedNodes[s.id]){var r=this.options.hierarchical.nodeSpacing,a=r*o;o>0&&(a=this.direction.getPosition(i[n-1])+r),this.direction.setPosition(s,a,e),this._validatePositionAndContinue(s,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){var i=this.hierarchical.childrenReference[t];if(void 0!==i){for(var o=[],n=0;n<i.length;n++)o.push(this.body.nodes[i[n]]);this.direction.sort(o);for(var s=0;s<o.length;s++){var r=o[s],a=this.hierarchical.levels[r.id];if(!(a>e&&void 0===this.positionedNodes[r.id]))return;var h=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+h,this.direction.setPosition(r,d,a),this._validatePositionAndContinue(r,a,d)}var l=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],l,e)}}},{key:"_validatePositionAndContinue",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var o=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-o<this.options.hierarchical.nodeSpacing){var n=o+this.options.hierarchical.nodeSpacing-i,s=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(s.withChild,n)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:"_indexArrayToNodes",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:"_getDistribution",value:function(){var t={},e=void 0,i=void 0;for(e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){i=this.body.nodes[e];var o=void 0===this.hierarchical.levels[e]?0:this.hierarchical.levels[e];this.direction.fix(i,o),void 0===t[o]&&(t[o]={}),t[o][e]=i}return t}},{key:"_getActiveEdges",value:function(t){var e=this,i=[];return f.forEach(t.edges,function(t){-1!==e.body.edgeIndices.indexOf(t.id)&&i.push(t)}),i}},{key:"_getHubSizes",value:function(){var t=this,e={},i=this.body.nodeIndices;f.forEach(i,function(i){var o=t.body.nodes[i],n=t._getActiveEdges(o).length;e[n]=!0});var o=[];return f.forEach(e,function(t){o.push(Number(t))}),o.sort(function(t,e){return e-t}),o}},{key:"_determineLevelsByHubsize",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),o=0;o<i.length;++o){if("break"===function(o){var n=i[o];if(0===n)return"break";f.forEach(t.body.nodeIndices,function(i){var o=t.body.nodes[i];n===t._getActiveEdges(o).length&&t._crawlNetwork(e,i)})}(o))break}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=function(e,i,o){var n=t.hierarchical.levels[e.id];void 0===n&&(n=t.hierarchical.levels[e.id]=1e5);var s=(m.cloneOptions(e,"node"),m.cloneOptions(i,"node"),void m.cloneOptions(o,"edge"));t.hierarchical.levels[i.id]=n+s};this._crawlNetwork(e),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_determineLevelsDirected",value:function(){var t=this,e=function(e){return f.forEach(t.body.edges,function(t){if(t.toId===e.fromId&&t.fromId===e.toId)return!0}),!1},i=function(i,o,n){var s=t.hierarchical.levels[i.id],r=t.hierarchical.levels[o.id];e(n)&&void 0!==s&&void 0!==r||(void 0===s&&(s=t.hierarchical.levels[i.id]=1e4),n.toId==o.id?t.hierarchical.levels[o.id]=s+1:t.hierarchical.levels[o.id]=s-1)};this._crawlNetwork(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)};this._crawlNetwork(e),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=function i(n,s){if(void 0===o[n.id]){t.hierarchical.setTreeIndex(n,s),o[n.id]=!0;for(var r=void 0,a=t._getActiveEdges(n),h=0;h<a.length;h++){var d=a[h];!0===d.connected&&(r=d.toId==n.id?d.from:d.to,n.id!=r.id&&(e(n,r,d),i(r,s)))}}};if(void 0===i)for(var s=0,r=0;r<this.body.nodeIndices.length;r++){var a=this.body.nodeIndices[r];if(void 0===o[a]){var h=this.body.nodes[a];n(h,s),s+=1}}else{var d=this.body.nodes[i];if(void 0===d)return void console.error("Node not found:",i);n(d)}}},{key:"_shiftBlock",value:function(t,e){var i=this,o={};!function t(n){if(!o[n]){o[n]=!0,i.direction.shift(n,e);var s=i.hierarchical.childrenReference[n];if(void 0!==s)for(var r=0;r<s.length;r++)t(s[r])}}(t)}},{key:"_findCommonParent",value:function(t,e){var i=this,o={};return function t(e,o){var n=i.hierarchical.parentReference[o];if(void 0!==n)for(var s=0;s<n.length;s++){var r=n[s];e[r]=!0,t(e,r)}}(o,t),function t(e,o){var n=i.hierarchical.parentReference[o];if(void 0!==n)for(var s=0;s<n.length;s++){var r=n[s];if(void 0!==e[r])return{foundParent:r,withChild:o};var a=t(e,r);if(null!==a.foundParent)return a}return{foundParent:null,withChild:o}}(o,e)}},{key:"setDirectionStrategy",value:function(){var t="UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction;this.direction=t?new y(this):new g(this)}},{key:"_getCenterPosition",value:function(t){for(var e=1e9,i=-1e9,o=0;o<t.length;o++){var n=void 0;if(void 0!==t[o].id)n=t[o];else{var s=t[o];n=this.body.nodes[s]}var r=this.direction.getPosition(n);e=Math.min(e,r),i=Math.max(i,r)}return.5*(e+i)}}]),t}();e.default=_},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.VerticalStrategy=e.HorizontalStrategy=void 0;var n=i(3),s=o(n),r=i(4),a=o(r),h=i(5),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(t){return this.fake_use(t),this.abstract()}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:"getTreeSize",value:function(t){return this.fake_use(t),this.abstract()}},{key:"sort",value:function(t){this.fake_use(t),this.abstract()}},{key:"fix",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:"shift",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),m=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(t){return t.x}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.x||void 0===e.x?0:t.x-e.x})}},{key:"fix",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),e}(f),v=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(t){return t.y}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.y||void 0===e.y?0:t.y-e.y})}},{key:"fix",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),e}(f);e.HorizontalStrategy=v,e.VerticalStrategy=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(19),a=o(r),h=i(6),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(10),v=i(37),g=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},f.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,p.default)(t,[{key:"_restore",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,f.deepExtend(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;!1!==this.options.addNode&&(this._createAddNodeButton(o),n=!0),!1!==this.options.addEdge&&(!0===n?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(!0===n?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&!1!==this.options.editEdge&&(!0===n?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&!1!==this.options.deleteNode?(!0===n&&this._createSeperator(4),this._createDeleteButton(o)):0===t&&!1!==this.options.deleteEdge&&(!0===n&&this._createSeperator(4),this._createDeleteButton(o))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler._getSelectedNode();if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==e.isCluster){var i=f.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",this._dragStartEdge.bind(this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,d.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(!0===this.guiEnabled){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);!1===o.selected&&(o.x=e.from.x,o.y=e.from.y),!1===n.selected&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),o=void 0;if(e.length>0){for(var n=0;n<e.length;n++)if(!0===this.body.nodes[e[n]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);"function"==typeof this.options.deleteNode&&(o=this.options.deleteNode)
+}else i.length>0&&"function"==typeof this.options.deleteEdge&&(o=this.options.deleteEdge);if("function"==typeof o){var s={nodes:e,edges:i};if(2!==o.length)throw new Error("The function for delete does not support two arguments (data, callback)");o(s,function(e){null!==e&&void 0!==e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=f.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+f.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},f.recursiveDOMDelete(this.editModeDiv);var t=this.options.locales[this.options.locale],e=this._createButton("editMode","vis-button vis-edit vis-edit-mode",t.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(e),this._bindHammerToDiv(e,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(f.recursiveDOMDelete(this.editModeDiv),f.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var t=0;t<this.manipulationHammers.length;t++)this.manipulationHammers[t].destroy();this.manipulationHammers=[]}}},{key:"_removeManipulationDOM",value:function(){this._clean(),f.recursiveDOMDelete(this.manipulationDiv),f.recursiveDOMDelete(this.editModeDiv),f.recursiveDOMDelete(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){var e;e=this.options.rtl?"vis-button vis-delete-rtl":"vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:"_bindHammerToDiv",value:function(t,e){var i=new m(t,{});v.onTouch(i,e),this.manipulationHammers.push(i)}},{key:"_cleanupTemporaryNodesAndEdges",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var e=this.body.edgeIndices.indexOf(this.temporaryIds.edges[t]);-1!==e&&this.body.edgeIndices.splice(e,1)}for(var i=0;i<this.temporaryIds.nodes.length;i++){delete this.body.nodes[this.temporaryIds.nodes[i]];var o=this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]);-1!==o&&this.body.nodeIndices.splice(o,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:"_controlNodeTouch",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=f.extend({},this.body.view.translation)}},{key:"_controlNodeDragStart",value:function(t){var e=this.lastTouch,i=this.selectionHandler._pointerToPositionObject(e),o=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],s=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=o.isOverlappingWith(i),a=n.isOverlappingWith(i);!0===r?(this.selectedControlNode=o,s.edgeType.from=o):!0===a&&(this.selectedControlNode=n,s.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit("_redraw")}},{key:"_controlNodeDrag",value:function(t){this.body.emitter.emit("disablePhysics");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);if(void 0!==this.selectedControlNode)this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y;else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}this.body.emitter.emit("_redraw")}},{key:"_controlNodeDragEnd",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(n[r]!==this.selectedControlNode.id){s=this.body.nodes[n[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(!0===s.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,o.to.id):this._performEditEdge(o.from.id,s.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=f.extend({},this.body.view.translation);var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var o=this._getNewTargetNode(i.x,i.y);this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id);var n=this.body.functions.createEdge({id:"connectionEdge"+f.randomUUID(),from:i.id,to:o.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[n.id]=n,this.body.edgeIndices.push(n.id),this.temporaryIds.nodes.push(o.id),this.temporaryIds.edges.push(n.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(e.x),i.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=void 0;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(n[r])){s=this.body.nodes[n[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(!0===s.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(o,s.id)),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(t){var e=this.lastTouch;this.selectionHandler._generateClickEvent("dragStart",t,e,void 0,!0)}},{key:"_performAddNode",value:function(t){var e=this,i={id:f.randomUUID(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(t){null!==t&&void 0!==t&&"addNode"===e.inMode&&(e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,o={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(o,function(t){null!==t&&void 0!==t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,o={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===(void 0===n?"undefined":(0,d.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(239),u=o(l),c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=e,this.springLength=i,this.springConstant=o,this.distanceSolver=new u.default}return(0,d.default)(t,[{key:"setOptions",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:"solve",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o),this._createE_matrix();for(var n=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),a=1e9,h=0,d=0,l=0,u=0,c=0;a>.01&&n<r;){n+=1;var p=this._getHighestEnergyNode(i),f=(0,s.default)(p,4);for(h=f[0],a=f[1],d=f[2],l=f[3],u=a,c=0;u>1&&c<5;){c+=1,this._moveNode(h,d,l);var m=this._getEnergy(h),v=(0,s.default)(m,3);u=v[0],d=v[1],l=v[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=0,n=e[0],r=0,a=0,h=0;h<e.length;h++){var d=e[h];if(!1===i[d].predefinedPosition||!0===i[d].isCluster&&!0===t||!0===i[d].options.fixed.x||!0===i[d].options.fixed.y){var l=this._getEnergy(d),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2];o<c&&(o=c,n=d,r=p,a=f)}}return[n,o,r,a]}},{key:"_getEnergy",value:function(t){var e=(0,s.default)(this.E_sums[t],2),i=e[0],o=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(o,2)),i,o]}},{key:"_moveNode",value:function(t,e,i){for(var o=this.body.nodeIndices,n=this.body.nodes,s=0,r=0,a=0,h=n[t].x,d=n[t].y,l=this.K_matrix[t],u=this.L_matrix[t],c=0;c<o.length;c++){var p=o[c];if(p!==t){var f=n[p].x,m=n[p].y,v=l[p],g=u[p],y=1/Math.pow(Math.pow(h-f,2)+Math.pow(d-m,2),1.5);s+=v*(1-g*Math.pow(d-m,2)*y),r+=v*(g*(h-f)*(d-m)*y),a+=v*(1-g*Math.pow(h-f,2)*y)}}var b=s,_=r,w=e,x=a,k=i,S=(w/b+k/_)/(_/b-x/_),D=-(_*S+w)/b;n[t].x+=D,n[t].y+=S,this._updateE_matrix(t)}},{key:"_createL_matrix",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var o=0;o<e.length;o++){this.L_matrix[e[o]]={};for(var n=0;n<e.length;n++)this.L_matrix[e[o]][e[n]]=i*t[e[o]][e[n]]}}},{key:"_createK_matrix",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var o=0;o<e.length;o++){this.K_matrix[e[o]]={};for(var n=0;n<e.length;n++)this.K_matrix[e[o]][e[n]]=i*Math.pow(t[e[o]][e[n]],-2)}}},{key:"_createE_matrix",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var o=0;o<t.length;o++){for(var n=t[o],s=e[n].x,r=e[n].y,a=0,h=0,d=o;d<t.length;d++){var l=t[d];if(l!==n){var u=e[l].x,c=e[l].y,p=1/Math.sqrt(Math.pow(s-u,2)+Math.pow(r-c,2));this.E_matrix[n][d]=[this.K_matrix[n][l]*(s-u-this.L_matrix[n][l]*(s-u)*p),this.K_matrix[n][l]*(r-c-this.L_matrix[n][l]*(r-c)*p)],this.E_matrix[l][o]=this.E_matrix[n][d],a+=this.E_matrix[n][d][0],h+=this.E_matrix[n][d][1]}}this.E_sums[n]=[a,h]}}},{key:"_updateE_matrix",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=this.E_matrix[t],n=this.K_matrix[t],s=this.L_matrix[t],r=i[t].x,a=i[t].y,h=0,d=0,l=0;l<e.length;l++){var u=e[l];if(u!==t){var c=o[l],p=c[0],f=c[1],m=i[u].x,v=i[u].y,g=1/Math.sqrt(Math.pow(r-m,2)+Math.pow(a-v,2)),y=n[u]*(r-m-s[u]*(r-m)*g),b=n[u]*(a-v-s[u]*(a-v)*g);o[l]=[y,b],h+=y,d+=b;var _=this.E_sums[u];_[0]+=y-p,_[1]+=b-f}}this.E_sums[t]=[h,d]}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,[{key:"getDistances",value:function(t,e,i){for(var o={},n=t.edges,s=0;s<e.length;s++){var r=e[s],a={};o[r]=a;for(var h=0;h<e.length;h++)a[e[h]]=s==h?0:1e9}for(var d=0;d<i.length;d++){var l=n[i[d]];!0===l.connected&&void 0!==o[l.fromId]&&void 0!==o[l.toId]&&(o[l.fromId][l.toId]=1,o[l.toId][l.fromId]=1)}for(var u=e.length,c=0;c<u;c++)for(var p=e[c],f=o[p],m=0;m<u-1;m++)for(var v=e[m],g=o[v],y=m+1;y<u;y++){var b=e[y],_=o[b],w=Math.min(g[b],g[p]+f[b]);g[b]=w,_[v]=w}return o}}]),t}();e.default=h}])});
+//# sourceMappingURL=vis.map
diff --git a/01_Code/physical_computing_interface/simulation/demos/indexBeamComparison.html b/01_Code/physical_computing_interface/simulation/demos/indexBeamComparison.html
index c59a11e376f06c542bc20a78d388b461f223655b..6ff6ddd21fa01f58c083b31e2a4c308b140707e8 100644
--- a/01_Code/physical_computing_interface/simulation/demos/indexBeamComparison.html
+++ b/01_Code/physical_computing_interface/simulation/demos/indexBeamComparison.html
@@ -140,11 +140,11 @@
             var setup;
             var setup1;
             var globalSetup={
-                exageration:10e3,
+                exaggeration:10e3,
                 speed:3.0
 
             };
-            var ex=gui.add(globalSetup, 'exageration', 0, 10e4).listen();
+            var ex=gui.add(globalSetup, 'exaggeration', 0, 10e4).listen();
             var sp=gui.add(globalSetup, 'speed', 0, 5).listen();
 
             ex.onChange(updateExSpeed);
@@ -175,7 +175,7 @@
                     stiffness:10000000
                 };
 
-                setup.hierarical=false;
+                setup.hierarchical=false;
                 setup.voxelSize=voxelSize;
 
                 const position=new THREE.Vector3(0,0,0);
@@ -214,7 +214,7 @@
                 setup.viz.minStress=10e6;
                 setup.viz.maxStress=-10e6;
 
-                setup.viz.exageration=globalSetup.exageration;
+                setup.viz.exaggeration=globalSetup.exaggeration;
                 setup.solve=solveParallel;
                 setup.numTimeSteps=100;
                 setup.supports=supports;
@@ -229,20 +229,20 @@
                 ////////////////////////////////////
                 setup1=JSON.parse(JSON.stringify(setupEmpty));
 
-                setup1.hierarical=true;
+                setup1.hierarchical=true;
                 setup1.voxelSize=voxelSize;
 
                 
 
-                lateralLoadSetup1(setup1,position,latticeSize,voxelSize,createHieraricalVoxel,[],[],material);
-                lateralLoadSetup1(setup1,position2,latticeSize,voxelSize,createHieraricalVoxel,supports,loads,material2);
+                lateralLoadSetup1(setup1,position,latticeSize,voxelSize,createHierarchalVoxel,[],[],material);
+                lateralLoadSetup1(setup1,position2,latticeSize,voxelSize,createHierarchalVoxel,supports,loads,material2);
                 // changeMaterialFromBox(setup1,diffMaterialBox);
 
                 setup1.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
                 setup1.viz.minStress=10e6;
                 setup1.viz.maxStress=-10e6;
 
-                setup1.viz.exageration=globalSetup.exageration;
+                setup1.viz.exaggeration=globalSetup.exaggeration;
                 setup1.solve=solveParallel;
                 setup1.supports=supports;
                 setup1.loads=loads;
@@ -290,8 +290,8 @@
             }
 
             function updateExSpeed(){
-                three.setup.animation.exageration=globalSetup.exageration;
-                three1.setup.animation.exageration=globalSetup.exageration;
+                three.setup.animation.exaggeration=globalSetup.exaggeration;
+                three1.setup.animation.exaggeration=globalSetup.exaggeration;
                 three.setup.animation.speed=globalSetup.speed;
                 three1.setup.animation.speed=globalSetup.speed;
 
diff --git a/01_Code/physical_computing_interface/simulation/demos/indexHierarchical.html b/01_Code/physical_computing_interface/simulation/demos/indexHierarchical.html
index ce1e4c3a1288187a6d56d5e401f091d4a295e134..3117c6482a473be4b44570512dea90e2e88e76ed 100644
--- a/01_Code/physical_computing_interface/simulation/demos/indexHierarchical.html
+++ b/01_Code/physical_computing_interface/simulation/demos/indexHierarchical.html
@@ -150,7 +150,7 @@
 				
 				setup=JSON.parse(JSON.stringify(setupEmpty));
 
-				setup.hierarical=false;
+				setup.hierarchical=false;
 				setup.voxelSize=voxelSize;
 
 				latticeSetup(setup,latticeSize,voxelSize,createVoxel,{x:0,y:-400,z:0});
@@ -160,7 +160,7 @@
 				setup.viz.minStress=10e6;
 				setup.viz.maxStress=-10e6;
 
-				setup.viz.exageration=10e3;
+				setup.viz.exaggeration=10e3;
 				setup.solve=solveParallel;
 				setup.numTimeSteps=100;
 
@@ -172,17 +172,17 @@
 				////////////////////////////////////
 				setup1=JSON.parse(JSON.stringify(setupEmpty));
 
-				setup1.hierarical=true;
+				setup1.hierarchical=true;
 				setup1.voxelSize=voxelSize;
 
-				latticeSetup(setup1,latticeSize,voxelSize,createHieraricalVoxel,{x:0,y:-400,z:0});
+				latticeSetup(setup1,latticeSize,voxelSize,createHierarchalVoxel,{x:0,y:-400,z:0});
 
 
 				setup1.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
 				setup1.viz.minStress=10e6;
 				setup1.viz.maxStress=-10e6;
 
-				setup1.viz.exageration=10e3;
+				setup1.viz.exaggeration=10e3;
 				setup1.solve=solveParallel;
 
 				
diff --git a/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia copy.html b/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia copy.html
index a4fee2dadb985146e00a3c592a4f2f2155d8d48d..84ac52d627c17e3a8cf659e2d2d52d7ec9ad50bf 100644
--- a/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia copy.html	
+++ b/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia copy.html	
@@ -61,7 +61,7 @@
 				// setup.viz.minStress=10e6;
 				// setup.viz.maxStress=-10e6;
 
-				setup.animation.exageration=75444;
+				setup.animation.exaggeration=75444;
 
 				// setup.viz.colorMaps=[coolwarm,YlGnBu, winter ,jet];
 
diff --git a/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia.html b/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia.html
index a09249dea9583252c6bb1222e4f8e43bf806574b..26dea94335f9bbf166f9a64c6af61e3ad5370ee0 100644
--- a/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia.html
+++ b/01_Code/physical_computing_interface/simulation/demos/indexTrialJulia.html
@@ -67,7 +67,7 @@
 				// setup.viz.minStress=10e6;
 				// setup.viz.maxStress=-10e6;
 
-				setup.viz.exageration=10e3;
+				setup.viz.exaggeration=10e3;
 
 				// setup.viz.colorMaps=[coolwarm,YlGnBu, winter ,jet];
 
diff --git a/01_Code/physical_computing_interface/simulation/json/emptySetup.json b/01_Code/physical_computing_interface/simulation/json/emptySetup.json
index b2612258e5850384489c30a5eca4d0645fb5ffcb..18687e76996fd319aa93fb0457bb92a39e5409ae 100644
--- a/01_Code/physical_computing_interface/simulation/json/emptySetup.json
+++ b/01_Code/physical_computing_interface/simulation/json/emptySetup.json
@@ -4,7 +4,7 @@
     "ndofs"   : 0,
     "animation" :  {
         "showDisplacement" : true,
-        "exageration" : 2000,
+        "exaggeration" : 2000,
         "speed":3.0
     },
     "viz" :{
diff --git a/01_Code/physical_computing_interface/simulation/json/parallelCube.js b/01_Code/physical_computing_interface/simulation/json/parallelCube.js
index 68520ac06d3a372befa4d9858c501806e347e903..b3c4144d14137740cbbd0f68fa8cf8a39381b694 100644
--- a/01_Code/physical_computing_interface/simulation/json/parallelCube.js
+++ b/01_Code/physical_computing_interface/simulation/json/parallelCube.js
@@ -491,7 +491,7 @@ var setup=
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 10e1,
+		exaggeration : 10e1,
 		speed:3.0
 		
 	},
diff --git a/01_Code/physical_computing_interface/simulation/json/parallelVoxel.js b/01_Code/physical_computing_interface/simulation/json/parallelVoxel.js
index 092fef5436bac7df4023f3aad1e44573e6eceb38..befcf8a29a9b2f9cb44082424e0981cd4d8d3183 100644
--- a/01_Code/physical_computing_interface/simulation/json/parallelVoxel.js
+++ b/01_Code/physical_computing_interface/simulation/json/parallelVoxel.js
@@ -239,7 +239,7 @@ var setup={
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 100000,
+		exaggeration : 100000,
 		speed:3.0
 		
 	},
diff --git a/01_Code/physical_computing_interface/simulation/json/setup.json b/01_Code/physical_computing_interface/simulation/json/setup.json
index 64efd9124617d5b481f6ab6b83178c1d7d4dfe4f..d3f9166ff24d546bbd391bc583338cefd559ab63 100644
--- a/01_Code/physical_computing_interface/simulation/json/setup.json
+++ b/01_Code/physical_computing_interface/simulation/json/setup.json
@@ -9655,7 +9655,7 @@
     "ndofs": 864,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/setup1.json b/01_Code/physical_computing_interface/simulation/json/setup1.json
index 6e78148d837c22eeb5925b4bb95ded9484fc239d..4bc3159750018999e236d040239e79c7be41d8fc 100644
--- a/01_Code/physical_computing_interface/simulation/json/setup1.json
+++ b/01_Code/physical_computing_interface/simulation/json/setup1.json
@@ -9655,7 +9655,7 @@
     "ndofs": 864,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/setupChiral.json b/01_Code/physical_computing_interface/simulation/json/setupChiral.json
index 13fe60a57cd1bdb9e0d2829f6ba1ebb7f64f6781..0628a3f946b876e59b15638b14ead8987e2e4e55 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupChiral.json
+++ b/01_Code/physical_computing_interface/simulation/json/setupChiral.json
@@ -19197,7 +19197,7 @@
     "ndofs": 2190,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/setupChiral3.json b/01_Code/physical_computing_interface/simulation/json/setupChiral3.json
index bd33977185a1e882ec602fe89ca32ecf92479ef8..43e237c5a7ec855ffce23f667c4cd37396b65d8e 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupChiral3.json
+++ b/01_Code/physical_computing_interface/simulation/json/setupChiral3.json
@@ -58027,7 +58027,7 @@
     "ndofs": 6516,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/setupFlight.js b/01_Code/physical_computing_interface/simulation/json/setupFlight.js
index c199e26e4659f6d52835e7a2aff35a131f88dbba..d8cfd7f7e5ef41de5e0adc45fd95aa0ea0a48dde 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupFlight.js
+++ b/01_Code/physical_computing_interface/simulation/json/setupFlight.js
@@ -45,7 +45,7 @@ var setup=
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 10,
+		exaggeration : 10,
 		speed:3.0
 		
 	},
diff --git a/01_Code/physical_computing_interface/simulation/json/setupScaling.json b/01_Code/physical_computing_interface/simulation/json/setupScaling.json
index ae5b40dff451847e0b4db8760a0264cc7893f241..600908a342a39f57794ea466131f725a1c09930a 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupScaling.json
+++ b/01_Code/physical_computing_interface/simulation/json/setupScaling.json
@@ -37807,7 +37807,7 @@
     "ndofs": 3240,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/setupSimple.json b/01_Code/physical_computing_interface/simulation/json/setupSimple.json
index 7a1589c05584c4d64e521ef15196297f79722075..4ef880e40afb062c941a2d4a7e3cdca3c7452aa6 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupSimple.json
+++ b/01_Code/physical_computing_interface/simulation/json/setupSimple.json
@@ -41,7 +41,7 @@
 	"animation" :  {
 	
 		"showDisplacement" : true,
-		"exageration" : 10000,
+		"exaggeration" : 10000,
 		"speed":3.0
 		
 	},
diff --git a/01_Code/physical_computing_interface/simulation/json/setupTest.json b/01_Code/physical_computing_interface/simulation/json/setupTest.json
index 036477eb32c2c625081c2f0bbd71374e65894ce3..eb590923ccf4966f96f0c2daa213d660a1341c86 100644
--- a/01_Code/physical_computing_interface/simulation/json/setupTest.json
+++ b/01_Code/physical_computing_interface/simulation/json/setupTest.json
@@ -703,7 +703,7 @@
     "ndofs": 72,
     "animation": {
       "showDisplacement": true,
-      "exageration": 2000,
+      "exaggeration": 2000,
       "speed": 3
     },
     "viz": {
diff --git a/01_Code/physical_computing_interface/simulation/json/trialJulia.json b/01_Code/physical_computing_interface/simulation/json/trialJulia.json
index c750dccd2fd2a39e73439e97e3ddbe4988392af1..af82789c779778bbdb4e9468e53e5a65259b318f 100644
--- a/01_Code/physical_computing_interface/simulation/json/trialJulia.json
+++ b/01_Code/physical_computing_interface/simulation/json/trialJulia.json
@@ -1 +1 @@
-{"nodes":[{"degrees_of_freedom":[0,1,2,3,4,5],"id":"n0","parent":"11","position":{"x":5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[6,7,8,9,10,11],"id":"n1","parent":"11","position":{"x":0,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[12,13,14,15,16,17],"id":"n2","parent":"11","position":{"x":-5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[18,19,20,21,22,23],"id":"n3","parent":"11","position":{"x":0,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[24,25,26,27,28,29],"id":"n4","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[30,31,32,33,34,35],"id":"n5","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[36,37,38,39,40,41],"id":"n6","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[42,43,44,45,46,47],"id":"n7","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[48,49,50,51,52,53],"id":"n8","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[54,55,56,57,58,59],"id":"n9","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[60,61,62,63,64,65],"id":"n10","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[66,67,68,69,70,71],"id":"n11","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[72,73,74,75,76,77],"id":"n12","parent":"11","position":{"x":5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":6.127132793271835e-5,"z":-7.639095581589413e-5,"y":-0.0005764274019345438},"angle":{"x":-1.9013930510645524e-6,"z":3.0128006125328124e-6,"y":-8.548784645213563e-6}},{"degrees_of_freedom":[78,79,80,81,82,83],"id":"n13","parent":"11","position":{"x":5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.569761109534172e-6,"z":-0.00010777159947126257,"y":-0.00028572049297527995},"angle":{"x":-6.622493094482657e-6,"z":-7.927227597480725e-6,"y":1.4663176431686647e-5}},{"degrees_of_freedom":[84,85,86,87,88,89],"id":"n14","parent":"11","position":{"x":5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.116467881432545e-7,"z":-3.4746541839714456e-5,"y":-0.00028307701043840715},"angle":{"x":-6.065254866757487e-6,"z":-1.4699240266210533e-8,"y":-3.382088363859101e-6}},{"degrees_of_freedom":[90,91,92,93,94,95],"id":"n15","parent":"11","position":{"x":5,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1351803857914026e-5,"z":-1.960349764016291e-5,"y":-0.00027718211977956024},"angle":{"x":-9.386528610793465e-6,"z":-8.717492222424017e-6,"y":-1.0741990711025303e-5}},{"degrees_of_freedom":[96,97,98,99,100,101],"id":"n16","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.2295178068147197e-5,"z":-5.648161134569309e-5,"y":-0.0003714623512687226},"angle":{"x":-4.924079214971394e-5,"z":-3.547543920729361e-5,"y":6.0207606143133185e-5}},{"degrees_of_freedom":[102,103,104,105,106,107],"id":"n17","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012974950662651946,"z":-7.539604596915942e-5,"y":-0.00039109855402806284},"angle":{"x":-2.486443651569343e-6,"z":-1.3969227242829163e-5,"y":-5.3545429511993016e-6}},{"degrees_of_freedom":[108,109,110,111,112,113],"id":"n18","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7555535024263845e-5,"z":-9.187963135299823e-5,"y":-0.0003767891618344145},"angle":{"x":4.3720625778137304e-5,"z":-3.669467365241936e-5,"y":-6.48984249855061e-5}},{"degrees_of_freedom":[114,115,116,117,118,119],"id":"n19","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.2370324426419476e-5,"z":-0.00010808661547533818,"y":-0.0002959439770030652},"angle":{"x":-9.587473463721716e-6,"z":-1.2988752332348383e-5,"y":6.885525725068618e-6}},{"degrees_of_freedom":[120,121,122,123,124,125],"id":"n20","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2907516204761859e-6,"z":-5.842180432046639e-5,"y":-0.0002014830985866955},"angle":{"x":-6.220130945016956e-5,"z":-4.1867268431194384e-5,"y":9.329977544387342e-5}},{"degrees_of_freedom":[126,127,128,129,130,131],"id":"n21","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.5663043333925166e-5,"z":-3.4779235415806295e-5,"y":-0.00018267589100857734},"angle":{"x":-3.973276675619675e-6,"z":-7.736958438718973e-6,"y":1.498046266648981e-6}},{"degrees_of_freedom":[132,133,134,135,136,137],"id":"n22","parent":"11","position":{"x":5,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6129606473451595e-6,"z":-2.304579484405199e-5,"y":-0.00019700937696385043},"angle":{"x":2.9730820615397525e-5,"z":-2.6422701629836494e-5,"y":-5.6086589820472104e-5}},{"degrees_of_freedom":[138,139,140,141,142,143],"id":"n23","parent":"11","position":{"x":-5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.5377777257867134e-5,"z":-0.00011723453085738498,"y":-0.0006552370489324696},"angle":{"x":-9.965305653783383e-5,"z":-2.4016887302890977e-5,"y":-5.518173102753488e-6}},{"degrees_of_freedom":[144,145,146,147,148,149],"id":"n24","parent":"11","position":{"x":0,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":7.949989139376031e-5,"z":-9.497832993157438e-5,"y":-0.0006056060795723847},"angle":{"x":4.468232025152814e-5,"z":-7.392087564194488e-5,"y":-1.0328494038985797e-5}},{"degrees_of_freedom":[150,151,152,153,154,155],"id":"n25","parent":"11","position":{"x":0,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.4110268389745248e-8,"z":-8.891661907729727e-5,"y":-0.0005923884537637654},"angle":{"x":-6.071875783003396e-6,"z":-9.053262432384068e-6,"y":-1.0960377728638846e-5}},{"degrees_of_freedom":[156,157,158,159,160,161],"id":"n26","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.980378780188304e-5,"z":-8.351279249544361e-5,"y":-0.001005964818163343},"angle":{"x":-0.0001332865429699522,"z":-2.1843642012876748e-5,"y":-7.115220852895506e-6}},{"degrees_of_freedom":[162,163,164,165,166,167],"id":"n27","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.273687102346741e-5,"z":-8.666163675302946e-5,"y":-0.0006166130603515833},"angle":{"x":0.0007145346527257998,"z":-0.00031910070800352056,"y":-5.063707444213137e-6}},{"degrees_of_freedom":[168,169,170,171,172,173],"id":"n28","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4304472797574585e-5,"z":-9.286668541744927e-5,"y":-0.0004632055300697475},"angle":{"x":-0.00010476457304674579,"z":-2.6941953700752467e-5,"y":-4.1907782267487045e-6}},{"degrees_of_freedom":[174,175,176,177,178,179],"id":"n29","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.479832553620267e-5,"z":-0.00010388623094324996,"y":-0.0004851400327793676},"angle":{"x":0.0002665155173172908,"z":0.00010183275945537704,"y":-8.436678850859844e-6}},{"degrees_of_freedom":[180,181,182,183,184,185],"id":"n30","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.5869772361783854e-5,"z":-0.00010780933224229556,"y":-0.0005191034477018869},"angle":{"x":-0.00012307939842534182,"z":-3.8402387409671986e-5,"y":-9.353758825194293e-6}},{"degrees_of_freedom":[186,187,188,189,190,191],"id":"n31","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.593048979287994e-5,"z":-0.00010476015655908967,"y":-0.0009919513076572896},"angle":{"x":3.101737796819643e-5,"z":-9.537636611059227e-5,"y":-5.927588327633606e-6}},{"degrees_of_freedom":[192,193,194,195,196,197],"id":"n32","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.158732563502504e-5,"z":-9.562701844056847e-5,"y":-0.0011956776124639784},"angle":{"x":-0.0001515997704632538,"z":-3.3304022631398205e-5,"y":-5.1601233318580876e-6}},{"degrees_of_freedom":[198,199,200,201,202,203],"id":"n33","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.876979230599399e-5,"z":-8.575088511137702e-5,"y":-0.0011456749524418888},"angle":{"x":0.0009170300281609024,"z":0.0003470063501822908,"y":-6.108290126576873e-6}},{"degrees_of_freedom":[204,205,206,207,208,209],"id":"n34","parent":"11","position":{"x":-5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.62809621994341e-5,"z":2.3957647839037344e-5,"y":-0.00028829903598645833},"angle":{"x":-4.856370516257132e-5,"z":-7.66383725766996e-6,"y":2.850842658665082e-5}},{"degrees_of_freedom":[210,211,212,213,214,215],"id":"n35","parent":"11","position":{"x":-5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.70118539723795e-5,"z":-8.117311583525215e-8,"y":-0.00028912134929227754},"angle":{"x":-2.8222974350723854e-5,"z":-3.8343527094672525e-6,"y":1.5590867114343817e-5}},{"degrees_of_freedom":[216,217,218,219,220,221],"id":"n36","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.537081706266729e-5,"z":-1.014570871502798e-5,"y":-0.00016875867503778546},"angle":{"x":5.18517064158398e-6,"z":-2.066569861882278e-5,"y":-1.9664979826319588e-5}},{"degrees_of_freedom":[222,223,224,225,226,227],"id":"n37","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.78287668553489e-5,"z":6.561244020218238e-6,"y":-0.00021576920241149356},"angle":{"x":2.1268838017196703e-5,"z":9.209627026869108e-6,"y":6.483522329191923e-5}},{"degrees_of_freedom":[228,229,230,231,232,233],"id":"n38","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017618916523321913,"z":2.120954178050248e-5,"y":-0.00033999416500637595},"angle":{"x":8.649902729306661e-5,"z":-2.84184990727143e-5,"y":-4.159324559149605e-5}},{"degrees_of_freedom":[234,235,236,237,238,239],"id":"n39","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.023327536817232e-5,"z":2.081361555884091e-5,"y":-0.0004360656722063371},"angle":{"x":-3.411511326841213e-5,"z":-9.58477397523689e-5,"y":0.00014912549423106109}},{"degrees_of_freedom":[240,241,242,243,244,245],"id":"n40","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017230484576138903,"z":3.3026133970852355e-5,"y":-0.00038860612092968293},"angle":{"x":7.2974047816760535e-6,"z":-2.066581478682328e-5,"y":-6.35212282345018e-5}},{"degrees_of_freedom":[246,247,248,249,250,251],"id":"n41","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001680624429245042,"z":5.209081900790816e-6,"y":-0.0003420665059032294},"angle":{"x":2.761407790076071e-5,"z":4.280211639782865e-5,"y":0.00011599295898691574}},{"degrees_of_freedom":[252,253,254,255,256,257],"id":"n42","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015781961883380407,"z":-1.3732510165444174e-5,"y":-0.0002252320643227212},"angle":{"x":8.625045379106706e-5,"z":-1.2912974873755336e-5,"y":-4.159345146889665e-5}},{"degrees_of_freedom":[258,259,260,261,262,263],"id":"n43","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.3794536611178853e-11,"z":-9.336828999068538e-6,"y":-0.0001265983051085975},"angle":{"x":-1.5855753921700385e-5,"z":-0.00011563721057273592,"y":0.0002489549346602368}},{"degrees_of_freedom":[264,265,266,267,268,269],"id":"n44","parent":"11","position":{"x":0,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.143664078975512e-5,"z":-7.289909064571853e-5,"y":-0.00019920029996414794},"angle":{"x":0.00010929407808522114,"z":3.961471798517929e-5,"y":9.187975597437265e-6}},{"degrees_of_freedom":[270,271,272,273,274,275],"id":"n45","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.868492035381642e-6,"z":-1.791847341338329e-10,"y":-0.00015321835074543372},"angle":{"x":-3.40196266557355e-5,"z":-9.064707238951791e-6,"y":-5.017451211032404e-5}},{"degrees_of_freedom":[276,277,278,279,280,281],"id":"n46","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.101387679182387e-6,"z":-2.674229058501999e-5,"y":-0.00020478614425062115},"angle":{"x":-1.9170133990234863e-5,"z":9.410910051156162e-6,"y":-1.4324638958052132e-5}},{"degrees_of_freedom":[282,283,284,285,286,287],"id":"n47","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.7788168746499293e-5,"z":-7.745920364337898e-5,"y":-0.00027047524690588723},"angle":{"x":-4.0766521465736154e-5,"z":2.5295683333854193e-5,"y":3.781367501001636e-5}},{"degrees_of_freedom":[288,289,290,291,292,293],"id":"n48","parent":"11","position":{"x":0,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.899396288077852e-5,"z":-3.517901595570018e-5,"y":-0.00034821869791233135},"angle":{"x":0.00015300770457871444,"z":3.645777222423208e-5,"y":-4.245024748198064e-5}},{"degrees_of_freedom":[294,295,296,297,298,299],"id":"n49","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.071184316026628e-5,"z":-0.0002489841133426273,"y":-0.0003828915942506569},"angle":{"x":-2.7906589226466762e-5,"z":-1.8412155501118095e-5,"y":-0.00011738742567320043}},{"degrees_of_freedom":[300,301,302,303,304,305],"id":"n50","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7715899463409387e-5,"z":-0.0002908384365532881,"y":-0.0003380461112651836},"angle":{"x":-7.080837703914142e-5,"z":9.938814166567424e-6,"y":-0.00022096133612644958}},{"degrees_of_freedom":[306,307,308,309,310,311],"id":"n51","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.5253285450557983e-5,"z":3.7124868256823656e-5,"y":-0.00028216034957205045},"angle":{"x":-0.0002231834573653105,"z":2.9395423891970626e-5,"y":0.0001469047173679137}},{"degrees_of_freedom":[312,313,314,315,316,317],"id":"n52","parent":"11","position":{"x":0,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9574431666831168e-5,"z":-8.786646618865047e-5,"y":-0.00042032290756475793},"angle":{"x":-2.7687977295013475e-5,"z":4.203599150095933e-7,"y":-1.7333375066859433e-6}},{"degrees_of_freedom":[318,319,320,321,322,323],"id":"n53","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.660821800867769e-5,"z":-6.745820875123528e-5,"y":-0.00038220870955382453},"angle":{"x":-1.1258780779464041e-5,"z":-4.151389872375259e-5,"y":6.170378919215707e-6}},{"degrees_of_freedom":[324,325,326,327,328,329],"id":"n54","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.107032635366636e-5,"z":-3.6183792745588686e-5,"y":-0.00029457852302228454},"angle":{"x":-1.5511282837152307e-5,"z":9.133283830295874e-7,"y":1.9349172209397637e-6}},{"degrees_of_freedom":[330,331,332,333,334,335],"id":"n55","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.310446982060523e-5,"z":-8.147798272227073e-6,"y":-0.0002056418691047366},"angle":{"x":-2.03259786414844e-5,"z":4.2987348676557205e-5,"y":1.958960259133735e-5}},{"degrees_of_freedom":[336,337,338,339,340,341],"id":"n56","parent":"11","position":{"x":0,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3173729648814407e-5,"z":-2.9456103248292095e-5,"y":-0.00016682268040934178},"angle":{"x":1.5605735906091592e-5,"z":1.8477027666488484e-7,"y":3.7713477074028473e-6}},{"degrees_of_freedom":[342,343,344,345,346,347],"id":"n57","parent":"11","position":{"x":2.020305089104421,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.629097382174144e-7,"z":-2.4645463037177792e-5,"y":-0.00019995064265451677},"angle":{"x":-1.9638557591937182e-5,"z":-3.32611129278282e-5,"y":-9.892471967282382e-6}},{"degrees_of_freedom":[348,349,350,351,352,353],"id":"n58","parent":"11","position":{"x":2.857142857142857,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5452361877287627e-5,"z":-5.6098563944373835e-5,"y":-0.0002900756820173306},"angle":{"x":-9.242214418875747e-6,"z":1.169940861151312e-6,"y":1.5306210942161137e-5}},{"degrees_of_freedom":[354,355,356,357,358,359],"id":"n59","parent":"11","position":{"x":2.020305089104421,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.041200142381331e-6,"z":-6.193402893487025e-5,"y":-0.00038320238607210904},"angle":{"x":2.5983955991099552e-6,"z":3.726022043786261e-5,"y":-1.3179847908636804e-5}},{"degrees_of_freedom":[360,361,362,363,364,365],"id":"n60","parent":"11","position":{"x":5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[366,367,368,369,370,371],"id":"n61","parent":"11","position":{"x":-5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[372,373,374,375,376,377],"id":"n62","parent":"11","position":{"x":0,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[378,379,380,381,382,383],"id":"n63","parent":"11","position":{"x":2.857142857142857,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[384,385,386,387,388,389],"id":"n64","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[390,391,392,393,394,395],"id":"n65","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[396,397,398,399,400,401],"id":"n66","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[402,403,404,405,406,407],"id":"n67","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[408,409,410,411,412,413],"id":"n68","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[414,415,416,417,418,419],"id":"n69","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[420,421,422,423,424,425],"id":"n70","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[426,427,428,429,430,431],"id":"n71","parent":"11","position":{"x":5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-7.375546984188693e-6,"z":-4.2966337805451534e-5,"y":-0.0005731431472973172},"angle":{"x":-7.057154635306393e-6,"z":2.4310093284786303e-7,"y":-9.165454516044269e-6}},{"degrees_of_freedom":[432,433,434,435,436,437],"id":"n72","parent":"11","position":{"x":5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4899090293552434e-5,"z":-1.6255225575498763e-6,"y":-0.00028172266689251244},"angle":{"x":-3.0021028309578116e-6,"z":2.3599324421549115e-6,"y":-4.608274706601677e-6}},{"degrees_of_freedom":[438,439,440,441,442,443],"id":"n73","parent":"11","position":{"x":5,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6667882385559583e-5,"z":1.7054539531019968e-5,"y":-0.0002789675436823021},"angle":{"x":-4.500300629949377e-6,"z":2.7316191826537372e-6,"y":-5.4434962908077395e-6}},{"degrees_of_freedom":[444,445,446,447,448,449],"id":"n74","parent":"11","position":{"x":5,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.779630073668402e-5,"z":-1.3621164022712313e-5,"y":-0.00036806186641499876},"angle":{"x":-4.656757334077175e-5,"z":4.579820613057775e-6,"y":-1.3473772562768073e-5}},{"degrees_of_freedom":[450,451,452,453,454,455],"id":"n75","parent":"11","position":{"x":5,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2970616216853399e-5,"z":-2.8032853638429236e-5,"y":-0.0003900837210447762},"angle":{"x":-2.746756271300743e-6,"z":5.40567251156098e-7,"y":-4.851800896401344e-6}},{"degrees_of_freedom":[456,457,458,459,460,461],"id":"n76","parent":"11","position":{"x":5,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.9670219661849037e-6,"z":-3.8744389552348685e-5,"y":-0.00037343565534192545},"angle":{"x":3.7478753819772136e-5,"z":6.18911813247409e-6,"y":1.3927477424469723e-5}},{"degrees_of_freedom":[462,463,464,465,466,467],"id":"n77","parent":"11","position":{"x":5,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.364500164131547e-7,"z":-5.264455912352274e-5,"y":-0.0002897126868089771},"angle":{"x":-4.989092572594315e-6,"z":2.0249878506996424e-7,"y":-2.0249676812070976e-7}},{"degrees_of_freedom":[468,469,470,471,472,473],"id":"n78","parent":"11","position":{"x":5,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.55207297329209e-7,"z":-2.191384952830695e-5,"y":-0.0001995681924697591},"angle":{"x":-4.588576143994834e-5,"z":3.759832655942148e-6,"y":-7.461415823076647e-6}},{"degrees_of_freedom":[474,475,476,477,478,479],"id":"n79","parent":"11","position":{"x":5,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.074056932486635e-5,"z":-7.870944731969622e-6,"y":-0.0001792059774826932},"angle":{"x":-1.6682475705451563e-6,"z":2.3935405310356705e-6,"y":-7.942076392810559e-7}},{"degrees_of_freedom":[480,481,482,483,484,485],"id":"n80","parent":"11","position":{"x":5,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.428816245749727e-6,"z":2.670411551935194e-6,"y":-0.0001969356094982908},"angle":{"x":3.666926638590998e-5,"z":8.517079677258574e-6,"y":1.3723027414139911e-5}},{"degrees_of_freedom":[486,487,488,489,490,491],"id":"n81","parent":"11","position":{"x":-5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-3.081755313386476e-5,"z":-0.0001160637068582573,"y":-0.0006379527553389912},"angle":{"x":-7.249599924920911e-5,"z":1.0455492587008547e-5,"y":-9.02372951068732e-6}},{"degrees_of_freedom":[492,493,494,495,496,497],"id":"n82","parent":"11","position":{"x":0,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.509882066421819e-5,"z":-7.289846932066963e-5,"y":-0.0005918461937405923},"angle":{"x":1.19433199024327e-6,"z":7.0820280268926244e-6,"y":-1.1605729326953358e-5}},{"degrees_of_freedom":[498,499,500,501,502,503],"id":"n83","parent":"11","position":{"x":2.857142857142857,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1395003492676893e-5,"z":-6.032069609573146e-5,"y":-0.0005822562900248065},"angle":{"x":-2.3603172567042867e-5,"z":-4.7554310516818254e-7,"y":-1.1099335032080742e-5}},{"degrees_of_freedom":[504,505,506,507,508,509],"id":"n84","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0151023782779924e-5,"z":-6.440148492655034e-5,"y":-0.0005505066768030125},"angle":{"x":-2.3967224317702484e-5,"z":4.843422351260474e-6,"y":-9.248914868267103e-6}},{"degrees_of_freedom":[510,511,512,513,514,515],"id":"n85","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.9882231492576805e-5,"z":-7.74337950867571e-5,"y":-0.0005428411029438878},"angle":{"x":-1.3465722337834828e-5,"z":1.7180762817292926e-6,"y":-7.526576647002632e-6}},{"degrees_of_freedom":[516,517,518,519,520,521],"id":"n86","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.5545979654931e-5,"z":-9.362012971127892e-5,"y":-0.0005577127981839471},"angle":{"x":0.0001544697013096489,"z":6.0504739296687205e-5,"y":-1.1417668721294328e-5}},{"degrees_of_freedom":[522,523,524,525,526,527],"id":"n87","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6391159106649532e-5,"z":-0.00010033123776168111,"y":-0.0006036367101040046},"angle":{"x":-2.7699750210931836e-5,"z":3.121237399333749e-6,"y":-1.1053718506054577e-5}},{"degrees_of_freedom":[528,529,530,531,532,533],"id":"n88","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.624335113800126e-5,"z":-9.660543387551259e-5,"y":-0.0006721041146202593},"angle":{"x":0.00011840718401071173,"z":-5.516758502827143e-5,"y":-7.801951203196823e-6}},{"degrees_of_freedom":[534,535,536,537,538,539],"id":"n89","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.804264018034289e-6,"z":-8.376847916934925e-5,"y":-0.0006993899909338511},"angle":{"x":-4.240225109442537e-5,"z":4.3517202572349495e-6,"y":-7.630493033809122e-6}},{"degrees_of_freedom":[540,541,542,543,544,545],"id":"n90","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.630584795096061e-5,"z":-6.813792825908914e-5,"y":-0.0006557082066389276},"angle":{"x":0.0002557131829954481,"z":0.00010708690068688864,"y":-1.07420181205058e-5}},{"degrees_of_freedom":[546,547,548,549,550,551],"id":"n91","parent":"11","position":{"x":-5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011840243562172379,"z":-6.278491826950135e-6,"y":-0.00031217981320067997},"angle":{"x":-2.604311499641208e-5,"z":6.444260308201439e-6,"y":8.032123115617463e-6}},{"degrees_of_freedom":[552,553,554,555,556,557],"id":"n92","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.237317863971396e-5,"z":-2.25807252539034e-5,"y":-0.0001807036479808214},"angle":{"x":2.2372966630255677e-6,"z":-5.752895960245591e-6,"y":1.1529794919047351e-5}},{"degrees_of_freedom":[558,559,560,561,562,563],"id":"n93","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2001972459924817e-5,"z":-1.0750025077213987e-5,"y":-0.00022712211847532418},"angle":{"x":1.8912373311524317e-5,"z":1.654286329515693e-5,"y":7.857049492101058e-5}},{"degrees_of_freedom":[564,565,566,567,568,569],"id":"n94","parent":"11","position":{"x":-5,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.15664800607697e-5,"z":1.6969797749443173e-6,"y":-0.00035032684946890535},"angle":{"x":8.478655351472598e-5,"z":-1.5063564983060903e-5,"y":-6.8472822288306e-6}},{"degrees_of_freedom":[570,571,572,573,574,575],"id":"n95","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1024033399204237e-5,"z":3.084327197169093e-7,"y":-0.000443515617959848},"angle":{"x":-3.418861829303743e-5,"z":-7.987876508177228e-5,"y":0.00017249907268854006}},{"degrees_of_freedom":[576,577,578,579,580,581],"id":"n96","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.795789424123624e-5,"z":1.8309437262411735e-5,"y":-0.0003970274130055849},"angle":{"x":2.7723774751453865e-6,"z":-9.343263607105862e-6,"y":-3.0984333676089445e-5}},{"degrees_of_freedom":[582,583,584,585,586,587],"id":"n97","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.303401670679104e-5,"z":-2.513839414274611e-6,"y":-0.0003544426300377178},"angle":{"x":2.5240672154657425e-5,"z":-2.4300125654768418e-5,"y":-7.72676611321479e-5}},{"degrees_of_freedom":[588,589,590,591,592,593],"id":"n98","parent":"11","position":{"x":-5,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.042860601871177e-5,"z":-2.0045634252267174e-5,"y":-0.00023424799768910658},"angle":{"x":8.754846706056553e-5,"z":-3.254865432923789e-8,"y":-1.2607457238838576e-5}},{"degrees_of_freedom":[594,595,596,597,598,599],"id":"n99","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.745121357638521e-5,"z":-1.608090427909643e-5,"y":-0.00013462867835606088},"angle":{"x":-1.976527025700636e-5,"z":-3.208960296778201e-5,"y":8.204246069446501e-5}},{"degrees_of_freedom":[600,601,602,603,604,605],"id":"n100","parent":"11","position":{"x":0,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.53524014413303e-5,"z":-8.196775400145377e-5,"y":-0.0004214771102285761},"angle":{"x":-3.5246899379939895e-5,"z":4.078047961376561e-6,"y":-5.026063451526073e-6}},{"degrees_of_freedom":[606,607,608,609,610,611],"id":"n101","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.967856473935977e-5,"z":-6.211084149471714e-5,"y":-0.00039161617971119407},"angle":{"x":-9.669904949639367e-6,"z":-3.718898278120354e-5,"y":6.333242821501554e-6}},{"degrees_of_freedom":[612,613,614,615,616,617],"id":"n102","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010204205017865687,"z":-3.370448868668798e-5,"y":-0.0003064401391973849},"angle":{"x":-1.4606770805166668e-5,"z":7.196453871787466e-6,"y":8.14218670253212e-7}},{"degrees_of_freedom":[618,619,620,621,622,623],"id":"n103","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.303513114712104e-5,"z":-6.660871520252148e-6,"y":-0.00021211714118845804},"angle":{"x":-1.9359235769444833e-5,"z":4.6974862810447655e-5,"y":1.8687303070103026e-5}},{"degrees_of_freedom":[624,625,626,627,628,629],"id":"n104","parent":"11","position":{"x":0,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.199308384068288e-5,"z":-2.745315457316752e-5,"y":-0.00016859184472250839},"angle":{"x":2.2599540236266866e-5,"z":1.5928895455465183e-6,"y":7.422230276021792e-7}},{"degrees_of_freedom":[630,631,632,633,634,635],"id":"n105","parent":"11","position":{"x":2.020305089104421,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2443486268112198e-5,"z":-1.0421132382487185e-5,"y":-0.00019826461629628348},"angle":{"x":-1.5488575138698292e-5,"z":-2.9755334311750777e-5,"y":-1.44692125124675e-5}},{"degrees_of_freedom":[636,637,638,639,640,641],"id":"n106","parent":"11","position":{"x":2.857142857142857,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.269507511046356e-6,"z":-2.9751402797440022e-5,"y":-0.0002834913222381275},"angle":{"x":-8.057858144583087e-6,"z":6.582647219490554e-6,"y":3.7336280459039808e-6}},{"degrees_of_freedom":[642,643,644,645,646,647],"id":"n107","parent":"11","position":{"x":2.020305089104421,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.752750872154653e-5,"z":-4.28327873385252e-5,"y":-0.0003779334920205274},"angle":{"x":1.7022973476175444e-6,"z":4.0055912233194496e-5,"y":-1.9565959454630115e-5}},{"degrees_of_freedom":[648,649,650,651,652,653],"id":"n108","parent":"11","position":{"x":5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[654,655,656,657,658,659],"id":"n109","parent":"11","position":{"x":-5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[660,661,662,663,664,665],"id":"n110","parent":"11","position":{"x":0,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[666,667,668,669,670,671],"id":"n111","parent":"11","position":{"x":2.857142857142857,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[672,673,674,675,676,677],"id":"n112","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[678,679,680,681,682,683],"id":"n113","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[684,685,686,687,688,689],"id":"n114","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[690,691,692,693,694,695],"id":"n115","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[696,697,698,699,700,701],"id":"n116","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[702,703,704,705,706,707],"id":"n117","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[708,709,710,711,712,713],"id":"n118","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[714,715,716,717,718,719],"id":"n119","parent":"11","position":{"x":5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.702520740593556e-5,"z":-9.635782990947715e-6,"y":-0.0005706144980977943},"angle":{"x":-8.220138697948613e-6,"z":-1.0837960916978411e-5,"y":-9.734344417294766e-6}},{"degrees_of_freedom":[720,721,722,723,724,725],"id":"n120","parent":"11","position":{"x":5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.102053508916013e-5,"z":7.024799037891848e-5,"y":-0.00027266546521202944},"angle":{"x":-2.6855518632869914e-6,"z":1.048642897341503e-5,"y":1.3450065201242724e-5}},{"degrees_of_freedom":[726,727,728,729,730,731],"id":"n121","parent":"11","position":{"x":5,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.102021485978553e-5,"z":7.086961103965979e-5,"y":-0.0002792097729655338},"angle":{"x":-3.767331317391067e-7,"z":1.7418141555581345e-5,"y":2.367040815174433e-6}},{"degrees_of_freedom":[732,733,734,735,736,737],"id":"n122","parent":"11","position":{"x":5,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.281678589751833e-5,"z":3.6861994800495504e-5,"y":-0.00036562270673813087},"angle":{"x":-5.369380998400983e-5,"z":5.196254534096263e-5,"y":-0.00010040068188257661}},{"degrees_of_freedom":[738,739,740,741,742,743],"id":"n123","parent":"11","position":{"x":5,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017008871806336478,"z":1.650966886566303e-5,"y":-0.000385834371510838},"angle":{"x":-3.4925831691922156e-6,"z":1.648254610782275e-5,"y":-5.109365354206633e-6}},{"degrees_of_freedom":[744,745,746,747,748,749],"id":"n124","parent":"11","position":{"x":5,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.898870828431801e-5,"z":2.0081697113840706e-6,"y":-0.0003718789361237176},"angle":{"x":3.875983814645147e-5,"z":5.228744032318371e-5,"y":0.00010122344998897385}},{"degrees_of_freedom":[750,751,752,753,754,755],"id":"n125","parent":"11","position":{"x":5,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.275892483624357e-5,"z":-1.6529036133572226e-5,"y":-0.0002846857690526315},"angle":{"x":-7.088477095895315e-7,"z":1.285101560824639e-5,"y":-5.258468502501537e-6}},{"degrees_of_freedom":[756,757,758,759,760,761],"id":"n126","parent":"11","position":{"x":5,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.330116265854508e-6,"z":3.822302585782807e-6,"y":-0.00019724058886226041},"angle":{"x":-3.8750604076386196e-5,"z":4.346904105912609e-5,"y":-8.67981905156189e-5}},{"degrees_of_freedom":[762,763,764,765,766,767],"id":"n127","parent":"11","position":{"x":5,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.452240834052528e-5,"z":1.917314975745553e-5,"y":-0.00017947522430856967},"angle":{"x":-3.8895080292139307e-7,"z":1.3786521701406523e-5,"y":2.217896181161002e-6}},{"degrees_of_freedom":[768,769,770,771,772,773],"id":"n128","parent":"11","position":{"x":5,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.1852952789973223e-6,"z":3.8811564506000984e-5,"y":-0.0001940582613015351},"angle":{"x":5.164353258972301e-5,"z":6.06403933213484e-5,"y":0.00012967942911906431}},{"degrees_of_freedom":[774,775,776,777,778,779],"id":"n129","parent":"11","position":{"x":-5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-7.696258602155008e-5,"z":-0.00010776001588447604,"y":-0.0006466408255175184},"angle":{"x":-7.32005089882528e-5,"z":-1.9343147834396588e-5,"y":-9.048909949053778e-6}},{"degrees_of_freedom":[780,781,782,783,784,785],"id":"n130","parent":"11","position":{"x":0,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-9.942749369894232e-5,"z":-6.527498925049447e-5,"y":-0.0005875983018116585},"angle":{"x":1.4336849828151779e-5,"z":5.286958160985517e-5,"y":-1.316917534327453e-5}},{"degrees_of_freedom":[786,787,788,789,790,791],"id":"n131","parent":"11","position":{"x":2.857142857142857,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.443294766564685e-5,"z":-4.028277113657804e-5,"y":-0.0001535274797624168},"angle":{"x":-3.320305139880189e-5,"z":5.5456449376224294e-5,"y":-8.99743378795439e-6}},{"degrees_of_freedom":[792,793,794,795,796,797],"id":"n132","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.541787657430914e-5,"z":-4.332051755934196e-5,"y":-0.0004623987830049573},"angle":{"x":-0.000807923791707622,"z":0.0003452810282690495,"y":-1.2931203430173989e-5}},{"degrees_of_freedom":[798,799,800,801,802,803],"id":"n133","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.331185611646632e-5,"z":-6.42900015079032e-5,"y":-0.0006048711651641545},"angle":{"x":3.0153977461682945e-6,"z":5.9404650560441566e-5,"y":-1.1069435327629803e-5}},{"degrees_of_freedom":[804,805,806,807,808,809],"id":"n134","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.398754985800693e-5,"z":-8.325922660913564e-5,"y":-0.0007422967054415489},"angle":{"x":0.0004005598140076399,"z":0.0001991238679900461,"y":-1.1136612506615387e-5}},{"degrees_of_freedom":[810,811,812,813,814,815],"id":"n135","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.653877280961982e-5,"z":-8.901962933431874e-5,"y":-0.0010964529612164187},"angle":{"x":-2.978928626948297e-5,"z":6.122456827650416e-5,"y":-8.687124933904202e-6}},{"degrees_of_freedom":[816,817,818,819,820,821],"id":"n136","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.693817017117793e-5,"z":-8.570378154475807e-5,"y":-0.0008341964375065837},"angle":{"x":-0.000740505150096586,"z":0.00030594800149666245,"y":-8.672007135920513e-6}},{"degrees_of_freedom":[822,823,824,825,826,827],"id":"n137","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.207420832454443e-5,"z":-6.880253173203351e-5,"y":-0.0007276880370968836},"angle":{"x":-3.983165309907922e-5,"z":5.951035176388344e-5,"y":-1.0212203704245156e-5}},{"degrees_of_freedom":[828,829,830,831,832,833],"id":"n138","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.25564682696686e-5,"z":-4.93287587933547e-5,"y":-0.000554514378830259},"angle":{"x":0.0006024994757717295,"z":0.00028532085439959457,"y":-1.2550097519758257e-5}},{"degrees_of_freedom":[834,835,836,837,838,839],"id":"n139","parent":"11","position":{"x":-5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.7412771179243913e-5,"z":-1.851785462130575e-5,"y":-0.0002744420101777485},"angle":{"x":-5.349477605607318e-5,"z":1.4853293178416738e-5,"y":4.0755009825079754e-5}},{"degrees_of_freedom":[840,841,842,843,844,845],"id":"n140","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.805945307264385e-5,"z":-2.1733187978532612e-5,"y":-0.00019085927412253127},"angle":{"x":1.1613156283105792e-6,"z":2.8688392487159364e-5,"y":1.8485908693152337e-7}},{"degrees_of_freedom":[846,847,848,849,850,851],"id":"n141","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001358082387204182,"z":-1.184542066320469e-5,"y":-0.0002396019846073273},"angle":{"x":1.8507656588238085e-5,"z":0.00011119644701883568,"y":0.00023355310858547728}},{"degrees_of_freedom":[852,853,854,855,856,857],"id":"n142","parent":"11","position":{"x":-5,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002993679814851395,"z":1.6587721597196833e-6,"y":-0.0003568591519587512},"angle":{"x":8.170799403187616e-5,"z":2.481084502886061e-5,"y":-1.078228458339546e-5}},{"degrees_of_freedom":[858,859,860,861,862,863],"id":"n143","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017937524985489847,"z":1.88645580602864e-6,"y":-0.0004481668631028835},"angle":{"x":-3.339627003270414e-5,"z":0.0001629600489563346,"y":-0.0004015272655009866}},{"degrees_of_freedom":[864,865,866,867,868,869],"id":"n144","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012967242591756153,"z":1.8599360817564736e-5,"y":-0.0003985414955352509},"angle":{"x":2.258332768671354e-6,"z":2.8688445386414805e-5,"y":-2.1749424175957235e-5}},{"degrees_of_freedom":[870,871,872,873,874,875],"id":"n145","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.356812330832083e-5,"z":1.9067797249673633e-6,"y":-0.00035474948793694943},"angle":{"x":2.1270245494183458e-5,"z":0.00016530757165860932,"y":0.0003646682124233164}},{"degrees_of_freedom":[876,877,878,879,880,881],"id":"n146","parent":"11","position":{"x":-5,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001643054974651401,"z":-1.534343808460632e-5,"y":-0.00023975650858982232},"angle":{"x":8.47485376934861e-5,"z":3.2565786559516694e-5,"y":-1.0782232411192323e-5}},{"degrees_of_freedom":[882,883,884,885,886,887],"id":"n147","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2684019863479737e-9,"z":-1.3548753799321883e-5,"y":-0.00014107771904232596},"angle":{"x":-2.116899185058951e-5,"z":0.0001203894047351326,"y":-0.00025918499352502227}},{"degrees_of_freedom":[888,889,890,891,892,893],"id":"n148","parent":"11","position":{"x":0,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.769130400182266e-6,"z":-0.00033081474267447744,"y":-0.00034199062175780136},"angle":{"x":-0.00019849179519789982,"z":-3.828943667955017e-5,"y":-4.124185774349923e-5}},{"degrees_of_freedom":[894,895,896,897,898,899],"id":"n149","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.331496407103486e-6,"z":-0.00024803038714615416,"y":-0.00026120365327808386},"angle":{"x":-0.00013664767351875628,"z":-2.4822989566453283e-5,"y":-1.5625105185983838e-5}},{"degrees_of_freedom":[900,901,902,903,904,905],"id":"n150","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.7097751237033672e-5,"z":1.4963892144623224e-5,"y":-0.00020227050070104662},"angle":{"x":-6.138439890418953e-5,"z":-4.940496603819336e-6,"y":0.00016607644361758944}},{"degrees_of_freedom":[906,907,908,909,910,911],"id":"n151","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9418080978986133e-5,"z":5.483808413692563e-11,"y":-0.00015294381953089335},"angle":{"x":1.903610766729913e-5,"z":1.2815131302891494e-5,"y":-2.8075818009529397e-5}},{"degrees_of_freedom":[912,913,914,915,916,917],"id":"n152","parent":"11","position":{"x":0,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.5284310133656416e-5,"z":4.079165195898707e-5,"y":-0.00019445478840386692},"angle":{"x":2.0414549627403338e-5,"z":-3.885489088029257e-5,"y":-2.8646800028873644e-5}},{"degrees_of_freedom":[918,919,920,921,922,923],"id":"n153","parent":"11","position":{"x":2.020305089104421,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6927704873382765e-5,"z":0.00011575060235409001,"y":-0.00027565341062996785},"angle":{"x":-0.0001985276465202076,"z":-2.564231435850031e-5,"y":-0.00011933563515677454}},{"degrees_of_freedom":[924,925,926,927,928,929],"id":"n154","parent":"11","position":{"x":2.857142857142857,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.517183795222779e-6,"z":-0.00018547126607957055,"y":-0.0003311685870710055},"angle":{"x":-4.8789378475176035e-5,"z":-6.901870221399048e-6,"y":0.0002421645365335272}},{"degrees_of_freedom":[930,931,932,933,934,935],"id":"n155","parent":"11","position":{"x":2.020305089104421,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.683149523864789e-6,"z":-8.138819987256955e-5,"y":-0.00037903228306576154},"angle":{"x":0.00012391827881636338,"z":1.8039442314410363e-5,"y":-0.0001747884406683208}},{"degrees_of_freedom":[936,937,938,939,940,941],"id":"n156","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.112252222432892e-5,"z":-7.89000425704131e-5,"y":-0.000946029313928357},"angle":{"x":4.055853782749088e-5,"z":-5.195654055402972e-5,"y":-1.4339251738108221e-5}},{"degrees_of_freedom":[942,943,944,945,946,947],"id":"n157","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.487634472615713e-5,"z":-8.383731232190294e-5,"y":-0.0005624462655071188},"angle":{"x":-0.000559048067839849,"z":-0.00026644213073342954,"y":-3.7724917201373154e-6}},{"degrees_of_freedom":[948,949,950,951,952,953],"id":"n158","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.774186218676462e-5,"z":-9.27862314334502e-5,"y":-0.0003956940431089047},"angle":{"x":6.146733242149368e-5,"z":-4.9549669868855836e-5,"y":-6.151704841359222e-6}},{"degrees_of_freedom":[954,955,956,957,958,959],"id":"n159","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.178466187202289e-5,"z":-0.00010538065255602375,"y":-0.0003318182807064465},"angle":{"x":-0.00010917197921010306,"z":1.3273370655286011e-5,"y":-8.242843881293273e-6}},{"degrees_of_freedom":[960,961,962,963,964,965],"id":"n160","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.735885163520366e-5,"z":-0.00010920870831775428,"y":-0.00019660235869869554},"angle":{"x":5.076594512535631e-5,"z":-4.078027424268152e-5,"y":-1.1923791064306162e-5}},{"degrees_of_freedom":[966,967,968,969,970,971],"id":"n161","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.42739956175849e-5,"z":-0.00010528589388752607,"y":-0.0005274466998803133},"angle":{"x":-0.0008037967140195117,"z":-0.00034042083625033213,"y":-6.717001677748007e-6}},{"degrees_of_freedom":[972,973,974,975,976,977],"id":"n162","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.722908969114742e-5,"z":-9.434690613899982e-5,"y":-0.0006566197604585649},"angle":{"x":2.985607522453362e-5,"z":-4.318736810307285e-5,"y":-6.572608723954986e-6}},{"degrees_of_freedom":[978,979,980,981,982,983],"id":"n163","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.077127704999654e-5,"z":-8.125408864169524e-5,"y":-0.0007358233547591059},"angle":{"x":6.780429951745437e-5,"z":-5.909671112664995e-5,"y":-8.236197553518151e-6}},{"degrees_of_freedom":[984,985,986,987,988,989],"id":"n164","parent":"11","position":{"x":5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00015276933714067277,"z":-0.0001232037194604103,"y":-0.000983321717393707},"angle":{"x":-1.0662145743255514e-6,"z":7.881902873642579e-7,"y":-2.2023062115451348e-5}},{"degrees_of_freedom":[990,991,992,993,994,995],"id":"n165","parent":"11","position":{"x":5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018508580256931302,"z":-0.0001469078783439381,"y":-0.0008119719761146342},"angle":{"x":-1.2917559912232195e-5,"z":-3.5037117506837712e-6,"y":-1.6771514912856384e-5}},{"degrees_of_freedom":[996,997,998,999,1000,1001],"id":"n166","parent":"11","position":{"x":5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.218190100587636e-5,"z":-8.945061216386754e-5,"y":-0.0007793331867769827},"angle":{"x":-6.1830675556007415e-6,"z":1.2022301629120483e-6,"y":-1.068859707652979e-5}},{"degrees_of_freedom":[1002,1003,1004,1005,1006,1007],"id":"n167","parent":"11","position":{"x":5,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.538695326656422e-5,"z":-8.17550174381009e-5,"y":-0.0007751079343898347},"angle":{"x":-6.525794416109388e-6,"z":-1.1592531842355861e-5,"y":-1.3293725082329037e-5}},{"degrees_of_freedom":[1008,1009,1010,1011,1012,1013],"id":"n168","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010522580188848107,"z":-0.00010886903235081214,"y":-0.0008414118516957436},"angle":{"x":-3.559567806827268e-5,"z":-3.5887597121067067e-5,"y":5.085091686488974e-5}},{"degrees_of_freedom":[1014,1015,1016,1017,1018,1019],"id":"n169","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002137216865785941,"z":-0.0001241208360955079,"y":-0.0008568956725203685},"angle":{"x":-4.483474428383888e-6,"z":-1.3136295747255195e-5,"y":-1.8071763562769873e-5}},{"degrees_of_freedom":[1020,1021,1022,1023,1024,1025],"id":"n170","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017208849762876354,"z":-0.0001362974166632588,"y":-0.0008516752317590914},"angle":{"x":2.9496688213885976e-5,"z":-3.828374721133093e-5,"y":-8.462722737119232e-5}},{"degrees_of_freedom":[1026,1027,1028,1029,1030,1031],"id":"n171","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014974175076502396,"z":-0.00014695005501475403,"y":-0.0007951531352585427},"angle":{"x":-6.685842036584469e-6,"z":-1.5718406955653727e-5,"y":-1.623045189045511e-5}},{"degrees_of_freedom":[1032,1033,1034,1035,1036,1037],"id":"n172","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010023049584427828,"z":-0.00011210712647606098,"y":-0.0007281539301568929},"angle":{"x":-4.4174550366641246e-5,"z":-3.9805067799921286e-5,"y":5.646927446766235e-5}},{"degrees_of_freedom":[1038,1039,1040,1041,1042,1043],"id":"n173","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.983628926993042e-6,"z":-9.522089463083881e-5,"y":-0.0007103173427721595},"angle":{"x":-5.552992011939821e-6,"z":-1.4174585687504897e-5,"y":-1.1452418642799704e-5}},{"degrees_of_freedom":[1044,1045,1046,1047,1048,1049],"id":"n174","parent":"11","position":{"x":5,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.779748722501637e-5,"z":-8.648444734373472e-5,"y":-0.0007176268347694687},"angle":{"x":2.3827463557442304e-5,"z":-3.464611170956623e-5,"y":-7.392690258239837e-5}},{"degrees_of_freedom":[1050,1051,1052,1053,1054,1055],"id":"n175","parent":"11","position":{"x":-5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00014194116105443715,"z":-0.00034452724807620434,"y":-0.0011467205167408807},"angle":{"x":-6.810348621230892e-5,"z":-7.595146798308785e-7,"y":-3.292774929717192e-5}},{"degrees_of_freedom":[1056,1057,1058,1059,1060,1061],"id":"n176","parent":"11","position":{"x":0,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00024032160749114768,"z":-0.00022095299851048763,"y":-0.001075875396788877},"angle":{"x":1.4012395816436113e-5,"z":-4.557073960531732e-5,"y":-4.1293649377765915e-5}},{"degrees_of_freedom":[1062,1063,1064,1065,1066,1067],"id":"n177","parent":"11","position":{"x":0,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":4.591448039733618e-5,"z":-0.0002120174089623023,"y":-0.001004178177002563},"angle":{"x":-5.022416795607944e-6,"z":-6.121214766062134e-6,"y":-3.095140748332994e-5}},{"degrees_of_freedom":[1068,1069,1070,1071,1072,1073],"id":"n178","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014660230956160111,"z":-0.00016085924590811252,"y":-0.0012482186183900186},"angle":{"x":-9.346251539617885e-5,"z":-1.0625571187891836e-5,"y":-2.95759447432175e-5}},{"degrees_of_freedom":[1074,1075,1076,1077,1078,1079],"id":"n179","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011499723222744737,"z":-0.00017178724477203208,"y":-0.001001233167419031},"angle":{"x":0.0004359118431781485,"z":-0.00019644632754841216,"y":-2.2836970040969716e-5}},{"degrees_of_freedom":[1080,1081,1082,1083,1084,1085],"id":"n180","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.44702527762963e-5,"z":-0.00021180596596887568,"y":-0.0009031613064160648},"angle":{"x":-8.281012390959442e-5,"z":-1.1709261098256767e-5,"y":-2.466602064093499e-5}},{"degrees_of_freedom":[1086,1087,1088,1089,1090,1091],"id":"n181","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011355042475827854,"z":-0.0002618661007446876,"y":-0.0009436868095719965},"angle":{"x":0.00025670235228424776,"z":0.0001069854422989585,"y":-3.3052978687254524e-5}},{"degrees_of_freedom":[1092,1093,1094,1095,1096,1097],"id":"n182","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014715160628176184,"z":-0.00027928811045496656,"y":-0.001031306484949105},"angle":{"x":-8.797082507387752e-5,"z":-1.621594217217315e-5,"y":-3.2371743920293706e-5}},{"degrees_of_freedom":[1098,1099,1100,1101,1102,1103],"id":"n183","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000184716728636461,"z":-0.0002686687323864672,"y":-0.0013042512294978075},"angle":{"x":9.490709708136926e-5,"z":-8.221406731173967e-5,"y":-2.8186890820201683e-5}},{"degrees_of_freedom":[1104,1105,1106,1107,1108,1109],"id":"n184","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020321126939396584,"z":-0.00022170676404264917,"y":-0.0014215408234053096},"angle":{"x":-9.862208664372536e-5,"z":-1.5132212554095029e-5,"y":-2.5995975548731858e-5}},{"degrees_of_freedom":[1110,1111,1112,1113,1114,1115],"id":"n185","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018063607067041914,"z":-0.0001743211274492033,"y":-0.001373768963520825},"angle":{"x":0.000583151878105399,"z":0.00022725241685769994,"y":-2.9489865816114494e-5}},{"degrees_of_freedom":[1116,1117,1118,1119,1120,1121],"id":"n186","parent":"11","position":{"x":-5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015301199684378505,"z":-0.00026092832934897545,"y":-0.000901896490709667},"angle":{"x":-1.914188702243404e-5,"z":8.04755177395698e-6,"y":2.109774476314038e-5}},{"degrees_of_freedom":[1122,1123,1124,1125,1126,1127],"id":"n187","parent":"11","position":{"x":-5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.546087018772154e-5,"z":-0.00024452507831489254,"y":-0.0008355109946747623},"angle":{"x":-2.3797153191390548e-5,"z":8.402809762972457e-6,"y":-1.6916322025593734e-5}},{"degrees_of_freedom":[1128,1129,1130,1131,1132,1133],"id":"n188","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017928730546246978,"z":-0.00027281732121443213,"y":-0.0008518527017190977},"angle":{"x":-2.8111279042735396e-6,"z":-6.897614974036689e-7,"y":-1.9917165105643305e-5}},{"degrees_of_freedom":[1134,1135,1136,1137,1138,1139],"id":"n189","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016425252947384678,"z":-0.00026479774409375194,"y":-0.0008742848233057634},"angle":{"x":1.3493154868111224e-5,"z":3.2179992587577043e-5,"y":7.305265114867338e-5}},{"degrees_of_freedom":[1140,1141,1142,1143,1144,1145],"id":"n190","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012795556581826108,"z":-0.00025553014685708266,"y":-0.0009395377572665159},"angle":{"x":4.345741433648652e-5,"z":-1.7101920963731581e-6,"y":-2.2803217882147544e-5}},{"degrees_of_freedom":[1146,1147,1148,1149,1150,1151],"id":"n191","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.211356255958705e-5,"z":-0.0002505788278431151,"y":-0.0009865940610006229},"angle":{"x":-2.9501577252739496e-5,"z":1.0247462090372302e-5,"y":-5.6624628969886785e-5}},{"degrees_of_freedom":[1152,1153,1154,1155,1156,1157],"id":"n192","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.89830136602412e-5,"z":-0.00023188003105614117,"y":-0.0009429219445401058},"angle":{"x":-2.4907036630112884e-6,"z":-6.897940144925531e-7,"y":-2.5689393874651367e-5}},{"degrees_of_freedom":[1158,1159,1160,1161,1162,1163],"id":"n193","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.884816666964323e-5,"z":-0.00023375293353076107,"y":-0.0009120937464223441},"angle":{"x":7.736156442449945e-6,"z":-1.6680536079000174e-5,"y":-7.091803216452559e-5}},{"degrees_of_freedom":[1164,1165,1166,1167,1168,1169],"id":"n194","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001168068272421503,"z":-0.00024114532578041657,"y":-0.0008579119797939292},"angle":{"x":3.556073227284831e-5,"z":3.3059702936250573e-7,"y":-2.2803238094543476e-5}},{"degrees_of_freedom":[1170,1171,1172,1173,1174,1175],"id":"n195","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016098722079652174,"z":-0.00024876011317382664,"y":-0.0008183029457606448},"angle":{"x":-3.190006820927911e-5,"z":5.2337159556438724e-5,"y":-0.00016990005799589133}},{"degrees_of_freedom":[1176,1177,1178,1179,1180,1181],"id":"n196","parent":"11","position":{"x":0,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020496677950684652,"z":-0.00034107081842660834,"y":-0.0007999100339035508},"angle":{"x":0.0002724834304782922,"z":2.814472021488338e-5,"y":-8.517230436378938e-5}},{"degrees_of_freedom":[1182,1183,1184,1185,1186,1187],"id":"n197","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020422115270634698,"z":5.9027666800415836e-5,"y":-0.0007739506144154469},"angle":{"x":-0.00011484326986185568,"z":-1.3160814745602654e-5,"y":-0.00024560828710211923}},{"degrees_of_freedom":[1188,1189,1190,1191,1192,1193],"id":"n198","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002006505111786773,"z":3.254346877417718e-5,"y":-0.0007999343296708863},"angle":{"x":-6.979317355142242e-5,"z":9.492089714148418e-6,"y":-0.0001368476472627709}},{"degrees_of_freedom":[1194,1195,1196,1197,1198,1199],"id":"n199","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001697153903282804,"z":-0.00022297930240715687,"y":-0.000837224948341501},"angle":{"x":-0.00016116516456864168,"z":2.4863326926355432e-5,"y":8.374390709641598e-5}},{"degrees_of_freedom":[1200,1201,1202,1203,1204,1205],"id":"n200","parent":"11","position":{"x":0,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015169000156469586,"z":-0.00018866017777239395,"y":-0.000902909242950561},"angle":{"x":0.0001145920195209166,"z":2.9426113356781263e-5,"y":-3.0478477589751555e-5}},{"degrees_of_freedom":[1206,1207,1208,1209,1210,1211],"id":"n201","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015456397560586937,"z":-0.00034613095341072336,"y":-0.0009323034948182498},"angle":{"x":-1.5070165360312804e-5,"z":-1.1087158773664683e-5,"y":-8.418633303239623e-5}},{"degrees_of_freedom":[1212,1213,1214,1215,1216,1217],"id":"n202","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015817872236998452,"z":-0.0003861348692747118,"y":-0.0009045181112269041},"angle":{"x":-1.5099358415947965e-5,"z":8.118554366655397e-6,"y":-8.425670713113154e-5}},{"degrees_of_freedom":[1218,1219,1220,1221,1222,1223],"id":"n203","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018633341816071605,"z":-0.00028512038174876724,"y":-0.0008643760751676853},"angle":{"x":-7.420189479435397e-5,"z":2.536674887229738e-5,"y":5.842952408185726e-5}},{"degrees_of_freedom":[1224,1225,1226,1227,1228,1229],"id":"n204","parent":"11","position":{"x":0,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4806673298499896e-5,"z":-0.00018645343032989102,"y":-0.0008880589788723858},"angle":{"x":-1.7919274214876646e-6,"z":3.334730943361751e-6,"y":-2.0416110619267878e-5}},{"degrees_of_freedom":[1230,1231,1232,1233,1234,1235],"id":"n205","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.482660731339697e-6,"z":-0.00022519434777994318,"y":-0.0008674359706985952},"angle":{"x":-2.2913988627205443e-5,"z":-2.778993752627063e-5,"y":-2.767087167901397e-5}},{"degrees_of_freedom":[1236,1237,1238,1239,1240,1241],"id":"n206","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3876773884203065e-5,"z":-0.00020002878565745664,"y":-0.0008055193692377521},"angle":{"x":-1.8487007138088664e-5,"z":-9.18864827393536e-7,"y":-1.334746225888944e-5}},{"degrees_of_freedom":[1242,1243,1244,1245,1246,1247],"id":"n207","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.6743163714123085e-6,"z":-0.0001525239043575514,"y":-0.0007421401448268638},"angle":{"x":-1.4763627530326565e-5,"z":3.072289550042345e-5,"y":-1.8700760658299742e-5}},{"degrees_of_freedom":[1248,1249,1250,1251,1252,1253],"id":"n208","parent":"11","position":{"x":0,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4502410537290706e-5,"z":-0.0001027069378523804,"y":-0.0007109130017650241},"angle":{"x":-2.6384131726458338e-5,"z":2.1871512000251065e-6,"y":-1.365051733485282e-5}},{"degrees_of_freedom":[1254,1255,1256,1257,1258,1259],"id":"n209","parent":"11","position":{"x":2.020305089104421,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1175985086915176e-5,"z":-9.704844984848978e-5,"y":-0.0007325947646708459},"angle":{"x":-9.758653068828627e-6,"z":-2.5008937540883038e-5,"y":-7.000888814731749e-6}},{"degrees_of_freedom":[1260,1261,1262,1263,1264,1265],"id":"n210","parent":"11","position":{"x":2.857142857142857,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.725206144145731e-5,"z":-0.00011125763661421918,"y":-0.0007953117393795384},"angle":{"x":-1.188367523690926e-5,"z":-1.7463852215408208e-6,"y":-1.1499592807718556e-5}},{"degrees_of_freedom":[1266,1267,1268,1269,1270,1271],"id":"n211","parent":"11","position":{"x":2.020305089104421,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.563181206316596e-5,"z":-0.00014471341058038234,"y":-0.0008582009721928227},"angle":{"x":-9.946852075330418e-6,"z":2.6437322025186513e-5,"y":-1.554394431031583e-5}},{"degrees_of_freedom":[1272,1273,1274,1275,1276,1277],"id":"n212","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.530544710035419e-6,"z":-6.374392683907558e-5,"y":-0.0006025518611297352},"angle":{"x":-6.598782981684057e-5,"z":-2.2269180122861813e-5,"y":-8.275757022331722e-6}},{"degrees_of_freedom":[1278,1279,1280,1281,1282,1283],"id":"n213","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2588126982191632e-6,"z":-8.07904104878548e-5,"y":-0.000604016010107558},"angle":{"x":1.272868640401199e-6,"z":8.473845552321803e-7,"y":-9.817275792612497e-6}},{"degrees_of_freedom":[1284,1285,1286,1287,1288,1289],"id":"n214","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1010703486839865e-5,"z":-9.720101197232852e-5,"y":-0.0006076105309688069},"angle":{"x":6.792177885986033e-5,"z":-2.2052882252035556e-5,"y":-8.973778508005337e-6}},{"degrees_of_freedom":[1290,1291,1292,1293,1294,1295],"id":"n215","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.1134066261804227e-5,"z":-9.638724758483144e-5,"y":-0.0005057768113957197},"angle":{"x":-5.0314401271757914e-5,"z":1.4790687787949226e-7,"y":-8.798492134099617e-6}},{"degrees_of_freedom":[1296,1297,1298,1299,1300,1301],"id":"n216","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.753449899272887e-5,"z":-8.026154437435586e-5,"y":-0.00046740612978817366},"angle":{"x":-4.80101206902277e-5,"z":-1.6258190014373237e-6,"y":-9.456857580976754e-6}},{"degrees_of_freedom":[1302,1303,1304,1305,1306,1307],"id":"n217","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.0092736259516775e-5,"z":-6.302515633584474e-5,"y":-0.0005093888486768867},"angle":{"x":0.00028371030517928804,"z":-0.00011631831873928238,"y":-1.0181408169794204e-5}},{"degrees_of_freedom":[1308,1309,1310,1311,1312,1313],"id":"n218","parent":"11","position":{"x":5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.991945838148253e-6,"z":-0.00010144656314157714,"y":-0.0009670986579230158},"angle":{"x":-7.138782128984478e-6,"z":6.836028733056288e-7,"y":-2.2522302470793694e-5}},{"degrees_of_freedom":[1314,1315,1316,1317,1318,1319],"id":"n219","parent":"11","position":{"x":5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.527446541184804e-5,"z":-5.327607498047675e-5,"y":-0.0007743087104806785},"angle":{"x":-6.1976432069711e-6,"z":3.967866183981887e-6,"y":-1.0142984112858282e-5}},{"degrees_of_freedom":[1320,1321,1322,1323,1324,1325],"id":"n220","parent":"11","position":{"x":5,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.5377553206726735e-5,"z":-4.4474380875990626e-5,"y":-0.0007646717826549896},"angle":{"x":-5.993943202880596e-6,"z":2.4071015166891534e-6,"y":-1.4450160071060316e-5}},{"degrees_of_freedom":[1326,1327,1328,1329,1330,1331],"id":"n221","parent":"11","position":{"x":5,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.791531319573797e-5,"z":-7.166728057966419e-5,"y":-0.0008282326228403464},"angle":{"x":-3.565068875673686e-5,"z":2.9279562723049517e-6,"y":-1.9749376555088543e-5}},{"degrees_of_freedom":[1332,1333,1334,1335,1336,1337],"id":"n222","parent":"11","position":{"x":5,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.593587887569224e-6,"z":-8.447194791673156e-5,"y":-0.000844119449665272},"angle":{"x":-3.928837428747248e-6,"z":-1.4508092574981161e-8,"y":-1.5252839885788957e-5}},{"degrees_of_freedom":[1338,1339,1340,1341,1342,1343],"id":"n223","parent":"11","position":{"x":5,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8562328572549993e-5,"z":-9.234076517385445e-5,"y":-0.0008360985503688571},"angle":{"x":2.370162468971093e-5,"z":8.903093088064164e-6,"y":1.3795956631675267e-5}},{"degrees_of_freedom":[1344,1345,1346,1347,1348,1349],"id":"n224","parent":"11","position":{"x":5,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5955908482187466e-5,"z":-9.858982439469486e-5,"y":-0.0007810328916194643},"angle":{"x":-5.746741048698937e-6,"z":-1.0453577600900835e-6,"y":-1.0516533000679305e-5}},{"degrees_of_freedom":[1350,1351,1352,1353,1354,1355],"id":"n225","parent":"11","position":{"x":5,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5748222292056018e-5,"z":-7.16218545764127e-5,"y":-0.0007170459440875385},"angle":{"x":-3.61643496884707e-5,"z":2.079605302742922e-6,"y":-1.552928971265939e-5}},{"degrees_of_freedom":[1356,1357,1358,1359,1360,1361],"id":"n226","parent":"11","position":{"x":5,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.410878618786075e-6,"z":-5.901315219128639e-5,"y":-0.0007004074569420229},"angle":{"x":-3.874221832202925e-6,"z":1.3762392068148196e-6,"y":-9.713887652630923e-6}},{"degrees_of_freedom":[1362,1363,1364,1365,1366,1367],"id":"n227","parent":"11","position":{"x":5,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8654911335490803e-5,"z":-5.111201245393576e-5,"y":-0.0007092090076190601},"angle":{"x":2.4851961455102402e-5,"z":1.096795015655709e-5,"y":1.3589587268073203e-5}},{"degrees_of_freedom":[1368,1369,1370,1371,1372,1373],"id":"n228","parent":"11","position":{"x":-5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.3717769271968124e-5,"z":-0.0003241917917796429,"y":-0.0011005269593739584},"angle":{"x":-5.228713023234536e-5,"z":1.903386972445698e-5,"y":-3.182730018588057e-5}},{"degrees_of_freedom":[1374,1375,1376,1377,1378,1379],"id":"n229","parent":"11","position":{"x":0,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00010148091786179426,"z":-0.00019495610616562255,"y":-0.0010021447469722323},"angle":{"x":-1.3919930931378277e-6,"z":4.9396038835486325e-6,"y":-2.949866996798636e-5}},{"degrees_of_freedom":[1380,1381,1382,1383,1384,1385],"id":"n230","parent":"11","position":{"x":2.857142857142857,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.751644083999643e-5,"z":-0.0001479807274365582,"y":-0.0009692857662660855},"angle":{"x":-1.7203535196803573e-5,"z":2.2357486304136117e-6,"y":-2.8080050284496092e-5}},{"degrees_of_freedom":[1386,1387,1388,1389,1390,1391],"id":"n231","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.580927216535214e-5,"z":-0.00015794125287374667,"y":-0.000956331625558979},"angle":{"x":-1.1236569776883703e-5,"z":2.8222338672555185e-6,"y":-2.4113588029766082e-5}},{"degrees_of_freedom":[1392,1393,1394,1395,1396,1397],"id":"n232","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.539266460184678e-5,"z":-0.00019825885418804735,"y":-0.0009546393895429103},"angle":{"x":-1.8568464279821984e-5,"z":6.067770726356623e-6,"y":-2.365374859963727e-5}},{"degrees_of_freedom":[1398,1399,1400,1401,1402,1403],"id":"n233","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.641644930067487e-5,"z":-0.0002448284281660097,"y":-0.0009840247610948842},"angle":{"x":0.00017135342493162289,"z":7.256199710017602e-5,"y":-3.05360844132991e-5}},{"degrees_of_freedom":[1404,1405,1406,1407,1408,1409],"id":"n234","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1445433249916346e-5,"z":-0.0002624428022871091,"y":-0.001058744275361857},"angle":{"x":-2.004784999398549e-5,"z":8.834178226057685e-6,"y":-2.905999456718444e-5}},{"degrees_of_freedom":[1410,1411,1412,1413,1414,1415],"id":"n235","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3362656871432217e-5,"z":-0.0002531407979152501,"y":-0.0010731264798861217},"angle":{"x":0.00014219511706832928,"z":-5.397229070076849e-5,"y":-2.5461348544811515e-5}},{"degrees_of_freedom":[1416,1417,1418,1419,1420,1421],"id":"n236","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.9113339464647036e-5,"z":-0.00020971702975131485,"y":-0.001078884039136763},"angle":{"x":-2.6839580997124527e-5,"z":7.68984735515725e-6,"y":-2.4382027039677526e-5}},{"degrees_of_freedom":[1422,1423,1424,1425,1426,1427],"id":"n237","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.307758759905145e-6,"z":-0.00016461897837069344,"y":-0.0010397208055947912},"angle":{"x":0.0001955742165205993,"z":8.442569006653548e-5,"y":-2.8700777182068545e-5}},{"degrees_of_freedom":[1428,1429,1430,1431,1432,1433],"id":"n238","parent":"11","position":{"x":-5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001447568454306696,"z":-0.00022505088543162645,"y":-0.000848661188788395},"angle":{"x":-2.085101203859593e-5,"z":1.2877664738298513e-5,"y":-2.1894141838154917e-5}},{"degrees_of_freedom":[1434,1435,1436,1437,1438,1439],"id":"n239","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012568299397796093,"z":-0.00025471078532880183,"y":-0.0008062070691703497},"angle":{"x":-6.187616948253693e-6,"z":1.0576516322807763e-5,"y":3.927424990528015e-5}},{"degrees_of_freedom":[1440,1441,1442,1443,1444,1445],"id":"n240","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011719059578555348,"z":-0.0002509922575803893,"y":-0.0008240142276198817},"angle":{"x":1.2828379607086553e-5,"z":-5.235271240882401e-5,"y":-0.0001363499236814304}},{"degrees_of_freedom":[1446,1447,1448,1449,1450,1451],"id":"n241","parent":"11","position":{"x":-5,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.03130798567088e-5,"z":-0.00024214196245286428,"y":-0.00090175507428994},"angle":{"x":5.246931984907852e-5,"z":4.184699667085215e-6,"y":2.5928696902515086e-5}},{"degrees_of_freedom":[1452,1453,1454,1455,1456,1457],"id":"n242","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.561044702112509e-5,"z":-0.00023962201724627281,"y":-0.0009590502699654958},"angle":{"x":-2.8858765580181173e-5,"z":5.0262839892839557e-5,"y":-0.00010676665487092}},{"degrees_of_freedom":[1458,1459,1460,1461,1462,1463],"id":"n243","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2691746307763843e-5,"z":-0.00021617324572389537,"y":-0.0009206889738274716},"angle":{"x":-5.568356403281102e-6,"z":8.441036940504815e-6,"y":9.156669434514302e-6}},{"degrees_of_freedom":[1464,1465,1466,1467,1468,1469],"id":"n244","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.566860108868154e-5,"z":-0.00021552170862749228,"y":-0.000895576832489326},"angle":{"x":8.38925245198165e-6,"z":-6.498515828882808e-5,"y":-0.00020089046138121794}},{"degrees_of_freedom":[1470,1471,1472,1473,1474,1475],"id":"n245","parent":"11","position":{"x":-5,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.337206355096147e-5,"z":-0.00022247868891695427,"y":-0.0008268209630555046},"angle":{"x":4.573738675924851e-5,"z":1.4832871183905771e-5,"y":2.250265181283172e-5}},{"degrees_of_freedom":[1476,1477,1478,1479,1480,1481],"id":"n246","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.844300747873177e-5,"z":-0.00022666456278100242,"y":-0.0007764837822811357},"angle":{"x":-3.0458662967849034e-5,"z":6.75471316597285e-5,"y":-0.00012422944127348073}},{"degrees_of_freedom":[1482,1483,1484,1485,1486,1487],"id":"n247","parent":"11","position":{"x":0,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010768241750065687,"z":-0.0001604418807832743,"y":-0.0008880391799495858},"angle":{"x":-1.8692301366517062e-6,"z":6.906518135755457e-6,"y":-2.1107388031139555e-5}},{"degrees_of_freedom":[1488,1489,1490,1491,1492,1493],"id":"n248","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012518858769036513,"z":-0.0002007067781670141,"y":-0.0008753560241765811},"angle":{"x":-3.113368717968871e-5,"z":-2.3429694509782812e-5,"y":-3.20200614285693e-5}},{"degrees_of_freedom":[1494,1495,1496,1497,1498,1499],"id":"n249","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013334610697607707,"z":-0.00016222667525804624,"y":-0.0008179432589605704},"angle":{"x":-1.9606465554490275e-5,"z":4.477749500630595e-6,"y":6.827592799172547e-8}},{"degrees_of_freedom":[1500,1501,1502,1503,1504,1505],"id":"n250","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010574479985961887,"z":-0.00012386084973136513,"y":-0.000751428366403649},"angle":{"x":-6.6388662910028866e-6,"z":3.494157791078376e-5,"y":-2.6979102052571973e-5}},{"degrees_of_freedom":[1506,1507,1508,1509,1510,1511],"id":"n251","parent":"11","position":{"x":0,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.125894495085004e-5,"z":-6.435177812862385e-5,"y":-0.0007113332161776433},"angle":{"x":-3.405767499796434e-5,"z":6.492194282103333e-6,"y":-1.5211574614184758e-5}},{"degrees_of_freedom":[1512,1513,1514,1515,1516,1517],"id":"n252","parent":"11","position":{"x":2.020305089104421,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.790654470751348e-5,"z":-6.184420972230736e-5,"y":-0.0007249710706542861},"angle":{"x":-1.2401322727470915e-6,"z":-2.1531671173364e-5,"y":-2.028382662532999e-6}},{"degrees_of_freedom":[1518,1519,1520,1521,1522,1523],"id":"n253","parent":"11","position":{"x":2.857142857142857,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.16005054774169e-5,"z":-6.374091194093171e-5,"y":-0.0007846421632078912},"angle":{"x":-1.3931800543470136e-5,"z":3.56436231545523e-6,"y":-3.071735438861017e-5}},{"degrees_of_freedom":[1524,1525,1526,1527,1528,1529],"id":"n254","parent":"11","position":{"x":2.020305089104421,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.308771269666133e-5,"z":-0.00011704850324454807,"y":-0.0008512059305324371},"angle":{"x":-2.0863849350089524e-5,"z":3.0134431533605887e-5,"y":-1.203049298555776e-5}},{"degrees_of_freedom":[1530,1531,1532,1533,1534,1535],"id":"n255","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.946472339895411e-5,"z":-4.293923880952299e-5,"y":-0.0005173129525155278},"angle":{"x":0.000678676347122847,"z":0.0003003667020621723,"y":-1.2259408489829057e-5}},{"degrees_of_freedom":[1536,1537,1538,1539,1540,1541],"id":"n256","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.528329934852938e-5,"z":-6.579849064038406e-5,"y":-0.0006556566510079514},"angle":{"x":-6.845650702458222e-6,"z":5.504320203301835e-5,"y":-1.2130536499726027e-5}},{"degrees_of_freedom":[1542,1543,1544,1545,1546,1547],"id":"n257","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.754633284993169e-5,"z":-8.45875653964246e-5,"y":-0.0007825428908019106},"angle":{"x":-0.00013346244212478195,"z":0.00010276381889450146,"y":-9.696395450794056e-6}},{"degrees_of_freedom":[1548,1549,1550,1551,1552,1553],"id":"n258","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.763594802733324e-5,"z":-8.537807876964171e-5,"y":-0.000627357235188324},"angle":{"x":0.0007964388957218858,"z":0.0003692596973413045,"y":-9.55122143170541e-6}},{"degrees_of_freedom":[1554,1555,1556,1557,1558,1559],"id":"n259","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.353712823311248e-5,"z":-6.688819276196104e-5,"y":-0.00041851814848619436},"angle":{"x":-8.232210782547549e-5,"z":5.9404533605464755e-5,"y":-1.1031949116037569e-5}},{"degrees_of_freedom":[1560,1561,1562,1563,1564,1565],"id":"n260","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.342321937399871e-5,"z":-4.6575238977643034e-5,"y":-0.00034745966073319244},"angle":{"x":-2.77527861265435e-5,"z":3.927751000605505e-5,"y":-1.2348181270276839e-5}},{"degrees_of_freedom":[1566,1567,1568,1569,1570,1571],"id":"n261","parent":"11","position":{"x":5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00015160717814133496,"z":-7.851320145895397e-5,"y":-0.0009602656275475087},"angle":{"x":-1.0943204039803035e-5,"z":-4.76046836300241e-6,"y":-2.2521133692893002e-5}},{"degrees_of_freedom":[1572,1573,1574,1575,1576,1577],"id":"n262","parent":"11","position":{"x":5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001805832594812788,"z":2.0213648868335877e-6,"y":-0.0007705072401202711},"angle":{"x":-1.638721754414191e-6,"z":8.988943608741816e-6,"y":-1.62401121641264e-5}},{"degrees_of_freedom":[1578,1579,1580,1581,1582,1583],"id":"n263","parent":"11","position":{"x":5,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014829828089279041,"z":2.1061525616475817e-6,"y":-0.0007571785027475973},"angle":{"x":-5.859510208042581e-6,"z":2.0922926164048205e-5,"y":-1.7098498818563926e-5}},{"degrees_of_freedom":[1584,1585,1586,1587,1588,1589],"id":"n264","parent":"11","position":{"x":5,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001822448140161808,"z":-3.0299951436950942e-5,"y":-0.0008207028874603168},"angle":{"x":-4.16657934987062e-5,"z":6.0805278992012474e-5,"y":-0.00013444848966309478}},{"degrees_of_freedom":[1590,1591,1592,1593,1594,1595],"id":"n265","parent":"11","position":{"x":5,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002519543701269692,"z":-4.7394965141980496e-5,"y":-0.00083695127856322},"angle":{"x":-5.982072855511071e-6,"z":1.7272726827101797e-5,"y":-1.5865345769462922e-5}},{"degrees_of_freedom":[1596,1597,1598,1599,1600,1601],"id":"n266","parent":"11","position":{"x":5,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012426135237587454,"z":-5.633836174453643e-5,"y":-0.0008323594033060675},"angle":{"x":2.159696288237318e-5,"z":6.352799887828475e-5,"y":0.00011950984855428395}},{"degrees_of_freedom":[1602,1603,1604,1605,1606,1607],"id":"n267","parent":"11","position":{"x":5,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.644089165992602e-5,"z":-6.045341588236015e-5,"y":-0.0007777930898955956},"angle":{"x":-6.103963555659243e-6,"z":1.6821206614829138e-5,"y":-8.051570250055348e-6}},{"degrees_of_freedom":[1608,1609,1610,1611,1612,1613],"id":"n268","parent":"11","position":{"x":5,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.2096149597776236e-5,"z":-3.405701048922203e-5,"y":-0.0007134368151772568},"angle":{"x":-3.5406956936308466e-5,"z":5.747297757452217e-5,"y":-0.00011848680223344987}},{"degrees_of_freedom":[1614,1615,1616,1617,1618,1619],"id":"n269","parent":"11","position":{"x":5,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.306357140165271e-5,"z":-1.997618231788006e-5,"y":-0.0006966099541480779},"angle":{"x":-4.666799422137268e-6,"z":2.0471298989943143e-5,"y":-9.284755265505269e-6}},{"degrees_of_freedom":[1620,1621,1622,1623,1624,1625],"id":"n270","parent":"11","position":{"x":5,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.573440530582977e-5,"z":-9.14859170042116e-6,"y":-0.0007027800806760757},"angle":{"x":2.8904537152108058e-5,"z":6.870309744932836e-5,"y":0.0001225898982614833}},{"degrees_of_freedom":[1626,1627,1628,1629,1630,1631],"id":"n271","parent":"11","position":{"x":-5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00016467386200149,"z":-0.000293220185670177,"y":-0.001113150869310457},"angle":{"x":-5.011980644318763e-5,"z":1.072626609133832e-5,"y":-2.3899993740759443e-5}},{"degrees_of_freedom":[1632,1633,1634,1635,1636,1637],"id":"n272","parent":"11","position":{"x":0,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0002462321285192256,"z":-0.00018955049345143827,"y":-0.0010102462539795746},"angle":{"x":2.3122792594937778e-5,"z":3.102492922280677e-5,"y":-3.731712666468301e-5}},{"degrees_of_freedom":[1638,1639,1640,1641,1642,1643],"id":"n273","parent":"11","position":{"x":2.857142857142857,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016119788089790702,"z":-0.0001315697916533882,"y":-0.0007332417560411539},"angle":{"x":-2.597562021352542e-5,"z":3.067103060150965e-5,"y":-2.6661781784340214e-5}},{"degrees_of_freedom":[1644,1645,1646,1647,1648,1649],"id":"n274","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001911907954128763,"z":-0.00014139815285730818,"y":-0.0008904457405093428},"angle":{"x":-0.00044965906629786085,"z":0.0001897055699886108,"y":-2.6788612212846958e-5}},{"degrees_of_freedom":[1650,1651,1652,1653,1654,1655],"id":"n275","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021058608523168403,"z":-0.0001867118490997322,"y":-0.0009638208917293169},"angle":{"x":-1.3342741818652823e-5,"z":3.5853944546539017e-5,"y":-2.548524614928012e-5}},{"degrees_of_freedom":[1656,1657,1658,1659,1660,1661],"id":"n276","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019072447904771493,"z":-0.00023301295558119205,"y":-0.001059527457284846},"angle":{"x":0.0003495748385597204,"z":0.00016375518560500721,"y":-2.792131494405813e-5}},{"degrees_of_freedom":[1662,1663,1664,1665,1666,1667],"id":"n277","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001640339746281162,"z":-0.0002465470251198863,"y":-0.0013042841641138384},"angle":{"x":-2.429950974539307e-5,"z":3.999183374044976e-5,"y":-2.6616289273687016e-5}},{"degrees_of_freedom":[1668,1669,1670,1671,1672,1673],"id":"n278","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013379439906065156,"z":-0.0002369040154036452,"y":-0.0011407495429362508},"angle":{"x":-0.00027839791122631494,"z":0.00012607226860096322,"y":-2.316713276535298e-5}},{"degrees_of_freedom":[1674,1675,1676,1677,1678,1679],"id":"n279","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011826619577351419,"z":-0.00019486234398202298,"y":-0.0010740048564866784},"angle":{"x":-2.1610161651301145e-5,"z":3.611665700063005e-5,"y":-2.4679548045451427e-5}},{"degrees_of_freedom":[1680,1681,1682,1683,1684,1685],"id":"n280","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014028784036485998,"z":-0.0001485928015682253,"y":-0.000971091761533604},"angle":{"x":0.0003466512123106765,"z":0.00016548415860911575,"y":-2.8963807320513914e-5}},{"degrees_of_freedom":[1686,1687,1688,1689,1690,1691],"id":"n281","parent":"11","position":{"x":-5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019617133537354366,"z":-0.0002231670202801528,"y":-0.000844344178100866},"angle":{"x":-4.402637770351677e-5,"z":1.6399310740721325e-5,"y":-8.145288187301844e-5}},{"degrees_of_freedom":[1692,1693,1694,1695,1696,1697],"id":"n282","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001619169853536015,"z":-0.00023634290905418765,"y":-0.0008159347700970659},"angle":{"x":-3.437941745279409e-6,"z":6.71845421175593e-5,"y":3.386830974194076e-5}},{"degrees_of_freedom":[1698,1699,1700,1701,1702,1703],"id":"n283","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00029259577659756613,"z":-0.0002282933335007321,"y":-0.0008367386585234821},"angle":{"x":1.5098724119096524e-5,"z":0.00015771774591779932,"y":0.00028993610030886334}},{"degrees_of_freedom":[1704,1705,1706,1707,1708,1709],"id":"n284","parent":"11","position":{"x":-5,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0006080795508053082,"z":-0.0002181861761682888,"y":-0.000915778119778697},"angle":{"x":5.43345562758366e-5,"z":6.626011960735274e-5,"y":3.125569339496442e-5}},{"degrees_of_freedom":[1710,1711,1712,1713,1714,1715],"id":"n285","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016630487806016604,"z":-0.00021676783636816866,"y":-0.0009755014692662891},"angle":{"x":-2.541159031424361e-5,"z":0.0003248912021771146,"y":-0.0007002643879465669}},{"degrees_of_freedom":[1716,1717,1718,1719,1720,1721],"id":"n286","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6683577071284288e-5,"z":-0.0001990892491471205,"y":-0.0009386798242222007},"angle":{"x":-2.94418855278585e-6,"z":6.718403904325088e-5,"y":2.864134564663681e-5}},{"degrees_of_freedom":[1722,1723,1724,1725,1726,1727],"id":"n287","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001517356340246197,"z":-0.0002011676750472961,"y":-0.000912132938907031},"angle":{"x":8.629037966725343e-6,"z":6.605840052047458e-5,"y":2.54575457206181e-5}},{"degrees_of_freedom":[1728,1729,1730,1731,1732,1733],"id":"n288","parent":"11","position":{"x":-5,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00047778032207006313,"z":-0.00020936579263139445,"y":-0.0008417148448350917},"angle":{"x":4.839345110620384e-5,"z":6.810812907503833e-5,"y":3.125494579786554e-5}},{"degrees_of_freedom":[1734,1735,1736,1737,1738,1739],"id":"n289","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5446442624676887e-5,"z":-0.00021328387265900486,"y":-0.0007868022888819953},"angle":{"x":-2.8007380592620233e-5,"z":0.00040646909686923894,"y":-0.0009257743510482718}},{"degrees_of_freedom":[1740,1741,1742,1743,1744,1745],"id":"n290","parent":"11","position":{"x":0,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019030486651557574,"z":5.648691008276619e-5,"y":-0.0008564333745591767},"angle":{"x":0.00021834608597196792,"z":-1.823252015385829e-5,"y":2.8126423269669034e-5}},{"degrees_of_freedom":[1746,1747,1748,1749,1750,1751],"id":"n291","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020177261019366368,"z":-6.940943844181374e-5,"y":-0.0008173273028026256},"angle":{"x":-4.061212194469097e-5,"z":-1.154450048842521e-5,"y":-7.913764350062178e-5}},{"degrees_of_freedom":[1752,1753,1754,1755,1756,1757],"id":"n292","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002086182863080143,"z":-5.358589096836769e-5,"y":-0.0007844652473883166},"angle":{"x":-5.0110761211892994e-6,"z":-1.309805003810008e-7,"y":6.810954178662e-6}},{"degrees_of_freedom":[1758,1759,1760,1761,1762,1763],"id":"n293","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019845122103046575,"z":-4.916167697372884e-5,"y":-0.0007472395910654441},"angle":{"x":-1.4118752963191532e-5,"z":1.8569047917990537e-5,"y":2.8798915708911924e-5}},{"degrees_of_freedom":[1764,1765,1766,1767,1768,1769],"id":"n294","parent":"11","position":{"x":0,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019111511505440435,"z":-9.552915336454505e-5,"y":-0.0007560805414395421},"angle":{"x":5.905452533393423e-5,"z":-1.6906510952117734e-5,"y":-1.5104609523720745e-6}},{"degrees_of_freedom":[1770,1771,1772,1773,1774,1775],"id":"n295","parent":"11","position":{"x":2.020305089104421,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018157086714379463,"z":-4.305849890203384e-5,"y":-0.0007936323551716749},"angle":{"x":-4.1100070308724645e-5,"z":-1.0903349783334501e-5,"y":-4.299585675536565e-5}},{"degrees_of_freedom":[1776,1777,1778,1779,1780,1781],"id":"n296","parent":"11","position":{"x":2.857142857142857,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001767627464509652,"z":-9.011263328321398e-5,"y":-0.0008300729175932256},"angle":{"x":-3.4647936427789276e-5,"z":-1.1781472381534979e-7,"y":-2.7419003667560717e-5}},{"degrees_of_freedom":[1782,1783,1784,1785,1786,1787],"id":"n297","parent":"11","position":{"x":2.020305089104421,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018377707676134168,"z":-0.00018305730027589508,"y":-0.0008695085742926196},"angle":{"x":-0.00011481743123630882,"z":1.574332029403869e-5,"y":0.00016612726144771723}},{"degrees_of_freedom":[1788,1789,1790,1791,1792,1793],"id":"n298","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014396702756868315,"z":-0.00016032131205169614,"y":-0.0011916814706801307},"angle":{"x":2.9012422861546105e-5,"z":-2.7693459412076616e-5,"y":-3.485873555391509e-5}},{"degrees_of_freedom":[1794,1795,1796,1797,1798,1799],"id":"n299","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001812670877952777,"z":-0.00017274586567785262,"y":-0.0009722647044529875},"angle":{"x":-0.00031402542706146774,"z":-0.00015031675619055137,"y":-2.3485912671574285e-5}},{"degrees_of_freedom":[1800,1801,1802,1803,1804,1805],"id":"n300","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019874156791158581,"z":-0.00021729641426999194,"y":-0.0008771467510500473},"angle":{"x":4.74761389011296e-5,"z":-2.384784744237743e-5,"y":-2.724815932043404e-5}},{"degrees_of_freedom":[1806,1807,1808,1809,1810,1811],"id":"n301","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017534975252801906,"z":-0.00026973125522819735,"y":-0.0008614885227463935},"angle":{"x":-0.0002242468778725403,"z":7.35620182833402e-5,"y":-3.2992211100957e-5}},{"degrees_of_freedom":[1812,1813,1814,1815,1816,1817],"id":"n302","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013737548179280546,"z":-0.00028568579980877134,"y":-0.0008339056066180499},"angle":{"x":3.4504327774101955e-5,"z":-1.657902445495272e-5,"y":-3.43518225548314e-5}},{"degrees_of_freedom":[1818,1819,1820,1821,1822,1823],"id":"n303","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.92105522661405e-5,"z":-0.0002731155069963017,"y":-0.0009957972358164138},"angle":{"x":-0.0005773382163388202,"z":-0.00023155670110406736,"y":-2.8363431903785356e-5}},{"degrees_of_freedom":[1824,1825,1826,1827,1828,1829],"id":"n304","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.976606037987689e-5,"z":-0.00022415955795390623,"y":-0.0010586221044107866},"angle":{"x":1.6039773311585208e-5,"z":-2.0424749070522064e-5,"y":-2.766754643478413e-5}},{"degrees_of_freedom":[1830,1831,1832,1833,1834,1835],"id":"n305","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010256538200059852,"z":-0.00017398317186665289,"y":-0.0010946015428183427},"angle":{"x":-7.405384474358984e-6,"z":-1.347671402134268e-5,"y":-3.0348391898814e-5}},{"degrees_of_freedom":[1836,1837,1838,1839,1840,1841],"id":"n306","parent":"11","position":{"x":5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00019591803840621118,"z":-0.00016133162631689452,"y":-0.001188460940339202},"angle":{"x":-4.85030400259166e-7,"z":-6.025574520360592e-6,"y":-3.590976712399207e-5}},{"degrees_of_freedom":[1842,1843,1844,1845,1846,1847],"id":"n307","parent":"11","position":{"x":5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027777938551015984,"z":-0.00016630749828432415,"y":-0.0011353018094475515},"angle":{"x":-1.7399428281920678e-5,"z":3.944963112528523e-6,"y":-2.0285168337587078e-5}},{"degrees_of_freedom":[1848,1849,1850,1851,1852,1853],"id":"n308","parent":"11","position":{"x":5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.655563865800501e-5,"z":-0.00013768902352300993,"y":-0.0010737155028295413},"angle":{"x":-6.962100172034008e-6,"z":3.7924360829897158e-6,"y":-1.7447856435058537e-5}},{"degrees_of_freedom":[1854,1855,1856,1857,1858,1859],"id":"n309","parent":"11","position":{"x":5,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.866679609024357e-5,"z":-0.0001336407456160637,"y":-0.0010783247218747773},"angle":{"x":-6.0502341616683935e-6,"z":-8.992578491882985e-7,"y":-2.4221511142907342e-5}},{"degrees_of_freedom":[1860,1861,1862,1863,1864,1865],"id":"n310","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012186019467735859,"z":-0.00015217453527136346,"y":-0.0011139031525237081},"angle":{"x":-2.0822977434262395e-5,"z":-4.063468842120248e-6,"y":-1.812336421862301e-5}},{"degrees_of_freedom":[1866,1867,1868,1869,1870,1871],"id":"n311","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018553547518048976,"z":-0.0001619511997718106,"y":-0.0011267769108734159},"angle":{"x":-7.367157533569788e-6,"z":-2.171300670220044e-6,"y":-2.6326822820204978e-5}},{"degrees_of_freedom":[1872,1873,1874,1875,1876,1877],"id":"n312","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002243958885193689,"z":-0.000166782938711312,"y":-0.0011308221998045835},"angle":{"x":1.1120172518431519e-5,"z":9.25801183654577e-6,"y":8.851755215948542e-6}},{"degrees_of_freedom":[1878,1879,1880,1881,1882,1883],"id":"n313","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023731065160713624,"z":-0.0001663477738090125,"y":-0.0011049957719808869},"angle":{"x":-6.512209644526126e-6,"z":-3.4724305773978796e-6,"y":-2.430381081642317e-5}},{"degrees_of_freedom":[1884,1885,1886,1887,1888,1889],"id":"n314","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020954871602986514,"z":-0.00014289422777916358,"y":-0.0010685905853452843},"angle":{"x":-2.6098108253813835e-5,"z":-1.556054706550745e-6,"y":-2.6872594004896756e-5}},{"degrees_of_freedom":[1890,1891,1892,1893,1894,1895],"id":"n315","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015020682673694928,"z":-0.00013310826896860238,"y":-0.001052845999397126},"angle":{"x":-7.951166718969356e-6,"z":-2.200398165000391e-6,"y":-2.2198550827277338e-5}},{"degrees_of_freedom":[1896,1897,1898,1899,1900,1901],"id":"n316","parent":"11","position":{"x":5,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011601234737192184,"z":-0.00013093916133437292,"y":-0.0010514776978751482},"angle":{"x":8.907004075093993e-6,"z":7.4990080388096985e-6,"y":2.383969438020725e-6}},{"degrees_of_freedom":[1902,1903,1904,1905,1906,1907],"id":"n317","parent":"11","position":{"x":-5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00012363192109715802,"z":-0.0006276378138302749,"y":-0.0014541915456846096},"angle":{"x":-7.032729993665673e-5,"z":4.817095618156793e-5,"y":-8.776719134917976e-5}},{"degrees_of_freedom":[1908,1909,1910,1911,1912,1913],"id":"n318","parent":"11","position":{"x":0,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003307053985500291,"z":-0.00030691569104690367,"y":-0.00138946177354428},"angle":{"x":-0.0001612057829425042,"z":-5.341728822770929e-5,"y":-4.873529984548105e-5}},{"degrees_of_freedom":[1914,1915,1916,1917,1918,1919],"id":"n319","parent":"11","position":{"x":0,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.1237459898371834e-5,"z":-0.00035560663600508915,"y":-0.001207434257533612},"angle":{"x":-2.2615496099482583e-5,"z":3.3405410937062755e-6,"y":-4.99996545725107e-5}},{"degrees_of_freedom":[1920,1921,1922,1923,1924,1925],"id":"n320","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018215067159433788,"z":-0.00022548813691579167,"y":-0.0010684428970099739},"angle":{"x":-2.2400079597977836e-5,"z":2.4165288416034968e-5,"y":-5.380614724621969e-5}},{"degrees_of_freedom":[1926,1927,1928,1929,1930,1931],"id":"n321","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012521494992182483,"z":-0.000249110964468604,"y":-0.0011612755392730358},"angle":{"x":-0.0002027789707556631,"z":8.793899858525809e-5,"y":-4.730249497541926e-5}},{"degrees_of_freedom":[1932,1933,1934,1935,1936,1937],"id":"n322","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.375975804369412e-5,"z":-0.0003355347026230387,"y":-0.001199728643802763},"angle":{"x":-3.4693297156524086e-5,"z":2.8511954388384842e-5,"y":-5.2516461585483e-5}},{"degrees_of_freedom":[1938,1939,1940,1941,1942,1943],"id":"n323","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001205329494899355,"z":-0.0004355673084612072,"y":-0.0012962470685643698},"angle":{"x":0.00024278065497940812,"z":0.00012661360606809946,"y":-6.0575104916082314e-5}},{"degrees_of_freedom":[1944,1945,1946,1947,1948,1949],"id":"n324","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017487377262088288,"z":-0.00046706080929970043,"y":-0.0015292619419103178},"angle":{"x":-2.239951198456998e-5,"z":3.28581417693918e-5,"y":-5.671148317305567e-5}},{"degrees_of_freedom":[1950,1951,1952,1953,1954,1955],"id":"n325","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024196164475858312,"z":-0.00044297840095307804,"y":-0.0013867552185117587},"angle":{"x":-8.504267735537778e-5,"z":5.500571561176785e-5,"y":-6.572065798041144e-5}},{"degrees_of_freedom":[1956,1957,1958,1959,1960,1961],"id":"n326","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00028490405211877836,"z":-0.00033823532707985234,"y":-0.0013277273476137517},"angle":{"x":-1.0106200456534113e-5,"z":2.8511581401849396e-5,"y":-5.450699104411093e-5}},{"degrees_of_freedom":[1962,1963,1964,1965,1966,1967],"id":"n327","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024412224466290806,"z":-0.0002472429686642128,"y":-0.0012517849619578074},"angle":{"x":9.575430250152881e-5,"z":6.593901759355062e-5,"y":-5.085887875055832e-5}},{"degrees_of_freedom":[1968,1969,1970,1971,1972,1973],"id":"n328","parent":"11","position":{"x":-5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024457826920299514,"z":-0.0005073153804643367,"y":-0.0013129235092559793},"angle":{"x":-1.5998493175941815e-5,"z":2.1447226416358562e-5,"y":-5.31645189322607e-6}},{"degrees_of_freedom":[1974,1975,1976,1977,1978,1979],"id":"n329","parent":"11","position":{"x":-5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.780746669887528e-6,"z":-0.000461171201071281,"y":-0.0011972205820811326},"angle":{"x":-1.805144755790101e-5,"z":2.1246381080039286e-5,"y":-4.375661316002176e-5}},{"degrees_of_freedom":[1980,1981,1982,1983,1984,1985],"id":"n330","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014297053306471235,"z":-0.0004964752745541628,"y":-0.001286672821229645},"angle":{"x":-1.9406524715989487e-5,"z":2.5479290298157963e-5,"y":1.0145651153327401e-5}},{"degrees_of_freedom":[1986,1987,1988,1989,1990,1991],"id":"n331","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.115299998912822e-5,"z":-0.00052175137027999,"y":-0.0012861844282982505},"angle":{"x":-7.882053289632659e-6,"z":1.544026794309908e-5,"y":-1.824898934501535e-5}},{"degrees_of_freedom":[1992,1993,1994,1995,1996,1997],"id":"n332","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.3945653225140254e-5,"z":-0.0005245144342784773,"y":-0.0013090264508062177},"angle":{"x":8.943725925862997e-6,"z":2.7552103208737207e-5,"y":1.6008436407003274e-5}},{"degrees_of_freedom":[1998,1999,2000,2001,2002,2003],"id":"n333","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001558368644410081,"z":-0.0005135293756138854,"y":-0.0013166638849422434},"angle":{"x":-3.854727186783497e-5,"z":0.00011545976228321323,"y":-0.00023263196533497246}},{"degrees_of_freedom":[2004,2005,2006,2007,2008,2009],"id":"n334","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023444747973365825,"z":-0.000469770607318416,"y":-0.0012752920421917064},"angle":{"x":-1.8500487169904755e-5,"z":2.5479469022870405e-5,"y":2.1870936030248362e-5}},{"degrees_of_freedom":[2010,2011,2012,2013,2014,2015],"id":"n335","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002764531925612092,"z":-0.0004420745527849079,"y":-0.0012680804238057205},"angle":{"x":-1.1489895762736912e-5,"z":-5.817692577876422e-5,"y":-0.00021474472984115613}},{"degrees_of_freedom":[2016,2017,2018,2019,2020,2021],"id":"n336","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003778628490351817,"z":-0.0004391609517487106,"y":-0.0012586349427819268},"angle":{"x":1.347504990473254e-6,"z":2.340658743442974e-5,"y":1.6008770439751052e-5}},{"degrees_of_freedom":[2022,2023,2024,2025,2026,2027],"id":"n337","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021176865415142203,"z":-0.0004515885347427511,"y":-0.0012568102561268523},"angle":{"x":-3.461259608527364e-5,"z":0.00017286395418981222,"y":-0.0004067210080344247}},{"degrees_of_freedom":[2028,2029,2030,2031,2032,2033],"id":"n338","parent":"11","position":{"x":0,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00031217126717385924,"z":-0.0001596969119332112,"y":-0.001189643845441915},"angle":{"x":-0.00014072829614154245,"z":2.4433785617050785e-5,"y":-8.993136887909013e-5}},{"degrees_of_freedom":[2034,2035,2036,2037,2038,2039],"id":"n339","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000306067908694224,"z":-9.577487451774992e-5,"y":-0.0011593338355805124},"angle":{"x":2.858599825919283e-5,"z":-3.724827963472419e-7,"y":-1.9799103109417276e-5}},{"degrees_of_freedom":[2040,2041,2042,2043,2044,2045],"id":"n340","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002900974714279875,"z":-2.1453876888261492e-5,"y":-0.0011634180825366854},"angle":{"x":-4.111481404816644e-5,"z":1.3655252254005137e-5,"y":-0.00018807160551150869}},{"degrees_of_freedom":[2046,2047,2048,2049,2050,2051],"id":"n341","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002516356468298776,"z":-0.00026190376233333016,"y":-0.001189472166797959},"angle":{"x":-0.00014701667142573468,"z":2.6276468397925278e-5,"y":6.759813491459928e-5}},{"degrees_of_freedom":[2052,2053,2054,2055,2056,2057],"id":"n342","parent":"11","position":{"x":0,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023453805560120816,"z":-0.00024836407211387357,"y":-0.001251585585701909},"angle":{"x":-0.0001850963067383233,"z":2.7172351816909278e-5,"y":8.33711945869854e-5}},{"degrees_of_freedom":[2058,2059,2060,2061,2062,2063],"id":"n343","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024287255683250034,"z":7.496679926953742e-5,"y":-0.0012824220934035241},"angle":{"x":-2.732348764011305e-5,"z":-3.8035160719375863e-6,"y":0.00014872289673534175}},{"degrees_of_freedom":[2064,2065,2066,2067,2068,2069],"id":"n344","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00025542878107833117,"z":0.00025462529755125205,"y":-0.0012735642981508862},"angle":{"x":0.0001321878318883788,"z":1.262830325342063e-5,"y":0.000533816855074881}},{"degrees_of_freedom":[2070,2071,2072,2073,2074,2075],"id":"n345","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002921516362556335,"z":-0.00045915254267847594,"y":-0.001245649974917578},"angle":{"x":0.0005005846973315797,"z":2.5754346737569352e-5,"y":-0.00035557199455140456}},{"degrees_of_freedom":[2076,2077,2078,2079,2080,2081],"id":"n346","parent":"11","position":{"x":0,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.401994199361972e-5,"z":-0.00025599553502638275,"y":-0.001156155450730049},"angle":{"x":3.795906531873276e-5,"z":9.699414445376648e-6,"y":-3.7152736168433904e-5}},{"degrees_of_freedom":[2082,2083,2084,2085,2086,2087],"id":"n347","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.047152850536599e-6,"z":-0.00036156559914980746,"y":-0.0011642558386757383},"angle":{"x":-5.322605803322427e-5,"z":-4.16169613198091e-6,"y":-7.305870679279227e-5}},{"degrees_of_freedom":[2088,2089,2090,2091,2092,2093],"id":"n348","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6143481398888025e-5,"z":-0.0003150585110948384,"y":-0.0011399576469216573},"angle":{"x":-1.678445442096743e-5,"z":8.06960585101912e-6,"y":1.5120749120029723e-5}},{"degrees_of_freedom":[2094,2095,2096,2097,2098,2099],"id":"n349","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.184996939019885e-5,"z":-0.00029385866724502174,"y":-0.0010995391731132961},"angle":{"x":1.773555995094845e-5,"z":2.4457672448222983e-5,"y":-6.801625651873028e-5}},{"degrees_of_freedom":[2100,2101,2102,2103,2104,2105],"id":"n350","parent":"11","position":{"x":0,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.9232720868974774e-5,"z":-0.0001714796688177449,"y":-0.0010669648352821565},"angle":{"x":-7.00189413447942e-5,"z":8.528053930804169e-6,"y":-3.152399990622928e-5}},{"degrees_of_freedom":[2106,2107,2108,2109,2110,2111],"id":"n351","parent":"11","position":{"x":2.020305089104421,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.26005300364398e-5,"z":-0.00016628967642184399,"y":-0.0010652976238849337},"angle":{"x":1.905612595239792e-5,"z":-7.812176872494689e-6,"y":5.228965692732162e-6}},{"degrees_of_freedom":[2112,2113,2114,2115,2116,2117],"id":"n352","parent":"11","position":{"x":2.857142857142857,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.885898510610017e-5,"z":-0.00013177054143668996,"y":-0.0010898232849655537},"angle":{"x":-1.1699030079574188e-5,"z":6.324713468515765e-6,"y":-6.972989896906554e-5}},{"degrees_of_freedom":[2118,2119,2120,2121,2122,2123],"id":"n353","parent":"11","position":{"x":2.020305089104421,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.623781514424473e-5,"z":-0.00021395664596627508,"y":-0.001125894929448924},"angle":{"x":-3.955891084070758e-5,"z":2.1988706797582826e-5,"y":-3.1795790553304605e-6}},{"degrees_of_freedom":[2124,2125,2126,2127,2128,2129],"id":"n354","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.803958665645318e-5,"z":-0.0001577003427512553,"y":-0.0009965609828222614},"angle":{"x":-4.881292158312797e-5,"z":-1.4512321939094613e-5,"y":-2.3690656314601145e-5}},{"degrees_of_freedom":[2130,2131,2132,2133,2134,2135],"id":"n355","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.187336999006861e-5,"z":-0.00020252419232964715,"y":-0.00100225487412935},"angle":{"x":8.251598652551249e-6,"z":5.1529509445085564e-6,"y":-2.598800936723333e-5}},{"degrees_of_freedom":[2136,2137,2138,2139,2140,2141],"id":"n356","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.332258343634633e-6,"z":-0.0002488007847065219,"y":-0.0010217592730727516},"angle":{"x":-2.1853255109372314e-6,"z":9.35305086180057e-6,"y":-2.7256380659866815e-5}},{"degrees_of_freedom":[2142,2143,2144,2145,2146,2147],"id":"n357","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.962279904956438e-5,"z":-0.0002525817975635517,"y":-0.0009541425004871906},"angle":{"x":-9.327013291030671e-5,"z":-1.4500365862878655e-5,"y":-2.691417573333261e-5}},{"degrees_of_freedom":[2148,2149,2150,2151,2152,2153],"id":"n358","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.633833071532267e-5,"z":-0.00020587172877639675,"y":-0.000913635049243154},"angle":{"x":-3.734586654477447e-5,"z":3.2292673982300468e-6,"y":-2.6030635539199416e-5}},{"degrees_of_freedom":[2154,2155,2156,2157,2158,2159],"id":"n359","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.365508362056214e-5,"z":-0.00015961665808574634,"y":-0.0009356324778887447},"angle":{"x":0.00019234158152376158,"z":-7.593494292866803e-5,"y":-2.769383009044404e-5}},{"degrees_of_freedom":[2160,2161,2162,2163,2164,2165],"id":"n360","parent":"11","position":{"x":5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.155706658857433e-5,"z":-0.00016400948973873512,"y":-0.0011583193687601681},"angle":{"x":-9.583624768307969e-6,"z":-2.0717295225740583e-7,"y":-4.461329445096247e-5}},{"degrees_of_freedom":[2166,2167,2168,2169,2170,2171],"id":"n361","parent":"11","position":{"x":5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010912123925425089,"z":-0.00012130898178834318,"y":-0.001064692071660898},"angle":{"x":-6.397974661489009e-6,"z":5.136769247980334e-6,"y":-1.4885999374398571e-5}},{"degrees_of_freedom":[2172,2173,2174,2175,2176,2177],"id":"n362","parent":"11","position":{"x":5,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.959706257035703e-5,"z":-0.00011695209398741909,"y":-0.0010557548004477824},"angle":{"x":-6.179723053596226e-6,"z":9.141218905153096e-6,"y":-2.2772580399988146e-5}},{"degrees_of_freedom":[2178,2179,2180,2181,2182,2183],"id":"n363","parent":"11","position":{"x":5,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.074672272436408e-5,"z":-0.00013611222343716046,"y":-0.0010886943455232965},"angle":{"x":-2.068682677105831e-5,"z":1.2760556735930906e-5,"y":-3.8136237353875306e-5}},{"degrees_of_freedom":[2184,2185,2186,2187,2188,2189],"id":"n364","parent":"11","position":{"x":5,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.971248983562623e-5,"z":-0.0001438279626810333,"y":-0.0010996059994553577},"angle":{"x":-5.047113164781044e-6,"z":6.95059326305268e-6,"y":-2.6829778678813663e-5}},{"degrees_of_freedom":[2190,2191,2192,2193,2194,2195],"id":"n365","parent":"11","position":{"x":5,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0757088121436782e-5,"z":-0.00014593875641353467,"y":-0.0010991694664090653},"angle":{"x":7.505155472082921e-6,"z":3.751430960731464e-5,"y":6.474407155986218e-5}},{"degrees_of_freedom":[2196,2197,2198,2199,2200,2201],"id":"n366","parent":"11","position":{"x":5,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.25106946260163e-5,"z":-0.00014267340585478018,"y":-0.00107475774395208},"angle":{"x":-6.0034989816024105e-6,"z":4.515176923303472e-6,"y":-2.346507669762304e-5}},{"degrees_of_freedom":[2202,2203,2204,2205,2206,2207],"id":"n367","parent":"11","position":{"x":5,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4991369080243965e-5,"z":-0.00012423637635427433,"y":-0.0010409600381883189},"angle":{"x":-2.064519100810092e-5,"z":1.4265411882252314e-5,"y":-4.5916429266819274e-5}},{"degrees_of_freedom":[2208,2209,2210,2211,2212,2213],"id":"n368","parent":"11","position":{"x":5,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.064756104102616e-5,"z":-0.00011698794803642863,"y":-0.0010297414094745368},"angle":{"x":-4.564235596103914e-6,"z":6.705758863450666e-6,"y":-1.9407986183719667e-5}},{"degrees_of_freedom":[2214,2215,2216,2217,2218,2219],"id":"n369","parent":"11","position":{"x":5,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.033348458428029e-5,"z":-0.00011468981090413983,"y":-0.0010314275264637668},"angle":{"x":9.073617002322506e-6,"z":3.605570029112373e-5,"y":5.8479675251829116e-5}},{"degrees_of_freedom":[2220,2221,2222,2223,2224,2225],"id":"n370","parent":"11","position":{"x":-5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00013646014511814174,"z":-0.0005751177325711181,"y":-0.0014256088957920055},"angle":{"x":-7.173738183657749e-5,"z":4.0819362197060975e-5,"y":-6.307530644496623e-5}},{"degrees_of_freedom":[2226,2227,2228,2229,2230,2231],"id":"n371","parent":"11","position":{"x":0,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00019986597407365306,"z":-0.0003750547339098219,"y":-0.0012087100353694999},"angle":{"x":-3.800945406566698e-5,"z":1.1714068654567122e-5,"y":-4.270686359123522e-5}},{"degrees_of_freedom":[2232,2233,2234,2235,2236,2237],"id":"n372","parent":"11","position":{"x":2.857142857142857,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.280473447748088e-5,"z":-0.0002635605003146771,"y":-0.0008473582760817409},"angle":{"x":3.2725837505961858e-6,"z":4.93945093662253e-5,"y":-3.337330116579302e-5}},{"degrees_of_freedom":[2238,2239,2240,2241,2242,2243],"id":"n373","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012224183118093998,"z":-0.0002797186540452756,"y":-0.0011358913821425405},"angle":{"x":-0.0005028264671853218,"z":0.00022815278456934373,"y":-4.808609620082101e-5}},{"degrees_of_freedom":[2244,2245,2246,2247,2248,2249],"id":"n374","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015766605945539695,"z":-0.0003597930014899276,"y":-0.0012548544941723943},"angle":{"x":-1.673383350620611e-5,"z":5.611852607209153e-5,"y":-4.417262725494936e-5}},{"degrees_of_freedom":[2250,2251,2252,2253,2254,2255],"id":"n375","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012600401445120077,"z":-0.00043767543319299444,"y":-0.0014018245918033874},"angle":{"x":0.0002860934985938235,"z":0.00016335871383198888,"y":-4.499753855717454e-5}},{"degrees_of_freedom":[2256,2257,2258,2259,2260,2261],"id":"n376","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.226784561335567e-5,"z":-0.0004599633027107465,"y":-0.0017579721639489382},"angle":{"x":2.5572245153015945e-6,"z":6.32881636026218e-5,"y":-3.628574916754981e-5}},{"degrees_of_freedom":[2262,2263,2264,2265,2266,2267],"id":"n377","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.0408425331408165e-5,"z":-0.000442522623973551,"y":-0.0013908264712217777},"angle":{"x":-0.000505878231611866,"z":0.00024322189716885983,"y":-4.809784611829254e-5}},{"degrees_of_freedom":[2268,2269,2270,2271,2272,2273],"id":"n378","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8852920727101666e-5,"z":-0.0003623422020644087,"y":-0.001238198278595159},"angle":{"x":2.2563357333192638e-5,"z":5.656441445492247e-5,"y":-4.3587345973266096e-5}},{"degrees_of_freedom":[2274,2275,2276,2277,2278,2279],"id":"n379","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.390193351493122e-5,"z":-0.0002863029254351086,"y":-0.0011233338291540243},"angle":{"x":0.0003215318533758723,"z":0.00016209088949664503,"y":-4.449455882150593e-5}},{"degrees_of_freedom":[2280,2281,2282,2283,2284,2285],"id":"n380","parent":"11","position":{"x":-5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017088756227823747,"z":-0.0004325240403678762,"y":-0.001209051653181711},"angle":{"x":-1.8131177236635392e-5,"z":2.2981836975848416e-5,"y":-4.579711310144684e-5}},{"degrees_of_freedom":[2286,2287,2288,2289,2290,2291],"id":"n381","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018083982764215855,"z":-0.00045723985479132124,"y":-0.001209399351513953},"angle":{"x":-1.459638472851804e-5,"z":4.3954085485134826e-5,"y":3.891464175869695e-5}},{"degrees_of_freedom":[2292,2293,2294,2295,2296,2297],"id":"n382","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002521729407194396,"z":-0.00046922733352650645,"y":-0.0012092727750666048},"angle":{"x":2.5339468695367454e-6,"z":-3.2701580055781843e-6,"y":-9.4160689462721e-5}},{"degrees_of_freedom":[2298,2299,2300,2301,2302,2303],"id":"n383","parent":"11","position":{"x":-5,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00042305285303161365,"z":-0.0004671845408405309,"y":-0.0012603490099324262},"angle":{"x":3.0584794609491294e-5,"z":4.4223960330250854e-5,"y":4.066802203016115e-5}},{"degrees_of_freedom":[2304,2305,2306,2307,2308,2309],"id":"n384","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.851608798041412e-5,"z":-0.00046170271678688194,"y":-0.001291574048072557},"angle":{"x":-3.2888046237798096e-5,"z":0.0002102982047736326,"y":-0.00042955595413113345}},{"degrees_of_freedom":[2310,2311,2312,2313,2314,2315],"id":"n385","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.950142242308639e-5,"z":-0.00042753583446338147,"y":-0.0012583704411786455},"angle":{"x":-1.212190187905107e-5,"z":4.350765075424538e-5,"y":4.1704322149797756e-5}},{"degrees_of_freedom":[2316,2317,2318,2319,2320,2321],"id":"n386","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011771936020852158,"z":-0.0004134028912621644,"y":-0.0012492440195259241},"angle":{"x":-2.9864502307445303e-6,"z":-2.3390556506286913e-5,"y":-0.00014800686197545792}},{"degrees_of_freedom":[2322,2323,2324,2325,2326,2327],"id":"n387","parent":"11","position":{"x":-5,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002837439340806968,"z":-0.0004132305021422939,"y":-0.0012122964600986188},"angle":{"x":2.144154012905082e-5,"z":4.323766010138185e-5,"y":3.995179788555124e-5}},{"degrees_of_freedom":[2328,2329,2330,2331,2332,2333],"id":"n388","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.437615916388305e-5,"z":-0.0004190971573545463,"y":-0.0011897206958057728},"angle":{"x":-2.8985668615021267e-5,"z":0.00022497574966033387,"y":-0.0004735867811508052}},{"degrees_of_freedom":[2334,2335,2336,2337,2338,2339],"id":"n389","parent":"11","position":{"x":0,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001771350971654144,"z":-0.00022235159523676366,"y":-0.0011572473863271273},"angle":{"x":5.01383132815131e-5,"z":1.347150261625525e-5,"y":-3.447909858770025e-5}},{"degrees_of_freedom":[2340,2341,2342,2343,2344,2345],"id":"n390","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018166121912733635,"z":-0.00033324820337772223,"y":-0.0011729341247307243},"angle":{"x":-7.434882870717672e-5,"z":-4.680183619571178e-7,"y":-8.497521332725868e-5}},{"degrees_of_freedom":[2346,2347,2348,2349,2350,2351],"id":"n391","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016446262426880574,"z":-0.00025446750780267716,"y":-0.0011516071962655108},"angle":{"x":-1.8630789482230515e-5,"z":1.2227222836163867e-5,"y":4.8973331768615707e-5}},{"degrees_of_freedom":[2352,2353,2354,2355,2356,2357],"id":"n392","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013029868587194563,"z":-0.0002576523048920131,"y":-0.001107486634779378},"angle":{"x":3.5962036678905e-5,"z":2.8625849654370774e-5,"y":-8.339204981102675e-5}},{"degrees_of_freedom":[2358,2359,2360,2361,2362,2363],"id":"n393","parent":"11","position":{"x":0,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010904564841672007,"z":-0.00011936310413260101,"y":-0.0010662183003743262},"angle":{"x":-9.278095065598894e-5,"z":1.2764929546117408e-5,"y":-2.9995318804120347e-5}},{"degrees_of_freedom":[2364,2365,2366,2367,2368,2369],"id":"n394","parent":"11","position":{"x":2.020305089104421,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010806697111652135,"z":-0.00013635913542130198,"y":-0.001056824374771754},"angle":{"x":3.80480019775792e-5,"z":-4.82903327171227e-6,"y":2.4126192608042826e-5}},{"degrees_of_freedom":[2370,2371,2372,2373,2374,2375],"id":"n395","parent":"11","position":{"x":2.857142857142857,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001193749193397195,"z":-7.823854133938374e-5,"y":-0.0010789890818274448},"angle":{"x":-1.4247699523809276e-5,"z":1.048208191003235e-5,"y":-0.00010471104082737343}},{"degrees_of_freedom":[2376,2377,2378,2379,2380,2381],"id":"n396","parent":"11","position":{"x":2.020305089104421,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015072168745123952,"z":-0.00019537027823104491,"y":-0.0011190552817147525},"angle":{"x":-6.452468468030072e-5,"z":2.63622265722475e-5,"y":1.408404063098852e-5}},{"degrees_of_freedom":[2382,2383,2384,2385,2386,2387],"id":"n397","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001264599722713234,"z":-0.00014036181244047626,"y":-0.000949315630216586},"angle":{"x":0.00035969892505633176,"z":0.00016313917773709693,"y":-2.507252464447903e-5}},{"degrees_of_freedom":[2388,2389,2390,2391,2392,2393],"id":"n398","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011228729925324864,"z":-0.00018649148463933767,"y":-0.0010318404796718834},"angle":{"x":-2.3014951385502515e-6,"z":3.350165520353391e-5,"y":-2.624368488078287e-5}},{"degrees_of_freedom":[2394,2395,2396,2397,2398,2399],"id":"n399","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013643143976439198,"z":-0.0002328603781761887,"y":-0.0011105133457587843},"angle":{"x":-0.00010047055856021747,"z":6.986068347523581e-5,"y":-2.742242540689141e-5}},{"degrees_of_freedom":[2400,2401,2402,2403,2404,2405],"id":"n400","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019620926961283917,"z":-0.00023666514684564347,"y":-0.0009922472952253326},"angle":{"x":0.00029864123154422416,"z":0.00016340839777037375,"y":-2.4061118154962704e-5}},{"degrees_of_freedom":[2406,2407,2408,2409,2410,2411],"id":"n401","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021300266187254186,"z":-0.0001929865420371054,"y":-0.0008547386564577616},"angle":{"x":-6.329533489552521e-5,"z":3.5853821211042185e-5,"y":-2.5642743865823376e-5}},{"degrees_of_freedom":[2412,2413,2414,2415,2416,2417],"id":"n402","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019119672420612636,"z":-0.00014527090835153719,"y":-0.0008231659285276795},"angle":{"x":8.830024521671222e-5,"z":-1.8152682327878923e-5,"y":-2.9346074774148983e-5}},{"degrees_of_freedom":[2418,2419,2420,2421,2422,2423],"id":"n403","parent":"11","position":{"x":5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00026650445316536714,"z":-0.00016659636820202746,"y":-0.0011517660887452388},"angle":{"x":-1.7531227637433197e-5,"z":7.353941855941234e-6,"y":-4.7285628991607956e-5}},{"degrees_of_freedom":[2424,2425,2426,2427,2428,2429],"id":"n404","parent":"11","position":{"x":5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002873767944523551,"z":-9.584824140900433e-5,"y":-0.0010560766702162432},"angle":{"x":-2.910799473334956e-6,"z":3.109159299286871e-6,"y":-1.302602046202477e-5}},{"degrees_of_freedom":[2430,2431,2432,2433,2434,2435],"id":"n405","parent":"11","position":{"x":5,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002658106507901358,"z":-9.558383232348354e-5,"y":-0.0010429733753268894},"angle":{"x":-6.9616335919891295e-6,"z":1.8270877607324556e-5,"y":-2.3461509141102398e-5}},{"degrees_of_freedom":[2436,2437,2438,2439,2440,2441],"id":"n406","parent":"11","position":{"x":5,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00028818674113388225,"z":-0.00011947786021405673,"y":-0.001077096057287088},"angle":{"x":-2.5675308116882608e-5,"z":3.2837603018841686e-5,"y":-6.9094844818745e-5}},{"degrees_of_freedom":[2442,2443,2444,2445,2446,2447],"id":"n407","parent":"11","position":{"x":5,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033026771627675473,"z":-0.0001301913747179977,"y":-0.0010912999326878237},"angle":{"x":-8.590015251733477e-6,"z":1.6597347243781208e-5,"y":-2.7592814831659004e-5}},{"degrees_of_freedom":[2448,2449,2450,2451,2452,2453],"id":"n408","parent":"11","position":{"x":5,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001826647365552531,"z":-0.00013196840180002808,"y":-0.0010952277842540391},"angle":{"x":5.017461634894218e-6,"z":6.326215131873737e-5,"y":0.00010882753342063112}},{"degrees_of_freedom":[2454,2455,2456,2457,2458,2459],"id":"n409","parent":"11","position":{"x":5,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001264710417976154,"z":-0.0001255353418934173,"y":-0.0010714048634405879},"angle":{"x":-7.183858472032706e-6,"z":1.4271309186916212e-5,"y":-2.53072924376928e-5}},{"degrees_of_freedom":[2460,2461,2462,2463,2464,2465],"id":"n410","parent":"11","position":{"x":5,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011263354873754542,"z":-0.0001055407324558563,"y":-0.0010358261366079995},"angle":{"x":-2.169691273569597e-5,"z":3.803423851888917e-5,"y":-8.808684964047605e-5}},{"degrees_of_freedom":[2466,2467,2468,2469,2470,2471],"id":"n411","parent":"11","position":{"x":5,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.72876424003738e-5,"z":-9.686993479145808e-5,"y":-0.0010221685764907997},"angle":{"x":-7.012670325463981e-6,"z":1.594476322554344e-5,"y":-2.11761012519302e-5}},{"degrees_of_freedom":[2472,2473,2474,2475,2476,2477],"id":"n412","parent":"11","position":{"x":5,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020416759920864968,"z":-9.389061688302048e-5,"y":-0.001020216627728265},"angle":{"x":9.559609075422216e-6,"z":5.6620508637561096e-5,"y":8.944004152711306e-5}},{"degrees_of_freedom":[2478,2479,2480,2481,2482,2483],"id":"n413","parent":"11","position":{"x":-5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0003497837068908568,"z":-0.000623400701963219,"y":-0.001463180387452922},"angle":{"x":-0.00010431590579517753,"z":7.831485517031691e-5,"y":-5.2676754178526984e-5}},{"degrees_of_freedom":[2484,2485,2486,2487,2488,2489],"id":"n414","parent":"11","position":{"x":0,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0004954333325767622,"z":-0.0004278902977995232,"y":-0.0012698082962803252},"angle":{"x":8.853501473734212e-5,"z":7.097765701926577e-5,"y":-6.978585520488575e-5}},{"degrees_of_freedom":[2490,2491,2492,2493,2494,2495],"id":"n415","parent":"11","position":{"x":2.857142857142857,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00031186681706645204,"z":-0.00027955465281216213,"y":-0.0007523070312501279},"angle":{"x":3.168441226250307e-5,"z":5.8102924469283244e-5,"y":-4.5049970407013435e-5}},{"degrees_of_freedom":[2496,2497,2498,2499,2500,2501],"id":"n416","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036476243659549937,"z":-0.0003011976382475774,"y":-0.0011483356500388508},"angle":{"x":-0.0006318299153885454,"z":0.0002926905198059493,"y":-6.105584706066387e-5}},{"degrees_of_freedom":[2502,2503,2504,2505,2506,2507],"id":"n417","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000412271932619201,"z":-0.0004036625533804349,"y":-0.0013123760000506664},"angle":{"x":9.019901363616192e-6,"z":6.61159870618384e-5,"y":-5.7003316328607103e-5}},{"degrees_of_freedom":[2508,2509,2510,2511,2512,2513],"id":"n418","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00037454645086453073,"z":-0.0005038665607427365,"y":-0.0014613199208119083},"angle":{"x":0.00029812512678719966,"z":0.00016832999168753365,"y":-5.6627246766028196e-5}},{"degrees_of_freedom":[2514,2515,2516,2517,2518,2519],"id":"n419","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000319729076425866,"z":-0.0005278734137225055,"y":-0.0018209018432152277},"angle":{"x":3.168421130623409e-5,"z":7.412889378824626e-5,"y":-4.982046724426034e-5}},{"degrees_of_freedom":[2520,2521,2522,2523,2524,2525],"id":"n420","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00026782498083137993,"z":-0.0005031519424649127,"y":-0.0013332964539179506},"angle":{"x":-0.0005000029971942348,"z":0.0002621086811901412,"y":-5.4043655697795374e-5}},{"degrees_of_freedom":[2526,2527,2528,2529,2530,2531],"id":"n421","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002293421743956572,"z":-0.00040547590958232073,"y":-0.0011313234930172044},"angle":{"x":5.434817845063815e-5,"z":6.611609163772531e-5,"y":-5.589107864887286e-5}},{"degrees_of_freedom":[2532,2533,2534,2535,2536,2537],"id":"n422","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00027100611878877316,"z":-0.0003074309876073307,"y":-0.0010203117882873112},"angle":{"x":0.0001580421603505264,"z":0.00010277724637671056,"y":-5.509986413206727e-5}},{"degrees_of_freedom":[2538,2539,2540,2541,2542,2543],"id":"n423","parent":"11","position":{"x":-5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033557607237191334,"z":-0.00039267805065696976,"y":-0.0011940042781429484},"angle":{"x":-3.2921134511506485e-5,"z":1.9066764086325878e-5,"y":-0.0001306856267869075}},{"degrees_of_freedom":[2544,2545,2546,2547,2548,2549],"id":"n424","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036680259454164877,"z":-0.0004252448153707279,"y":-0.0012232019015974524},"angle":{"x":-2.125260057015066e-5,"z":6.162428095025222e-5,"y":6.918304880980428e-5}},{"degrees_of_freedom":[2550,2551,2552,2553,2554,2555],"id":"n425","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0004547679597299915,"z":-0.00045141122237252955,"y":-0.0012180787313216066},"angle":{"x":-6.10170150855949e-6,"z":1.4574792667734764e-5,"y":-6.389201949073486e-5}},{"degrees_of_freedom":[2556,2557,2558,2559,2560,2561],"id":"n426","parent":"11","position":{"x":-5,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0006671324648313395,"z":-0.0004559411311105063,"y":-0.0012695425993150824},"angle":{"x":2.5170365085887318e-5,"z":6.684296709564438e-5,"y":8.394572207043023e-5}},{"degrees_of_freedom":[2562,2563,2564,2565,2566,2567],"id":"n427","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011557738219484335,"z":-0.00044737865830328977,"y":-0.001290974592201354},"angle":{"x":-4.912221241406665e-5,"z":0.00023252749176714226,"y":-0.00038468192443818176}},{"degrees_of_freedom":[2568,2569,2570,2571,2572,2573],"id":"n428","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011288329306265597,"z":-0.00039207861067276097,"y":-0.0012501338053167294},"angle":{"x":-2.02902759433715e-5,"z":6.162372604025261e-5,"y":9.870627565201302e-5}},{"degrees_of_freedom":[2574,2575,2576,2577,2578,2579],"id":"n429","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017614156591249985,"z":-0.0003686509680070006,"y":-0.0012471700500712674},"angle":{"x":-6.506781141774282e-6,"z":-0.00014232181209073344,"y":-0.00047813918876288383}},{"degrees_of_freedom":[2580,2581,2582,2583,2584,2585],"id":"n430","parent":"11","position":{"x":-5,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003288610430575361,"z":-0.0003695323441146142,"y":-0.0012204291244903975},"angle":{"x":1.5979227560037976e-5,"z":5.640492359741944e-5,"y":8.394493010236467e-5}},{"degrees_of_freedom":[2586,2587,2588,2589,2590,2591],"id":"n431","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016304715500747692,"z":-0.0003793662513321845,"y":-0.0012005700871571756},"angle":{"x":-3.044058709013337e-5,"z":0.0003616211103729778,"y":-0.0007793368836074831}},{"degrees_of_freedom":[2592,2593,2594,2595,2596,2597],"id":"n432","parent":"11","position":{"x":0,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036620632998999306,"z":0.0001265206631121388,"y":-0.0011459316972211892},"angle":{"x":0.000521926783143247,"z":3.555010257906492e-6,"y":0.00011902217072756837}},{"degrees_of_freedom":[2598,2599,2600,2601,2602,2603],"id":"n433","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036028597279554747,"z":-6.978639171003413e-5,"y":-0.001148152153725814},"angle":{"x":4.2441847695042764e-5,"z":5.048377065946051e-6,"y":-7.958712388265778e-5}},{"degrees_of_freedom":[2604,2605,2606,2607,2608,2609],"id":"n434","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033909202464327027,"z":-0.0002221333106789961,"y":-0.0011379045097616358},"angle":{"x":3.124719021070537e-5,"z":1.2171415139189463e-5,"y":-0.0001066132848479405}},{"degrees_of_freedom":[2610,2611,2612,2613,2614,2615],"id":"n435","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00031044447502595146,"z":-0.00019604416967892725,"y":-0.001106498519050945},"angle":{"x":-2.976706814850986e-5,"z":2.054630485846648e-5,"y":4.06882611763086e-5}},{"degrees_of_freedom":[2616,2617,2618,2619,2620,2621],"id":"n436","parent":"11","position":{"x":0,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002914500569274676,"z":-0.0002533366506432442,"y":-0.0010861205645262236},"angle":{"x":0.00010865195146078145,"z":4.680046936352767e-6,"y":-1.6646789548969762e-5}},{"degrees_of_freedom":[2622,2623,2624,2625,2626,2627],"id":"n437","parent":"11","position":{"x":2.020305089104421,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00028940851900574664,"z":-0.000128780976399749,"y":-0.0010799253608424087},"angle":{"x":-0.00019180277103496009,"z":3.3142409335365802e-6,"y":-0.00014109923594295837}},{"degrees_of_freedom":[2628,2629,2630,2631,2632,2633],"id":"n438","parent":"11","position":{"x":2.857142857142857,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00030927513062807327,"z":-0.00039820396073203827,"y":-0.001086362317263739},"angle":{"x":-0.00010442174108591179,"z":1.4143806416259603e-5,"y":6.985731008096139e-5}},{"degrees_of_freedom":[2634,2635,2636,2637,2638,2639],"id":"n439","parent":"11","position":{"x":2.020305089104421,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0003489362259299155,"z":-0.0005507084888708797,"y":-0.0011193017058367784},"angle":{"x":-0.0002587251696874035,"z":2.9473423912563578e-5,"y":0.0004423787853560225}},{"degrees_of_freedom":[2640,2641,2642,2643,2644,2645],"id":"n440","parent":"11","position":{"x":15,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2646,2647,2648,2649,2650,2651],"id":"n441","parent":"11","position":{"x":10,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2652,2653,2654,2655,2656,2657],"id":"n442","parent":"11","position":{"x":10,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2658,2659,2660,2661,2662,2663],"id":"n443","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2664,2665,2666,2667,2668,2669],"id":"n444","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2670,2671,2672,2673,2674,2675],"id":"n445","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2676,2677,2678,2679,2680,2681],"id":"n446","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2682,2683,2684,2685,2686,2687],"id":"n447","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2688,2689,2690,2691,2692,2693],"id":"n448","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2694,2695,2696,2697,2698,2699],"id":"n449","parent":"11","position":{"x":10,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2700,2701,2702,2703,2704,2705],"id":"n450","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2706,2707,2708,2709,2710,2711],"id":"n451","parent":"11","position":{"x":15,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":8.023045088831206e-5,"z":2.4683501873996646e-6,"y":-0.0005750384903405889},"angle":{"x":9.214227789691894e-6,"z":1.1203282766811428e-5,"y":-9.825590445584195e-6}},{"degrees_of_freedom":[2712,2713,2714,2715,2716,2717],"id":"n452","parent":"11","position":{"x":15,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4952816973753956e-5,"z":-7.465131385273751e-5,"y":-0.00027699837698717003},"angle":{"x":1.1440678093664258e-6,"z":-1.0753846854607912e-5,"y":1.439821233741866e-5}},{"degrees_of_freedom":[2718,2719,2720,2721,2722,2723],"id":"n453","parent":"11","position":{"x":15,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.067487219703007e-5,"z":-1.6609143612060945e-6,"y":-0.0002829002256048493},"angle":{"x":1.9539265356353546e-6,"z":-2.784265844897221e-6,"y":-4.7994366069596385e-6}},{"degrees_of_freedom":[2724,2725,2726,2727,2728,2729],"id":"n454","parent":"11","position":{"x":15,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.906180455961341e-5,"z":1.3053655900853058e-5,"y":-0.0002858828700701656},"angle":{"x":-4.416890666229981e-7,"z":-1.4873232231485742e-5,"y":-5.634787294481237e-6}},{"degrees_of_freedom":[2730,2731,2732,2733,2734,2735],"id":"n455","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.038200588443651e-5,"z":-7.770207011137102e-6,"y":-0.00037466604939587504},"angle":{"x":-4.032075549810101e-5,"z":-5.831605015405997e-5,"y":0.00011221818780100058}},{"degrees_of_freedom":[2736,2737,2738,2739,2740,2741],"id":"n456","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001936656148905043,"z":-2.2941484866447813e-5,"y":-0.000388898265657991},"angle":{"x":3.1531109937740546e-6,"z":-1.8640642430436435e-5,"y":-5.022837294090711e-6}},{"degrees_of_freedom":[2742,2743,2744,2745,2746,2747],"id":"n457","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.391332610234553e-5,"z":-4.309972164429166e-5,"y":-0.0003688693654719702},"angle":{"x":5.293325874732823e-5,"z":-5.747930693411341e-5,"y":-0.00010985315621446914}},{"degrees_of_freedom":[2748,2749,2750,2751,2752,2753],"id":"n458","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.699101175681189e-5,"z":-7.528166993736731e-5,"y":-0.00028270772408595763},"angle":{"x":-8.079802943763126e-7,"z":-1.9404936770804762e-5,"y":2.859586241952941e-6}},{"degrees_of_freedom":[2754,2755,2756,2757,2758,2759],"id":"n459","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.854714898354407e-6,"z":-4.0925077262856756e-5,"y":-0.0001961366219554462},"angle":{"x":-5.314548661712781e-5,"z":-6.638962965475668e-5,"y":0.00014077452158767185}},{"degrees_of_freedom":[2760,2761,2762,2763,2764,2765],"id":"n460","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.334316000790535e-5,"z":-2.0689945409639773e-5,"y":-0.00018099083459659752},"angle":{"x":-9.180104873089828e-8,"z":-1.5637427875342683e-5,"y":2.2475960836364916e-6}},{"degrees_of_freedom":[2766,2767,2768,2769,2770,2771],"id":"n461","parent":"11","position":{"x":15,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.172411855025744e-6,"z":-5.57715562892062e-6,"y":-0.0001984725849446615},"angle":{"x":3.811022715138987e-5,"z":-4.911011229732232e-5,"y":-9.744944690497316e-5}},{"degrees_of_freedom":[2772,2773,2774,2775,2776,2777],"id":"n462","parent":"11","position":{"x":10,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00010335797228078208,"z":-2.8481282483026242e-5,"y":-0.0005797470292849315},"angle":{"x":2.5017120166217947e-6,"z":-4.3534602604212434e-5,"y":-1.4528909238236059e-5}},{"degrees_of_freedom":[2778,2779,2780,2781,2782,2783],"id":"n463","parent":"11","position":{"x":10,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":3.913135779894378e-5,"z":-1.6705402197330846e-5,"y":-0.0005684663940655832},"angle":{"x":-1.0767627589542332e-6,"z":-5.218041069075428e-6,"y":-1.1517356759724203e-5}},{"degrees_of_freedom":[2784,2785,2786,2787,2788,2789],"id":"n464","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.085192096719362e-5,"z":-8.667648204470002e-6,"y":-0.0008600756553001551},"angle":{"x":-4.640525486975771e-6,"z":-3.394488129773467e-5,"y":-9.689781764439676e-6}},{"degrees_of_freedom":[2790,2791,2792,2793,2794,2795],"id":"n465","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.085290389875364e-5,"z":-1.2767300773251862e-5,"y":-0.0006626184963035694},"angle":{"x":0.0004953770945078302,"z":-0.0002076361539277606,"y":-7.722049593028299e-6}},{"degrees_of_freedom":[2796,2797,2798,2799,2800,2801],"id":"n466","parent":"11","position":{"x":10,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.0782790659548436e-5,"z":-2.578919348401561e-5,"y":-0.0005922150956360337},"angle":{"x":1.0452470022375097e-6,"z":-2.770685566592221e-5,"y":-9.139678210702395e-6}},{"degrees_of_freedom":[2802,2803,2804,2805,2806,2807],"id":"n467","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.931433954698719e-5,"z":-4.20970483923524e-5,"y":-0.0005267042547306298},"angle":{"x":-0.00018093969965226583,"z":-9.145096689966282e-5,"y":-1.1845036237859016e-5}},{"degrees_of_freedom":[2808,2809,2810,2811,2812,2813],"id":"n468","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.742595127983484e-5,"z":-4.94095495796782e-5,"y":-0.00036967229092976566},"angle":{"x":1.8286690196516901e-6,"z":-2.6834799372240646e-5,"y":-1.0153437272888792e-5}},{"degrees_of_freedom":[2814,2815,2816,2817,2818,2819],"id":"n469","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.077236214009273e-5,"z":-4.6211220291143707e-5,"y":-0.0005193237124709208},"angle":{"x":0.00040400184123519925,"z":-0.00016902668439064804,"y":-1.241897644334905e-5}},{"degrees_of_freedom":[2820,2821,2822,2823,2824,2825],"id":"n470","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.999550302800942e-5,"z":-2.7719081604757e-5,"y":-0.0005856240408087776},"angle":{"x":1.2616045867371326e-6,"z":-3.209592613075894e-5,"y":-9.312480893422763e-6}},{"degrees_of_freedom":[2826,2827,2828,2829,2830,2831],"id":"n471","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.238880489088021e-5,"z":-1.2496982328575339e-5,"y":-0.0006695913666708583},"angle":{"x":-0.00033114315493807094,"z":-0.00015247262740321132,"y":-9.239578679958806e-6}},{"degrees_of_freedom":[2832,2833,2834,2835,2836,2837],"id":"n472","parent":"11","position":{"x":10,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0003338941236555e-5,"z":-0.0001370529276677009,"y":-0.00019739253346328975},"angle":{"x":8.127148929141067e-5,"z":3.9057024775458475e-5,"y":-3.417397755768388e-5}},{"degrees_of_freedom":[2838,2839,2840,2841,2842,2843],"id":"n473","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6095664959042863e-5,"z":-1.8338759458385758e-11,"y":-0.00015557435430648724},"angle":{"x":-6.395801145306735e-5,"z":-1.305650669836034e-5,"y":-9.43299977840382e-5}},{"degrees_of_freedom":[2844,2845,2846,2847,2848,2849],"id":"n474","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.432432779934872e-5,"z":-5.0275802541708696e-5,"y":-0.00020685851055503985},"angle":{"x":-7.2854762073513515e-6,"z":4.279457577995127e-6,"y":4.248958857511232e-5}},{"degrees_of_freedom":[2850,2851,2852,2853,2854,2855],"id":"n475","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.665769737692256e-6,"z":-2.9437785814798312e-5,"y":-0.0002666598063638321},"angle":{"x":5.602538593394083e-6,"z":2.3769368728668067e-5,"y":1.1375189830116897e-5}},{"degrees_of_freedom":[2856,2857,2858,2859,2860,2861],"id":"n476","parent":"11","position":{"x":10,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.831965665685557e-6,"z":-1.7680318589929238e-6,"y":-0.0003465677216490409},"angle":{"x":5.4484943825791185e-5,"z":3.743872439196792e-5,"y":-8.872578540314162e-6}},{"degrees_of_freedom":[2862,2863,2864,2865,2866,2867],"id":"n477","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.7015671587357933e-6,"z":-6.528840650068556e-5,"y":-0.00038009766431700817},"angle":{"x":-1.2466186438798826e-5,"z":-2.049130803613391e-5,"y":-3.660464247125631e-5}},{"degrees_of_freedom":[2868,2869,2870,2871,2872,2873],"id":"n478","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1764691534752518e-5,"z":-7.073505522469966e-5,"y":-0.0003323622439537814},"angle":{"x":1.801591869522623e-5,"z":3.157352910385866e-6,"y":3.6985663238824164e-5}},{"degrees_of_freedom":[2874,2875,2876,2877,2878,2879],"id":"n479","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.041443943357858e-6,"z":-0.00013808371587421475,"y":-0.00027935984066142835},"angle":{"x":4.0495079981656414e-5,"z":2.677834630215975e-5,"y":-1.7283809621238643e-5}},{"degrees_of_freedom":[2880,2881,2882,2883,2884,2885],"id":"n480","parent":"11","position":{"x":10,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.35303089736292e-5,"z":-1.5008491691138772e-5,"y":-0.0004015065291200162},"angle":{"x":3.2901767160198867e-6,"z":-5.635965696523724e-7,"y":-5.235271264150474e-6}},{"degrees_of_freedom":[2886,2887,2888,2889,2890,2891],"id":"n481","parent":"11","position":{"x":7.979694910895579,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.142306105449629e-6,"z":-2.7868574783044313e-5,"y":-0.00036584327834758226},"angle":{"x":-3.5793935985328056e-6,"z":-3.584543716171198e-5,"y":-7.382668194552045e-6}},{"degrees_of_freedom":[2892,2893,2894,2895,2896,2897],"id":"n482","parent":"11","position":{"x":7.142857142857142,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.770427632349503e-5,"z":-2.6343923828186074e-5,"y":-0.0002792512259496838},"angle":{"x":-3.817864943084724e-6,"z":-3.4248912036548712e-6,"y":-7.1136382988411755e-6}},{"degrees_of_freedom":[2898,2899,2900,2901,2902,2903],"id":"n483","parent":"11","position":{"x":7.979694910895579,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.378171533208345e-6,"z":-1.29133501100245e-5,"y":-0.00019682250973299212},"angle":{"x":-5.188764016601313e-6,"z":3.149001934681484e-5,"y":-2.959245397310158e-6}},{"degrees_of_freedom":[2904,2905,2906,2907,2908,2909],"id":"n484","parent":"11","position":{"x":10,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.030671852993914e-6,"z":-3.1758810918026214e-6,"y":-0.0001642867595284442},"angle":{"x":-7.320571257417856e-6,"z":1.2992154350699266e-7,"y":-1.6431709969093227e-6}},{"degrees_of_freedom":[2910,2911,2912,2913,2914,2915],"id":"n485","parent":"11","position":{"x":12.020305089104422,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4750707690245843e-5,"z":-5.690673744360199e-6,"y":-0.00019842218995781106},"angle":{"x":-2.6575124789808596e-6,"z":-3.5250615647108965e-5,"y":-1.4471909699996617e-7}},{"degrees_of_freedom":[2916,2917,2918,2919,2920,2921],"id":"n486","parent":"11","position":{"x":12.857142857142858,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.8692552290075625e-5,"z":-1.0851261320647186e-5,"y":-0.00028589183250606016},"angle":{"x":-4.645665760518783e-7,"z":-3.908593110071477e-6,"y":4.993052593526772e-6}},{"degrees_of_freedom":[2922,2923,2924,2925,2926,2927],"id":"n487","parent":"11","position":{"x":12.020305089104422,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.819212785867943e-5,"z":-7.655097517756084e-6,"y":-0.0003696186066304923},"angle":{"x":3.4446937597210615e-6,"z":3.1883491259094635e-5,"y":-4.601201424604915e-6}},{"degrees_of_freedom":[2928,2929,2930,2931,2932,2933],"id":"n488","parent":"11","position":{"x":15,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2934,2935,2936,2937,2938,2939],"id":"n489","parent":"11","position":{"x":10,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2940,2941,2942,2943,2944,2945],"id":"n490","parent":"11","position":{"x":12.857142857142858,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2946,2947,2948,2949,2950,2951],"id":"n491","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2952,2953,2954,2955,2956,2957],"id":"n492","parent":"11","position":{"x":10,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2958,2959,2960,2961,2962,2963],"id":"n493","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2964,2965,2966,2967,2968,2969],"id":"n494","parent":"11","position":{"x":7.142857142857142,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2970,2971,2972,2973,2974,2975],"id":"n495","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2976,2977,2978,2979,2980,2981],"id":"n496","parent":"11","position":{"x":10,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2982,2983,2984,2985,2986,2987],"id":"n497","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2988,2989,2990,2991,2992,2993],"id":"n498","parent":"11","position":{"x":15,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":2.15194958973014e-5,"z":3.61489765057133e-5,"y":-0.000570792564375898},"angle":{"x":6.452558259810067e-6,"z":1.1229477667529925e-6,"y":-9.480206388504093e-6}},{"degrees_of_freedom":[2994,2995,2996,2997,2998,2999],"id":"n499","parent":"11","position":{"x":15,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.608769718710891e-6,"z":3.040467504112373e-5,"y":-0.00028171794845582913},"angle":{"x":5.584451716549285e-6,"z":1.1503605837801873e-7,"y":-4.091199524031667e-6}},{"degrees_of_freedom":[3000,3001,3002,3003,3004,3005],"id":"n500","parent":"11","position":{"x":15,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.985421604654118e-6,"z":4.865622060748671e-5,"y":-0.0002876477723499779},"angle":{"x":4.1743227913830835e-6,"z":-2.419255649868147e-6,"y":-1.1308604406243934e-6}},{"degrees_of_freedom":[3006,3007,3008,3009,3010,3011],"id":"n501","parent":"11","position":{"x":15,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4512621058045451e-5,"z":3.3615531167446916e-5,"y":-0.00037154781247836514},"angle":{"x":-3.790421564462038e-5,"z":-1.246157976433943e-5,"y":2.4209327999378788e-5}},{"degrees_of_freedom":[3012,3013,3014,3015,3016,3017],"id":"n502","parent":"11","position":{"x":15,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.093800024795594e-5,"z":2.2716858266999497e-5,"y":-0.000388754668604636},"angle":{"x":2.1238472932316036e-6,"z":-3.17593531010634e-6,"y":-5.1182706963472236e-6}},{"degrees_of_freedom":[3018,3019,3020,3021,3022,3023],"id":"n503","parent":"11","position":{"x":15,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.10669789867996e-5,"z":8.761819373505094e-6,"y":-0.0003674909909344134},"angle":{"x":4.550753464356381e-5,"z":-1.1395997039698729e-5,"y":-2.5304289275158183e-5}},{"degrees_of_freedom":[3024,3025,3026,3027,3028,3029],"id":"n504","parent":"11","position":{"x":15,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.355968461602938e-5,"z":-2.0331326415405053e-5,"y":-0.00027936813146589833},"angle":{"x":3.663075569465201e-6,"z":-5.183953826274757e-6,"y":-4.670123170028615e-6}},{"degrees_of_freedom":[3030,3031,3032,3033,3034,3035],"id":"n505","parent":"11","position":{"x":15,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.236118173848588e-6,"z":-4.49199863792608e-6,"y":-0.00019698588204721264},"angle":{"x":-3.746510100102342e-5,"z":-1.5190603001909429e-5,"y":2.6696806562679458e-5}},{"degrees_of_freedom":[3036,3037,3038,3039,3040,3041],"id":"n506","parent":"11","position":{"x":15,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.0505074154552803e-5,"z":6.251535200814846e-6,"y":-0.00017865695145755754},"angle":{"x":1.1017216139906926e-6,"z":-4.427253753818484e-6,"y":-6.827287292663391e-7}},{"degrees_of_freedom":[3042,3043,3044,3045,3046,3047],"id":"n507","parent":"11","position":{"x":15,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3509164270471806e-6,"z":1.9676709420840868e-5,"y":-0.00019853866128445176},"angle":{"x":4.463978101651495e-5,"z":-9.801330690761912e-6,"y":-1.894673020417339e-5}},{"degrees_of_freedom":[3048,3049,3050,3051,3052,3053],"id":"n508","parent":"11","position":{"x":10,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-2.5413369561287007e-5,"z":9.336111215643926e-6,"y":-0.0005656667712033454},"angle":{"x":1.1139881192877551e-6,"z":3.921270712268578e-6,"y":-1.1386898035844068e-5}},{"degrees_of_freedom":[3054,3055,3056,3057,3058,3059],"id":"n509","parent":"11","position":{"x":12.857142857142858,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2024338633798352e-5,"z":1.6786215542338425e-5,"y":-0.0005799716136975541},"angle":{"x":-9.808879211619994e-7,"z":-1.483963009467016e-6,"y":-1.0834225897313337e-5}},{"degrees_of_freedom":[3060,3061,3062,3063,3064,3065],"id":"n510","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.969947349778464e-6,"z":1.5160976632309079e-5,"y":-0.0005696884987779661},"angle":{"x":-9.583423262053136e-6,"z":1.6511322812939694e-6,"y":-9.377939194433632e-6}},{"degrees_of_freedom":[3066,3067,3068,3069,3070,3071],"id":"n511","parent":"11","position":{"x":10,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.4132950466524624e-5,"z":1.195445901634033e-7,"y":-0.0005657246179814575},"angle":{"x":-2.82132713007659e-6,"z":-6.459850707516667e-7,"y":-9.395375586012351e-6}},{"degrees_of_freedom":[3072,3073,3074,3075,3076,3077],"id":"n512","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.320102845041162e-6,"z":-1.664137626947229e-5,"y":-0.0005669029679243076},"angle":{"x":1.6123453402593073e-5,"z":6.076332240102335e-6,"y":-1.2211214165447358e-5}},{"degrees_of_freedom":[3078,3079,3080,3081,3082,3083],"id":"n513","parent":"11","position":{"x":7.142857142857142,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.6292600959537505e-6,"z":-2.455552717958552e-5,"y":-0.0005680823527260176},"angle":{"x":-7.412371862498919e-7,"z":-4.2028940290789726e-9,"y":-1.1932202507694613e-5}},{"degrees_of_freedom":[3084,3085,3086,3087,3088,3089],"id":"n514","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.58643512688467e-5,"z":-2.083219280198386e-5,"y":-0.0005704053864837979},"angle":{"x":2.3819562056557915e-5,"z":-8.602357305984853e-6,"y":-9.905971511832606e-6}},{"degrees_of_freedom":[3090,3091,3092,3093,3094,3095],"id":"n515","parent":"11","position":{"x":10,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7284791879900033e-5,"z":-6.607554328548994e-6,"y":-0.0005705080280932488},"angle":{"x":1.2316347914079794e-6,"z":-7.953659196852725e-7,"y":-8.846492313190475e-6}},{"degrees_of_freedom":[3096,3097,3098,3099,3100,3101],"id":"n516","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.923699025901082e-5,"z":9.123173932116045e-6,"y":-0.0005738524803516316},"angle":{"x":-2.1367182385354656e-5,"z":-8.825319352012433e-6,"y":-1.1553547566237177e-5}},{"degrees_of_freedom":[3102,3103,3104,3105,3106,3107],"id":"n517","parent":"11","position":{"x":10,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.5195372733121924e-5,"z":6.992492772118253e-6,"y":-0.0003996695174489557},"angle":{"x":-5.170529042943432e-6,"z":3.819658574789103e-7,"y":-5.032684091444081e-6}},{"degrees_of_freedom":[3108,3109,3110,3111,3112,3113],"id":"n518","parent":"11","position":{"x":7.979694910895579,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0093725629322425e-5,"z":1.5821989113143888e-6,"y":-0.0003673001921712466},"angle":{"x":-3.6335338366237677e-6,"z":-3.2445073752880246e-5,"y":-3.7569740925223947e-6}},{"degrees_of_freedom":[3114,3115,3116,3117,3118,3119],"id":"n519","parent":"11","position":{"x":7.142857142857142,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.2942968009800264e-5,"z":6.027964798038736e-6,"y":-0.00028343839485272653},"angle":{"x":-5.986995620761313e-7,"z":2.5647123413817645e-6,"y":4.0159017607905845e-6}},{"degrees_of_freedom":[3120,3121,3122,3123,3124,3125],"id":"n520","parent":"11","position":{"x":7.979694910895579,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1423798979111456e-5,"z":3.752413090312551e-6,"y":-0.00019729911233040207},"angle":{"x":9.85920085677695e-7,"z":3.4370707733801426e-5,"y":6.364318425571552e-7}},{"degrees_of_freedom":[3126,3127,3128,3129,3130,3131],"id":"n521","parent":"11","position":{"x":10,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.3771234239734015e-6,"z":1.0517942357055155e-6,"y":-0.00016375171418051967},"angle":{"x":6.927439960482042e-6,"z":-1.6999638161502206e-7,"y":-1.3867391468225807e-6}},{"degrees_of_freedom":[3132,3133,3134,3135,3136,3137],"id":"n522","parent":"11","position":{"x":12.020305089104422,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.222245494886251e-6,"z":9.945463068019458e-6,"y":-0.00019653086687446193},"angle":{"x":3.4460345080327695e-6,"z":-3.1957164208841944e-5,"y":-3.266672513617773e-6}},{"degrees_of_freedom":[3138,3139,3140,3141,3142,3143],"id":"n523","parent":"11","position":{"x":12.857142857142858,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.254666855385976e-5,"z":2.0070375541509232e-5,"y":-0.00027942587599829417},"angle":{"x":2.856080767298404e-6,"z":2.1690197158484657e-6,"y":-5.460265308977253e-6}},{"degrees_of_freedom":[3144,3145,3146,3147,3148,3149],"id":"n524","parent":"11","position":{"x":12.020305089104422,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2914673668393546e-6,"z":2.1056575582383262e-5,"y":-0.00036495926889299526},"angle":{"x":3.6004639022932566e-6,"z":3.471819768652911e-5,"y":-8.026683557528605e-6}},{"degrees_of_freedom":[3150,3151,3152,3153,3154,3155],"id":"n525","parent":"11","position":{"x":15,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3156,3157,3158,3159,3160,3161],"id":"n526","parent":"11","position":{"x":10,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3162,3163,3164,3165,3166,3167],"id":"n527","parent":"11","position":{"x":12.857142857142858,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3168,3169,3170,3171,3172,3173],"id":"n528","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3174,3175,3176,3177,3178,3179],"id":"n529","parent":"11","position":{"x":10,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3180,3181,3182,3183,3184,3185],"id":"n530","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3186,3187,3188,3189,3190,3191],"id":"n531","parent":"11","position":{"x":7.142857142857142,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3192,3193,3194,3195,3196,3197],"id":"n532","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3198,3199,3200,3201,3202,3203],"id":"n533","parent":"11","position":{"x":10,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3204,3205,3206,3207,3208,3209],"id":"n534","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3210,3211,3212,3213,3214,3215],"id":"n535","parent":"11","position":{"x":15,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.708915149258359e-5,"z":6.785723640022371e-5,"y":-0.0005833161908804671},"angle":{"x":5.141042481372717e-6,"z":-5.008312996641988e-6,"y":-9.231873685147082e-6}},{"degrees_of_freedom":[3216,3217,3218,3219,3220,3221],"id":"n536","parent":"11","position":{"x":15,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.152651085431032e-6,"z":0.00010310456399835923,"y":-0.0002912489147305187},"angle":{"x":5.774064182489943e-6,"z":7.882482849515374e-6,"y":1.007346448143532e-5}},{"degrees_of_freedom":[3222,3223,3224,3225,3226,3227],"id":"n537","parent":"11","position":{"x":15,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5038918665121486e-5,"z":0.00010337944730198492,"y":-0.0002993725213370609},"angle":{"x":8.093391914848736e-6,"z":1.1781914152291787e-5,"y":3.2349436095007924e-6}},{"degrees_of_freedom":[3228,3229,3230,3231,3232,3233],"id":"n538","parent":"11","position":{"x":15,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.42878250141037e-5,"z":8.427077283165074e-5,"y":-0.0003825107651393795},"angle":{"x":-4.565391865622523e-5,"z":3.4484727475786923e-5,"y":-6.580087946131026e-5}},{"degrees_of_freedom":[3234,3235,3236,3237,3238,3239],"id":"n539","parent":"11","position":{"x":15,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011191029601056807,"z":6.740104275818083e-5,"y":-0.00039548071521530183},"angle":{"x":3.643900104904175e-6,"z":1.1785641903135466e-5,"y":-6.420654535910821e-6}},{"degrees_of_freedom":[3240,3241,3242,3243,3244,3245],"id":"n540","parent":"11","position":{"x":15,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.483972618382964e-5,"z":4.8818747864037346e-5,"y":-0.00037377335284498927},"angle":{"x":4.8292072487753814e-5,"z":3.168636077313022e-5,"y":5.468956890718897e-5}},{"degrees_of_freedom":[3246,3247,3248,3249,3250,3251],"id":"n541","parent":"11","position":{"x":15,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.296859565556231e-6,"z":1.4393407716734524e-5,"y":-0.00027966252710780697},"angle":{"x":7.882913348348152e-6,"z":7.430254759319344e-6,"y":-9.094651693525199e-6}},{"degrees_of_freedom":[3252,3253,3254,3255,3256,3257],"id":"n542","parent":"11","position":{"x":15,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0245084390777274e-6,"z":2.0298056291555565e-5,"y":-0.00019790381459708836},"angle":{"x":-3.098780016568209e-5,"z":2.5243368901869764e-5,"y":-5.4655342618191696e-5}},{"degrees_of_freedom":[3258,3259,3260,3261,3262,3263],"id":"n543","parent":"11","position":{"x":15,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.334710229078927e-5,"z":3.23396002781246e-5,"y":-0.00018445672823985272},"angle":{"x":4.702433245539674e-6,"z":7.426471513386819e-6,"y":5.609235299886852e-7}},{"degrees_of_freedom":[3264,3265,3266,3267,3268,3269],"id":"n544","parent":"11","position":{"x":15,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2042566348285031e-6,"z":5.583904232552922e-5,"y":-0.00020452545867302832},"angle":{"x":6.164644672689748e-5,"z":3.856745970428253e-5,"y":8.381848226626973e-5}},{"degrees_of_freedom":[3270,3271,3272,3273,3274,3275],"id":"n545","parent":"11","position":{"x":10,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-8.94734391743743e-5,"z":2.0237728507733044e-5,"y":-0.0005728474530512086},"angle":{"x":-7.669631489471777e-6,"z":3.982332932787989e-5,"y":-1.4000817354418014e-5}},{"degrees_of_freedom":[3276,3277,3278,3279,3280,3281],"id":"n546","parent":"11","position":{"x":12.857142857142858,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.2637953470495785e-5,"z":4.207167407266307e-5,"y":-0.0003880555327787635},"angle":{"x":-6.6679038953875815e-6,"z":2.796990065962462e-5,"y":-1.1806697837260342e-5}},{"degrees_of_freedom":[3282,3283,3284,3285,3286,3287],"id":"n547","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.694445883454402e-5,"z":3.7717696453805425e-5,"y":-0.0005403915982376212},"angle":{"x":-0.0003674947907365894,"z":0.00015868058477893973,"y":-1.2745209597350964e-5}},{"degrees_of_freedom":[3288,3289,3290,3291,3292,3293],"id":"n548","parent":"11","position":{"x":10,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.652238174837184e-5,"z":1.9609137362931967e-5,"y":-0.0006133983069286636},"angle":{"x":1.9911086634161944e-5,"z":2.485121149460081e-5,"y":-8.659790456854178e-6}},{"degrees_of_freedom":[3294,3295,3296,3297,3298,3299],"id":"n549","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.979086044227369e-5,"z":5.162205821808963e-6,"y":-0.0006573217546461948},"angle":{"x":0.0001689229931098331,"z":7.65226533861185e-5,"y":-8.708543588441118e-6}},{"degrees_of_freedom":[3300,3301,3302,3303,3304,3305],"id":"n550","parent":"11","position":{"x":7.142857142857142,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.9148379666333274e-5,"z":8.582731895021854e-7,"y":-0.0007411505966101698},"angle":{"x":2.9725550067093073e-6,"z":1.5723350122926713e-5,"y":-1.1082329154722248e-5}},{"degrees_of_freedom":[3306,3307,3308,3309,3310,3311],"id":"n551","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7806728237027724e-5,"z":5.191308046422928e-6,"y":-0.0006485162489495868},"angle":{"x":-0.00031355522245799325,"z":0.00012610579115315403,"y":-7.514859275923099e-6}},{"degrees_of_freedom":[3312,3313,3314,3315,3316,3317],"id":"n552","parent":"11","position":{"x":10,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.7935979924599386e-5,"z":1.7065774158067262e-5,"y":-0.0006147749988312224},"angle":{"x":-1.4727592186907277e-5,"z":1.8842242180109703e-5,"y":-8.022942356937774e-6}},{"degrees_of_freedom":[3318,3319,3320,3321,3322,3323],"id":"n553","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.1471112202169766e-5,"z":3.5239369907087436e-5,"y":-0.0005553754368855145},"angle":{"x":0.0002686645091839521,"z":0.00012217547993013242,"y":-1.2416473716050825e-5}},{"degrees_of_freedom":[3324,3325,3326,3327,3328,3329],"id":"n554","parent":"11","position":{"x":10,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1164039638887296e-5,"z":-3.4546179097356765e-6,"y":-0.0003446680794591971},"angle":{"x":-6.15599200222012e-5,"z":-3.8466128329627816e-5,"y":-1.1540677701904341e-5}},{"degrees_of_freedom":[3330,3331,3332,3333,3334,3335],"id":"n555","parent":"11","position":{"x":7.979694910895579,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.14849154666071e-6,"z":2.4745368853581194e-5,"y":-0.00026352344762267454},"angle":{"x":-4.975470885143695e-6,"z":-2.435182369028264e-5,"y":1.1897381156640619e-5}},{"degrees_of_freedom":[3336,3337,3338,3339,3340,3341],"id":"n556","parent":"11","position":{"x":7.142857142857142,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3491192699546965e-5,"z":4.4753507064878004e-5,"y":-0.00020371042112465518},"angle":{"x":6.124160619221104e-6,"z":-5.839087042415999e-6,"y":3.869424152170395e-5}},{"degrees_of_freedom":[3342,3343,3344,3345,3346,3347],"id":"n557","parent":"11","position":{"x":7.979694910895579,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8113012081696405e-5,"z":2.5619957667808566e-11,"y":-0.00015411173139906446},"angle":{"x":5.693284045843424e-5,"z":1.1971523046415296e-5,"y":-8.396874896333411e-5}},{"degrees_of_freedom":[3348,3349,3350,3351,3352,3353],"id":"n558","parent":"11","position":{"x":10,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.550410835373771e-5,"z":0.00012199897755550863,"y":-0.0001980368262522724},"angle":{"x":-7.32179325857938e-5,"z":-4.040662878261127e-5,"y":-3.005854071198047e-5}},{"degrees_of_freedom":[3354,3355,3356,3357,3358,3359],"id":"n559","parent":"11","position":{"x":12.020305089104422,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6413547020582213e-5,"z":0.0001214548496776376,"y":-0.00028280705472706765},"angle":{"x":-2.2323004552336857e-5,"z":-2.7364325529739392e-5,"y":-8.977147098463546e-6}},{"degrees_of_freedom":[3360,3361,3362,3363,3364,3365],"id":"n560","parent":"11","position":{"x":12.857142857142858,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.051984086082982e-6,"z":8.386799727430935e-5,"y":-0.0003367383323044217},"angle":{"x":-1.2393697908789196e-5,"z":-5.772823435443907e-6,"y":1.499429649839814e-5}},{"degrees_of_freedom":[3366,3367,3368,3369,3370,3371],"id":"n561","parent":"11","position":{"x":12.020305089104422,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.09210652330102e-6,"z":7.137673977580794e-5,"y":-0.0003819837878023203},"angle":{"x":1.1056444571364418e-5,"z":1.7370499321555353e-5,"y":-4.16193603413964e-5}},{"degrees_of_freedom":[3372,3373,3374,3375,3376,3377],"id":"n562","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.426826366281822e-5,"z":-7.21855237958464e-6,"y":-0.0008016595792046271},"angle":{"x":-9.417682890257723e-8,"z":-2.593416929139971e-5,"y":-1.2387770622337185e-5}},{"degrees_of_freedom":[3378,3379,3380,3381,3382,3383],"id":"n563","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.641816429033099e-5,"z":-1.2514972155515491e-5,"y":-0.0006529923980384279},"angle":{"x":-0.0004477358936513636,"z":-0.00018454706970454546,"y":-6.898952575636185e-6}},{"degrees_of_freedom":[3384,3385,3386,3387,3388,3389],"id":"n564","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.168852929360208e-5,"z":-4.5775640203271894e-5,"y":-0.0005048117234115737},"angle":{"x":0.0003365336475021304,"z":-0.00015265233507450948,"y":-1.1470236129062242e-5}},{"degrees_of_freedom":[3390,3391,3392,3393,3394,3395],"id":"n565","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.843784448022896e-5,"z":-5.1628299311069725e-5,"y":-0.00032550707009109054},"angle":{"x":7.519800444089162e-6,"z":-3.289126406152608e-5,"y":-1.2670408604632796e-5}},{"degrees_of_freedom":[3396,3397,3398,3399,3400,3401],"id":"n566","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.373926160958906e-5,"z":-4.669332380357958e-5,"y":-0.0005221025274379835},"angle":{"x":-0.00044078688250330045,"z":-0.00018795448469741447,"y":-1.1945620360440594e-5}},{"degrees_of_freedom":[3402,3403,3404,3405,3406,3407],"id":"n567","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.781590691221995e-5,"z":-9.932689872485829e-6,"y":-0.0006539362894660219},"angle":{"x":7.656287061650786e-5,"z":-5.268886411191988e-5,"y":-8.519483648203783e-6}},{"degrees_of_freedom":[3408,3409,3410,3411,3412,3413],"id":"n568","parent":"11","position":{"x":15,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00017091811949380864,"z":5.516178750566903e-5,"y":-0.0009678931340729208},"angle":{"x":1.0186548633193767e-5,"z":5.280178587557459e-6,"y":-2.145179720664338e-5}},{"degrees_of_freedom":[3414,3415,3416,3417,3418,3419],"id":"n569","parent":"11","position":{"x":15,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019982438687279067,"z":-1.66420157473815e-5,"y":-0.000783387838046066},"angle":{"x":-2.019677812077863e-6,"z":-9.529736209198959e-6,"y":-1.7228031034404252e-5}},{"degrees_of_freedom":[3420,3421,3422,3423,3424,3425],"id":"n570","parent":"11","position":{"x":15,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.201500088176075e-5,"z":3.905898461278585e-5,"y":-0.0007765843518781197},"angle":{"x":3.720122326089462e-6,"z":-4.068690923021186e-6,"y":-9.515451624664266e-6}},{"degrees_of_freedom":[3426,3427,3428,3429,3430,3431],"id":"n571","parent":"11","position":{"x":15,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.314886864420822e-5,"z":4.637203268033187e-5,"y":-0.0007809225604438738},"angle":{"x":3.736874406116376e-6,"z":-1.8075682606415743e-5,"y":-7.841188943430397e-6}},{"degrees_of_freedom":[3432,3433,3434,3435,3436,3437],"id":"n572","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014374037873456067,"z":3.7907445643432395e-5,"y":-0.0008375326097868306},"angle":{"x":-2.4217221255838895e-5,"z":-6.64617310269411e-5,"y":0.00012454930058101887}},{"degrees_of_freedom":[3438,3439,3440,3441,3442,3443],"id":"n573","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027790935048753386,"z":2.7784028062473234e-5,"y":-0.0008438228909747146},"angle":{"x":4.282417000389482e-6,"z":-1.840653620794295e-5,"y":-1.5837406957653392e-5}},{"degrees_of_freedom":[3444,3445,3446,3447,3448,3449],"id":"n574","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002017179217882312,"z":1.1529759663792172e-5,"y":-0.0008293366144569847},"angle":{"x":3.9454302583859965e-5,"z":-6.552590902815507e-5,"y":-0.0001446450437499726}},{"degrees_of_freedom":[3450,3451,3452,3453,3454,3455],"id":"n575","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016517511959323496,"z":-1.6678228758297256e-5,"y":-0.000766954642846437},"angle":{"x":3.4198454260295522e-6,"z":-2.2105736723461942e-5,"y":-1.7367985797683076e-5}},{"degrees_of_freedom":[3456,3457,3458,3459,3460,3461],"id":"n576","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.95639408460452e-5,"z":-9.924928909320332e-7,"y":-0.0007101020068222646},"angle":{"x":-3.1636186741070856e-5,"z":-7.235171595341248e-5,"y":0.00012921534691953115}},{"degrees_of_freedom":[3462,3463,3464,3465,3466,3467],"id":"n577","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.680479408683178e-5,"z":1.0844104365052235e-5,"y":-0.0007023230405438619},"angle":{"x":3.2358838033472624e-6,"z":-2.177476931755194e-5,"y":-9.37179353093395e-6}},{"degrees_of_freedom":[3468,3469,3470,3471,3472,3473],"id":"n578","parent":"11","position":{"x":15,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.568096303028854e-5,"z":2.396878684179556e-5,"y":-0.0007179781851209504},"angle":{"x":3.3293097105345643e-5,"z":-6.152260883677905e-5,"y":-0.0001262617382213999}},{"degrees_of_freedom":[3474,3475,3476,3477,3478,3479],"id":"n579","parent":"11","position":{"x":10,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00024447420717906774,"z":-2.702812841149856e-5,"y":-0.0009945360318334422},"angle":{"x":-5.739405365243716e-6,"z":-2.4168820574161408e-5,"y":-3.5335712991909334e-5}},{"degrees_of_freedom":[3480,3481,3482,3483,3484,3485],"id":"n580","parent":"11","position":{"x":10,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":8.231889118939269e-5,"z":-1.9130357129103303e-5,"y":-0.0009576034344806075},"angle":{"x":-4.5302413402297643e-7,"z":-2.9732669163405634e-6,"y":-2.6989037850366503e-5}},{"degrees_of_freedom":[3486,3487,3488,3489,3490,3491],"id":"n581","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016073359975310854,"z":2.107342266087423e-5,"y":-0.001110609649401939},"angle":{"x":-1.3819400483050901e-6,"z":-1.656358530836337e-5,"y":-2.5731632249778144e-5}},{"degrees_of_freedom":[3492,3493,3494,3495,3496,3497],"id":"n582","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001331774065842983,"z":1.0331302596773017e-5,"y":-0.0010161469907033923},"angle":{"x":0.0002444972381843459,"z":-0.00010193137630164193,"y":-2.1333951550318324e-5}},{"degrees_of_freedom":[3498,3499,3500,3501,3502,3503],"id":"n583","parent":"11","position":{"x":10,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011408501902665826,"z":-2.554050681441632e-5,"y":-0.000983274923490274},"angle":{"x":4.405393303963602e-7,"z":-1.2406292399543828e-5,"y":-2.0836270308826566e-5}},{"degrees_of_freedom":[3504,3505,3506,3507,3508,3509],"id":"n584","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013173086294535633,"z":-6.256544965107623e-5,"y":-0.0009537091181117702},"angle":{"x":-0.00011456482677710606,"z":-5.2743447324082404e-5,"y":-2.465436855070259e-5}},{"degrees_of_freedom":[3510,3511,3512,3513,3514,3515],"id":"n585","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015892196108542337,"z":-7.553210197794122e-5,"y":-0.0008854276709633762},"angle":{"x":1.0949081782106576e-6,"z":-1.141743984288463e-5,"y":-2.6347233430741662e-5}},{"degrees_of_freedom":[3516,3517,3518,3519,3520,3521],"id":"n586","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018979869998731838,"z":-6.596583041718999e-5,"y":-0.0009476312263258658},"angle":{"x":0.0002051449304343454,"z":-8.312589354991006e-5,"y":-2.4334306635520612e-5}},{"degrees_of_freedom":[3522,3523,3524,3525,3526,3527],"id":"n587","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020775097250163804,"z":-2.6398934179615368e-5,"y":-0.0009746379936299213},"angle":{"x":2.5823534990893125e-6,"z":-1.4384691644762384e-5,"y":-2.1311551559339617e-5}},{"degrees_of_freedom":[3528,3529,3530,3531,3532,3533],"id":"n588","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019046502359589863,"z":1.0954723230834915e-5,"y":-0.0010157742182581096},"angle":{"x":-0.00021114668425141253,"z":-9.229023804419723e-5,"y":-2.3133861453009773e-5}},{"degrees_of_freedom":[3534,3535,3536,3537,3538,3539],"id":"n589","parent":"11","position":{"x":10,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020311660967047357,"z":-3.0717502053815504e-5,"y":-0.0007455314514731714},"angle":{"x":-6.427341383121176e-7,"z":2.509828827202386e-5,"y":-1.9591676133932174e-5}},{"degrees_of_freedom":[3540,3541,3542,3543,3544,3545],"id":"n590","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020070833717370472,"z":8.325800854048592e-6,"y":-0.0007253690734543904},"angle":{"x":-1.0436090908136584e-6,"z":-1.575264070083769e-5,"y":-1.9757729498501968e-5}},{"degrees_of_freedom":[3546,3547,3548,3549,3550,3551],"id":"n591","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020891584291997544,"z":2.2751391370243003e-5,"y":-0.0007559055634263631},"angle":{"x":-1.989362525491163e-5,"z":1.7259517467862756e-6,"y":-6.526566345782956e-5}},{"degrees_of_freedom":[3552,3553,3554,3555,3556,3557],"id":"n592","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019424496720512295,"z":-7.205657468949912e-5,"y":-0.0007887231324907274},"angle":{"x":-5.454228845570368e-5,"z":1.8238476841497444e-5,"y":1.8383610476618235e-5}},{"degrees_of_freedom":[3558,3559,3560,3561,3562,3563],"id":"n593","parent":"11","position":{"x":10,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018178647312571517,"z":-8.055911241786047e-5,"y":-0.000844470386713152},"angle":{"x":-4.628334315430637e-6,"z":2.5794091513916088e-5,"y":-2.2914208608479487e-6}},{"degrees_of_freedom":[3564,3565,3566,3567,3568,3569],"id":"n594","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001837804699981072,"z":-8.131532216350268e-5,"y":-0.0008688168508482439},"angle":{"x":2.498109511225621e-5,"z":-1.2311531059672623e-5,"y":9.973199048739428e-6}},{"degrees_of_freedom":[3570,3571,3572,3573,3574,3575],"id":"n595","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017979680717754488,"z":-0.00012343879613542074,"y":-0.0008373979039414395},"angle":{"x":-2.5933695231230757e-6,"z":2.3094123979005166e-6,"y":-5.659742646515982e-5}},{"degrees_of_freedom":[3576,3577,3578,3579,3580,3581],"id":"n596","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019367661542422595,"z":-7.0836531340539e-5,"y":-0.0008014416613315763},"angle":{"x":-2.1500235024502803e-5,"z":1.7998951176240147e-5,"y":-1.0952219907804192e-5}},{"degrees_of_freedom":[3582,3583,3584,3585,3586,3587],"id":"n597","parent":"11","position":{"x":10,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.97540782938346e-5,"z":-1.767756162668442e-5,"y":-0.0008491353234153903},"angle":{"x":4.653490809056696e-6,"z":-1.0197721536418888e-7,"y":-1.7261579062295607e-5}},{"degrees_of_freedom":[3588,3589,3590,3591,3592,3593],"id":"n598","parent":"11","position":{"x":7.979694910895579,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.418520944482578e-5,"z":-5.536921088214315e-5,"y":-0.0008257589917103045},"angle":{"x":-5.213503666370492e-6,"z":-2.4942328190982738e-5,"y":-1.9750511260242318e-5}},{"degrees_of_freedom":[3594,3595,3596,3597,3598,3599],"id":"n599","parent":"11","position":{"x":7.142857142857142,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5586843452427796e-5,"z":-6.102719940360369e-5,"y":-0.0007656711948294632},"angle":{"x":-2.3813257623330326e-6,"z":-3.471434712463105e-6,"y":-1.230875925414771e-5}},{"degrees_of_freedom":[3600,3601,3602,3603,3604,3605],"id":"n600","parent":"11","position":{"x":7.979694910895579,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.293514044298007e-5,"z":-4.608431946275558e-5,"y":-0.0007080888344332693},"angle":{"x":-1.8175474787601668e-6,"z":2.3253676576406844e-5,"y":-1.3065568867263294e-5}},{"degrees_of_freedom":[3606,3607,3608,3609,3610,3611],"id":"n601","parent":"11","position":{"x":10,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.4652287772066984e-5,"z":-1.8134549785475337e-5,"y":-0.0006849202577480193},"angle":{"x":-3.0935920261252287e-6,"z":-4.11240271532019e-7,"y":-1.2561026584769448e-5}},{"degrees_of_freedom":[3612,3613,3614,3615,3616,3617],"id":"n602","parent":"11","position":{"x":12.020305089104422,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.879607041322757e-5,"z":4.637550184911173e-6,"y":-0.0007112111149093482},"angle":{"x":-2.109096660245509e-8,"z":-2.6840071261332993e-5,"y":-1.1264341890311966e-5}},{"degrees_of_freedom":[3618,3619,3620,3621,3622,3623],"id":"n603","parent":"11","position":{"x":12.857142857142858,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.897580353246833e-5,"z":1.4268392743572605e-5,"y":-0.0007721072706696569},"angle":{"x":1.939095319204391e-6,"z":-3.7910290051294583e-6,"y":-6.97481875951336e-6}},{"degrees_of_freedom":[3624,3625,3626,3627,3628,3629],"id":"n604","parent":"11","position":{"x":12.020305089104422,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.301434257525452e-5,"z":1.2225653045264924e-5,"y":-0.0008279673965275871},"angle":{"x":5.499858890099634e-6,"z":2.1339150202390385e-5,"y":-1.6014044616134246e-5}},{"degrees_of_freedom":[3630,3631,3632,3633,3634,3635],"id":"n605","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5578685778414275e-5,"z":1.2065071229426639e-5,"y":-0.0005729161991790029},"angle":{"x":-2.4938118813308005e-5,"z":-9.914049067562114e-6,"y":-9.61195833145782e-6}},{"degrees_of_freedom":[3636,3637,3638,3639,3640,3641],"id":"n606","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.044766881963554e-5,"z":-2.2244740789709132e-5,"y":-0.0005689807631382985},"angle":{"x":3.087040022754311e-5,"z":-1.1359638923856006e-5,"y":-8.291528316846894e-6}},{"degrees_of_freedom":[3642,3643,3644,3645,3646,3647],"id":"n607","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1628229769678852e-5,"z":-1.9414752774988558e-5,"y":-0.0005661363631568797},"angle":{"x":-3.8069163182669636e-6,"z":-1.112409140338417e-6,"y":-1.0071929534471181e-5}},{"degrees_of_freedom":[3648,3649,3650,3651,3652,3653],"id":"n608","parent":"11","position":{"x":15,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":2.6426765204745604e-5,"z":7.837008077579305e-5,"y":-0.0009632190786334003},"angle":{"x":5.530003140068097e-6,"z":4.385840157210569e-7,"y":-2.1818195400722282e-5}},{"degrees_of_freedom":[3654,3655,3656,3657,3658,3659],"id":"n609","parent":"11","position":{"x":15,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4999655776040488e-5,"z":7.502546473085751e-5,"y":-0.0007729427162196642},"angle":{"x":4.525457750655463e-6,"z":-2.8836189506382734e-7,"y":-9.939167006291284e-6}},{"degrees_of_freedom":[3660,3661,3662,3663,3664,3665],"id":"n610","parent":"11","position":{"x":15,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.12293503509644e-6,"z":8.416995006905096e-5,"y":-0.000774803680379082},"angle":{"x":3.857926517870165e-6,"z":-3.7409116695892397e-7,"y":-1.0846944462490225e-5}},{"degrees_of_freedom":[3666,3667,3668,3669,3670,3671],"id":"n611","parent":"11","position":{"x":15,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9526410679464498e-6,"z":7.453095678395899e-5,"y":-0.0008310196414244803},"angle":{"x":-2.567714534253176e-5,"z":-1.167079391472451e-5,"y":1.71149578219268e-5}},{"degrees_of_freedom":[3672,3673,3674,3675,3676,3677],"id":"n612","parent":"11","position":{"x":15,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.94395158823498e-5,"z":6.572699779297506e-5,"y":-0.0008409072679332685},"angle":{"x":2.0564151122026006e-6,"z":-1.567792233954788e-6,"y":-1.545068253761784e-5}},{"degrees_of_freedom":[3678,3679,3680,3681,3682,3683],"id":"n613","parent":"11","position":{"x":15,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.900876796731704e-5,"z":5.385591243970679e-5,"y":-0.0008271458739461374},"angle":{"x":3.3356754080044695e-5,"z":-7.372496037327261e-6,"y":-2.7878830641172655e-5}},{"degrees_of_freedom":[3684,3685,3686,3687,3688,3689],"id":"n614","parent":"11","position":{"x":15,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.266259303587101e-5,"z":3.0295856862426103e-5,"y":-0.0007652474229085228},"angle":{"x":4.053998023900473e-6,"z":-3.974563107427058e-6,"y":-1.4277972748194778e-5}},{"degrees_of_freedom":[3690,3691,3692,3693,3694,3695],"id":"n615","parent":"11","position":{"x":15,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.241972204078886e-5,"z":4.033287539163243e-5,"y":-0.0007083918746957847},"angle":{"x":-2.684453667483044e-5,"z":-1.5008933603553345e-5,"y":2.0921986687874395e-5}},{"degrees_of_freedom":[3696,3697,3698,3699,3700,3701],"id":"n616","parent":"11","position":{"x":15,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.297203333827636e-6,"z":4.903385730879738e-5,"y":-0.0006977468003199332},"angle":{"x":2.163464035260237e-6,"z":-2.7808440113729124e-6,"y":-9.674267407446329e-6}},{"degrees_of_freedom":[3702,3703,3704,3705,3706,3707],"id":"n617","parent":"11","position":{"x":15,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.044243513838086e-6,"z":6.064591505005215e-5,"y":-0.0007126261766928376},"angle":{"x":3.3993484208412696e-5,"z":-5.066618847337184e-6,"y":-2.0129423711874116e-5}},{"degrees_of_freedom":[3708,3709,3710,3711,3712,3713],"id":"n618","parent":"11","position":{"x":10,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.20204061688515e-5,"z":-2.2700580614468657e-6,"y":-0.0009528604775244103},"angle":{"x":-8.294093000207425e-7,"z":2.7429456242146813e-6,"y":-2.665881779877385e-5}},{"degrees_of_freedom":[3714,3715,3716,3717,3718,3719],"id":"n619","parent":"11","position":{"x":12.857142857142858,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6146323527200494e-5,"z":3.5711576131289476e-5,"y":-0.0009674343650589919},"angle":{"x":-4.818584891633877e-7,"z":-1.0085403932687289e-6,"y":-2.5357209913956478e-5}},{"degrees_of_freedom":[3720,3721,3722,3723,3724,3725],"id":"n620","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.54466506024842e-5,"z":2.6976490197988755e-5,"y":-0.0009602317986618644},"angle":{"x":-1.166969717076526e-5,"z":2.7023232553716862e-6,"y":-2.301193357037298e-5}},{"degrees_of_freedom":[3726,3727,3728,3729,3730,3731],"id":"n621","parent":"11","position":{"x":10,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.607322552035794e-5,"z":-8.795425604077395e-6,"y":-0.0009564763470693368},"angle":{"x":-3.939996275941526e-6,"z":-2.751763744038939e-7,"y":-2.026136098828836e-5}},{"degrees_of_freedom":[3732,3733,3734,3735,3736,3737],"id":"n622","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8367924823639164e-5,"z":-4.464489686898849e-5,"y":-0.0009595493072308529},"angle":{"x":1.1732555202564423e-5,"z":5.4495986146597825e-6,"y":-2.370438214170449e-5}},{"degrees_of_freedom":[3738,3739,3740,3741,3742,3743],"id":"n623","parent":"11","position":{"x":7.142857142857142,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.537172221533086e-6,"z":-5.794483254598575e-5,"y":-0.0009667711636613451},"angle":{"x":-1.1079405457796066e-6,"z":9.707438562076594e-7,"y":-2.6645173953144315e-5}},{"degrees_of_freedom":[3744,3745,3746,3747,3748,3749],"id":"n624","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.613205364387823e-5,"z":-4.827921682455884e-5,"y":-0.0009637999485559923},"angle":{"x":1.4841871542849506e-5,"z":-4.440148916458645e-6,"y":-2.2955983346751106e-5}},{"degrees_of_freedom":[3750,3751,3752,3753,3754,3755],"id":"n625","parent":"11","position":{"x":10,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.5789703910760095e-5,"z":-1.2167989994528081e-5,"y":-0.0009613763831846027},"angle":{"x":2.0042341344210975e-6,"z":1.1506004962542456e-7,"y":-2.007238898472375e-5}},{"degrees_of_freedom":[3756,3757,3758,3759,3760,3761],"id":"n626","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.888703050765429e-5,"z":2.2819354112634235e-5,"y":-0.0009631839170555301},"angle":{"x":-7.655111280185455e-6,"z":-3.4791699767304753e-6,"y":-2.2893794315838374e-5}},{"degrees_of_freedom":[3762,3763,3764,3765,3766,3767],"id":"n627","parent":"11","position":{"x":10,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.173665870619403e-5,"z":3.1093235373761235e-6,"y":-0.000845089390140098},"angle":{"x":-3.0851058764777732e-6,"z":3.1825248013064676e-7,"y":-1.7257720688690526e-5}},{"degrees_of_freedom":[3768,3769,3770,3771,3772,3773],"id":"n628","parent":"11","position":{"x":7.979694910895579,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.498110902068216e-5,"z":-2.8134854791184445e-5,"y":-0.0008242396575261883},"angle":{"x":-9.291878623784822e-6,"z":-2.141418643486219e-5,"y":-1.8284403930067928e-5}},{"degrees_of_freedom":[3774,3775,3776,3777,3778,3779],"id":"n629","parent":"11","position":{"x":7.142857142857142,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.166195121694534e-5,"z":-2.4151586331416236e-5,"y":-0.0007684096507216585},"angle":{"x":-3.806163140308406e-6,"z":3.354483629916715e-6,"y":-4.123121208472454e-6}},{"degrees_of_freedom":[3780,3781,3782,3783,3784,3785],"id":"n630","parent":"11","position":{"x":7.979694910895579,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.217086307334257e-5,"z":-1.3267552968984843e-5,"y":-0.0007078506953451705},"angle":{"x":2.6008239195599106e-7,"z":2.6715451404764758e-5,"y":-1.3022307069462346e-5}},{"degrees_of_freedom":[3786,3787,3788,3789,3790,3791],"id":"n631","parent":"11","position":{"x":10,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.791816251356128e-5,"z":1.2891209911648518e-5,"y":-0.0006816335493373106},"angle":{"x":-1.1657365757544157e-6,"z":4.5628823643784305e-7,"y":-1.2481737881464581e-5}},{"degrees_of_freedom":[3792,3793,3794,3795,3796,3797],"id":"n632","parent":"11","position":{"x":12.020305089104422,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6051665914291054e-5,"z":3.7098907534439176e-5,"y":-0.0007046437151410367},"angle":{"x":2.337852006462369e-6,"z":-2.322312134212702e-5,"y":-1.0980479143080868e-5}},{"degrees_of_freedom":[3798,3799,3800,3801,3802,3803],"id":"n633","parent":"11","position":{"x":12.857142857142858,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8275496447824697e-5,"z":5.125685867906747e-5,"y":-0.0007619824577275698},"angle":{"x":6.592959042539491e-7,"z":3.1767346471116436e-6,"y":-1.5473633393864812e-5}},{"degrees_of_freedom":[3804,3805,3806,3807,3808,3809],"id":"n634","parent":"11","position":{"x":12.020305089104422,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.630265497634235e-5,"z":3.951696792738735e-5,"y":-0.0008215615417603932},"angle":{"x":1.3343264155828847e-6,"z":2.468510234418652e-5,"y":-1.7544063104421347e-5}},{"degrees_of_freedom":[3810,3811,3812,3813,3814,3815],"id":"n635","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.397755288386477e-5,"z":3.057063095805157e-6,"y":-0.0006480578497243389},"angle":{"x":1.698026933228292e-5,"z":9.158791258355244e-6,"y":-7.561896050845923e-6}},{"degrees_of_freedom":[3816,3817,3818,3819,3820,3821],"id":"n636","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.267440625164114e-5,"z":5.3393800356901436e-6,"y":-0.0006513157243420709},"angle":{"x":0.00036061669632564305,"z":0.0001431817801801003,"y":-6.702095186035972e-6}},{"degrees_of_freedom":[3822,3823,3824,3825,3826,3827],"id":"n637","parent":"11","position":{"x":15,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00012679332778139503,"z":0.00010001678425591454,"y":-0.000979812817382633},"angle":{"x":2.68967849119062e-6,"z":-3.083293340204095e-6,"y":-2.2090309434761736e-5}},{"degrees_of_freedom":[3828,3829,3830,3831,3832,3833],"id":"n638","parent":"11","position":{"x":15,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001577228850301068,"z":0.00013088299914250134,"y":-0.0008004844402462385},"angle":{"x":6.985149767578659e-6,"z":3.7145485533786703e-6,"y":-1.4397777297133867e-5}},{"degrees_of_freedom":[3834,3835,3836,3837,3838,3839],"id":"n639","parent":"11","position":{"x":15,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012786934285646744,"z":0.00013097695197008367,"y":-0.0007916401426774778},"angle":{"x":3.6840831926934964e-6,"z":1.5551960555060673e-5,"y":-1.533050613706244e-5}},{"degrees_of_freedom":[3840,3841,3842,3843,3844,3845],"id":"n640","parent":"11","position":{"x":15,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001506841461735991,"z":0.0001155396168303766,"y":-0.0008486144177653239},"angle":{"x":-3.160338187622725e-5,"z":3.898214265844349e-5,"y":-8.578297847212427e-5}},{"degrees_of_freedom":[3846,3847,3848,3849,3850,3851],"id":"n641","parent":"11","position":{"x":15,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001944991240680068,"z":0.00010314546284678435,"y":-0.0008541539894779701},"angle":{"x":4.256851218440503e-6,"z":1.3314936185926553e-5,"y":-1.7366956430912248e-5}},{"degrees_of_freedom":[3852,3853,3854,3855,3856,3857],"id":"n642","parent":"11","position":{"x":15,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.614340328533021e-5,"z":8.940419167369378e-5,"y":-0.0008380783768806424},"angle":{"x":3.275932278858571e-5,"z":3.9313596615272886e-5,"y":6.0350167360008965e-5}},{"degrees_of_freedom":[3858,3859,3860,3861,3862,3863],"id":"n643","parent":"11","position":{"x":15,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.592694230877863e-5,"z":6.750875988517726e-5,"y":-0.0007748283478241652},"angle":{"x":3.6031328418563235e-6,"z":1.1778427651054647e-5,"y":-1.3349327799778619e-5}},{"degrees_of_freedom":[3864,3865,3866,3867,3868,3869],"id":"n644","parent":"11","position":{"x":15,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8052922917210908e-5,"z":7.643831188305975e-5,"y":-0.0007171436927457918},"angle":{"x":-2.4996683617096273e-5,"z":3.6028907890699816e-5,"y":-7.77583306115841e-5}},{"degrees_of_freedom":[3870,3871,3872,3873,3874,3875],"id":"n645","parent":"11","position":{"x":15,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6363345357199915e-5,"z":8.596713471665503e-5,"y":-0.0007113091619663108},"angle":{"x":5.5670917732759965e-6,"z":1.4015387738642712e-5,"y":-1.1312891095402708e-5}},{"degrees_of_freedom":[3876,3877,3878,3879,3880,3881],"id":"n646","parent":"11","position":{"x":15,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.939624730428924e-5,"z":0.0001019294931831462,"y":-0.0007285716268820528},"angle":{"x":4.0276527996800455e-5,"z":4.239452840503166e-5,"y":6.477362670680548e-5}},{"degrees_of_freedom":[3882,3883,3884,3885,3886,3887],"id":"n647","parent":"11","position":{"x":10,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00021690561725624287,"z":4.225440074106074e-6,"y":-0.0009773243543295068},"angle":{"x":1.0885530686869296e-6,"z":2.2328439639721516e-5,"y":-3.2707148545560235e-5}},{"degrees_of_freedom":[3888,3889,3890,3891,3892,3893],"id":"n648","parent":"11","position":{"x":12.857142857142858,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001335145300271841,"z":5.298021482849116e-5,"y":-0.0008846111538282912},"angle":{"x":-2.348364637480648e-6,"z":1.2281557482516086e-5,"y":-2.7773026267476787e-5}},{"degrees_of_freedom":[3894,3895,3896,3897,3898,3899],"id":"n649","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016586403759139963,"z":4.227129728598855e-5,"y":-0.0009519242925398733},"angle":{"x":-0.00017601109036021378,"z":7.46661462201803e-5,"y":-2.5453473690446492e-5}},{"degrees_of_freedom":[3900,3901,3902,3903,3904,3905],"id":"n650","parent":"11","position":{"x":10,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018525853990249404,"z":3.652759407306819e-6,"y":-0.0009829167308193273},"angle":{"x":7.868021185850944e-6,"z":1.064069182217338e-5,"y":-2.0219404915504935e-5}},{"degrees_of_freedom":[3906,3907,3908,3909,3910,3911],"id":"n651","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001688904212229178,"z":-3.157228267783931e-5,"y":-0.0010031294579087267},"angle":{"x":0.0001137113843321909,"z":4.7940393951396866e-5,"y":-2.1692688244520574e-5}},{"degrees_of_freedom":[3912,3913,3914,3915,3916,3917],"id":"n652","parent":"11","position":{"x":7.142857142857142,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014134668314547344,"z":-4.215125522851002e-5,"y":-0.0010413444017475938},"angle":{"x":6.783032850771493e-7,"z":7.11317531369525e-6,"y":-2.6984826973672685e-5}},{"degrees_of_freedom":[3918,3919,3920,3921,3922,3923],"id":"n653","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011194341006034826,"z":-3.150826523900827e-5,"y":-0.0010006349080942023},"angle":{"x":-0.00014358571945835495,"z":5.7693934001592754e-5,"y":-2.1576498130726058e-5}},{"degrees_of_freedom":[3924,3925,3926,3927,3928,3929],"id":"n654","parent":"11","position":{"x":10,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.244750497064573e-5,"z":3.198006643952653e-6,"y":-0.0009848057103480211},"angle":{"x":-6.750473329475135e-6,"z":8.754142820464827e-6,"y":-1.9622686787305916e-5}},{"degrees_of_freedom":[3930,3931,3932,3933,3934,3935],"id":"n655","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010425254364083912,"z":4.073422980117019e-5,"y":-0.0009576586505349416},"angle":{"x":0.00014608524669346764,"z":6.377521257117646e-5,"y":-2.3836242654464644e-5}},{"degrees_of_freedom":[3936,3937,3938,3939,3940,3941],"id":"n656","parent":"11","position":{"x":10,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015874586817792233,"z":4.890887314762808e-5,"y":-0.0008312136794329809},"angle":{"x":-9.765128954140937e-6,"z":-2.5579998334588023e-5,"y":-4.939614533227078e-6}},{"degrees_of_freedom":[3942,3943,3944,3945,3946,3947],"id":"n657","parent":"11","position":{"x":7.979694910895579,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017203863280935633,"z":4.710117292034796e-5,"y":-0.000776019939913608},"angle":{"x":5.395623920406779e-5,"z":-1.8301076936719328e-5,"y":2.1454638592065263e-5}},{"degrees_of_freedom":[3948,3949,3950,3951,3952,3953],"id":"n658","parent":"11","position":{"x":7.142857142857142,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018641961720229633,"z":-4.395284514327565e-5,"y":-0.0007430749311495631},"angle":{"x":1.9304618574118075e-5,"z":-1.637659238335623e-6,"y":-6.220178066968498e-5}},{"degrees_of_freedom":[3954,3955,3956,3957,3958,3959],"id":"n659","parent":"11","position":{"x":7.979694910895579,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017871136522740677,"z":-3.090125457196793e-5,"y":-0.0007129369927128079},"angle":{"x":1.034356751649191e-5,"z":1.4920566389822846e-5,"y":-4.056792041762338e-5}},{"degrees_of_freedom":[3960,3961,3962,3963,3964,3965],"id":"n660","parent":"11","position":{"x":10,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018041135661305086,"z":4.240242868550103e-5,"y":-0.0007339329667799285},"angle":{"x":-2.4996605126774206e-5,"z":-2.5090247065331015e-5,"y":-2.592953712549134e-5}},{"degrees_of_freedom":[3966,3967,3968,3969,3970,3971],"id":"n661","parent":"11","position":{"x":12.020305089104422,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016956591633775434,"z":7.386989842632493e-5,"y":-0.0007895741774010221},"angle":{"x":1.3487974518798694e-5,"z":-1.8280658345074485e-5,"y":-9.988699820470091e-6}},{"degrees_of_freedom":[3972,3973,3974,3975,3976,3977],"id":"n662","parent":"11","position":{"x":12.857142857142858,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015582049199339772,"z":0.00010947864575490999,"y":-0.0008250706529448063},"angle":{"x":-1.685303934051563e-6,"z":-2.0447017152400496e-6,"y":-4.662023652791624e-5}},{"degrees_of_freedom":[3978,3979,3980,3981,3982,3983],"id":"n663","parent":"11","position":{"x":12.020305089104422,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000160103073492381,"z":6.706023582480081e-5,"y":-0.0008557155932231691},"angle":{"x":-2.0852235483978376e-5,"z":1.1918614335341897e-5,"y":-3.471913822875984e-7}},{"degrees_of_freedom":[3984,3985,3986,3987,3988,3989],"id":"n664","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001646317587880682,"z":2.1358539755431073e-5,"y":-0.0010699258263368843},"angle":{"x":1.2308590421917295e-6,"z":-1.0984532059578355e-5,"y":-2.826539339581846e-5}},{"degrees_of_freedom":[3990,3991,3992,3993,3994,3995],"id":"n665","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019494617174704496,"z":1.0526332703597135e-5,"y":-0.0010046957937102378},"angle":{"x":-0.00021475266027863712,"z":-8.733288239142634e-5,"y":-1.9762738031946644e-5}},{"degrees_of_freedom":[3996,3997,3998,3999,4000,4001],"id":"n666","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018966114698198476,"z":-6.619243442539342e-5,"y":-0.0009390947867357105},"angle":{"x":0.00013746902462340497,"z":-6.33993925262562e-5,"y":-2.5139178158785922e-5}},{"degrees_of_freedom":[4002,4003,4004,4005,4006,4007],"id":"n667","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001577553764872856,"z":-7.798218552444169e-5,"y":-0.0008621016199794724},"angle":{"x":5.102078132323788e-6,"z":-1.4616187998451395e-5,"y":-2.844485685649104e-5}},{"degrees_of_freedom":[4008,4009,4010,4011,4012,4013],"id":"n668","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000126280209947149,"z":-6.681627151955301e-5,"y":-0.000952150578567819},"angle":{"x":-0.00022124043752224612,"z":-9.265592138494553e-5,"y":-2.3708651540325043e-5}},{"degrees_of_freedom":[4014,4015,4016,4017,4018,4019],"id":"n669","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013091520074320548,"z":1.1466199368577347e-5,"y":-0.0010096183576350857},"angle":{"x":-7.192218910921444e-8,"z":-1.053727796651438e-5,"y":-2.262845114088203e-5}},{"degrees_of_freedom":[4020,4021,4022,4023,4024,4025],"id":"n670","parent":"11","position":{"x":15,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00027376427097612133,"z":0.0001199101784300633,"y":-0.0011604770385185118},"angle":{"x":1.398403259709306e-5,"z":-6.48282205322104e-6,"y":-4.3785347545374426e-5}},{"degrees_of_freedom":[4026,4027,4028,4029,4030,4031],"id":"n671","parent":"11","position":{"x":15,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030566622756697623,"z":6.242232032930775e-5,"y":-0.001073156954925253},"angle":{"x":-1.1098710640514084e-6,"z":-3.3466142300268505e-6,"y":-1.5264216871571633e-5}},{"degrees_of_freedom":[4032,4033,4034,4035,4036,4037],"id":"n672","parent":"11","position":{"x":15,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012418609548047596,"z":8.816292474792934e-5,"y":-0.0010667238000740716},"angle":{"x":3.581438190469668e-6,"z":-4.533430081227751e-6,"y":-1.4116301592377095e-5}},{"degrees_of_freedom":[4038,4039,4040,4041,4042,4043],"id":"n673","parent":"11","position":{"x":15,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000142698290917116,"z":9.242777324972226e-5,"y":-0.0010746181403452463},"angle":{"x":4.540214845864568e-6,"z":-1.3108314618123014e-5,"y":-2.418672223050739e-5}},{"degrees_of_freedom":[4044,4045,4046,4047,4048,4049],"id":"n674","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000195146738422332,"z":9.387388804953125e-5,"y":-0.0011004277381317339},"angle":{"x":-8.128964323332823e-6,"z":-5.752038905262981e-5,"y":9.7193781680908e-5}},{"degrees_of_freedom":[4050,4051,4052,4053,4054,4055],"id":"n675","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00033317886353580986,"z":9.058386242600597e-5,"y":-0.001099867660978853},"angle":{"x":5.43101519527246e-6,"z":-1.5172696081796422e-5,"y":-2.6819540934438862e-5}},{"degrees_of_freedom":[4056,4057,4058,4059,4060,4061],"id":"n676","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002978087656524118,"z":8.113593450788343e-5,"y":-0.0010892195639354133},"angle":{"x":2.2686452979674762e-5,"z":-3.2216406475899114e-5,"y":-7.07904829127908e-5}},{"degrees_of_freedom":[4062,4063,4064,4065,4066,4067],"id":"n677","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002784315459432222,"z":6.224393611317445e-5,"y":-0.0010568096939725133},"angle":{"x":4.2367943176052045e-6,"z":-1.6930668445190454e-5,"y":-2.331986796491222e-5}},{"degrees_of_freedom":[4068,4069,4070,4071,4072,4073],"id":"n678","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022002443201198826,"z":6.543426495405804e-5,"y":-0.001031465187344315},"angle":{"x":-1.2608524762727533e-5,"z":-5.228960726750388e-5,"y":8.092632010291826e-5}},{"degrees_of_freedom":[4074,4075,4076,4077,4078,4079],"id":"n679","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.042770717441425e-5,"z":6.968350009506512e-5,"y":-0.0010303577119480302},"angle":{"x":4.302595732965429e-6,"z":-1.4866215581461299e-5,"y":-2.0687142845994053e-5}},{"degrees_of_freedom":[4080,4081,4082,4083,4084,4085],"id":"n680","parent":"11","position":{"x":15,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001307305737670264,"z":7.704461795826465e-5,"y":-0.0010412336235655442},"angle":{"x":1.8935128519630882e-5,"z":-3.611560666237359e-5,"y":-8.502537808878621e-5}},{"degrees_of_freedom":[4086,4087,4088,4089,4090,4091],"id":"n681","parent":"11","position":{"x":10,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003555786545656992,"z":-9.867326110925325e-6,"y":-0.0012596095003260756},"angle":{"x":-0.00011077718906437162,"z":-4.8719314969984324e-5,"y":-5.040289289168705e-5}},{"degrees_of_freedom":[4092,4093,4094,4095,4096,4097],"id":"n682","parent":"11","position":{"x":10,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00010493638551210992,"z":-2.0317022824884068e-5,"y":-0.0011513067155547497},"angle":{"x":5.509223613120903e-7,"z":-2.4222530728675935e-6,"y":-4.0686480889081326e-5}},{"degrees_of_freedom":[4098,4099,4100,4101,4102,4103],"id":"n683","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023435933351599277,"z":5.551041622582845e-5,"y":-0.0012226243767784048},"angle":{"x":-2.017666489618344e-5,"z":-3.732572457543781e-6,"y":-3.1539235771847884e-5}},{"degrees_of_freedom":[4104,4105,4106,4107,4108,4109],"id":"n684","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020160478128021978,"z":3.9658097771901515e-5,"y":-0.0011605325460104894},"angle":{"x":9.806302761298323e-5,"z":-4.553652464508553e-5,"y":-3.364127163702404e-5}},{"degrees_of_freedom":[4110,4111,4112,4113,4114,4115],"id":"n685","parent":"11","position":{"x":10,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001712535739755961,"z":-1.4967411550494056e-5,"y":-0.0011348135291358876},"angle":{"x":-1.4955483764647917e-5,"z":-5.578377903409845e-6,"y":-3.137974529007254e-5}},{"degrees_of_freedom":[4116,4117,4118,4119,4120,4121],"id":"n686","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019072971793369974,"z":-7.444920846633883e-5,"y":-0.0011341251458046502},"angle":{"x":2.1521935362879137e-5,"z":7.318301434751598e-6,"y":-3.6439811665979275e-5}},{"degrees_of_freedom":[4122,4123,4124,4125,4126,4127],"id":"n687","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022427698450911164,"z":-9.187778062666157e-5,"y":-0.0011324628936570142},"angle":{"x":-2.017638198077536e-5,"z":-7.42433661057621e-6,"y":-3.2800286509208195e-5}},{"degrees_of_freedom":[4128,4129,4130,4131,4132,4133],"id":"n688","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002610030105940195,"z":-7.724717587474119e-5,"y":-0.0012156502033641293},"angle":{"x":7.48764229181931e-5,"z":-4.103061075191702e-5,"y":-3.635749925220242e-5}},{"degrees_of_freedom":[4134,4135,4136,4137,4138,4139],"id":"n689","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00029063891673303965,"z":-1.7939599666672125e-5,"y":-0.0012501076921406344},"angle":{"x":-2.5397369866356222e-5,"z":-5.5785518033828055e-6,"y":-3.2947290972646187e-5}},{"degrees_of_freedom":[4140,4141,4142,4143,4144,4145],"id":"n690","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002695117487441418,"z":4.1202639033792634e-5,"y":-0.0012420582149372064},"angle":{"x":5.991424412892651e-6,"z":5.519147403678911e-6,"y":-3.439295221375463e-5}},{"degrees_of_freedom":[4146,4147,4148,4149,4150,4151],"id":"n691","parent":"11","position":{"x":10,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002992285333017807,"z":0.00014787152984946342,"y":-0.0010799371666403506},"angle":{"x":-0.00020266546141600145,"z":1.533569675344472e-5,"y":-2.4246615452405898e-5}},{"degrees_of_freedom":[4152,4153,4154,4155,4156,4157],"id":"n692","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002978720041910858,"z":2.7258972130939697e-5,"y":-0.001066167877557605},"angle":{"x":8.161972349829798e-5,"z":-7.421378489416332e-6,"y":9.350815339757635e-5}},{"degrees_of_freedom":[4158,4159,4160,4161,4162,4163],"id":"n693","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003018442913328115,"z":0.00011390451568024212,"y":-0.001078193289601536},"angle":{"x":-3.1089241456199458e-6,"z":2.1427286678894474e-6,"y":-0.00011104480719882258}},{"degrees_of_freedom":[4164,4165,4166,4167,4168,4169],"id":"n694","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002869434122503407,"z":1.4697049667487162e-5,"y":-0.0010965073563477658},"angle":{"x":-5.905662413005261e-5,"z":1.6003583849053785e-5,"y":2.402490125100289e-5}},{"degrees_of_freedom":[4170,4171,4172,4173,4174,4175],"id":"n695","parent":"11","position":{"x":10,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002746553350552468,"z":1.381383178946614e-5,"y":-0.0011367587147158285},"angle":{"x":-0.00012275621890217337,"z":1.7504695760107904e-5,"y":5.0410113786374596e-5}},{"degrees_of_freedom":[4176,4177,4178,4179,4180,4181],"id":"n696","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002742210628322104,"z":0.00021838471109459276,"y":-0.001152580531183833},"angle":{"x":-1.1050798132831516e-5,"z":-8.728494212502255e-6,"y":9.6680054134063e-5}},{"degrees_of_freedom":[4182,4183,4184,4185,4186,4187],"id":"n697","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027435494422615433,"z":0.00032161607078292465,"y":-0.0011363114548611601},"angle":{"x":7.154786588056561e-5,"z":4.571342994914004e-6,"y":0.0002960905874407412}},{"degrees_of_freedom":[4188,4189,4190,4191,4192,4193],"id":"n698","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002903836912437763,"z":-7.071221106581837e-5,"y":-0.0011151387552081878},"angle":{"x":0.00028850789012966645,"z":1.3503043756505353e-5,"y":-0.00022769736257358033}},{"degrees_of_freedom":[4194,4195,4196,4197,4198,4199],"id":"n699","parent":"11","position":{"x":10,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.768771064830792e-5,"z":-1.71307430764825e-5,"y":-0.0011004771574558113},"angle":{"x":4.98526461835882e-6,"z":2.3817441026658343e-7,"y":-2.9121842628724318e-5}},{"degrees_of_freedom":[4200,4201,4202,4203,4204,4205],"id":"n700","parent":"11","position":{"x":7.979694910895579,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.40042121792466e-5,"z":-7.861718020069221e-5,"y":-0.001089057093071733},"angle":{"x":-8.487770441710767e-6,"z":-1.3692763908490437e-5,"y":-3.244483660812804e-5}},{"degrees_of_freedom":[4206,4207,4208,4209,4210,4211],"id":"n701","parent":"11","position":{"x":7.142857142857142,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.380386951951436e-5,"z":-8.799007692082475e-5,"y":-0.0010589864182523063},"angle":{"x":-2.54318656065911e-6,"z":-1.2409252091546603e-6,"y":-1.696358542300161e-5}},{"degrees_of_freedom":[4212,4213,4214,4215,4216,4217],"id":"n702","parent":"11","position":{"x":7.979694910895579,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.062837201814325e-5,"z":-6.897143801453645e-5,"y":-0.001029042883922014},"angle":{"x":1.5164223293416423e-6,"z":1.4310966460111064e-5,"y":-2.56345866088152e-5}},{"degrees_of_freedom":[4218,4219,4220,4221,4222,4223],"id":"n703","parent":"11","position":{"x":10,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.163906228261211e-5,"z":-1.7136572384297925e-5,"y":-0.0010151436358726603},"angle":{"x":-3.082789037795459e-6,"z":2.1112823214441722e-7,"y":-2.4705259161525974e-5}},{"degrees_of_freedom":[4224,4225,4226,4227,4228,4229],"id":"n704","parent":"11","position":{"x":12.020305089104422,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010340265189850325,"z":2.9538703906285596e-5,"y":-0.0010291193113124647},"angle":{"x":1.3175674060509868e-7,"z":-1.564762037052136e-5,"y":-2.239802168940205e-5}},{"degrees_of_freedom":[4230,4231,4232,4233,4234,4235],"id":"n705","parent":"11","position":{"x":12.857142857142858,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011596461393670504,"z":4.8774852053658265e-5,"y":-0.0010602749869813416},"angle":{"x":1.6580965419716305e-6,"z":-2.0171350984104656e-6,"y":-1.9119012764731354e-5}},{"degrees_of_freedom":[4236,4237,4238,4239,4240,4241],"id":"n706","parent":"11","position":{"x":12.020305089104422,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011091812439883136,"z":3.6011977299111156e-5,"y":-0.0010888103580192195},"angle":{"x":4.638622393322997e-6,"z":1.2814924122971709e-5,"y":-2.6720537546147848e-5}},{"degrees_of_freedom":[4242,4243,4244,4245,4246,4247],"id":"n707","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.630682477925391e-5,"z":2.6131684603611042e-5,"y":-0.0009625716159711391},"angle":{"x":-1.3528091244648735e-5,"z":-5.441933023974312e-6,"y":-2.0919634047656813e-5}},{"degrees_of_freedom":[4248,4249,4250,4251,4252,4253],"id":"n708","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.857796801392167e-5,"z":-4.832117959200818e-5,"y":-0.0009626589278666216},"angle":{"x":1.9637325123386406e-5,"z":-6.347392346451092e-6,"y":-2.1993173495650536e-5}},{"degrees_of_freedom":[4254,4255,4256,4257,4258,4259],"id":"n709","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.586784396945134e-5,"z":-4.793292068778651e-5,"y":-0.0009588880242204368},"angle":{"x":3.127395715640925e-6,"z":2.284465578390286e-6,"y":-2.1666127325382407e-5}},{"degrees_of_freedom":[4260,4261,4262,4263,4264,4265],"id":"n710","parent":"11","position":{"x":15,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":5.101227731247397e-5,"z":0.00011921732835116545,"y":-0.001154466734999113},"angle":{"x":6.301028911423325e-6,"z":7.810454045876029e-7,"y":-4.191818497401217e-5}},{"degrees_of_freedom":[4266,4267,4268,4269,4270,4271],"id":"n711","parent":"11","position":{"x":15,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.898147055352282e-5,"z":0.00010577568116666413,"y":-0.0010641114608725875},"angle":{"x":4.582575282458421e-6,"z":-2.3718650119031573e-6,"y":-1.6355598274345617e-5}},{"degrees_of_freedom":[4272,4273,4274,4275,4276,4277],"id":"n712","parent":"11","position":{"x":15,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.538821579253702e-5,"z":0.00011038902723721508,"y":-0.0010661262426433094},"angle":{"x":3.7476710679548944e-6,"z":-3.008025273706911e-6,"y":-2.2593115307562054e-5}},{"degrees_of_freedom":[4278,4279,4280,4281,4282,4283],"id":"n713","parent":"11","position":{"x":15,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.0368498058698442e-6,"z":0.00010924207073691242,"y":-0.0010922415461954826},"angle":{"x":-1.0365501461469164e-5,"z":-3.0371044103153442e-5,"y":4.978769647743833e-5}},{"degrees_of_freedom":[4284,4285,4286,4287,4288,4289],"id":"n714","parent":"11","position":{"x":15,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.175198376913625e-5,"z":0.00010571352798723176,"y":-0.0010956287908590904},"angle":{"x":2.2634323180384595e-6,"z":-5.274440976529932e-6,"y":-2.620980135875095e-5}},{"degrees_of_freedom":[4290,4291,4292,4293,4294,4295],"id":"n715","parent":"11","position":{"x":15,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001011877974695859,"z":9.904540370508265e-5,"y":-0.0010878588888168599},"angle":{"x":1.8121786343391807e-5,"z":-9.101927051529067e-6,"y":-3.202198683263193e-5}},{"degrees_of_freedom":[4296,4297,4298,4299,4300,4301],"id":"n716","parent":"11","position":{"x":15,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010364429602231708,"z":8.409450780293192e-5,"y":-0.0010565673236300774},"angle":{"x":3.878908427451225e-6,"z":-7.532086609651762e-6,"y":-2.2568211586279098e-5}},{"degrees_of_freedom":[4302,4303,4304,4305,4306,4307],"id":"n717","parent":"11","position":{"x":15,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.832892439995663e-5,"z":8.600516834239154e-5,"y":-0.0010302167093813915},"angle":{"x":-1.1679659218921632e-5,"z":-3.0244878362492817e-5,"y":4.6686844934960383e-5}},{"degrees_of_freedom":[4308,4309,4310,4311,4312,4313],"id":"n718","parent":"11","position":{"x":15,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.424750357527888e-6,"z":8.956326045389911e-5,"y":-0.0010258678555785346},"angle":{"x":2.0689495950617286e-6,"z":-5.265636213205314e-6,"y":-1.8951622678108838e-5}},{"degrees_of_freedom":[4314,4315,4316,4317,4318,4319],"id":"n719","parent":"11","position":{"x":15,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.4999730580950834e-5,"z":9.5828177886642e-5,"y":-0.0010343048169122045},"angle":{"x":1.828914598633264e-5,"z":-9.411222877586961e-6,"y":-3.569061591198735e-5}},{"degrees_of_freedom":[4320,4321,4322,4323,4324,4325],"id":"n720","parent":"11","position":{"x":10,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-9.255195537083218e-5,"z":-2.0800442046465917e-5,"y":-0.001146594991449701},"angle":{"x":-2.8757156196701465e-6,"z":3.1770687580420882e-6,"y":-4.0830607692812616e-5}},{"degrees_of_freedom":[4326,4327,4328,4329,4330,4331],"id":"n721","parent":"11","position":{"x":12.857142857142858,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1825623101929807e-5,"z":4.565360593447818e-5,"y":-0.0011607835427227442},"angle":{"x":4.899136117158937e-9,"z":1.6072851997922494e-6,"y":-2.5170150905884283e-5}},{"degrees_of_freedom":[4332,4333,4334,4335,4336,4337],"id":"n722","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6549886194824206e-5,"z":3.312775485865349e-5,"y":-0.0011698662088312477},"angle":{"x":1.7185332692385663e-5,"z":-4.525567213774147e-6,"y":-3.311797925100682e-5}},{"degrees_of_freedom":[4338,4339,4340,4341,4342,4343],"id":"n723","parent":"11","position":{"x":10,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.301693455883169e-5,"z":-1.9445604417753607e-5,"y":-0.0011734432633236655},"angle":{"x":-6.390260197601462e-8,"z":1.514301356845069e-6,"y":-2.8851557053788858e-5}},{"degrees_of_freedom":[4344,4345,4346,4347,4348,4349],"id":"n724","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.358774172764842e-5,"z":-7.185906095641794e-5,"y":-0.001177127271358657},"angle":{"x":-2.9632442577133857e-5,"z":-8.881100850571348e-6,"y":-3.146878689715492e-5}},{"degrees_of_freedom":[4350,4351,4352,4353,4354,4355],"id":"n725","parent":"11","position":{"x":7.142857142857142,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9933381429116333e-7,"z":-8.697679574480343e-5,"y":-0.0011864681225415498},"angle":{"x":-2.3526799287046753e-7,"z":1.5710174988587775e-6,"y":-2.512496239387621e-5}},{"degrees_of_freedom":[4356,4357,4358,4359,4360,4361],"id":"n726","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.864556489247127e-5,"z":-7.436601735866066e-5,"y":-0.0011778544796002288},"angle":{"x":-5.367141892193569e-5,"z":2.0522191768040566e-5,"y":-3.3639720115633533e-5}},{"degrees_of_freedom":[4362,4363,4364,4365,4366,4367],"id":"n727","parent":"11","position":{"x":10,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.532296493763237e-5,"z":-2.1486790635526982e-5,"y":-0.001174101481297132},"angle":{"x":-1.6647933212816085e-7,"z":1.664009458728715e-6,"y":-2.879281007256876e-5}},{"degrees_of_freedom":[4368,4369,4370,4371,4372,4373],"id":"n728","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5907809470132024e-5,"z":3.066027959833855e-5,"y":-0.0011700698482813635},"angle":{"x":4.247875546633026e-5,"z":1.6682713871575033e-5,"y":-3.134372547874377e-5}},{"degrees_of_freedom":[4374,4375,4376,4377,4378,4379],"id":"n729","parent":"11","position":{"x":10,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.355740032543952e-5,"z":-1.5172221363500138e-5,"y":-0.0010957187844335696},"angle":{"x":-2.955457834851516e-6,"z":4.1431862658976025e-7,"y":-2.9392499410020607e-5}},{"degrees_of_freedom":[4380,4381,4382,4383,4384,4385],"id":"n730","parent":"11","position":{"x":7.979694910895579,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.645242496415755e-5,"z":-7.054074775286599e-5,"y":-0.0010852834349775644},"angle":{"x":-8.905641241095674e-6,"z":-1.2242137564634721e-5,"y":-2.9570287070145758e-5}},{"degrees_of_freedom":[4386,4387,4388,4389,4390,4391],"id":"n731","parent":"11","position":{"x":7.142857142857142,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.984747840663798e-5,"z":-7.695231704542963e-5,"y":-0.0010572867118567538},"angle":{"x":-3.8755611677344666e-6,"z":2.974795840708157e-6,"y":-1.681384437914314e-5}},{"degrees_of_freedom":[4392,4393,4394,4395,4396,4397],"id":"n732","parent":"11","position":{"x":7.979694910895579,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.526709943538673e-5,"z":-5.522296828670805e-5,"y":-0.001025304520341478},"angle":{"x":-4.0957544050254986e-7,"z":1.6612301519227164e-5,"y":-2.4568714302027736e-5}},{"degrees_of_freedom":[4398,4399,4400,4401,4402,4403],"id":"n733","parent":"11","position":{"x":10,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.238701676641112e-5,"z":-3.9442080248293585e-6,"y":-0.0010101340095102903},"angle":{"x":-2.150364431519142e-6,"z":2.839340883884706e-7,"y":-2.4812643924005838e-5}},{"degrees_of_freedom":[4404,4405,4406,4407,4408,4409],"id":"n734","parent":"11","position":{"x":12.020305089104422,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.155886556318285e-5,"z":4.373553964910753e-5,"y":-0.0010228324450362934},"angle":{"x":-1.3156455827511015e-6,"z":-1.3537512045531865e-5,"y":-2.3501903781942756e-5}},{"degrees_of_freedom":[4410,4411,4412,4413,4414,4415],"id":"n735","parent":"11","position":{"x":12.857142857142858,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.6649243175175925e-5,"z":6.130310822178323e-5,"y":-0.0010519803920167492},"angle":{"x":4.864452723458097e-7,"z":2.290652011265798e-6,"y":-2.0151991658798664e-5}},{"degrees_of_freedom":[4416,4417,4418,4419,4420,4421],"id":"n736","parent":"11","position":{"x":12.020305089104422,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.897877592296514e-5,"z":4.514278261444696e-5,"y":-0.0010827773670825606},"angle":{"x":4.175752653543436e-6,"z":1.4645099061913914e-5,"y":-3.0059484616467755e-5}},{"degrees_of_freedom":[4422,4423,4424,4425,4426,4427],"id":"n737","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010884311537786552,"z":-3.2429483869602694e-5,"y":-0.0009998968976250042},"angle":{"x":2.7293206943954843e-5,"z":-2.8578636917087378e-6,"y":-2.2070585798938478e-5}},{"degrees_of_freedom":[4428,4429,4430,4431,4432,4433],"id":"n738","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017350459153849527,"z":-3.2228963419537565e-5,"y":-0.0009991294995443133},"angle":{"x":0.00018532122156172815,"z":7.251583136664638e-5,"y":-1.9417369392354958e-5}},{"degrees_of_freedom":[4434,4435,4436,4437,4438,4439],"id":"n739","parent":"11","position":{"x":15,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00018200543549371648,"z":0.00011816957955245372,"y":-0.0011746554441796557},"angle":{"x":-1.8816809763279548e-6,"z":7.00906839921225e-6,"y":-3.438281699007058e-5}},{"degrees_of_freedom":[4440,4441,4442,4443,4444,4445],"id":"n740","parent":"11","position":{"x":15,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00023752996656924483,"z":0.00013381881910205337,"y":-0.0011048142717966073},"angle":{"x":9.5821887848895e-6,"z":-2.4728424507196188e-6,"y":-1.6308448539342773e-5}},{"degrees_of_freedom":[4446,4447,4448,4449,4450,4451],"id":"n741","parent":"11","position":{"x":15,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020605519680284406,"z":0.00013393807724226494,"y":-0.0010874024619048463},"angle":{"x":3.3527411641627044e-6,"z":6.006805601438926e-6,"y":-2.0800506580751266e-5}},{"degrees_of_freedom":[4452,4453,4454,4455,4456,4457],"id":"n742","parent":"11","position":{"x":15,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020215860817094424,"z":0.0001290909522479701,"y":-0.0011138530705533441},"angle":{"x":-1.3804317231080565e-5,"z":-2.8762728493202496e-7,"y":-5.534047056550569e-6}},{"degrees_of_freedom":[4458,4459,4460,4461,4462,4463],"id":"n743","parent":"11","position":{"x":15,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018591768098753973,"z":0.00012349936781533744,"y":-0.0011136427827002598},"angle":{"x":4.3042356406498165e-6,"z":5.485675542998545e-6,"y":-2.4400316952741288e-5}},{"degrees_of_freedom":[4464,4465,4466,4467,4468,4469],"id":"n744","parent":"11","position":{"x":15,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010698331734089366,"z":0.00011563609036451527,"y":-0.0011036574922327518},"angle":{"x":1.7653731351716088e-5,"z":1.4965865213525767e-5,"y":4.950616315757847e-6}},{"degrees_of_freedom":[4470,4471,4472,4473,4474,4475],"id":"n745","parent":"11","position":{"x":15,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.711824846205834e-5,"z":0.00010247408952195098,"y":-0.0010712165603020706},"angle":{"x":3.0695278316752477e-6,"z":3.7176091552166923e-6,"y":-2.4327392365354748e-5}},{"degrees_of_freedom":[4476,4477,4478,4479,4480,4481],"id":"n746","parent":"11","position":{"x":15,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.796934633870015e-5,"z":0.00010455803083213376,"y":-0.001043553823476577},"angle":{"x":-1.0973211110943917e-5,"z":5.964744757194181e-7,"y":-1.2962629949742817e-5}},{"degrees_of_freedom":[4482,4483,4484,4485,4486,4487],"id":"n747","parent":"11","position":{"x":15,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001073325854995197,"z":0.0001082680649668006,"y":-0.0010435021351677268},"angle":{"x":5.451411344162545e-6,"z":4.238732903434459e-6,"y":-2.0727642610483008e-5}},{"degrees_of_freedom":[4488,4489,4490,4491,4492,4493],"id":"n748","parent":"11","position":{"x":15,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017513848083783589,"z":0.00011678393870916423,"y":-0.0010554961479804156},"angle":{"x":2.1532580576130672e-5,"z":1.2155344692541106e-5,"y":-8.729412674264841e-7}},{"degrees_of_freedom":[4494,4495,4496,4497,4498,4499],"id":"n749","parent":"11","position":{"x":10,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00034118014009470484,"z":-3.217021246090645e-5,"y":-0.0012406000044415627},"angle":{"x":0.00011262518510256956,"z":5.204808770184874e-5,"y":-5.0021204178364145e-5}},{"degrees_of_freedom":[4500,4501,4502,4503,4504,4505],"id":"n750","parent":"11","position":{"x":12.857142857142858,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021089210182553285,"z":5.0417163917365286e-5,"y":-0.0011036894543969406},"angle":{"x":2.0713834676356362e-5,"z":9.765560065158673e-6,"y":-3.203985738098699e-5}},{"degrees_of_freedom":[4506,4507,4508,4509,4510,4511],"id":"n751","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002466863326871101,"z":3.582125560996815e-5,"y":-0.001201340987493141},"angle":{"x":-9.873712270073125e-5,"z":5.199788655767638e-5,"y":-3.632970436360334e-5}},{"degrees_of_freedom":[4512,4513,4514,4515,4516,4517],"id":"n752","parent":"11","position":{"x":10,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00027657909774963873,"z":-2.3630023447678365e-5,"y":-0.0012417897454150902},"angle":{"x":2.5896472540558804e-5,"z":7.933326770974315e-6,"y":-3.309438370697481e-5}},{"degrees_of_freedom":[4518,4519,4520,4521,4522,4523],"id":"n753","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025573907074591303,"z":-8.293283784738335e-5,"y":-0.0012388961933658329},"angle":{"x":-8.62416859621711e-6,"z":-4.271656283827928e-6,"y":-3.426830867570564e-5}},{"degrees_of_freedom":[4524,4525,4526,4527,4528,4529],"id":"n754","parent":"11","position":{"x":7.142857142857142,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002220426439604083,"z":-9.725048470945143e-5,"y":-0.0012319098327229908},"angle":{"x":2.0714107561494913e-5,"z":6.1008981175593595e-6,"y":-3.0749449330641576e-5}},{"degrees_of_freedom":[4530,4531,4532,4533,4534,4535],"id":"n755","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001899670961106492,"z":-8.129987652957717e-5,"y":-0.001155198939714402},"angle":{"x":-0.00012812340117096736,"z":5.87227967181101e-5,"y":-3.460678164295787e-5}},{"degrees_of_freedom":[4536,4537,4538,4539,4540,4541],"id":"n756","parent":"11","position":{"x":10,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015902234086364242,"z":-2.5911952678890802e-5,"y":-0.0011234244976243112},"angle":{"x":1.5531235686215926e-5,"z":7.933160079633445e-6,"y":-3.143572397068691e-5}},{"degrees_of_freedom":[4542,4543,4544,4545,4546,4547],"id":"n757","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017826726589318444,"z":3.324997162117579e-5,"y":-0.0011176443213357157},"angle":{"x":-1.8668081757799086e-5,"z":-4.1580830990262324e-6,"y":-3.609775088320043e-5}},{"degrees_of_freedom":[4548,4549,4550,4551,4552,4553],"id":"n758","parent":"11","position":{"x":10,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000253489062827865,"z":-6.582942084163367e-5,"y":-0.0011159280359164133},"angle":{"x":0.0001182762111747502,"z":-1.5657847084554013e-5,"y":5.043414292068929e-5}},{"degrees_of_freedom":[4554,4555,4556,4557,4558,4559],"id":"n759","parent":"11","position":{"x":7.979694910895579,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002654322272562548,"z":-6.291505046804636e-5,"y":-0.0010786200904558153},"angle":{"x":4.736425604842327e-5,"z":-1.5028071131688446e-5,"y":2.1061476365743815e-5}},{"degrees_of_freedom":[4560,4561,4562,4563,4564,4565],"id":"n760","parent":"11","position":{"x":7.142857142857142,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002759634514393425,"z":-0.00014098027282213575,"y":-0.0010613971095199664},"angle":{"x":-1.0656143070006072e-6,"z":5.133358810510793e-7,"y":-9.585858957328978e-5}},{"degrees_of_freedom":[4566,4567,4568,4569,4570,4571],"id":"n761","parent":"11","position":{"x":7.979694910895579,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00026709778213833386,"z":-5.860929151395569e-5,"y":-0.0010477658208068537},"angle":{"x":-7.16777730786704e-5,"z":8.978061468318768e-6,"y":7.461416028429891e-5}},{"degrees_of_freedom":[4572,4573,4574,4575,4576,4577],"id":"n762","parent":"11","position":{"x":10,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002643812970058066,"z":-0.00014937001403913537,"y":-0.0010582253596312494},"angle":{"x":0.00018282920131234285,"z":-1.3294355414489382e-5,"y":-3.080607296883362e-5}},{"degrees_of_freedom":[4578,4579,4580,4581,4582,4583],"id":"n763","parent":"11","position":{"x":12.020305089104422,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025408335698071625,"z":6.586609683125364e-5,"y":-0.0010891577849187384},"angle":{"x":-0.0003173921385211951,"z":-1.2243650223343699e-5,"y":-0.00023800461453076584}},{"degrees_of_freedom":[4584,4585,4586,4587,4588,4589],"id":"n764","parent":"11","position":{"x":12.857142857142858,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00024307324000341713,"z":-0.00037619168074176,"y":-0.0011084424345610437},"angle":{"x":-8.230589127023999e-5,"z":-1.3078940077461807e-6,"y":0.00032954390558828693}},{"degrees_of_freedom":[4590,4591,4592,4593,4594,4595],"id":"n765","parent":"11","position":{"x":12.020305089104422,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025001043372116277,"z":-0.00026669980888061447,"y":-0.0011269802755108982},"angle":{"x":1.570720314778021e-5,"z":1.192087574063258e-5,"y":9.291966047335284e-5}},{"degrees_of_freedom":[4596,4597,4598,4599,4600,4601],"id":"n766","parent":"11","position":{"x":25,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4602,4603,4604,4605,4606,4607],"id":"n767","parent":"11","position":{"x":20,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4608,4609,4610,4611,4612,4613],"id":"n768","parent":"11","position":{"x":20,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4614,4615,4616,4617,4618,4619],"id":"n769","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4620,4621,4622,4623,4624,4625],"id":"n770","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4626,4627,4628,4629,4630,4631],"id":"n771","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4632,4633,4634,4635,4636,4637],"id":"n772","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4638,4639,4640,4641,4642,4643],"id":"n773","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4644,4645,4646,4647,4648,4649],"id":"n774","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4650,4651,4652,4653,4654,4655],"id":"n775","parent":"11","position":{"x":20,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4656,4657,4658,4659,4660,4661],"id":"n776","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4662,4663,4664,4665,4666,4667],"id":"n777","parent":"11","position":{"x":25,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":8.800141942526229e-5,"z":0.00010232256209551139,"y":-0.000652952104616271},"angle":{"x":6.471610938795587e-5,"z":2.9612797759522088e-5,"y":-9.987174983013996e-6}},{"degrees_of_freedom":[4668,4669,4670,4671,4672,4673],"id":"n778","parent":"11","position":{"x":25,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7738774934379678e-5,"z":2.158534983064027e-5,"y":-0.00028416174371298107},"angle":{"x":5.356141063335963e-5,"z":-1.5413640147758206e-5,"y":5.3132655423841006e-5}},{"degrees_of_freedom":[4674,4675,4676,4677,4678,4679],"id":"n779","parent":"11","position":{"x":25,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001242658387548679,"z":1.126801385719565e-5,"y":-0.00031755318847370625},"angle":{"x":2.5421613566736595e-5,"z":-7.082895234246143e-6,"y":6.680146293195557e-6}},{"degrees_of_freedom":[4680,4681,4682,4683,4684,4685],"id":"n780","parent":"11","position":{"x":25,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.859387516188269e-5,"z":2.570824268136168e-5,"y":-0.0001958628109297879},"angle":{"x":-6.988078071399191e-7,"z":-3.164342243868323e-5,"y":-7.5347065782503795e-6}},{"degrees_of_freedom":[4686,4687,4688,4689,4690,4691],"id":"n781","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014979704601165674,"z":1.6012439108499038e-5,"y":-0.00024521632334961415},"angle":{"x":-1.8912973725396258e-5,"z":-0.00013095972484652508,"y":0.00027337446344103376}},{"degrees_of_freedom":[4692,4693,4694,4695,4696,4697],"id":"n782","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003458385656567038,"z":2.0405875959167535e-6,"y":-0.0003650250994919884},"angle":{"x":-8.392828973366257e-5,"z":-2.6679013248306088e-5,"y":-2.157597743500418e-5}},{"degrees_of_freedom":[4698,4699,4700,4701,4702,4703],"id":"n783","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023697712548672526,"z":2.2163128383317706e-6,"y":-0.0004591918432982362},"angle":{"x":3.2702275612055056e-5,"z":-0.00018892143407618582,"y":-0.0004804668386822553}},{"degrees_of_freedom":[4704,4705,4706,4707,4708,4709],"id":"n784","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001918849641075207,"z":-1.4548670222154077e-5,"y":-0.0004090187218259293},"angle":{"x":-1.70066426007746e-6,"z":-3.1643496257546173e-5,"y":-3.561715848839327e-5}},{"degrees_of_freedom":[4710,4711,4712,4713,4714,4715],"id":"n785","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.718122856283072e-5,"z":9.98886848205104e-7,"y":-0.0003646139240041374},"angle":{"x":-2.1063463291467725e-5,"z":-0.00021474592763804512,"y":0.000482275199450981}},{"degrees_of_freedom":[4716,4717,4718,4719,4720,4721],"id":"n786","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001655953164176197,"z":1.8097223470686535e-5,"y":-0.00024595716020589704},"angle":{"x":-8.707025379229689e-5,"z":-3.660766112731904e-5,"y":-2.157591047222122e-5}},{"degrees_of_freedom":[4722,4723,4724,4725,4726,4727],"id":"n787","parent":"11","position":{"x":25,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.361981380321795e-9,"z":1.6124182134157457e-5,"y":-0.00014483930102924912},"angle":{"x":2.2419023703825954e-5,"z":-0.0001213344797223186,"y":-0.00026121957614799583}},{"degrees_of_freedom":[4728,4729,4730,4731,4732,4733],"id":"n788","parent":"11","position":{"x":20,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00011334209949441448,"z":5.8105372645226485e-5,"y":-0.0005959461655383495},"angle":{"x":-4.079209826286134e-6,"z":-5.0344904002335884e-5,"y":-1.4339083578549107e-5}},{"degrees_of_freedom":[4734,4735,4736,4737,4738,4739],"id":"n789","parent":"11","position":{"x":20,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":7.708897348434719e-5,"z":6.598706287040188e-5,"y":-0.0005946654881488123},"angle":{"x":-3.2121053295072184e-6,"z":-8.193747229511622e-6,"y":-1.183225324968823e-5}},{"degrees_of_freedom":[4740,4741,4742,4743,4744,4745],"id":"n790","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.648890146624778e-5,"z":8.238931287862016e-5,"y":-0.0012086982484194914},"angle":{"x":2.5499450691717302e-5,"z":-7.248925324208063e-5,"y":-9.422086833866765e-6}},{"degrees_of_freedom":[4746,4747,4748,4749,4750,4751],"id":"n791","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.609083019864705e-5,"z":7.862689318275907e-5,"y":-0.000846750384986554},"angle":{"x":0.000902070428062591,"z":-0.00038200502205928434,"y":-9.544255447913165e-6}},{"degrees_of_freedom":[4752,4753,4754,4755,4756,4757],"id":"n792","parent":"11","position":{"x":20,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.02843053494839e-5,"z":6.0220016429132546e-5,"y":-0.0007044430895328101},"angle":{"x":1.9764346152672077e-5,"z":-6.160547408559473e-5,"y":-1.1147815915382526e-5}},{"degrees_of_freedom":[4758,4759,4760,4761,4762,4763],"id":"n793","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.276945365404472e-5,"z":4.1895583130268185e-5,"y":-0.000545809307597526},"angle":{"x":-0.0005194441667586044,"z":-0.00024934992467869646,"y":-1.1863896156778706e-5}},{"degrees_of_freedom":[4764,4765,4766,4767,4768,4769],"id":"n794","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.724850893384296e-5,"z":3.435742538018852e-5,"y":-0.00017447033207237264},"angle":{"x":2.469618463307997e-5,"z":-5.5895725810522164e-5,"y":-7.897993927998666e-6}},{"degrees_of_freedom":[4770,4771,4772,4773,4774,4775],"id":"n795","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.839478752703262e-5,"z":3.7113693772261864e-5,"y":-0.00044193957141291186},"angle":{"x":0.0007594617848552986,"z":-0.0003146030338934354,"y":-1.3253384750336725e-5}},{"degrees_of_freedom":[4776,4777,4778,4779,4780,4781],"id":"n796","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010626012979981704,"z":5.853373576063406e-5,"y":-0.0005540664233278722},"angle":{"x":3.2867328248906716e-5,"z":-6.26226888704576e-5,"y":-1.1079944896757143e-5}},{"degrees_of_freedom":[4782,4783,4784,4785,4786,4787],"id":"n797","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.631437737753947e-5,"z":7.701626674672259e-5,"y":-0.0007421975994293118},"angle":{"x":-0.0006483939713179124,"z":-0.0003111453964446626,"y":-1.1149930097043164e-5}},{"degrees_of_freedom":[4788,4789,4790,4791,4792,4793],"id":"n798","parent":"11","position":{"x":20,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.9158471347357616e-5,"z":-5.4867669866695094e-5,"y":-0.0001984883155747042},"angle":{"x":-6.0522621359132125e-6,"z":3.8828065768796233e-5,"y":-2.9665007647440442e-5}},{"degrees_of_freedom":[4794,4795,4796,4797,4798,4799],"id":"n799","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.40352812281303e-5,"z":-7.77771740489967e-11,"y":-0.00015852707003221532},"angle":{"x":-2.5604918221482238e-5,"z":-1.4772397029641545e-5,"y":-3.776396946778483e-5}},{"degrees_of_freedom":[4800,4801,4802,4803,4804,4805],"id":"n800","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5623675032757584e-5,"z":-2.012750450013315e-5,"y":-0.00021025944860295122},"angle":{"x":7.130459417117838e-5,"z":3.082263999049248e-6,"y":0.00019619626990021076}},{"degrees_of_freedom":[4806,4807,4808,4809,4810,4811],"id":"n801","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9862891836544753e-5,"z":0.0002881140087995616,"y":-0.0002691954041329423},"angle":{"x":0.00016063500303244036,"z":2.418818564425198e-5,"y":-1.946633213789906e-5}},{"degrees_of_freedom":[4812,4813,4814,4815,4816,4817],"id":"n802","parent":"11","position":{"x":20,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8378163503348867e-6,"z":0.0003832114008181824,"y":-0.000349776805817009},"angle":{"x":0.00026111292503056536,"z":3.8099015521420374e-5,"y":-6.108574258655343e-5}},{"degrees_of_freedom":[4818,4819,4820,4821,4822,4823],"id":"n803","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.349657002167933e-6,"z":4.1290429173349405e-5,"y":-0.0003851362777192358},"angle":{"x":-0.00015171588264969408,"z":-1.9901701298630717e-5,"y":-0.00023208498962297314}},{"degrees_of_freedom":[4824,4825,4826,4827,4828,4829],"id":"n804","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1631504665227996e-7,"z":0.00015358522369722679,"y":-0.00033525901371759794},"angle":{"x":3.988389732808953e-5,"z":4.777715286724166e-6,"y":0.0002304776132508249}},{"degrees_of_freedom":[4830,4831,4832,4833,4834,4835],"id":"n805","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.1484432394510787e-5,"z":-0.00011986480083748148,"y":-0.0002799681560437164},"angle":{"x":0.0001794688977188101,"z":2.5350655578390547e-5,"y":-0.00010651039030331402}},{"degrees_of_freedom":[4836,4837,4838,4839,4840,4841],"id":"n806","parent":"11","position":{"x":20,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.38216042058211e-5,"z":7.93532352799837e-5,"y":-0.00042411034187861835},"angle":{"x":3.4382363873578516e-5,"z":-4.601895313227497e-6,"y":-5.808508656254651e-6}},{"degrees_of_freedom":[4842,4843,4844,4845,4846,4847],"id":"n807","parent":"11","position":{"x":17.979694910895578,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.523421709875858e-5,"z":3.9325514987696503e-5,"y":-0.0003793433295401541},"angle":{"x":-3.210826546052468e-6,"z":-4.092281841020902e-5,"y":-2.06677984242973e-5}},{"degrees_of_freedom":[4848,4849,4850,4851,4852,4853],"id":"n808","parent":"11","position":{"x":17.142857142857142,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2655800329852194e-5,"z":2.8375920413229477e-5,"y":-0.0002838547268893206},"angle":{"x":7.395088991846353e-6,"z":-7.833946246048394e-6,"y":4.6846780876085e-6}},{"degrees_of_freedom":[4854,4855,4856,4857,4858,4859],"id":"n809","parent":"11","position":{"x":17.979694910895578,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5626924118573984e-5,"z":9.585690421264548e-6,"y":-0.00019904181597212752},"angle":{"x":1.5525147330733718e-5,"z":2.912774289882799e-5,"y":-1.5195477342506216e-5}},{"degrees_of_freedom":[4860,4861,4862,4863,4864,4865],"id":"n810","parent":"11","position":{"x":20,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4533052239465706e-5,"z":2.797627875672557e-5,"y":-0.00017005443113106013},"angle":{"x":-2.2551153953247013e-5,"z":-1.9460368599064045e-6,"y":6.905494858835453e-8}},{"degrees_of_freedom":[4866,4867,4868,4869,4870,4871],"id":"n811","parent":"11","position":{"x":22.020305089104422,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.625237913392513e-5,"z":8.623544717771334e-6,"y":-0.00021493438436143966},"angle":{"x":2.014452454146895e-5,"z":-4.8213753242193236e-5,"y":1.8261379756815275e-5}},{"degrees_of_freedom":[4872,4873,4874,4875,4876,4877],"id":"n812","parent":"11","position":{"x":22.857142857142858,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010773229117378732,"z":3.766636204186481e-5,"y":-0.00031068507712571396},"angle":{"x":1.4066942022727817e-5,"z":-8.41699071743807e-6,"y":-2.9116446030124674e-6}},{"degrees_of_freedom":[4878,4879,4880,4881,4882,4883],"id":"n813","parent":"11","position":{"x":22.020305089104422,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.762826262650021e-5,"z":6.183602816323206e-5,"y":-0.00039548318302091827},"angle":{"x":7.701525086061045e-6,"z":3.636386418959175e-5,"y":5.955382241480321e-6}},{"degrees_of_freedom":[4884,4885,4886,4887,4888,4889],"id":"n814","parent":"11","position":{"x":25,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4890,4891,4892,4893,4894,4895],"id":"n815","parent":"11","position":{"x":20,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4896,4897,4898,4899,4900,4901],"id":"n816","parent":"11","position":{"x":22.857142857142858,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4902,4903,4904,4905,4906,4907],"id":"n817","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4908,4909,4910,4911,4912,4913],"id":"n818","parent":"11","position":{"x":20,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4914,4915,4916,4917,4918,4919],"id":"n819","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4920,4921,4922,4923,4924,4925],"id":"n820","parent":"11","position":{"x":17.142857142857142,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4926,4927,4928,4929,4930,4931],"id":"n821","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4932,4933,4934,4935,4936,4937],"id":"n822","parent":"11","position":{"x":20,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4938,4939,4940,4941,4942,4943],"id":"n823","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4944,4945,4946,4947,4948,4949],"id":"n824","parent":"11","position":{"x":25,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":3.870480823596791e-5,"z":0.00011116010583942319,"y":-0.0006340980656278486},"angle":{"x":6.178452011405212e-5,"z":-9.675292959041952e-6,"y":-1.0192538777397896e-5}},{"degrees_of_freedom":[4950,4951,4952,4953,4954,4955],"id":"n825","parent":"11","position":{"x":25,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.638280962812538e-5,"z":1.3296799792446775e-5,"y":-0.00028587553279655145},"angle":{"x":2.6034950339209882e-5,"z":3.592286216253258e-6,"y":1.2413681132932838e-5}},{"degrees_of_freedom":[4956,4957,4958,4959,4960,4961],"id":"n826","parent":"11","position":{"x":25,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.7744748725671213e-5,"z":3.089722166787598e-5,"y":-0.00018313660477618392},"angle":{"x":-6.904284149922484e-7,"z":3.055851861290809e-6,"y":1.1192728214792338e-5}},{"degrees_of_freedom":[4962,4963,4964,4965,4966,4967],"id":"n827","parent":"11","position":{"x":25,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.497894269071734e-8,"z":2.0133687967381023e-5,"y":-0.00022874943162173967},"angle":{"x":-1.9463078183797306e-5,"z":-2.1858788253737524e-5,"y":8.54629676513048e-5}},{"degrees_of_freedom":[4968,4969,4970,4971,4972,4973],"id":"n828","parent":"11","position":{"x":25,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.27882892605185e-5,"z":6.834069309617607e-6,"y":-0.00035263217003161083},"angle":{"x":-8.602276152471342e-5,"z":1.221042896237096e-5,"y":-7.098395746492226e-6}},{"degrees_of_freedom":[4974,4975,4976,4977,4978,4979],"id":"n829","parent":"11","position":{"x":25,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.3886197490784665e-5,"z":8.224537507088451e-6,"y":-0.0004479694759005627},"angle":{"x":3.303817369833887e-5,"z":6.468185481353036e-5,"y":0.00013751227622158823}},{"degrees_of_freedom":[4980,4981,4982,4983,4984,4985],"id":"n830","parent":"11","position":{"x":25,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.402904948259523e-5,"z":-1.0437908444908732e-5,"y":-0.0004013553019192155},"angle":{"x":-1.4304439129958295e-6,"z":6.485789688996902e-6,"y":-3.08921373394726e-5}},{"degrees_of_freedom":[4986,4987,4988,4989,4990,4991],"id":"n831","parent":"11","position":{"x":25,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.24684722629685e-5,"z":7.642246174105813e-6,"y":-0.00035908753610330954},"angle":{"x":-2.4169875244128857e-5,"z":1.5508197862786974e-5,"y":-6.021248207685648e-5}},{"degrees_of_freedom":[4992,4993,4994,4995,4996,4997],"id":"n832","parent":"11","position":{"x":25,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4319613227103532e-5,"z":2.4501941401693743e-5,"y":-0.00023678676176697297},"angle":{"x":-8.845384393169353e-5,"z":-2.6688179411146336e-6,"y":-1.2601187459611544e-5}},{"degrees_of_freedom":[4998,4999,5000,5001,5002,5003],"id":"n833","parent":"11","position":{"x":25,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6671536004363002e-5,"z":2.07442612263812e-5,"y":-0.00013644609010793476},"angle":{"x":2.1883922917802e-5,"z":2.0176042202201685e-5,"y":5.5814909387453854e-5}},{"degrees_of_freedom":[5004,5005,5006,5007,5008,5009],"id":"n834","parent":"11","position":{"x":20,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.0456342523547553e-5,"z":8.245274375548037e-5,"y":-0.0005790314409916059},"angle":{"x":2.1745604295069177e-6,"z":2.949666724435306e-6,"y":-1.0470870735768576e-5}},{"degrees_of_freedom":[5010,5011,5012,5013,5014,5015],"id":"n835","parent":"11","position":{"x":22.857142857142858,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.784614294792034e-5,"z":9.323444482821343e-5,"y":-0.000625600289380924},"angle":{"x":2.2498138512085882e-5,"z":-6.3999195468453515e-6,"y":-1.1572737141198486e-5}},{"degrees_of_freedom":[5016,5017,5018,5019,5020,5021],"id":"n836","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.3414833153037043e-5,"z":9.048011783643545e-5,"y":-0.0006289894664451458},"angle":{"x":-0.00010039866997063004,"z":3.416685756440536e-5,"y":-8.012168615950504e-6}},{"degrees_of_freedom":[5022,5023,5024,5025,5026,5027],"id":"n837","parent":"11","position":{"x":20,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4965295335786696e-5,"z":7.691670724838649e-5,"y":-0.0006212923399374747},"angle":{"x":1.7015186483357804e-5,"z":-1.0228971307128416e-5,"y":-8.24168835159008e-6}},{"degrees_of_freedom":[5028,5029,5030,5031,5032,5033],"id":"n838","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9306572599031173e-5,"z":6.0769284059757894e-5,"y":-0.0005851172860546789},"angle":{"x":-0.00010443872075301121,"z":-5.0285672608392706e-5,"y":-9.854593175151207e-6}},{"degrees_of_freedom":[5034,5035,5036,5037,5038,5039],"id":"n839","parent":"11","position":{"x":17.142857142857142,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.226010963294067e-5,"z":5.382662711414831e-5,"y":-0.0005197541606614343},"angle":{"x":1.3641958899479792e-5,"z":-5.654155039418397e-6,"y":-1.276909746940052e-5}},{"degrees_of_freedom":[5040,5041,5042,5043,5044,5045],"id":"n840","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.4697091120852484e-5,"z":5.809631810792909e-5,"y":-0.0005223031880193374},"angle":{"x":0.00012574638945460055,"z":-4.37456919674527e-5,"y":-9.894290500068408e-6}},{"degrees_of_freedom":[5046,5047,5048,5049,5050,5051],"id":"n841","parent":"11","position":{"x":20,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.567183410674034e-5,"z":7.201389071927345e-5,"y":-0.0005180353012137304},"angle":{"x":1.9124616763716693e-5,"z":-4.708875537169711e-6,"y":-8.172311466162615e-6}},{"degrees_of_freedom":[5052,5053,5054,5055,5056,5057],"id":"n842","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.960213520274419e-5,"z":8.72875348331634e-5,"y":-0.000548854404201299},"angle":{"x":-0.00024739245844675146,"z":-0.00010084866365298828,"y":-1.096560221906341e-5}},{"degrees_of_freedom":[5058,5059,5060,5061,5062,5063],"id":"n843","parent":"11","position":{"x":20,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1377489371548494e-5,"z":8.876513759877269e-5,"y":-0.0004122077587379459},"angle":{"x":2.753593701147213e-5,"z":-1.2979474146359228e-6,"y":-2.9116865532810136e-6}},{"degrees_of_freedom":[5064,5065,5066,5067,5068,5069],"id":"n844","parent":"11","position":{"x":17.979694910895578,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.508215286784359e-6,"z":6.046521924226705e-5,"y":-0.0003750580224832129},"angle":{"x":-3.918369946906784e-6,"z":-3.594648500343025e-5,"y":-1.50113853543217e-5}},{"degrees_of_freedom":[5070,5071,5072,5073,5074,5075],"id":"n845","parent":"11","position":{"x":17.142857142857142,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2631166665120793e-5,"z":5.553001566215032e-5,"y":-0.0002847439228212578},"angle":{"x":9.163431222707421e-6,"z":-1.3871956148434617e-6,"y":1.6052114560831092e-5}},{"degrees_of_freedom":[5076,5077,5078,5079,5080,5081],"id":"n846","parent":"11","position":{"x":17.979694910895578,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5259127898841952e-6,"z":2.3728775070976042e-5,"y":-0.00019720044540243634},"angle":{"x":2.029944621433127e-5,"z":3.2458348978483345e-5,"y":-1.1351352443597765e-5}},{"degrees_of_freedom":[5082,5083,5084,5085,5086,5087],"id":"n847","parent":"11","position":{"x":20,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4085315845294137e-5,"z":3.0654676768099726e-5,"y":-0.00016467496305830724},"angle":{"x":-1.427954288201913e-5,"z":-2.1122684901322073e-7,"y":2.2440847652353718e-6}},{"degrees_of_freedom":[5088,5089,5090,5091,5092,5093],"id":"n848","parent":"11","position":{"x":22.020305089104422,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.300386857112435e-5,"z":1.3681250117498673e-5,"y":-0.00020310004662766565},"angle":{"x":2.21183295713532e-5,"z":-4.2429516236934626e-5,"y":1.8048232916726214e-5}},{"degrees_of_freedom":[5094,5095,5096,5097,5098,5099],"id":"n849","parent":"11","position":{"x":22.857142857142858,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.062334062251834e-5,"z":4.657700920077297e-5,"y":-0.00029086644625890654},"angle":{"x":1.5000458870405017e-5,"z":-1.0329544588630023e-6,"y":-5.075020743154878e-6}},{"degrees_of_freedom":[5100,5101,5102,5103,5104,5105],"id":"n850","parent":"11","position":{"x":22.020305089104422,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7318079396473766e-5,"z":7.097882694935065e-5,"y":-0.000376736865518564},"angle":{"x":7.888455221049903e-6,"z":4.009784557741376e-5,"y":6.1556734248759646e-6}},{"degrees_of_freedom":[5106,5107,5108,5109,5110,5111],"id":"n851","parent":"11","position":{"x":25,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5112,5113,5114,5115,5116,5117],"id":"n852","parent":"11","position":{"x":20,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5118,5119,5120,5121,5122,5123],"id":"n853","parent":"11","position":{"x":22.857142857142858,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5124,5125,5126,5127,5128,5129],"id":"n854","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5130,5131,5132,5133,5134,5135],"id":"n855","parent":"11","position":{"x":20,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5136,5137,5138,5139,5140,5141],"id":"n856","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5142,5143,5144,5145,5146,5147],"id":"n857","parent":"11","position":{"x":17.142857142857142,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5148,5149,5150,5151,5152,5153],"id":"n858","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5154,5155,5156,5157,5158,5159],"id":"n859","parent":"11","position":{"x":20,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5160,5161,5162,5163,5164,5165],"id":"n860","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5166,5167,5168,5169,5170,5171],"id":"n861","parent":"11","position":{"x":25,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-3.4923994723091654e-5,"z":0.0001181852966244914,"y":-0.0006207150889528164},"angle":{"x":6.095568704466468e-5,"z":-1.4343598663791722e-5,"y":-9.175726807808534e-6}},{"degrees_of_freedom":[5172,5173,5174,5175,5176,5177],"id":"n862","parent":"11","position":{"x":25,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9116781181668117e-5,"z":3.49704819706425e-6,"y":-0.0003067974878889031},"angle":{"x":5.585383954939906e-5,"z":7.378969094963392e-6,"y":6.945596421557684e-5}},{"degrees_of_freedom":[5178,5179,5180,5181,5182,5183],"id":"n863","parent":"11","position":{"x":25,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000141316232206683,"z":3.328005619676882e-5,"y":-0.00017988156340219163},"angle":{"x":2.183454355698826e-6,"z":4.9679720841884016e-5,"y":-2.835362685510162e-5}},{"degrees_of_freedom":[5184,5185,5186,5187,5188,5189],"id":"n864","parent":"11","position":{"x":25,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002351774922682589,"z":2.9726527690584893e-5,"y":-0.0002213465451922211},"angle":{"x":-1.3820394899463576e-5,"z":3.9701243917274594e-5,"y":-1.302192888443512e-7}},{"degrees_of_freedom":[5190,5191,5192,5193,5194,5195],"id":"n865","parent":"11","position":{"x":25,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00046177876230488115,"z":1.7846643998170233e-5,"y":-0.0003386640306539485},"angle":{"x":-8.188745005202734e-5,"z":5.3340929094114565e-5,"y":-3.870899077941761e-5}},{"degrees_of_freedom":[5196,5197,5198,5199,5200,5201],"id":"n866","parent":"11","position":{"x":25,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.876945503446289e-5,"z":1.729820082616824e-5,"y":-0.00043136301880867487},"angle":{"x":3.455991436978187e-5,"z":0.00031276338437860585,"y":0.0006950484838799174}},{"degrees_of_freedom":[5202,5203,5204,5205,5206,5207],"id":"n867","parent":"11","position":{"x":25,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.987864833555858e-5,"z":-4.647002514018972e-6,"y":-0.0003816250687535176},"angle":{"x":1.2250805284939558e-6,"z":4.9680114121864335e-5,"y":-4.9064139055939415e-5}},{"degrees_of_freedom":[5208,5209,5210,5211,5212,5213],"id":"n868","parent":"11","position":{"x":25,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015640923637326635,"z":7.1553286466420585e-6,"y":-0.0003403405765568337},"angle":{"x":-1.996077434051147e-5,"z":0.00010555788743027249,"y":-0.00020711126590521018}},{"degrees_of_freedom":[5214,5215,5216,5217,5218,5219],"id":"n869","parent":"11","position":{"x":25,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003411682830009422,"z":2.2355361616971104e-5,"y":-0.00022694251551556385},"angle":{"x":-8.210652948238054e-5,"z":4.60186575528014e-5,"y":-3.8709578111631766e-5}},{"degrees_of_freedom":[5220,5221,5222,5223,5224,5225],"id":"n870","parent":"11","position":{"x":25,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.3791510189321574e-10,"z":1.9984223322078068e-5,"y":-0.0001328870933162912},"angle":{"x":2.2456142747054123e-5,"z":0.0002499800310732417,"y":0.0005381810251427999}},{"degrees_of_freedom":[5226,5227,5228,5229,5230,5231],"id":"n871","parent":"11","position":{"x":20,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-6.619640936075839e-5,"z":8.775545770899125e-5,"y":-0.0006052652259695725},"angle":{"x":-8.862334276218445e-6,"z":3.809208348520768e-5,"y":-9.36379982993781e-6}},{"degrees_of_freedom":[5232,5233,5234,5235,5236,5237],"id":"n872","parent":"11","position":{"x":22.857142857142858,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.4511161267040204e-5,"z":0.0001025527192646492,"y":-0.0005051316439815026},"angle":{"x":1.306098515988908e-5,"z":1.1140289272145158e-5,"y":-1.2784055314212878e-5}},{"degrees_of_freedom":[5238,5239,5240,5241,5242,5243],"id":"n873","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.915878402721301e-5,"z":9.857350981292002e-5,"y":-0.0005961079585568783},"angle":{"x":-0.00028309116340229855,"z":0.00011633431527646081,"y":-8.082800312954306e-6}},{"degrees_of_freedom":[5244,5245,5246,5247,5248,5249],"id":"n874","parent":"11","position":{"x":20,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.529162142835551e-5,"z":8.746754531935644e-5,"y":-0.0006353332344129292},"angle":{"x":1.4655689422087567e-5,"z":1.155346863230116e-5,"y":-5.241144665632569e-6}},{"degrees_of_freedom":[5250,5251,5252,5253,5254,5255],"id":"n875","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.26335538484658e-5,"z":7.910540962794063e-5,"y":-0.0006500296282408909},"angle":{"x":0.00018800247586138317,"z":7.23522408479035e-5,"y":-4.476500020541698e-6}},{"degrees_of_freedom":[5256,5257,5258,5259,5260,5261],"id":"n876","parent":"11","position":{"x":17.142857142857142,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.954111348292716e-5,"z":7.519662944552527e-5,"y":-0.0006817877188989396},"angle":{"x":1.506116240020731e-5,"z":1.0719761967195176e-5,"y":-1.2376792177486221e-5}},{"degrees_of_freedom":[5262,5263,5264,5265,5266,5267],"id":"n877","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3297104970540368e-5,"z":7.778202580395959e-5,"y":-0.000591034271722683},"angle":{"x":-0.00014259073900344985,"z":6.596962576371202e-5,"y":-6.480299868136951e-6}},{"degrees_of_freedom":[5268,5269,5270,5271,5272,5273],"id":"n878","parent":"11","position":{"x":20,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6405389419293103e-5,"z":8.616674873820613e-5,"y":-0.0005549845086504093},"angle":{"x":1.3466255156410982e-5,"z":1.0306719048065382e-5,"y":-4.880985875209096e-6}},{"degrees_of_freedom":[5274,5275,5276,5277,5278,5279],"id":"n879","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.9870940183055213e-5,"z":9.780927393245586e-5,"y":-0.000541472900944528},"angle":{"x":4.622119315184703e-5,"z":2.2375756929820026e-5,"y":-9.172267662746528e-6}},{"degrees_of_freedom":[5280,5281,5282,5283,5284,5285],"id":"n880","parent":"11","position":{"x":20,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8413049997207885e-5,"z":6.461660519912971e-5,"y":-0.0003673483013419944},"angle":{"x":-5.29378363961616e-5,"z":-4.04691747787979e-5,"y":-1.1960035758168456e-5}},{"degrees_of_freedom":[5286,5287,5288,5289,5290,5291],"id":"n881","parent":"11","position":{"x":17.979694910895578,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0096802568732626e-5,"z":8.475406776157028e-5,"y":-0.00028206248505990226},"angle":{"x":1.4438450756764179e-5,"z":-2.6310329763294966e-5,"y":1.5948137268894246e-5}},{"degrees_of_freedom":[5292,5293,5294,5295,5296,5297],"id":"n882","parent":"11","position":{"x":17.142857142857142,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2283317166707337e-5,"z":6.892999077955585e-5,"y":-0.00021618977793732368},"angle":{"x":2.0975555289394654e-5,"z":-7.690895821519811e-6,"y":3.17300889230732e-5}},{"degrees_of_freedom":[5298,5299,5300,5301,5302,5303],"id":"n883","parent":"11","position":{"x":17.979694910895578,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.078876309690839e-5,"z":2.3367562763081858e-11,"y":-0.0001629625947781877},"angle":{"x":8.76888193346583e-5,"z":1.1288728424997627e-5,"y":-0.00012932995244083437}},{"degrees_of_freedom":[5304,5305,5306,5307,5308,5309],"id":"n884","parent":"11","position":{"x":20,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6218987140442757e-5,"z":0.0001879046865756806,"y":-0.0002109177990777828},"angle":{"x":-0.00016621908863843614,"z":-4.2644438421681216e-5,"y":-2.415786124843721e-5}},{"degrees_of_freedom":[5310,5311,5312,5313,5314,5315],"id":"n885","parent":"11","position":{"x":22.020305089104422,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4037823408584447e-6,"z":9.761248275731809e-5,"y":-0.00029987526645660186},"angle":{"x":4.968304536541242e-5,"z":-2.9596450014960764e-5,"y":6.527178297894975e-5}},{"degrees_of_freedom":[5316,5317,5318,5319,5320,5321],"id":"n886","parent":"11","position":{"x":22.857142857142858,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4443076324842364e-5,"z":0.00014336553184961232,"y":-0.0003589345080945855},"angle":{"x":8.777751554884233e-6,"z":-6.7966105786035875e-6,"y":-3.348238888652463e-5}},{"degrees_of_freedom":[5322,5323,5324,5325,5326,5327],"id":"n887","parent":"11","position":{"x":22.020305089104422,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.431059146057108e-5,"z":0.0001330799168325571,"y":-0.0004075087548528461},"angle":{"x":1.0798258316655042e-5,"z":1.7418813158109212e-5,"y":-3.8360401856286425e-5}},{"degrees_of_freedom":[5328,5329,5330,5331,5332,5333],"id":"n888","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.056644328223697e-5,"z":8.224881433979155e-5,"y":-0.001091160845542544},"angle":{"x":2.5500566786207723e-5,"z":-5.637111813656894e-5,"y":-8.828242887754213e-6}},{"degrees_of_freedom":[5334,5335,5336,5337,5338,5339],"id":"n889","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010045095887910417,"z":7.798805593277776e-5,"y":-0.0007167628924343613},"angle":{"x":-0.0007933760909406769,"z":-0.0003462858704417123,"y":-1.0254824785341804e-5}},{"degrees_of_freedom":[5340,5341,5342,5343,5344,5345],"id":"n890","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.609238463571016e-5,"z":3.8532782851525483e-5,"y":-0.00042538416313195955},"angle":{"x":0.00037275249818803923,"z":-0.0001869022770702059,"y":-1.2281396134001793e-5}},{"degrees_of_freedom":[5346,5347,5348,5349,5350,5351],"id":"n891","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.585645800440255e-5,"z":3.2011197010067814e-5,"y":-0.00011756377799524268},"angle":{"x":2.9567719150426072e-5,"z":-6.3699439121012e-5,"y":-1.0955848606421025e-5}},{"degrees_of_freedom":[5352,5353,5354,5355,5356,5357],"id":"n892","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.276379392055375e-5,"z":3.648380797292615e-5,"y":-0.0005377369142214572},"angle":{"x":-0.0007363348411126746,"z":-0.00033261816686775905,"y":-1.2876677119016368e-5}},{"degrees_of_freedom":[5358,5359,5360,5361,5362,5363],"id":"n893","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.153934013420636e-5,"z":7.787576116970879e-5,"y":-0.0008213174969308652},"angle":{"x":-1.0794403384982439e-5,"z":-4.314075700764764e-5,"y":-9.353524465905123e-6}},{"degrees_of_freedom":[5364,5365,5366,5367,5368,5369],"id":"n894","parent":"11","position":{"x":25,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00017906315571326642,"z":0.00025306067285702893,"y":-0.0011141012138001236},"angle":{"x":4.1946588295141905e-5,"z":-3.800802932602603e-6,"y":-2.278386671757943e-5}},{"degrees_of_freedom":[5370,5371,5372,5373,5374,5375],"id":"n895","parent":"11","position":{"x":25,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002115297066209477,"z":0.0002024797108463492,"y":-0.0008558943286480209},"angle":{"x":4.225556279621638e-5,"z":-1.6855751916574828e-5,"y":-8.462869636512097e-5}},{"degrees_of_freedom":[5376,5377,5378,5379,5380,5381],"id":"n896","parent":"11","position":{"x":25,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015976473250205224,"z":0.0001990030589516749,"y":-0.0008480344158042344},"angle":{"x":1.8393166021697842e-5,"z":-1.1975487557234377e-5,"y":-2.0063797134856754e-5}},{"degrees_of_freedom":[5382,5383,5384,5385,5386,5387],"id":"n897","parent":"11","position":{"x":25,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013759544492677344,"z":0.0002121389973881274,"y":-0.0008140037983874222},"angle":{"x":6.16825528021244e-7,"z":-7.54842095823057e-5,"y":2.3779749696440602e-5}},{"degrees_of_freedom":[5388,5389,5390,5391,5392,5393],"id":"n898","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00029636144434800135,"z":0.00019978866305984353,"y":-0.0008376398512456403},"angle":{"x":-1.7409164872566506e-5,"z":-0.00021298761372351177,"y":0.00041269948087011715}},{"degrees_of_freedom":[5394,5395,5396,5397,5398,5399],"id":"n899","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0006796534303710491,"z":0.00018859278266599287,"y":-0.0009204693337158228},"angle":{"x":-5.782899676545124e-5,"z":-7.475861429517933e-5,"y":2.1729729665311887e-5}},{"degrees_of_freedom":[5400,5401,5402,5403,5404,5405],"id":"n900","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020856132831337433,"z":0.00018881181625899723,"y":-0.000984236291938355},"angle":{"x":2.1998114538891726e-5,"z":-0.0003667913191718637,"y":-0.000804264466590967}},{"degrees_of_freedom":[5406,5407,5408,5409,5410,5411],"id":"n901","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3429203448037395e-5,"z":0.0001765110531495367,"y":-0.0009493171356823625},"angle":{"x":2.1919812480948856e-7,"z":-7.54836512211231e-5,"y":1.967788857351461e-5}},{"degrees_of_freedom":[5412,5413,5414,5415,5416,5417],"id":"n902","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014876843666585137,"z":0.00018307545767156985,"y":-0.0009203974670036413},"angle":{"x":-1.1207118141449294e-5,"z":-0.00010792134164740775,"y":0.0001114255693330539}},{"degrees_of_freedom":[5418,5419,5420,5421,5422,5423],"id":"n903","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0005403483708447906,"z":0.00019254289221990503,"y":-0.0008457031772649974},"angle":{"x":-5.230405188546227e-5,"z":-7.620883923156056e-5,"y":2.1728902071844383e-5}},{"degrees_of_freedom":[5424,5425,5426,5427,5428,5429],"id":"n904","parent":"11","position":{"x":25,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.097021347475403e-5,"z":0.000194795685302576,"y":-0.0007862418119411753},"angle":{"x":2.4522171598181404e-5,"z":-0.0004604020122584152,"y":-0.0010649333975350725}},{"degrees_of_freedom":[5430,5431,5432,5433,5434,5435],"id":"n905","parent":"11","position":{"x":20,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00026001672646664304,"z":0.00015728367525865575,"y":-0.0010213924136371723},"angle":{"x":-1.6884727240609048e-5,"z":-2.89196229410937e-5,"y":-3.6791070539645143e-5}},{"degrees_of_freedom":[5436,5437,5438,5439,5440,5441],"id":"n906","parent":"11","position":{"x":20,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00011823798545096379,"z":0.00016235667122802813,"y":-0.0010019357416676973},"angle":{"x":-6.892137734585887e-7,"z":-5.389163652106912e-6,"y":-2.7851440521117663e-5}},{"degrees_of_freedom":[5442,5443,5444,5445,5446,5447],"id":"n907","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017654993541914296,"z":0.00021041113628015155,"y":-0.001364817227661902},"angle":{"x":1.9683661008745045e-5,"z":-4.55131975061425e-5,"y":-2.6193628820789847e-5}},{"degrees_of_freedom":[5448,5449,5450,5451,5452,5453],"id":"n908","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001481358025172795,"z":0.00019967080564793792,"y":-0.0011448817925650181},"angle":{"x":0.0003707674234323482,"z":-0.00016944424394379413,"y":-2.3063205761460654e-5}},{"degrees_of_freedom":[5454,5455,5456,5457,5458,5459],"id":"n909","parent":"11","position":{"x":20,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013318063219704314,"z":0.00015843492517144252,"y":-0.001057984314828703},"angle":{"x":8.361200649087011e-6,"z":-3.657473949986096e-5,"y":-2.299619722625024e-5}},{"degrees_of_freedom":[5460,5461,5462,5463,5464,5465],"id":"n910","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015475999458284693,"z":0.00011914627533193573,"y":-0.0009665571924633061},"angle":{"x":-0.0002895489580340408,"z":-0.00014023070326199012,"y":-2.4954869656067915e-5}},{"degrees_of_freedom":[5466,5467,5468,5469,5470,5471],"id":"n911","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017849779650117568,"z":0.00010580254628750108,"y":-0.0007526163237320748},"angle":{"x":1.911700465723116e-5,"z":-3.0470753795248068e-5,"y":-2.4296192974277887e-5}},{"degrees_of_freedom":[5472,5473,5474,5475,5476,5477],"id":"n912","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020741893778170617,"z":0.00011500319916201388,"y":-0.0008869125889595148},"angle":{"x":0.00041468008705664754,"z":-0.00016969335214380538,"y":-2.5423475471735704e-5}},{"degrees_of_freedom":[5478,5479,5480,5481,5482,5483],"id":"n913","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022522122554203687,"z":0.00015760173557304637,"y":-0.000943215778008635},"angle":{"x":3.180766373482112e-5,"z":-3.707418837881564e-5,"y":-2.3258173836402186e-5}},{"degrees_of_freedom":[5484,5485,5486,5487,5488,5489],"id":"n914","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020589718844306727,"z":0.00019881366608468136,"y":-0.0010646018807449454},"angle":{"x":-0.00047867720528390706,"z":-0.00022190616217453347,"y":-2.5451971295654004e-5}},{"degrees_of_freedom":[5490,5491,5492,5493,5494,5495],"id":"n915","parent":"11","position":{"x":20,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020669575212003787,"z":8.188466218170956e-5,"y":-0.0007659362050513954},"angle":{"x":-2.9920117009160866e-5,"z":1.786124483643235e-5,"y":-8.946059030580182e-6}},{"degrees_of_freedom":[5496,5497,5498,5499,5500,5501],"id":"n916","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021259060009617343,"z":7.492014145027252e-5,"y":-0.0007564344906849808},"angle":{"x":1.1097092686553803e-5,"z":-1.9033737141312595e-5,"y":8.043831592332074e-6}},{"degrees_of_freedom":[5502,5503,5504,5505,5506,5507],"id":"n917","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022370394372184151,"z":9.060829986914004e-5,"y":-0.0007945818064307511},"angle":{"x":-9.711041631305747e-6,"z":-3.5790403887443577e-7,"y":-4.219149722586449e-5}},{"degrees_of_freedom":[5508,5509,5510,5511,5512,5513],"id":"n918","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021763105719043411,"z":3.5681577719371676e-5,"y":-0.0008278523505557328},"angle":{"x":-5.562732149117658e-6,"z":1.15164597602501e-5,"y":-5.2206460134733505e-5}},{"degrees_of_freedom":[5514,5515,5516,5517,5518,5519],"id":"n919","parent":"11","position":{"x":20,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020625051245163896,"z":-7.444643249182419e-5,"y":-0.0008677819829302173},"angle":{"x":-0.0001899055202715305,"z":1.8806380091240917e-5,"y":2.4150881637140976e-5}},{"degrees_of_freedom":[5520,5521,5522,5523,5524,5525],"id":"n920","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002001928798376462,"z":0.00013326582668009166,"y":-0.000881867134965445},"angle":{"x":0.00010814066250317105,"z":-1.548575808713291e-5,"y":0.00014760563942883058}},{"degrees_of_freedom":[5526,5527,5528,5529,5530,5531],"id":"n921","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019338150915912836,"z":3.831068711764734e-5,"y":-0.0008423946032869573},"angle":{"x":2.3385877501547185e-5,"z":1.3355657250443892e-7,"y":-5.701047497342239e-5}},{"degrees_of_freedom":[5532,5533,5534,5535,5536,5537],"id":"n922","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019831508918046237,"z":3.877260729270789e-5,"y":-0.0008055756533393796},"angle":{"x":1.0393694922447811e-5,"z":1.1178372860659586e-5,"y":-2.564458827517652e-5}},{"degrees_of_freedom":[5538,5539,5540,5541,5542,5543],"id":"n923","parent":"11","position":{"x":20,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012334437645225208,"z":0.00013456621047922118,"y":-0.0008887697339400886},"angle":{"x":2.3050142731556482e-7,"z":-6.875096997117852e-6,"y":-1.9822999260291755e-5}},{"degrees_of_freedom":[5544,5545,5546,5547,5548,5549],"id":"n924","parent":"11","position":{"x":17.979694910895578,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.918941436761857e-5,"z":9.507912654658032e-5,"y":-0.0008522095958447981},"angle":{"x":1.728160139383094e-5,"z":-2.982924619877173e-5,"y":-1.1640103365623991e-5}},{"degrees_of_freedom":[5550,5551,5552,5553,5554,5555],"id":"n925","parent":"11","position":{"x":17.142857142857142,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.761556448349228e-5,"z":4.947287905794044e-5,"y":-0.0007859610605709475},"angle":{"x":1.1326190926799395e-5,"z":-3.8067257605280697e-6,"y":-2.7722836177717284e-5}},{"degrees_of_freedom":[5556,5557,5558,5559,5560,5561],"id":"n926","parent":"11","position":{"x":17.979694910895578,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.323104725422965e-5,"z":5.026566823120217e-5,"y":-0.000726770312412798},"angle":{"x":5.6345516384595665e-8,"z":2.1124185187925277e-5,"y":-2.2201321005770773e-6}},{"degrees_of_freedom":[5562,5563,5564,5565,5566,5567],"id":"n927","parent":"11","position":{"x":20,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.62647540479624e-5,"z":5.439136883750504e-5,"y":-0.0007134768553236037},"angle":{"x":2.9831477261036057e-5,"z":-6.513927048567876e-6,"y":-1.432138301515883e-5}},{"degrees_of_freedom":[5568,5569,5570,5571,5572,5573],"id":"n928","parent":"11","position":{"x":22.020305089104422,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012063327586622697,"z":0.00010844528838410785,"y":-0.0007534540488999584},"angle":{"x":4.550825501427874e-6,"z":-3.48398801056382e-5,"y":-2.5024989505828142e-5}},{"degrees_of_freedom":[5574,5575,5576,5577,5578,5579],"id":"n929","parent":"11","position":{"x":22.857142857142858,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014835916118589672,"z":0.00014098227836251893,"y":-0.0008194668525592611},"angle":{"x":1.6735913081151576e-5,"z":-4.577309956264354e-6,"y":8.857178447021003e-8}},{"degrees_of_freedom":[5580,5581,5582,5583,5584,5585],"id":"n930","parent":"11","position":{"x":22.020305089104422,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014045527086150512,"z":0.00017366751402307992,"y":-0.0008762395531537886},"angle":{"x":2.739811892595429e-5,"z":2.317443801745135e-5,"y":-2.995610001935432e-5}},{"degrees_of_freedom":[5586,5587,5588,5589,5590,5591],"id":"n931","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.056751087511057e-5,"z":8.838161331068688e-5,"y":-0.0005437909983383422},"angle":{"x":-4.3746626104599265e-6,"z":-1.3989070581208939e-5,"y":-9.49138040118986e-6}},{"degrees_of_freedom":[5592,5593,5594,5595,5596,5597],"id":"n932","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.023308060681837e-5,"z":5.6710033723380876e-5,"y":-0.0005212094553122796},"angle":{"x":-0.00011576400338070203,"z":4.1438091695938066e-5,"y":-9.130324015246753e-6}},{"degrees_of_freedom":[5598,5599,5600,5601,5602,5603],"id":"n933","parent":"11","position":{"x":25,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.103529968155514e-5,"z":0.0002734435591084503,"y":-0.0010824230307493546},"angle":{"x":4.358019050494194e-5,"z":-1.5966762422577155e-5,"y":-2.778817998430705e-5}},{"degrees_of_freedom":[5604,5605,5606,5607,5608,5609],"id":"n934","parent":"11","position":{"x":25,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.0627003741720084e-5,"z":0.0002082891300784803,"y":-0.000810258855760044},"angle":{"x":1.989567766705882e-5,"z":-5.536411141132326e-6,"y":-1.3905894926755795e-5}},{"degrees_of_freedom":[5610,5611,5612,5613,5614,5615],"id":"n935","parent":"11","position":{"x":25,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011541160558892992,"z":0.00022245445035092007,"y":-0.0007853196964568344},"angle":{"x":1.6964073675023286e-6,"z":-8.513538533254542e-6,"y":3.1960382844347504e-5}},{"degrees_of_freedom":[5616,5617,5618,5619,5620,5621],"id":"n936","parent":"11","position":{"x":25,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000108251902232363,"z":0.00021180094456627838,"y":-0.0008059746560228602},"angle":{"x":-1.628467578800824e-5,"z":3.849155518324089e-5,"y":-9.896450137477447e-5}},{"degrees_of_freedom":[5622,5623,5624,5625,5626,5627],"id":"n937","parent":"11","position":{"x":25,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.551029634990768e-5,"z":0.0002017800229736931,"y":-0.0008892532662149782},"angle":{"x":-5.7145527327399685e-5,"z":-2.2886459759786466e-6,"y":1.8405018115728136e-5}},{"degrees_of_freedom":[5628,5629,5630,5631,5632,5633],"id":"n938","parent":"11","position":{"x":25,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.6612735857137025e-5,"z":0.00020192352278017658,"y":-0.0009513999145436874},"angle":{"x":2.4107097931362826e-5,"z":-3.3843512664626064e-5,"y":-7.287131716203229e-5}},{"degrees_of_freedom":[5634,5635,5636,5637,5638,5639],"id":"n939","parent":"11","position":{"x":25,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8618901910557462e-5,"z":0.00018640502446050128,"y":-0.0009165951183383419},"angle":{"x":1.2574587024407036e-6,"z":-6.685722084853497e-6,"y":1.916880638065365e-6}},{"degrees_of_freedom":[5640,5641,5642,5643,5644,5645],"id":"n940","parent":"11","position":{"x":25,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.833331749152887e-6,"z":0.00019302964590645522,"y":-0.0008887314036946435},"angle":{"x":-1.2286131559518881e-5,"z":5.4113467863199776e-5,"y":-0.00017207477056252157}},{"degrees_of_freedom":[5646,5647,5648,5649,5650,5651],"id":"n941","parent":"11","position":{"x":25,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.731837152224188e-5,"z":0.00020185003792481243,"y":-0.0008153719904288579},"angle":{"x":-5.040928696725223e-5,"z":-1.291062871717761e-5,"y":1.5472574003608842e-5}},{"degrees_of_freedom":[5652,5653,5654,5655,5656,5657],"id":"n942","parent":"11","position":{"x":25,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.907996911456499e-5,"z":0.00020350823518832504,"y":-0.0007595408005569289},"angle":{"x":2.4503158067979247e-5,"z":-5.4447662081824535e-5,"y":-9.998647054976524e-5}},{"degrees_of_freedom":[5658,5659,5660,5661,5662,5663],"id":"n943","parent":"11","position":{"x":20,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-2.728258778632977e-5,"z":0.00017759985388971617,"y":-0.0009839393480853885},"angle":{"x":2.360988959914519e-6,"z":1.5863940393576163e-6,"y":-2.7285595696895278e-5}},{"degrees_of_freedom":[5664,5665,5666,5667,5668,5669],"id":"n944","parent":"11","position":{"x":22.857142857142858,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.070144357937148e-5,"z":0.0002206093799969118,"y":-0.0010831373078182293},"angle":{"x":1.7024319630132774e-5,"z":-1.2323206146668716e-5,"y":-2.791275718146308e-5}},{"degrees_of_freedom":[5670,5671,5672,5673,5674,5675],"id":"n945","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.59406193012677e-6,"z":0.00021080324008926416,"y":-0.0010424993781153022},"angle":{"x":-6.0789818212725645e-5,"z":1.2765931341433418e-5,"y":-2.3391888281897775e-5}},{"degrees_of_freedom":[5676,5677,5678,5679,5680,5681],"id":"n946","parent":"11","position":{"x":20,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0321137535471396e-5,"z":0.0001730680158678022,"y":-0.001018022021197124},"angle":{"x":8.11018790488258e-6,"z":-1.4016190029315369e-5,"y":-2.092742906489785e-5}},{"degrees_of_freedom":[5682,5683,5684,5685,5686,5687],"id":"n947","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.219947609624655e-6,"z":0.0001345065629059837,"y":-0.0009799708218033482},"angle":{"x":-0.0001038323132154718,"z":-5.117156751413455e-5,"y":-2.375773029754374e-5}},{"degrees_of_freedom":[5688,5689,5690,5691,5692,5693],"id":"n948","parent":"11","position":{"x":17.142857142857142,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.61334289007843e-5,"z":0.0001213467516909184,"y":-0.0009065623469584384},"angle":{"x":9.585365046341222e-6,"z":-8.650135862725841e-6,"y":-2.815406193721765e-5}},{"degrees_of_freedom":[5694,5695,5696,5697,5698,5699],"id":"n949","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.657174949912506e-5,"z":0.0001313598841160409,"y":-0.0009343523227471082},"angle":{"x":0.00011263625919354183,"z":-4.386690329064345e-5,"y":-2.3258314997339752e-5}},{"degrees_of_freedom":[5700,5701,5702,5703,5704,5705],"id":"n950","parent":"11","position":{"x":20,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.628374716890876e-5,"z":0.00016869734282228414,"y":-0.0009419946480822645},"angle":{"x":1.84992684050134e-5,"z":-9.37945351494155e-6,"y":-2.1089782515407947e-5}},{"degrees_of_freedom":[5706,5707,5708,5709,5710,5711],"id":"n951","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.831102337841082e-5,"z":0.00020681050730284798,"y":-0.0009823131326755189},"angle":{"x":-0.00022144062071274633,"z":-9.573423730461837e-5,"y":-2.540441611871275e-5}},{"degrees_of_freedom":[5712,5713,5714,5715,5716,5717],"id":"n952","parent":"11","position":{"x":20,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.2541784416514535e-6,"z":0.00015917702877225643,"y":-0.0008707264574670966},"angle":{"x":1.9945417661280657e-6,"z":-2.9585284505801555e-6,"y":-1.7646738958051847e-5}},{"degrees_of_freedom":[5718,5719,5720,5721,5722,5723],"id":"n953","parent":"11","position":{"x":17.979694910895578,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1607022444768115e-5,"z":0.00012274432997488223,"y":-0.0008427155436297656},"angle":{"x":7.5045917260988055e-6,"z":-2.4488249392667447e-5,"y":-1.4045484083404452e-5}},{"degrees_of_freedom":[5724,5725,5726,5727,5728,5729],"id":"n954","parent":"11","position":{"x":17.142857142857142,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0458310926847283e-5,"z":9.53314920797617e-5,"y":-0.0007818233978150452},"angle":{"x":9.73036378461674e-6,"z":2.8372348226530294e-6,"y":-9.563711721185496e-6}},{"degrees_of_freedom":[5730,5731,5732,5733,5734,5735],"id":"n955","parent":"11","position":{"x":17.979694910895578,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2419236247906269e-5,"z":8.392520438136317e-5,"y":-0.0007188918629881736},"angle":{"x":8.136109348403809e-6,"z":2.5855160306868903e-5,"y":-6.606557420572786e-6}},{"degrees_of_freedom":[5736,5737,5738,5739,5740,5741],"id":"n956","parent":"11","position":{"x":20,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.748179573797197e-6,"z":9.032604695479501e-5,"y":-0.0006966091978898094},"angle":{"x":2.1105734096472817e-5,"z":-2.0040289429529764e-6,"y":-1.1876429420687036e-5}},{"degrees_of_freedom":[5742,5743,5744,5745,5746,5747],"id":"n957","parent":"11","position":{"x":22.020305089104422,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4878875784317433e-5,"z":0.00013205104249280046,"y":-0.0007266609885783784},"angle":{"x":1.1643627790039202e-5,"z":-2.924183913220792e-5,"y":-1.589808676573181e-5}},{"degrees_of_freedom":[5748,5749,5750,5751,5752,5753],"id":"n958","parent":"11","position":{"x":22.857142857142858,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.9185582975080074e-5,"z":0.00017089211080272395,"y":-0.0007878582485113672},"angle":{"x":1.5402064614782365e-5,"z":2.3541691118759173e-6,"y":-1.0433125487458407e-5}},{"degrees_of_freedom":[5754,5755,5756,5757,5758,5759],"id":"n959","parent":"11","position":{"x":22.020305089104422,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8312973583703643e-5,"z":0.0001922715139849221,"y":-0.0008494889985820131},"angle":{"x":1.932185077255382e-5,"z":2.8374777331499417e-5,"y":-2.3505030049203824e-5}},{"degrees_of_freedom":[5760,5761,5762,5763,5764,5765],"id":"n960","parent":"11","position":{"x":25,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00011613257785860701,"z":0.00028559884383256716,"y":-0.0010809990923913518},"angle":{"x":4.4115555054569554e-5,"z":-1.6242878757815312e-5,"y":-2.8345880269213035e-5}},{"degrees_of_freedom":[5766,5767,5768,5769,5770,5771],"id":"n961","parent":"11","position":{"x":25,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011970605462851171,"z":0.00021972522310382655,"y":-0.0008513327718672595},"angle":{"x":2.4017966337809556e-5,"z":-1.5146537576744626e-6,"y":-5.278696271025496e-6}},{"degrees_of_freedom":[5772,5773,5774,5775,5776,5777],"id":"n962","parent":"11","position":{"x":25,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8223039327236096e-5,"z":0.00023175067583875608,"y":-0.0007920874912136161},"angle":{"x":3.9580900232519095e-6,"z":2.1797392443239867e-5,"y":1.726140623552755e-5}},{"degrees_of_freedom":[5778,5779,5780,5781,5782,5783],"id":"n963","parent":"11","position":{"x":25,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.426099776679484e-5,"z":0.00022778244165011567,"y":-0.0008156405611143095},"angle":{"x":-1.1453490294076174e-5,"z":0.00012945827978819795,"y":-0.0002872497141569563}},{"degrees_of_freedom":[5784,5785,5786,5787,5788,5789],"id":"n964","parent":"11","position":{"x":25,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025369071497730603,"z":0.00021902112131489936,"y":-0.000887500606658087},"angle":{"x":-4.921828531068804e-5,"z":2.4815740478332404e-5,"y":8.724220522952861e-6}},{"degrees_of_freedom":[5790,5791,5792,5793,5794,5795],"id":"n965","parent":"11","position":{"x":25,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012951200423515287,"z":0.00021627128051416165,"y":-0.000942272759647362},"angle":{"x":2.6274417988402445e-5,"z":0.00010079102855509984,"y":0.0002236146814563892}},{"degrees_of_freedom":[5796,5797,5798,5799,5800,5801],"id":"n966","parent":"11","position":{"x":25,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.807523165875071e-5,"z":0.00019815085512729587,"y":-0.0009016058664425127},"angle":{"x":3.449444115137918e-6,"z":2.179747977882979e-5,"y":1.8681231987837228e-7}},{"degrees_of_freedom":[5802,5803,5804,5805,5806,5807],"id":"n967","parent":"11","position":{"x":25,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6325787734218424e-5,"z":0.0001986503907359358,"y":-0.0008722259185548926},"angle":{"x":-7.980861786676668e-6,"z":0.000129772111834001,"y":-0.0003052119061474077}},{"degrees_of_freedom":[5808,5809,5810,5811,5812,5813],"id":"n968","parent":"11","position":{"x":25,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.860787973207915e-5,"z":0.00020576195038654287,"y":-0.0008071549441895482},"angle":{"x":-4.3915267150056304e-5,"z":1.8778958760372518e-5,"y":8.724081928130412e-6}},{"degrees_of_freedom":[5814,5815,5816,5817,5818,5819],"id":"n969","parent":"11","position":{"x":25,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.924914591054044e-6,"z":0.00020976522779532795,"y":-0.0007581026241359491},"angle":{"x":2.785202131812573e-5,"z":9.78410375550975e-5,"y":0.00023234549285297367}},{"degrees_of_freedom":[5820,5821,5822,5823,5824,5825],"id":"n970","parent":"11","position":{"x":20,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00019510411910768547,"z":0.00018367747623371412,"y":-0.0010338444044698364},"angle":{"x":-2.950938529406498e-6,"z":2.1139392759323053e-5,"y":-3.0471765656590538e-5}},{"degrees_of_freedom":[5826,5827,5828,5829,5830,5831],"id":"n971","parent":"11","position":{"x":22.857142857142858,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011529499802053421,"z":0.0002327683680812553,"y":-0.001037118239270737},"angle":{"x":1.3374886566077063e-5,"z":-3.189292340294462e-6,"y":-3.176355006337787e-5}},{"degrees_of_freedom":[5832,5833,5834,5835,5836,5837],"id":"n972","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015128175052478928,"z":0.00022130631559702182,"y":-0.0010449699918285596},"angle":{"x":-0.0001312537540559142,"z":4.744849098204094e-5,"y":-2.4772889633597197e-5}},{"degrees_of_freedom":[5838,5839,5840,5841,5842,5843],"id":"n973","parent":"11","position":{"x":20,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016835645038000752,"z":0.00018318361916023994,"y":-0.001046656545844846},"angle":{"x":8.73543085780104e-6,"z":-2.541260238419065e-6,"y":-1.9914131441340877e-5}},{"degrees_of_freedom":[5844,5845,5846,5847,5848,5849],"id":"n974","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015305596219157588,"z":0.00014823294997790506,"y":-0.0010337228173269812},"angle":{"x":7.861080499325281e-5,"z":2.2659510220412626e-5,"y":-2.1075970266106433e-5}},{"degrees_of_freedom":[5850,5851,5852,5853,5854,5855],"id":"n975","parent":"11","position":{"x":17.142857142857142,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011983489300113279,"z":0.0001368678231593715,"y":-0.0010062779260575896},"angle":{"x":1.1343321076317493e-5,"z":-6.270100528784618e-7,"y":-3.0323480152088466e-5}},{"degrees_of_freedom":[5856,5857,5858,5859,5860,5861],"id":"n976","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.406789188071284e-5,"z":0.00014715043189177118,"y":-0.0009859988761661104},"angle":{"x":-4.432919931741666e-5,"z":1.9552322260625383e-5,"y":-2.2675366921687745e-5}},{"degrees_of_freedom":[5862,5863,5864,5865,5866,5867],"id":"n977","parent":"11","position":{"x":20,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.509651053228476e-5,"z":0.00018138139641539025,"y":-0.0009760332556320734},"angle":{"x":1.598265719812655e-5,"z":-1.2749912943004248e-6,"y":-1.9188321074708534e-5}},{"degrees_of_freedom":[5868,5869,5870,5871,5872,5873],"id":"n978","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.989502475511784e-5,"z":0.0002198107378170631,"y":-0.0009928174234416537},"angle":{"x":-2.1592836607432285e-6,"z":-8.185289986707893e-6,"y":-2.6195593544402168e-5}},{"degrees_of_freedom":[5874,5875,5876,5877,5878,5879],"id":"n979","parent":"11","position":{"x":20,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013021327087248133,"z":0.00018078831958875515,"y":-0.0008783688595814707},"angle":{"x":-4.800920182642415e-5,"z":-2.7956195388991924e-5,"y":-1.6367907323279532e-5}},{"degrees_of_freedom":[5880,5881,5882,5883,5884,5885],"id":"n980","parent":"11","position":{"x":17.979694910895578,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014344542547482992,"z":0.00018789607218847745,"y":-0.0008170145639159643},"angle":{"x":8.586472935050187e-5,"z":-2.0684073802164443e-5,"y":3.9084495196519316e-5}},{"degrees_of_freedom":[5886,5887,5888,5889,5890,5891],"id":"n981","parent":"11","position":{"x":17.142857142857142,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015999949369524478,"z":4.7130492157302275e-5,"y":-0.000780734567535907},"angle":{"x":3.6000806668558605e-5,"z":-2.1566847259665116e-6,"y":-8.129768152824105e-5}},{"degrees_of_freedom":[5892,5893,5894,5895,5896,5897],"id":"n982","parent":"11","position":{"x":17.979694910895578,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015285993460754027,"z":4.24308657156136e-5,"y":-0.0007488974875984642},"angle":{"x":2.9861783118203576e-5,"z":1.5045747867240877e-5,"y":-6.647681670111927e-5}},{"degrees_of_freedom":[5898,5899,5900,5901,5902,5903],"id":"n983","parent":"11","position":{"x":20,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015435291435386182,"z":0.00015174484169314676,"y":-0.0007722479821015037},"angle":{"x":-6.308637504984917e-5,"z":-2.6948956340847473e-5,"y":-2.797642085188588e-5}},{"degrees_of_freedom":[5904,5905,5906,5907,5908,5909],"id":"n984","parent":"11","position":{"x":22.020305089104422,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001413118759640148,"z":0.0001554726731123652,"y":-0.0008321020084978844},"angle":{"x":7.47442092600943e-5,"z":-2.033886049860613e-5,"y":2.9114890099266946e-5}},{"degrees_of_freedom":[5910,5911,5912,5913,5914,5915],"id":"n985","parent":"11","position":{"x":22.857142857142858,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012679917533941503,"z":0.00028211435426870604,"y":-0.0008705862324403198},"angle":{"x":2.4392296463935354e-5,"z":-1.5690052748018836e-6,"y":-9.244540185445359e-5}},{"degrees_of_freedom":[5916,5917,5918,5919,5920,5921],"id":"n986","parent":"11","position":{"x":22.020305089104422,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013306517411348687,"z":0.00025403241104286284,"y":-0.0009041748823324462},"angle":{"x":1.3483660499786848e-6,"z":1.3592323008908183e-5,"y":-3.6812494040648105e-5}},{"degrees_of_freedom":[5922,5923,5924,5925,5926,5927],"id":"n987","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018153738814181736,"z":0.00020896405008948897,"y":-0.001298544642084846},"angle":{"x":1.9684150840040965e-5,"z":-3.642510896911073e-5,"y":-2.532944603197467e-5}},{"degrees_of_freedom":[5928,5929,5930,5931,5932,5933],"id":"n988","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021003728361263844,"z":0.00019884817459734944,"y":-0.0010502608015290323},"angle":{"x":-0.00029932158406255387,"z":-0.00014940616446428452,"y":-2.3084630135576386e-5}},{"degrees_of_freedom":[5934,5935,5936,5937,5938,5939],"id":"n989","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002056187213019479,"z":0.00011521359793423275,"y":-0.0008775592927715755},"angle":{"x":0.00011657590820677158,"z":-6.939936032880663e-5,"y":-2.6371941366675758e-5}},{"degrees_of_freedom":[5940,5941,5942,5943,5944,5945],"id":"n990","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017561217192179693,"z":0.00010277650713158992,"y":-0.0007204017932964431},"angle":{"x":2.185336031671444e-5,"z":-3.4888399410105875e-5,"y":-2.7402268334402684e-5}},{"degrees_of_freedom":[5946,5947,5948,5949,5950,5951],"id":"n991","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014527185785734404,"z":0.00011386646445321194,"y":-0.0009619688259479992},"angle":{"x":-0.0003908702243245027,"z":-0.0001797867294022301,"y":-2.4849033915343047e-5}},{"degrees_of_freedom":[5952,5953,5954,5955,5956,5957],"id":"n992","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015413552015054353,"z":0.00019757059545461023,"y":-0.0011305415418356804},"angle":{"x":1.8508294466958988e-5,"z":-3.581388289210085e-5,"y":-2.3560272348757344e-5}},{"degrees_of_freedom":[5958,5959,5960,5961,5962,5963],"id":"n993","parent":"11","position":{"x":25,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003465807434780965,"z":0.0005412496888843552,"y":-0.0014578039309126188},"angle":{"x":0.00010065666094584769,"z":-7.424250552716979e-5,"y":-4.7982284437231014e-5}},{"degrees_of_freedom":[5964,5965,5966,5967,5968,5969],"id":"n994","parent":"11","position":{"x":25,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034443994924990225,"z":0.0003311744939028875,"y":-0.0012013738888424794},"angle":{"x":2.9282731783771e-5,"z":-1.8612258412495582e-5,"y":-0.00013095331293427537}},{"degrees_of_freedom":[5970,5971,5972,5973,5974,5975],"id":"n995","parent":"11","position":{"x":25,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018335538174215423,"z":0.00036143490727588495,"y":-0.00119820336801159},"angle":{"x":1.5671507340684386e-5,"z":-2.11179154814322e-5,"y":-3.910343243634448e-5}},{"degrees_of_freedom":[5976,5977,5978,5979,5980,5981],"id":"n996","parent":"11","position":{"x":25,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034516351960746025,"z":0.000358939584880894,"y":-0.0012113568389226865},"angle":{"x":1.627397817863604e-5,"z":-6.036605323532771e-5,"y":6.298956424197509e-5}},{"degrees_of_freedom":[5982,5983,5984,5985,5986,5987],"id":"n997","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00043533366706856725,"z":0.000377476581909928,"y":-0.00121011462489704},"angle":{"x":2.3548486664275374e-6,"z":-3.4323909230222386e-5,"y":-1.066772026423095e-5}},{"degrees_of_freedom":[5988,5989,5990,5991,5992,5993],"id":"n998","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0006530209870980152,"z":0.000380454992081902,"y":-0.0012660359188539831},"angle":{"x":-2.92166612512517e-5,"z":-6.563422631414564e-5,"y":7.78922244882966e-5}},{"degrees_of_freedom":[5994,5995,5996,5997,5998,5999],"id":"n999","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001206028871505289,"z":0.0003740302192469436,"y":-0.0012918132112558786},"angle":{"x":4.467163155051948e-5,"z":-0.00022453462730210154,"y":-0.0003715469808269526}},{"degrees_of_freedom":[6000,6001,6002,6003,6004,6005],"id":"n1000","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.993100930504041e-5,"z":0.00032704702553682863,"y":-0.0012542961531304792},"angle":{"x":1.544402340975307e-5,"z":-6.036549054233751e-5,"y":9.2792805390954e-5}},{"degrees_of_freedom":[6006,6007,6008,6009,6010,6011],"id":"n1001","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001651597422993056,"z":0.00031209027017537144,"y":-0.0012479160799221476},"angle":{"x":1.8753237231452664e-6,"z":0.0001377840058177281,"y":-0.0004676589640703936}},{"degrees_of_freedom":[6012,6013,6014,6015,6016,6017],"id":"n1002","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0003226363472122155,"z":0.0003152145648058457,"y":-0.001216885020985111},"angle":{"x":-2.043041127405782e-5,"z":-5.5097187389622514e-5,"y":7.789143117076114e-5}},{"degrees_of_freedom":[6018,6019,6020,6021,6022,6023],"id":"n1003","parent":"11","position":{"x":25,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001495691677704304,"z":0.0003227651301899976,"y":-0.001191868030030887},"angle":{"x":2.4675386542091653e-5,"z":-0.00036760341115053065,"y":-0.0008060096936408206}},{"degrees_of_freedom":[6024,6025,6026,6027,6028,6029],"id":"n1004","parent":"11","position":{"x":20,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0004933348584495549,"z":0.00035786379563815983,"y":-0.0012789219329173505},"angle":{"x":-8.49973647642149e-5,"z":-6.737177993918251e-5,"y":-6.915755672826587e-5}},{"degrees_of_freedom":[6030,6031,6032,6033,6034,6035],"id":"n1005","parent":"11","position":{"x":20,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00020531828651405078,"z":0.0003112023937294574,"y":-0.0012056420949745658},"angle":{"x":3.3368768785629825e-5,"z":-1.0194394228595412e-5,"y":-3.97190217371871e-5}},{"degrees_of_freedom":[6036,6037,6038,6039,6040,6041],"id":"n1006","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032081323791345996,"z":0.0004544205062658881,"y":-0.0018006707381213666},"angle":{"x":-2.960031488745556e-5,"z":-7.046010348313718e-5,"y":-4.778522534527203e-5}},{"degrees_of_freedom":[6042,6043,6044,6045,6046,6047],"id":"n1007","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002712418322271361,"z":0.00043112818282765766,"y":-0.0013382399611958163},"angle":{"x":0.00048167841523137525,"z":-0.00025122440957757745,"y":-5.014053376265527e-5}},{"degrees_of_freedom":[6048,6049,6050,6051,6052,6053],"id":"n1008","parent":"11","position":{"x":20,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023519666184707296,"z":0.0003403390588473424,"y":-0.001146694657710852},"angle":{"x":-5.118724477727225e-5,"z":-6.28280965282176e-5,"y":-5.2107452100334296e-5}},{"degrees_of_freedom":[6054,6055,6056,6057,6058,6059],"id":"n1009","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027389518518562087,"z":0.0002486370930491769,"y":-0.0010408202326390628},"angle":{"x":-0.0001716062537128072,"z":-0.00010540245469474039,"y":-5.165553992410391e-5}},{"degrees_of_freedom":[6060,6061,6062,6063,6064,6065],"id":"n1010","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003141840384859323,"z":0.00022269151043139286,"y":-0.0007852179341753125},"angle":{"x":-2.96005210971966e-5,"z":-5.5195731333387325e-5,"y":-4.330401363659303e-5}},{"degrees_of_freedom":[6066,6067,6068,6069,6070,6071],"id":"n1011","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00036465030809862257,"z":0.00024308938495597312,"y":-0.0011604239257457802},"angle":{"x":0.0005919837071302663,"z":-0.0002749588021664848,"y":-5.6294868937872875e-5}},{"degrees_of_freedom":[6072,6073,6074,6075,6076,6077],"id":"n1012","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00040910601532926884,"z":0.0003377122846447276,"y":-0.001315839256392031},"angle":{"x":-8.01309117314149e-6,"z":-6.282798594654827e-5,"y":-5.297779573032637e-5}},{"degrees_of_freedom":[6078,6079,6080,6081,6082,6083],"id":"n1013","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003739949321752301,"z":0.00043175281182929973,"y":-0.0014578432392476396},"angle":{"x":-0.0002893868214749931,"z":-0.00016230850413292966,"y":-5.3717408951211674e-5}},{"degrees_of_freedom":[6084,6085,6086,6087,6088,6089],"id":"n1014","parent":"11","position":{"x":20,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030613870566818135,"z":0.00022492625253739843,"y":-0.0010980682747584838},"angle":{"x":-9.464400835442641e-5,"z":-2.9726099383057797e-6,"y":-1.7609920870105908e-5}},{"degrees_of_freedom":[6090,6091,6092,6093,6094,6095],"id":"n1015","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032246875206908904,"z":0.0001813019727123543,"y":-0.001115719567251761},"angle":{"x":3.1566680831919077e-5,"z":-1.9512528727588108e-5,"y":3.466826679559262e-5}},{"degrees_of_freedom":[6096,6097,6098,6099,6100,6101],"id":"n1016","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034879835218355623,"z":0.00021606462074628271,"y":-0.0011462031020497436},"angle":{"x":-4.483664392165528e-5,"z":-1.0987361270553114e-5,"y":-0.0001497857345264983}},{"degrees_of_freedom":[6102,6103,6104,6105,6106,6107],"id":"n1017","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00036771240094581986,"z":1.3452290987543325e-7,"y":-0.001157288107556843},"angle":{"x":-8.462944558862541e-5,"z":-4.066865200890454e-6,"y":-5.371753449375782e-5}},{"degrees_of_freedom":[6108,6109,6110,6111,6112,6113],"id":"n1018","parent":"11","position":{"x":20,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00037240879391162136,"z":-0.00017921224960082448,"y":-0.001157351430351729},"angle":{"x":-0.0004958961250428509,"z":-2.1187370465259813e-6,"y":0.00011663482865464102}},{"degrees_of_freedom":[6114,6115,6116,6117,6118,6119],"id":"n1019","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003566356405312727,"z":0.0004714103013301518,"y":-0.0011345074833174864},"angle":{"x":0.00025063551166178616,"z":-2.7078276743668042e-5,"y":0.00042585834060208}},{"degrees_of_freedom":[6120,6121,6122,6123,6124,6125],"id":"n1020","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003216128803915253,"z":0.000321424426874906,"y":-0.0011031076736858925},"angle":{"x":8.940807894518986e-5,"z":-1.2153447482565812e-5,"y":3.662086081309668e-5}},{"degrees_of_freedom":[6126,6127,6128,6129,6130,6131],"id":"n1021","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030480957703184924,"z":0.00011014713606611877,"y":-0.0010952844707035761},"angle":{"x":0.0001546418811048924,"z":-2.3732241439358914e-6,"y":-0.00012086754266039518}},{"degrees_of_freedom":[6132,6133,6134,6135,6136,6137],"id":"n1022","parent":"11","position":{"x":20,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018647614884502713,"z":0.00017841784259433344,"y":-0.0011542434527373091},"angle":{"x":-4.3040313717593496e-5,"z":-1.221966182450079e-5,"y":-3.079377011485393e-5}},{"degrees_of_freedom":[6138,6139,6140,6141,6142,6143],"id":"n1023","parent":"11","position":{"x":17.979694910895578,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016182465628337454,"z":0.00015295099335581728,"y":-0.0011186897517901082},"angle":{"x":5.485638172406102e-5,"z":-2.4794203468120113e-5,"y":1.0837687509648966e-5}},{"degrees_of_freedom":[6144,6145,6146,6147,6148,6149],"id":"n1024","parent":"11","position":{"x":17.142857142857142,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013342211818318382,"z":5.26397650755824e-5,"y":-0.001079863216088444},"angle":{"x":1.1347150494421317e-5,"z":-9.18894453961561e-6,"y":-9.16109595492299e-5}},{"degrees_of_freedom":[6150,6151,6152,6153,6154,6155],"id":"n1025","parent":"11","position":{"x":17.979694910895578,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012423880266895776,"z":0.0001056555790541629,"y":-0.0010569597834943045},"angle":{"x":-3.397498231702643e-5,"z":5.551706781727728e-6,"y":2.0398228410388717e-5}},{"degrees_of_freedom":[6156,6157,6158,6159,6160,6161],"id":"n1026","parent":"11","position":{"x":20,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012590170408030012,"z":9.308695416519864e-5,"y":-0.0010646397415422582},"angle":{"x":7.8973402459408e-5,"z":-1.1733759117096397e-5,"y":-2.6542794112982343e-5}},{"degrees_of_freedom":[6162,6163,6164,6165,6166,6167],"id":"n1027","parent":"11","position":{"x":22.020305089104422,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014591174729413942,"z":0.0002126942024359844,"y":-0.001103286285267929},"angle":{"x":-3.343661839207212e-5,"z":-2.6966005921236306e-5,"y":-7.294830084240931e-5}},{"degrees_of_freedom":[6168,6169,6170,6171,6172,6173],"id":"n1028","parent":"11","position":{"x":22.857142857142858,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017716754266981053,"z":0.0002060492253274055,"y":-0.001145489507759319},"angle":{"x":1.5613314568937753e-5,"z":-1.0829872051131465e-5,"y":4.571732035148663e-5}},{"degrees_of_freedom":[6174,6175,6176,6177,6178,6179],"id":"n1029","parent":"11","position":{"x":22.020305089104422,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019155173583363698,"z":0.00027592023163712715,"y":-0.001167328730301222},"angle":{"x":6.560010548095514e-5,"z":1.7474375100111289e-6,"y":-7.471280598020482e-5}},{"degrees_of_freedom":[6180,6181,6182,6183,6184,6185],"id":"n1030","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.306208698796003e-5,"z":0.00020999707651220222,"y":-0.0009789501413927366},"angle":{"x":6.857138191966754e-6,"z":-1.4394585882657159e-5,"y":-2.4365976792715443e-5}},{"degrees_of_freedom":[6186,6187,6188,6189,6190,6191],"id":"n1031","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.93534952279571e-5,"z":0.00013131660568291634,"y":-0.0009342865686438009},"angle":{"x":-8.029243186164539e-5,"z":2.4331467769378365e-5,"y":-2.2740262316649643e-5}},{"degrees_of_freedom":[6192,6193,6194,6195,6196,6197],"id":"n1032","parent":"11","position":{"x":25,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00013168805156364412,"z":0.00048706307189083626,"y":-0.0014034694832604896},"angle":{"x":7.156884512567607e-5,"z":-3.9419046434210945e-5,"y":-5.414114450728121e-5}},{"degrees_of_freedom":[6198,6199,6200,6201,6202,6203],"id":"n1033","parent":"11","position":{"x":25,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.3440458109579725e-6,"z":0.0003753218693961269,"y":-0.001158952784902263},"angle":{"x":1.4883084280515624e-5,"z":-1.6676722447527682e-5,"y":-3.3666148567228865e-5}},{"degrees_of_freedom":[6204,6205,6206,6207,6208,6209],"id":"n1034","parent":"11","position":{"x":25,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016010310888893924,"z":0.0003782542051902883,"y":-0.00117495330862793},"angle":{"x":9.087917312020817e-6,"z":-3.185318763171574e-5,"y":3.2796324476652106e-5}},{"degrees_of_freedom":[6210,6211,6212,6213,6214,6215],"id":"n1035","parent":"11","position":{"x":25,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020785391239682072,"z":0.00038185042097583697,"y":-0.0011782438060947479},"angle":{"x":-6.44724817747606e-6,"z":1.4161442582316352e-5,"y":-9.664149099298956e-5}},{"degrees_of_freedom":[6216,6217,6218,6219,6220,6221],"id":"n1036","parent":"11","position":{"x":25,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032121863809136443,"z":0.0003787844636120234,"y":-0.0012364042447059384},"angle":{"x":-3.588573328066883e-5,"z":-3.1661797157229604e-5,"y":3.36775011927625e-5}},{"degrees_of_freedom":[6222,6223,6224,6225,6226,6227],"id":"n1037","parent":"11","position":{"x":25,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.273426540785066e-5,"z":0.0003760935376832616,"y":-0.001272590115799394},"angle":{"x":2.9065348282033476e-5,"z":-0.0001393132632614766,"y":-0.0002715181186667947}},{"degrees_of_freedom":[6228,6229,6230,6231,6232,6233],"id":"n1038","parent":"11","position":{"x":25,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9397825579290705e-5,"z":0.0003502728686807277,"y":-0.0012430103324618483},"angle":{"x":6.786825822805128e-6,"z":-3.1211559892805936e-5,"y":3.352862037683644e-5}},{"degrees_of_freedom":[6234,6235,6236,6237,6238,6239],"id":"n1039","parent":"11","position":{"x":25,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.541382594964439e-5,"z":0.0003457196194594996,"y":-0.001230723037026333},"angle":{"x":-2.0311279755034936e-6,"z":4.814032291657236e-5,"y":-0.0001916233008096931}},{"degrees_of_freedom":[6240,6241,6242,6243,6244,6245],"id":"n1040","parent":"11","position":{"x":25,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018842108127638358,"z":0.0003478752979839277,"y":-0.001188358056918626},"angle":{"x":-2.6814200742665337e-5,"z":-3.140289169982511e-5,"y":3.2648128531266905e-5}},{"degrees_of_freedom":[6246,6247,6248,6249,6250,6251],"id":"n1041","parent":"11","position":{"x":25,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7461834810808315e-5,"z":0.00035091050378097425,"y":-0.0011596428313387045},"angle":{"x":2.2349501377642497e-5,"z":-0.0001676858100612353,"y":-0.00035210743538718816}},{"degrees_of_freedom":[6252,6253,6254,6255,6256,6257],"id":"n1042","parent":"11","position":{"x":20,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-5.190344667910419e-6,"z":0.00029394886728419816,"y":-0.0011862116166823503},"angle":{"x":1.8990345786067032e-5,"z":-1.1195594258817201e-6,"y":-4.539745713752244e-5}},{"degrees_of_freedom":[6258,6259,6260,6261,6262,6263],"id":"n1043","parent":"11","position":{"x":22.857142857142858,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.675927461714832e-5,"z":0.00038896611174744954,"y":-0.0017080361894180422},"angle":{"x":-6.930484493764905e-7,"z":-5.8217159564912134e-5,"y":-3.546964251905904e-5}},{"degrees_of_freedom":[6264,6265,6266,6267,6268,6269],"id":"n1044","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.646650744216139e-5,"z":0.00037264946923922025,"y":-0.0013734880986841693},"angle":{"x":0.00046388271907296414,"z":-0.00022272068264195147,"y":-4.281791742361835e-5}},{"degrees_of_freedom":[6270,6271,6272,6273,6274,6275],"id":"n1045","parent":"11","position":{"x":20,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7366312351800378e-5,"z":0.00030075726056803256,"y":-0.0012341207720450646},"angle":{"x":-2.0596490790949653e-5,"z":-5.168276033884156e-5,"y":-3.958081935349728e-5}},{"degrees_of_freedom":[6276,6277,6278,6279,6280,6281],"id":"n1046","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.877520747950137e-5,"z":0.0002307659600422954,"y":-0.0011292253023605428},"angle":{"x":-0.00032265721082640555,"z":-0.00015822598975800267,"y":-4.13123396594181e-5}},{"degrees_of_freedom":[6282,6283,6284,6285,6286,6287],"id":"n1047","parent":"11","position":{"x":17.142857142857142,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.816740053809667e-5,"z":0.00020972810982030732,"y":-0.0008778999475718712},"angle":{"x":-1.7217419137388218e-6,"z":-4.4506919421667805e-5,"y":-3.2606527499625664e-5}},{"degrees_of_freedom":[6288,6289,6290,6291,6292,6293],"id":"n1048","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001264368136822526,"z":0.00022492485109946918,"y":-0.0011352250354962972},"angle":{"x":0.0004475174832426482,"z":-0.000203085705318293,"y":-4.391833861580221e-5}},{"degrees_of_freedom":[6294,6295,6296,6297,6298,6299],"id":"n1049","parent":"11","position":{"x":20,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015968630045255563,"z":0.00029738228362953046,"y":-0.0012410198767518405},"angle":{"x":1.8181927284882686e-5,"z":-5.104156704551368e-5,"y":-4.0041428184003504e-5}},{"degrees_of_freedom":[6300,6301,6302,6303,6304,6305],"id":"n1050","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013148065615087857,"z":0.0003686708888228026,"y":-0.0013772453497473054},"angle":{"x":-0.00027441012029055117,"z":-0.00015473955484493525,"y":-4.1631868350969744e-5}},{"degrees_of_freedom":[6306,6307,6308,6309,6310,6311],"id":"n1051","parent":"11","position":{"x":20,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.6386718003987964e-6,"z":0.00021475369194826305,"y":-0.0011349738008625788},"angle":{"x":-2.596413083061526e-5,"z":-7.3231027289264634e-6,"y":-3.188560371066655e-5}},{"degrees_of_freedom":[6312,6313,6314,6315,6316,6317],"id":"n1052","parent":"11","position":{"x":17.979694910895578,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.338111953628051e-5,"z":0.0001733751861435944,"y":-0.0011094414500509872},"angle":{"x":2.9917433009048053e-5,"z":-1.9539837073132787e-5,"y":-6.789925651880031e-6}},{"degrees_of_freedom":[6318,6319,6320,6321,6322,6323],"id":"n1053","parent":"11","position":{"x":17.142857142857142,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.115122568523683e-5,"z":0.00010756169604044676,"y":-0.001074740606122454},"angle":{"x":9.267813136549699e-6,"z":-4.080484608627699e-6,"y":-5.60852056797026e-5}},{"degrees_of_freedom":[6324,6325,6326,6327,6328,6329],"id":"n1054","parent":"11","position":{"x":17.979694910895578,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.060750328807464e-5,"z":0.0001356166527872203,"y":-0.0010477483747263244},"angle":{"x":-1.4305586332643812e-5,"z":9.98096505391779e-6,"y":1.383303055341725e-6}},{"degrees_of_freedom":[6330,6331,6332,6333,6334,6335],"id":"n1055","parent":"11","position":{"x":20,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.519906272450494e-5,"z":0.0001448268732581103,"y":-0.0010462314746874128},"angle":{"x":5.311622358794513e-5,"z":-7.052017265175942e-6,"y":-2.6568569190331817e-5}},{"degrees_of_freedom":[6336,6337,6338,6339,6340,6341],"id":"n1056","parent":"11","position":{"x":22.020305089104422,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.934372377289514e-5,"z":0.0002429364305659463,"y":-0.001075103565419469},"angle":{"x":-1.4377339868069824e-5,"z":-2.1929185642599176e-5,"y":-5.4500487089812166e-5}},{"degrees_of_freedom":[6342,6343,6344,6345,6346,6347],"id":"n1057","parent":"11","position":{"x":22.857142857142858,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.285553097362295e-6,"z":0.0002596236508839942,"y":-0.0011125393050505775},"angle":{"x":1.4051608005938553e-5,"z":-5.435962058559771e-6,"y":1.390762736186334e-5}},{"degrees_of_freedom":[6348,6349,6350,6351,6352,6353],"id":"n1058","parent":"11","position":{"x":22.020305089104422,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.950853995509961e-6,"z":0.00029958774033915405,"y":-0.001138103994013931},"angle":{"x":4.414866967942265e-5,"z":6.648275227445276e-6,"y":-5.897851202696606e-5}},{"degrees_of_freedom":[6354,6355,6356,6357,6358,6359],"id":"n1059","parent":"11","position":{"x":25,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00011826124973875342,"z":0.0005323412492756367,"y":-0.0013958898774304419},"angle":{"x":7.217634312954353e-5,"z":-3.704102849381559e-5,"y":-7.554244646271545e-5}},{"degrees_of_freedom":[6360,6361,6362,6363,6364,6365],"id":"n1060","parent":"11","position":{"x":25,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001882032068999121,"z":0.0004159385959079366,"y":-0.0012229603943095994},"angle":{"x":1.0223163675374219e-5,"z":-1.6592187271701554e-5,"y":-1.7520855579102156e-5}},{"degrees_of_freedom":[6366,6367,6368,6369,6370,6371],"id":"n1061","parent":"11","position":{"x":25,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.267175204116724e-5,"z":0.00040453896569636404,"y":-0.0012025685468884332},"angle":{"x":1.645969234408873e-5,"z":-1.5461816515560165e-5,"y":2.80615094102431e-5}},{"degrees_of_freedom":[6372,6373,6374,6375,6376,6377],"id":"n1062","parent":"11","position":{"x":25,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.955755119829541e-5,"z":0.0004243873765863948,"y":-0.001206127446353251},"angle":{"x":3.709547908872486e-6,"z":5.561709453989892e-5,"y":-0.0001729801250341836}},{"degrees_of_freedom":[6378,6379,6380,6381,6382,6383],"id":"n1063","parent":"11","position":{"x":25,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.103030176163831e-6,"z":0.00042532622782237936,"y":-0.0012411365948054368},"angle":{"x":-1.8199561734463418e-5,"z":-1.4045265032129049e-5,"y":2.4054830024597343e-5}},{"degrees_of_freedom":[6384,6385,6386,6387,6388,6389],"id":"n1064","parent":"11","position":{"x":25,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012675369800413492,"z":0.00041686680635607523,"y":-0.0012588008309012053},"angle":{"x":3.601927499847698e-5,"z":-8.819295586753883e-5,"y":-0.0001856665533934059}},{"degrees_of_freedom":[6390,6391,6392,6393,6394,6395],"id":"n1065","parent":"11","position":{"x":25,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018012794751991618,"z":0.0003782392448305781,"y":-0.001221225295889229},"angle":{"x":1.4799543637728183e-5,"z":-1.546197190876445e-5,"y":2.0047846060783027e-5}},{"degrees_of_freedom":[6396,6397,6398,6399,6400,6401],"id":"n1066","parent":"11","position":{"x":25,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001999485584355327,"z":0.0003585904325327747,"y":-0.001212253035379773},"angle":{"x":6.335269702628431e-6,"z":6.792122216565353e-5,"y":-0.00021579520326404694}},{"degrees_of_freedom":[6402,6403,6404,6405,6406,6407],"id":"n1067","parent":"11","position":{"x":25,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002477989017208701,"z":0.0003575880122329982,"y":-0.0011882893042830722},"angle":{"x":-1.2471351218932385e-5,"z":-1.6878522331993728e-5,"y":2.4055087835405723e-5}},{"degrees_of_freedom":[6408,6409,6410,6411,6412,6413],"id":"n1068","parent":"11","position":{"x":25,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010275186090599399,"z":0.00036606741269147494,"y":-0.0011746276309923043},"angle":{"x":2.985296943334521e-5,"z":-9.647433516559074e-5,"y":-0.0002010762669929268}},{"degrees_of_freedom":[6414,6415,6416,6417,6418,6419],"id":"n1069","parent":"11","position":{"x":20,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.000305844458333211,"z":0.00025336599247707,"y":-0.0013259021481708618},"angle":{"x":0.0001414938928811072,"z":5.8348835914838885e-5,"y":-4.677103441729697e-5}},{"degrees_of_freedom":[6420,6421,6422,6423,6424,6425],"id":"n1070","parent":"11","position":{"x":22.857142857142858,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001598945400638199,"z":0.00039431488578206477,"y":-0.0014597114353356172},"angle":{"x":3.2327337308485624e-5,"z":-2.527423721164314e-5,"y":-5.220378728473779e-5}},{"degrees_of_freedom":[6426,6427,6428,6429,6430,6431],"id":"n1071","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002210880573886298,"z":0.00037255956672345555,"y":-0.0013805984719660047},"angle":{"x":9.310811670725573e-5,"z":-4.676340548644601e-5,"y":-5.7872967531832536e-5}},{"degrees_of_freedom":[6432,6433,6434,6435,6436,6437],"id":"n1072","parent":"11","position":{"x":20,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002595851248673193,"z":0.00027976588090487386,"y":-0.0013478290282850059},"angle":{"x":2.1786038782243077e-5,"z":-2.1547187193332838e-5,"y":-4.874382708756486e-5}},{"degrees_of_freedom":[6438,6439,6440,6441,6442,6443],"id":"n1073","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00022321758600226158,"z":0.00019752606482236019,"y":-0.0012785968079020668},"angle":{"x":-0.0001971866806253283,"z":-9.896580428057878e-5,"y":-4.6367132319457195e-5}},{"degrees_of_freedom":[6444,6445,6446,6447,6448,6449],"id":"n1074","parent":"11","position":{"x":17.142857142857142,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016668598251759237,"z":0.00017768117267096258,"y":-0.0011114546040202065},"angle":{"x":3.2327811590627735e-5,"z":-1.782032952625485e-5,"y":-4.9040646990721704e-5}},{"degrees_of_freedom":[6450,6451,6452,6453,6454,6455],"id":"n1075","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011480775137217676,"z":0.00019912754010999395,"y":-0.0011479732899019304},"angle":{"x":0.00011290298959050466,"z":-4.6308103988740746e-5,"y":-4.2901675999558896e-5}},{"degrees_of_freedom":[6456,6457,6458,6459,6460,6461],"id":"n1076","parent":"11","position":{"x":20,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.64740758399423e-5,"z":0.0002763995609582451,"y":-0.001163100347811417},"angle":{"x":4.286886372000311e-5,"z":-2.1547487240254608e-5,"y":-4.68669280461637e-5}},{"degrees_of_freedom":[6462,6463,6464,6465,6466,6467],"id":"n1077","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010868175446707815,"z":0.00036616227741546675,"y":-0.001249975996967816},"angle":{"x":-0.00024125436916230735,"z":-0.00012200005271150009,"y":-5.469875317852261e-5}},{"degrees_of_freedom":[6468,6469,6470,6471,6472,6473],"id":"n1078","parent":"11","position":{"x":20,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020041812373870115,"z":0.0001972217918637139,"y":-0.0011891610248266175},"angle":{"x":0.00015918309068044804,"z":-2.0814119695366307e-5,"y":6.818821229578964e-5}},{"degrees_of_freedom":[6474,6475,6476,6477,6478,6479],"id":"n1079","parent":"11","position":{"x":17.979694910895578,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021318379708455887,"z":0.0002017723821002164,"y":-0.001140465481290087},"angle":{"x":9.49852691927289e-5,"z":-1.9555679296911986e-5,"y":4.159663890542496e-5}},{"degrees_of_freedom":[6480,6481,6482,6483,6484,6485],"id":"n1080","parent":"11","position":{"x":17.142857142857142,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002343757338727447,"z":4.468277692632966e-5,"y":-0.0011165368904751769},"angle":{"x":2.189023256461234e-5,"z":-5.400454056713462e-6,"y":-0.00013487041732860517}},{"degrees_of_freedom":[6486,6487,6488,6489,6490,6491],"id":"n1081","parent":"11","position":{"x":17.979694910895578,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00023713643005281773,"z":0.00011332252327157723,"y":-0.0011041837118303892},"angle":{"x":-5.024703025093626e-5,"z":4.721349167026895e-6,"y":3.9284233512998216e-5}},{"degrees_of_freedom":[6492,6493,6494,6495,6496,6497],"id":"n1082","parent":"11","position":{"x":20,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00024003166908533337,"z":7.600497569671414e-5,"y":-0.0011251818806083814},"angle":{"x":0.00018186966431178291,"z":-1.961831145195624e-5,"y":-5.6861642483460595e-5}},{"degrees_of_freedom":[6498,6499,6500,6501,6502,6503],"id":"n1083","parent":"11","position":{"x":22.020305089104422,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00022512988524254227,"z":0.0003430783145475804,"y":-0.001170818538337309},"angle":{"x":-0.0004084087254164157,"z":-2.0048658855414726e-5,"y":-0.0003013630416938561}},{"degrees_of_freedom":[6504,6505,6506,6507,6508,6509],"id":"n1084","parent":"11","position":{"x":22.857142857142858,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020130040998647333,"z":-0.00022984002476853817,"y":-0.0011935599397503874},"angle":{"x":-0.00010315969599908816,"z":-5.895782020737576e-6,"y":0.00043557343516574}},{"degrees_of_freedom":[6510,6511,6512,6513,6514,6515],"id":"n1085","parent":"11","position":{"x":22.020305089104422,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020226867539120555,"z":-7.374966174275859e-5,"y":-0.0012075778601795526},"angle":{"x":2.620010289698452e-5,"z":1.0076241912251214e-5,"y":0.00012327162298132442}}],"bar":false,"animation":{"speed":3,"exageration":2000,"showDisplacement":true},"viz":{"colorMap":0,"colorMaps":[[[0,[0.23,0.299,0.754]],[0.002,[0.23,0.299,0.754]],[0.004,[0.234,0.306,0.76]],[0.006,[0.234,0.306,0.76]],[0.008,[0.239,0.312,0.766]],[0.01,[0.239,0.312,0.766]],[0.012,[0.244,0.319,0.772]],[0.014,[0.244,0.319,0.772]],[0.016,[0.248,0.326,0.778]],[0.018,[0.248,0.326,0.778]],[0.02,[0.253,0.333,0.784]],[0.022,[0.253,0.333,0.784]],[0.023,[0.257,0.34,0.79]],[0.025,[0.257,0.34,0.79]],[0.027,[0.262,0.346,0.796]],[0.029,[0.262,0.346,0.796]],[0.031,[0.266,0.353,0.802]],[0.033,[0.266,0.353,0.802]],[0.035,[0.271,0.36,0.807]],[0.037,[0.271,0.36,0.807]],[0.039,[0.276,0.367,0.813]],[0.041,[0.276,0.367,0.813]],[0.043,[0.281,0.373,0.818]],[0.045,[0.281,0.373,0.818]],[0.047,[0.285,0.38,0.823]],[0.049,[0.285,0.38,0.823]],[0.051,[0.29,0.387,0.829]],[0.053,[0.29,0.387,0.829]],[0.055,[0.295,0.394,0.834]],[0.057,[0.295,0.394,0.834]],[0.059,[0.299,0.4,0.84]],[0.061,[0.299,0.4,0.84]],[0.063,[0.304,0.407,0.845]],[0.065,[0.304,0.407,0.845]],[0.067,[0.309,0.413,0.85]],[0.068,[0.309,0.413,0.85]],[0.07,[0.314,0.42,0.855]],[0.072,[0.314,0.42,0.855]],[0.074,[0.319,0.427,0.86]],[0.076,[0.319,0.427,0.86]],[0.078,[0.324,0.433,0.865]],[0.08,[0.324,0.433,0.865]],[0.082,[0.329,0.44,0.87]],[0.084,[0.329,0.44,0.87]],[0.086,[0.333,0.446,0.874]],[0.088,[0.333,0.446,0.874]],[0.09,[0.338,0.453,0.879]],[0.092,[0.338,0.453,0.879]],[0.094,[0.343,0.459,0.884]],[0.096,[0.343,0.459,0.884]],[0.098,[0.348,0.466,0.888]],[0.1,[0.348,0.466,0.888]],[0.102,[0.353,0.472,0.893]],[0.104,[0.353,0.472,0.893]],[0.106,[0.358,0.478,0.897]],[0.108,[0.358,0.478,0.897]],[0.11,[0.363,0.485,0.901]],[0.112,[0.363,0.485,0.901]],[0.114,[0.369,0.491,0.905]],[0.115,[0.369,0.491,0.905]],[0.117,[0.374,0.497,0.909]],[0.119,[0.374,0.497,0.909]],[0.121,[0.379,0.504,0.914]],[0.123,[0.379,0.504,0.914]],[0.125,[0.384,0.51,0.918]],[0.127,[0.384,0.51,0.918]],[0.129,[0.389,0.516,0.921]],[0.131,[0.389,0.516,0.921]],[0.133,[0.394,0.522,0.925]],[0.135,[0.394,0.522,0.925]],[0.137,[0.399,0.529,0.928]],[0.139,[0.399,0.529,0.928]],[0.141,[0.404,0.535,0.932]],[0.143,[0.404,0.535,0.932]],[0.145,[0.41,0.541,0.936]],[0.147,[0.41,0.541,0.936]],[0.149,[0.415,0.547,0.939]],[0.151,[0.415,0.547,0.939]],[0.153,[0.42,0.553,0.943]],[0.155,[0.42,0.553,0.943]],[0.157,[0.425,0.559,0.946]],[0.159,[0.425,0.559,0.946]],[0.16,[0.431,0.565,0.949]],[0.162,[0.431,0.565,0.949]],[0.164,[0.436,0.571,0.952]],[0.166,[0.436,0.571,0.952]],[0.168,[0.441,0.577,0.955]],[0.17,[0.441,0.577,0.955]],[0.172,[0.446,0.582,0.957]],[0.174,[0.446,0.582,0.957]],[0.176,[0.452,0.588,0.96]],[0.178,[0.452,0.588,0.96]],[0.18,[0.457,0.594,0.963]],[0.182,[0.457,0.594,0.963]],[0.184,[0.462,0.6,0.966]],[0.186,[0.462,0.6,0.966]],[0.188,[0.468,0.606,0.969]],[0.19,[0.468,0.606,0.969]],[0.192,[0.473,0.611,0.971]],[0.194,[0.473,0.611,0.971]],[0.196,[0.478,0.617,0.973]],[0.198,[0.478,0.617,0.973]],[0.2,[0.484,0.622,0.975]],[0.202,[0.484,0.622,0.975]],[0.204,[0.489,0.628,0.977]],[0.205,[0.489,0.628,0.977]],[0.207,[0.495,0.633,0.979]],[0.209,[0.495,0.633,0.979]],[0.211,[0.5,0.639,0.981]],[0.213,[0.5,0.639,0.981]],[0.215,[0.505,0.644,0.983]],[0.217,[0.505,0.644,0.983]],[0.219,[0.511,0.649,0.985]],[0.221,[0.511,0.649,0.985]],[0.223,[0.516,0.654,0.986]],[0.225,[0.516,0.654,0.986]],[0.227,[0.522,0.66,0.988]],[0.229,[0.522,0.66,0.988]],[0.231,[0.527,0.665,0.989]],[0.233,[0.527,0.665,0.989]],[0.235,[0.533,0.67,0.99]],[0.237,[0.533,0.67,0.99]],[0.239,[0.538,0.675,0.992]],[0.241,[0.538,0.675,0.992]],[0.243,[0.543,0.68,0.993]],[0.245,[0.543,0.68,0.993]],[0.247,[0.549,0.685,0.994]],[0.249,[0.549,0.685,0.994]],[0.25,[0.554,0.69,0.996]],[0.252,[0.554,0.69,0.996]],[0.254,[0.56,0.695,0.996]],[0.256,[0.56,0.695,0.996]],[0.258,[0.565,0.699,0.997]],[0.26,[0.565,0.699,0.997]],[0.262,[0.571,0.704,0.997]],[0.264,[0.571,0.704,0.997]],[0.266,[0.576,0.709,0.998]],[0.268,[0.576,0.709,0.998]],[0.27,[0.581,0.713,0.998]],[0.272,[0.581,0.713,0.998]],[0.274,[0.587,0.718,0.999]],[0.276,[0.587,0.718,0.999]],[0.278,[0.592,0.723,0.999]],[0.28,[0.592,0.723,0.999]],[0.282,[0.598,0.727,1]],[0.284,[0.598,0.727,1]],[0.286,[0.603,0.732,1]],[0.288,[0.603,0.732,1]],[0.29,[0.609,0.736,0.999]],[0.292,[0.609,0.736,0.999]],[0.294,[0.614,0.74,0.999]],[0.295,[0.614,0.74,0.999]],[0.297,[0.619,0.744,0.999]],[0.299,[0.619,0.744,0.999]],[0.301,[0.625,0.748,0.999]],[0.303,[0.625,0.748,0.999]],[0.305,[0.63,0.753,0.999]],[0.307,[0.63,0.753,0.999]],[0.309,[0.635,0.757,0.998]],[0.311,[0.635,0.757,0.998]],[0.313,[0.641,0.761,0.998]],[0.315,[0.641,0.761,0.998]],[0.317,[0.646,0.764,0.997]],[0.319,[0.646,0.764,0.997]],[0.321,[0.651,0.768,0.996]],[0.323,[0.651,0.768,0.996]],[0.325,[0.657,0.772,0.995]],[0.327,[0.657,0.772,0.995]],[0.329,[0.662,0.775,0.994]],[0.331,[0.662,0.775,0.994]],[0.333,[0.667,0.779,0.993]],[0.335,[0.667,0.779,0.993]],[0.337,[0.673,0.783,0.992]],[0.339,[0.673,0.783,0.992]],[0.341,[0.678,0.787,0.991]],[0.342,[0.678,0.787,0.991]],[0.344,[0.683,0.79,0.99]],[0.346,[0.683,0.79,0.99]],[0.348,[0.688,0.793,0.988]],[0.35,[0.688,0.793,0.988]],[0.352,[0.693,0.796,0.986]],[0.354,[0.693,0.796,0.986]],[0.356,[0.698,0.799,0.985]],[0.358,[0.698,0.799,0.985]],[0.36,[0.704,0.803,0.983]],[0.362,[0.704,0.803,0.983]],[0.364,[0.709,0.806,0.981]],[0.366,[0.709,0.806,0.981]],[0.368,[0.714,0.809,0.979]],[0.37,[0.714,0.809,0.979]],[0.372,[0.719,0.812,0.978]],[0.374,[0.719,0.812,0.978]],[0.376,[0.724,0.815,0.976]],[0.378,[0.724,0.815,0.976]],[0.38,[0.729,0.817,0.973]],[0.382,[0.729,0.817,0.973]],[0.384,[0.734,0.82,0.971]],[0.386,[0.734,0.82,0.971]],[0.387,[0.739,0.823,0.968]],[0.389,[0.739,0.823,0.968]],[0.391,[0.744,0.825,0.966]],[0.393,[0.744,0.825,0.966]],[0.395,[0.749,0.828,0.963]],[0.397,[0.749,0.828,0.963]],[0.399,[0.754,0.83,0.961]],[0.401,[0.754,0.83,0.961]],[0.403,[0.759,0.833,0.958]],[0.405,[0.759,0.833,0.958]],[0.407,[0.763,0.835,0.956]],[0.409,[0.763,0.835,0.956]],[0.411,[0.768,0.837,0.952]],[0.413,[0.768,0.837,0.952]],[0.415,[0.773,0.839,0.949]],[0.417,[0.773,0.839,0.949]],[0.419,[0.777,0.841,0.946]],[0.421,[0.777,0.841,0.946]],[0.423,[0.782,0.843,0.943]],[0.425,[0.782,0.843,0.943]],[0.427,[0.787,0.845,0.94]],[0.429,[0.787,0.845,0.94]],[0.431,[0.791,0.847,0.937]],[0.432,[0.791,0.847,0.937]],[0.434,[0.796,0.849,0.933]],[0.436,[0.796,0.849,0.933]],[0.438,[0.801,0.85,0.93]],[0.44,[0.801,0.85,0.93]],[0.442,[0.805,0.852,0.926]],[0.444,[0.805,0.852,0.926]],[0.446,[0.809,0.853,0.922]],[0.448,[0.809,0.853,0.922]],[0.45,[0.814,0.854,0.918]],[0.452,[0.814,0.854,0.918]],[0.454,[0.818,0.856,0.915]],[0.456,[0.818,0.856,0.915]],[0.458,[0.822,0.857,0.911]],[0.46,[0.822,0.857,0.911]],[0.462,[0.827,0.858,0.907]],[0.464,[0.827,0.858,0.907]],[0.466,[0.831,0.86,0.903]],[0.468,[0.831,0.86,0.903]],[0.47,[0.835,0.861,0.899]],[0.472,[0.835,0.861,0.899]],[0.474,[0.839,0.861,0.894]],[0.476,[0.839,0.861,0.894]],[0.477,[0.843,0.862,0.89]],[0.479,[0.843,0.862,0.89]],[0.481,[0.847,0.862,0.886]],[0.483,[0.847,0.862,0.886]],[0.485,[0.851,0.863,0.881]],[0.487,[0.851,0.863,0.881]],[0.489,[0.855,0.864,0.877]],[0.491,[0.855,0.864,0.877]],[0.493,[0.859,0.864,0.872]],[0.495,[0.859,0.864,0.872]],[0.497,[0.863,0.865,0.868]],[0.499,[0.863,0.865,0.868]],[0.501,[0.867,0.864,0.863]],[0.503,[0.867,0.864,0.863]],[0.505,[0.871,0.862,0.857]],[0.507,[0.871,0.862,0.857]],[0.509,[0.876,0.86,0.851]],[0.511,[0.876,0.86,0.851]],[0.513,[0.88,0.858,0.846]],[0.515,[0.88,0.858,0.846]],[0.517,[0.884,0.856,0.84]],[0.519,[0.884,0.856,0.84]],[0.521,[0.888,0.854,0.835]],[0.523,[0.888,0.854,0.835]],[0.524,[0.892,0.852,0.829]],[0.526,[0.892,0.852,0.829]],[0.528,[0.896,0.85,0.823]],[0.53,[0.896,0.85,0.823]],[0.532,[0.9,0.848,0.818]],[0.534,[0.9,0.848,0.818]],[0.536,[0.903,0.845,0.812]],[0.538,[0.903,0.845,0.812]],[0.54,[0.906,0.842,0.806]],[0.542,[0.906,0.842,0.806]],[0.544,[0.909,0.839,0.8]],[0.546,[0.909,0.839,0.8]],[0.548,[0.913,0.837,0.795]],[0.55,[0.913,0.837,0.795]],[0.552,[0.916,0.834,0.789]],[0.554,[0.916,0.834,0.789]],[0.556,[0.919,0.831,0.783]],[0.558,[0.919,0.831,0.783]],[0.56,[0.923,0.829,0.777]],[0.562,[0.923,0.829,0.777]],[0.564,[0.926,0.826,0.771]],[0.566,[0.926,0.826,0.771]],[0.568,[0.928,0.822,0.765]],[0.569,[0.928,0.822,0.765]],[0.571,[0.931,0.819,0.759]],[0.573,[0.931,0.819,0.759]],[0.575,[0.933,0.816,0.753]],[0.577,[0.933,0.816,0.753]],[0.579,[0.936,0.812,0.747]],[0.581,[0.936,0.812,0.747]],[0.583,[0.938,0.809,0.741]],[0.585,[0.938,0.809,0.741]],[0.587,[0.941,0.806,0.735]],[0.589,[0.941,0.806,0.735]],[0.591,[0.943,0.802,0.729]],[0.593,[0.943,0.802,0.729]],[0.595,[0.946,0.799,0.723]],[0.597,[0.946,0.799,0.723]],[0.599,[0.947,0.795,0.717]],[0.601,[0.947,0.795,0.717]],[0.603,[0.949,0.791,0.711]],[0.605,[0.949,0.791,0.711]],[0.607,[0.951,0.787,0.705]],[0.609,[0.951,0.787,0.705]],[0.611,[0.953,0.783,0.699]],[0.613,[0.953,0.783,0.699]],[0.614,[0.955,0.779,0.693]],[0.616,[0.955,0.779,0.693]],[0.618,[0.956,0.775,0.686]],[0.62,[0.956,0.775,0.686]],[0.622,[0.958,0.771,0.68]],[0.624,[0.958,0.771,0.68]],[0.626,[0.96,0.767,0.674]],[0.628,[0.96,0.767,0.674]],[0.63,[0.961,0.763,0.668]],[0.632,[0.961,0.763,0.668]],[0.634,[0.962,0.758,0.662]],[0.636,[0.962,0.758,0.662]],[0.638,[0.963,0.754,0.656]],[0.64,[0.963,0.754,0.656]],[0.642,[0.964,0.749,0.649]],[0.644,[0.964,0.749,0.649]],[0.646,[0.965,0.745,0.643]],[0.648,[0.965,0.745,0.643]],[0.65,[0.966,0.74,0.637]],[0.652,[0.966,0.74,0.637]],[0.654,[0.967,0.736,0.631]],[0.656,[0.967,0.736,0.631]],[0.658,[0.968,0.731,0.625]],[0.659,[0.968,0.731,0.625]],[0.661,[0.968,0.726,0.618]],[0.663,[0.968,0.726,0.618]],[0.665,[0.968,0.721,0.612]],[0.667,[0.968,0.721,0.612]],[0.669,[0.969,0.716,0.606]],[0.671,[0.969,0.716,0.606]],[0.673,[0.969,0.711,0.6]],[0.675,[0.969,0.711,0.6]],[0.677,[0.969,0.706,0.594]],[0.679,[0.969,0.706,0.594]],[0.681,[0.97,0.701,0.588]],[0.683,[0.97,0.701,0.588]],[0.685,[0.97,0.696,0.581]],[0.687,[0.97,0.696,0.581]],[0.689,[0.97,0.69,0.575]],[0.691,[0.97,0.69,0.575]],[0.693,[0.969,0.685,0.569]],[0.695,[0.969,0.685,0.569]],[0.697,[0.969,0.679,0.563]],[0.699,[0.969,0.679,0.563]],[0.701,[0.968,0.674,0.557]],[0.703,[0.968,0.674,0.557]],[0.705,[0.968,0.668,0.55]],[0.706,[0.968,0.668,0.55]],[0.708,[0.968,0.663,0.544]],[0.71,[0.968,0.663,0.544]],[0.712,[0.967,0.657,0.538]],[0.714,[0.967,0.657,0.538]],[0.716,[0.967,0.652,0.532]],[0.718,[0.967,0.652,0.532]],[0.72,[0.966,0.646,0.526]],[0.722,[0.966,0.646,0.526]],[0.724,[0.965,0.64,0.52]],[0.726,[0.965,0.64,0.52]],[0.728,[0.964,0.634,0.514]],[0.73,[0.964,0.634,0.514]],[0.732,[0.963,0.628,0.508]],[0.734,[0.963,0.628,0.508]],[0.736,[0.962,0.622,0.502]],[0.738,[0.962,0.622,0.502]],[0.74,[0.96,0.616,0.495]],[0.742,[0.96,0.616,0.495]],[0.744,[0.959,0.61,0.489]],[0.746,[0.959,0.61,0.489]],[0.748,[0.958,0.604,0.483]],[0.75,[0.958,0.604,0.483]],[0.751,[0.957,0.598,0.477]],[0.753,[0.957,0.598,0.477]],[0.755,[0.955,0.592,0.471]],[0.757,[0.955,0.592,0.471]],[0.759,[0.953,0.585,0.465]],[0.761,[0.953,0.585,0.465]],[0.763,[0.951,0.579,0.459]],[0.765,[0.951,0.579,0.459]],[0.767,[0.949,0.572,0.453]],[0.769,[0.949,0.572,0.453]],[0.771,[0.948,0.566,0.447]],[0.773,[0.948,0.566,0.447]],[0.775,[0.946,0.56,0.442]],[0.777,[0.946,0.56,0.442]],[0.779,[0.944,0.553,0.436]],[0.781,[0.944,0.553,0.436]],[0.783,[0.942,0.546,0.43]],[0.785,[0.942,0.546,0.43]],[0.787,[0.939,0.54,0.424]],[0.789,[0.939,0.54,0.424]],[0.791,[0.937,0.533,0.418]],[0.793,[0.937,0.533,0.418]],[0.795,[0.934,0.526,0.412]],[0.796,[0.934,0.526,0.412]],[0.798,[0.932,0.519,0.406]],[0.8,[0.932,0.519,0.406]],[0.802,[0.929,0.512,0.401]],[0.804,[0.929,0.512,0.401]],[0.806,[0.927,0.505,0.395]],[0.808,[0.927,0.505,0.395]],[0.81,[0.924,0.499,0.389]],[0.812,[0.924,0.499,0.389]],[0.814,[0.921,0.491,0.383]],[0.816,[0.921,0.491,0.383]],[0.818,[0.918,0.484,0.378]],[0.82,[0.918,0.484,0.378]],[0.822,[0.915,0.477,0.372]],[0.824,[0.915,0.477,0.372]],[0.826,[0.912,0.47,0.367]],[0.828,[0.912,0.47,0.367]],[0.83,[0.909,0.462,0.361]],[0.832,[0.909,0.462,0.361]],[0.834,[0.906,0.455,0.355]],[0.836,[0.906,0.455,0.355]],[0.838,[0.903,0.448,0.35]],[0.84,[0.903,0.448,0.35]],[0.841,[0.9,0.441,0.344]],[0.843,[0.9,0.441,0.344]],[0.845,[0.896,0.433,0.339]],[0.847,[0.896,0.433,0.339]],[0.849,[0.892,0.425,0.333]],[0.851,[0.892,0.425,0.333]],[0.853,[0.888,0.418,0.328]],[0.855,[0.888,0.418,0.328]],[0.857,[0.885,0.41,0.323]],[0.859,[0.885,0.41,0.323]],[0.861,[0.881,0.402,0.317]],[0.863,[0.881,0.402,0.317]],[0.865,[0.877,0.395,0.312]],[0.867,[0.877,0.395,0.312]],[0.869,[0.873,0.387,0.306]],[0.871,[0.873,0.387,0.306]],[0.873,[0.87,0.379,0.301]],[0.875,[0.87,0.379,0.301]],[0.877,[0.865,0.371,0.296]],[0.879,[0.865,0.371,0.296]],[0.881,[0.861,0.363,0.291]],[0.883,[0.861,0.363,0.291]],[0.885,[0.857,0.355,0.285]],[0.886,[0.857,0.355,0.285]],[0.888,[0.852,0.346,0.28]],[0.89,[0.852,0.346,0.28]],[0.892,[0.848,0.338,0.275]],[0.894,[0.848,0.338,0.275]],[0.896,[0.844,0.33,0.27]],[0.898,[0.844,0.33,0.27]],[0.9,[0.839,0.322,0.265]],[0.902,[0.839,0.322,0.265]],[0.904,[0.835,0.314,0.26]],[0.906,[0.835,0.314,0.26]],[0.908,[0.83,0.305,0.255]],[0.91,[0.83,0.305,0.255]],[0.912,[0.825,0.296,0.25]],[0.914,[0.825,0.296,0.25]],[0.916,[0.82,0.287,0.245]],[0.918,[0.82,0.287,0.245]],[0.92,[0.816,0.278,0.24]],[0.922,[0.816,0.278,0.24]],[0.924,[0.811,0.269,0.235]],[0.926,[0.811,0.269,0.235]],[0.928,[0.806,0.26,0.231]],[0.93,[0.806,0.26,0.231]],[0.932,[0.801,0.251,0.226]],[0.933,[0.801,0.251,0.226]],[0.935,[0.796,0.242,0.221]],[0.937,[0.796,0.242,0.221]],[0.939,[0.791,0.231,0.216]],[0.941,[0.791,0.231,0.216]],[0.943,[0.785,0.221,0.212]],[0.945,[0.785,0.221,0.212]],[0.947,[0.78,0.21,0.207]],[0.949,[0.78,0.21,0.207]],[0.951,[0.774,0.2,0.203]],[0.953,[0.774,0.2,0.203]],[0.955,[0.769,0.189,0.198]],[0.957,[0.769,0.189,0.198]],[0.959,[0.764,0.179,0.193]],[0.961,[0.764,0.179,0.193]],[0.963,[0.758,0.168,0.189]],[0.965,[0.758,0.168,0.189]],[0.967,[0.753,0.158,0.184]],[0.969,[0.753,0.158,0.184]],[0.971,[0.747,0.14,0.18]],[0.973,[0.747,0.14,0.18]],[0.975,[0.741,0.122,0.176]],[0.977,[0.741,0.122,0.176]],[0.978,[0.735,0.104,0.171]],[0.98,[0.735,0.104,0.171]],[0.982,[0.729,0.087,0.167]],[0.984,[0.729,0.087,0.167]],[0.986,[0.723,0.069,0.163]],[0.988,[0.723,0.069,0.163]],[0.99,[0.717,0.051,0.159]],[0.992,[0.717,0.051,0.159]],[0.994,[0.712,0.033,0.154]],[0.996,[0.712,0.033,0.154]],[0.998,[0.706,0.016,0.15]],[1,[0.706,0.016,0.15]]],[[0,[1,1,0.851]],[0.002,[1,1,0.851]],[0.004,[0.998,0.999,0.846]],[0.006,[0.998,0.999,0.846]],[0.008,[0.996,0.998,0.841]],[0.01,[0.996,0.998,0.841]],[0.012,[0.993,0.997,0.836]],[0.014,[0.993,0.997,0.836]],[0.016,[0.991,0.997,0.831]],[0.018,[0.991,0.997,0.831]],[0.02,[0.989,0.996,0.826]],[0.022,[0.989,0.996,0.826]],[0.023,[0.987,0.995,0.821]],[0.025,[0.987,0.995,0.821]],[0.027,[0.984,0.994,0.817]],[0.029,[0.984,0.994,0.817]],[0.031,[0.982,0.993,0.812]],[0.033,[0.982,0.993,0.812]],[0.035,[0.98,0.992,0.807]],[0.037,[0.98,0.992,0.807]],[0.039,[0.978,0.991,0.802]],[0.041,[0.978,0.991,0.802]],[0.043,[0.976,0.991,0.797]],[0.045,[0.976,0.991,0.797]],[0.047,[0.973,0.99,0.792]],[0.049,[0.973,0.99,0.792]],[0.051,[0.971,0.989,0.787]],[0.053,[0.971,0.989,0.787]],[0.055,[0.969,0.988,0.782]],[0.057,[0.969,0.988,0.782]],[0.059,[0.967,0.987,0.777]],[0.061,[0.967,0.987,0.777]],[0.063,[0.965,0.986,0.772]],[0.065,[0.965,0.986,0.772]],[0.067,[0.962,0.985,0.767]],[0.068,[0.962,0.985,0.767]],[0.07,[0.96,0.984,0.762]],[0.072,[0.96,0.984,0.762]],[0.074,[0.958,0.984,0.757]],[0.076,[0.958,0.984,0.757]],[0.078,[0.956,0.983,0.753]],[0.08,[0.956,0.983,0.753]],[0.082,[0.953,0.982,0.748]],[0.084,[0.953,0.982,0.748]],[0.086,[0.951,0.981,0.743]],[0.088,[0.951,0.981,0.743]],[0.09,[0.949,0.98,0.738]],[0.092,[0.949,0.98,0.738]],[0.094,[0.947,0.979,0.733]],[0.096,[0.947,0.979,0.733]],[0.098,[0.945,0.978,0.728]],[0.1,[0.945,0.978,0.728]],[0.102,[0.942,0.978,0.723]],[0.104,[0.942,0.978,0.723]],[0.106,[0.94,0.977,0.718]],[0.108,[0.94,0.977,0.718]],[0.11,[0.938,0.976,0.713]],[0.112,[0.938,0.976,0.713]],[0.114,[0.936,0.975,0.708]],[0.115,[0.936,0.975,0.708]],[0.117,[0.934,0.974,0.703]],[0.119,[0.934,0.974,0.703]],[0.121,[0.931,0.973,0.698]],[0.123,[0.931,0.973,0.698]],[0.125,[0.929,0.972,0.694]],[0.127,[0.929,0.972,0.694]],[0.129,[0.924,0.97,0.695]],[0.131,[0.924,0.97,0.695]],[0.133,[0.919,0.969,0.695]],[0.135,[0.919,0.969,0.695]],[0.137,[0.915,0.967,0.695]],[0.139,[0.915,0.967,0.695]],[0.141,[0.91,0.965,0.696]],[0.143,[0.91,0.965,0.696]],[0.145,[0.905,0.963,0.696]],[0.147,[0.905,0.963,0.696]],[0.149,[0.901,0.961,0.696]],[0.151,[0.901,0.961,0.696]],[0.153,[0.896,0.959,0.697]],[0.155,[0.896,0.959,0.697]],[0.157,[0.891,0.958,0.697]],[0.159,[0.891,0.958,0.697]],[0.16,[0.887,0.956,0.697]],[0.162,[0.887,0.956,0.697]],[0.164,[0.882,0.954,0.698]],[0.166,[0.882,0.954,0.698]],[0.168,[0.877,0.952,0.698]],[0.17,[0.877,0.952,0.698]],[0.172,[0.873,0.95,0.699]],[0.174,[0.873,0.95,0.699]],[0.176,[0.868,0.948,0.699]],[0.178,[0.868,0.948,0.699]],[0.18,[0.863,0.946,0.699]],[0.182,[0.863,0.946,0.699]],[0.184,[0.859,0.945,0.7]],[0.186,[0.859,0.945,0.7]],[0.188,[0.854,0.943,0.7]],[0.19,[0.854,0.943,0.7]],[0.192,[0.849,0.941,0.7]],[0.194,[0.849,0.941,0.7]],[0.196,[0.845,0.939,0.701]],[0.198,[0.845,0.939,0.701]],[0.2,[0.84,0.937,0.701]],[0.202,[0.84,0.937,0.701]],[0.204,[0.835,0.935,0.702]],[0.205,[0.835,0.935,0.702]],[0.207,[0.831,0.934,0.702]],[0.209,[0.831,0.934,0.702]],[0.211,[0.826,0.932,0.702]],[0.213,[0.826,0.932,0.702]],[0.215,[0.821,0.93,0.703]],[0.217,[0.821,0.93,0.703]],[0.219,[0.817,0.928,0.703]],[0.221,[0.817,0.928,0.703]],[0.223,[0.812,0.926,0.703]],[0.225,[0.812,0.926,0.703]],[0.227,[0.807,0.924,0.704]],[0.229,[0.807,0.924,0.704]],[0.231,[0.803,0.922,0.704]],[0.233,[0.803,0.922,0.704]],[0.235,[0.798,0.921,0.704]],[0.237,[0.798,0.921,0.704]],[0.239,[0.793,0.919,0.705]],[0.241,[0.793,0.919,0.705]],[0.243,[0.789,0.917,0.705]],[0.245,[0.789,0.917,0.705]],[0.247,[0.784,0.915,0.706]],[0.249,[0.784,0.915,0.706]],[0.25,[0.778,0.913,0.706]],[0.252,[0.778,0.913,0.706]],[0.254,[0.769,0.909,0.707]],[0.256,[0.769,0.909,0.707]],[0.258,[0.76,0.906,0.708]],[0.26,[0.76,0.906,0.708]],[0.262,[0.752,0.903,0.709]],[0.264,[0.752,0.903,0.709]],[0.266,[0.743,0.899,0.71]],[0.268,[0.743,0.899,0.71]],[0.27,[0.734,0.896,0.71]],[0.272,[0.734,0.896,0.71]],[0.274,[0.725,0.892,0.711]],[0.276,[0.725,0.892,0.711]],[0.278,[0.716,0.889,0.712]],[0.28,[0.716,0.889,0.712]],[0.282,[0.707,0.885,0.713]],[0.284,[0.707,0.885,0.713]],[0.286,[0.698,0.882,0.714]],[0.288,[0.698,0.882,0.714]],[0.29,[0.69,0.878,0.715]],[0.292,[0.69,0.878,0.715]],[0.294,[0.681,0.875,0.716]],[0.295,[0.681,0.875,0.716]],[0.297,[0.672,0.872,0.716]],[0.299,[0.672,0.872,0.716]],[0.301,[0.663,0.868,0.717]],[0.303,[0.663,0.868,0.717]],[0.305,[0.654,0.865,0.718]],[0.307,[0.654,0.865,0.718]],[0.309,[0.645,0.861,0.719]],[0.311,[0.645,0.861,0.719]],[0.313,[0.636,0.858,0.72]],[0.315,[0.636,0.858,0.72]],[0.317,[0.628,0.854,0.721]],[0.319,[0.628,0.854,0.721]],[0.321,[0.619,0.851,0.722]],[0.323,[0.619,0.851,0.722]],[0.325,[0.61,0.847,0.722]],[0.327,[0.61,0.847,0.722]],[0.329,[0.601,0.844,0.723]],[0.331,[0.601,0.844,0.723]],[0.333,[0.592,0.841,0.724]],[0.335,[0.592,0.841,0.724]],[0.337,[0.583,0.837,0.725]],[0.339,[0.583,0.837,0.725]],[0.341,[0.574,0.834,0.726]],[0.342,[0.574,0.834,0.726]],[0.344,[0.566,0.83,0.727]],[0.346,[0.566,0.83,0.727]],[0.348,[0.557,0.827,0.728]],[0.35,[0.557,0.827,0.728]],[0.352,[0.548,0.823,0.728]],[0.354,[0.548,0.823,0.728]],[0.356,[0.539,0.82,0.729]],[0.358,[0.539,0.82,0.729]],[0.36,[0.53,0.816,0.73]],[0.362,[0.53,0.816,0.73]],[0.364,[0.521,0.813,0.731]],[0.366,[0.521,0.813,0.731]],[0.368,[0.512,0.81,0.732]],[0.37,[0.512,0.81,0.732]],[0.372,[0.504,0.806,0.733]],[0.374,[0.504,0.806,0.733]],[0.376,[0.495,0.803,0.734]],[0.378,[0.495,0.803,0.734]],[0.38,[0.488,0.8,0.735]],[0.382,[0.488,0.8,0.735]],[0.384,[0.48,0.797,0.736]],[0.386,[0.48,0.797,0.736]],[0.387,[0.472,0.794,0.737]],[0.389,[0.472,0.794,0.737]],[0.391,[0.465,0.792,0.738]],[0.393,[0.465,0.792,0.738]],[0.395,[0.457,0.789,0.739]],[0.397,[0.457,0.789,0.739]],[0.399,[0.449,0.786,0.74]],[0.401,[0.449,0.786,0.74]],[0.403,[0.442,0.783,0.741]],[0.405,[0.442,0.783,0.741]],[0.407,[0.434,0.78,0.743]],[0.409,[0.434,0.78,0.743]],[0.411,[0.427,0.777,0.744]],[0.413,[0.427,0.777,0.744]],[0.415,[0.419,0.775,0.745]],[0.417,[0.419,0.775,0.745]],[0.419,[0.411,0.772,0.746]],[0.421,[0.411,0.772,0.746]],[0.423,[0.404,0.769,0.747]],[0.425,[0.404,0.769,0.747]],[0.427,[0.396,0.766,0.748]],[0.429,[0.396,0.766,0.748]],[0.431,[0.388,0.763,0.749]],[0.432,[0.388,0.763,0.749]],[0.434,[0.381,0.76,0.75]],[0.436,[0.381,0.76,0.75]],[0.438,[0.373,0.758,0.751]],[0.44,[0.373,0.758,0.751]],[0.442,[0.366,0.755,0.753]],[0.444,[0.366,0.755,0.753]],[0.446,[0.358,0.752,0.754]],[0.448,[0.358,0.752,0.754]],[0.45,[0.35,0.749,0.755]],[0.452,[0.35,0.749,0.755]],[0.454,[0.343,0.746,0.756]],[0.456,[0.343,0.746,0.756]],[0.458,[0.335,0.743,0.757]],[0.46,[0.335,0.743,0.757]],[0.462,[0.327,0.741,0.758]],[0.464,[0.327,0.741,0.758]],[0.466,[0.32,0.738,0.759]],[0.468,[0.32,0.738,0.759]],[0.47,[0.312,0.735,0.76]],[0.472,[0.312,0.735,0.76]],[0.474,[0.304,0.732,0.761]],[0.476,[0.304,0.732,0.761]],[0.477,[0.297,0.729,0.763]],[0.479,[0.297,0.729,0.763]],[0.481,[0.289,0.726,0.764]],[0.483,[0.289,0.726,0.764]],[0.485,[0.282,0.724,0.765]],[0.487,[0.282,0.724,0.765]],[0.489,[0.274,0.721,0.766]],[0.491,[0.274,0.721,0.766]],[0.493,[0.266,0.718,0.767]],[0.495,[0.266,0.718,0.767]],[0.497,[0.259,0.715,0.768]],[0.499,[0.259,0.715,0.768]],[0.501,[0.253,0.711,0.768]],[0.503,[0.253,0.711,0.768]],[0.505,[0.248,0.707,0.768]],[0.507,[0.248,0.707,0.768]],[0.509,[0.244,0.702,0.767]],[0.511,[0.244,0.702,0.767]],[0.513,[0.239,0.698,0.767]],[0.515,[0.239,0.698,0.767]],[0.517,[0.235,0.693,0.766]],[0.519,[0.235,0.693,0.766]],[0.521,[0.231,0.689,0.766]],[0.523,[0.231,0.689,0.766]],[0.524,[0.226,0.684,0.765]],[0.526,[0.226,0.684,0.765]],[0.528,[0.222,0.68,0.765]],[0.53,[0.222,0.68,0.765]],[0.532,[0.217,0.675,0.764]],[0.534,[0.217,0.675,0.764]],[0.536,[0.213,0.67,0.764]],[0.538,[0.213,0.67,0.764]],[0.54,[0.208,0.666,0.763]],[0.542,[0.208,0.666,0.763]],[0.544,[0.204,0.661,0.763]],[0.546,[0.204,0.661,0.763]],[0.548,[0.2,0.657,0.762]],[0.55,[0.2,0.657,0.762]],[0.552,[0.195,0.652,0.762]],[0.554,[0.195,0.652,0.762]],[0.556,[0.191,0.648,0.761]],[0.558,[0.191,0.648,0.761]],[0.56,[0.186,0.643,0.761]],[0.562,[0.186,0.643,0.761]],[0.564,[0.182,0.639,0.761]],[0.566,[0.182,0.639,0.761]],[0.568,[0.177,0.634,0.76]],[0.569,[0.177,0.634,0.76]],[0.571,[0.173,0.63,0.76]],[0.573,[0.173,0.63,0.76]],[0.575,[0.169,0.625,0.759]],[0.577,[0.169,0.625,0.759]],[0.579,[0.164,0.62,0.759]],[0.581,[0.164,0.62,0.759]],[0.583,[0.16,0.616,0.758]],[0.585,[0.16,0.616,0.758]],[0.587,[0.155,0.611,0.758]],[0.589,[0.155,0.611,0.758]],[0.591,[0.151,0.607,0.757]],[0.593,[0.151,0.607,0.757]],[0.595,[0.146,0.602,0.757]],[0.597,[0.146,0.602,0.757]],[0.599,[0.142,0.598,0.756]],[0.601,[0.142,0.598,0.756]],[0.603,[0.138,0.593,0.756]],[0.605,[0.138,0.593,0.756]],[0.607,[0.133,0.589,0.755]],[0.609,[0.133,0.589,0.755]],[0.611,[0.129,0.584,0.755]],[0.613,[0.129,0.584,0.755]],[0.614,[0.124,0.579,0.754]],[0.616,[0.124,0.579,0.754]],[0.618,[0.12,0.575,0.754]],[0.62,[0.12,0.575,0.754]],[0.622,[0.115,0.57,0.753]],[0.624,[0.115,0.57,0.753]],[0.626,[0.114,0.565,0.751]],[0.628,[0.114,0.565,0.751]],[0.63,[0.115,0.558,0.748]],[0.632,[0.115,0.558,0.748]],[0.634,[0.115,0.552,0.745]],[0.636,[0.115,0.552,0.745]],[0.638,[0.116,0.546,0.742]],[0.64,[0.116,0.546,0.742]],[0.642,[0.117,0.54,0.739]],[0.644,[0.117,0.54,0.739]],[0.646,[0.117,0.533,0.736]],[0.648,[0.117,0.533,0.736]],[0.65,[0.118,0.527,0.733]],[0.652,[0.118,0.527,0.733]],[0.654,[0.118,0.521,0.73]],[0.656,[0.118,0.521,0.73]],[0.658,[0.119,0.515,0.727]],[0.659,[0.119,0.515,0.727]],[0.661,[0.12,0.508,0.725]],[0.663,[0.12,0.508,0.725]],[0.665,[0.12,0.502,0.722]],[0.667,[0.12,0.502,0.722]],[0.669,[0.121,0.496,0.719]],[0.671,[0.121,0.496,0.719]],[0.673,[0.121,0.489,0.716]],[0.675,[0.121,0.489,0.716]],[0.677,[0.122,0.483,0.713]],[0.679,[0.122,0.483,0.713]],[0.681,[0.123,0.477,0.71]],[0.683,[0.123,0.477,0.71]],[0.685,[0.123,0.471,0.707]],[0.687,[0.123,0.471,0.707]],[0.689,[0.124,0.464,0.704]],[0.691,[0.124,0.464,0.704]],[0.693,[0.125,0.458,0.701]],[0.695,[0.125,0.458,0.701]],[0.697,[0.125,0.452,0.698]],[0.699,[0.125,0.452,0.698]],[0.701,[0.126,0.445,0.695]],[0.703,[0.126,0.445,0.695]],[0.705,[0.126,0.439,0.692]],[0.706,[0.126,0.439,0.692]],[0.708,[0.127,0.433,0.689]],[0.71,[0.127,0.433,0.689]],[0.712,[0.128,0.427,0.686]],[0.714,[0.128,0.427,0.686]],[0.716,[0.128,0.42,0.683]],[0.718,[0.128,0.42,0.683]],[0.72,[0.129,0.414,0.68]],[0.722,[0.129,0.414,0.68]],[0.724,[0.129,0.408,0.677]],[0.726,[0.129,0.408,0.677]],[0.728,[0.13,0.402,0.674]],[0.73,[0.13,0.402,0.674]],[0.732,[0.131,0.395,0.671]],[0.734,[0.131,0.395,0.671]],[0.736,[0.131,0.389,0.668]],[0.738,[0.131,0.389,0.668]],[0.74,[0.132,0.383,0.665]],[0.742,[0.132,0.383,0.665]],[0.744,[0.133,0.376,0.663]],[0.746,[0.133,0.376,0.663]],[0.748,[0.133,0.37,0.66]],[0.75,[0.133,0.37,0.66]],[0.751,[0.134,0.365,0.657]],[0.753,[0.134,0.365,0.657]],[0.755,[0.134,0.36,0.655]],[0.757,[0.134,0.36,0.655]],[0.759,[0.134,0.354,0.652]],[0.761,[0.134,0.354,0.652]],[0.763,[0.135,0.349,0.65]],[0.765,[0.135,0.349,0.65]],[0.767,[0.135,0.344,0.647]],[0.769,[0.135,0.344,0.647]],[0.771,[0.135,0.339,0.645]],[0.773,[0.135,0.339,0.645]],[0.775,[0.136,0.334,0.642]],[0.777,[0.136,0.334,0.642]],[0.779,[0.136,0.329,0.64]],[0.781,[0.136,0.329,0.64]],[0.783,[0.137,0.323,0.637]],[0.785,[0.137,0.323,0.637]],[0.787,[0.137,0.318,0.635]],[0.789,[0.137,0.318,0.635]],[0.791,[0.137,0.313,0.632]],[0.793,[0.137,0.313,0.632]],[0.795,[0.138,0.308,0.63]],[0.796,[0.138,0.308,0.63]],[0.798,[0.138,0.303,0.627]],[0.8,[0.138,0.303,0.627]],[0.802,[0.138,0.298,0.625]],[0.804,[0.138,0.298,0.625]],[0.806,[0.139,0.292,0.623]],[0.808,[0.139,0.292,0.623]],[0.81,[0.139,0.287,0.62]],[0.812,[0.139,0.287,0.62]],[0.814,[0.14,0.282,0.618]],[0.816,[0.14,0.282,0.618]],[0.818,[0.14,0.277,0.615]],[0.82,[0.14,0.277,0.615]],[0.822,[0.14,0.272,0.613]],[0.824,[0.14,0.272,0.613]],[0.826,[0.141,0.267,0.61]],[0.828,[0.141,0.267,0.61]],[0.83,[0.141,0.261,0.608]],[0.832,[0.141,0.261,0.608]],[0.834,[0.141,0.256,0.605]],[0.836,[0.141,0.256,0.605]],[0.838,[0.142,0.251,0.603]],[0.84,[0.142,0.251,0.603]],[0.841,[0.142,0.246,0.6]],[0.843,[0.142,0.246,0.6]],[0.845,[0.142,0.241,0.598]],[0.847,[0.142,0.241,0.598]],[0.849,[0.143,0.236,0.595]],[0.851,[0.143,0.236,0.595]],[0.853,[0.143,0.23,0.593]],[0.855,[0.143,0.23,0.593]],[0.857,[0.144,0.225,0.591]],[0.859,[0.144,0.225,0.591]],[0.861,[0.144,0.22,0.588]],[0.863,[0.144,0.22,0.588]],[0.865,[0.144,0.215,0.586]],[0.867,[0.144,0.215,0.586]],[0.869,[0.145,0.21,0.583]],[0.871,[0.145,0.21,0.583]],[0.873,[0.145,0.205,0.581]],[0.875,[0.145,0.205,0.581]],[0.877,[0.142,0.201,0.574]],[0.879,[0.142,0.201,0.574]],[0.881,[0.138,0.199,0.567]],[0.883,[0.138,0.199,0.567]],[0.885,[0.135,0.196,0.559]],[0.886,[0.135,0.196,0.559]],[0.888,[0.131,0.193,0.552]],[0.89,[0.131,0.193,0.552]],[0.892,[0.128,0.19,0.544]],[0.894,[0.128,0.19,0.544]],[0.896,[0.124,0.187,0.537]],[0.898,[0.124,0.187,0.537]],[0.9,[0.121,0.184,0.53]],[0.902,[0.121,0.184,0.53]],[0.904,[0.117,0.182,0.522]],[0.906,[0.117,0.182,0.522]],[0.908,[0.113,0.179,0.515]],[0.91,[0.113,0.179,0.515]],[0.912,[0.11,0.176,0.507]],[0.914,[0.11,0.176,0.507]],[0.916,[0.106,0.173,0.5]],[0.918,[0.106,0.173,0.5]],[0.92,[0.103,0.17,0.493]],[0.922,[0.103,0.17,0.493]],[0.924,[0.099,0.167,0.485]],[0.926,[0.099,0.167,0.485]],[0.928,[0.096,0.165,0.478]],[0.93,[0.096,0.165,0.478]],[0.932,[0.092,0.162,0.471]],[0.933,[0.092,0.162,0.471]],[0.935,[0.088,0.159,0.463]],[0.937,[0.088,0.159,0.463]],[0.939,[0.085,0.156,0.456]],[0.941,[0.085,0.156,0.456]],[0.943,[0.081,0.153,0.448]],[0.945,[0.081,0.153,0.448]],[0.947,[0.078,0.151,0.441]],[0.949,[0.078,0.151,0.441]],[0.951,[0.074,0.148,0.434]],[0.953,[0.074,0.148,0.434]],[0.955,[0.071,0.145,0.426]],[0.957,[0.071,0.145,0.426]],[0.959,[0.067,0.142,0.419]],[0.961,[0.067,0.142,0.419]],[0.963,[0.063,0.139,0.412]],[0.965,[0.063,0.139,0.412]],[0.967,[0.06,0.136,0.404]],[0.969,[0.06,0.136,0.404]],[0.971,[0.056,0.134,0.397]],[0.973,[0.056,0.134,0.397]],[0.975,[0.053,0.131,0.389]],[0.977,[0.053,0.131,0.389]],[0.978,[0.049,0.128,0.382]],[0.98,[0.049,0.128,0.382]],[0.982,[0.046,0.125,0.375]],[0.984,[0.046,0.125,0.375]],[0.986,[0.042,0.122,0.367]],[0.988,[0.042,0.122,0.367]],[0.99,[0.039,0.119,0.36]],[0.992,[0.039,0.119,0.36]],[0.994,[0.035,0.117,0.352]],[0.996,[0.035,0.117,0.352]],[0.998,[0.031,0.114,0.345]],[1,[0.031,0.114,0.345]]],[[0,[0,0,1]],[0.002,[0,0,1]],[0.004,[0,0.004,0.998]],[0.006,[0,0.004,0.998]],[0.008,[0,0.008,0.996]],[0.01,[0,0.008,0.996]],[0.012,[0,0.012,0.994]],[0.014,[0,0.012,0.994]],[0.016,[0,0.016,0.992]],[0.018,[0,0.016,0.992]],[0.02,[0,0.02,0.99]],[0.022,[0,0.02,0.99]],[0.023,[0,0.024,0.988]],[0.025,[0,0.024,0.988]],[0.027,[0,0.027,0.986]],[0.029,[0,0.027,0.986]],[0.031,[0,0.031,0.984]],[0.033,[0,0.031,0.984]],[0.035,[0,0.035,0.982]],[0.037,[0,0.035,0.982]],[0.039,[0,0.039,0.98]],[0.041,[0,0.039,0.98]],[0.043,[0,0.043,0.978]],[0.045,[0,0.043,0.978]],[0.047,[0,0.047,0.976]],[0.049,[0,0.047,0.976]],[0.051,[0,0.051,0.975]],[0.053,[0,0.051,0.975]],[0.055,[0,0.055,0.973]],[0.057,[0,0.055,0.973]],[0.059,[0,0.059,0.971]],[0.061,[0,0.059,0.971]],[0.063,[0,0.063,0.969]],[0.065,[0,0.063,0.969]],[0.067,[0,0.067,0.967]],[0.068,[0,0.067,0.967]],[0.07,[0,0.071,0.965]],[0.072,[0,0.071,0.965]],[0.074,[0,0.075,0.963]],[0.076,[0,0.075,0.963]],[0.078,[0,0.078,0.961]],[0.08,[0,0.078,0.961]],[0.082,[0,0.082,0.959]],[0.084,[0,0.082,0.959]],[0.086,[0,0.086,0.957]],[0.088,[0,0.086,0.957]],[0.09,[0,0.09,0.955]],[0.092,[0,0.09,0.955]],[0.094,[0,0.094,0.953]],[0.096,[0,0.094,0.953]],[0.098,[0,0.098,0.951]],[0.1,[0,0.098,0.951]],[0.102,[0,0.102,0.949]],[0.104,[0,0.102,0.949]],[0.106,[0,0.106,0.947]],[0.108,[0,0.106,0.947]],[0.11,[0,0.11,0.945]],[0.112,[0,0.11,0.945]],[0.114,[0,0.114,0.943]],[0.115,[0,0.114,0.943]],[0.117,[0,0.118,0.941]],[0.119,[0,0.118,0.941]],[0.121,[0,0.122,0.939]],[0.123,[0,0.122,0.939]],[0.125,[0,0.125,0.937]],[0.127,[0,0.125,0.937]],[0.129,[0,0.129,0.935]],[0.131,[0,0.129,0.935]],[0.133,[0,0.133,0.933]],[0.135,[0,0.133,0.933]],[0.137,[0,0.137,0.931]],[0.139,[0,0.137,0.931]],[0.141,[0,0.141,0.929]],[0.143,[0,0.141,0.929]],[0.145,[0,0.145,0.927]],[0.147,[0,0.145,0.927]],[0.149,[0,0.149,0.925]],[0.151,[0,0.149,0.925]],[0.153,[0,0.153,0.924]],[0.155,[0,0.153,0.924]],[0.157,[0,0.157,0.922]],[0.159,[0,0.157,0.922]],[0.16,[0,0.161,0.92]],[0.162,[0,0.161,0.92]],[0.164,[0,0.165,0.918]],[0.166,[0,0.165,0.918]],[0.168,[0,0.169,0.916]],[0.17,[0,0.169,0.916]],[0.172,[0,0.173,0.914]],[0.174,[0,0.173,0.914]],[0.176,[0,0.176,0.912]],[0.178,[0,0.176,0.912]],[0.18,[0,0.18,0.91]],[0.182,[0,0.18,0.91]],[0.184,[0,0.184,0.908]],[0.186,[0,0.184,0.908]],[0.188,[0,0.188,0.906]],[0.19,[0,0.188,0.906]],[0.192,[0,0.192,0.904]],[0.194,[0,0.192,0.904]],[0.196,[0,0.196,0.902]],[0.198,[0,0.196,0.902]],[0.2,[0,0.2,0.9]],[0.202,[0,0.2,0.9]],[0.204,[0,0.204,0.898]],[0.205,[0,0.204,0.898]],[0.207,[0,0.208,0.896]],[0.209,[0,0.208,0.896]],[0.211,[0,0.212,0.894]],[0.213,[0,0.212,0.894]],[0.215,[0,0.216,0.892]],[0.217,[0,0.216,0.892]],[0.219,[0,0.22,0.89]],[0.221,[0,0.22,0.89]],[0.223,[0,0.224,0.888]],[0.225,[0,0.224,0.888]],[0.227,[0,0.227,0.886]],[0.229,[0,0.227,0.886]],[0.231,[0,0.231,0.884]],[0.233,[0,0.231,0.884]],[0.235,[0,0.235,0.882]],[0.237,[0,0.235,0.882]],[0.239,[0,0.239,0.88]],[0.241,[0,0.239,0.88]],[0.243,[0,0.243,0.878]],[0.245,[0,0.243,0.878]],[0.247,[0,0.247,0.876]],[0.249,[0,0.247,0.876]],[0.25,[0,0.251,0.875]],[0.252,[0,0.251,0.875]],[0.254,[0,0.255,0.873]],[0.256,[0,0.255,0.873]],[0.258,[0,0.259,0.871]],[0.26,[0,0.259,0.871]],[0.262,[0,0.263,0.869]],[0.264,[0,0.263,0.869]],[0.266,[0,0.267,0.867]],[0.268,[0,0.267,0.867]],[0.27,[0,0.271,0.865]],[0.272,[0,0.271,0.865]],[0.274,[0,0.275,0.863]],[0.276,[0,0.275,0.863]],[0.278,[0,0.278,0.861]],[0.28,[0,0.278,0.861]],[0.282,[0,0.282,0.859]],[0.284,[0,0.282,0.859]],[0.286,[0,0.286,0.857]],[0.288,[0,0.286,0.857]],[0.29,[0,0.29,0.855]],[0.292,[0,0.29,0.855]],[0.294,[0,0.294,0.853]],[0.295,[0,0.294,0.853]],[0.297,[0,0.298,0.851]],[0.299,[0,0.298,0.851]],[0.301,[0,0.302,0.849]],[0.303,[0,0.302,0.849]],[0.305,[0,0.306,0.847]],[0.307,[0,0.306,0.847]],[0.309,[0,0.31,0.845]],[0.311,[0,0.31,0.845]],[0.313,[0,0.314,0.843]],[0.315,[0,0.314,0.843]],[0.317,[0,0.318,0.841]],[0.319,[0,0.318,0.841]],[0.321,[0,0.322,0.839]],[0.323,[0,0.322,0.839]],[0.325,[0,0.325,0.837]],[0.327,[0,0.325,0.837]],[0.329,[0,0.329,0.835]],[0.331,[0,0.329,0.835]],[0.333,[0,0.333,0.833]],[0.335,[0,0.333,0.833]],[0.337,[0,0.337,0.831]],[0.339,[0,0.337,0.831]],[0.341,[0,0.341,0.829]],[0.342,[0,0.341,0.829]],[0.344,[0,0.345,0.827]],[0.346,[0,0.345,0.827]],[0.348,[0,0.349,0.825]],[0.35,[0,0.349,0.825]],[0.352,[0,0.353,0.824]],[0.354,[0,0.353,0.824]],[0.356,[0,0.357,0.822]],[0.358,[0,0.357,0.822]],[0.36,[0,0.361,0.82]],[0.362,[0,0.361,0.82]],[0.364,[0,0.365,0.818]],[0.366,[0,0.365,0.818]],[0.368,[0,0.369,0.816]],[0.37,[0,0.369,0.816]],[0.372,[0,0.373,0.814]],[0.374,[0,0.373,0.814]],[0.376,[0,0.376,0.812]],[0.378,[0,0.376,0.812]],[0.38,[0,0.38,0.81]],[0.382,[0,0.38,0.81]],[0.384,[0,0.384,0.808]],[0.386,[0,0.384,0.808]],[0.387,[0,0.388,0.806]],[0.389,[0,0.388,0.806]],[0.391,[0,0.392,0.804]],[0.393,[0,0.392,0.804]],[0.395,[0,0.396,0.802]],[0.397,[0,0.396,0.802]],[0.399,[0,0.4,0.8]],[0.401,[0,0.4,0.8]],[0.403,[0,0.404,0.798]],[0.405,[0,0.404,0.798]],[0.407,[0,0.408,0.796]],[0.409,[0,0.408,0.796]],[0.411,[0,0.412,0.794]],[0.413,[0,0.412,0.794]],[0.415,[0,0.416,0.792]],[0.417,[0,0.416,0.792]],[0.419,[0,0.42,0.79]],[0.421,[0,0.42,0.79]],[0.423,[0,0.424,0.788]],[0.425,[0,0.424,0.788]],[0.427,[0,0.427,0.786]],[0.429,[0,0.427,0.786]],[0.431,[0,0.431,0.784]],[0.432,[0,0.431,0.784]],[0.434,[0,0.435,0.782]],[0.436,[0,0.435,0.782]],[0.438,[0,0.439,0.78]],[0.44,[0,0.439,0.78]],[0.442,[0,0.443,0.778]],[0.444,[0,0.443,0.778]],[0.446,[0,0.447,0.776]],[0.448,[0,0.447,0.776]],[0.45,[0,0.451,0.775]],[0.452,[0,0.451,0.775]],[0.454,[0,0.455,0.773]],[0.456,[0,0.455,0.773]],[0.458,[0,0.459,0.771]],[0.46,[0,0.459,0.771]],[0.462,[0,0.463,0.769]],[0.464,[0,0.463,0.769]],[0.466,[0,0.467,0.767]],[0.468,[0,0.467,0.767]],[0.47,[0,0.471,0.765]],[0.472,[0,0.471,0.765]],[0.474,[0,0.475,0.763]],[0.476,[0,0.475,0.763]],[0.477,[0,0.478,0.761]],[0.479,[0,0.478,0.761]],[0.481,[0,0.482,0.759]],[0.483,[0,0.482,0.759]],[0.485,[0,0.486,0.757]],[0.487,[0,0.486,0.757]],[0.489,[0,0.49,0.755]],[0.491,[0,0.49,0.755]],[0.493,[0,0.494,0.753]],[0.495,[0,0.494,0.753]],[0.497,[0,0.498,0.751]],[0.499,[0,0.498,0.751]],[0.501,[0,0.502,0.749]],[0.503,[0,0.502,0.749]],[0.505,[0,0.506,0.747]],[0.507,[0,0.506,0.747]],[0.509,[0,0.51,0.745]],[0.511,[0,0.51,0.745]],[0.513,[0,0.514,0.743]],[0.515,[0,0.514,0.743]],[0.517,[0,0.518,0.741]],[0.519,[0,0.518,0.741]],[0.521,[0,0.522,0.739]],[0.523,[0,0.522,0.739]],[0.524,[0,0.525,0.737]],[0.526,[0,0.525,0.737]],[0.528,[0,0.529,0.735]],[0.53,[0,0.529,0.735]],[0.532,[0,0.533,0.733]],[0.534,[0,0.533,0.733]],[0.536,[0,0.537,0.731]],[0.538,[0,0.537,0.731]],[0.54,[0,0.541,0.729]],[0.542,[0,0.541,0.729]],[0.544,[0,0.545,0.727]],[0.546,[0,0.545,0.727]],[0.548,[0,0.549,0.725]],[0.55,[0,0.549,0.725]],[0.552,[0,0.553,0.724]],[0.554,[0,0.553,0.724]],[0.556,[0,0.557,0.722]],[0.558,[0,0.557,0.722]],[0.56,[0,0.561,0.72]],[0.562,[0,0.561,0.72]],[0.564,[0,0.565,0.718]],[0.566,[0,0.565,0.718]],[0.568,[0,0.569,0.716]],[0.569,[0,0.569,0.716]],[0.571,[0,0.573,0.714]],[0.573,[0,0.573,0.714]],[0.575,[0,0.576,0.712]],[0.577,[0,0.576,0.712]],[0.579,[0,0.58,0.71]],[0.581,[0,0.58,0.71]],[0.583,[0,0.584,0.708]],[0.585,[0,0.584,0.708]],[0.587,[0,0.588,0.706]],[0.589,[0,0.588,0.706]],[0.591,[0,0.592,0.704]],[0.593,[0,0.592,0.704]],[0.595,[0,0.596,0.702]],[0.597,[0,0.596,0.702]],[0.599,[0,0.6,0.7]],[0.601,[0,0.6,0.7]],[0.603,[0,0.604,0.698]],[0.605,[0,0.604,0.698]],[0.607,[0,0.608,0.696]],[0.609,[0,0.608,0.696]],[0.611,[0,0.612,0.694]],[0.613,[0,0.612,0.694]],[0.614,[0,0.616,0.692]],[0.616,[0,0.616,0.692]],[0.618,[0,0.62,0.69]],[0.62,[0,0.62,0.69]],[0.622,[0,0.624,0.688]],[0.624,[0,0.624,0.688]],[0.626,[0,0.627,0.686]],[0.628,[0,0.627,0.686]],[0.63,[0,0.631,0.684]],[0.632,[0,0.631,0.684]],[0.634,[0,0.635,0.682]],[0.636,[0,0.635,0.682]],[0.638,[0,0.639,0.68]],[0.64,[0,0.639,0.68]],[0.642,[0,0.643,0.678]],[0.644,[0,0.643,0.678]],[0.646,[0,0.647,0.676]],[0.648,[0,0.647,0.676]],[0.65,[0,0.651,0.675]],[0.652,[0,0.651,0.675]],[0.654,[0,0.655,0.673]],[0.656,[0,0.655,0.673]],[0.658,[0,0.659,0.671]],[0.659,[0,0.659,0.671]],[0.661,[0,0.663,0.669]],[0.663,[0,0.663,0.669]],[0.665,[0,0.667,0.667]],[0.667,[0,0.667,0.667]],[0.669,[0,0.671,0.665]],[0.671,[0,0.671,0.665]],[0.673,[0,0.675,0.663]],[0.675,[0,0.675,0.663]],[0.677,[0,0.678,0.661]],[0.679,[0,0.678,0.661]],[0.681,[0,0.682,0.659]],[0.683,[0,0.682,0.659]],[0.685,[0,0.686,0.657]],[0.687,[0,0.686,0.657]],[0.689,[0,0.69,0.655]],[0.691,[0,0.69,0.655]],[0.693,[0,0.694,0.653]],[0.695,[0,0.694,0.653]],[0.697,[0,0.698,0.651]],[0.699,[0,0.698,0.651]],[0.701,[0,0.702,0.649]],[0.703,[0,0.702,0.649]],[0.705,[0,0.706,0.647]],[0.706,[0,0.706,0.647]],[0.708,[0,0.71,0.645]],[0.71,[0,0.71,0.645]],[0.712,[0,0.714,0.643]],[0.714,[0,0.714,0.643]],[0.716,[0,0.718,0.641]],[0.718,[0,0.718,0.641]],[0.72,[0,0.722,0.639]],[0.722,[0,0.722,0.639]],[0.724,[0,0.725,0.637]],[0.726,[0,0.725,0.637]],[0.728,[0,0.729,0.635]],[0.73,[0,0.729,0.635]],[0.732,[0,0.733,0.633]],[0.734,[0,0.733,0.633]],[0.736,[0,0.737,0.631]],[0.738,[0,0.737,0.631]],[0.74,[0,0.741,0.629]],[0.742,[0,0.741,0.629]],[0.744,[0,0.745,0.627]],[0.746,[0,0.745,0.627]],[0.748,[0,0.749,0.625]],[0.75,[0,0.749,0.625]],[0.751,[0,0.753,0.624]],[0.753,[0,0.753,0.624]],[0.755,[0,0.757,0.622]],[0.757,[0,0.757,0.622]],[0.759,[0,0.761,0.62]],[0.761,[0,0.761,0.62]],[0.763,[0,0.765,0.618]],[0.765,[0,0.765,0.618]],[0.767,[0,0.769,0.616]],[0.769,[0,0.769,0.616]],[0.771,[0,0.773,0.614]],[0.773,[0,0.773,0.614]],[0.775,[0,0.776,0.612]],[0.777,[0,0.776,0.612]],[0.779,[0,0.78,0.61]],[0.781,[0,0.78,0.61]],[0.783,[0,0.784,0.608]],[0.785,[0,0.784,0.608]],[0.787,[0,0.788,0.606]],[0.789,[0,0.788,0.606]],[0.791,[0,0.792,0.604]],[0.793,[0,0.792,0.604]],[0.795,[0,0.796,0.602]],[0.796,[0,0.796,0.602]],[0.798,[0,0.8,0.6]],[0.8,[0,0.8,0.6]],[0.802,[0,0.804,0.598]],[0.804,[0,0.804,0.598]],[0.806,[0,0.808,0.596]],[0.808,[0,0.808,0.596]],[0.81,[0,0.812,0.594]],[0.812,[0,0.812,0.594]],[0.814,[0,0.816,0.592]],[0.816,[0,0.816,0.592]],[0.818,[0,0.82,0.59]],[0.82,[0,0.82,0.59]],[0.822,[0,0.824,0.588]],[0.824,[0,0.824,0.588]],[0.826,[0,0.827,0.586]],[0.828,[0,0.827,0.586]],[0.83,[0,0.831,0.584]],[0.832,[0,0.831,0.584]],[0.834,[0,0.835,0.582]],[0.836,[0,0.835,0.582]],[0.838,[0,0.839,0.58]],[0.84,[0,0.839,0.58]],[0.841,[0,0.843,0.578]],[0.843,[0,0.843,0.578]],[0.845,[0,0.847,0.576]],[0.847,[0,0.847,0.576]],[0.849,[0,0.851,0.575]],[0.851,[0,0.851,0.575]],[0.853,[0,0.855,0.573]],[0.855,[0,0.855,0.573]],[0.857,[0,0.859,0.571]],[0.859,[0,0.859,0.571]],[0.861,[0,0.863,0.569]],[0.863,[0,0.863,0.569]],[0.865,[0,0.867,0.567]],[0.867,[0,0.867,0.567]],[0.869,[0,0.871,0.565]],[0.871,[0,0.871,0.565]],[0.873,[0,0.875,0.563]],[0.875,[0,0.875,0.563]],[0.877,[0,0.878,0.561]],[0.879,[0,0.878,0.561]],[0.881,[0,0.882,0.559]],[0.883,[0,0.882,0.559]],[0.885,[0,0.886,0.557]],[0.886,[0,0.886,0.557]],[0.888,[0,0.89,0.555]],[0.89,[0,0.89,0.555]],[0.892,[0,0.894,0.553]],[0.894,[0,0.894,0.553]],[0.896,[0,0.898,0.551]],[0.898,[0,0.898,0.551]],[0.9,[0,0.902,0.549]],[0.902,[0,0.902,0.549]],[0.904,[0,0.906,0.547]],[0.906,[0,0.906,0.547]],[0.908,[0,0.91,0.545]],[0.91,[0,0.91,0.545]],[0.912,[0,0.914,0.543]],[0.914,[0,0.914,0.543]],[0.916,[0,0.918,0.541]],[0.918,[0,0.918,0.541]],[0.92,[0,0.922,0.539]],[0.922,[0,0.922,0.539]],[0.924,[0,0.925,0.537]],[0.926,[0,0.925,0.537]],[0.928,[0,0.929,0.535]],[0.93,[0,0.929,0.535]],[0.932,[0,0.933,0.533]],[0.933,[0,0.933,0.533]],[0.935,[0,0.937,0.531]],[0.937,[0,0.937,0.531]],[0.939,[0,0.941,0.529]],[0.941,[0,0.941,0.529]],[0.943,[0,0.945,0.527]],[0.945,[0,0.945,0.527]],[0.947,[0,0.949,0.525]],[0.949,[0,0.949,0.525]],[0.951,[0,0.953,0.524]],[0.953,[0,0.953,0.524]],[0.955,[0,0.957,0.522]],[0.957,[0,0.957,0.522]],[0.959,[0,0.961,0.52]],[0.961,[0,0.961,0.52]],[0.963,[0,0.965,0.518]],[0.965,[0,0.965,0.518]],[0.967,[0,0.969,0.516]],[0.969,[0,0.969,0.516]],[0.971,[0,0.973,0.514]],[0.973,[0,0.973,0.514]],[0.975,[0,0.976,0.512]],[0.977,[0,0.976,0.512]],[0.978,[0,0.98,0.51]],[0.98,[0,0.98,0.51]],[0.982,[0,0.984,0.508]],[0.984,[0,0.984,0.508]],[0.986,[0,0.988,0.506]],[0.988,[0,0.988,0.506]],[0.99,[0,0.992,0.504]],[0.992,[0,0.992,0.504]],[0.994,[0,0.996,0.502]],[0.996,[0,0.996,0.502]],[0.998,[0,1,0.5]],[1,[0,1,0.5]]],[[0,[0,0,0.5]],[0.002,[0,0,0.5]],[0.004,[0,0,0.518]],[0.006,[0,0,0.518]],[0.008,[0,0,0.536]],[0.01,[0,0,0.536]],[0.012,[0,0,0.553]],[0.014,[0,0,0.553]],[0.016,[0,0,0.571]],[0.018,[0,0,0.571]],[0.02,[0,0,0.589]],[0.022,[0,0,0.589]],[0.023,[0,0,0.607]],[0.025,[0,0,0.607]],[0.027,[0,0,0.625]],[0.029,[0,0,0.625]],[0.031,[0,0,0.643]],[0.033,[0,0,0.643]],[0.035,[0,0,0.66]],[0.037,[0,0,0.66]],[0.039,[0,0,0.678]],[0.041,[0,0,0.678]],[0.043,[0,0,0.696]],[0.045,[0,0,0.696]],[0.047,[0,0,0.714]],[0.049,[0,0,0.714]],[0.051,[0,0,0.732]],[0.053,[0,0,0.732]],[0.055,[0,0,0.75]],[0.057,[0,0,0.75]],[0.059,[0,0,0.767]],[0.061,[0,0,0.767]],[0.063,[0,0,0.785]],[0.065,[0,0,0.785]],[0.067,[0,0,0.803]],[0.068,[0,0,0.803]],[0.07,[0,0,0.821]],[0.072,[0,0,0.821]],[0.074,[0,0,0.839]],[0.076,[0,0,0.839]],[0.078,[0,0,0.857]],[0.08,[0,0,0.857]],[0.082,[0,0,0.874]],[0.084,[0,0,0.874]],[0.086,[0,0,0.892]],[0.088,[0,0,0.892]],[0.09,[0,0,0.91]],[0.092,[0,0,0.91]],[0.094,[0,0,0.928]],[0.096,[0,0,0.928]],[0.098,[0,0,0.946]],[0.1,[0,0,0.946]],[0.102,[0,0,0.963]],[0.104,[0,0,0.963]],[0.106,[0,0,0.981]],[0.108,[0,0,0.981]],[0.11,[0,0,0.999]],[0.112,[0,0,0.999]],[0.114,[0,0,1]],[0.115,[0,0,1]],[0.117,[0,0,1]],[0.119,[0,0,1]],[0.121,[0,0,1]],[0.123,[0,0,1]],[0.125,[0,0.002,1]],[0.127,[0,0.002,1]],[0.129,[0,0.018,1]],[0.131,[0,0.018,1]],[0.133,[0,0.033,1]],[0.135,[0,0.033,1]],[0.137,[0,0.049,1]],[0.139,[0,0.049,1]],[0.141,[0,0.065,1]],[0.143,[0,0.065,1]],[0.145,[0,0.08,1]],[0.147,[0,0.08,1]],[0.149,[0,0.096,1]],[0.151,[0,0.096,1]],[0.153,[0,0.112,1]],[0.155,[0,0.112,1]],[0.157,[0,0.127,1]],[0.159,[0,0.127,1]],[0.16,[0,0.143,1]],[0.162,[0,0.143,1]],[0.164,[0,0.159,1]],[0.166,[0,0.159,1]],[0.168,[0,0.175,1]],[0.17,[0,0.175,1]],[0.172,[0,0.19,1]],[0.174,[0,0.19,1]],[0.176,[0,0.206,1]],[0.178,[0,0.206,1]],[0.18,[0,0.222,1]],[0.182,[0,0.222,1]],[0.184,[0,0.237,1]],[0.186,[0,0.237,1]],[0.188,[0,0.253,1]],[0.19,[0,0.253,1]],[0.192,[0,0.269,1]],[0.194,[0,0.269,1]],[0.196,[0,0.284,1]],[0.198,[0,0.284,1]],[0.2,[0,0.3,1]],[0.202,[0,0.3,1]],[0.204,[0,0.316,1]],[0.205,[0,0.316,1]],[0.207,[0,0.331,1]],[0.209,[0,0.331,1]],[0.211,[0,0.347,1]],[0.213,[0,0.347,1]],[0.215,[0,0.363,1]],[0.217,[0,0.363,1]],[0.219,[0,0.378,1]],[0.221,[0,0.378,1]],[0.223,[0,0.394,1]],[0.225,[0,0.394,1]],[0.227,[0,0.41,1]],[0.229,[0,0.41,1]],[0.231,[0,0.425,1]],[0.233,[0,0.425,1]],[0.235,[0,0.441,1]],[0.237,[0,0.441,1]],[0.239,[0,0.457,1]],[0.241,[0,0.457,1]],[0.243,[0,0.473,1]],[0.245,[0,0.473,1]],[0.247,[0,0.488,1]],[0.249,[0,0.488,1]],[0.25,[0,0.504,1]],[0.252,[0,0.504,1]],[0.254,[0,0.52,1]],[0.256,[0,0.52,1]],[0.258,[0,0.535,1]],[0.26,[0,0.535,1]],[0.262,[0,0.551,1]],[0.264,[0,0.551,1]],[0.266,[0,0.567,1]],[0.268,[0,0.567,1]],[0.27,[0,0.582,1]],[0.272,[0,0.582,1]],[0.274,[0,0.598,1]],[0.276,[0,0.598,1]],[0.278,[0,0.614,1]],[0.28,[0,0.614,1]],[0.282,[0,0.629,1]],[0.284,[0,0.629,1]],[0.286,[0,0.645,1]],[0.288,[0,0.645,1]],[0.29,[0,0.661,1]],[0.292,[0,0.661,1]],[0.294,[0,0.676,1]],[0.295,[0,0.676,1]],[0.297,[0,0.692,1]],[0.299,[0,0.692,1]],[0.301,[0,0.708,1]],[0.303,[0,0.708,1]],[0.305,[0,0.724,1]],[0.307,[0,0.724,1]],[0.309,[0,0.739,1]],[0.311,[0,0.739,1]],[0.313,[0,0.755,1]],[0.315,[0,0.755,1]],[0.317,[0,0.771,1]],[0.319,[0,0.771,1]],[0.321,[0,0.786,1]],[0.323,[0,0.786,1]],[0.325,[0,0.802,1]],[0.327,[0,0.802,1]],[0.329,[0,0.818,1]],[0.331,[0,0.818,1]],[0.333,[0,0.833,1]],[0.335,[0,0.833,1]],[0.337,[0,0.849,1]],[0.339,[0,0.849,1]],[0.341,[0,0.865,0.996]],[0.342,[0,0.865,0.996]],[0.344,[0,0.88,0.984]],[0.346,[0,0.88,0.984]],[0.348,[0,0.896,0.971]],[0.35,[0,0.896,0.971]],[0.352,[0.009,0.912,0.958]],[0.354,[0.009,0.912,0.958]],[0.356,[0.022,0.927,0.946]],[0.358,[0.022,0.927,0.946]],[0.36,[0.035,0.943,0.933]],[0.362,[0.035,0.943,0.933]],[0.364,[0.047,0.959,0.92]],[0.366,[0.047,0.959,0.92]],[0.368,[0.06,0.975,0.908]],[0.37,[0.06,0.975,0.908]],[0.372,[0.073,0.99,0.895]],[0.374,[0.073,0.99,0.895]],[0.376,[0.085,1,0.882]],[0.378,[0.085,1,0.882]],[0.38,[0.098,1,0.87]],[0.382,[0.098,1,0.87]],[0.384,[0.111,1,0.857]],[0.386,[0.111,1,0.857]],[0.387,[0.123,1,0.844]],[0.389,[0.123,1,0.844]],[0.391,[0.136,1,0.832]],[0.393,[0.136,1,0.832]],[0.395,[0.149,1,0.819]],[0.397,[0.149,1,0.819]],[0.399,[0.161,1,0.806]],[0.401,[0.161,1,0.806]],[0.403,[0.174,1,0.794]],[0.405,[0.174,1,0.794]],[0.407,[0.187,1,0.781]],[0.409,[0.187,1,0.781]],[0.411,[0.199,1,0.769]],[0.413,[0.199,1,0.769]],[0.415,[0.212,1,0.756]],[0.417,[0.212,1,0.756]],[0.419,[0.225,1,0.743]],[0.421,[0.225,1,0.743]],[0.423,[0.237,1,0.731]],[0.425,[0.237,1,0.731]],[0.427,[0.25,1,0.718]],[0.429,[0.25,1,0.718]],[0.431,[0.262,1,0.705]],[0.432,[0.262,1,0.705]],[0.434,[0.275,1,0.693]],[0.436,[0.275,1,0.693]],[0.438,[0.288,1,0.68]],[0.44,[0.288,1,0.68]],[0.442,[0.3,1,0.667]],[0.444,[0.3,1,0.667]],[0.446,[0.313,1,0.655]],[0.448,[0.313,1,0.655]],[0.45,[0.326,1,0.642]],[0.452,[0.326,1,0.642]],[0.454,[0.338,1,0.629]],[0.456,[0.338,1,0.629]],[0.458,[0.351,1,0.617]],[0.46,[0.351,1,0.617]],[0.462,[0.364,1,0.604]],[0.464,[0.364,1,0.604]],[0.466,[0.376,1,0.591]],[0.468,[0.376,1,0.591]],[0.47,[0.389,1,0.579]],[0.472,[0.389,1,0.579]],[0.474,[0.402,1,0.566]],[0.476,[0.402,1,0.566]],[0.477,[0.414,1,0.553]],[0.479,[0.414,1,0.553]],[0.481,[0.427,1,0.541]],[0.483,[0.427,1,0.541]],[0.485,[0.44,1,0.528]],[0.487,[0.44,1,0.528]],[0.489,[0.452,1,0.515]],[0.491,[0.452,1,0.515]],[0.493,[0.465,1,0.503]],[0.495,[0.465,1,0.503]],[0.497,[0.478,1,0.49]],[0.499,[0.478,1,0.49]],[0.501,[0.49,1,0.478]],[0.503,[0.49,1,0.478]],[0.505,[0.503,1,0.465]],[0.507,[0.503,1,0.465]],[0.509,[0.515,1,0.452]],[0.511,[0.515,1,0.452]],[0.513,[0.528,1,0.44]],[0.515,[0.528,1,0.44]],[0.517,[0.541,1,0.427]],[0.519,[0.541,1,0.427]],[0.521,[0.553,1,0.414]],[0.523,[0.553,1,0.414]],[0.524,[0.566,1,0.402]],[0.526,[0.566,1,0.402]],[0.528,[0.579,1,0.389]],[0.53,[0.579,1,0.389]],[0.532,[0.591,1,0.376]],[0.534,[0.591,1,0.376]],[0.536,[0.604,1,0.364]],[0.538,[0.604,1,0.364]],[0.54,[0.617,1,0.351]],[0.542,[0.617,1,0.351]],[0.544,[0.629,1,0.338]],[0.546,[0.629,1,0.338]],[0.548,[0.642,1,0.326]],[0.55,[0.642,1,0.326]],[0.552,[0.655,1,0.313]],[0.554,[0.655,1,0.313]],[0.556,[0.667,1,0.3]],[0.558,[0.667,1,0.3]],[0.56,[0.68,1,0.288]],[0.562,[0.68,1,0.288]],[0.564,[0.693,1,0.275]],[0.566,[0.693,1,0.275]],[0.568,[0.705,1,0.262]],[0.569,[0.705,1,0.262]],[0.571,[0.718,1,0.25]],[0.573,[0.718,1,0.25]],[0.575,[0.731,1,0.237]],[0.577,[0.731,1,0.237]],[0.579,[0.743,1,0.225]],[0.581,[0.743,1,0.225]],[0.583,[0.756,1,0.212]],[0.585,[0.756,1,0.212]],[0.587,[0.769,1,0.199]],[0.589,[0.769,1,0.199]],[0.591,[0.781,1,0.187]],[0.593,[0.781,1,0.187]],[0.595,[0.794,1,0.174]],[0.597,[0.794,1,0.174]],[0.599,[0.806,1,0.161]],[0.601,[0.806,1,0.161]],[0.603,[0.819,1,0.149]],[0.605,[0.819,1,0.149]],[0.607,[0.832,1,0.136]],[0.609,[0.832,1,0.136]],[0.611,[0.844,1,0.123]],[0.613,[0.844,1,0.123]],[0.614,[0.857,1,0.111]],[0.616,[0.857,1,0.111]],[0.618,[0.87,1,0.098]],[0.62,[0.87,1,0.098]],[0.622,[0.882,1,0.085]],[0.624,[0.882,1,0.085]],[0.626,[0.895,1,0.073]],[0.628,[0.895,1,0.073]],[0.63,[0.908,1,0.06]],[0.632,[0.908,1,0.06]],[0.634,[0.92,1,0.047]],[0.636,[0.92,1,0.047]],[0.638,[0.933,1,0.035]],[0.64,[0.933,1,0.035]],[0.642,[0.946,0.988,0.022]],[0.644,[0.946,0.988,0.022]],[0.646,[0.958,0.974,0.009]],[0.648,[0.958,0.974,0.009]],[0.65,[0.971,0.959,0]],[0.652,[0.971,0.959,0]],[0.654,[0.984,0.945,0]],[0.656,[0.984,0.945,0]],[0.658,[0.996,0.93,0]],[0.659,[0.996,0.93,0]],[0.661,[1,0.916,0]],[0.663,[1,0.916,0]],[0.665,[1,0.901,0]],[0.667,[1,0.901,0]],[0.669,[1,0.887,0]],[0.671,[1,0.887,0]],[0.673,[1,0.872,0]],[0.675,[1,0.872,0]],[0.677,[1,0.858,0]],[0.679,[1,0.858,0]],[0.681,[1,0.843,0]],[0.683,[1,0.843,0]],[0.685,[1,0.829,0]],[0.687,[1,0.829,0]],[0.689,[1,0.814,0]],[0.691,[1,0.814,0]],[0.693,[1,0.8,0]],[0.695,[1,0.8,0]],[0.697,[1,0.785,0]],[0.699,[1,0.785,0]],[0.701,[1,0.771,0]],[0.703,[1,0.771,0]],[0.705,[1,0.756,0]],[0.706,[1,0.756,0]],[0.708,[1,0.741,0]],[0.71,[1,0.741,0]],[0.712,[1,0.727,0]],[0.714,[1,0.727,0]],[0.716,[1,0.712,0]],[0.718,[1,0.712,0]],[0.72,[1,0.698,0]],[0.722,[1,0.698,0]],[0.724,[1,0.683,0]],[0.726,[1,0.683,0]],[0.728,[1,0.669,0]],[0.73,[1,0.669,0]],[0.732,[1,0.654,0]],[0.734,[1,0.654,0]],[0.736,[1,0.64,0]],[0.738,[1,0.64,0]],[0.74,[1,0.625,0]],[0.742,[1,0.625,0]],[0.744,[1,0.611,0]],[0.746,[1,0.611,0]],[0.748,[1,0.596,0]],[0.75,[1,0.596,0]],[0.751,[1,0.582,0]],[0.753,[1,0.582,0]],[0.755,[1,0.567,0]],[0.757,[1,0.567,0]],[0.759,[1,0.553,0]],[0.761,[1,0.553,0]],[0.763,[1,0.538,0]],[0.765,[1,0.538,0]],[0.767,[1,0.524,0]],[0.769,[1,0.524,0]],[0.771,[1,0.509,0]],[0.773,[1,0.509,0]],[0.775,[1,0.495,0]],[0.777,[1,0.495,0]],[0.779,[1,0.48,0]],[0.781,[1,0.48,0]],[0.783,[1,0.466,0]],[0.785,[1,0.466,0]],[0.787,[1,0.451,0]],[0.789,[1,0.451,0]],[0.791,[1,0.436,0]],[0.793,[1,0.436,0]],[0.795,[1,0.422,0]],[0.796,[1,0.422,0]],[0.798,[1,0.407,0]],[0.8,[1,0.407,0]],[0.802,[1,0.393,0]],[0.804,[1,0.393,0]],[0.806,[1,0.378,0]],[0.808,[1,0.378,0]],[0.81,[1,0.364,0]],[0.812,[1,0.364,0]],[0.814,[1,0.349,0]],[0.816,[1,0.349,0]],[0.818,[1,0.335,0]],[0.82,[1,0.335,0]],[0.822,[1,0.32,0]],[0.824,[1,0.32,0]],[0.826,[1,0.306,0]],[0.828,[1,0.306,0]],[0.83,[1,0.291,0]],[0.832,[1,0.291,0]],[0.834,[1,0.277,0]],[0.836,[1,0.277,0]],[0.838,[1,0.262,0]],[0.84,[1,0.262,0]],[0.841,[1,0.248,0]],[0.843,[1,0.248,0]],[0.845,[1,0.233,0]],[0.847,[1,0.233,0]],[0.849,[1,0.219,0]],[0.851,[1,0.219,0]],[0.853,[1,0.204,0]],[0.855,[1,0.204,0]],[0.857,[1,0.19,0]],[0.859,[1,0.19,0]],[0.861,[1,0.175,0]],[0.863,[1,0.175,0]],[0.865,[1,0.16,0]],[0.867,[1,0.16,0]],[0.869,[1,0.146,0]],[0.871,[1,0.146,0]],[0.873,[1,0.131,0]],[0.875,[1,0.131,0]],[0.877,[1,0.117,0]],[0.879,[1,0.117,0]],[0.881,[1,0.102,0]],[0.883,[1,0.102,0]],[0.885,[1,0.088,0]],[0.886,[1,0.088,0]],[0.888,[0.999,0.073,0]],[0.89,[0.999,0.073,0]],[0.892,[0.981,0.059,0]],[0.894,[0.981,0.059,0]],[0.896,[0.963,0.044,0]],[0.898,[0.963,0.044,0]],[0.9,[0.946,0.03,0]],[0.902,[0.946,0.03,0]],[0.904,[0.928,0.015,0]],[0.906,[0.928,0.015,0]],[0.908,[0.91,0.001,0]],[0.91,[0.91,0.001,0]],[0.912,[0.892,0,0]],[0.914,[0.892,0,0]],[0.916,[0.874,0,0]],[0.918,[0.874,0,0]],[0.92,[0.857,0,0]],[0.922,[0.857,0,0]],[0.924,[0.839,0,0]],[0.926,[0.839,0,0]],[0.928,[0.821,0,0]],[0.93,[0.821,0,0]],[0.932,[0.803,0,0]],[0.933,[0.803,0,0]],[0.935,[0.785,0,0]],[0.937,[0.785,0,0]],[0.939,[0.767,0,0]],[0.941,[0.767,0,0]],[0.943,[0.75,0,0]],[0.945,[0.75,0,0]],[0.947,[0.732,0,0]],[0.949,[0.732,0,0]],[0.951,[0.714,0,0]],[0.953,[0.714,0,0]],[0.955,[0.696,0,0]],[0.957,[0.696,0,0]],[0.959,[0.678,0,0]],[0.961,[0.678,0,0]],[0.963,[0.66,0,0]],[0.965,[0.66,0,0]],[0.967,[0.643,0,0]],[0.969,[0.643,0,0]],[0.971,[0.625,0,0]],[0.973,[0.625,0,0]],[0.975,[0.607,0,0]],[0.977,[0.607,0,0]],[0.978,[0.589,0,0]],[0.98,[0.589,0,0]],[0.982,[0.571,0,0]],[0.984,[0.571,0,0]],[0.986,[0.553,0,0]],[0.988,[0.553,0,0]],[0.99,[0.536,0,0]],[0.992,[0.536,0,0]],[0.994,[0.518,0,0]],[0.996,[0.518,0,0]],[0.998,[0.5,0,0]],[1,[0.5,0,0]]]],"maxStress":505.8612091201023,"minStress":-1466.6131768776693},"edges":[{"source":4,"area":1,"density":0.284,"id":"e0","stiffness":30000000,"target":5,"stress":0.0},{"source":5,"area":1,"density":0.284,"id":"e1","stiffness":30000000,"target":6,"stress":0.0},{"source":6,"area":1,"density":0.284,"id":"e2","stiffness":30000000,"target":7,"stress":0.0},{"source":7,"area":1,"density":0.284,"id":"e3","stiffness":30000000,"target":8,"stress":0.0},{"source":8,"area":1,"density":0.284,"id":"e4","stiffness":30000000,"target":9,"stress":0.0},{"source":9,"area":1,"density":0.284,"id":"e5","stiffness":30000000,"target":10,"stress":0.0},{"source":10,"area":1,"density":0.284,"id":"e6","stiffness":30000000,"target":11,"stress":0.0},{"source":11,"area":1,"density":0.284,"id":"e7","stiffness":30000000,"target":4,"stress":0.0},{"source":0,"area":1,"density":0.284,"id":"e8","stiffness":30000000,"target":5,"stress":0.0},{"source":1,"area":1,"density":0.284,"id":"e9","stiffness":30000000,"target":7,"stress":0.0},{"source":2,"area":1,"density":0.284,"id":"e10","stiffness":30000000,"target":9,"stress":0.0},{"source":3,"area":1,"density":0.284,"id":"e11","stiffness":30000000,"target":11,"stress":0.0},{"source":15,"area":1,"density":0.284,"id":"e12","stiffness":30000000,"target":16,"stress":-1001.3561240512223},{"source":16,"area":1,"density":0.284,"id":"e13","stiffness":30000000,"target":17,"stress":136.64322962456967},{"source":17,"area":1,"density":0.284,"id":"e14","stiffness":30000000,"target":18,"stress":133.79889178188935},{"source":18,"area":1,"density":0.284,"id":"e15","stiffness":30000000,"target":19,"stress":-939.595427137831},{"source":19,"area":1,"density":0.284,"id":"e16","stiffness":30000000,"target":20,"stress":-936.5155938159199},{"source":20,"area":1,"density":0.284,"id":"e17","stiffness":30000000,"target":21,"stress":200.92276533447648},{"source":21,"area":1,"density":0.284,"id":"e18","stiffness":30000000,"target":22,"stress":73.46611338336315},{"source":22,"area":1,"density":0.284,"id":"e19","stiffness":30000000,"target":15,"stress":-998.0870856308499},{"source":14,"area":1,"density":0.284,"id":"e20","stiffness":30000000,"target":16,"stress":-263.4249887588032},{"source":12,"area":1,"density":0.284,"id":"e21","stiffness":30000000,"target":18,"stress":-1304.5367460427258},{"source":13,"area":1,"density":0.284,"id":"e22","stiffness":30000000,"target":20,"stress":-53.55907480512245},{"source":0,"area":1,"density":0.284,"id":"e23","stiffness":30000000,"target":22,"stress":-1466.6131768776693},{"source":26,"area":1,"density":0.284,"id":"e24","stiffness":30000000,"target":27,"stress":-2.8090951037559413},{"source":27,"area":1,"density":0.284,"id":"e25","stiffness":30000000,"target":28,"stress":74.30094785327282},{"source":28,"area":1,"density":0.284,"id":"e26","stiffness":30000000,"target":29,"stress":51.593217618545765},{"source":29,"area":1,"density":0.284,"id":"e27","stiffness":30000000,"target":30,"stress":-8.401272930024463},{"source":30,"area":1,"density":0.284,"id":"e28","stiffness":30000000,"target":31,"stress":14.17161974887154},{"source":31,"area":1,"density":0.284,"id":"e29","stiffness":30000000,"target":32,"stress":23.749276381444673},{"source":32,"area":1,"density":0.284,"id":"e30","stiffness":30000000,"target":33,"stress":16.138532307484034},{"source":33,"area":1,"density":0.284,"id":"e31","stiffness":30000000,"target":26,"stress":-18.70454752360655},{"source":23,"area":1,"density":0.284,"id":"e32","stiffness":30000000,"target":31,"stress":14.448422900828675},{"source":24,"area":1,"density":0.284,"id":"e33","stiffness":30000000,"target":33,"stress":-33.30073219298949},{"source":12,"area":1,"density":0.284,"id":"e34","stiffness":30000000,"target":27,"stress":79.80682307863978},{"source":25,"area":1,"density":0.284,"id":"e35","stiffness":30000000,"target":29,"stress":-59.41996793156431},{"source":36,"area":1,"density":0.284,"id":"e36","stiffness":30000000,"target":37,"stress":-508.1291251295248},{"source":37,"area":1,"density":0.284,"id":"e37","stiffness":30000000,"target":38,"stress":-466.51942825070466},{"source":38,"area":1,"density":0.284,"id":"e38","stiffness":30000000,"target":39,"stress":499.35719791611507},{"source":39,"area":1,"density":0.284,"id":"e39","stiffness":30000000,"target":40,"stress":-537.4161132071984},{"source":40,"area":1,"density":0.284,"id":"e40","stiffness":30000000,"target":41,"stress":-443.8324680007325},{"source":41,"area":1,"density":0.284,"id":"e41","stiffness":30000000,"target":42,"stress":-373.30331388664126},{"source":42,"area":1,"density":0.284,"id":"e42","stiffness":30000000,"target":43,"stress":462.1136421635565},{"source":43,"area":1,"density":0.284,"id":"e43","stiffness":30000000,"target":36,"stress":-530.1201000992029},{"source":35,"area":1,"density":0.284,"id":"e44","stiffness":30000000,"target":41,"stress":211.11230217314022},{"source":2,"area":1,"density":0.284,"id":"e45","stiffness":30000000,"target":43,"stress":-829.5258184160555},{"source":34,"area":1,"density":0.284,"id":"e46","stiffness":30000000,"target":37,"stress":219.20104002231528},{"source":23,"area":1,"density":0.284,"id":"e47","stiffness":30000000,"target":39,"stress":-866.1071131586893},{"source":44,"area":1,"density":0.284,"id":"e48","stiffness":30000000,"target":45,"stress":208.85492074499956},{"source":45,"area":1,"density":0.284,"id":"e49","stiffness":30000000,"target":46,"stress":-721.6941174263237},{"source":46,"area":1,"density":0.284,"id":"e50","stiffness":30000000,"target":47,"stress":-708.228892681511},{"source":47,"area":1,"density":0.284,"id":"e51","stiffness":30000000,"target":48,"stress":-139.37770983452117},{"source":48,"area":1,"density":0.284,"id":"e52","stiffness":30000000,"target":49,"stress":203.80618758989058},{"source":49,"area":1,"density":0.284,"id":"e53","stiffness":30000000,"target":50,"stress":-584.128213890682},{"source":50,"area":1,"density":0.284,"id":"e54","stiffness":30000000,"target":51,"stress":-537.9021365038722},{"source":51,"area":1,"density":0.284,"id":"e55","stiffness":30000000,"target":44,"stress":-97.25555542395604},{"source":24,"area":1,"density":0.284,"id":"e56","stiffness":30000000,"target":49,"stress":-927.1925039664127},{"source":34,"area":1,"density":0.284,"id":"e57","stiffness":30000000,"target":51,"stress":116.32687635477463},{"source":1,"area":1,"density":0.284,"id":"e58","stiffness":30000000,"target":45,"stress":-1015.3232029940253},{"source":13,"area":1,"density":0.284,"id":"e59","stiffness":30000000,"target":47,"stress":196.95355805257122},{"source":52,"area":1,"density":0.284,"id":"e60","stiffness":30000000,"target":53,"stress":142.54346199370724},{"source":53,"area":1,"density":0.284,"id":"e61","stiffness":30000000,"target":54,"stress":-982.2533513768813},{"source":54,"area":1,"density":0.284,"id":"e62","stiffness":30000000,"target":55,"stress":-980.4176526205179},{"source":55,"area":1,"density":0.284,"id":"e63","stiffness":30000000,"target":56,"stress":175.5600533358408},{"source":56,"area":1,"density":0.284,"id":"e64","stiffness":30000000,"target":57,"stress":126.93111106282207},{"source":57,"area":1,"density":0.284,"id":"e65","stiffness":30000000,"target":58,"stress":-1064.1311110502313},{"source":58,"area":1,"density":0.284,"id":"e66","stiffness":30000000,"target":59,"stress":-1072.754497124534},{"source":59,"area":1,"density":0.284,"id":"e67","stiffness":30000000,"target":52,"stress":116.0666786082145},{"source":14,"area":1,"density":0.284,"id":"e68","stiffness":30000000,"target":57,"stress":-388.40885719692915},{"source":3,"area":1,"density":0.284,"id":"e69","stiffness":30000000,"target":55,"stress":-1170.033420784172},{"source":35,"area":1,"density":0.284,"id":"e70","stiffness":30000000,"target":53,"stress":-156.6510175778715},{"source":25,"area":1,"density":0.284,"id":"e71","stiffness":30000000,"target":59,"stress":-1466.4663185137872},{"source":63,"area":1,"density":0.284,"id":"e72","stiffness":30000000,"target":64,"stress":0.0},{"source":64,"area":1,"density":0.284,"id":"e73","stiffness":30000000,"target":65,"stress":0.0},{"source":65,"area":1,"density":0.284,"id":"e74","stiffness":30000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.284,"id":"e75","stiffness":30000000,"target":67,"stress":0.0},{"source":67,"area":1,"density":0.284,"id":"e76","stiffness":30000000,"target":68,"stress":0.0},{"source":68,"area":1,"density":0.284,"id":"e77","stiffness":30000000,"target":69,"stress":0.0},{"source":69,"area":1,"density":0.284,"id":"e78","stiffness":30000000,"target":70,"stress":0.0},{"source":70,"area":1,"density":0.284,"id":"e79","stiffness":30000000,"target":63,"stress":0.0},{"source":60,"area":1,"density":0.284,"id":"e80","stiffness":30000000,"target":64,"stress":0.0},{"source":3,"area":1,"density":0.284,"id":"e81","stiffness":30000000,"target":66,"stress":0.0},{"source":61,"area":1,"density":0.284,"id":"e82","stiffness":30000000,"target":68,"stress":0.0},{"source":62,"area":1,"density":0.284,"id":"e83","stiffness":30000000,"target":70,"stress":0.0},{"source":73,"area":1,"density":0.284,"id":"e84","stiffness":30000000,"target":74,"stress":-968.189348269445},{"source":74,"area":1,"density":0.284,"id":"e85","stiffness":30000000,"target":75,"stress":67.0479699602888},{"source":75,"area":1,"density":0.284,"id":"e86","stiffness":30000000,"target":76,"stress":48.362315265495454},{"source":76,"area":1,"density":0.284,"id":"e87","stiffness":30000000,"target":77,"stress":-988.1810218518298},{"source":77,"area":1,"density":0.284,"id":"e88","stiffness":30000000,"target":78,"stress":-981.2110938618922},{"source":78,"area":1,"density":0.284,"id":"e89","stiffness":30000000,"target":79,"stress":71.08687019367063},{"source":79,"area":1,"density":0.284,"id":"e90","stiffness":30000000,"target":80,"stress":40.52712977676433},{"source":80,"area":1,"density":0.284,"id":"e91","stiffness":30000000,"target":73,"stress":-964.207020397175},{"source":72,"area":1,"density":0.284,"id":"e92","stiffness":30000000,"target":74,"stress":-321.0321247381263},{"source":71,"area":1,"density":0.284,"id":"e93","stiffness":30000000,"target":76,"stress":-1397.1922106936138},{"source":14,"area":1,"density":0.284,"id":"e94","stiffness":30000000,"target":78,"stress":-302.02227627183225},{"source":60,"area":1,"density":0.284,"id":"e95","stiffness":30000000,"target":80,"stress":-1345.8411305403279},{"source":83,"area":1,"density":0.284,"id":"e96","stiffness":30000000,"target":84,"stress":-5.753346114812863},{"source":84,"area":1,"density":0.284,"id":"e97","stiffness":30000000,"target":85,"stress":54.919743223036065},{"source":85,"area":1,"density":0.284,"id":"e98","stiffness":30000000,"target":86,"stress":30.01790729811335},{"source":86,"area":1,"density":0.284,"id":"e99","stiffness":30000000,"target":87,"stress":36.99794450914154},{"source":87,"area":1,"density":0.284,"id":"e100","stiffness":30000000,"target":88,"stress":6.052838903568637},{"source":88,"area":1,"density":0.284,"id":"e101","stiffness":30000000,"target":89,"stress":14.218977927854844},{"source":89,"area":1,"density":0.284,"id":"e102","stiffness":30000000,"target":90,"stress":-0.34472128696755316},{"source":90,"area":1,"density":0.284,"id":"e103","stiffness":30000000,"target":83,"stress":72.36238992822524},{"source":81,"area":1,"density":0.284,"id":"e104","stiffness":30000000,"target":88,"stress":9.525369226366102},{"source":25,"area":1,"density":0.284,"id":"e105","stiffness":30000000,"target":90,"stress":66.99626344427492},{"source":71,"area":1,"density":0.284,"id":"e106","stiffness":30000000,"target":84,"stress":56.847289810929645},{"source":82,"area":1,"density":0.284,"id":"e107","stiffness":30000000,"target":86,"stress":4.718604624959024},{"source":92,"area":1,"density":0.284,"id":"e108","stiffness":30000000,"target":93,"stress":-526.2253543877113},{"source":93,"area":1,"density":0.284,"id":"e109","stiffness":30000000,"target":94,"stress":-489.0637661100286},{"source":94,"area":1,"density":0.284,"id":"e110","stiffness":30000000,"target":95,"stress":471.64172663065153},{"source":95,"area":1,"density":0.284,"id":"e111","stiffness":30000000,"target":96,"stress":-494.7151143284027},{"source":96,"area":1,"density":0.284,"id":"e112","stiffness":30000000,"target":97,"stress":-430.42379055402967},{"source":97,"area":1,"density":0.284,"id":"e113","stiffness":30000000,"target":98,"stress":-408.81296125943106},{"source":98,"area":1,"density":0.284,"id":"e114","stiffness":30000000,"target":99,"stress":472.74997591851616},{"source":99,"area":1,"density":0.284,"id":"e115","stiffness":30000000,"target":92,"stress":-549.8587267908957},{"source":91,"area":1,"density":0.284,"id":"e116","stiffness":30000000,"target":97,"stress":171.67833631084517},{"source":61,"area":1,"density":0.284,"id":"e117","stiffness":30000000,"target":99,"stress":-853.3748976639919},{"source":35,"area":1,"density":0.284,"id":"e118","stiffness":30000000,"target":93,"stress":216.35622988665136},{"source":81,"area":1,"density":0.284,"id":"e119","stiffness":30000000,"target":95,"stress":-796.8759896083279},{"source":25,"area":1,"density":0.284,"id":"e120","stiffness":30000000,"target":53,"stress":-1184.8811751719115},{"source":35,"area":1,"density":0.284,"id":"e121","stiffness":30000000,"target":55,"stress":-87.55274027001501},{"source":3,"area":1,"density":0.284,"id":"e122","stiffness":30000000,"target":57,"stress":-1376.4926502619455},{"source":14,"area":1,"density":0.284,"id":"e123","stiffness":30000000,"target":59,"stress":-429.25226567523083},{"source":100,"area":1,"density":0.284,"id":"e124","stiffness":30000000,"target":101,"stress":151.55501989542245},{"source":101,"area":1,"density":0.284,"id":"e125","stiffness":30000000,"target":102,"stress":-1014.6657504815017},{"source":102,"area":1,"density":0.284,"id":"e126","stiffness":30000000,"target":103,"stress":-990.7219455278555},{"source":103,"area":1,"density":0.284,"id":"e127","stiffness":30000000,"target":104,"stress":164.93838451167292},{"source":104,"area":1,"density":0.284,"id":"e128","stiffness":30000000,"target":105,"stress":92.00169313052103},{"source":105,"area":1,"density":0.284,"id":"e129","stiffness":30000000,"target":106,"stress":-1053.0528256716175},{"source":106,"area":1,"density":0.284,"id":"e130","stiffness":30000000,"target":107,"stress":-1038.1642211750893},{"source":107,"area":1,"density":0.284,"id":"e131","stiffness":30000000,"target":100,"stress":124.06597963005555},{"source":72,"area":1,"density":0.284,"id":"e132","stiffness":30000000,"target":105,"stress":-476.2065295008203},{"source":62,"area":1,"density":0.284,"id":"e133","stiffness":30000000,"target":103,"stress":-1168.2542133181848},{"source":91,"area":1,"density":0.284,"id":"e134","stiffness":30000000,"target":101,"stress":-173.37056602539678},{"source":82,"area":1,"density":0.284,"id":"e135","stiffness":30000000,"target":107,"stress":-1346.487276128814},{"source":111,"area":1,"density":0.284,"id":"e136","stiffness":30000000,"target":112,"stress":0.0},{"source":112,"area":1,"density":0.284,"id":"e137","stiffness":30000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.284,"id":"e138","stiffness":30000000,"target":114,"stress":0.0},{"source":114,"area":1,"density":0.284,"id":"e139","stiffness":30000000,"target":115,"stress":0.0},{"source":115,"area":1,"density":0.284,"id":"e140","stiffness":30000000,"target":116,"stress":0.0},{"source":116,"area":1,"density":0.284,"id":"e141","stiffness":30000000,"target":117,"stress":0.0},{"source":117,"area":1,"density":0.284,"id":"e142","stiffness":30000000,"target":118,"stress":0.0},{"source":118,"area":1,"density":0.284,"id":"e143","stiffness":30000000,"target":111,"stress":0.0},{"source":108,"area":1,"density":0.284,"id":"e144","stiffness":30000000,"target":112,"stress":0.0},{"source":62,"area":1,"density":0.284,"id":"e145","stiffness":30000000,"target":114,"stress":0.0},{"source":109,"area":1,"density":0.284,"id":"e146","stiffness":30000000,"target":116,"stress":0.0},{"source":110,"area":1,"density":0.284,"id":"e147","stiffness":30000000,"target":118,"stress":0.0},{"source":121,"area":1,"density":0.284,"id":"e148","stiffness":30000000,"target":122,"stress":-916.7112173052103},{"source":122,"area":1,"density":0.284,"id":"e149","stiffness":30000000,"target":123,"stress":151.84678175626613},{"source":123,"area":1,"density":0.284,"id":"e150","stiffness":30000000,"target":124,"stress":110.53497286587992},{"source":124,"area":1,"density":0.284,"id":"e151","stiffness":30000000,"target":125,"stress":-1007.8200333826959},{"source":125,"area":1,"density":0.284,"id":"e152","stiffness":30000000,"target":126,"stress":-1001.4900066170883},{"source":126,"area":1,"density":0.284,"id":"e153","stiffness":30000000,"target":127,"stress":101.29800913091046},{"source":127,"area":1,"density":0.284,"id":"e154","stiffness":30000000,"target":128,"stress":172.3485237415243},{"source":128,"area":1,"density":0.284,"id":"e155","stiffness":30000000,"target":121,"stress":-910.9584108562221},{"source":120,"area":1,"density":0.284,"id":"e156","stiffness":30000000,"target":122,"stress":-204.44547638346123},{"source":119,"area":1,"density":0.284,"id":"e157","stiffness":30000000,"target":124,"stress":-1425.1979013872467},{"source":72,"area":1,"density":0.284,"id":"e158","stiffness":30000000,"target":126,"stress":-357.5096299670255},{"source":108,"area":1,"density":0.284,"id":"e159","stiffness":30000000,"target":128,"stress":-1156.9790351963854},{"source":131,"area":1,"density":0.284,"id":"e160","stiffness":30000000,"target":132,"stress":19.168591552820107},{"source":132,"area":1,"density":0.284,"id":"e161","stiffness":30000000,"target":133,"stress":-10.036590253145182},{"source":133,"area":1,"density":0.284,"id":"e162","stiffness":30000000,"target":134,"stress":-18.593618020218067},{"source":134,"area":1,"density":0.284,"id":"e163","stiffness":30000000,"target":135,"stress":33.9048430112748},{"source":135,"area":1,"density":0.284,"id":"e164","stiffness":30000000,"target":136,"stress":8.376049154128077},{"source":136,"area":1,"density":0.284,"id":"e165","stiffness":30000000,"target":137,"stress":-27.082687567512494},{"source":137,"area":1,"density":0.284,"id":"e166","stiffness":30000000,"target":138,"stress":-30.621366222091105},{"source":138,"area":1,"density":0.284,"id":"e167","stiffness":30000000,"target":131,"stress":104.80295012287559},{"source":129,"area":1,"density":0.284,"id":"e168","stiffness":30000000,"target":136,"stress":-34.005505893171694},{"source":82,"area":1,"density":0.284,"id":"e169","stiffness":30000000,"target":138,"stress":127.69192236967402},{"source":119,"area":1,"density":0.284,"id":"e170","stiffness":30000000,"target":132,"stress":-30.668237879125673},{"source":130,"area":1,"density":0.284,"id":"e171","stiffness":30000000,"target":134,"stress":51.83743732780936},{"source":140,"area":1,"density":0.284,"id":"e172","stiffness":30000000,"target":141,"stress":-565.8846133704319},{"source":141,"area":1,"density":0.284,"id":"e173","stiffness":30000000,"target":142,"stress":-444.4395999194465},{"source":142,"area":1,"density":0.284,"id":"e174","stiffness":30000000,"target":143,"stress":482.25128747765524},{"source":143,"area":1,"density":0.284,"id":"e175","stiffness":30000000,"target":144,"stress":-541.23998464196},{"source":144,"area":1,"density":0.284,"id":"e176","stiffness":30000000,"target":145,"stress":-467.41105726752966},{"source":145,"area":1,"density":0.284,"id":"e177","stiffness":30000000,"target":146,"stress":-385.0731651761627},{"source":146,"area":1,"density":0.284,"id":"e178","stiffness":30000000,"target":147,"stress":495.31670163037006},{"source":147,"area":1,"density":0.284,"id":"e179","stiffness":30000000,"target":140,"stress":-587.9940740700818},{"source":139,"area":1,"density":0.284,"id":"e180","stiffness":30000000,"target":145,"stress":234.6869204731796},{"source":109,"area":1,"density":0.284,"id":"e181","stiffness":30000000,"target":147,"stress":-909.6977857762},{"source":91,"area":1,"density":0.284,"id":"e182","stiffness":30000000,"target":141,"stress":301.01725814651587},{"source":129,"area":1,"density":0.284,"id":"e183","stiffness":30000000,"target":143,"stress":-856.1722495034767},{"source":82,"area":1,"density":0.284,"id":"e184","stiffness":30000000,"target":101,"stress":-1266.103524795937},{"source":91,"area":1,"density":0.284,"id":"e185","stiffness":30000000,"target":103,"stress":-86.06211810688072},{"source":62,"area":1,"density":0.284,"id":"e186","stiffness":30000000,"target":105,"stress":-1425.688697184993},{"source":72,"area":1,"density":0.284,"id":"e187","stiffness":30000000,"target":107,"stress":-362.8328525062381},{"source":148,"area":1,"density":0.284,"id":"e188","stiffness":30000000,"target":149,"stress":-194.7129962090998},{"source":149,"area":1,"density":0.284,"id":"e189","stiffness":30000000,"target":150,"stress":-648.432547323519},{"source":150,"area":1,"density":0.284,"id":"e190","stiffness":30000000,"target":151,"stress":-637.3787301513978},{"source":151,"area":1,"density":0.284,"id":"e191","stiffness":30000000,"target":152,"stress":143.5803541608458},{"source":152,"area":1,"density":0.284,"id":"e192","stiffness":30000000,"target":153,"stress":-193.6297484499997},{"source":153,"area":1,"density":0.284,"id":"e193","stiffness":30000000,"target":154,"stress":-575.2981668676344},{"source":154,"area":1,"density":0.284,"id":"e194","stiffness":30000000,"target":155,"stress":-607.5255361585462},{"source":155,"area":1,"density":0.284,"id":"e195","stiffness":30000000,"target":148,"stress":168.02970442389383},{"source":120,"area":1,"density":0.284,"id":"e196","stiffness":30000000,"target":153,"stress":54.71697686614733},{"source":110,"area":1,"density":0.284,"id":"e197","stiffness":30000000,"target":151,"stress":-917.3283928108781},{"source":139,"area":1,"density":0.284,"id":"e198","stiffness":30000000,"target":149,"stress":124.54643028783455},{"source":130,"area":1,"density":0.284,"id":"e199","stiffness":30000000,"target":155,"stress":-937.6394110533025},{"source":156,"area":1,"density":0.284,"id":"e200","stiffness":30000000,"target":157,"stress":-9.629544260106892},{"source":157,"area":1,"density":0.284,"id":"e201","stiffness":30000000,"target":158,"stress":10.662476973391875},{"source":158,"area":1,"density":0.284,"id":"e202","stiffness":30000000,"target":159,"stress":9.384546523008424},{"source":159,"area":1,"density":0.284,"id":"e203","stiffness":30000000,"target":160,"stress":27.216347021476885},{"source":160,"area":1,"density":0.284,"id":"e204","stiffness":30000000,"target":161,"stress":-18.975307141816813},{"source":161,"area":1,"density":0.284,"id":"e205","stiffness":30000000,"target":162,"stress":-31.861828344788925},{"source":162,"area":1,"density":0.284,"id":"e206","stiffness":30000000,"target":163,"stress":-23.841408859298667},{"source":163,"area":1,"density":0.284,"id":"e207","stiffness":30000000,"target":156,"stress":77.00739491860776},{"source":12,"area":1,"density":0.284,"id":"e208","stiffness":30000000,"target":157,"stress":9.958311522070876},{"source":24,"area":1,"density":0.284,"id":"e209","stiffness":30000000,"target":159,"stress":11.098012158522698},{"source":23,"area":1,"density":0.284,"id":"e210","stiffness":30000000,"target":161,"stress":-20.707966582951396},{"source":25,"area":1,"density":0.284,"id":"e211","stiffness":30000000,"target":163,"stress":90.98659105370342},{"source":167,"area":1,"density":0.284,"id":"e212","stiffness":30000000,"target":168,"stress":-698.0284577998084},{"source":168,"area":1,"density":0.284,"id":"e213","stiffness":30000000,"target":169,"stress":112.02077578897918},{"source":169,"area":1,"density":0.284,"id":"e214","stiffness":30000000,"target":170,"stress":126.92623224075732},{"source":170,"area":1,"density":0.284,"id":"e215","stiffness":30000000,"target":171,"stress":-660.4698113679235},{"source":171,"area":1,"density":0.284,"id":"e216","stiffness":30000000,"target":172,"stress":-666.2641707011161},{"source":172,"area":1,"density":0.284,"id":"e217","stiffness":30000000,"target":173,"stress":120.38450840523696},{"source":173,"area":1,"density":0.284,"id":"e218","stiffness":30000000,"target":174,"stress":72.35632703341975},{"source":174,"area":1,"density":0.284,"id":"e219","stiffness":30000000,"target":167,"stress":-703.7216569843574},{"source":166,"area":1,"density":0.284,"id":"e220","stiffness":30000000,"target":168,"stress":-156.37906755519228},{"source":164,"area":1,"density":0.284,"id":"e221","stiffness":30000000,"target":170,"stress":-846.7755743987906},{"source":165,"area":1,"density":0.284,"id":"e222","stiffness":30000000,"target":172,"stress":-151.9474897609486},{"source":12,"area":1,"density":0.284,"id":"e223","stiffness":30000000,"target":174,"stress":-1021.1015410984618},{"source":178,"area":1,"density":0.284,"id":"e224","stiffness":30000000,"target":179,"stress":27.418409903227513},{"source":179,"area":1,"density":0.284,"id":"e225","stiffness":30000000,"target":180,"stress":50.073402690565516},{"source":180,"area":1,"density":0.284,"id":"e226","stiffness":30000000,"target":181,"stress":20.981755223620638},{"source":181,"area":1,"density":0.284,"id":"e227","stiffness":30000000,"target":182,"stress":44.41117066505675},{"source":182,"area":1,"density":0.284,"id":"e228","stiffness":30000000,"target":183,"stress":62.62029793824197},{"source":183,"area":1,"density":0.284,"id":"e229","stiffness":30000000,"target":184,"stress":-12.139035390236772},{"source":184,"area":1,"density":0.284,"id":"e230","stiffness":30000000,"target":185,"stress":-37.35750027559393},{"source":185,"area":1,"density":0.284,"id":"e231","stiffness":30000000,"target":178,"stress":-8.052996615597662},{"source":175,"area":1,"density":0.284,"id":"e232","stiffness":30000000,"target":183,"stress":-59.71939222326834},{"source":176,"area":1,"density":0.284,"id":"e233","stiffness":30000000,"target":185,"stress":42.51261865073774},{"source":164,"area":1,"density":0.284,"id":"e234","stiffness":30000000,"target":179,"stress":33.32307218613653},{"source":177,"area":1,"density":0.284,"id":"e235","stiffness":30000000,"target":181,"stress":27.519569289259774},{"source":188,"area":1,"density":0.284,"id":"e236","stiffness":30000000,"target":189,"stress":-242.21586399491474},{"source":189,"area":1,"density":0.284,"id":"e237","stiffness":30000000,"target":190,"stress":-225.11461886221397},{"source":190,"area":1,"density":0.284,"id":"e238","stiffness":30000000,"target":191,"stress":309.80168755863184},{"source":191,"area":1,"density":0.284,"id":"e239","stiffness":30000000,"target":192,"stress":-455.3588501151025},{"source":192,"area":1,"density":0.284,"id":"e240","stiffness":30000000,"target":193,"stress":-380.90299550522826},{"source":193,"area":1,"density":0.284,"id":"e241","stiffness":30000000,"target":194,"stress":-190.75850325480263},{"source":194,"area":1,"density":0.284,"id":"e242","stiffness":30000000,"target":195,"stress":304.46197442347363},{"source":195,"area":1,"density":0.284,"id":"e243","stiffness":30000000,"target":188,"stress":-298.9301059951433},{"source":187,"area":1,"density":0.284,"id":"e244","stiffness":30000000,"target":193,"stress":283.8444199454538},{"source":23,"area":1,"density":0.284,"id":"e245","stiffness":30000000,"target":195,"stress":-509.6323546053261},{"source":186,"area":1,"density":0.284,"id":"e246","stiffness":30000000,"target":189,"stress":102.43885324950462},{"source":175,"area":1,"density":0.284,"id":"e247","stiffness":30000000,"target":191,"stress":-665.0897228007632},{"source":196,"area":1,"density":0.284,"id":"e248","stiffness":30000000,"target":197,"stress":126.8364150578122},{"source":197,"area":1,"density":0.284,"id":"e249","stiffness":30000000,"target":198,"stress":-348.07961631550904},{"source":198,"area":1,"density":0.284,"id":"e250","stiffness":30000000,"target":199,"stress":-310.23508159079466},{"source":199,"area":1,"density":0.284,"id":"e251","stiffness":30000000,"target":200,"stress":-116.37757209207483},{"source":200,"area":1,"density":0.284,"id":"e252","stiffness":30000000,"target":201,"stress":117.89328998779219},{"source":201,"area":1,"density":0.284,"id":"e253","stiffness":30000000,"target":202,"stress":-371.14663249692364},{"source":202,"area":1,"density":0.284,"id":"e254","stiffness":30000000,"target":203,"stress":-360.9729484446992},{"source":203,"area":1,"density":0.284,"id":"e255","stiffness":30000000,"target":196,"stress":-102.27591984596584},{"source":176,"area":1,"density":0.284,"id":"e256","stiffness":30000000,"target":201,"stress":-589.2122090803439},{"source":186,"area":1,"density":0.284,"id":"e257","stiffness":30000000,"target":203,"stress":54.36248731293736},{"source":24,"area":1,"density":0.284,"id":"e258","stiffness":30000000,"target":197,"stress":-577.8616313072196},{"source":165,"area":1,"density":0.284,"id":"e259","stiffness":30000000,"target":199,"stress":-12.082136154878667},{"source":204,"area":1,"density":0.284,"id":"e260","stiffness":30000000,"target":205,"stress":148.88883036597232},{"source":205,"area":1,"density":0.284,"id":"e261","stiffness":30000000,"target":206,"stress":-688.2003756072577},{"source":206,"area":1,"density":0.284,"id":"e262","stiffness":30000000,"target":207,"stress":-712.9947595714843},{"source":207,"area":1,"density":0.284,"id":"e263","stiffness":30000000,"target":208,"stress":104.46449080106687},{"source":208,"area":1,"density":0.284,"id":"e264","stiffness":30000000,"target":209,"stress":97.50198625188163},{"source":209,"area":1,"density":0.284,"id":"e265","stiffness":30000000,"target":210,"stress":-710.514496535517},{"source":210,"area":1,"density":0.284,"id":"e266","stiffness":30000000,"target":211,"stress":-736.0908943855887},{"source":211,"area":1,"density":0.284,"id":"e267","stiffness":30000000,"target":204,"stress":107.19621026307593},{"source":166,"area":1,"density":0.284,"id":"e268","stiffness":30000000,"target":209,"stress":-142.6633813540037},{"source":25,"area":1,"density":0.284,"id":"e269","stiffness":30000000,"target":207,"stress":-1001.6077100008736},{"source":187,"area":1,"density":0.284,"id":"e270","stiffness":30000000,"target":205,"stress":57.4706385927637},{"source":177,"area":1,"density":0.284,"id":"e271","stiffness":30000000,"target":211,"stress":-1054.9400963148134},{"source":83,"area":1,"density":0.284,"id":"e272","stiffness":30000000,"target":212,"stress":-45.15025564836974},{"source":212,"area":1,"density":0.284,"id":"e273","stiffness":30000000,"target":213,"stress":48.0260752303617},{"source":213,"area":1,"density":0.284,"id":"e274","stiffness":30000000,"target":214,"stress":37.445863960027154},{"source":214,"area":1,"density":0.284,"id":"e275","stiffness":30000000,"target":87,"stress":41.07296584578923},{"source":87,"area":1,"density":0.284,"id":"e276","stiffness":30000000,"target":215,"stress":-27.411681046774433},{"source":215,"area":1,"density":0.284,"id":"e277","stiffness":30000000,"target":216,"stress":3.5368814587082746},{"source":216,"area":1,"density":0.284,"id":"e278","stiffness":30000000,"target":217,"stress":3.8304865198540097},{"source":217,"area":1,"density":0.284,"id":"e279","stiffness":30000000,"target":83,"stress":63.885087925362846},{"source":71,"area":1,"density":0.284,"id":"e280","stiffness":30000000,"target":212,"stress":77.54462000380681},{"source":25,"area":1,"density":0.284,"id":"e281","stiffness":30000000,"target":214,"stress":-5.582028049458261},{"source":81,"area":1,"density":0.284,"id":"e282","stiffness":30000000,"target":215,"stress":20.86166675529119},{"source":82,"area":1,"density":0.284,"id":"e283","stiffness":30000000,"target":217,"stress":48.84284731188301},{"source":220,"area":1,"density":0.284,"id":"e284","stiffness":30000000,"target":221,"stress":-662.846849215129},{"source":221,"area":1,"density":0.284,"id":"e285","stiffness":30000000,"target":222,"stress":78.88846728996592},{"source":222,"area":1,"density":0.284,"id":"e286","stiffness":30000000,"target":223,"stress":57.624556739225085},{"source":223,"area":1,"density":0.284,"id":"e287","stiffness":30000000,"target":224,"stress":-665.1288050029974},{"source":224,"area":1,"density":0.284,"id":"e288","stiffness":30000000,"target":225,"stress":-669.4284803227823},{"source":225,"area":1,"density":0.284,"id":"e289","stiffness":30000000,"target":226,"stress":72.45846907205652},{"source":226,"area":1,"density":0.284,"id":"e290","stiffness":30000000,"target":227,"stress":53.935812184168235},{"source":227,"area":1,"density":0.284,"id":"e291","stiffness":30000000,"target":220,"stress":-668.1220986333789},{"source":219,"area":1,"density":0.284,"id":"e292","stiffness":30000000,"target":221,"stress":-125.32795623936703},{"source":218,"area":1,"density":0.284,"id":"e293","stiffness":30000000,"target":223,"stress":-946.1344481421049},{"source":166,"area":1,"density":0.284,"id":"e294","stiffness":30000000,"target":225,"stress":-168.3189169838992},{"source":71,"area":1,"density":0.284,"id":"e295","stiffness":30000000,"target":227,"stress":-976.5845362936482},{"source":230,"area":1,"density":0.284,"id":"e296","stiffness":30000000,"target":231,"stress":22.29147756429875},{"source":231,"area":1,"density":0.284,"id":"e297","stiffness":30000000,"target":232,"stress":36.544674091586735},{"source":232,"area":1,"density":0.284,"id":"e298","stiffness":30000000,"target":233,"stress":3.9739225856466707},{"source":233,"area":1,"density":0.284,"id":"e299","stiffness":30000000,"target":234,"stress":92.1576854368452},{"source":234,"area":1,"density":0.284,"id":"e300","stiffness":30000000,"target":235,"stress":64.8430913001518},{"source":235,"area":1,"density":0.284,"id":"e301","stiffness":30000000,"target":236,"stress":-28.340847311501836},{"source":236,"area":1,"density":0.284,"id":"e302","stiffness":30000000,"target":237,"stress":-52.28732698644332},{"source":237,"area":1,"density":0.284,"id":"e303","stiffness":30000000,"target":230,"stress":85.8064801621361},{"source":228,"area":1,"density":0.284,"id":"e304","stiffness":30000000,"target":235,"stress":-76.51801048531684},{"source":177,"area":1,"density":0.284,"id":"e305","stiffness":30000000,"target":237,"stress":141.69951014126175},{"source":218,"area":1,"density":0.284,"id":"e306","stiffness":30000000,"target":231,"stress":17.329968750083193},{"source":229,"area":1,"density":0.284,"id":"e307","stiffness":30000000,"target":233,"stress":86.47374989284936},{"source":239,"area":1,"density":0.284,"id":"e308","stiffness":30000000,"target":240,"stress":-206.17671736081624},{"source":240,"area":1,"density":0.284,"id":"e309","stiffness":30000000,"target":241,"stress":-295.96530674646147},{"source":241,"area":1,"density":0.284,"id":"e310","stiffness":30000000,"target":242,"stress":332.73912824116593},{"source":242,"area":1,"density":0.284,"id":"e311","stiffness":30000000,"target":243,"stress":-363.1088468923176},{"source":243,"area":1,"density":0.284,"id":"e312","stiffness":30000000,"target":244,"stress":-321.7074487997179},{"source":244,"area":1,"density":0.284,"id":"e313","stiffness":30000000,"target":245,"stress":-272.7912246456589},{"source":245,"area":1,"density":0.284,"id":"e314","stiffness":30000000,"target":246,"stress":317.3245646935194},{"source":246,"area":1,"density":0.284,"id":"e315","stiffness":30000000,"target":239,"stress":-229.48873383684872},{"source":238,"area":1,"density":0.284,"id":"e316","stiffness":30000000,"target":244,"stress":153.67772161714853},{"source":81,"area":1,"density":0.284,"id":"e317","stiffness":30000000,"target":246,"stress":-438.26294342864765},{"source":187,"area":1,"density":0.284,"id":"e318","stiffness":30000000,"target":240,"stress":9.159005516228213},{"source":228,"area":1,"density":0.284,"id":"e319","stiffness":30000000,"target":242,"stress":-580.3159211815922},{"source":177,"area":1,"density":0.284,"id":"e320","stiffness":30000000,"target":205,"stress":-702.7942765074646},{"source":187,"area":1,"density":0.284,"id":"e321","stiffness":30000000,"target":207,"stress":-238.10359594058025},{"source":25,"area":1,"density":0.284,"id":"e322","stiffness":30000000,"target":209,"stress":-821.31867291617},{"source":166,"area":1,"density":0.284,"id":"e323","stiffness":30000000,"target":211,"stress":-323.6514082456227},{"source":247,"area":1,"density":0.284,"id":"e324","stiffness":30000000,"target":248,"stress":155.29750805205262},{"source":248,"area":1,"density":0.284,"id":"e325","stiffness":30000000,"target":249,"stress":-684.8580750486461},{"source":249,"area":1,"density":0.284,"id":"e326","stiffness":30000000,"target":250,"stress":-698.1442051198153},{"source":250,"area":1,"density":0.284,"id":"e327","stiffness":30000000,"target":251,"stress":99.84939710047996},{"source":251,"area":1,"density":0.284,"id":"e328","stiffness":30000000,"target":252,"stress":97.63787922553426},{"source":252,"area":1,"density":0.284,"id":"e329","stiffness":30000000,"target":253,"stress":-723.2017888957938},{"source":253,"area":1,"density":0.284,"id":"e330","stiffness":30000000,"target":254,"stress":-730.8626987461871},{"source":254,"area":1,"density":0.284,"id":"e331","stiffness":30000000,"target":247,"stress":118.35400753690465},{"source":219,"area":1,"density":0.284,"id":"e332","stiffness":30000000,"target":252,"stress":-212.5758616380249},{"source":82,"area":1,"density":0.284,"id":"e333","stiffness":30000000,"target":250,"stress":-910.6074094175261},{"source":238,"area":1,"density":0.284,"id":"e334","stiffness":30000000,"target":248,"stress":10.128828295996655},{"source":229,"area":1,"density":0.284,"id":"e335","stiffness":30000000,"target":254,"stress":-955.0576649152822},{"source":131,"area":1,"density":0.284,"id":"e336","stiffness":30000000,"target":255,"stress":-44.9134559089827},{"source":255,"area":1,"density":0.284,"id":"e337","stiffness":30000000,"target":256,"stress":67.01310618603654},{"source":256,"area":1,"density":0.284,"id":"e338","stiffness":30000000,"target":257,"stress":56.78666195412273},{"source":257,"area":1,"density":0.284,"id":"e339","stiffness":30000000,"target":135,"stress":-8.964421769523154},{"source":135,"area":1,"density":0.284,"id":"e340","stiffness":30000000,"target":258,"stress":-12.104895896113959},{"source":258,"area":1,"density":0.284,"id":"e341","stiffness":30000000,"target":259,"stress":22.276677784624106},{"source":259,"area":1,"density":0.284,"id":"e342","stiffness":30000000,"target":260,"stress":21.546956297789166},{"source":260,"area":1,"density":0.284,"id":"e343","stiffness":30000000,"target":131,"stress":-32.55571984530499},{"source":119,"area":1,"density":0.284,"id":"e344","stiffness":30000000,"target":255,"stress":103.59829889107205},{"source":82,"area":1,"density":0.284,"id":"e345","stiffness":30000000,"target":257,"stress":-69.17760264217233},{"source":129,"area":1,"density":0.284,"id":"e346","stiffness":30000000,"target":258,"stress":31.052678397193965},{"source":130,"area":1,"density":0.284,"id":"e347","stiffness":30000000,"target":260,"stress":-54.13344202790103},{"source":263,"area":1,"density":0.284,"id":"e348","stiffness":30000000,"target":264,"stress":-635.0154673603402},{"source":264,"area":1,"density":0.284,"id":"e349","stiffness":30000000,"target":265,"stress":131.36876987184857},{"source":265,"area":1,"density":0.284,"id":"e350","stiffness":30000000,"target":266,"stress":89.24681910070245},{"source":266,"area":1,"density":0.284,"id":"e351","stiffness":30000000,"target":267,"stress":-670.0033186688037},{"source":267,"area":1,"density":0.284,"id":"e352","stiffness":30000000,"target":268,"stress":-677.1102757423414},{"source":268,"area":1,"density":0.284,"id":"e353","stiffness":30000000,"target":269,"stress":90.12814288548013},{"source":269,"area":1,"density":0.284,"id":"e354","stiffness":30000000,"target":270,"stress":104.84244533959883},{"source":270,"area":1,"density":0.284,"id":"e355","stiffness":30000000,"target":263,"stress":-630.391986392145},{"source":262,"area":1,"density":0.284,"id":"e356","stiffness":30000000,"target":264,"stress":-11.811980523921076},{"source":261,"area":1,"density":0.284,"id":"e357","stiffness":30000000,"target":266,"stress":-985.9130103750655},{"source":219,"area":1,"density":0.284,"id":"e358","stiffness":30000000,"target":268,"stress":-152.1105649264191},{"source":119,"area":1,"density":0.284,"id":"e359","stiffness":30000000,"target":270,"stress":-909.3109716689779},{"source":273,"area":1,"density":0.284,"id":"e360","stiffness":30000000,"target":274,"stress":32.892045902961186},{"source":274,"area":1,"density":0.284,"id":"e361","stiffness":30000000,"target":275,"stress":7.931046292567456},{"source":275,"area":1,"density":0.284,"id":"e362","stiffness":30000000,"target":276,"stress":-8.657525826556617},{"source":276,"area":1,"density":0.284,"id":"e363","stiffness":30000000,"target":277,"stress":31.41405652779203},{"source":277,"area":1,"density":0.284,"id":"e364","stiffness":30000000,"target":278,"stress":36.53627632420394},{"source":278,"area":1,"density":0.284,"id":"e365","stiffness":30000000,"target":279,"stress":-23.904680344275487},{"source":279,"area":1,"density":0.284,"id":"e366","stiffness":30000000,"target":280,"stress":-36.200905778044735},{"source":280,"area":1,"density":0.284,"id":"e367","stiffness":30000000,"target":273,"stress":105.98248959776289},{"source":271,"area":1,"density":0.284,"id":"e368","stiffness":30000000,"target":278,"stress":-50.379876710263055},{"source":229,"area":1,"density":0.284,"id":"e369","stiffness":30000000,"target":280,"stress":138.30021129796478},{"source":261,"area":1,"density":0.284,"id":"e370","stiffness":30000000,"target":274,"stress":-21.063735771398367},{"source":272,"area":1,"density":0.284,"id":"e371","stiffness":30000000,"target":276,"stress":40.19028533502123},{"source":282,"area":1,"density":0.284,"id":"e372","stiffness":30000000,"target":283,"stress":-221.42113368739993},{"source":283,"area":1,"density":0.284,"id":"e373","stiffness":30000000,"target":284,"stress":-286.8527809675056},{"source":284,"area":1,"density":0.284,"id":"e374","stiffness":30000000,"target":285,"stress":331.5245045127516},{"source":285,"area":1,"density":0.284,"id":"e375","stiffness":30000000,"target":286,"stress":-373.8878200747094},{"source":286,"area":1,"density":0.284,"id":"e376","stiffness":30000000,"target":287,"stress":-325.5599794989706},{"source":287,"area":1,"density":0.284,"id":"e377","stiffness":30000000,"target":288,"stress":-265.7869589260183},{"source":288,"area":1,"density":0.284,"id":"e378","stiffness":30000000,"target":289,"stress":337.95109894463735},{"source":289,"area":1,"density":0.284,"id":"e379","stiffness":30000000,"target":282,"stress":-248.1832230140561},{"source":281,"area":1,"density":0.284,"id":"e380","stiffness":30000000,"target":287,"stress":165.28115767358335},{"source":129,"area":1,"density":0.284,"id":"e381","stiffness":30000000,"target":289,"stress":-473.25146254395935},{"source":238,"area":1,"density":0.284,"id":"e382","stiffness":30000000,"target":283,"stress":33.39213865643557},{"source":271,"area":1,"density":0.284,"id":"e383","stiffness":30000000,"target":285,"stress":-591.8794355742693},{"source":229,"area":1,"density":0.284,"id":"e384","stiffness":30000000,"target":248,"stress":-763.6331672504002},{"source":238,"area":1,"density":0.284,"id":"e385","stiffness":30000000,"target":250,"stress":-185.63575340289165},{"source":82,"area":1,"density":0.284,"id":"e386","stiffness":30000000,"target":252,"stress":-931.3363912221392},{"source":219,"area":1,"density":0.284,"id":"e387","stiffness":30000000,"target":254,"stress":-236.75025609562874},{"source":290,"area":1,"density":0.284,"id":"e388","stiffness":30000000,"target":291,"stress":-59.95756955523731},{"source":291,"area":1,"density":0.284,"id":"e389","stiffness":30000000,"target":292,"stress":-380.5743047102341},{"source":292,"area":1,"density":0.284,"id":"e390","stiffness":30000000,"target":293,"stress":-418.4440001981913},{"source":293,"area":1,"density":0.284,"id":"e391","stiffness":30000000,"target":294,"stress":139.39735381168668},{"source":294,"area":1,"density":0.284,"id":"e392","stiffness":30000000,"target":295,"stress":-76.17729516436165},{"source":295,"area":1,"density":0.284,"id":"e393","stiffness":30000000,"target":296,"stress":-436.6276914603527},{"source":296,"area":1,"density":0.284,"id":"e394","stiffness":30000000,"target":297,"stress":-463.0067764055464},{"source":297,"area":1,"density":0.284,"id":"e395","stiffness":30000000,"target":290,"stress":151.38206102478281},{"source":262,"area":1,"density":0.284,"id":"e396","stiffness":30000000,"target":295,"stress":114.95772112996296},{"source":130,"area":1,"density":0.284,"id":"e397","stiffness":30000000,"target":293,"stress":-638.0084188291222},{"source":281,"area":1,"density":0.284,"id":"e398","stiffness":30000000,"target":291,"stress":87.71206872151096},{"source":272,"area":1,"density":0.284,"id":"e399","stiffness":30000000,"target":297,"stress":-678.6394413814226},{"source":298,"area":1,"density":0.284,"id":"e400","stiffness":30000000,"target":299,"stress":-38.34880536845281},{"source":299,"area":1,"density":0.284,"id":"e401","stiffness":30000000,"target":300,"stress":12.407963924628852},{"source":300,"area":1,"density":0.284,"id":"e402","stiffness":30000000,"target":301,"stress":21.199484193977906},{"source":301,"area":1,"density":0.284,"id":"e403","stiffness":30000000,"target":302,"stress":-2.8528876566453114},{"source":302,"area":1,"density":0.284,"id":"e404","stiffness":30000000,"target":303,"stress":-41.04218021294851},{"source":303,"area":1,"density":0.284,"id":"e405","stiffness":30000000,"target":304,"stress":10.567163339902429},{"source":304,"area":1,"density":0.284,"id":"e406","stiffness":30000000,"target":305,"stress":25.546738257594765},{"source":305,"area":1,"density":0.284,"id":"e407","stiffness":30000000,"target":298,"stress":44.19974115677437},{"source":164,"area":1,"density":0.284,"id":"e408","stiffness":30000000,"target":299,"stress":35.12823255400978},{"source":176,"area":1,"density":0.284,"id":"e409","stiffness":30000000,"target":301,"stress":-32.59518775516267},{"source":175,"area":1,"density":0.284,"id":"e410","stiffness":30000000,"target":303,"stress":39.23390270424369},{"source":177,"area":1,"density":0.284,"id":"e411","stiffness":30000000,"target":305,"stress":2.596443380791377},{"source":309,"area":1,"density":0.284,"id":"e412","stiffness":30000000,"target":310,"stress":-353.6407357628251},{"source":310,"area":1,"density":0.284,"id":"e413","stiffness":30000000,"target":311,"stress":56.32828783072793},{"source":311,"area":1,"density":0.284,"id":"e414","stiffness":30000000,"target":312,"stress":82.47822769598015},{"source":312,"area":1,"density":0.284,"id":"e415","stiffness":30000000,"target":313,"stress":-329.6248054150662},{"source":313,"area":1,"density":0.284,"id":"e416","stiffness":30000000,"target":314,"stress":-338.2908337543693},{"source":314,"area":1,"density":0.284,"id":"e417","stiffness":30000000,"target":315,"stress":41.37424479889596},{"source":315,"area":1,"density":0.284,"id":"e418","stiffness":30000000,"target":316,"stress":34.676200601602076},{"source":316,"area":1,"density":0.284,"id":"e419","stiffness":30000000,"target":309,"stress":-354.459177087495},{"source":308,"area":1,"density":0.284,"id":"e420","stiffness":30000000,"target":310,"stress":-88.02842223136412},{"source":306,"area":1,"density":0.284,"id":"e421","stiffness":30000000,"target":312,"stress":-372.05992706808894},{"source":307,"area":1,"density":0.284,"id":"e422","stiffness":30000000,"target":314,"stress":-150.48969214639735},{"source":164,"area":1,"density":0.284,"id":"e423","stiffness":30000000,"target":316,"stress":-506.2693573594691},{"source":320,"area":1,"density":0.284,"id":"e424","stiffness":30000000,"target":321,"stress":-0.4978521822080612},{"source":321,"area":1,"density":0.284,"id":"e425","stiffness":30000000,"target":322,"stress":71.70422861976897},{"source":322,"area":1,"density":0.284,"id":"e426","stiffness":30000000,"target":323,"stress":59.08490866377858},{"source":323,"area":1,"density":0.284,"id":"e427","stiffness":30000000,"target":324,"stress":113.87887202974441},{"source":324,"area":1,"density":0.284,"id":"e428","stiffness":30000000,"target":325,"stress":46.9759252865564},{"source":325,"area":1,"density":0.284,"id":"e429","stiffness":30000000,"target":326,"stress":-5.622391022283891},{"source":326,"area":1,"density":0.284,"id":"e430","stiffness":30000000,"target":327,"stress":-39.184079772656396},{"source":327,"area":1,"density":0.284,"id":"e431","stiffness":30000000,"target":320,"stress":-49.616506875532046},{"source":317,"area":1,"density":0.284,"id":"e432","stiffness":30000000,"target":325,"stress":-47.41096604399799},{"source":318,"area":1,"density":0.284,"id":"e433","stiffness":30000000,"target":327,"stress":6.671465490818394},{"source":306,"area":1,"density":0.284,"id":"e434","stiffness":30000000,"target":321,"stress":77.15749513363575},{"source":319,"area":1,"density":0.284,"id":"e435","stiffness":30000000,"target":323,"stress":40.38862566422093},{"source":330,"area":1,"density":0.284,"id":"e436","stiffness":30000000,"target":331,"stress":-126.50930715720834},{"source":331,"area":1,"density":0.284,"id":"e437","stiffness":30000000,"target":332,"stress":-154.9414077058054},{"source":332,"area":1,"density":0.284,"id":"e438","stiffness":30000000,"target":333,"stress":179.327986674627},{"source":333,"area":1,"density":0.284,"id":"e439","stiffness":30000000,"target":334,"stress":-294.63890175953406},{"source":334,"area":1,"density":0.284,"id":"e440","stiffness":30000000,"target":335,"stress":-236.80881759997476},{"source":335,"area":1,"density":0.284,"id":"e441","stiffness":30000000,"target":336,"stress":-86.51756484380917},{"source":336,"area":1,"density":0.284,"id":"e442","stiffness":30000000,"target":337,"stress":167.09451185072226},{"source":337,"area":1,"density":0.284,"id":"e443","stiffness":30000000,"target":330,"stress":-142.8413168017484},{"source":329,"area":1,"density":0.284,"id":"e444","stiffness":30000000,"target":335,"stress":199.6640881995677},{"source":175,"area":1,"density":0.284,"id":"e445","stiffness":30000000,"target":337,"stress":-258.64704929968633},{"source":328,"area":1,"density":0.284,"id":"e446","stiffness":30000000,"target":331,"stress":25.477022826013883},{"source":317,"area":1,"density":0.284,"id":"e447","stiffness":30000000,"target":333,"stress":-414.9389970921805},{"source":338,"area":1,"density":0.284,"id":"e448","stiffness":30000000,"target":339,"stress":81.7697949801734},{"source":339,"area":1,"density":0.284,"id":"e449","stiffness":30000000,"target":340,"stress":-135.6110787145296},{"source":340,"area":1,"density":0.284,"id":"e450","stiffness":30000000,"target":341,"stress":-128.301069648507},{"source":341,"area":1,"density":0.284,"id":"e451","stiffness":30000000,"target":342,"stress":-109.38995694787076},{"source":342,"area":1,"density":0.284,"id":"e452","stiffness":30000000,"target":343,"stress":56.25501941542429},{"source":343,"area":1,"density":0.284,"id":"e453","stiffness":30000000,"target":344,"stress":-178.18937680673585},{"source":344,"area":1,"density":0.284,"id":"e454","stiffness":30000000,"target":345,"stress":-161.00848342433918},{"source":345,"area":1,"density":0.284,"id":"e455","stiffness":30000000,"target":338,"stress":-40.29094124568944},{"source":318,"area":1,"density":0.284,"id":"e456","stiffness":30000000,"target":343,"stress":-327.532666980233},{"source":328,"area":1,"density":0.284,"id":"e457","stiffness":30000000,"target":345,"stress":13.520739074049796},{"source":176,"area":1,"density":0.284,"id":"e458","stiffness":30000000,"target":339,"stress":-268.1740318128664},{"source":307,"area":1,"density":0.284,"id":"e459","stiffness":30000000,"target":341,"stress":-73.0087077097674},{"source":346,"area":1,"density":0.284,"id":"e460","stiffness":30000000,"target":347,"stress":130.90449782806388},{"source":347,"area":1,"density":0.284,"id":"e461","stiffness":30000000,"target":348,"stress":-355.726101266527},{"source":348,"area":1,"density":0.284,"id":"e462","stiffness":30000000,"target":349,"stress":-377.32978314809793},{"source":349,"area":1,"density":0.284,"id":"e463","stiffness":30000000,"target":350,"stress":49.304516836481476},{"source":350,"area":1,"density":0.284,"id":"e464","stiffness":30000000,"target":351,"stress":51.43856531520776},{"source":351,"area":1,"density":0.284,"id":"e465","stiffness":30000000,"target":352,"stress":-330.4965748210259},{"source":352,"area":1,"density":0.284,"id":"e466","stiffness":30000000,"target":353,"stress":-338.43328767673523},{"source":353,"area":1,"density":0.284,"id":"e467","stiffness":30000000,"target":346,"stress":122.73538938254356},{"source":308,"area":1,"density":0.284,"id":"e468","stiffness":30000000,"target":351,"stress":-12.086991323531802},{"source":177,"area":1,"density":0.284,"id":"e469","stiffness":30000000,"target":349,"stress":-638.7281422187276},{"source":329,"area":1,"density":0.284,"id":"e470","stiffness":30000000,"target":347,"stress":135.30693566988455},{"source":319,"area":1,"density":0.284,"id":"e471","stiffness":30000000,"target":353,"stress":-445.4879444939475},{"source":230,"area":1,"density":0.284,"id":"e472","stiffness":30000000,"target":354,"stress":-63.476702008958185},{"source":354,"area":1,"density":0.284,"id":"e473","stiffness":30000000,"target":355,"stress":59.987246736094725},{"source":355,"area":1,"density":0.284,"id":"e474","stiffness":30000000,"target":356,"stress":55.42256282474811},{"source":356,"area":1,"density":0.284,"id":"e475","stiffness":30000000,"target":234,"stress":-16.574524405082688},{"source":234,"area":1,"density":0.284,"id":"e476","stiffness":30000000,"target":357,"stress":-75.44667090140531},{"source":357,"area":1,"density":0.284,"id":"e477","stiffness":30000000,"target":358,"stress":33.364829071372824},{"source":358,"area":1,"density":0.284,"id":"e478","stiffness":30000000,"target":359,"stress":44.662443441948},{"source":359,"area":1,"density":0.284,"id":"e479","stiffness":30000000,"target":230,"stress":42.246861281430235},{"source":218,"area":1,"density":0.284,"id":"e480","stiffness":30000000,"target":354,"stress":104.21785231451248},{"source":177,"area":1,"density":0.284,"id":"e481","stiffness":30000000,"target":356,"stress":-77.95168032826584},{"source":228,"area":1,"density":0.284,"id":"e482","stiffness":30000000,"target":357,"stress":87.23930029537733},{"source":229,"area":1,"density":0.284,"id":"e483","stiffness":30000000,"target":359,"stress":-20.08762435089909},{"source":362,"area":1,"density":0.284,"id":"e484","stiffness":30000000,"target":363,"stress":-316.905576802313},{"source":363,"area":1,"density":0.284,"id":"e485","stiffness":30000000,"target":364,"stress":40.507889069712505},{"source":364,"area":1,"density":0.284,"id":"e486","stiffness":30000000,"target":365,"stress":24.46171250294451},{"source":365,"area":1,"density":0.284,"id":"e487","stiffness":30000000,"target":366,"stress":-326.5524254753061},{"source":366,"area":1,"density":0.284,"id":"e488","stiffness":30000000,"target":367,"stress":-331.57871319017414},{"source":367,"area":1,"density":0.284,"id":"e489","stiffness":30000000,"target":368,"stress":32.97328249451361},{"source":368,"area":1,"density":0.284,"id":"e490","stiffness":30000000,"target":369,"stress":20.275903429607727},{"source":369,"area":1,"density":0.284,"id":"e491","stiffness":30000000,"target":362,"stress":-320.2159688230458},{"source":361,"area":1,"density":0.284,"id":"e492","stiffness":30000000,"target":363,"stress":-10.145138239636413},{"source":360,"area":1,"density":0.284,"id":"e493","stiffness":30000000,"target":365,"stress":-492.48504083877543},{"source":308,"area":1,"density":0.284,"id":"e494","stiffness":30000000,"target":367,"stress":-60.3954072863118},{"source":218,"area":1,"density":0.284,"id":"e495","stiffness":30000000,"target":369,"stress":-505.63006768944206},{"source":372,"area":1,"density":0.284,"id":"e496","stiffness":30000000,"target":373,"stress":2.24627982672823},{"source":373,"area":1,"density":0.284,"id":"e497","stiffness":30000000,"target":374,"stress":28.59835068374812},{"source":374,"area":1,"density":0.284,"id":"e498","stiffness":30000000,"target":375,"stress":7.578339517712791},{"source":375,"area":1,"density":0.284,"id":"e499","stiffness":30000000,"target":376,"stress":105.37541714864776},{"source":376,"area":1,"density":0.284,"id":"e500","stiffness":30000000,"target":377,"stress":-1.2920400275050106},{"source":377,"area":1,"density":0.284,"id":"e501","stiffness":30000000,"target":378,"stress":-20.993147310969857},{"source":378,"area":1,"density":0.284,"id":"e502","stiffness":30000000,"target":379,"stress":-45.02675830204697},{"source":379,"area":1,"density":0.284,"id":"e503","stiffness":30000000,"target":372,"stress":136.51191857336607},{"source":370,"area":1,"density":0.284,"id":"e504","stiffness":30000000,"target":377,"stress":-26.561368817307315},{"source":319,"area":1,"density":0.284,"id":"e505","stiffness":30000000,"target":379,"stress":173.3824687120994},{"source":360,"area":1,"density":0.284,"id":"e506","stiffness":30000000,"target":373,"stress":15.389025347655164},{"source":371,"area":1,"density":0.284,"id":"e507","stiffness":30000000,"target":375,"stress":86.49599040009501},{"source":381,"area":1,"density":0.284,"id":"e508","stiffness":30000000,"target":382,"stress":-61.32995483642892},{"source":382,"area":1,"density":0.284,"id":"e509","stiffness":30000000,"target":383,"stress":-242.25860955566895},{"source":383,"area":1,"density":0.284,"id":"e510","stiffness":30000000,"target":384,"stress":233.41149361421392},{"source":384,"area":1,"density":0.284,"id":"e511","stiffness":30000000,"target":385,"stress":-241.46700773730205},{"source":385,"area":1,"density":0.284,"id":"e512","stiffness":30000000,"target":386,"stress":-189.87188918854952},{"source":386,"area":1,"density":0.284,"id":"e513","stiffness":30000000,"target":387,"stress":-196.15965378713744},{"source":387,"area":1,"density":0.284,"id":"e514","stiffness":30000000,"target":388,"stress":192.88039507817072},{"source":388,"area":1,"density":0.284,"id":"e515","stiffness":30000000,"target":381,"stress":-49.17034533171739},{"source":380,"area":1,"density":0.284,"id":"e516","stiffness":30000000,"target":386,"stress":56.076969435196766},{"source":228,"area":1,"density":0.284,"id":"e517","stiffness":30000000,"target":388,"stress":-171.36829786368685},{"source":329,"area":1,"density":0.284,"id":"e518","stiffness":30000000,"target":382,"stress":-111.92852715190745},{"source":370,"area":1,"density":0.284,"id":"e519","stiffness":30000000,"target":384,"stress":-394.0907486788508},{"source":319,"area":1,"density":0.284,"id":"e520","stiffness":30000000,"target":347,"stress":-278.21950878645146},{"source":329,"area":1,"density":0.284,"id":"e521","stiffness":30000000,"target":349,"stress":-235.62051827035552},{"source":177,"area":1,"density":0.284,"id":"e522","stiffness":30000000,"target":351,"stress":-343.5276355996759},{"source":308,"area":1,"density":0.284,"id":"e523","stiffness":30000000,"target":353,"stress":-34.90797967376907},{"source":389,"area":1,"density":0.284,"id":"e524","stiffness":30000000,"target":390,"stress":139.72225800237428},{"source":390,"area":1,"density":0.284,"id":"e525","stiffness":30000000,"target":391,"stress":-360.60336271580076},{"source":391,"area":1,"density":0.284,"id":"e526","stiffness":30000000,"target":392,"stress":-379.85072749300883},{"source":392,"area":1,"density":0.284,"id":"e527","stiffness":30000000,"target":393,"stress":52.71544352013102},{"source":393,"area":1,"density":0.284,"id":"e528","stiffness":30000000,"target":394,"stress":61.72247347296796},{"source":394,"area":1,"density":0.284,"id":"e529","stiffness":30000000,"target":395,"stress":-340.29599416613763},{"source":395,"area":1,"density":0.284,"id":"e530","stiffness":30000000,"target":396,"stress":-343.2533740081377},{"source":396,"area":1,"density":0.284,"id":"e531","stiffness":30000000,"target":389,"stress":134.27141357754203},{"source":361,"area":1,"density":0.284,"id":"e532","stiffness":30000000,"target":394,"stress":-44.06534844184247},{"source":229,"area":1,"density":0.284,"id":"e533","stiffness":30000000,"target":392,"stress":-591.8096617400803},{"source":380,"area":1,"density":0.284,"id":"e534","stiffness":30000000,"target":390,"stress":94.59615730476405},{"source":371,"area":1,"density":0.284,"id":"e535","stiffness":30000000,"target":396,"stress":-388.55227729185447},{"source":273,"area":1,"density":0.284,"id":"e536","stiffness":30000000,"target":397,"stress":-70.93848720907891},{"source":397,"area":1,"density":0.284,"id":"e537","stiffness":30000000,"target":398,"stress":62.5475171136172},{"source":398,"area":1,"density":0.284,"id":"e538","stiffness":30000000,"target":399,"stress":62.58114416921265},{"source":399,"area":1,"density":0.284,"id":"e539","stiffness":30000000,"target":277,"stress":-28.559757508605287},{"source":277,"area":1,"density":0.284,"id":"e540","stiffness":30000000,"target":400,"stress":-43.671234774960624},{"source":400,"area":1,"density":0.284,"id":"e541","stiffness":30000000,"target":401,"stress":16.462789648789794},{"source":401,"area":1,"density":0.284,"id":"e542","stiffness":30000000,"target":402,"stress":25.874923037010202},{"source":402,"area":1,"density":0.284,"id":"e543","stiffness":30000000,"target":273,"stress":-16.16253683156962},{"source":261,"area":1,"density":0.284,"id":"e544","stiffness":30000000,"target":397,"stress":115.78989489794701},{"source":229,"area":1,"density":0.284,"id":"e545","stiffness":30000000,"target":399,"stress":-97.99015924110324},{"source":271,"area":1,"density":0.284,"id":"e546","stiffness":30000000,"target":400,"stress":46.9726931883309},{"source":272,"area":1,"density":0.284,"id":"e547","stiffness":30000000,"target":402,"stress":-48.034730675272826},{"source":405,"area":1,"density":0.284,"id":"e548","stiffness":30000000,"target":406,"stress":-307.0484218319809},{"source":406,"area":1,"density":0.284,"id":"e549","stiffness":30000000,"target":407,"stress":61.21939223063792},{"source":407,"area":1,"density":0.284,"id":"e550","stiffness":30000000,"target":408,"stress":43.14436585387659},{"source":408,"area":1,"density":0.284,"id":"e551","stiffness":30000000,"target":409,"stress":-335.72006175637176},{"source":409,"area":1,"density":0.284,"id":"e552","stiffness":30000000,"target":410,"stress":-345.9751859216158},{"source":410,"area":1,"density":0.284,"id":"e553","stiffness":30000000,"target":411,"stress":38.19688530411234},{"source":411,"area":1,"density":0.284,"id":"e554","stiffness":30000000,"target":412,"stress":48.0094569344559},{"source":412,"area":1,"density":0.284,"id":"e555","stiffness":30000000,"target":405,"stress":-297.3225366749569},{"source":404,"area":1,"density":0.284,"id":"e556","stiffness":30000000,"target":406,"stress":64.68291187734411},{"source":403,"area":1,"density":0.284,"id":"e557","stiffness":30000000,"target":408,"stress":-551.9028017769468},{"source":361,"area":1,"density":0.284,"id":"e558","stiffness":30000000,"target":410,"stress":-26.234341893755843},{"source":261,"area":1,"density":0.284,"id":"e559","stiffness":30000000,"target":412,"stress":-485.41502647419287},{"source":415,"area":1,"density":0.284,"id":"e560","stiffness":30000000,"target":416,"stress":3.3853604432775275},{"source":416,"area":1,"density":0.284,"id":"e561","stiffness":30000000,"target":417,"stress":64.22406117263628},{"source":417,"area":1,"density":0.284,"id":"e562","stiffness":30000000,"target":418,"stress":47.914847731368056},{"source":418,"area":1,"density":0.284,"id":"e563","stiffness":30000000,"target":419,"stress":16.486551978700465},{"source":419,"area":1,"density":0.284,"id":"e564","stiffness":30000000,"target":420,"stress":-40.83878188640768},{"source":420,"area":1,"density":0.284,"id":"e565","stiffness":30000000,"target":421,"stress":-25.044178253280833},{"source":421,"area":1,"density":0.284,"id":"e566","stiffness":30000000,"target":422,"stress":-13.33887261435209},{"source":422,"area":1,"density":0.284,"id":"e567","stiffness":30000000,"target":415,"stress":138.8033180838686},{"source":413,"area":1,"density":0.284,"id":"e568","stiffness":30000000,"target":420,"stress":2.9462896119345467},{"source":371,"area":1,"density":0.284,"id":"e569","stiffness":30000000,"target":422,"stress":133.73236226345787},{"source":403,"area":1,"density":0.284,"id":"e570","stiffness":30000000,"target":416,"stress":48.247308974536224},{"source":414,"area":1,"density":0.284,"id":"e571","stiffness":30000000,"target":418,"stress":-41.30093311034433},{"source":424,"area":1,"density":0.284,"id":"e572","stiffness":30000000,"target":425,"stress":-72.43939415741552},{"source":425,"area":1,"density":0.284,"id":"e573","stiffness":30000000,"target":426,"stress":-327.6001843013104},{"source":426,"area":1,"density":0.284,"id":"e574","stiffness":30000000,"target":427,"stress":221.04406204074948},{"source":427,"area":1,"density":0.284,"id":"e575","stiffness":30000000,"target":428,"stress":-227.31625331268947},{"source":428,"area":1,"density":0.284,"id":"e576","stiffness":30000000,"target":429,"stress":-160.55959906827528},{"source":429,"area":1,"density":0.284,"id":"e577","stiffness":30000000,"target":430,"stress":-129.21875099866833},{"source":430,"area":1,"density":0.284,"id":"e578","stiffness":30000000,"target":431,"stress":228.9009949222439},{"source":431,"area":1,"density":0.284,"id":"e579","stiffness":30000000,"target":424,"stress":-45.987213952495026},{"source":423,"area":1,"density":0.284,"id":"e580","stiffness":30000000,"target":429,"stress":82.9099794571983},{"source":271,"area":1,"density":0.284,"id":"e581","stiffness":30000000,"target":431,"stress":-200.09220735228072},{"source":380,"area":1,"density":0.284,"id":"e582","stiffness":30000000,"target":425,"stress":-172.48671114462107},{"source":413,"area":1,"density":0.284,"id":"e583","stiffness":30000000,"target":427,"stress":-364.5830912037963},{"source":371,"area":1,"density":0.284,"id":"e584","stiffness":30000000,"target":390,"stress":-331.8937171906931},{"source":380,"area":1,"density":0.284,"id":"e585","stiffness":30000000,"target":392,"stress":-195.0195862232076},{"source":229,"area":1,"density":0.284,"id":"e586","stiffness":30000000,"target":394,"stress":-407.943356368785},{"source":361,"area":1,"density":0.284,"id":"e587","stiffness":30000000,"target":396,"stress":32.69939848044295},{"source":432,"area":1,"density":0.284,"id":"e588","stiffness":30000000,"target":433,"stress":-63.3808881735688},{"source":433,"area":1,"density":0.284,"id":"e589","stiffness":30000000,"target":434,"stress":-241.15323326307654},{"source":434,"area":1,"density":0.284,"id":"e590","stiffness":30000000,"target":435,"stress":-247.65940025501854},{"source":435,"area":1,"density":0.284,"id":"e591","stiffness":30000000,"target":436,"stress":133.76279310462235},{"source":436,"area":1,"density":0.284,"id":"e592","stiffness":30000000,"target":437,"stress":58.40053916829587},{"source":437,"area":1,"density":0.284,"id":"e593","stiffness":30000000,"target":438,"stress":-185.8856953543135},{"source":438,"area":1,"density":0.284,"id":"e594","stiffness":30000000,"target":439,"stress":-209.27352246919926},{"source":439,"area":1,"density":0.284,"id":"e595","stiffness":30000000,"target":432,"stress":79.08457232037199},{"source":404,"area":1,"density":0.284,"id":"e596","stiffness":30000000,"target":437,"stress":125.54317841262542},{"source":272,"area":1,"density":0.284,"id":"e597","stiffness":30000000,"target":435,"stress":-363.5908687939219},{"source":423,"area":1,"density":0.284,"id":"e598","stiffness":30000000,"target":433,"stress":43.997688208846064},{"source":414,"area":1,"density":0.284,"id":"e599","stiffness":30000000,"target":439,"stress":-352.9915477149064},{"source":443,"area":1,"density":0.284,"id":"e600","stiffness":30000000,"target":444,"stress":0.0},{"source":444,"area":1,"density":0.284,"id":"e601","stiffness":30000000,"target":445,"stress":0.0},{"source":445,"area":1,"density":0.284,"id":"e602","stiffness":30000000,"target":446,"stress":0.0},{"source":446,"area":1,"density":0.284,"id":"e603","stiffness":30000000,"target":447,"stress":0.0},{"source":447,"area":1,"density":0.284,"id":"e604","stiffness":30000000,"target":448,"stress":0.0},{"source":448,"area":1,"density":0.284,"id":"e605","stiffness":30000000,"target":449,"stress":0.0},{"source":449,"area":1,"density":0.284,"id":"e606","stiffness":30000000,"target":450,"stress":0.0},{"source":450,"area":1,"density":0.284,"id":"e607","stiffness":30000000,"target":443,"stress":0.0},{"source":440,"area":1,"density":0.284,"id":"e608","stiffness":30000000,"target":444,"stress":0.0},{"source":441,"area":1,"density":0.284,"id":"e609","stiffness":30000000,"target":446,"stress":0.0},{"source":0,"area":1,"density":0.284,"id":"e610","stiffness":30000000,"target":448,"stress":0.0},{"source":442,"area":1,"density":0.284,"id":"e611","stiffness":30000000,"target":450,"stress":0.0},{"source":454,"area":1,"density":0.284,"id":"e612","stiffness":30000000,"target":455,"stress":-1015.967886815386},{"source":455,"area":1,"density":0.284,"id":"e613","stiffness":30000000,"target":456,"stress":117.57106459720538},{"source":456,"area":1,"density":0.284,"id":"e614","stiffness":30000000,"target":457,"stress":150.34628929203416},{"source":457,"area":1,"density":0.284,"id":"e615","stiffness":30000000,"target":458,"stress":-923.1109382111545},{"source":458,"area":1,"density":0.284,"id":"e616","stiffness":30000000,"target":459,"stress":-916.8838150424215},{"source":459,"area":1,"density":0.284,"id":"e617","stiffness":30000000,"target":460,"stress":176.95724758737688},{"source":460,"area":1,"density":0.284,"id":"e618","stiffness":30000000,"target":461,"stress":99.76969645566886},{"source":461,"area":1,"density":0.284,"id":"e619","stiffness":30000000,"target":454,"stress":-1010.0804926333667},{"source":453,"area":1,"density":0.284,"id":"e620","stiffness":30000000,"target":455,"stress":-387.01010779154296},{"source":451,"area":1,"density":0.284,"id":"e621","stiffness":30000000,"target":457,"stress":-1208.9144546674322},{"source":452,"area":1,"density":0.284,"id":"e622","stiffness":30000000,"target":459,"stress":-145.5335174104044},{"source":440,"area":1,"density":0.284,"id":"e623","stiffness":30000000,"target":461,"stress":-1395.0123537553281},{"source":464,"area":1,"density":0.284,"id":"e624","stiffness":30000000,"target":465,"stress":0.5332962383128504},{"source":465,"area":1,"density":0.284,"id":"e625","stiffness":30000000,"target":466,"stress":59.26993404128104},{"source":466,"area":1,"density":0.284,"id":"e626","stiffness":30000000,"target":467,"stress":-22.51791214977642},{"source":467,"area":1,"density":0.284,"id":"e627","stiffness":30000000,"target":468,"stress":50.09722099443411},{"source":468,"area":1,"density":0.284,"id":"e628","stiffness":30000000,"target":469,"stress":29.531044803449802},{"source":469,"area":1,"density":0.284,"id":"e629","stiffness":30000000,"target":470,"stress":19.816088947722807},{"source":470,"area":1,"density":0.284,"id":"e630","stiffness":30000000,"target":471,"stress":-16.495996289607618},{"source":471,"area":1,"density":0.284,"id":"e631","stiffness":30000000,"target":464,"stress":-12.033281118670274},{"source":12,"area":1,"density":0.284,"id":"e632","stiffness":30000000,"target":469,"stress":-6.632160838862589},{"source":462,"area":1,"density":0.284,"id":"e633","stiffness":30000000,"target":471,"stress":12.185498010478096},{"source":451,"area":1,"density":0.284,"id":"e634","stiffness":30000000,"target":465,"stress":62.40293744084978},{"source":463,"area":1,"density":0.284,"id":"e635","stiffness":30000000,"target":467,"stress":80.74768770902892},{"source":14,"area":1,"density":0.284,"id":"e636","stiffness":30000000,"target":22,"stress":-483.20389039924635},{"source":0,"area":1,"density":0.284,"id":"e637","stiffness":30000000,"target":20,"stress":-1116.4822111564642},{"source":13,"area":1,"density":0.284,"id":"e638","stiffness":30000000,"target":18,"stress":-316.27550498471385},{"source":12,"area":1,"density":0.284,"id":"e639","stiffness":30000000,"target":16,"stress":-1320.6040042735153},{"source":472,"area":1,"density":0.284,"id":"e640","stiffness":30000000,"target":473,"stress":170.0171530662046},{"source":473,"area":1,"density":0.284,"id":"e641","stiffness":30000000,"target":474,"stress":-659.306774226506},{"source":474,"area":1,"density":0.284,"id":"e642","stiffness":30000000,"target":475,"stress":-670.5013419689295},{"source":475,"area":1,"density":0.284,"id":"e643","stiffness":30000000,"target":476,"stress":-235.7632507160572},{"source":476,"area":1,"density":0.284,"id":"e644","stiffness":30000000,"target":477,"stress":136.3555837184979},{"source":477,"area":1,"density":0.284,"id":"e645","stiffness":30000000,"target":478,"stress":-562.6969680699482},{"source":478,"area":1,"density":0.284,"id":"e646","stiffness":30000000,"target":479,"stress":-562.5531732904476},{"source":479,"area":1,"density":0.284,"id":"e647","stiffness":30000000,"target":472,"stress":-164.64428400640054},{"source":462,"area":1,"density":0.284,"id":"e648","stiffness":30000000,"target":477,"stress":-876.3773166078508},{"source":13,"area":1,"density":0.284,"id":"e649","stiffness":30000000,"target":479,"stress":98.6216432325463},{"source":441,"area":1,"density":0.284,"id":"e650","stiffness":30000000,"target":473,"stress":-951.0095139967807},{"source":452,"area":1,"density":0.284,"id":"e651","stiffness":30000000,"target":475,"stress":98.61004543161351},{"source":480,"area":1,"density":0.284,"id":"e652","stiffness":30000000,"target":481,"stress":33.154283266164555},{"source":481,"area":1,"density":0.284,"id":"e653","stiffness":30000000,"target":482,"stress":-972.3269055348627},{"source":482,"area":1,"density":0.284,"id":"e654","stiffness":30000000,"target":483,"stress":-985.2907041025306},{"source":483,"area":1,"density":0.284,"id":"e655","stiffness":30000000,"target":484,"stress":11.813943311790123},{"source":484,"area":1,"density":0.284,"id":"e656","stiffness":30000000,"target":485,"stress":32.70911097452746},{"source":485,"area":1,"density":0.284,"id":"e657","stiffness":30000000,"target":486,"stress":-982.9499018644194},{"source":486,"area":1,"density":0.284,"id":"e658","stiffness":30000000,"target":487,"stress":-1006.0779182661721},{"source":487,"area":1,"density":0.284,"id":"e659","stiffness":30000000,"target":480,"stress":18.421407437067305},{"source":453,"area":1,"density":0.284,"id":"e660","stiffness":30000000,"target":485,"stress":-354.205256801284},{"source":442,"area":1,"density":0.284,"id":"e661","stiffness":30000000,"target":483,"stress":-1327.721501720019},{"source":14,"area":1,"density":0.284,"id":"e662","stiffness":30000000,"target":481,"stress":-348.91421549178455},{"source":463,"area":1,"density":0.284,"id":"e663","stiffness":30000000,"target":487,"stress":-1375.9107347787346},{"source":490,"area":1,"density":0.284,"id":"e664","stiffness":30000000,"target":491,"stress":0.0},{"source":491,"area":1,"density":0.284,"id":"e665","stiffness":30000000,"target":492,"stress":0.0},{"source":492,"area":1,"density":0.284,"id":"e666","stiffness":30000000,"target":493,"stress":0.0},{"source":493,"area":1,"density":0.284,"id":"e667","stiffness":30000000,"target":494,"stress":0.0},{"source":494,"area":1,"density":0.284,"id":"e668","stiffness":30000000,"target":495,"stress":0.0},{"source":495,"area":1,"density":0.284,"id":"e669","stiffness":30000000,"target":496,"stress":0.0},{"source":496,"area":1,"density":0.284,"id":"e670","stiffness":30000000,"target":497,"stress":0.0},{"source":497,"area":1,"density":0.284,"id":"e671","stiffness":30000000,"target":490,"stress":0.0},{"source":488,"area":1,"density":0.284,"id":"e672","stiffness":30000000,"target":491,"stress":0.0},{"source":442,"area":1,"density":0.284,"id":"e673","stiffness":30000000,"target":493,"stress":0.0},{"source":60,"area":1,"density":0.284,"id":"e674","stiffness":30000000,"target":495,"stress":0.0},{"source":489,"area":1,"density":0.284,"id":"e675","stiffness":30000000,"target":497,"stress":0.0},{"source":500,"area":1,"density":0.284,"id":"e676","stiffness":30000000,"target":501,"stress":-984.4376079381867},{"source":501,"area":1,"density":0.284,"id":"e677","stiffness":30000000,"target":502,"stress":47.800555959751165},{"source":502,"area":1,"density":0.284,"id":"e678","stiffness":30000000,"target":503,"stress":65.24052407195197},{"source":503,"area":1,"density":0.284,"id":"e679","stiffness":30000000,"target":504,"stress":-964.1848476491557},{"source":504,"area":1,"density":0.284,"id":"e680","stiffness":30000000,"target":505,"stress":-961.0073343565534},{"source":505,"area":1,"density":0.284,"id":"e681","stiffness":30000000,"target":506,"stress":39.94333618614944},{"source":506,"area":1,"density":0.284,"id":"e682","stiffness":30000000,"target":507,"stress":65.78002122464973},{"source":507,"area":1,"density":0.284,"id":"e683","stiffness":30000000,"target":500,"stress":-977.2817947134788},{"source":499,"area":1,"density":0.284,"id":"e684","stiffness":30000000,"target":501,"stress":-442.24060724312676},{"source":498,"area":1,"density":0.284,"id":"e685","stiffness":30000000,"target":503,"stress":-1274.1600560017355},{"source":453,"area":1,"density":0.284,"id":"e686","stiffness":30000000,"target":505,"stress":-421.31005035641454},{"source":488,"area":1,"density":0.284,"id":"e687","stiffness":30000000,"target":507,"stress":-1277.367020618579},{"source":509,"area":1,"density":0.284,"id":"e688","stiffness":30000000,"target":510,"stress":58.12071386565931},{"source":510,"area":1,"density":0.284,"id":"e689","stiffness":30000000,"target":511,"stress":62.51931776535918},{"source":511,"area":1,"density":0.284,"id":"e690","stiffness":30000000,"target":512,"stress":-23.704670804205048},{"source":512,"area":1,"density":0.284,"id":"e691","stiffness":30000000,"target":513,"stress":53.32470948455598},{"source":513,"area":1,"density":0.284,"id":"e692","stiffness":30000000,"target":514,"stress":17.04237581149444},{"source":514,"area":1,"density":0.284,"id":"e693","stiffness":30000000,"target":515,"stress":70.07040672474436},{"source":515,"area":1,"density":0.284,"id":"e694","stiffness":30000000,"target":516,"stress":-19.41651368881288},{"source":516,"area":1,"density":0.284,"id":"e695","stiffness":30000000,"target":509,"stress":59.259728635882745},{"source":71,"area":1,"density":0.284,"id":"e696","stiffness":30000000,"target":514,"stress":56.78165493685222},{"source":463,"area":1,"density":0.284,"id":"e697","stiffness":30000000,"target":516,"stress":85.11105685190063},{"source":498,"area":1,"density":0.284,"id":"e698","stiffness":30000000,"target":510,"stress":70.76018686248852},{"source":508,"area":1,"density":0.284,"id":"e699","stiffness":30000000,"target":512,"stress":85.20798439306114},{"source":72,"area":1,"density":0.284,"id":"e700","stiffness":30000000,"target":80,"stress":-426.1417843514871},{"source":60,"area":1,"density":0.284,"id":"e701","stiffness":30000000,"target":78,"stress":-1274.0059264325243},{"source":14,"area":1,"density":0.284,"id":"e702","stiffness":30000000,"target":76,"stress":-450.14161895527985},{"source":71,"area":1,"density":0.284,"id":"e703","stiffness":30000000,"target":74,"stress":-1277.2785095031275},{"source":463,"area":1,"density":0.284,"id":"e704","stiffness":30000000,"target":481,"stress":-1243.2829438888475},{"source":14,"area":1,"density":0.284,"id":"e705","stiffness":30000000,"target":483,"stress":-451.58496587808787},{"source":442,"area":1,"density":0.284,"id":"e706","stiffness":30000000,"target":485,"stress":-1252.8348488374263},{"source":453,"area":1,"density":0.284,"id":"e707","stiffness":30000000,"target":487,"stress":-457.3922358430235},{"source":517,"area":1,"density":0.284,"id":"e708","stiffness":30000000,"target":518,"stress":18.892021791922527},{"source":518,"area":1,"density":0.284,"id":"e709","stiffness":30000000,"target":519,"stress":-995.4579918721039},{"source":519,"area":1,"density":0.284,"id":"e710","stiffness":30000000,"target":520,"stress":-978.8071392109212},{"source":520,"area":1,"density":0.284,"id":"e711","stiffness":30000000,"target":521,"stress":27.261693933246633},{"source":521,"area":1,"density":0.284,"id":"e712","stiffness":30000000,"target":522,"stress":12.950919198299141},{"source":522,"area":1,"density":0.284,"id":"e713","stiffness":30000000,"target":523,"stress":-980.7096191593242},{"source":523,"area":1,"density":0.284,"id":"e714","stiffness":30000000,"target":524,"stress":-972.5135488695557},{"source":524,"area":1,"density":0.284,"id":"e715","stiffness":30000000,"target":517,"stress":26.73564817372405},{"source":499,"area":1,"density":0.284,"id":"e716","stiffness":30000000,"target":522,"stress":-437.10003615635804},{"source":489,"area":1,"density":0.284,"id":"e717","stiffness":30000000,"target":520,"stress":-1260.6470851193342},{"source":72,"area":1,"density":0.284,"id":"e718","stiffness":30000000,"target":518,"stress":-436.03708767746656},{"source":508,"area":1,"density":0.284,"id":"e719","stiffness":30000000,"target":524,"stress":-1259.458804856118},{"source":527,"area":1,"density":0.284,"id":"e720","stiffness":30000000,"target":528,"stress":0.0},{"source":528,"area":1,"density":0.284,"id":"e721","stiffness":30000000,"target":529,"stress":0.0},{"source":529,"area":1,"density":0.284,"id":"e722","stiffness":30000000,"target":530,"stress":0.0},{"source":530,"area":1,"density":0.284,"id":"e723","stiffness":30000000,"target":531,"stress":0.0},{"source":531,"area":1,"density":0.284,"id":"e724","stiffness":30000000,"target":532,"stress":0.0},{"source":532,"area":1,"density":0.284,"id":"e725","stiffness":30000000,"target":533,"stress":0.0},{"source":533,"area":1,"density":0.284,"id":"e726","stiffness":30000000,"target":534,"stress":0.0},{"source":534,"area":1,"density":0.284,"id":"e727","stiffness":30000000,"target":527,"stress":0.0},{"source":525,"area":1,"density":0.284,"id":"e728","stiffness":30000000,"target":528,"stress":0.0},{"source":489,"area":1,"density":0.284,"id":"e729","stiffness":30000000,"target":530,"stress":0.0},{"source":108,"area":1,"density":0.284,"id":"e730","stiffness":30000000,"target":532,"stress":0.0},{"source":526,"area":1,"density":0.284,"id":"e731","stiffness":30000000,"target":534,"stress":0.0},{"source":537,"area":1,"density":0.284,"id":"e732","stiffness":30000000,"target":538,"stress":-953.4252066627972},{"source":538,"area":1,"density":0.284,"id":"e733","stiffness":30000000,"target":539,"stress":145.7252005703657},{"source":539,"area":1,"density":0.284,"id":"e734","stiffness":30000000,"target":540,"stress":121.55989641151088},{"source":540,"area":1,"density":0.284,"id":"e735","stiffness":30000000,"target":541,"stress":-1012.086031496051},{"source":541,"area":1,"density":0.284,"id":"e736","stiffness":30000000,"target":542,"stress":-1005.2613060562725},{"source":542,"area":1,"density":0.284,"id":"e737","stiffness":30000000,"target":543,"stress":82.02480534702049},{"source":543,"area":1,"density":0.284,"id":"e738","stiffness":30000000,"target":544,"stress":192.4856916458133},{"source":544,"area":1,"density":0.284,"id":"e739","stiffness":30000000,"target":537,"stress":-952.5634653060882},{"source":536,"area":1,"density":0.284,"id":"e740","stiffness":30000000,"target":538,"stress":-296.8882111562405},{"source":535,"area":1,"density":0.284,"id":"e741","stiffness":30000000,"target":540,"stress":-1356.251109893877},{"source":499,"area":1,"density":0.284,"id":"e742","stiffness":30000000,"target":542,"stress":-461.67005091236234},{"source":525,"area":1,"density":0.284,"id":"e743","stiffness":30000000,"target":544,"stress":-1149.544793945351},{"source":546,"area":1,"density":0.284,"id":"e744","stiffness":30000000,"target":547,"stress":19.924136118249304},{"source":547,"area":1,"density":0.284,"id":"e745","stiffness":30000000,"target":548,"stress":26.326609612031877},{"source":548,"area":1,"density":0.284,"id":"e746","stiffness":30000000,"target":549,"stress":-9.473092080178528},{"source":549,"area":1,"density":0.284,"id":"e747","stiffness":30000000,"target":550,"stress":-1.3223082782976112},{"source":550,"area":1,"density":0.284,"id":"e748","stiffness":30000000,"target":551,"stress":4.624094535333669},{"source":551,"area":1,"density":0.284,"id":"e749","stiffness":30000000,"target":552,"stress":62.76704875870529},{"source":552,"area":1,"density":0.284,"id":"e750","stiffness":30000000,"target":553,"stress":50.60491516356607},{"source":553,"area":1,"density":0.284,"id":"e751","stiffness":30000000,"target":546,"stress":27.970950579940588},{"source":119,"area":1,"density":0.284,"id":"e752","stiffness":30000000,"target":551,"stress":63.21644739972766},{"source":508,"area":1,"density":0.284,"id":"e753","stiffness":30000000,"target":553,"stress":103.56835347464721},{"source":535,"area":1,"density":0.284,"id":"e754","stiffness":30000000,"target":547,"stress":-4.000646070863653},{"source":545,"area":1,"density":0.284,"id":"e755","stiffness":30000000,"target":549,"stress":11.93416424001276},{"source":120,"area":1,"density":0.284,"id":"e756","stiffness":30000000,"target":128,"stress":-150.78356072854186},{"source":108,"area":1,"density":0.284,"id":"e757","stiffness":30000000,"target":126,"stress":-1378.3082065254953},{"source":72,"area":1,"density":0.284,"id":"e758","stiffness":30000000,"target":124,"stress":-396.5579650788556},{"source":119,"area":1,"density":0.284,"id":"e759","stiffness":30000000,"target":122,"stress":-1196.4461786627112},{"source":508,"area":1,"density":0.284,"id":"e760","stiffness":30000000,"target":518,"stress":-1346.3113808687551},{"source":72,"area":1,"density":0.284,"id":"e761","stiffness":30000000,"target":520,"stress":-370.8411541992917},{"source":489,"area":1,"density":0.284,"id":"e762","stiffness":30000000,"target":522,"stress":-1312.4094776406191},{"source":499,"area":1,"density":0.284,"id":"e763","stiffness":30000000,"target":524,"stress":-373.29940102798935},{"source":554,"area":1,"density":0.284,"id":"e764","stiffness":30000000,"target":555,"stress":-231.928784714086},{"source":555,"area":1,"density":0.284,"id":"e765","stiffness":30000000,"target":556,"stress":-656.5582727823703},{"source":556,"area":1,"density":0.284,"id":"e766","stiffness":30000000,"target":557,"stress":-652.9091561664295},{"source":557,"area":1,"density":0.284,"id":"e767","stiffness":30000000,"target":558,"stress":136.92740246031326},{"source":558,"area":1,"density":0.284,"id":"e768","stiffness":30000000,"target":559,"stress":-203.07806605262334},{"source":559,"area":1,"density":0.284,"id":"e769","stiffness":30000000,"target":560,"stress":-555.1144759476276},{"source":560,"area":1,"density":0.284,"id":"e770","stiffness":30000000,"target":561,"stress":-563.1796523639639},{"source":561,"area":1,"density":0.284,"id":"e771","stiffness":30000000,"target":554,"stress":131.62263779713425},{"source":536,"area":1,"density":0.284,"id":"e772","stiffness":30000000,"target":559,"stress":51.9859255861031},{"source":526,"area":1,"density":0.284,"id":"e773","stiffness":30000000,"target":557,"stress":-931.48709001038},{"source":120,"area":1,"density":0.284,"id":"e774","stiffness":30000000,"target":555,"stress":90.15188310353076},{"source":545,"area":1,"density":0.284,"id":"e775","stiffness":30000000,"target":561,"stress":-869.531756968237},{"source":562,"area":1,"density":0.284,"id":"e776","stiffness":30000000,"target":563,"stress":3.3431360946930395},{"source":563,"area":1,"density":0.284,"id":"e777","stiffness":30000000,"target":470,"stress":34.480161195561834},{"source":470,"area":1,"density":0.284,"id":"e778","stiffness":30000000,"target":564,"stress":10.490812780183889},{"source":564,"area":1,"density":0.284,"id":"e779","stiffness":30000000,"target":565,"stress":-4.614141948248767},{"source":565,"area":1,"density":0.284,"id":"e780","stiffness":30000000,"target":566,"stress":-14.618614870010246},{"source":566,"area":1,"density":0.284,"id":"e781","stiffness":30000000,"target":466,"stress":72.27453478987252},{"source":466,"area":1,"density":0.284,"id":"e782","stiffness":30000000,"target":567,"stress":5.8954404149362745},{"source":567,"area":1,"density":0.284,"id":"e783","stiffness":30000000,"target":562,"stress":51.97420832672733},{"source":451,"area":1,"density":0.284,"id":"e784","stiffness":30000000,"target":563,"stress":27.391639986851047},{"source":462,"area":1,"density":0.284,"id":"e785","stiffness":30000000,"target":564,"stress":-17.946517301779433},{"source":12,"area":1,"density":0.284,"id":"e786","stiffness":30000000,"target":566,"stress":86.9314724151031},{"source":463,"area":1,"density":0.284,"id":"e787","stiffness":30000000,"target":567,"stress":40.6657003917327},{"source":571,"area":1,"density":0.284,"id":"e788","stiffness":30000000,"target":572,"stress":-673.0718497307521},{"source":572,"area":1,"density":0.284,"id":"e789","stiffness":30000000,"target":573,"stress":95.28650687657722},{"source":573,"area":1,"density":0.284,"id":"e790","stiffness":30000000,"target":574,"stress":129.9637431582964},{"source":574,"area":1,"density":0.284,"id":"e791","stiffness":30000000,"target":575,"stress":-642.5759208102573},{"source":575,"area":1,"density":0.284,"id":"e792","stiffness":30000000,"target":576,"stress":-638.2355126639778},{"source":576,"area":1,"density":0.284,"id":"e793","stiffness":30000000,"target":577,"stress":109.18481358404914},{"source":577,"area":1,"density":0.284,"id":"e794","stiffness":30000000,"target":578,"stress":84.16086976555508},{"source":578,"area":1,"density":0.284,"id":"e795","stiffness":30000000,"target":571,"stress":-680.1790733911295},{"source":570,"area":1,"density":0.284,"id":"e796","stiffness":30000000,"target":572,"stress":-277.0853250986459},{"source":568,"area":1,"density":0.284,"id":"e797","stiffness":30000000,"target":574,"stress":-751.6221678316087},{"source":569,"area":1,"density":0.284,"id":"e798","stiffness":30000000,"target":576,"stress":-234.78531508564083},{"source":451,"area":1,"density":0.284,"id":"e799","stiffness":30000000,"target":578,"stress":-885.3539623530793},{"source":581,"area":1,"density":0.284,"id":"e800","stiffness":30000000,"target":582,"stress":8.517711412438969},{"source":582,"area":1,"density":0.284,"id":"e801","stiffness":30000000,"target":583,"stress":53.66178073487974},{"source":583,"area":1,"density":0.284,"id":"e802","stiffness":30000000,"target":584,"stress":-29.273437574743475},{"source":584,"area":1,"density":0.284,"id":"e803","stiffness":30000000,"target":585,"stress":21.594141271642087},{"source":585,"area":1,"density":0.284,"id":"e804","stiffness":30000000,"target":586,"stress":40.85401088257292},{"source":586,"area":1,"density":0.284,"id":"e805","stiffness":30000000,"target":587,"stress":19.81204859504634},{"source":587,"area":1,"density":0.284,"id":"e806","stiffness":30000000,"target":588,"stress":-22.986153100439328},{"source":588,"area":1,"density":0.284,"id":"e807","stiffness":30000000,"target":581,"stress":-27.839292837364646},{"source":164,"area":1,"density":0.284,"id":"e808","stiffness":30000000,"target":586,"stress":-12.27246940356549},{"source":579,"area":1,"density":0.284,"id":"e809","stiffness":30000000,"target":588,"stress":9.403273337326373},{"source":568,"area":1,"density":0.284,"id":"e810","stiffness":30000000,"target":582,"stress":50.65785028089433},{"source":580,"area":1,"density":0.284,"id":"e811","stiffness":30000000,"target":584,"stress":68.50827893629123},{"source":166,"area":1,"density":0.284,"id":"e812","stiffness":30000000,"target":174,"stress":-309.03174654646483},{"source":12,"area":1,"density":0.284,"id":"e813","stiffness":30000000,"target":172,"stress":-879.4789742102519},{"source":165,"area":1,"density":0.284,"id":"e814","stiffness":30000000,"target":170,"stress":-112.49061752512235},{"source":164,"area":1,"density":0.284,"id":"e815","stiffness":30000000,"target":168,"stress":-911.7619138683322},{"source":589,"area":1,"density":0.284,"id":"e816","stiffness":30000000,"target":590,"stress":75.32854294975553},{"source":590,"area":1,"density":0.284,"id":"e817","stiffness":30000000,"target":591,"stress":-343.9490380795137},{"source":591,"area":1,"density":0.284,"id":"e818","stiffness":30000000,"target":592,"stress":-338.9281591733689},{"source":592,"area":1,"density":0.284,"id":"e819","stiffness":30000000,"target":593,"stress":-134.76639145816},{"source":593,"area":1,"density":0.284,"id":"e820","stiffness":30000000,"target":594,"stress":102.54578167277529},{"source":594,"area":1,"density":0.284,"id":"e821","stiffness":30000000,"target":595,"stress":-377.30902081595565},{"source":595,"area":1,"density":0.284,"id":"e822","stiffness":30000000,"target":596,"stress":-382.86276164864836},{"source":596,"area":1,"density":0.284,"id":"e823","stiffness":30000000,"target":589,"stress":-173.88025053204805},{"source":579,"area":1,"density":0.284,"id":"e824","stiffness":30000000,"target":594,"stress":-583.2888167041338},{"source":165,"area":1,"density":0.284,"id":"e825","stiffness":30000000,"target":596,"stress":10.008058492751143},{"source":462,"area":1,"density":0.284,"id":"e826","stiffness":30000000,"target":590,"stress":-549.13866092509},{"source":569,"area":1,"density":0.284,"id":"e827","stiffness":30000000,"target":592,"stress":13.53228970720967},{"source":597,"area":1,"density":0.284,"id":"e828","stiffness":30000000,"target":598,"stress":74.6037737602467},{"source":598,"area":1,"density":0.284,"id":"e829","stiffness":30000000,"target":599,"stress":-663.9486428948552},{"source":599,"area":1,"density":0.284,"id":"e830","stiffness":30000000,"target":600,"stress":-691.2560467648201},{"source":600,"area":1,"density":0.284,"id":"e831","stiffness":30000000,"target":601,"stress":26.875376372015904},{"source":601,"area":1,"density":0.284,"id":"e832","stiffness":30000000,"target":602,"stress":41.24008724964558},{"source":602,"area":1,"density":0.284,"id":"e833","stiffness":30000000,"target":603,"stress":-665.8921080718235},{"source":603,"area":1,"density":0.284,"id":"e834","stiffness":30000000,"target":604,"stress":-676.708265545564},{"source":604,"area":1,"density":0.284,"id":"e835","stiffness":30000000,"target":597,"stress":56.93721065052414},{"source":570,"area":1,"density":0.284,"id":"e836","stiffness":30000000,"target":602,"stress":-214.54622707515148},{"source":463,"area":1,"density":0.284,"id":"e837","stiffness":30000000,"target":600,"stress":-980.8103389502095},{"source":166,"area":1,"density":0.284,"id":"e838","stiffness":30000000,"target":598,"stress":-134.32206685315415},{"source":580,"area":1,"density":0.284,"id":"e839","stiffness":30000000,"target":604,"stress":-890.8899334306492},{"source":509,"area":1,"density":0.284,"id":"e840","stiffness":30000000,"target":605,"stress":-11.321606700934334},{"source":605,"area":1,"density":0.284,"id":"e841","stiffness":30000000,"target":515,"stress":76.40703561183643},{"source":515,"area":1,"density":0.284,"id":"e842","stiffness":30000000,"target":606,"stress":4.5627159823572585},{"source":606,"area":1,"density":0.284,"id":"e843","stiffness":30000000,"target":513,"stress":59.00830362784906},{"source":513,"area":1,"density":0.284,"id":"e844","stiffness":30000000,"target":607,"stress":-14.944453529009223},{"source":607,"area":1,"density":0.284,"id":"e845","stiffness":30000000,"target":511,"stress":70.80867511656902},{"source":498,"area":1,"density":0.284,"id":"e846","stiffness":30000000,"target":605,"stress":84.63213908299957},{"source":463,"area":1,"density":0.284,"id":"e847","stiffness":30000000,"target":606,"stress":49.16866087491042},{"source":71,"area":1,"density":0.284,"id":"e848","stiffness":30000000,"target":607,"stress":80.808130302212},{"source":508,"area":1,"density":0.284,"id":"e849","stiffness":30000000,"target":510,"stress":64.78188718756361},{"source":610,"area":1,"density":0.284,"id":"e850","stiffness":30000000,"target":611,"stress":-661.9112970358685},{"source":611,"area":1,"density":0.284,"id":"e851","stiffness":30000000,"target":612,"stress":59.676806121564205},{"source":612,"area":1,"density":0.284,"id":"e852","stiffness":30000000,"target":613,"stress":78.21419168229266},{"source":613,"area":1,"density":0.284,"id":"e853","stiffness":30000000,"target":614,"stress":-660.8491281399798},{"source":614,"area":1,"density":0.284,"id":"e854","stiffness":30000000,"target":615,"stress":-667.9281895762521},{"source":615,"area":1,"density":0.284,"id":"e855","stiffness":30000000,"target":616,"stress":54.39500941628784},{"source":616,"area":1,"density":0.284,"id":"e856","stiffness":30000000,"target":617,"stress":69.06170729373503},{"source":617,"area":1,"density":0.284,"id":"e857","stiffness":30000000,"target":610,"stress":-664.5751226878854},{"source":609,"area":1,"density":0.284,"id":"e858","stiffness":30000000,"target":611,"stress":-268.18913876130506},{"source":608,"area":1,"density":0.284,"id":"e859","stiffness":30000000,"target":613,"stress":-823.8996479654696},{"source":570,"area":1,"density":0.284,"id":"e860","stiffness":30000000,"target":615,"stress":-310.11941283195284},{"source":498,"area":1,"density":0.284,"id":"e861","stiffness":30000000,"target":617,"stress":-863.7116437796124},{"source":619,"area":1,"density":0.284,"id":"e862","stiffness":30000000,"target":620,"stress":55.149208805332016},{"source":620,"area":1,"density":0.284,"id":"e863","stiffness":30000000,"target":621,"stress":73.63146582733913},{"source":621,"area":1,"density":0.284,"id":"e864","stiffness":30000000,"target":622,"stress":-36.19825546575632},{"source":622,"area":1,"density":0.284,"id":"e865","stiffness":30000000,"target":623,"stress":37.819887235852654},{"source":623,"area":1,"density":0.284,"id":"e866","stiffness":30000000,"target":624,"stress":32.86510950969588},{"source":624,"area":1,"density":0.284,"id":"e867","stiffness":30000000,"target":625,"stress":59.56933000547803},{"source":625,"area":1,"density":0.284,"id":"e868","stiffness":30000000,"target":626,"stress":-30.55142613063839},{"source":626,"area":1,"density":0.284,"id":"e869","stiffness":30000000,"target":619,"stress":44.01531889707088},{"source":218,"area":1,"density":0.284,"id":"e870","stiffness":30000000,"target":624,"stress":35.00569778280038},{"source":580,"area":1,"density":0.284,"id":"e871","stiffness":30000000,"target":626,"stress":86.22943435090338},{"source":608,"area":1,"density":0.284,"id":"e872","stiffness":30000000,"target":620,"stress":48.46973372578326},{"source":618,"area":1,"density":0.284,"id":"e873","stiffness":30000000,"target":622,"stress":88.12993391557421},{"source":219,"area":1,"density":0.284,"id":"e874","stiffness":30000000,"target":227,"stress":-319.36857524638725},{"source":71,"area":1,"density":0.284,"id":"e875","stiffness":30000000,"target":225,"stress":-858.5356685102364},{"source":166,"area":1,"density":0.284,"id":"e876","stiffness":30000000,"target":223,"stress":-285.40066518108654},{"source":218,"area":1,"density":0.284,"id":"e877","stiffness":30000000,"target":221,"stress":-818.5401196240105},{"source":580,"area":1,"density":0.284,"id":"e878","stiffness":30000000,"target":598,"stress":-777.8056380559836},{"source":166,"area":1,"density":0.284,"id":"e879","stiffness":30000000,"target":600,"stress":-327.98277718541954},{"source":463,"area":1,"density":0.284,"id":"e880","stiffness":30000000,"target":602,"stress":-845.8284794319424},{"source":570,"area":1,"density":0.284,"id":"e881","stiffness":30000000,"target":604,"stress":-247.1884103239281},{"source":627,"area":1,"density":0.284,"id":"e882","stiffness":30000000,"target":628,"stress":58.40729454789684},{"source":628,"area":1,"density":0.284,"id":"e883","stiffness":30000000,"target":629,"stress":-672.5497664477267},{"source":629,"area":1,"density":0.284,"id":"e884","stiffness":30000000,"target":630,"stress":-665.2336070596729},{"source":630,"area":1,"density":0.284,"id":"e885","stiffness":30000000,"target":631,"stress":43.007564166035},{"source":631,"area":1,"density":0.284,"id":"e886","stiffness":30000000,"target":632,"stress":29.59997892645338},{"source":632,"area":1,"density":0.284,"id":"e887","stiffness":30000000,"target":633,"stress":-685.9219528106488},{"source":633,"area":1,"density":0.284,"id":"e888","stiffness":30000000,"target":634,"stress":-660.499739430777},{"source":634,"area":1,"density":0.284,"id":"e889","stiffness":30000000,"target":627,"stress":72.09894691975487},{"source":609,"area":1,"density":0.284,"id":"e890","stiffness":30000000,"target":632,"stress":-312.14796118154294},{"source":508,"area":1,"density":0.284,"id":"e891","stiffness":30000000,"target":630,"stress":-855.556250132249},{"source":219,"area":1,"density":0.284,"id":"e892","stiffness":30000000,"target":628,"stress":-231.48143388198892},{"source":618,"area":1,"density":0.284,"id":"e893","stiffness":30000000,"target":634,"stress":-785.3413289816742},{"source":552,"area":1,"density":0.284,"id":"e894","stiffness":30000000,"target":635,"stress":3.028915648830434},{"source":635,"area":1,"density":0.284,"id":"e895","stiffness":30000000,"target":550,"stress":51.77801144177969},{"source":550,"area":1,"density":0.284,"id":"e896","stiffness":30000000,"target":636,"stress":-14.21530772968926},{"source":636,"area":1,"density":0.284,"id":"e897","stiffness":30000000,"target":548,"stress":26.14459415061472},{"source":535,"area":1,"density":0.284,"id":"e898","stiffness":30000000,"target":553,"stress":113.7897808197433},{"source":508,"area":1,"density":0.284,"id":"e899","stiffness":30000000,"target":635,"stress":43.50776702857305},{"source":119,"area":1,"density":0.284,"id":"e900","stiffness":30000000,"target":636,"stress":31.067793923418023},{"source":545,"area":1,"density":0.284,"id":"e901","stiffness":30000000,"target":547,"stress":-15.207058359298133},{"source":639,"area":1,"density":0.284,"id":"e902","stiffness":30000000,"target":640,"stress":-641.0813455396689},{"source":640,"area":1,"density":0.284,"id":"e903","stiffness":30000000,"target":641,"stress":128.00845537558382},{"source":641,"area":1,"density":0.284,"id":"e904","stiffness":30000000,"target":642,"stress":89.76844082321858},{"source":642,"area":1,"density":0.284,"id":"e905","stiffness":30000000,"target":643,"stress":-686.7191424456455},{"source":643,"area":1,"density":0.284,"id":"e906","stiffness":30000000,"target":644,"stress":-684.2510043239896},{"source":644,"area":1,"density":0.284,"id":"e907","stiffness":30000000,"target":645,"stress":90.14293332888437},{"source":645,"area":1,"density":0.284,"id":"e908","stiffness":30000000,"target":646,"stress":111.68890625299058},{"source":646,"area":1,"density":0.284,"id":"e909","stiffness":30000000,"target":639,"stress":-646.8703888768763},{"source":638,"area":1,"density":0.284,"id":"e910","stiffness":30000000,"target":640,"stress":-119.25413888752001},{"source":637,"area":1,"density":0.284,"id":"e911","stiffness":30000000,"target":642,"stress":-927.9585277390837},{"source":609,"area":1,"density":0.284,"id":"e912","stiffness":30000000,"target":644,"stress":-251.20231999196318},{"source":535,"area":1,"density":0.284,"id":"e913","stiffness":30000000,"target":646,"stress":-842.533583166421},{"source":648,"area":1,"density":0.284,"id":"e914","stiffness":30000000,"target":649,"stress":34.10344137254538},{"source":649,"area":1,"density":0.284,"id":"e915","stiffness":30000000,"target":650,"stress":43.07064634025368},{"source":650,"area":1,"density":0.284,"id":"e916","stiffness":30000000,"target":651,"stress":-22.52823311350124},{"source":651,"area":1,"density":0.284,"id":"e917","stiffness":30000000,"target":652,"stress":-10.520155115622739},{"source":652,"area":1,"density":0.284,"id":"e918","stiffness":30000000,"target":653,"stress":19.471317118412077},{"source":653,"area":1,"density":0.284,"id":"e919","stiffness":30000000,"target":654,"stress":64.89528462552246},{"source":654,"area":1,"density":0.284,"id":"e920","stiffness":30000000,"target":655,"stress":47.44077815031351},{"source":655,"area":1,"density":0.284,"id":"e921","stiffness":30000000,"target":648,"stress":1.5877929439635468},{"source":261,"area":1,"density":0.284,"id":"e922","stiffness":30000000,"target":653,"stress":53.7528515253349},{"source":618,"area":1,"density":0.284,"id":"e923","stiffness":30000000,"target":655,"stress":99.1137663186321},{"source":637,"area":1,"density":0.284,"id":"e924","stiffness":30000000,"target":649,"stress":-0.5664397309383206},{"source":647,"area":1,"density":0.284,"id":"e925","stiffness":30000000,"target":651,"stress":22.36293419785485},{"source":262,"area":1,"density":0.284,"id":"e926","stiffness":30000000,"target":270,"stress":-239.68691901561095},{"source":119,"area":1,"density":0.284,"id":"e927","stiffness":30000000,"target":268,"stress":-870.8851314898039},{"source":219,"area":1,"density":0.284,"id":"e928","stiffness":30000000,"target":266,"stress":-292.59884068124705},{"source":261,"area":1,"density":0.284,"id":"e929","stiffness":30000000,"target":264,"stress":-737.1380637875254},{"source":618,"area":1,"density":0.284,"id":"e930","stiffness":30000000,"target":628,"stress":-873.2940698252223},{"source":219,"area":1,"density":0.284,"id":"e931","stiffness":30000000,"target":630,"stress":-220.41470751475927},{"source":508,"area":1,"density":0.284,"id":"e932","stiffness":30000000,"target":632,"stress":-961.5545684259783},{"source":609,"area":1,"density":0.284,"id":"e933","stiffness":30000000,"target":634,"stress":-149.40811024574953},{"source":656,"area":1,"density":0.284,"id":"e934","stiffness":30000000,"target":657,"stress":-121.28637603984107},{"source":657,"area":1,"density":0.284,"id":"e935","stiffness":30000000,"target":658,"stress":-342.0653385330164},{"source":658,"area":1,"density":0.284,"id":"e936","stiffness":30000000,"target":659,"stress":-341.5186306407254},{"source":659,"area":1,"density":0.284,"id":"e937","stiffness":30000000,"target":660,"stress":88.68211699190255},{"source":660,"area":1,"density":0.284,"id":"e938","stiffness":30000000,"target":661,"stress":-154.6545084974687},{"source":661,"area":1,"density":0.284,"id":"e939","stiffness":30000000,"target":662,"stress":-377.7409037319339},{"source":662,"area":1,"density":0.284,"id":"e940","stiffness":30000000,"target":663,"stress":-365.9294569305566},{"source":663,"area":1,"density":0.284,"id":"e941","stiffness":30000000,"target":656,"stress":111.43298414376032},{"source":638,"area":1,"density":0.284,"id":"e942","stiffness":30000000,"target":661,"stress":30.662827349303775},{"source":545,"area":1,"density":0.284,"id":"e943","stiffness":30000000,"target":659,"stress":-548.9174283507597},{"source":262,"area":1,"density":0.284,"id":"e944","stiffness":30000000,"target":657,"stress":33.154648612872535},{"source":647,"area":1,"density":0.284,"id":"e945","stiffness":30000000,"target":663,"stress":-573.1352825319038},{"source":664,"area":1,"density":0.284,"id":"e946","stiffness":30000000,"target":665,"stress":-21.856546866030502},{"source":665,"area":1,"density":0.284,"id":"e947","stiffness":30000000,"target":587,"stress":31.56165199944039},{"source":587,"area":1,"density":0.284,"id":"e948","stiffness":30000000,"target":666,"stress":20.365809789841908},{"source":666,"area":1,"density":0.284,"id":"e949","stiffness":30000000,"target":667,"stress":18.074665845462604},{"source":667,"area":1,"density":0.284,"id":"e950","stiffness":30000000,"target":668,"stress":-23.72089394452397},{"source":668,"area":1,"density":0.284,"id":"e951","stiffness":30000000,"target":583,"stress":62.12833929308327},{"source":583,"area":1,"density":0.284,"id":"e952","stiffness":30000000,"target":669,"stress":19.03097056506628},{"source":669,"area":1,"density":0.284,"id":"e953","stiffness":30000000,"target":664,"stress":51.6302625263741},{"source":568,"area":1,"density":0.284,"id":"e954","stiffness":30000000,"target":665,"stress":43.010796453638946},{"source":579,"area":1,"density":0.284,"id":"e955","stiffness":30000000,"target":666,"stress":-13.792778410842422},{"source":164,"area":1,"density":0.284,"id":"e956","stiffness":30000000,"target":668,"stress":80.99479551019074},{"source":580,"area":1,"density":0.284,"id":"e957","stiffness":30000000,"target":669,"stress":16.228823671397787},{"source":673,"area":1,"density":0.284,"id":"e958","stiffness":30000000,"target":674,"stress":-334.71897803054605},{"source":674,"area":1,"density":0.284,"id":"e959","stiffness":30000000,"target":675,"stress":44.6402335771904},{"source":675,"area":1,"density":0.284,"id":"e960","stiffness":30000000,"target":676,"stress":63.84639803227899},{"source":676,"area":1,"density":0.284,"id":"e961","stiffness":30000000,"target":677,"stress":-311.5998334284807},{"source":677,"area":1,"density":0.284,"id":"e962","stiffness":30000000,"target":678,"stress":-304.48279466097756},{"source":678,"area":1,"density":0.284,"id":"e963","stiffness":30000000,"target":679,"stress":48.04319998194595},{"source":679,"area":1,"density":0.284,"id":"e964","stiffness":30000000,"target":680,"stress":36.2008445507584},{"source":680,"area":1,"density":0.284,"id":"e965","stiffness":30000000,"target":673,"stress":-342.3745389297008},{"source":672,"area":1,"density":0.284,"id":"e966","stiffness":30000000,"target":674,"stress":-197.00869863965858},{"source":670,"area":1,"density":0.284,"id":"e967","stiffness":30000000,"target":676,"stress":-310.1562854557863},{"source":671,"area":1,"density":0.284,"id":"e968","stiffness":30000000,"target":678,"stress":-174.19946554211157},{"source":568,"area":1,"density":0.284,"id":"e969","stiffness":30000000,"target":680,"stress":-403.51714252557764},{"source":683,"area":1,"density":0.284,"id":"e970","stiffness":30000000,"target":684,"stress":-28.960732346462283},{"source":684,"area":1,"density":0.284,"id":"e971","stiffness":30000000,"target":685,"stress":97.90613168082719},{"source":685,"area":1,"density":0.284,"id":"e972","stiffness":30000000,"target":686,"stress":65.42668665466549},{"source":686,"area":1,"density":0.284,"id":"e973","stiffness":30000000,"target":687,"stress":44.777400710896146},{"source":687,"area":1,"density":0.284,"id":"e974","stiffness":30000000,"target":688,"stress":7.3742637522828485},{"source":688,"area":1,"density":0.284,"id":"e975","stiffness":30000000,"target":689,"stress":64.25910921133935},{"source":689,"area":1,"density":0.284,"id":"e976","stiffness":30000000,"target":690,"stress":42.717901837446824},{"source":690,"area":1,"density":0.284,"id":"e977","stiffness":30000000,"target":683,"stress":-3.2045237895497594},{"source":306,"area":1,"density":0.284,"id":"e978","stiffness":30000000,"target":688,"stress":55.68685013337423},{"source":681,"area":1,"density":0.284,"id":"e979","stiffness":30000000,"target":690,"stress":-50.25030890270627},{"source":670,"area":1,"density":0.284,"id":"e980","stiffness":30000000,"target":684,"stress":122.40440372639729},{"source":682,"area":1,"density":0.284,"id":"e981","stiffness":30000000,"target":686,"stress":-27.849789314604873},{"source":308,"area":1,"density":0.284,"id":"e982","stiffness":30000000,"target":316,"stress":-150.55232525381254},{"source":164,"area":1,"density":0.284,"id":"e983","stiffness":30000000,"target":314,"stress":-496.04359356986333},{"source":307,"area":1,"density":0.284,"id":"e984","stiffness":30000000,"target":312,"stress":17.6698714087911},{"source":306,"area":1,"density":0.284,"id":"e985","stiffness":30000000,"target":310,"stress":-471.42586555629475},{"source":691,"area":1,"density":0.284,"id":"e986","stiffness":30000000,"target":692,"stress":55.0952750562494},{"source":692,"area":1,"density":0.284,"id":"e987","stiffness":30000000,"target":693,"stress":-131.5630349662498},{"source":693,"area":1,"density":0.284,"id":"e988","stiffness":30000000,"target":694,"stress":-153.8942435020405},{"source":694,"area":1,"density":0.284,"id":"e989","stiffness":30000000,"target":695,"stress":-55.5729076779436},{"source":695,"area":1,"density":0.284,"id":"e990","stiffness":30000000,"target":696,"stress":88.56877238276036},{"source":696,"area":1,"density":0.284,"id":"e991","stiffness":30000000,"target":697,"stress":-206.90725702197528},{"source":697,"area":1,"density":0.284,"id":"e992","stiffness":30000000,"target":698,"stress":-184.2050260923413},{"source":698,"area":1,"density":0.284,"id":"e993","stiffness":30000000,"target":691,"stress":-72.70331730036551},{"source":681,"area":1,"density":0.284,"id":"e994","stiffness":30000000,"target":696,"stress":-357.7406509770913},{"source":307,"area":1,"density":0.284,"id":"e995","stiffness":30000000,"target":698,"stress":-7.357599203332482},{"source":579,"area":1,"density":0.284,"id":"e996","stiffness":30000000,"target":692,"stress":-244.35059883543394},{"source":671,"area":1,"density":0.284,"id":"e997","stiffness":30000000,"target":694,"stress":19.937963402971235},{"source":699,"area":1,"density":0.284,"id":"e998","stiffness":30000000,"target":700,"stress":113.4778218033651},{"source":700,"area":1,"density":0.284,"id":"e999","stiffness":30000000,"target":701,"stress":-327.58261367495635},{"source":701,"area":1,"density":0.284,"id":"e1000","stiffness":30000000,"target":702,"stress":-343.6943169814724},{"source":702,"area":1,"density":0.284,"id":"e1001","stiffness":30000000,"target":703,"stress":66.5852760206366},{"source":703,"area":1,"density":0.284,"id":"e1002","stiffness":30000000,"target":704,"stress":75.72674630362471},{"source":704,"area":1,"density":0.284,"id":"e1003","stiffness":30000000,"target":705,"stress":-328.93608670911505},{"source":705,"area":1,"density":0.284,"id":"e1004","stiffness":30000000,"target":706,"stress":-335.180948702875},{"source":706,"area":1,"density":0.284,"id":"e1005","stiffness":30000000,"target":699,"stress":106.43978559757936},{"source":672,"area":1,"density":0.284,"id":"e1006","stiffness":30000000,"target":704,"stress":-32.50922823425347},{"source":580,"area":1,"density":0.284,"id":"e1007","stiffness":30000000,"target":702,"stress":-484.83549595249264},{"source":308,"area":1,"density":0.284,"id":"e1008","stiffness":30000000,"target":700,"stress":48.60274423688866},{"source":682,"area":1,"density":0.284,"id":"e1009","stiffness":30000000,"target":706,"stress":-403.0839353575809},{"source":619,"area":1,"density":0.284,"id":"e1010","stiffness":30000000,"target":707,"stress":-36.921135299312425},{"source":707,"area":1,"density":0.284,"id":"e1011","stiffness":30000000,"target":625,"stress":80.88139073968858},{"source":625,"area":1,"density":0.284,"id":"e1012","stiffness":30000000,"target":708,"stress":28.34798734241812},{"source":708,"area":1,"density":0.284,"id":"e1013","stiffness":30000000,"target":623,"stress":46.23802213445138},{"source":623,"area":1,"density":0.284,"id":"e1014","stiffness":30000000,"target":709,"stress":-43.2291446875879},{"source":709,"area":1,"density":0.284,"id":"e1015","stiffness":30000000,"target":621,"stress":76.12250380517048},{"source":608,"area":1,"density":0.284,"id":"e1016","stiffness":30000000,"target":707,"stress":107.17643352485243},{"source":580,"area":1,"density":0.284,"id":"e1017","stiffness":30000000,"target":708,"stress":3.2181517483341486},{"source":218,"area":1,"density":0.284,"id":"e1018","stiffness":30000000,"target":709,"stress":106.27156764538495},{"source":618,"area":1,"density":0.284,"id":"e1019","stiffness":30000000,"target":620,"stress":16.081688520798423},{"source":712,"area":1,"density":0.284,"id":"e1020","stiffness":30000000,"target":713,"stress":-324.98005848443023},{"source":713,"area":1,"density":0.284,"id":"e1021","stiffness":30000000,"target":714,"stress":26.939908264943995},{"source":714,"area":1,"density":0.284,"id":"e1022","stiffness":30000000,"target":715,"stress":43.723963685446556},{"source":715,"area":1,"density":0.284,"id":"e1023","stiffness":30000000,"target":716,"stress":-318.11653208821843},{"source":716,"area":1,"density":0.284,"id":"e1024","stiffness":30000000,"target":717,"stress":-323.9530862220428},{"source":717,"area":1,"density":0.284,"id":"e1025","stiffness":30000000,"target":718,"stress":22.265987251816707},{"source":718,"area":1,"density":0.284,"id":"e1026","stiffness":30000000,"target":719,"stress":35.11140832293001},{"source":719,"area":1,"density":0.284,"id":"e1027","stiffness":30000000,"target":712,"stress":-326.8800581734211},{"source":711,"area":1,"density":0.284,"id":"e1028","stiffness":30000000,"target":713,"stress":-155.4607101676523},{"source":710,"area":1,"density":0.284,"id":"e1029","stiffness":30000000,"target":715,"stress":-365.08103930434453},{"source":672,"area":1,"density":0.284,"id":"e1030","stiffness":30000000,"target":717,"stress":-185.61016275022905},{"source":608,"area":1,"density":0.284,"id":"e1031","stiffness":30000000,"target":719,"stress":-408.65789213044087},{"source":721,"area":1,"density":0.284,"id":"e1032","stiffness":30000000,"target":722,"stress":-9.788993816529764},{"source":722,"area":1,"density":0.284,"id":"e1033","stiffness":30000000,"target":723,"stress":59.44967615981329},{"source":723,"area":1,"density":0.284,"id":"e1034","stiffness":30000000,"target":724,"stress":28.912987423212662},{"source":724,"area":1,"density":0.284,"id":"e1035","stiffness":30000000,"target":725,"stress":66.72941528683612},{"source":725,"area":1,"density":0.284,"id":"e1036","stiffness":30000000,"target":726,"stress":-10.494125952068135},{"source":726,"area":1,"density":0.284,"id":"e1037","stiffness":30000000,"target":727,"stress":60.509999942420734},{"source":727,"area":1,"density":0.284,"id":"e1038","stiffness":30000000,"target":728,"stress":27.69237759038108},{"source":728,"area":1,"density":0.284,"id":"e1039","stiffness":30000000,"target":721,"stress":63.60325344235691},{"source":360,"area":1,"density":0.284,"id":"e1040","stiffness":30000000,"target":726,"stress":64.98795328979229},{"source":682,"area":1,"density":0.284,"id":"e1041","stiffness":30000000,"target":728,"stress":28.791248505775517},{"source":710,"area":1,"density":0.284,"id":"e1042","stiffness":30000000,"target":722,"stress":63.39578292974157},{"source":720,"area":1,"density":0.284,"id":"e1043","stiffness":30000000,"target":724,"stress":29.65310925495535},{"source":361,"area":1,"density":0.284,"id":"e1044","stiffness":30000000,"target":369,"stress":-201.21805927543136},{"source":218,"area":1,"density":0.284,"id":"e1045","stiffness":30000000,"target":367,"stress":-402.86834237652045},{"source":308,"area":1,"density":0.284,"id":"e1046","stiffness":30000000,"target":365,"stress":-175.93796715116275},{"source":360,"area":1,"density":0.284,"id":"e1047","stiffness":30000000,"target":363,"stress":-349.7635150686853},{"source":682,"area":1,"density":0.284,"id":"e1048","stiffness":30000000,"target":700,"stress":-331.4655971451036},{"source":308,"area":1,"density":0.284,"id":"e1049","stiffness":30000000,"target":702,"stress":-111.84969430140471},{"source":580,"area":1,"density":0.284,"id":"e1050","stiffness":30000000,"target":704,"stress":-394.66908430391356},{"source":672,"area":1,"density":0.284,"id":"e1051","stiffness":30000000,"target":706,"stress":-11.775452190615056},{"source":729,"area":1,"density":0.284,"id":"e1052","stiffness":30000000,"target":730,"stress":108.65396804809747},{"source":730,"area":1,"density":0.284,"id":"e1053","stiffness":30000000,"target":731,"stress":-337.0238298933726},{"source":731,"area":1,"density":0.284,"id":"e1054","stiffness":30000000,"target":732,"stress":-328.8151730815428},{"source":732,"area":1,"density":0.284,"id":"e1055","stiffness":30000000,"target":733,"stress":83.60498702188474},{"source":733,"area":1,"density":0.284,"id":"e1056","stiffness":30000000,"target":734,"stress":70.57592831234983},{"source":734,"area":1,"density":0.284,"id":"e1057","stiffness":30000000,"target":735,"stress":-343.66366926959313},{"source":735,"area":1,"density":0.284,"id":"e1058","stiffness":30000000,"target":736,"stress":-325.60994621483275},{"source":736,"area":1,"density":0.284,"id":"e1059","stiffness":30000000,"target":729,"stress":116.83610086148718},{"source":711,"area":1,"density":0.284,"id":"e1060","stiffness":30000000,"target":734,"stress":-106.29316242929376},{"source":618,"area":1,"density":0.284,"id":"e1061","stiffness":30000000,"target":732,"stress":-390.9558767769832},{"source":361,"area":1,"density":0.284,"id":"e1062","stiffness":30000000,"target":730,"stress":-8.915673405462428},{"source":720,"area":1,"density":0.284,"id":"e1063","stiffness":30000000,"target":736,"stress":-329.9298103775749},{"source":654,"area":1,"density":0.284,"id":"e1064","stiffness":30000000,"target":737,"stress":20.763826098435715},{"source":737,"area":1,"density":0.284,"id":"e1065","stiffness":30000000,"target":652,"stress":47.42396138887869},{"source":652,"area":1,"density":0.284,"id":"e1066","stiffness":30000000,"target":738,"stress":-43.06772892437946},{"source":738,"area":1,"density":0.284,"id":"e1067","stiffness":30000000,"target":650,"stress":39.40220169398858},{"source":637,"area":1,"density":0.284,"id":"e1068","stiffness":30000000,"target":655,"stress":121.76693606461978},{"source":618,"area":1,"density":0.284,"id":"e1069","stiffness":30000000,"target":737,"stress":10.949518163132081},{"source":261,"area":1,"density":0.284,"id":"e1070","stiffness":30000000,"target":738,"stress":65.41713622155609},{"source":647,"area":1,"density":0.284,"id":"e1071","stiffness":30000000,"target":649,"stress":-23.716005693951956},{"source":741,"area":1,"density":0.284,"id":"e1072","stiffness":30000000,"target":742,"stress":-309.80403897414084},{"source":742,"area":1,"density":0.284,"id":"e1073","stiffness":30000000,"target":743,"stress":71.97522583387685},{"source":743,"area":1,"density":0.284,"id":"e1074","stiffness":30000000,"target":744,"stress":47.24128814458825},{"source":744,"area":1,"density":0.284,"id":"e1075","stiffness":30000000,"target":745,"stress":-342.0760192526687},{"source":745,"area":1,"density":0.284,"id":"e1076","stiffness":30000000,"target":746,"stress":-339.6740188079767},{"source":746,"area":1,"density":0.284,"id":"e1077","stiffness":30000000,"target":747,"stress":46.75191368362978},{"source":747,"area":1,"density":0.284,"id":"e1078","stiffness":30000000,"target":748,"stress":44.96690662580823},{"source":748,"area":1,"density":0.284,"id":"e1079","stiffness":30000000,"target":741,"stress":-314.3412156601143},{"source":740,"area":1,"density":0.284,"id":"e1080","stiffness":30000000,"target":742,"stress":-9.660789990326023},{"source":739,"area":1,"density":0.284,"id":"e1081","stiffness":30000000,"target":744,"stress":-477.8481475440207},{"source":711,"area":1,"density":0.284,"id":"e1082","stiffness":30000000,"target":746,"stress":-104.53745094749101},{"source":637,"area":1,"density":0.284,"id":"e1083","stiffness":30000000,"target":748,"stress":-443.60022468575},{"source":750,"area":1,"density":0.284,"id":"e1084","stiffness":30000000,"target":751,"stress":2.922103121201099},{"source":751,"area":1,"density":0.284,"id":"e1085","stiffness":30000000,"target":752,"stress":66.76025880899914},{"source":752,"area":1,"density":0.284,"id":"e1086","stiffness":30000000,"target":753,"stress":47.20032747721684},{"source":753,"area":1,"density":0.284,"id":"e1087","stiffness":30000000,"target":754,"stress":4.564509863385036},{"source":754,"area":1,"density":0.284,"id":"e1088","stiffness":30000000,"target":755,"stress":-33.77129041751089},{"source":755,"area":1,"density":0.284,"id":"e1089","stiffness":30000000,"target":756,"stress":101.42645074250528},{"source":756,"area":1,"density":0.284,"id":"e1090","stiffness":30000000,"target":757,"stress":66.677967756187},{"source":757,"area":1,"density":0.284,"id":"e1091","stiffness":30000000,"target":750,"stress":46.30727081914063},{"source":403,"area":1,"density":0.284,"id":"e1092","stiffness":30000000,"target":755,"stress":129.00952557365545},{"source":720,"area":1,"density":0.284,"id":"e1093","stiffness":30000000,"target":757,"stress":-28.04892373795228},{"source":739,"area":1,"density":0.284,"id":"e1094","stiffness":30000000,"target":751,"stress":61.01890311727411},{"source":749,"area":1,"density":0.284,"id":"e1095","stiffness":30000000,"target":753,"stress":-49.44337341653846},{"source":404,"area":1,"density":0.284,"id":"e1096","stiffness":30000000,"target":412,"stress":-181.20383119682097},{"source":261,"area":1,"density":0.284,"id":"e1097","stiffness":30000000,"target":410,"stress":-394.76987131055466},{"source":361,"area":1,"density":0.284,"id":"e1098","stiffness":30000000,"target":408,"stress":-216.32344678929852},{"source":403,"area":1,"density":0.284,"id":"e1099","stiffness":30000000,"target":406,"stress":-294.6714008953175},{"source":720,"area":1,"density":0.284,"id":"e1100","stiffness":30000000,"target":730,"stress":-404.64514389462954},{"source":361,"area":1,"density":0.284,"id":"e1101","stiffness":30000000,"target":732,"stress":-19.66821940701762},{"source":618,"area":1,"density":0.284,"id":"e1102","stiffness":30000000,"target":734,"stress":-480.46117761268874},{"source":711,"area":1,"density":0.284,"id":"e1103","stiffness":30000000,"target":736,"stress":50.635837567813645},{"source":758,"area":1,"density":0.284,"id":"e1104","stiffness":30000000,"target":759,"stress":-44.49162857962047},{"source":759,"area":1,"density":0.284,"id":"e1105","stiffness":30000000,"target":760,"stress":-163.00583237784582},{"source":760,"area":1,"density":0.284,"id":"e1106","stiffness":30000000,"target":761,"stress":-126.22665710975912},{"source":761,"area":1,"density":0.284,"id":"e1107","stiffness":30000000,"target":762,"stress":89.34299888497134},{"source":762,"area":1,"density":0.284,"id":"e1108","stiffness":30000000,"target":763,"stress":-31.8727437756603},{"source":763,"area":1,"density":0.284,"id":"e1109","stiffness":30000000,"target":764,"stress":-186.62251510752972},{"source":764,"area":1,"density":0.284,"id":"e1110","stiffness":30000000,"target":765,"stress":-198.53984493266955},{"source":765,"area":1,"density":0.284,"id":"e1111","stiffness":30000000,"target":758,"stress":102.11456410234481},{"source":740,"area":1,"density":0.284,"id":"e1112","stiffness":30000000,"target":763,"stress":40.955741510777514},{"source":647,"area":1,"density":0.284,"id":"e1113","stiffness":30000000,"target":761,"stress":-251.1314772105031},{"source":404,"area":1,"density":0.284,"id":"e1114","stiffness":30000000,"target":759,"stress":45.933333951124006},{"source":749,"area":1,"density":0.284,"id":"e1115","stiffness":30000000,"target":765,"stress":-357.31239014184507},{"source":769,"area":1,"density":0.284,"id":"e1116","stiffness":30000000,"target":770,"stress":0.0},{"source":770,"area":1,"density":0.284,"id":"e1117","stiffness":30000000,"target":771,"stress":0.0},{"source":771,"area":1,"density":0.284,"id":"e1118","stiffness":30000000,"target":772,"stress":0.0},{"source":772,"area":1,"density":0.284,"id":"e1119","stiffness":30000000,"target":773,"stress":0.0},{"source":773,"area":1,"density":0.284,"id":"e1120","stiffness":30000000,"target":774,"stress":0.0},{"source":774,"area":1,"density":0.284,"id":"e1121","stiffness":30000000,"target":775,"stress":0.0},{"source":775,"area":1,"density":0.284,"id":"e1122","stiffness":30000000,"target":776,"stress":0.0},{"source":776,"area":1,"density":0.284,"id":"e1123","stiffness":30000000,"target":769,"stress":0.0},{"source":766,"area":1,"density":0.284,"id":"e1124","stiffness":30000000,"target":770,"stress":0.0},{"source":767,"area":1,"density":0.284,"id":"e1125","stiffness":30000000,"target":772,"stress":0.0},{"source":440,"area":1,"density":0.284,"id":"e1126","stiffness":30000000,"target":774,"stress":0.0},{"source":768,"area":1,"density":0.284,"id":"e1127","stiffness":30000000,"target":776,"stress":0.0},{"source":780,"area":1,"density":0.284,"id":"e1128","stiffness":30000000,"target":781,"stress":-574.634106174612},{"source":781,"area":1,"density":0.284,"id":"e1129","stiffness":30000000,"target":782,"stress":-451.90814932848406},{"source":782,"area":1,"density":0.284,"id":"e1130","stiffness":30000000,"target":783,"stress":492.14815409948017},{"source":783,"area":1,"density":0.284,"id":"e1131","stiffness":30000000,"target":784,"stress":-547.9091481388891},{"source":784,"area":1,"density":0.284,"id":"e1132","stiffness":30000000,"target":785,"stress":-481.18931734359256},{"source":785,"area":1,"density":0.284,"id":"e1133","stiffness":30000000,"target":786,"stress":-406.2330700586819},{"source":786,"area":1,"density":0.284,"id":"e1134","stiffness":30000000,"target":787,"stress":505.8612091201023},{"source":787,"area":1,"density":0.284,"id":"e1135","stiffness":30000000,"target":780,"stress":-596.3873425364103},{"source":779,"area":1,"density":0.284,"id":"e1136","stiffness":30000000,"target":781,"stress":305.56345613399367},{"source":777,"area":1,"density":0.284,"id":"e1137","stiffness":30000000,"target":783,"stress":-868.2756806584334},{"source":778,"area":1,"density":0.284,"id":"e1138","stiffness":30000000,"target":785,"stress":234.24744463779712},{"source":766,"area":1,"density":0.284,"id":"e1139","stiffness":30000000,"target":787,"stress":-923.5985181395619},{"source":790,"area":1,"density":0.284,"id":"e1140","stiffness":30000000,"target":791,"stress":6.9026297051943155},{"source":791,"area":1,"density":0.284,"id":"e1141","stiffness":30000000,"target":792,"stress":-23.040599990732357},{"source":792,"area":1,"density":0.284,"id":"e1142","stiffness":30000000,"target":793,"stress":-62.04125059779066},{"source":793,"area":1,"density":0.284,"id":"e1143","stiffness":30000000,"target":794,"stress":72.02825382769767},{"source":794,"area":1,"density":0.284,"id":"e1144","stiffness":30000000,"target":795,"stress":23.583304812406098},{"source":795,"area":1,"density":0.284,"id":"e1145","stiffness":30000000,"target":796,"stress":-12.764986503725497},{"source":796,"area":1,"density":0.284,"id":"e1146","stiffness":30000000,"target":797,"stress":-29.02535684884011},{"source":797,"area":1,"density":0.284,"id":"e1147","stiffness":30000000,"target":790,"stress":16.517575890856772},{"source":451,"area":1,"density":0.284,"id":"e1148","stiffness":30000000,"target":795,"stress":-36.73546287385893},{"source":788,"area":1,"density":0.284,"id":"e1149","stiffness":30000000,"target":797,"stress":50.80356056594323},{"source":777,"area":1,"density":0.284,"id":"e1150","stiffness":30000000,"target":791,"stress":-28.662855397163046},{"source":789,"area":1,"density":0.284,"id":"e1151","stiffness":30000000,"target":793,"stress":139.60175653897832},{"source":453,"area":1,"density":0.284,"id":"e1152","stiffness":30000000,"target":461,"stress":-367.8188866846368},{"source":440,"area":1,"density":0.284,"id":"e1153","stiffness":30000000,"target":459,"stress":-1161.4302117509906},{"source":452,"area":1,"density":0.284,"id":"e1154","stiffness":30000000,"target":457,"stress":-212.0180359119095},{"source":451,"area":1,"density":0.284,"id":"e1155","stiffness":30000000,"target":455,"stress":-1429.915583174209},{"source":798,"area":1,"density":0.284,"id":"e1156","stiffness":30000000,"target":799,"stress":144.86204498868088},{"source":799,"area":1,"density":0.284,"id":"e1157","stiffness":30000000,"target":800,"stress":-647.3492348119786},{"source":800,"area":1,"density":0.284,"id":"e1158","stiffness":30000000,"target":801,"stress":-664.2467997674731},{"source":801,"area":1,"density":0.284,"id":"e1159","stiffness":30000000,"target":802,"stress":-207.2659761103737},{"source":802,"area":1,"density":0.284,"id":"e1160","stiffness":30000000,"target":803,"stress":166.4752199062285},{"source":803,"area":1,"density":0.284,"id":"e1161","stiffness":30000000,"target":804,"stress":-609.950382569334},{"source":804,"area":1,"density":0.284,"id":"e1162","stiffness":30000000,"target":805,"stress":-588.6080608992502},{"source":805,"area":1,"density":0.284,"id":"e1163","stiffness":30000000,"target":798,"stress":-203.75741361747947},{"source":788,"area":1,"density":0.284,"id":"e1164","stiffness":30000000,"target":803,"stress":-944.3157742485819},{"source":452,"area":1,"density":0.284,"id":"e1165","stiffness":30000000,"target":805,"stress":58.93902713752008},{"source":767,"area":1,"density":0.284,"id":"e1166","stiffness":30000000,"target":799,"stress":-934.2453118761556},{"source":778,"area":1,"density":0.284,"id":"e1167","stiffness":30000000,"target":801,"stress":124.31345443273725},{"source":806,"area":1,"density":0.284,"id":"e1168","stiffness":30000000,"target":807,"stress":127.30748797313292},{"source":807,"area":1,"density":0.284,"id":"e1169","stiffness":30000000,"target":808,"stress":-1039.2451797146543},{"source":808,"area":1,"density":0.284,"id":"e1170","stiffness":30000000,"target":809,"stress":-1059.3731190625108},{"source":809,"area":1,"density":0.284,"id":"e1171","stiffness":30000000,"target":810,"stress":87.4442419218519},{"source":810,"area":1,"density":0.284,"id":"e1172","stiffness":30000000,"target":811,"stress":166.41069872474293},{"source":811,"area":1,"density":0.284,"id":"e1173","stiffness":30000000,"target":812,"stress":-995.8342224509076},{"source":812,"area":1,"density":0.284,"id":"e1174","stiffness":30000000,"target":813,"stress":-1021.7377210344414},{"source":813,"area":1,"density":0.284,"id":"e1175","stiffness":30000000,"target":806,"stress":151.4477935755068},{"source":779,"area":1,"density":0.284,"id":"e1176","stiffness":30000000,"target":811,"stress":-79.764610413611},{"source":768,"area":1,"density":0.284,"id":"e1177","stiffness":30000000,"target":809,"stress":-1445.936819620732},{"source":453,"area":1,"density":0.284,"id":"e1178","stiffness":30000000,"target":807,"stress":-350.60088420370823},{"source":789,"area":1,"density":0.284,"id":"e1179","stiffness":30000000,"target":813,"stress":-1277.7725418817258},{"source":816,"area":1,"density":0.284,"id":"e1180","stiffness":30000000,"target":817,"stress":0.0},{"source":817,"area":1,"density":0.284,"id":"e1181","stiffness":30000000,"target":818,"stress":0.0},{"source":818,"area":1,"density":0.284,"id":"e1182","stiffness":30000000,"target":819,"stress":0.0},{"source":819,"area":1,"density":0.284,"id":"e1183","stiffness":30000000,"target":820,"stress":0.0},{"source":820,"area":1,"density":0.284,"id":"e1184","stiffness":30000000,"target":821,"stress":0.0},{"source":821,"area":1,"density":0.284,"id":"e1185","stiffness":30000000,"target":822,"stress":0.0},{"source":822,"area":1,"density":0.284,"id":"e1186","stiffness":30000000,"target":823,"stress":0.0},{"source":823,"area":1,"density":0.284,"id":"e1187","stiffness":30000000,"target":816,"stress":0.0},{"source":814,"area":1,"density":0.284,"id":"e1188","stiffness":30000000,"target":817,"stress":0.0},{"source":768,"area":1,"density":0.284,"id":"e1189","stiffness":30000000,"target":819,"stress":0.0},{"source":488,"area":1,"density":0.284,"id":"e1190","stiffness":30000000,"target":821,"stress":0.0},{"source":815,"area":1,"density":0.284,"id":"e1191","stiffness":30000000,"target":823,"stress":0.0},{"source":826,"area":1,"density":0.284,"id":"e1192","stiffness":30000000,"target":827,"stress":-521.6167503131622},{"source":827,"area":1,"density":0.284,"id":"e1193","stiffness":30000000,"target":828,"stress":-481.8167480275192},{"source":828,"area":1,"density":0.284,"id":"e1194","stiffness":30000000,"target":829,"stress":482.89719811498867},{"source":829,"area":1,"density":0.284,"id":"e1195","stiffness":30000000,"target":830,"stress":-492.8391566310983},{"source":830,"area":1,"density":0.284,"id":"e1196","stiffness":30000000,"target":831,"stress":-440.8071090410157},{"source":831,"area":1,"density":0.284,"id":"e1197","stiffness":30000000,"target":832,"stress":-428.38881466718817},{"source":832,"area":1,"density":0.284,"id":"e1198","stiffness":30000000,"target":833,"stress":479.1613533878748},{"source":833,"area":1,"density":0.284,"id":"e1199","stiffness":30000000,"target":826,"stress":-538.4815448500544},{"source":825,"area":1,"density":0.284,"id":"e1200","stiffness":30000000,"target":827,"stress":219.99708256149017},{"source":824,"area":1,"density":0.284,"id":"e1201","stiffness":30000000,"target":829,"stress":-802.4060743029013},{"source":779,"area":1,"density":0.284,"id":"e1202","stiffness":30000000,"target":831,"stress":169.22954366465845},{"source":814,"area":1,"density":0.284,"id":"e1203","stiffness":30000000,"target":833,"stress":-844.1017380621213},{"source":835,"area":1,"density":0.284,"id":"e1204","stiffness":30000000,"target":836,"stress":40.8543251346435},{"source":836,"area":1,"density":0.284,"id":"e1205","stiffness":30000000,"target":837,"stress":35.886785582241316},{"source":837,"area":1,"density":0.284,"id":"e1206","stiffness":30000000,"target":838,"stress":29.74992689382962},{"source":838,"area":1,"density":0.284,"id":"e1207","stiffness":30000000,"target":839,"stress":19.989477496195846},{"source":839,"area":1,"density":0.284,"id":"e1208","stiffness":30000000,"target":840,"stress":11.177436813815916},{"source":840,"area":1,"density":0.284,"id":"e1209","stiffness":30000000,"target":841,"stress":66.03345393091166},{"source":841,"area":1,"density":0.284,"id":"e1210","stiffness":30000000,"target":842,"stress":3.2554971767922143},{"source":842,"area":1,"density":0.284,"id":"e1211","stiffness":30000000,"target":835,"stress":13.655872174549787},{"source":498,"area":1,"density":0.284,"id":"e1212","stiffness":30000000,"target":840,"stress":57.22552685790692},{"source":789,"area":1,"density":0.284,"id":"e1213","stiffness":30000000,"target":842,"stress":18.372632710846386},{"source":824,"area":1,"density":0.284,"id":"e1214","stiffness":30000000,"target":836,"stress":8.748873628689774},{"source":834,"area":1,"density":0.284,"id":"e1215","stiffness":30000000,"target":838,"stress":108.16934384282018},{"source":499,"area":1,"density":0.284,"id":"e1216","stiffness":30000000,"target":507,"stress":-314.9981973887832},{"source":488,"area":1,"density":0.284,"id":"e1217","stiffness":30000000,"target":505,"stress":-1337.669124995913},{"source":453,"area":1,"density":0.284,"id":"e1218","stiffness":30000000,"target":503,"stress":-323.7043366896492},{"source":498,"area":1,"density":0.284,"id":"e1219","stiffness":30000000,"target":501,"stress":-1386.104164445609},{"source":789,"area":1,"density":0.284,"id":"e1220","stiffness":30000000,"target":807,"stress":-1336.176999740938},{"source":453,"area":1,"density":0.284,"id":"e1221","stiffness":30000000,"target":809,"stress":-495.9590772002537},{"source":768,"area":1,"density":0.284,"id":"e1222","stiffness":30000000,"target":811,"stress":-1172.640026555425},{"source":779,"area":1,"density":0.284,"id":"e1223","stiffness":30000000,"target":813,"stress":-180.7157938494268},{"source":843,"area":1,"density":0.284,"id":"e1224","stiffness":30000000,"target":844,"stress":107.49789206470186},{"source":844,"area":1,"density":0.284,"id":"e1225","stiffness":30000000,"target":845,"stress":-1038.965247208886},{"source":845,"area":1,"density":0.284,"id":"e1226","stiffness":30000000,"target":846,"stress":-1035.2557478907868},{"source":846,"area":1,"density":0.284,"id":"e1227","stiffness":30000000,"target":847,"stress":115.17310597423364},{"source":847,"area":1,"density":0.284,"id":"e1228","stiffness":30000000,"target":848,"stress":164.8000127840972},{"source":848,"area":1,"density":0.284,"id":"e1229","stiffness":30000000,"target":849,"stress":-967.4036413597748},{"source":849,"area":1,"density":0.284,"id":"e1230","stiffness":30000000,"target":850,"stress":-966.0224151757433},{"source":850,"area":1,"density":0.284,"id":"e1231","stiffness":30000000,"target":843,"stress":142.56496293245277},{"source":825,"area":1,"density":0.284,"id":"e1232","stiffness":30000000,"target":848,"stress":-87.90531893127994},{"source":815,"area":1,"density":0.284,"id":"e1233","stiffness":30000000,"target":846,"stress":-1367.292131246768},{"source":499,"area":1,"density":0.284,"id":"e1234","stiffness":30000000,"target":844,"stress":-409.6142149960005},{"source":834,"area":1,"density":0.284,"id":"e1235","stiffness":30000000,"target":850,"stress":-1176.1405219323108},{"source":853,"area":1,"density":0.284,"id":"e1236","stiffness":30000000,"target":854,"stress":0.0},{"source":854,"area":1,"density":0.284,"id":"e1237","stiffness":30000000,"target":855,"stress":0.0},{"source":855,"area":1,"density":0.284,"id":"e1238","stiffness":30000000,"target":856,"stress":0.0},{"source":856,"area":1,"density":0.284,"id":"e1239","stiffness":30000000,"target":857,"stress":0.0},{"source":857,"area":1,"density":0.284,"id":"e1240","stiffness":30000000,"target":858,"stress":0.0},{"source":858,"area":1,"density":0.284,"id":"e1241","stiffness":30000000,"target":859,"stress":0.0},{"source":859,"area":1,"density":0.284,"id":"e1242","stiffness":30000000,"target":860,"stress":0.0},{"source":860,"area":1,"density":0.284,"id":"e1243","stiffness":30000000,"target":853,"stress":0.0},{"source":851,"area":1,"density":0.284,"id":"e1244","stiffness":30000000,"target":854,"stress":0.0},{"source":815,"area":1,"density":0.284,"id":"e1245","stiffness":30000000,"target":856,"stress":0.0},{"source":525,"area":1,"density":0.284,"id":"e1246","stiffness":30000000,"target":858,"stress":0.0},{"source":852,"area":1,"density":0.284,"id":"e1247","stiffness":30000000,"target":860,"stress":0.0},{"source":863,"area":1,"density":0.284,"id":"e1248","stiffness":30000000,"target":864,"stress":-506.89691269800767},{"source":864,"area":1,"density":0.284,"id":"e1249","stiffness":30000000,"target":865,"stress":-465.3437729434456},{"source":865,"area":1,"density":0.284,"id":"e1250","stiffness":30000000,"target":866,"stress":493.62099726851295},{"source":866,"area":1,"density":0.284,"id":"e1251","stiffness":30000000,"target":867,"stress":-515.1973587999479},{"source":867,"area":1,"density":0.284,"id":"e1252","stiffness":30000000,"target":868,"stress":-461.3030615353618},{"source":868,"area":1,"density":0.284,"id":"e1253","stiffness":30000000,"target":869,"stress":-402.68516030286185},{"source":869,"area":1,"density":0.284,"id":"e1254","stiffness":30000000,"target":870,"stress":463.7376868397678},{"source":870,"area":1,"density":0.284,"id":"e1255","stiffness":30000000,"target":863,"stress":-525.8339843569407},{"source":862,"area":1,"density":0.284,"id":"e1256","stiffness":30000000,"target":864,"stress":218.70269613750804},{"source":861,"area":1,"density":0.284,"id":"e1257","stiffness":30000000,"target":866,"stress":-834.2192694522981},{"source":825,"area":1,"density":0.284,"id":"e1258","stiffness":30000000,"target":868,"stress":212.3490210051585},{"source":851,"area":1,"density":0.284,"id":"e1259","stiffness":30000000,"target":870,"stress":-823.1085294048013},{"source":872,"area":1,"density":0.284,"id":"e1260","stiffness":30000000,"target":873,"stress":26.46504700499643},{"source":873,"area":1,"density":0.284,"id":"e1261","stiffness":30000000,"target":874,"stress":19.42507736454384},{"source":874,"area":1,"density":0.284,"id":"e1262","stiffness":30000000,"target":875,"stress":10.21121267429473},{"source":875,"area":1,"density":0.284,"id":"e1263","stiffness":30000000,"target":876,"stress":-19.19300374328578},{"source":876,"area":1,"density":0.284,"id":"e1264","stiffness":30000000,"target":877,"stress":52.512125188659375},{"source":877,"area":1,"density":0.284,"id":"e1265","stiffness":30000000,"target":878,"stress":43.33008864235893},{"source":878,"area":1,"density":0.284,"id":"e1266","stiffness":30000000,"target":879,"stress":17.19871408123468},{"source":879,"area":1,"density":0.284,"id":"e1267","stiffness":30000000,"target":872,"stress":-16.739787910799407},{"source":535,"area":1,"density":0.284,"id":"e1268","stiffness":30000000,"target":877,"stress":117.68772283978969},{"source":834,"area":1,"density":0.284,"id":"e1269","stiffness":30000000,"target":879,"stress":-35.90817623077773},{"source":861,"area":1,"density":0.284,"id":"e1270","stiffness":30000000,"target":873,"stress":6.466412798068845},{"source":871,"area":1,"density":0.284,"id":"e1271","stiffness":30000000,"target":875,"stress":-3.7652195775518824},{"source":536,"area":1,"density":0.284,"id":"e1272","stiffness":30000000,"target":544,"stress":-79.5611958124562},{"source":525,"area":1,"density":0.284,"id":"e1273","stiffness":30000000,"target":542,"stress":-1459.9324565789989},{"source":499,"area":1,"density":0.284,"id":"e1274","stiffness":30000000,"target":540,"stress":-303.4942448216387},{"source":535,"area":1,"density":0.284,"id":"e1275","stiffness":30000000,"target":538,"stress":-1308.2620453889633},{"source":834,"area":1,"density":0.284,"id":"e1276","stiffness":30000000,"target":844,"stress":-1393.084453743676},{"source":499,"area":1,"density":0.284,"id":"e1277","stiffness":30000000,"target":846,"stress":-409.6168799234677},{"source":815,"area":1,"density":0.284,"id":"e1278","stiffness":30000000,"target":848,"stress":-1152.972105175558},{"source":825,"area":1,"density":0.284,"id":"e1279","stiffness":30000000,"target":850,"stress":-155.4757495898856},{"source":880,"area":1,"density":0.284,"id":"e1280","stiffness":30000000,"target":881,"stress":-215.59903747455064},{"source":881,"area":1,"density":0.284,"id":"e1281","stiffness":30000000,"target":882,"stress":-717.41598174813},{"source":882,"area":1,"density":0.284,"id":"e1282","stiffness":30000000,"target":883,"stress":-719.2879753494958},{"source":883,"area":1,"density":0.284,"id":"e1283","stiffness":30000000,"target":884,"stress":182.93878977659242},{"source":884,"area":1,"density":0.284,"id":"e1284","stiffness":30000000,"target":885,"stress":-165.17800404509134},{"source":885,"area":1,"density":0.284,"id":"e1285","stiffness":30000000,"target":886,"stress":-607.607508270993},{"source":886,"area":1,"density":0.284,"id":"e1286","stiffness":30000000,"target":887,"stress":-614.9646323182889},{"source":887,"area":1,"density":0.284,"id":"e1287","stiffness":30000000,"target":880,"stress":158.84527298130644},{"source":862,"area":1,"density":0.284,"id":"e1288","stiffness":30000000,"target":885,"stress":116.06223357329117},{"source":852,"area":1,"density":0.284,"id":"e1289","stiffness":30000000,"target":883,"stress":-1026.7866477501245},{"source":536,"area":1,"density":0.284,"id":"e1290","stiffness":30000000,"target":881,"stress":134.34666676235125},{"source":871,"area":1,"density":0.284,"id":"e1291","stiffness":30000000,"target":887,"stress":-940.7302608005843},{"source":888,"area":1,"density":0.284,"id":"e1292","stiffness":30000000,"target":889,"stress":2.1097919605385296},{"source":889,"area":1,"density":0.284,"id":"e1293","stiffness":30000000,"target":796,"stress":28.50613998338012},{"source":796,"area":1,"density":0.284,"id":"e1294","stiffness":30000000,"target":890,"stress":23.86731566536645},{"source":890,"area":1,"density":0.284,"id":"e1295","stiffness":30000000,"target":891,"stress":-28.920015365429222},{"source":891,"area":1,"density":0.284,"id":"e1296","stiffness":30000000,"target":892,"stress":-12.047836700012516},{"source":892,"area":1,"density":0.284,"id":"e1297","stiffness":30000000,"target":792,"stress":93.18851598094749},{"source":792,"area":1,"density":0.284,"id":"e1298","stiffness":30000000,"target":893,"stress":49.9606426288286},{"source":893,"area":1,"density":0.284,"id":"e1299","stiffness":30000000,"target":888,"stress":-8.034500901849837},{"source":777,"area":1,"density":0.284,"id":"e1300","stiffness":30000000,"target":889,"stress":27.933096401016016},{"source":788,"area":1,"density":0.284,"id":"e1301","stiffness":30000000,"target":890,"stress":-54.329331448538575},{"source":451,"area":1,"density":0.284,"id":"e1302","stiffness":30000000,"target":892,"stress":107.57517094010862},{"source":789,"area":1,"density":0.284,"id":"e1303","stiffness":30000000,"target":893,"stress":-61.18786599187695},{"source":897,"area":1,"density":0.284,"id":"e1304","stiffness":30000000,"target":898,"stress":-234.73876147571502},{"source":898,"area":1,"density":0.284,"id":"e1305","stiffness":30000000,"target":899,"stress":-292.9512399483671},{"source":899,"area":1,"density":0.284,"id":"e1306","stiffness":30000000,"target":900,"stress":332.0003628463511},{"source":900,"area":1,"density":0.284,"id":"e1307","stiffness":30000000,"target":901,"stress":-378.00807192950595},{"source":901,"area":1,"density":0.284,"id":"e1308","stiffness":30000000,"target":902,"stress":-332.0827220627297},{"source":902,"area":1,"density":0.284,"id":"e1309","stiffness":30000000,"target":903,"stress":-272.14887446866106},{"source":903,"area":1,"density":0.284,"id":"e1310","stiffness":30000000,"target":904,"stress":340.7254669204391},{"source":904,"area":1,"density":0.284,"id":"e1311","stiffness":30000000,"target":897,"stress":-260.8202735848283},{"source":896,"area":1,"density":0.284,"id":"e1312","stiffness":30000000,"target":898,"stress":43.192181508868075},{"source":894,"area":1,"density":0.284,"id":"e1313","stiffness":30000000,"target":900,"stress":-595.2576398474688},{"source":895,"area":1,"density":0.284,"id":"e1314","stiffness":30000000,"target":902,"stress":167.81496492242056},{"source":777,"area":1,"density":0.284,"id":"e1315","stiffness":30000000,"target":904,"stress":-486.8871789469447},{"source":907,"area":1,"density":0.284,"id":"e1316","stiffness":30000000,"target":908,"stress":13.044575382311043},{"source":908,"area":1,"density":0.284,"id":"e1317","stiffness":30000000,"target":909,"stress":-26.937253674351332},{"source":909,"area":1,"density":0.284,"id":"e1318","stiffness":30000000,"target":910,"stress":-67.24483237323908},{"source":910,"area":1,"density":0.284,"id":"e1319","stiffness":30000000,"target":911,"stress":44.503250995230225},{"source":911,"area":1,"density":0.284,"id":"e1320","stiffness":30000000,"target":912,"stress":35.22120172302212},{"source":912,"area":1,"density":0.284,"id":"e1321","stiffness":30000000,"target":913,"stress":1.9949377414389267},{"source":913,"area":1,"density":0.284,"id":"e1322","stiffness":30000000,"target":914,"stress":-28.562215145615564},{"source":914,"area":1,"density":0.284,"id":"e1323","stiffness":30000000,"target":907,"stress":-7.079536741213214},{"source":568,"area":1,"density":0.284,"id":"e1324","stiffness":30000000,"target":912,"stress":-28.093530609525068},{"source":905,"area":1,"density":0.284,"id":"e1325","stiffness":30000000,"target":914,"stress":33.35297649414242},{"source":894,"area":1,"density":0.284,"id":"e1326","stiffness":30000000,"target":908,"stress":-36.36454537042145},{"source":906,"area":1,"density":0.284,"id":"e1327","stiffness":30000000,"target":910,"stress":127.2390889736132},{"source":570,"area":1,"density":0.284,"id":"e1328","stiffness":30000000,"target":578,"stress":-169.99290852243365},{"source":451,"area":1,"density":0.284,"id":"e1329","stiffness":30000000,"target":576,"stress":-915.3925262940444},{"source":569,"area":1,"density":0.284,"id":"e1330","stiffness":30000000,"target":574,"stress":-20.571999921220023},{"source":568,"area":1,"density":0.284,"id":"e1331","stiffness":30000000,"target":572,"stress":-979.830144579776},{"source":915,"area":1,"density":0.284,"id":"e1332","stiffness":30000000,"target":916,"stress":124.59896556727598},{"source":916,"area":1,"density":0.284,"id":"e1333","stiffness":30000000,"target":917,"stress":-425.1577229334723},{"source":917,"area":1,"density":0.284,"id":"e1334","stiffness":30000000,"target":918,"stress":-389.8088896939426},{"source":918,"area":1,"density":0.284,"id":"e1335","stiffness":30000000,"target":919,"stress":-65.38647632417977},{"source":919,"area":1,"density":0.284,"id":"e1336","stiffness":30000000,"target":920,"stress":150.72524695096322},{"source":920,"area":1,"density":0.284,"id":"e1337","stiffness":30000000,"target":921,"stress":-464.5396908646652},{"source":921,"area":1,"density":0.284,"id":"e1338","stiffness":30000000,"target":922,"stress":-440.7649485458332},{"source":922,"area":1,"density":0.284,"id":"e1339","stiffness":30000000,"target":915,"stress":-101.8853753273134},{"source":905,"area":1,"density":0.284,"id":"e1340","stiffness":30000000,"target":920,"stress":-682.5820890632741},{"source":569,"area":1,"density":0.284,"id":"e1341","stiffness":30000000,"target":922,"stress":93.35241271953089},{"source":788,"area":1,"density":0.284,"id":"e1342","stiffness":30000000,"target":916,"stress":-642.799538538758},{"source":895,"area":1,"density":0.284,"id":"e1343","stiffness":30000000,"target":918,"stress":89.05683171913111},{"source":923,"area":1,"density":0.284,"id":"e1344","stiffness":30000000,"target":924,"stress":114.21426958220806},{"source":924,"area":1,"density":0.284,"id":"e1345","stiffness":30000000,"target":925,"stress":-726.4123779221203},{"source":925,"area":1,"density":0.284,"id":"e1346","stiffness":30000000,"target":926,"stress":-720.7390270483068},{"source":926,"area":1,"density":0.284,"id":"e1347","stiffness":30000000,"target":927,"stress":95.4066467562056},{"source":927,"area":1,"density":0.284,"id":"e1348","stiffness":30000000,"target":928,"stress":98.98151703449349},{"source":928,"area":1,"density":0.284,"id":"e1349","stiffness":30000000,"target":929,"stress":-691.126382965679},{"source":929,"area":1,"density":0.284,"id":"e1350","stiffness":30000000,"target":930,"stress":-678.0770504731852},{"source":930,"area":1,"density":0.284,"id":"e1351","stiffness":30000000,"target":923,"stress":151.0906559444761},{"source":896,"area":1,"density":0.284,"id":"e1352","stiffness":30000000,"target":928,"stress":-172.40778278880757},{"source":789,"area":1,"density":0.284,"id":"e1353","stiffness":30000000,"target":926,"stress":-939.8940228643976},{"source":570,"area":1,"density":0.284,"id":"e1354","stiffness":30000000,"target":924,"stress":-235.20803638325512},{"source":906,"area":1,"density":0.284,"id":"e1355","stiffness":30000000,"target":930,"stress":-763.0674645382554},{"source":835,"area":1,"density":0.284,"id":"e1356","stiffness":30000000,"target":931,"stress":-5.2793803737465455},{"source":931,"area":1,"density":0.284,"id":"e1357","stiffness":30000000,"target":841,"stress":21.23518014910309},{"source":841,"area":1,"density":0.284,"id":"e1358","stiffness":30000000,"target":932,"stress":-11.41110880337828},{"source":932,"area":1,"density":0.284,"id":"e1359","stiffness":30000000,"target":839,"stress":57.81201106816897},{"source":824,"area":1,"density":0.284,"id":"e1360","stiffness":30000000,"target":931,"stress":24.70391928592415},{"source":789,"area":1,"density":0.284,"id":"e1361","stiffness":30000000,"target":932,"stress":61.60634306561105},{"source":498,"area":1,"density":0.284,"id":"e1362","stiffness":30000000,"target":838,"stress":99.87495956817584},{"source":834,"area":1,"density":0.284,"id":"e1363","stiffness":30000000,"target":836,"stress":5.233660794289534},{"source":935,"area":1,"density":0.284,"id":"e1364","stiffness":30000000,"target":936,"stress":-205.86288308210987},{"source":936,"area":1,"density":0.284,"id":"e1365","stiffness":30000000,"target":937,"stress":-310.20131822306195},{"source":937,"area":1,"density":0.284,"id":"e1366","stiffness":30000000,"target":938,"stress":324.45109803591913},{"source":938,"area":1,"density":0.284,"id":"e1367","stiffness":30000000,"target":939,"stress":-359.6654917532309},{"source":939,"area":1,"density":0.284,"id":"e1368","stiffness":30000000,"target":940,"stress":-318.3827658110233},{"source":940,"area":1,"density":0.284,"id":"e1369","stiffness":30000000,"target":941,"stress":-273.34179195550627},{"source":941,"area":1,"density":0.284,"id":"e1370","stiffness":30000000,"target":942,"stress":314.1307690216029},{"source":942,"area":1,"density":0.284,"id":"e1371","stiffness":30000000,"target":935,"stress":-227.2701109452962},{"source":934,"area":1,"density":0.284,"id":"e1372","stiffness":30000000,"target":936,"stress":-4.1868409756202},{"source":933,"area":1,"density":0.284,"id":"e1373","stiffness":30000000,"target":938,"stress":-569.2420155826816},{"source":896,"area":1,"density":0.284,"id":"e1374","stiffness":30000000,"target":940,"stress":149.12110532619016},{"source":824,"area":1,"density":0.284,"id":"e1375","stiffness":30000000,"target":942,"stress":-433.3485786307805},{"source":944,"area":1,"density":0.284,"id":"e1376","stiffness":30000000,"target":945,"stress":49.52464487078749},{"source":945,"area":1,"density":0.284,"id":"e1377","stiffness":30000000,"target":946,"stress":28.958439830273033},{"source":946,"area":1,"density":0.284,"id":"e1378","stiffness":30000000,"target":947,"stress":5.470260760295832},{"source":947,"area":1,"density":0.284,"id":"e1379","stiffness":30000000,"target":948,"stress":4.499845468233211},{"source":948,"area":1,"density":0.284,"id":"e1380","stiffness":30000000,"target":949,"stress":32.88852260280408},{"source":949,"area":1,"density":0.284,"id":"e1381","stiffness":30000000,"target":950,"stress":53.820445400480814},{"source":950,"area":1,"density":0.284,"id":"e1382","stiffness":30000000,"target":951,"stress":-27.703352498019445},{"source":951,"area":1,"density":0.284,"id":"e1383","stiffness":30000000,"target":944,"stress":29.945190473254005},{"source":608,"area":1,"density":0.284,"id":"e1384","stiffness":30000000,"target":949,"stress":29.083398557934267},{"source":906,"area":1,"density":0.284,"id":"e1385","stiffness":30000000,"target":951,"stress":73.12650674931129},{"source":933,"area":1,"density":0.284,"id":"e1386","stiffness":30000000,"target":945,"stress":-62.28570414151652},{"source":943,"area":1,"density":0.284,"id":"e1387","stiffness":30000000,"target":947,"stress":145.22866711772974},{"source":609,"area":1,"density":0.284,"id":"e1388","stiffness":30000000,"target":617,"stress":-182.89313331057173},{"source":498,"area":1,"density":0.284,"id":"e1389","stiffness":30000000,"target":615,"stress":-968.6337822333838},{"source":570,"area":1,"density":0.284,"id":"e1390","stiffness":30000000,"target":613,"stress":-134.39446588916385},{"source":608,"area":1,"density":0.284,"id":"e1391","stiffness":30000000,"target":611,"stress":-929.7767285680955},{"source":906,"area":1,"density":0.284,"id":"e1392","stiffness":30000000,"target":924,"stress":-943.6286235258042},{"source":570,"area":1,"density":0.284,"id":"e1393","stiffness":30000000,"target":926,"stress":-224.57061390969434},{"source":789,"area":1,"density":0.284,"id":"e1394","stiffness":30000000,"target":928,"stress":-891.5794407542254},{"source":896,"area":1,"density":0.284,"id":"e1395","stiffness":30000000,"target":930,"stress":1.2808169029238758},{"source":952,"area":1,"density":0.284,"id":"e1396","stiffness":30000000,"target":953,"stress":98.23266928379095},{"source":953,"area":1,"density":0.284,"id":"e1397","stiffness":30000000,"target":954,"stress":-725.3156178755497},{"source":954,"area":1,"density":0.284,"id":"e1398","stiffness":30000000,"target":955,"stress":-702.9282235554965},{"source":955,"area":1,"density":0.284,"id":"e1399","stiffness":30000000,"target":956,"stress":100.60650079877571},{"source":956,"area":1,"density":0.284,"id":"e1400","stiffness":30000000,"target":957,"stress":97.377047895128},{"source":957,"area":1,"density":0.284,"id":"e1401","stiffness":30000000,"target":958,"stress":-700.541875527534},{"source":958,"area":1,"density":0.284,"id":"e1402","stiffness":30000000,"target":959,"stress":-671.5652122641179},{"source":959,"area":1,"density":0.284,"id":"e1403","stiffness":30000000,"target":952,"stress":149.18420198806973},{"source":934,"area":1,"density":0.284,"id":"e1404","stiffness":30000000,"target":957,"stress":-213.3567263171178},{"source":834,"area":1,"density":0.284,"id":"e1405","stiffness":30000000,"target":955,"stress":-857.6842811017649},{"source":609,"area":1,"density":0.284,"id":"e1406","stiffness":30000000,"target":953,"stress":-302.89634531169594},{"source":943,"area":1,"density":0.284,"id":"e1407","stiffness":30000000,"target":959,"stress":-714.1179944090273},{"source":861,"area":1,"density":0.284,"id":"e1408","stiffness":30000000,"target":879,"stress":-8.53626540699012},{"source":834,"area":1,"density":0.284,"id":"e1409","stiffness":30000000,"target":877,"stress":125.6343733949451},{"source":535,"area":1,"density":0.284,"id":"e1410","stiffness":30000000,"target":875,"stress":14.361137707923076},{"source":871,"area":1,"density":0.284,"id":"e1411","stiffness":30000000,"target":873,"stress":5.061736552426889},{"source":962,"area":1,"density":0.284,"id":"e1412","stiffness":30000000,"target":963,"stress":-277.6930096559606},{"source":963,"area":1,"density":0.284,"id":"e1413","stiffness":30000000,"target":964,"stress":-266.21882262256526},{"source":964,"area":1,"density":0.284,"id":"e1414","stiffness":30000000,"target":965,"stress":322.4069937101102},{"source":965,"area":1,"density":0.284,"id":"e1415","stiffness":30000000,"target":966,"stress":-420.30523357126447},{"source":966,"area":1,"density":0.284,"id":"e1416","stiffness":30000000,"target":967,"stress":-369.7571484782007},{"source":967,"area":1,"density":0.284,"id":"e1417","stiffness":30000000,"target":968,"stress":-251.48629068792542},{"source":968,"area":1,"density":0.284,"id":"e1418","stiffness":30000000,"target":969,"stress":308.2647050061066},{"source":969,"area":1,"density":0.284,"id":"e1419","stiffness":30000000,"target":962,"stress":-315.3217145973431},{"source":961,"area":1,"density":0.284,"id":"e1420","stiffness":30000000,"target":963,"stress":111.34330124490613},{"source":960,"area":1,"density":0.284,"id":"e1421","stiffness":30000000,"target":965,"stress":-632.6268453841145},{"source":934,"area":1,"density":0.284,"id":"e1422","stiffness":30000000,"target":967,"stress":223.3108187838768},{"source":861,"area":1,"density":0.284,"id":"e1423","stiffness":30000000,"target":969,"stress":-519.3283024863578},{"source":971,"area":1,"density":0.284,"id":"e1424","stiffness":30000000,"target":972,"stress":43.6532772069781},{"source":972,"area":1,"density":0.284,"id":"e1425","stiffness":30000000,"target":973,"stress":16.2711965174639},{"source":973,"area":1,"density":0.284,"id":"e1426","stiffness":30000000,"target":974,"stress":-10.436878793807319},{"source":974,"area":1,"density":0.284,"id":"e1427","stiffness":30000000,"target":975,"stress":-30.36193590700772},{"source":975,"area":1,"density":0.284,"id":"e1428","stiffness":30000000,"target":976,"stress":57.44858522594378},{"source":976,"area":1,"density":0.284,"id":"e1429","stiffness":30000000,"target":977,"stress":60.74250852971692},{"source":977,"area":1,"density":0.284,"id":"e1430","stiffness":30000000,"target":978,"stress":14.188480225174839},{"source":978,"area":1,"density":0.284,"id":"e1431","stiffness":30000000,"target":971,"stress":-21.616804363284192},{"source":637,"area":1,"density":0.284,"id":"e1432","stiffness":30000000,"target":976,"stress":74.268252140075},{"source":943,"area":1,"density":0.284,"id":"e1433","stiffness":30000000,"target":978,"stress":45.097360060243545},{"source":960,"area":1,"density":0.284,"id":"e1434","stiffness":30000000,"target":972,"stress":-58.232164062303475},{"source":970,"area":1,"density":0.284,"id":"e1435","stiffness":30000000,"target":974,"stress":47.83200748844259},{"source":638,"area":1,"density":0.284,"id":"e1436","stiffness":30000000,"target":646,"stress":-136.60238919307133},{"source":535,"area":1,"density":0.284,"id":"e1437","stiffness":30000000,"target":644,"stress":-963.1820201134251},{"source":609,"area":1,"density":0.284,"id":"e1438","stiffness":30000000,"target":642,"stress":-205.43569197953929},{"source":637,"area":1,"density":0.284,"id":"e1439","stiffness":30000000,"target":640,"stress":-832.3249936162454},{"source":943,"area":1,"density":0.284,"id":"e1440","stiffness":30000000,"target":953,"stress":-1000.60896633142},{"source":609,"area":1,"density":0.284,"id":"e1441","stiffness":30000000,"target":955,"stress":-166.00049855426127},{"source":834,"area":1,"density":0.284,"id":"e1442","stiffness":30000000,"target":957,"stress":-950.801617494224},{"source":934,"area":1,"density":0.284,"id":"e1443","stiffness":30000000,"target":959,"stress":39.41854697181164},{"source":979,"area":1,"density":0.284,"id":"e1444","stiffness":30000000,"target":980,"stress":-154.39750496676922},{"source":980,"area":1,"density":0.284,"id":"e1445","stiffness":30000000,"target":981,"stress":-372.9263531866225},{"source":981,"area":1,"density":0.284,"id":"e1446","stiffness":30000000,"target":982,"stress":-366.0402431890376},{"source":982,"area":1,"density":0.284,"id":"e1447","stiffness":30000000,"target":983,"stress":103.6671433933891},{"source":983,"area":1,"density":0.284,"id":"e1448","stiffness":30000000,"target":984,"stress":-148.94341690296582},{"source":984,"area":1,"density":0.284,"id":"e1449","stiffness":30000000,"target":985,"stress":-411.5812824618148},{"source":985,"area":1,"density":0.284,"id":"e1450","stiffness":30000000,"target":986,"stress":-392.8269205208319},{"source":986,"area":1,"density":0.284,"id":"e1451","stiffness":30000000,"target":979,"stress":99.33482615681163},{"source":961,"area":1,"density":0.284,"id":"e1452","stiffness":30000000,"target":984,"stress":59.088714026770454},{"source":871,"area":1,"density":0.284,"id":"e1453","stiffness":30000000,"target":982,"stress":-585.392069500035},{"source":638,"area":1,"density":0.284,"id":"e1454","stiffness":30000000,"target":980,"stress":21.172290004544234},{"source":970,"area":1,"density":0.284,"id":"e1455","stiffness":30000000,"target":986,"stress":-604.2446765685362},{"source":987,"area":1,"density":0.284,"id":"e1456","stiffness":30000000,"target":988,"stress":-21.409561227705762},{"source":988,"area":1,"density":0.284,"id":"e1457","stiffness":30000000,"target":913,"stress":24.093092562335872},{"source":913,"area":1,"density":0.284,"id":"e1458","stiffness":30000000,"target":989,"stress":25.91659325894729},{"source":989,"area":1,"density":0.284,"id":"e1459","stiffness":30000000,"target":990,"stress":-0.10103053828894147},{"source":990,"area":1,"density":0.284,"id":"e1460","stiffness":30000000,"target":991,"stress":-18.725640635384426},{"source":991,"area":1,"density":0.284,"id":"e1461","stiffness":30000000,"target":909,"stress":80.73271365294708},{"source":909,"area":1,"density":0.284,"id":"e1462","stiffness":30000000,"target":992,"stress":60.132998163953154},{"source":992,"area":1,"density":0.284,"id":"e1463","stiffness":30000000,"target":987,"stress":-0.5479147302980816},{"source":894,"area":1,"density":0.284,"id":"e1464","stiffness":30000000,"target":988,"stress":39.88900407972915},{"source":905,"area":1,"density":0.284,"id":"e1465","stiffness":30000000,"target":989,"stress":-35.775863280216846},{"source":568,"area":1,"density":0.284,"id":"e1466","stiffness":30000000,"target":991,"stress":97.64496394582368},{"source":906,"area":1,"density":0.284,"id":"e1467","stiffness":30000000,"target":992,"stress":-75.00519142580102},{"source":996,"area":1,"density":0.284,"id":"e1468","stiffness":30000000,"target":997,"stress":-81.57464217497717},{"source":997,"area":1,"density":0.284,"id":"e1469","stiffness":30000000,"target":998,"stress":-331.3370139892717},{"source":998,"area":1,"density":0.284,"id":"e1470","stiffness":30000000,"target":999,"stress":216.76234710489575},{"source":999,"area":1,"density":0.284,"id":"e1471","stiffness":30000000,"target":1000,"stress":-228.85273339195896},{"source":1000,"area":1,"density":0.284,"id":"e1472","stiffness":30000000,"target":1001,"stress":-159.38797680721035},{"source":1001,"area":1,"density":0.284,"id":"e1473","stiffness":30000000,"target":1002,"stress":-123.31380845330386},{"source":1002,"area":1,"density":0.284,"id":"e1474","stiffness":30000000,"target":1003,"stress":227.03975861819802},{"source":1003,"area":1,"density":0.284,"id":"e1475","stiffness":30000000,"target":996,"stress":-57.09738326345844},{"source":995,"area":1,"density":0.284,"id":"e1476","stiffness":30000000,"target":997,"stress":-166.3483339187606},{"source":993,"area":1,"density":0.284,"id":"e1477","stiffness":30000000,"target":999,"stress":-362.88139707524823},{"source":994,"area":1,"density":0.284,"id":"e1478","stiffness":30000000,"target":1001,"stress":86.02695909216018},{"source":894,"area":1,"density":0.284,"id":"e1479","stiffness":30000000,"target":1003,"stress":-210.40651126237552},{"source":1006,"area":1,"density":0.284,"id":"e1480","stiffness":30000000,"target":1007,"stress":-34.971496651521534},{"source":1007,"area":1,"density":0.284,"id":"e1481","stiffness":30000000,"target":1008,"stress":-19.784020151268898},{"source":1008,"area":1,"density":0.284,"id":"e1482","stiffness":30000000,"target":1009,"stress":-9.053803970235288},{"source":1009,"area":1,"density":0.284,"id":"e1483","stiffness":30000000,"target":1010,"stress":117.33395173087614},{"source":1010,"area":1,"density":0.284,"id":"e1484","stiffness":30000000,"target":1011,"stress":6.412582532285743},{"source":1011,"area":1,"density":0.284,"id":"e1485","stiffness":30000000,"target":1012,"stress":66.6890260698865},{"source":1012,"area":1,"density":0.284,"id":"e1486","stiffness":30000000,"target":1013,"stress":48.693088733532285},{"source":1013,"area":1,"density":0.284,"id":"e1487","stiffness":30000000,"target":1006,"stress":8.100545642545457},{"source":670,"area":1,"density":0.284,"id":"e1488","stiffness":30000000,"target":1011,"stress":50.81648443339613},{"source":1004,"area":1,"density":0.284,"id":"e1489","stiffness":30000000,"target":1013,"stress":-48.4629363350348},{"source":993,"area":1,"density":0.284,"id":"e1490","stiffness":30000000,"target":1007,"stress":4.647912317812247},{"source":1005,"area":1,"density":0.284,"id":"e1491","stiffness":30000000,"target":1009,"stress":110.82976512828718},{"source":672,"area":1,"density":0.284,"id":"e1492","stiffness":30000000,"target":680,"stress":-42.51960015886173},{"source":568,"area":1,"density":0.284,"id":"e1493","stiffness":30000000,"target":678,"stress":-486.51709457087236},{"source":671,"area":1,"density":0.284,"id":"e1494","stiffness":30000000,"target":676,"stress":53.95626057943549},{"source":670,"area":1,"density":0.284,"id":"e1495","stiffness":30000000,"target":674,"stress":-535.9398478465225},{"source":1014,"area":1,"density":0.284,"id":"e1496","stiffness":30000000,"target":1015,"stress":114.30786676037422},{"source":1015,"area":1,"density":0.284,"id":"e1497","stiffness":30000000,"target":1016,"stress":-248.1368558754463},{"source":1016,"area":1,"density":0.284,"id":"e1498","stiffness":30000000,"target":1017,"stress":-239.79700183153784},{"source":1017,"area":1,"density":0.284,"id":"e1499","stiffness":30000000,"target":1018,"stress":-59.85744653257818},{"source":1018,"area":1,"density":0.284,"id":"e1500","stiffness":30000000,"target":1019,"stress":79.98802233442815},{"source":1019,"area":1,"density":0.284,"id":"e1501","stiffness":30000000,"target":1020,"stress":-214.11120217609226},{"source":1020,"area":1,"density":0.284,"id":"e1502","stiffness":30000000,"target":1021,"stress":-187.37347702910526},{"source":1021,"area":1,"density":0.284,"id":"e1503","stiffness":30000000,"target":1014,"stress":31.461173283113112},{"source":1004,"area":1,"density":0.284,"id":"e1504","stiffness":30000000,"target":1019,"stress":-356.7924186106238},{"source":671,"area":1,"density":0.284,"id":"e1505","stiffness":30000000,"target":1021,"stress":97.57194012286675},{"source":905,"area":1,"density":0.284,"id":"e1506","stiffness":30000000,"target":1015,"stress":-358.54498114231706},{"source":994,"area":1,"density":0.284,"id":"e1507","stiffness":30000000,"target":1017,"stress":45.65184288119818},{"source":1022,"area":1,"density":0.284,"id":"e1508","stiffness":30000000,"target":1023,"stress":125.79140032137127},{"source":1023,"area":1,"density":0.284,"id":"e1509","stiffness":30000000,"target":1024,"stress":-342.9983075963354},{"source":1024,"area":1,"density":0.284,"id":"e1510","stiffness":30000000,"target":1025,"stress":-338.50473881644814},{"source":1025,"area":1,"density":0.284,"id":"e1511","stiffness":30000000,"target":1026,"stress":61.396425237555796},{"source":1026,"area":1,"density":0.284,"id":"e1512","stiffness":30000000,"target":1027,"stress":50.72536342047194},{"source":1027,"area":1,"density":0.284,"id":"e1513","stiffness":30000000,"target":1028,"stress":-370.81693287917983},{"source":1028,"area":1,"density":0.284,"id":"e1514","stiffness":30000000,"target":1029,"stress":-352.3208871849079},{"source":1029,"area":1,"density":0.284,"id":"e1515","stiffness":30000000,"target":1022,"stress":133.0288496713015},{"source":995,"area":1,"density":0.284,"id":"e1516","stiffness":30000000,"target":1027,"stress":-185.623915773686},{"source":906,"area":1,"density":0.284,"id":"e1517","stiffness":30000000,"target":1025,"stress":-407.5820044314036},{"source":672,"area":1,"density":0.284,"id":"e1518","stiffness":30000000,"target":1023,"stress":16.583872310241862},{"source":1005,"area":1,"density":0.284,"id":"e1519","stiffness":30000000,"target":1029,"stress":-328.63986409898973},{"source":944,"area":1,"density":0.284,"id":"e1520","stiffness":30000000,"target":1030,"stress":-35.386451140862995},{"source":1030,"area":1,"density":0.284,"id":"e1521","stiffness":30000000,"target":950,"stress":49.24406741091268},{"source":950,"area":1,"density":0.284,"id":"e1522","stiffness":30000000,"target":1031,"stress":18.33566023207357},{"source":1031,"area":1,"density":0.284,"id":"e1523","stiffness":30000000,"target":948,"stress":48.04122542526189},{"source":933,"area":1,"density":0.284,"id":"e1524","stiffness":30000000,"target":1030,"stress":75.81170066362914},{"source":906,"area":1,"density":0.284,"id":"e1525","stiffness":30000000,"target":1031,"stress":14.517489069974982},{"source":608,"area":1,"density":0.284,"id":"e1526","stiffness":30000000,"target":947,"stress":116.2549610501975},{"source":943,"area":1,"density":0.284,"id":"e1527","stiffness":30000000,"target":945,"stress":-65.91207612374738},{"source":1034,"area":1,"density":0.284,"id":"e1528","stiffness":30000000,"target":1035,"stress":-60.58594183369712},{"source":1035,"area":1,"density":0.284,"id":"e1529","stiffness":30000000,"target":1036,"stress":-266.48245449952526},{"source":1036,"area":1,"density":0.284,"id":"e1530","stiffness":30000000,"target":1037,"stress":224.08229007157203},{"source":1037,"area":1,"density":0.284,"id":"e1531","stiffness":30000000,"target":1038,"stress":-239.35403679088716},{"source":1038,"area":1,"density":0.284,"id":"e1532","stiffness":30000000,"target":1039,"stress":-179.64137365930702},{"source":1039,"area":1,"density":0.284,"id":"e1533","stiffness":30000000,"target":1040,"stress":-195.09373683406145},{"source":1040,"area":1,"density":0.284,"id":"e1534","stiffness":30000000,"target":1041,"stress":189.22501804365982},{"source":1041,"area":1,"density":0.284,"id":"e1535","stiffness":30000000,"target":1034,"stress":-50.500067670880476},{"source":1033,"area":1,"density":0.284,"id":"e1536","stiffness":30000000,"target":1035,"stress":-135.24507774841658},{"source":1032,"area":1,"density":0.284,"id":"e1537","stiffness":30000000,"target":1037,"stress":-383.7627954914079},{"source":995,"area":1,"density":0.284,"id":"e1538","stiffness":30000000,"target":1039,"stress":43.68652185594252},{"source":933,"area":1,"density":0.284,"id":"e1539","stiffness":30000000,"target":1041,"stress":-170.33186779281152},{"source":1043,"area":1,"density":0.284,"id":"e1540","stiffness":30000000,"target":1044,"stress":4.729764580938897},{"source":1044,"area":1,"density":0.284,"id":"e1541","stiffness":30000000,"target":1045,"stress":-8.600145835759447},{"source":1045,"area":1,"density":0.284,"id":"e1542","stiffness":30000000,"target":1046,"stress":-30.64152037124256},{"source":1046,"area":1,"density":0.284,"id":"e1543","stiffness":30000000,"target":1047,"stress":112.33776892013644},{"source":1047,"area":1,"density":0.284,"id":"e1544","stiffness":30000000,"target":1048,"stress":8.301479781673585},{"source":1048,"area":1,"density":0.284,"id":"e1545","stiffness":30000000,"target":1049,"stress":41.02312920693264},{"source":1049,"area":1,"density":0.284,"id":"e1546","stiffness":30000000,"target":1050,"stress":16.769319969633113},{"source":1050,"area":1,"density":0.284,"id":"e1547","stiffness":30000000,"target":1043,"stress":74.94700973727302},{"source":710,"area":1,"density":0.284,"id":"e1548","stiffness":30000000,"target":1048,"stress":25.880731571062384},{"source":1005,"area":1,"density":0.284,"id":"e1549","stiffness":30000000,"target":1050,"stress":51.07332626535184},{"source":1032,"area":1,"density":0.284,"id":"e1550","stiffness":30000000,"target":1044,"stress":-16.233832095823693},{"source":1042,"area":1,"density":0.284,"id":"e1551","stiffness":30000000,"target":1046,"stress":136.65481467222676},{"source":711,"area":1,"density":0.284,"id":"e1552","stiffness":30000000,"target":719,"stress":-70.78121226245611},{"source":608,"area":1,"density":0.284,"id":"e1553","stiffness":30000000,"target":717,"stress":-497.810527111814},{"source":672,"area":1,"density":0.284,"id":"e1554","stiffness":30000000,"target":715,"stress":-23.779375518399593},{"source":710,"area":1,"density":0.284,"id":"e1555","stiffness":30000000,"target":713,"stress":-475.83736398312413},{"source":1005,"area":1,"density":0.284,"id":"e1556","stiffness":30000000,"target":1023,"stress":-396.3384705564211},{"source":672,"area":1,"density":0.284,"id":"e1557","stiffness":30000000,"target":1025,"stress":-45.29841965148966},{"source":906,"area":1,"density":0.284,"id":"e1558","stiffness":30000000,"target":1027,"stress":-569.6300598454122},{"source":995,"area":1,"density":0.284,"id":"e1559","stiffness":30000000,"target":1029,"stress":87.85399353902476},{"source":1051,"area":1,"density":0.284,"id":"e1560","stiffness":30000000,"target":1052,"stress":116.18320490078456},{"source":1052,"area":1,"density":0.284,"id":"e1561","stiffness":30000000,"target":1053,"stress":-346.526994917779},{"source":1053,"area":1,"density":0.284,"id":"e1562","stiffness":30000000,"target":1054,"stress":-339.26176576995056},{"source":1054,"area":1,"density":0.284,"id":"e1563","stiffness":30000000,"target":1055,"stress":60.586210234971624},{"source":1055,"area":1,"density":0.284,"id":"e1564","stiffness":30000000,"target":1056,"stress":49.38193890494817},{"source":1056,"area":1,"density":0.284,"id":"e1565","stiffness":30000000,"target":1057,"stress":-366.18011568931666},{"source":1057,"area":1,"density":0.284,"id":"e1566","stiffness":30000000,"target":1058,"stress":-343.26557848445873},{"source":1058,"area":1,"density":0.284,"id":"e1567","stiffness":30000000,"target":1051,"stress":125.30249981649128},{"source":1033,"area":1,"density":0.284,"id":"e1568","stiffness":30000000,"target":1056,"stress":-208.05117279956343},{"source":943,"area":1,"density":0.284,"id":"e1569","stiffness":30000000,"target":1054,"stress":-377.7970767858254},{"source":711,"area":1,"density":0.284,"id":"e1570","stiffness":30000000,"target":1052,"stress":-35.414164518341714},{"source":1042,"area":1,"density":0.284,"id":"e1571","stiffness":30000000,"target":1058,"stress":-284.3881726866591},{"source":960,"area":1,"density":0.284,"id":"e1572","stiffness":30000000,"target":978,"stress":57.71939881846158},{"source":943,"area":1,"density":0.284,"id":"e1573","stiffness":30000000,"target":976,"stress":55.53994011083873},{"source":637,"area":1,"density":0.284,"id":"e1574","stiffness":30000000,"target":974,"stress":44.34354156415475},{"source":970,"area":1,"density":0.284,"id":"e1575","stiffness":30000000,"target":972,"stress":-54.600732982497675},{"source":1061,"area":1,"density":0.284,"id":"e1576","stiffness":30000000,"target":1062,"stress":-149.31185978685747},{"source":1062,"area":1,"density":0.284,"id":"e1577","stiffness":30000000,"target":1063,"stress":-195.6976131555391},{"source":1063,"area":1,"density":0.284,"id":"e1578","stiffness":30000000,"target":1064,"stress":199.95720218013804},{"source":1064,"area":1,"density":0.284,"id":"e1579","stiffness":30000000,"target":1065,"stress":-273.46097474766395},{"source":1065,"area":1,"density":0.284,"id":"e1580","stiffness":30000000,"target":1066,"stress":-216.87626785060172},{"source":1066,"area":1,"density":0.284,"id":"e1581","stiffness":30000000,"target":1067,"stress":-138.51488584300213},{"source":1067,"area":1,"density":0.284,"id":"e1582","stiffness":30000000,"target":1068,"stress":179.19697361167968},{"source":1068,"area":1,"density":0.284,"id":"e1583","stiffness":30000000,"target":1061,"stress":-152.16487175752277},{"source":1060,"area":1,"density":0.284,"id":"e1584","stiffness":30000000,"target":1062,"stress":20.44619328139224},{"source":1059,"area":1,"density":0.284,"id":"e1585","stiffness":30000000,"target":1064,"stress":-405.5255352573141},{"source":1033,"area":1,"density":0.284,"id":"e1586","stiffness":30000000,"target":1066,"stress":133.85933634540908},{"source":960,"area":1,"density":0.284,"id":"e1587","stiffness":30000000,"target":1068,"stress":-269.47105289356045},{"source":1070,"area":1,"density":0.284,"id":"e1588","stiffness":30000000,"target":1071,"stress":45.52553774874857},{"source":1071,"area":1,"density":0.284,"id":"e1589","stiffness":30000000,"target":1072,"stress":0.7688971503294953},{"source":1072,"area":1,"density":0.284,"id":"e1590","stiffness":30000000,"target":1073,"stress":-29.18574474710619},{"source":1073,"area":1,"density":0.284,"id":"e1591","stiffness":30000000,"target":1074,"stress":-45.26442747190174},{"source":1074,"area":1,"density":0.284,"id":"e1592","stiffness":30000000,"target":1075,"stress":0.5361300549637904},{"source":1075,"area":1,"density":0.284,"id":"e1593","stiffness":30000000,"target":1076,"stress":80.1867072157145},{"source":1076,"area":1,"density":0.284,"id":"e1594","stiffness":30000000,"target":1077,"stress":63.034134990939954},{"source":1077,"area":1,"density":0.284,"id":"e1595","stiffness":30000000,"target":1070,"stress":87.95652252490724},{"source":739,"area":1,"density":0.284,"id":"e1596","stiffness":30000000,"target":1075,"stress":84.88011812600622},{"source":1042,"area":1,"density":0.284,"id":"e1597","stiffness":30000000,"target":1077,"stress":14.096314865643285},{"source":1059,"area":1,"density":0.284,"id":"e1598","stiffness":30000000,"target":1071,"stress":-37.997591140388785},{"source":1069,"area":1,"density":0.284,"id":"e1599","stiffness":30000000,"target":1073,"stress":-1.2628087591999073},{"source":740,"area":1,"density":0.284,"id":"e1600","stiffness":30000000,"target":748,"stress":-113.143753377246},{"source":637,"area":1,"density":0.284,"id":"e1601","stiffness":30000000,"target":746,"stress":-460.8800024419221},{"source":711,"area":1,"density":0.284,"id":"e1602","stiffness":30000000,"target":744,"stress":-116.92870739669604},{"source":739,"area":1,"density":0.284,"id":"e1603","stiffness":30000000,"target":742,"stress":-368.29950492830557},{"source":1042,"area":1,"density":0.284,"id":"e1604","stiffness":30000000,"target":1052,"stress":-444.43885022930976},{"source":711,"area":1,"density":0.284,"id":"e1605","stiffness":30000000,"target":1054,"stress":-18.76487142170126},{"source":943,"area":1,"density":0.284,"id":"e1606","stiffness":30000000,"target":1056,"stress":-591.6629591730691},{"source":1033,"area":1,"density":0.284,"id":"e1607","stiffness":30000000,"target":1058,"stress":114.00714115352373},{"source":1078,"area":1,"density":0.284,"id":"e1608","stiffness":30000000,"target":1079,"stress":-93.85152951371504},{"source":1079,"area":1,"density":0.284,"id":"e1609","stiffness":30000000,"target":1080,"stress":-192.02815634964566},{"source":1080,"area":1,"density":0.284,"id":"e1610","stiffness":30000000,"target":1081,"stress":-171.06551491437105},{"source":1081,"area":1,"density":0.284,"id":"e1611","stiffness":30000000,"target":1082,"stress":73.54432805675033},{"source":1082,"area":1,"density":0.284,"id":"e1612","stiffness":30000000,"target":1083,"stress":-50.71798762857258},{"source":1083,"area":1,"density":0.284,"id":"e1613","stiffness":30000000,"target":1084,"stress":-163.13390342946536},{"source":1084,"area":1,"density":0.284,"id":"e1614","stiffness":30000000,"target":1085,"stress":-172.58843811103216},{"source":1085,"area":1,"density":0.284,"id":"e1615","stiffness":30000000,"target":1078,"stress":73.2333443918316},{"source":1060,"area":1,"density":0.284,"id":"e1616","stiffness":30000000,"target":1083,"stress":10.851159728169534},{"source":970,"area":1,"density":0.284,"id":"e1617","stiffness":30000000,"target":1081,"stress":-288.5868562263358},{"source":740,"area":1,"density":0.284,"id":"e1618","stiffness":30000000,"target":1079,"stress":1.198677717043211},{"source":1069,"area":1,"density":0.284,"id":"e1619","stiffness":30000000,"target":1085,"stress":-331.74357951347207}],"ndofs":6516}
\ No newline at end of file
+{"nodes":[{"degrees_of_freedom":[0,1,2,3,4,5],"id":"n0","parent":"11","position":{"x":5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[6,7,8,9,10,11],"id":"n1","parent":"11","position":{"x":0,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[12,13,14,15,16,17],"id":"n2","parent":"11","position":{"x":-5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[18,19,20,21,22,23],"id":"n3","parent":"11","position":{"x":0,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[24,25,26,27,28,29],"id":"n4","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[30,31,32,33,34,35],"id":"n5","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[36,37,38,39,40,41],"id":"n6","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[42,43,44,45,46,47],"id":"n7","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[48,49,50,51,52,53],"id":"n8","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[54,55,56,57,58,59],"id":"n9","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[60,61,62,63,64,65],"id":"n10","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[66,67,68,69,70,71],"id":"n11","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[72,73,74,75,76,77],"id":"n12","parent":"11","position":{"x":5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":6.127132793271835e-5,"z":-7.639095581589413e-5,"y":-0.0005764274019345438},"angle":{"x":-1.9013930510645524e-6,"z":3.0128006125328124e-6,"y":-8.548784645213563e-6}},{"degrees_of_freedom":[78,79,80,81,82,83],"id":"n13","parent":"11","position":{"x":5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.569761109534172e-6,"z":-0.00010777159947126257,"y":-0.00028572049297527995},"angle":{"x":-6.622493094482657e-6,"z":-7.927227597480725e-6,"y":1.4663176431686647e-5}},{"degrees_of_freedom":[84,85,86,87,88,89],"id":"n14","parent":"11","position":{"x":5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.116467881432545e-7,"z":-3.4746541839714456e-5,"y":-0.00028307701043840715},"angle":{"x":-6.065254866757487e-6,"z":-1.4699240266210533e-8,"y":-3.382088363859101e-6}},{"degrees_of_freedom":[90,91,92,93,94,95],"id":"n15","parent":"11","position":{"x":5,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1351803857914026e-5,"z":-1.960349764016291e-5,"y":-0.00027718211977956024},"angle":{"x":-9.386528610793465e-6,"z":-8.717492222424017e-6,"y":-1.0741990711025303e-5}},{"degrees_of_freedom":[96,97,98,99,100,101],"id":"n16","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.2295178068147197e-5,"z":-5.648161134569309e-5,"y":-0.0003714623512687226},"angle":{"x":-4.924079214971394e-5,"z":-3.547543920729361e-5,"y":6.0207606143133185e-5}},{"degrees_of_freedom":[102,103,104,105,106,107],"id":"n17","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012974950662651946,"z":-7.539604596915942e-5,"y":-0.00039109855402806284},"angle":{"x":-2.486443651569343e-6,"z":-1.3969227242829163e-5,"y":-5.3545429511993016e-6}},{"degrees_of_freedom":[108,109,110,111,112,113],"id":"n18","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7555535024263845e-5,"z":-9.187963135299823e-5,"y":-0.0003767891618344145},"angle":{"x":4.3720625778137304e-5,"z":-3.669467365241936e-5,"y":-6.48984249855061e-5}},{"degrees_of_freedom":[114,115,116,117,118,119],"id":"n19","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.2370324426419476e-5,"z":-0.00010808661547533818,"y":-0.0002959439770030652},"angle":{"x":-9.587473463721716e-6,"z":-1.2988752332348383e-5,"y":6.885525725068618e-6}},{"degrees_of_freedom":[120,121,122,123,124,125],"id":"n20","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2907516204761859e-6,"z":-5.842180432046639e-5,"y":-0.0002014830985866955},"angle":{"x":-6.220130945016956e-5,"z":-4.1867268431194384e-5,"y":9.329977544387342e-5}},{"degrees_of_freedom":[126,127,128,129,130,131],"id":"n21","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.5663043333925166e-5,"z":-3.4779235415806295e-5,"y":-0.00018267589100857734},"angle":{"x":-3.973276675619675e-6,"z":-7.736958438718973e-6,"y":1.498046266648981e-6}},{"degrees_of_freedom":[132,133,134,135,136,137],"id":"n22","parent":"11","position":{"x":5,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6129606473451595e-6,"z":-2.304579484405199e-5,"y":-0.00019700937696385043},"angle":{"x":2.9730820615397525e-5,"z":-2.6422701629836494e-5,"y":-5.6086589820472104e-5}},{"degrees_of_freedom":[138,139,140,141,142,143],"id":"n23","parent":"11","position":{"x":-5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.5377777257867134e-5,"z":-0.00011723453085738498,"y":-0.0006552370489324696},"angle":{"x":-9.965305653783383e-5,"z":-2.4016887302890977e-5,"y":-5.518173102753488e-6}},{"degrees_of_freedom":[144,145,146,147,148,149],"id":"n24","parent":"11","position":{"x":0,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":7.949989139376031e-5,"z":-9.497832993157438e-5,"y":-0.0006056060795723847},"angle":{"x":4.468232025152814e-5,"z":-7.392087564194488e-5,"y":-1.0328494038985797e-5}},{"degrees_of_freedom":[150,151,152,153,154,155],"id":"n25","parent":"11","position":{"x":0,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.4110268389745248e-8,"z":-8.891661907729727e-5,"y":-0.0005923884537637654},"angle":{"x":-6.071875783003396e-6,"z":-9.053262432384068e-6,"y":-1.0960377728638846e-5}},{"degrees_of_freedom":[156,157,158,159,160,161],"id":"n26","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.980378780188304e-5,"z":-8.351279249544361e-5,"y":-0.001005964818163343},"angle":{"x":-0.0001332865429699522,"z":-2.1843642012876748e-5,"y":-7.115220852895506e-6}},{"degrees_of_freedom":[162,163,164,165,166,167],"id":"n27","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.273687102346741e-5,"z":-8.666163675302946e-5,"y":-0.0006166130603515833},"angle":{"x":0.0007145346527257998,"z":-0.00031910070800352056,"y":-5.063707444213137e-6}},{"degrees_of_freedom":[168,169,170,171,172,173],"id":"n28","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4304472797574585e-5,"z":-9.286668541744927e-5,"y":-0.0004632055300697475},"angle":{"x":-0.00010476457304674579,"z":-2.6941953700752467e-5,"y":-4.1907782267487045e-6}},{"degrees_of_freedom":[174,175,176,177,178,179],"id":"n29","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.479832553620267e-5,"z":-0.00010388623094324996,"y":-0.0004851400327793676},"angle":{"x":0.0002665155173172908,"z":0.00010183275945537704,"y":-8.436678850859844e-6}},{"degrees_of_freedom":[180,181,182,183,184,185],"id":"n30","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.5869772361783854e-5,"z":-0.00010780933224229556,"y":-0.0005191034477018869},"angle":{"x":-0.00012307939842534182,"z":-3.8402387409671986e-5,"y":-9.353758825194293e-6}},{"degrees_of_freedom":[186,187,188,189,190,191],"id":"n31","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.593048979287994e-5,"z":-0.00010476015655908967,"y":-0.0009919513076572896},"angle":{"x":3.101737796819643e-5,"z":-9.537636611059227e-5,"y":-5.927588327633606e-6}},{"degrees_of_freedom":[192,193,194,195,196,197],"id":"n32","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.158732563502504e-5,"z":-9.562701844056847e-5,"y":-0.0011956776124639784},"angle":{"x":-0.0001515997704632538,"z":-3.3304022631398205e-5,"y":-5.1601233318580876e-6}},{"degrees_of_freedom":[198,199,200,201,202,203],"id":"n33","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.876979230599399e-5,"z":-8.575088511137702e-5,"y":-0.0011456749524418888},"angle":{"x":0.0009170300281609024,"z":0.0003470063501822908,"y":-6.108290126576873e-6}},{"degrees_of_freedom":[204,205,206,207,208,209],"id":"n34","parent":"11","position":{"x":-5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.62809621994341e-5,"z":2.3957647839037344e-5,"y":-0.00028829903598645833},"angle":{"x":-4.856370516257132e-5,"z":-7.66383725766996e-6,"y":2.850842658665082e-5}},{"degrees_of_freedom":[210,211,212,213,214,215],"id":"n35","parent":"11","position":{"x":-5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.70118539723795e-5,"z":-8.117311583525215e-8,"y":-0.00028912134929227754},"angle":{"x":-2.8222974350723854e-5,"z":-3.8343527094672525e-6,"y":1.5590867114343817e-5}},{"degrees_of_freedom":[216,217,218,219,220,221],"id":"n36","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.537081706266729e-5,"z":-1.014570871502798e-5,"y":-0.00016875867503778546},"angle":{"x":5.18517064158398e-6,"z":-2.066569861882278e-5,"y":-1.9664979826319588e-5}},{"degrees_of_freedom":[222,223,224,225,226,227],"id":"n37","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.78287668553489e-5,"z":6.561244020218238e-6,"y":-0.00021576920241149356},"angle":{"x":2.1268838017196703e-5,"z":9.209627026869108e-6,"y":6.483522329191923e-5}},{"degrees_of_freedom":[228,229,230,231,232,233],"id":"n38","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017618916523321913,"z":2.120954178050248e-5,"y":-0.00033999416500637595},"angle":{"x":8.649902729306661e-5,"z":-2.84184990727143e-5,"y":-4.159324559149605e-5}},{"degrees_of_freedom":[234,235,236,237,238,239],"id":"n39","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.023327536817232e-5,"z":2.081361555884091e-5,"y":-0.0004360656722063371},"angle":{"x":-3.411511326841213e-5,"z":-9.58477397523689e-5,"y":0.00014912549423106109}},{"degrees_of_freedom":[240,241,242,243,244,245],"id":"n40","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017230484576138903,"z":3.3026133970852355e-5,"y":-0.00038860612092968293},"angle":{"x":7.2974047816760535e-6,"z":-2.066581478682328e-5,"y":-6.35212282345018e-5}},{"degrees_of_freedom":[246,247,248,249,250,251],"id":"n41","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001680624429245042,"z":5.209081900790816e-6,"y":-0.0003420665059032294},"angle":{"x":2.761407790076071e-5,"z":4.280211639782865e-5,"y":0.00011599295898691574}},{"degrees_of_freedom":[252,253,254,255,256,257],"id":"n42","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015781961883380407,"z":-1.3732510165444174e-5,"y":-0.0002252320643227212},"angle":{"x":8.625045379106706e-5,"z":-1.2912974873755336e-5,"y":-4.159345146889665e-5}},{"degrees_of_freedom":[258,259,260,261,262,263],"id":"n43","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.3794536611178853e-11,"z":-9.336828999068538e-6,"y":-0.0001265983051085975},"angle":{"x":-1.5855753921700385e-5,"z":-0.00011563721057273592,"y":0.0002489549346602368}},{"degrees_of_freedom":[264,265,266,267,268,269],"id":"n44","parent":"11","position":{"x":0,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.143664078975512e-5,"z":-7.289909064571853e-5,"y":-0.00019920029996414794},"angle":{"x":0.00010929407808522114,"z":3.961471798517929e-5,"y":9.187975597437265e-6}},{"degrees_of_freedom":[270,271,272,273,274,275],"id":"n45","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.868492035381642e-6,"z":-1.791847341338329e-10,"y":-0.00015321835074543372},"angle":{"x":-3.40196266557355e-5,"z":-9.064707238951791e-6,"y":-5.017451211032404e-5}},{"degrees_of_freedom":[276,277,278,279,280,281],"id":"n46","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.101387679182387e-6,"z":-2.674229058501999e-5,"y":-0.00020478614425062115},"angle":{"x":-1.9170133990234863e-5,"z":9.410910051156162e-6,"y":-1.4324638958052132e-5}},{"degrees_of_freedom":[282,283,284,285,286,287],"id":"n47","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.7788168746499293e-5,"z":-7.745920364337898e-5,"y":-0.00027047524690588723},"angle":{"x":-4.0766521465736154e-5,"z":2.5295683333854193e-5,"y":3.781367501001636e-5}},{"degrees_of_freedom":[288,289,290,291,292,293],"id":"n48","parent":"11","position":{"x":0,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.899396288077852e-5,"z":-3.517901595570018e-5,"y":-0.00034821869791233135},"angle":{"x":0.00015300770457871444,"z":3.645777222423208e-5,"y":-4.245024748198064e-5}},{"degrees_of_freedom":[294,295,296,297,298,299],"id":"n49","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.071184316026628e-5,"z":-0.0002489841133426273,"y":-0.0003828915942506569},"angle":{"x":-2.7906589226466762e-5,"z":-1.8412155501118095e-5,"y":-0.00011738742567320043}},{"degrees_of_freedom":[300,301,302,303,304,305],"id":"n50","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7715899463409387e-5,"z":-0.0002908384365532881,"y":-0.0003380461112651836},"angle":{"x":-7.080837703914142e-5,"z":9.938814166567424e-6,"y":-0.00022096133612644958}},{"degrees_of_freedom":[306,307,308,309,310,311],"id":"n51","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.5253285450557983e-5,"z":3.7124868256823656e-5,"y":-0.00028216034957205045},"angle":{"x":-0.0002231834573653105,"z":2.9395423891970626e-5,"y":0.0001469047173679137}},{"degrees_of_freedom":[312,313,314,315,316,317],"id":"n52","parent":"11","position":{"x":0,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9574431666831168e-5,"z":-8.786646618865047e-5,"y":-0.00042032290756475793},"angle":{"x":-2.7687977295013475e-5,"z":4.203599150095933e-7,"y":-1.7333375066859433e-6}},{"degrees_of_freedom":[318,319,320,321,322,323],"id":"n53","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.660821800867769e-5,"z":-6.745820875123528e-5,"y":-0.00038220870955382453},"angle":{"x":-1.1258780779464041e-5,"z":-4.151389872375259e-5,"y":6.170378919215707e-6}},{"degrees_of_freedom":[324,325,326,327,328,329],"id":"n54","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.107032635366636e-5,"z":-3.6183792745588686e-5,"y":-0.00029457852302228454},"angle":{"x":-1.5511282837152307e-5,"z":9.133283830295874e-7,"y":1.9349172209397637e-6}},{"degrees_of_freedom":[330,331,332,333,334,335],"id":"n55","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.310446982060523e-5,"z":-8.147798272227073e-6,"y":-0.0002056418691047366},"angle":{"x":-2.03259786414844e-5,"z":4.2987348676557205e-5,"y":1.958960259133735e-5}},{"degrees_of_freedom":[336,337,338,339,340,341],"id":"n56","parent":"11","position":{"x":0,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3173729648814407e-5,"z":-2.9456103248292095e-5,"y":-0.00016682268040934178},"angle":{"x":1.5605735906091592e-5,"z":1.8477027666488484e-7,"y":3.7713477074028473e-6}},{"degrees_of_freedom":[342,343,344,345,346,347],"id":"n57","parent":"11","position":{"x":2.020305089104421,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.629097382174144e-7,"z":-2.4645463037177792e-5,"y":-0.00019995064265451677},"angle":{"x":-1.9638557591937182e-5,"z":-3.32611129278282e-5,"y":-9.892471967282382e-6}},{"degrees_of_freedom":[348,349,350,351,352,353],"id":"n58","parent":"11","position":{"x":2.857142857142857,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5452361877287627e-5,"z":-5.6098563944373835e-5,"y":-0.0002900756820173306},"angle":{"x":-9.242214418875747e-6,"z":1.169940861151312e-6,"y":1.5306210942161137e-5}},{"degrees_of_freedom":[354,355,356,357,358,359],"id":"n59","parent":"11","position":{"x":2.020305089104421,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.041200142381331e-6,"z":-6.193402893487025e-5,"y":-0.00038320238607210904},"angle":{"x":2.5983955991099552e-6,"z":3.726022043786261e-5,"y":-1.3179847908636804e-5}},{"degrees_of_freedom":[360,361,362,363,364,365],"id":"n60","parent":"11","position":{"x":5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[366,367,368,369,370,371],"id":"n61","parent":"11","position":{"x":-5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[372,373,374,375,376,377],"id":"n62","parent":"11","position":{"x":0,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[378,379,380,381,382,383],"id":"n63","parent":"11","position":{"x":2.857142857142857,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[384,385,386,387,388,389],"id":"n64","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[390,391,392,393,394,395],"id":"n65","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[396,397,398,399,400,401],"id":"n66","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[402,403,404,405,406,407],"id":"n67","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[408,409,410,411,412,413],"id":"n68","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[414,415,416,417,418,419],"id":"n69","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[420,421,422,423,424,425],"id":"n70","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[426,427,428,429,430,431],"id":"n71","parent":"11","position":{"x":5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-7.375546984188693e-6,"z":-4.2966337805451534e-5,"y":-0.0005731431472973172},"angle":{"x":-7.057154635306393e-6,"z":2.4310093284786303e-7,"y":-9.165454516044269e-6}},{"degrees_of_freedom":[432,433,434,435,436,437],"id":"n72","parent":"11","position":{"x":5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4899090293552434e-5,"z":-1.6255225575498763e-6,"y":-0.00028172266689251244},"angle":{"x":-3.0021028309578116e-6,"z":2.3599324421549115e-6,"y":-4.608274706601677e-6}},{"degrees_of_freedom":[438,439,440,441,442,443],"id":"n73","parent":"11","position":{"x":5,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6667882385559583e-5,"z":1.7054539531019968e-5,"y":-0.0002789675436823021},"angle":{"x":-4.500300629949377e-6,"z":2.7316191826537372e-6,"y":-5.4434962908077395e-6}},{"degrees_of_freedom":[444,445,446,447,448,449],"id":"n74","parent":"11","position":{"x":5,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.779630073668402e-5,"z":-1.3621164022712313e-5,"y":-0.00036806186641499876},"angle":{"x":-4.656757334077175e-5,"z":4.579820613057775e-6,"y":-1.3473772562768073e-5}},{"degrees_of_freedom":[450,451,452,453,454,455],"id":"n75","parent":"11","position":{"x":5,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2970616216853399e-5,"z":-2.8032853638429236e-5,"y":-0.0003900837210447762},"angle":{"x":-2.746756271300743e-6,"z":5.40567251156098e-7,"y":-4.851800896401344e-6}},{"degrees_of_freedom":[456,457,458,459,460,461],"id":"n76","parent":"11","position":{"x":5,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.9670219661849037e-6,"z":-3.8744389552348685e-5,"y":-0.00037343565534192545},"angle":{"x":3.7478753819772136e-5,"z":6.18911813247409e-6,"y":1.3927477424469723e-5}},{"degrees_of_freedom":[462,463,464,465,466,467],"id":"n77","parent":"11","position":{"x":5,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.364500164131547e-7,"z":-5.264455912352274e-5,"y":-0.0002897126868089771},"angle":{"x":-4.989092572594315e-6,"z":2.0249878506996424e-7,"y":-2.0249676812070976e-7}},{"degrees_of_freedom":[468,469,470,471,472,473],"id":"n78","parent":"11","position":{"x":5,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.55207297329209e-7,"z":-2.191384952830695e-5,"y":-0.0001995681924697591},"angle":{"x":-4.588576143994834e-5,"z":3.759832655942148e-6,"y":-7.461415823076647e-6}},{"degrees_of_freedom":[474,475,476,477,478,479],"id":"n79","parent":"11","position":{"x":5,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.074056932486635e-5,"z":-7.870944731969622e-6,"y":-0.0001792059774826932},"angle":{"x":-1.6682475705451563e-6,"z":2.3935405310356705e-6,"y":-7.942076392810559e-7}},{"degrees_of_freedom":[480,481,482,483,484,485],"id":"n80","parent":"11","position":{"x":5,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.428816245749727e-6,"z":2.670411551935194e-6,"y":-0.0001969356094982908},"angle":{"x":3.666926638590998e-5,"z":8.517079677258574e-6,"y":1.3723027414139911e-5}},{"degrees_of_freedom":[486,487,488,489,490,491],"id":"n81","parent":"11","position":{"x":-5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-3.081755313386476e-5,"z":-0.0001160637068582573,"y":-0.0006379527553389912},"angle":{"x":-7.249599924920911e-5,"z":1.0455492587008547e-5,"y":-9.02372951068732e-6}},{"degrees_of_freedom":[492,493,494,495,496,497],"id":"n82","parent":"11","position":{"x":0,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.509882066421819e-5,"z":-7.289846932066963e-5,"y":-0.0005918461937405923},"angle":{"x":1.19433199024327e-6,"z":7.0820280268926244e-6,"y":-1.1605729326953358e-5}},{"degrees_of_freedom":[498,499,500,501,502,503],"id":"n83","parent":"11","position":{"x":2.857142857142857,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1395003492676893e-5,"z":-6.032069609573146e-5,"y":-0.0005822562900248065},"angle":{"x":-2.3603172567042867e-5,"z":-4.7554310516818254e-7,"y":-1.1099335032080742e-5}},{"degrees_of_freedom":[504,505,506,507,508,509],"id":"n84","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0151023782779924e-5,"z":-6.440148492655034e-5,"y":-0.0005505066768030125},"angle":{"x":-2.3967224317702484e-5,"z":4.843422351260474e-6,"y":-9.248914868267103e-6}},{"degrees_of_freedom":[510,511,512,513,514,515],"id":"n85","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.9882231492576805e-5,"z":-7.74337950867571e-5,"y":-0.0005428411029438878},"angle":{"x":-1.3465722337834828e-5,"z":1.7180762817292926e-6,"y":-7.526576647002632e-6}},{"degrees_of_freedom":[516,517,518,519,520,521],"id":"n86","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.5545979654931e-5,"z":-9.362012971127892e-5,"y":-0.0005577127981839471},"angle":{"x":0.0001544697013096489,"z":6.0504739296687205e-5,"y":-1.1417668721294328e-5}},{"degrees_of_freedom":[522,523,524,525,526,527],"id":"n87","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6391159106649532e-5,"z":-0.00010033123776168111,"y":-0.0006036367101040046},"angle":{"x":-2.7699750210931836e-5,"z":3.121237399333749e-6,"y":-1.1053718506054577e-5}},{"degrees_of_freedom":[528,529,530,531,532,533],"id":"n88","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.624335113800126e-5,"z":-9.660543387551259e-5,"y":-0.0006721041146202593},"angle":{"x":0.00011840718401071173,"z":-5.516758502827143e-5,"y":-7.801951203196823e-6}},{"degrees_of_freedom":[534,535,536,537,538,539],"id":"n89","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.804264018034289e-6,"z":-8.376847916934925e-5,"y":-0.0006993899909338511},"angle":{"x":-4.240225109442537e-5,"z":4.3517202572349495e-6,"y":-7.630493033809122e-6}},{"degrees_of_freedom":[540,541,542,543,544,545],"id":"n90","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.630584795096061e-5,"z":-6.813792825908914e-5,"y":-0.0006557082066389276},"angle":{"x":0.0002557131829954481,"z":0.00010708690068688864,"y":-1.07420181205058e-5}},{"degrees_of_freedom":[546,547,548,549,550,551],"id":"n91","parent":"11","position":{"x":-5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011840243562172379,"z":-6.278491826950135e-6,"y":-0.00031217981320067997},"angle":{"x":-2.604311499641208e-5,"z":6.444260308201439e-6,"y":8.032123115617463e-6}},{"degrees_of_freedom":[552,553,554,555,556,557],"id":"n92","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.237317863971396e-5,"z":-2.25807252539034e-5,"y":-0.0001807036479808214},"angle":{"x":2.2372966630255677e-6,"z":-5.752895960245591e-6,"y":1.1529794919047351e-5}},{"degrees_of_freedom":[558,559,560,561,562,563],"id":"n93","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2001972459924817e-5,"z":-1.0750025077213987e-5,"y":-0.00022712211847532418},"angle":{"x":1.8912373311524317e-5,"z":1.654286329515693e-5,"y":7.857049492101058e-5}},{"degrees_of_freedom":[564,565,566,567,568,569],"id":"n94","parent":"11","position":{"x":-5,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.15664800607697e-5,"z":1.6969797749443173e-6,"y":-0.00035032684946890535},"angle":{"x":8.478655351472598e-5,"z":-1.5063564983060903e-5,"y":-6.8472822288306e-6}},{"degrees_of_freedom":[570,571,572,573,574,575],"id":"n95","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1024033399204237e-5,"z":3.084327197169093e-7,"y":-0.000443515617959848},"angle":{"x":-3.418861829303743e-5,"z":-7.987876508177228e-5,"y":0.00017249907268854006}},{"degrees_of_freedom":[576,577,578,579,580,581],"id":"n96","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.795789424123624e-5,"z":1.8309437262411735e-5,"y":-0.0003970274130055849},"angle":{"x":2.7723774751453865e-6,"z":-9.343263607105862e-6,"y":-3.0984333676089445e-5}},{"degrees_of_freedom":[582,583,584,585,586,587],"id":"n97","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.303401670679104e-5,"z":-2.513839414274611e-6,"y":-0.0003544426300377178},"angle":{"x":2.5240672154657425e-5,"z":-2.4300125654768418e-5,"y":-7.72676611321479e-5}},{"degrees_of_freedom":[588,589,590,591,592,593],"id":"n98","parent":"11","position":{"x":-5,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.042860601871177e-5,"z":-2.0045634252267174e-5,"y":-0.00023424799768910658},"angle":{"x":8.754846706056553e-5,"z":-3.254865432923789e-8,"y":-1.2607457238838576e-5}},{"degrees_of_freedom":[594,595,596,597,598,599],"id":"n99","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.745121357638521e-5,"z":-1.608090427909643e-5,"y":-0.00013462867835606088},"angle":{"x":-1.976527025700636e-5,"z":-3.208960296778201e-5,"y":8.204246069446501e-5}},{"degrees_of_freedom":[600,601,602,603,604,605],"id":"n100","parent":"11","position":{"x":0,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.53524014413303e-5,"z":-8.196775400145377e-5,"y":-0.0004214771102285761},"angle":{"x":-3.5246899379939895e-5,"z":4.078047961376561e-6,"y":-5.026063451526073e-6}},{"degrees_of_freedom":[606,607,608,609,610,611],"id":"n101","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.967856473935977e-5,"z":-6.211084149471714e-5,"y":-0.00039161617971119407},"angle":{"x":-9.669904949639367e-6,"z":-3.718898278120354e-5,"y":6.333242821501554e-6}},{"degrees_of_freedom":[612,613,614,615,616,617],"id":"n102","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010204205017865687,"z":-3.370448868668798e-5,"y":-0.0003064401391973849},"angle":{"x":-1.4606770805166668e-5,"z":7.196453871787466e-6,"y":8.14218670253212e-7}},{"degrees_of_freedom":[618,619,620,621,622,623],"id":"n103","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.303513114712104e-5,"z":-6.660871520252148e-6,"y":-0.00021211714118845804},"angle":{"x":-1.9359235769444833e-5,"z":4.6974862810447655e-5,"y":1.8687303070103026e-5}},{"degrees_of_freedom":[624,625,626,627,628,629],"id":"n104","parent":"11","position":{"x":0,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.199308384068288e-5,"z":-2.745315457316752e-5,"y":-0.00016859184472250839},"angle":{"x":2.2599540236266866e-5,"z":1.5928895455465183e-6,"y":7.422230276021792e-7}},{"degrees_of_freedom":[630,631,632,633,634,635],"id":"n105","parent":"11","position":{"x":2.020305089104421,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2443486268112198e-5,"z":-1.0421132382487185e-5,"y":-0.00019826461629628348},"angle":{"x":-1.5488575138698292e-5,"z":-2.9755334311750777e-5,"y":-1.44692125124675e-5}},{"degrees_of_freedom":[636,637,638,639,640,641],"id":"n106","parent":"11","position":{"x":2.857142857142857,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.269507511046356e-6,"z":-2.9751402797440022e-5,"y":-0.0002834913222381275},"angle":{"x":-8.057858144583087e-6,"z":6.582647219490554e-6,"y":3.7336280459039808e-6}},{"degrees_of_freedom":[642,643,644,645,646,647],"id":"n107","parent":"11","position":{"x":2.020305089104421,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.752750872154653e-5,"z":-4.28327873385252e-5,"y":-0.0003779334920205274},"angle":{"x":1.7022973476175444e-6,"z":4.0055912233194496e-5,"y":-1.9565959454630115e-5}},{"degrees_of_freedom":[648,649,650,651,652,653],"id":"n108","parent":"11","position":{"x":5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[654,655,656,657,658,659],"id":"n109","parent":"11","position":{"x":-5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[660,661,662,663,664,665],"id":"n110","parent":"11","position":{"x":0,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[666,667,668,669,670,671],"id":"n111","parent":"11","position":{"x":2.857142857142857,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[672,673,674,675,676,677],"id":"n112","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[678,679,680,681,682,683],"id":"n113","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[684,685,686,687,688,689],"id":"n114","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[690,691,692,693,694,695],"id":"n115","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[696,697,698,699,700,701],"id":"n116","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[702,703,704,705,706,707],"id":"n117","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[708,709,710,711,712,713],"id":"n118","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[714,715,716,717,718,719],"id":"n119","parent":"11","position":{"x":5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.702520740593556e-5,"z":-9.635782990947715e-6,"y":-0.0005706144980977943},"angle":{"x":-8.220138697948613e-6,"z":-1.0837960916978411e-5,"y":-9.734344417294766e-6}},{"degrees_of_freedom":[720,721,722,723,724,725],"id":"n120","parent":"11","position":{"x":5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.102053508916013e-5,"z":7.024799037891848e-5,"y":-0.00027266546521202944},"angle":{"x":-2.6855518632869914e-6,"z":1.048642897341503e-5,"y":1.3450065201242724e-5}},{"degrees_of_freedom":[726,727,728,729,730,731],"id":"n121","parent":"11","position":{"x":5,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.102021485978553e-5,"z":7.086961103965979e-5,"y":-0.0002792097729655338},"angle":{"x":-3.767331317391067e-7,"z":1.7418141555581345e-5,"y":2.367040815174433e-6}},{"degrees_of_freedom":[732,733,734,735,736,737],"id":"n122","parent":"11","position":{"x":5,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.281678589751833e-5,"z":3.6861994800495504e-5,"y":-0.00036562270673813087},"angle":{"x":-5.369380998400983e-5,"z":5.196254534096263e-5,"y":-0.00010040068188257661}},{"degrees_of_freedom":[738,739,740,741,742,743],"id":"n123","parent":"11","position":{"x":5,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017008871806336478,"z":1.650966886566303e-5,"y":-0.000385834371510838},"angle":{"x":-3.4925831691922156e-6,"z":1.648254610782275e-5,"y":-5.109365354206633e-6}},{"degrees_of_freedom":[744,745,746,747,748,749],"id":"n124","parent":"11","position":{"x":5,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.898870828431801e-5,"z":2.0081697113840706e-6,"y":-0.0003718789361237176},"angle":{"x":3.875983814645147e-5,"z":5.228744032318371e-5,"y":0.00010122344998897385}},{"degrees_of_freedom":[750,751,752,753,754,755],"id":"n125","parent":"11","position":{"x":5,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.275892483624357e-5,"z":-1.6529036133572226e-5,"y":-0.0002846857690526315},"angle":{"x":-7.088477095895315e-7,"z":1.285101560824639e-5,"y":-5.258468502501537e-6}},{"degrees_of_freedom":[756,757,758,759,760,761],"id":"n126","parent":"11","position":{"x":5,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.330116265854508e-6,"z":3.822302585782807e-6,"y":-0.00019724058886226041},"angle":{"x":-3.8750604076386196e-5,"z":4.346904105912609e-5,"y":-8.67981905156189e-5}},{"degrees_of_freedom":[762,763,764,765,766,767],"id":"n127","parent":"11","position":{"x":5,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.452240834052528e-5,"z":1.917314975745553e-5,"y":-0.00017947522430856967},"angle":{"x":-3.8895080292139307e-7,"z":1.3786521701406523e-5,"y":2.217896181161002e-6}},{"degrees_of_freedom":[768,769,770,771,772,773],"id":"n128","parent":"11","position":{"x":5,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.1852952789973223e-6,"z":3.8811564506000984e-5,"y":-0.0001940582613015351},"angle":{"x":5.164353258972301e-5,"z":6.06403933213484e-5,"y":0.00012967942911906431}},{"degrees_of_freedom":[774,775,776,777,778,779],"id":"n129","parent":"11","position":{"x":-5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-7.696258602155008e-5,"z":-0.00010776001588447604,"y":-0.0006466408255175184},"angle":{"x":-7.32005089882528e-5,"z":-1.9343147834396588e-5,"y":-9.048909949053778e-6}},{"degrees_of_freedom":[780,781,782,783,784,785],"id":"n130","parent":"11","position":{"x":0,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-9.942749369894232e-5,"z":-6.527498925049447e-5,"y":-0.0005875983018116585},"angle":{"x":1.4336849828151779e-5,"z":5.286958160985517e-5,"y":-1.316917534327453e-5}},{"degrees_of_freedom":[786,787,788,789,790,791],"id":"n131","parent":"11","position":{"x":2.857142857142857,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.443294766564685e-5,"z":-4.028277113657804e-5,"y":-0.0001535274797624168},"angle":{"x":-3.320305139880189e-5,"z":5.5456449376224294e-5,"y":-8.99743378795439e-6}},{"degrees_of_freedom":[792,793,794,795,796,797],"id":"n132","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.541787657430914e-5,"z":-4.332051755934196e-5,"y":-0.0004623987830049573},"angle":{"x":-0.000807923791707622,"z":0.0003452810282690495,"y":-1.2931203430173989e-5}},{"degrees_of_freedom":[798,799,800,801,802,803],"id":"n133","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.331185611646632e-5,"z":-6.42900015079032e-5,"y":-0.0006048711651641545},"angle":{"x":3.0153977461682945e-6,"z":5.9404650560441566e-5,"y":-1.1069435327629803e-5}},{"degrees_of_freedom":[804,805,806,807,808,809],"id":"n134","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.398754985800693e-5,"z":-8.325922660913564e-5,"y":-0.0007422967054415489},"angle":{"x":0.0004005598140076399,"z":0.0001991238679900461,"y":-1.1136612506615387e-5}},{"degrees_of_freedom":[810,811,812,813,814,815],"id":"n135","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.653877280961982e-5,"z":-8.901962933431874e-5,"y":-0.0010964529612164187},"angle":{"x":-2.978928626948297e-5,"z":6.122456827650416e-5,"y":-8.687124933904202e-6}},{"degrees_of_freedom":[816,817,818,819,820,821],"id":"n136","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.693817017117793e-5,"z":-8.570378154475807e-5,"y":-0.0008341964375065837},"angle":{"x":-0.000740505150096586,"z":0.00030594800149666245,"y":-8.672007135920513e-6}},{"degrees_of_freedom":[822,823,824,825,826,827],"id":"n137","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.207420832454443e-5,"z":-6.880253173203351e-5,"y":-0.0007276880370968836},"angle":{"x":-3.983165309907922e-5,"z":5.951035176388344e-5,"y":-1.0212203704245156e-5}},{"degrees_of_freedom":[828,829,830,831,832,833],"id":"n138","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.25564682696686e-5,"z":-4.93287587933547e-5,"y":-0.000554514378830259},"angle":{"x":0.0006024994757717295,"z":0.00028532085439959457,"y":-1.2550097519758257e-5}},{"degrees_of_freedom":[834,835,836,837,838,839],"id":"n139","parent":"11","position":{"x":-5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.7412771179243913e-5,"z":-1.851785462130575e-5,"y":-0.0002744420101777485},"angle":{"x":-5.349477605607318e-5,"z":1.4853293178416738e-5,"y":4.0755009825079754e-5}},{"degrees_of_freedom":[840,841,842,843,844,845],"id":"n140","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.805945307264385e-5,"z":-2.1733187978532612e-5,"y":-0.00019085927412253127},"angle":{"x":1.1613156283105792e-6,"z":2.8688392487159364e-5,"y":1.8485908693152337e-7}},{"degrees_of_freedom":[846,847,848,849,850,851],"id":"n141","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001358082387204182,"z":-1.184542066320469e-5,"y":-0.0002396019846073273},"angle":{"x":1.8507656588238085e-5,"z":0.00011119644701883568,"y":0.00023355310858547728}},{"degrees_of_freedom":[852,853,854,855,856,857],"id":"n142","parent":"11","position":{"x":-5,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002993679814851395,"z":1.6587721597196833e-6,"y":-0.0003568591519587512},"angle":{"x":8.170799403187616e-5,"z":2.481084502886061e-5,"y":-1.078228458339546e-5}},{"degrees_of_freedom":[858,859,860,861,862,863],"id":"n143","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017937524985489847,"z":1.88645580602864e-6,"y":-0.0004481668631028835},"angle":{"x":-3.339627003270414e-5,"z":0.0001629600489563346,"y":-0.0004015272655009866}},{"degrees_of_freedom":[864,865,866,867,868,869],"id":"n144","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012967242591756153,"z":1.8599360817564736e-5,"y":-0.0003985414955352509},"angle":{"x":2.258332768671354e-6,"z":2.8688445386414805e-5,"y":-2.1749424175957235e-5}},{"degrees_of_freedom":[870,871,872,873,874,875],"id":"n145","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.356812330832083e-5,"z":1.9067797249673633e-6,"y":-0.00035474948793694943},"angle":{"x":2.1270245494183458e-5,"z":0.00016530757165860932,"y":0.0003646682124233164}},{"degrees_of_freedom":[876,877,878,879,880,881],"id":"n146","parent":"11","position":{"x":-5,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001643054974651401,"z":-1.534343808460632e-5,"y":-0.00023975650858982232},"angle":{"x":8.47485376934861e-5,"z":3.2565786559516694e-5,"y":-1.0782232411192323e-5}},{"degrees_of_freedom":[882,883,884,885,886,887],"id":"n147","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2684019863479737e-9,"z":-1.3548753799321883e-5,"y":-0.00014107771904232596},"angle":{"x":-2.116899185058951e-5,"z":0.0001203894047351326,"y":-0.00025918499352502227}},{"degrees_of_freedom":[888,889,890,891,892,893],"id":"n148","parent":"11","position":{"x":0,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.769130400182266e-6,"z":-0.00033081474267447744,"y":-0.00034199062175780136},"angle":{"x":-0.00019849179519789982,"z":-3.828943667955017e-5,"y":-4.124185774349923e-5}},{"degrees_of_freedom":[894,895,896,897,898,899],"id":"n149","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.331496407103486e-6,"z":-0.00024803038714615416,"y":-0.00026120365327808386},"angle":{"x":-0.00013664767351875628,"z":-2.4822989566453283e-5,"y":-1.5625105185983838e-5}},{"degrees_of_freedom":[900,901,902,903,904,905],"id":"n150","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.7097751237033672e-5,"z":1.4963892144623224e-5,"y":-0.00020227050070104662},"angle":{"x":-6.138439890418953e-5,"z":-4.940496603819336e-6,"y":0.00016607644361758944}},{"degrees_of_freedom":[906,907,908,909,910,911],"id":"n151","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9418080978986133e-5,"z":5.483808413692563e-11,"y":-0.00015294381953089335},"angle":{"x":1.903610766729913e-5,"z":1.2815131302891494e-5,"y":-2.8075818009529397e-5}},{"degrees_of_freedom":[912,913,914,915,916,917],"id":"n152","parent":"11","position":{"x":0,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.5284310133656416e-5,"z":4.079165195898707e-5,"y":-0.00019445478840386692},"angle":{"x":2.0414549627403338e-5,"z":-3.885489088029257e-5,"y":-2.8646800028873644e-5}},{"degrees_of_freedom":[918,919,920,921,922,923],"id":"n153","parent":"11","position":{"x":2.020305089104421,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6927704873382765e-5,"z":0.00011575060235409001,"y":-0.00027565341062996785},"angle":{"x":-0.0001985276465202076,"z":-2.564231435850031e-5,"y":-0.00011933563515677454}},{"degrees_of_freedom":[924,925,926,927,928,929],"id":"n154","parent":"11","position":{"x":2.857142857142857,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.517183795222779e-6,"z":-0.00018547126607957055,"y":-0.0003311685870710055},"angle":{"x":-4.8789378475176035e-5,"z":-6.901870221399048e-6,"y":0.0002421645365335272}},{"degrees_of_freedom":[930,931,932,933,934,935],"id":"n155","parent":"11","position":{"x":2.020305089104421,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.683149523864789e-6,"z":-8.138819987256955e-5,"y":-0.00037903228306576154},"angle":{"x":0.00012391827881636338,"z":1.8039442314410363e-5,"y":-0.0001747884406683208}},{"degrees_of_freedom":[936,937,938,939,940,941],"id":"n156","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.112252222432892e-5,"z":-7.89000425704131e-5,"y":-0.000946029313928357},"angle":{"x":4.055853782749088e-5,"z":-5.195654055402972e-5,"y":-1.4339251738108221e-5}},{"degrees_of_freedom":[942,943,944,945,946,947],"id":"n157","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.487634472615713e-5,"z":-8.383731232190294e-5,"y":-0.0005624462655071188},"angle":{"x":-0.000559048067839849,"z":-0.00026644213073342954,"y":-3.7724917201373154e-6}},{"degrees_of_freedom":[948,949,950,951,952,953],"id":"n158","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.774186218676462e-5,"z":-9.27862314334502e-5,"y":-0.0003956940431089047},"angle":{"x":6.146733242149368e-5,"z":-4.9549669868855836e-5,"y":-6.151704841359222e-6}},{"degrees_of_freedom":[954,955,956,957,958,959],"id":"n159","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.178466187202289e-5,"z":-0.00010538065255602375,"y":-0.0003318182807064465},"angle":{"x":-0.00010917197921010306,"z":1.3273370655286011e-5,"y":-8.242843881293273e-6}},{"degrees_of_freedom":[960,961,962,963,964,965],"id":"n160","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.735885163520366e-5,"z":-0.00010920870831775428,"y":-0.00019660235869869554},"angle":{"x":5.076594512535631e-5,"z":-4.078027424268152e-5,"y":-1.1923791064306162e-5}},{"degrees_of_freedom":[966,967,968,969,970,971],"id":"n161","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.42739956175849e-5,"z":-0.00010528589388752607,"y":-0.0005274466998803133},"angle":{"x":-0.0008037967140195117,"z":-0.00034042083625033213,"y":-6.717001677748007e-6}},{"degrees_of_freedom":[972,973,974,975,976,977],"id":"n162","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.722908969114742e-5,"z":-9.434690613899982e-5,"y":-0.0006566197604585649},"angle":{"x":2.985607522453362e-5,"z":-4.318736810307285e-5,"y":-6.572608723954986e-6}},{"degrees_of_freedom":[978,979,980,981,982,983],"id":"n163","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.077127704999654e-5,"z":-8.125408864169524e-5,"y":-0.0007358233547591059},"angle":{"x":6.780429951745437e-5,"z":-5.909671112664995e-5,"y":-8.236197553518151e-6}},{"degrees_of_freedom":[984,985,986,987,988,989],"id":"n164","parent":"11","position":{"x":5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00015276933714067277,"z":-0.0001232037194604103,"y":-0.000983321717393707},"angle":{"x":-1.0662145743255514e-6,"z":7.881902873642579e-7,"y":-2.2023062115451348e-5}},{"degrees_of_freedom":[990,991,992,993,994,995],"id":"n165","parent":"11","position":{"x":5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018508580256931302,"z":-0.0001469078783439381,"y":-0.0008119719761146342},"angle":{"x":-1.2917559912232195e-5,"z":-3.5037117506837712e-6,"y":-1.6771514912856384e-5}},{"degrees_of_freedom":[996,997,998,999,1000,1001],"id":"n166","parent":"11","position":{"x":5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.218190100587636e-5,"z":-8.945061216386754e-5,"y":-0.0007793331867769827},"angle":{"x":-6.1830675556007415e-6,"z":1.2022301629120483e-6,"y":-1.068859707652979e-5}},{"degrees_of_freedom":[1002,1003,1004,1005,1006,1007],"id":"n167","parent":"11","position":{"x":5,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.538695326656422e-5,"z":-8.17550174381009e-5,"y":-0.0007751079343898347},"angle":{"x":-6.525794416109388e-6,"z":-1.1592531842355861e-5,"y":-1.3293725082329037e-5}},{"degrees_of_freedom":[1008,1009,1010,1011,1012,1013],"id":"n168","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010522580188848107,"z":-0.00010886903235081214,"y":-0.0008414118516957436},"angle":{"x":-3.559567806827268e-5,"z":-3.5887597121067067e-5,"y":5.085091686488974e-5}},{"degrees_of_freedom":[1014,1015,1016,1017,1018,1019],"id":"n169","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002137216865785941,"z":-0.0001241208360955079,"y":-0.0008568956725203685},"angle":{"x":-4.483474428383888e-6,"z":-1.3136295747255195e-5,"y":-1.8071763562769873e-5}},{"degrees_of_freedom":[1020,1021,1022,1023,1024,1025],"id":"n170","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017208849762876354,"z":-0.0001362974166632588,"y":-0.0008516752317590914},"angle":{"x":2.9496688213885976e-5,"z":-3.828374721133093e-5,"y":-8.462722737119232e-5}},{"degrees_of_freedom":[1026,1027,1028,1029,1030,1031],"id":"n171","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014974175076502396,"z":-0.00014695005501475403,"y":-0.0007951531352585427},"angle":{"x":-6.685842036584469e-6,"z":-1.5718406955653727e-5,"y":-1.623045189045511e-5}},{"degrees_of_freedom":[1032,1033,1034,1035,1036,1037],"id":"n172","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010023049584427828,"z":-0.00011210712647606098,"y":-0.0007281539301568929},"angle":{"x":-4.4174550366641246e-5,"z":-3.9805067799921286e-5,"y":5.646927446766235e-5}},{"degrees_of_freedom":[1038,1039,1040,1041,1042,1043],"id":"n173","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.983628926993042e-6,"z":-9.522089463083881e-5,"y":-0.0007103173427721595},"angle":{"x":-5.552992011939821e-6,"z":-1.4174585687504897e-5,"y":-1.1452418642799704e-5}},{"degrees_of_freedom":[1044,1045,1046,1047,1048,1049],"id":"n174","parent":"11","position":{"x":5,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.779748722501637e-5,"z":-8.648444734373472e-5,"y":-0.0007176268347694687},"angle":{"x":2.3827463557442304e-5,"z":-3.464611170956623e-5,"y":-7.392690258239837e-5}},{"degrees_of_freedom":[1050,1051,1052,1053,1054,1055],"id":"n175","parent":"11","position":{"x":-5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00014194116105443715,"z":-0.00034452724807620434,"y":-0.0011467205167408807},"angle":{"x":-6.810348621230892e-5,"z":-7.595146798308785e-7,"y":-3.292774929717192e-5}},{"degrees_of_freedom":[1056,1057,1058,1059,1060,1061],"id":"n176","parent":"11","position":{"x":0,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00024032160749114768,"z":-0.00022095299851048763,"y":-0.001075875396788877},"angle":{"x":1.4012395816436113e-5,"z":-4.557073960531732e-5,"y":-4.1293649377765915e-5}},{"degrees_of_freedom":[1062,1063,1064,1065,1066,1067],"id":"n177","parent":"11","position":{"x":0,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":4.591448039733618e-5,"z":-0.0002120174089623023,"y":-0.001004178177002563},"angle":{"x":-5.022416795607944e-6,"z":-6.121214766062134e-6,"y":-3.095140748332994e-5}},{"degrees_of_freedom":[1068,1069,1070,1071,1072,1073],"id":"n178","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014660230956160111,"z":-0.00016085924590811252,"y":-0.0012482186183900186},"angle":{"x":-9.346251539617885e-5,"z":-1.0625571187891836e-5,"y":-2.95759447432175e-5}},{"degrees_of_freedom":[1074,1075,1076,1077,1078,1079],"id":"n179","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011499723222744737,"z":-0.00017178724477203208,"y":-0.001001233167419031},"angle":{"x":0.0004359118431781485,"z":-0.00019644632754841216,"y":-2.2836970040969716e-5}},{"degrees_of_freedom":[1080,1081,1082,1083,1084,1085],"id":"n180","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.44702527762963e-5,"z":-0.00021180596596887568,"y":-0.0009031613064160648},"angle":{"x":-8.281012390959442e-5,"z":-1.1709261098256767e-5,"y":-2.466602064093499e-5}},{"degrees_of_freedom":[1086,1087,1088,1089,1090,1091],"id":"n181","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011355042475827854,"z":-0.0002618661007446876,"y":-0.0009436868095719965},"angle":{"x":0.00025670235228424776,"z":0.0001069854422989585,"y":-3.3052978687254524e-5}},{"degrees_of_freedom":[1092,1093,1094,1095,1096,1097],"id":"n182","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014715160628176184,"z":-0.00027928811045496656,"y":-0.001031306484949105},"angle":{"x":-8.797082507387752e-5,"z":-1.621594217217315e-5,"y":-3.2371743920293706e-5}},{"degrees_of_freedom":[1098,1099,1100,1101,1102,1103],"id":"n183","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000184716728636461,"z":-0.0002686687323864672,"y":-0.0013042512294978075},"angle":{"x":9.490709708136926e-5,"z":-8.221406731173967e-5,"y":-2.8186890820201683e-5}},{"degrees_of_freedom":[1104,1105,1106,1107,1108,1109],"id":"n184","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020321126939396584,"z":-0.00022170676404264917,"y":-0.0014215408234053096},"angle":{"x":-9.862208664372536e-5,"z":-1.5132212554095029e-5,"y":-2.5995975548731858e-5}},{"degrees_of_freedom":[1110,1111,1112,1113,1114,1115],"id":"n185","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018063607067041914,"z":-0.0001743211274492033,"y":-0.001373768963520825},"angle":{"x":0.000583151878105399,"z":0.00022725241685769994,"y":-2.9489865816114494e-5}},{"degrees_of_freedom":[1116,1117,1118,1119,1120,1121],"id":"n186","parent":"11","position":{"x":-5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015301199684378505,"z":-0.00026092832934897545,"y":-0.000901896490709667},"angle":{"x":-1.914188702243404e-5,"z":8.04755177395698e-6,"y":2.109774476314038e-5}},{"degrees_of_freedom":[1122,1123,1124,1125,1126,1127],"id":"n187","parent":"11","position":{"x":-5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.546087018772154e-5,"z":-0.00024452507831489254,"y":-0.0008355109946747623},"angle":{"x":-2.3797153191390548e-5,"z":8.402809762972457e-6,"y":-1.6916322025593734e-5}},{"degrees_of_freedom":[1128,1129,1130,1131,1132,1133],"id":"n188","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017928730546246978,"z":-0.00027281732121443213,"y":-0.0008518527017190977},"angle":{"x":-2.8111279042735396e-6,"z":-6.897614974036689e-7,"y":-1.9917165105643305e-5}},{"degrees_of_freedom":[1134,1135,1136,1137,1138,1139],"id":"n189","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016425252947384678,"z":-0.00026479774409375194,"y":-0.0008742848233057634},"angle":{"x":1.3493154868111224e-5,"z":3.2179992587577043e-5,"y":7.305265114867338e-5}},{"degrees_of_freedom":[1140,1141,1142,1143,1144,1145],"id":"n190","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012795556581826108,"z":-0.00025553014685708266,"y":-0.0009395377572665159},"angle":{"x":4.345741433648652e-5,"z":-1.7101920963731581e-6,"y":-2.2803217882147544e-5}},{"degrees_of_freedom":[1146,1147,1148,1149,1150,1151],"id":"n191","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.211356255958705e-5,"z":-0.0002505788278431151,"y":-0.0009865940610006229},"angle":{"x":-2.9501577252739496e-5,"z":1.0247462090372302e-5,"y":-5.6624628969886785e-5}},{"degrees_of_freedom":[1152,1153,1154,1155,1156,1157],"id":"n192","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.89830136602412e-5,"z":-0.00023188003105614117,"y":-0.0009429219445401058},"angle":{"x":-2.4907036630112884e-6,"z":-6.897940144925531e-7,"y":-2.5689393874651367e-5}},{"degrees_of_freedom":[1158,1159,1160,1161,1162,1163],"id":"n193","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.884816666964323e-5,"z":-0.00023375293353076107,"y":-0.0009120937464223441},"angle":{"x":7.736156442449945e-6,"z":-1.6680536079000174e-5,"y":-7.091803216452559e-5}},{"degrees_of_freedom":[1164,1165,1166,1167,1168,1169],"id":"n194","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001168068272421503,"z":-0.00024114532578041657,"y":-0.0008579119797939292},"angle":{"x":3.556073227284831e-5,"z":3.3059702936250573e-7,"y":-2.2803238094543476e-5}},{"degrees_of_freedom":[1170,1171,1172,1173,1174,1175],"id":"n195","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016098722079652174,"z":-0.00024876011317382664,"y":-0.0008183029457606448},"angle":{"x":-3.190006820927911e-5,"z":5.2337159556438724e-5,"y":-0.00016990005799589133}},{"degrees_of_freedom":[1176,1177,1178,1179,1180,1181],"id":"n196","parent":"11","position":{"x":0,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020496677950684652,"z":-0.00034107081842660834,"y":-0.0007999100339035508},"angle":{"x":0.0002724834304782922,"z":2.814472021488338e-5,"y":-8.517230436378938e-5}},{"degrees_of_freedom":[1182,1183,1184,1185,1186,1187],"id":"n197","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020422115270634698,"z":5.9027666800415836e-5,"y":-0.0007739506144154469},"angle":{"x":-0.00011484326986185568,"z":-1.3160814745602654e-5,"y":-0.00024560828710211923}},{"degrees_of_freedom":[1188,1189,1190,1191,1192,1193],"id":"n198","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002006505111786773,"z":3.254346877417718e-5,"y":-0.0007999343296708863},"angle":{"x":-6.979317355142242e-5,"z":9.492089714148418e-6,"y":-0.0001368476472627709}},{"degrees_of_freedom":[1194,1195,1196,1197,1198,1199],"id":"n199","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001697153903282804,"z":-0.00022297930240715687,"y":-0.000837224948341501},"angle":{"x":-0.00016116516456864168,"z":2.4863326926355432e-5,"y":8.374390709641598e-5}},{"degrees_of_freedom":[1200,1201,1202,1203,1204,1205],"id":"n200","parent":"11","position":{"x":0,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015169000156469586,"z":-0.00018866017777239395,"y":-0.000902909242950561},"angle":{"x":0.0001145920195209166,"z":2.9426113356781263e-5,"y":-3.0478477589751555e-5}},{"degrees_of_freedom":[1206,1207,1208,1209,1210,1211],"id":"n201","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015456397560586937,"z":-0.00034613095341072336,"y":-0.0009323034948182498},"angle":{"x":-1.5070165360312804e-5,"z":-1.1087158773664683e-5,"y":-8.418633303239623e-5}},{"degrees_of_freedom":[1212,1213,1214,1215,1216,1217],"id":"n202","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015817872236998452,"z":-0.0003861348692747118,"y":-0.0009045181112269041},"angle":{"x":-1.5099358415947965e-5,"z":8.118554366655397e-6,"y":-8.425670713113154e-5}},{"degrees_of_freedom":[1218,1219,1220,1221,1222,1223],"id":"n203","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018633341816071605,"z":-0.00028512038174876724,"y":-0.0008643760751676853},"angle":{"x":-7.420189479435397e-5,"z":2.536674887229738e-5,"y":5.842952408185726e-5}},{"degrees_of_freedom":[1224,1225,1226,1227,1228,1229],"id":"n204","parent":"11","position":{"x":0,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4806673298499896e-5,"z":-0.00018645343032989102,"y":-0.0008880589788723858},"angle":{"x":-1.7919274214876646e-6,"z":3.334730943361751e-6,"y":-2.0416110619267878e-5}},{"degrees_of_freedom":[1230,1231,1232,1233,1234,1235],"id":"n205","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.482660731339697e-6,"z":-0.00022519434777994318,"y":-0.0008674359706985952},"angle":{"x":-2.2913988627205443e-5,"z":-2.778993752627063e-5,"y":-2.767087167901397e-5}},{"degrees_of_freedom":[1236,1237,1238,1239,1240,1241],"id":"n206","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3876773884203065e-5,"z":-0.00020002878565745664,"y":-0.0008055193692377521},"angle":{"x":-1.8487007138088664e-5,"z":-9.18864827393536e-7,"y":-1.334746225888944e-5}},{"degrees_of_freedom":[1242,1243,1244,1245,1246,1247],"id":"n207","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.6743163714123085e-6,"z":-0.0001525239043575514,"y":-0.0007421401448268638},"angle":{"x":-1.4763627530326565e-5,"z":3.072289550042345e-5,"y":-1.8700760658299742e-5}},{"degrees_of_freedom":[1248,1249,1250,1251,1252,1253],"id":"n208","parent":"11","position":{"x":0,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4502410537290706e-5,"z":-0.0001027069378523804,"y":-0.0007109130017650241},"angle":{"x":-2.6384131726458338e-5,"z":2.1871512000251065e-6,"y":-1.365051733485282e-5}},{"degrees_of_freedom":[1254,1255,1256,1257,1258,1259],"id":"n209","parent":"11","position":{"x":2.020305089104421,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1175985086915176e-5,"z":-9.704844984848978e-5,"y":-0.0007325947646708459},"angle":{"x":-9.758653068828627e-6,"z":-2.5008937540883038e-5,"y":-7.000888814731749e-6}},{"degrees_of_freedom":[1260,1261,1262,1263,1264,1265],"id":"n210","parent":"11","position":{"x":2.857142857142857,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.725206144145731e-5,"z":-0.00011125763661421918,"y":-0.0007953117393795384},"angle":{"x":-1.188367523690926e-5,"z":-1.7463852215408208e-6,"y":-1.1499592807718556e-5}},{"degrees_of_freedom":[1266,1267,1268,1269,1270,1271],"id":"n211","parent":"11","position":{"x":2.020305089104421,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.563181206316596e-5,"z":-0.00014471341058038234,"y":-0.0008582009721928227},"angle":{"x":-9.946852075330418e-6,"z":2.6437322025186513e-5,"y":-1.554394431031583e-5}},{"degrees_of_freedom":[1272,1273,1274,1275,1276,1277],"id":"n212","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.530544710035419e-6,"z":-6.374392683907558e-5,"y":-0.0006025518611297352},"angle":{"x":-6.598782981684057e-5,"z":-2.2269180122861813e-5,"y":-8.275757022331722e-6}},{"degrees_of_freedom":[1278,1279,1280,1281,1282,1283],"id":"n213","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2588126982191632e-6,"z":-8.07904104878548e-5,"y":-0.000604016010107558},"angle":{"x":1.272868640401199e-6,"z":8.473845552321803e-7,"y":-9.817275792612497e-6}},{"degrees_of_freedom":[1284,1285,1286,1287,1288,1289],"id":"n214","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1010703486839865e-5,"z":-9.720101197232852e-5,"y":-0.0006076105309688069},"angle":{"x":6.792177885986033e-5,"z":-2.2052882252035556e-5,"y":-8.973778508005337e-6}},{"degrees_of_freedom":[1290,1291,1292,1293,1294,1295],"id":"n215","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.1134066261804227e-5,"z":-9.638724758483144e-5,"y":-0.0005057768113957197},"angle":{"x":-5.0314401271757914e-5,"z":1.4790687787949226e-7,"y":-8.798492134099617e-6}},{"degrees_of_freedom":[1296,1297,1298,1299,1300,1301],"id":"n216","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.753449899272887e-5,"z":-8.026154437435586e-5,"y":-0.00046740612978817366},"angle":{"x":-4.80101206902277e-5,"z":-1.6258190014373237e-6,"y":-9.456857580976754e-6}},{"degrees_of_freedom":[1302,1303,1304,1305,1306,1307],"id":"n217","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.0092736259516775e-5,"z":-6.302515633584474e-5,"y":-0.0005093888486768867},"angle":{"x":0.00028371030517928804,"z":-0.00011631831873928238,"y":-1.0181408169794204e-5}},{"degrees_of_freedom":[1308,1309,1310,1311,1312,1313],"id":"n218","parent":"11","position":{"x":5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.991945838148253e-6,"z":-0.00010144656314157714,"y":-0.0009670986579230158},"angle":{"x":-7.138782128984478e-6,"z":6.836028733056288e-7,"y":-2.2522302470793694e-5}},{"degrees_of_freedom":[1314,1315,1316,1317,1318,1319],"id":"n219","parent":"11","position":{"x":5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.527446541184804e-5,"z":-5.327607498047675e-5,"y":-0.0007743087104806785},"angle":{"x":-6.1976432069711e-6,"z":3.967866183981887e-6,"y":-1.0142984112858282e-5}},{"degrees_of_freedom":[1320,1321,1322,1323,1324,1325],"id":"n220","parent":"11","position":{"x":5,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.5377553206726735e-5,"z":-4.4474380875990626e-5,"y":-0.0007646717826549896},"angle":{"x":-5.993943202880596e-6,"z":2.4071015166891534e-6,"y":-1.4450160071060316e-5}},{"degrees_of_freedom":[1326,1327,1328,1329,1330,1331],"id":"n221","parent":"11","position":{"x":5,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.791531319573797e-5,"z":-7.166728057966419e-5,"y":-0.0008282326228403464},"angle":{"x":-3.565068875673686e-5,"z":2.9279562723049517e-6,"y":-1.9749376555088543e-5}},{"degrees_of_freedom":[1332,1333,1334,1335,1336,1337],"id":"n222","parent":"11","position":{"x":5,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.593587887569224e-6,"z":-8.447194791673156e-5,"y":-0.000844119449665272},"angle":{"x":-3.928837428747248e-6,"z":-1.4508092574981161e-8,"y":-1.5252839885788957e-5}},{"degrees_of_freedom":[1338,1339,1340,1341,1342,1343],"id":"n223","parent":"11","position":{"x":5,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8562328572549993e-5,"z":-9.234076517385445e-5,"y":-0.0008360985503688571},"angle":{"x":2.370162468971093e-5,"z":8.903093088064164e-6,"y":1.3795956631675267e-5}},{"degrees_of_freedom":[1344,1345,1346,1347,1348,1349],"id":"n224","parent":"11","position":{"x":5,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5955908482187466e-5,"z":-9.858982439469486e-5,"y":-0.0007810328916194643},"angle":{"x":-5.746741048698937e-6,"z":-1.0453577600900835e-6,"y":-1.0516533000679305e-5}},{"degrees_of_freedom":[1350,1351,1352,1353,1354,1355],"id":"n225","parent":"11","position":{"x":5,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5748222292056018e-5,"z":-7.16218545764127e-5,"y":-0.0007170459440875385},"angle":{"x":-3.61643496884707e-5,"z":2.079605302742922e-6,"y":-1.552928971265939e-5}},{"degrees_of_freedom":[1356,1357,1358,1359,1360,1361],"id":"n226","parent":"11","position":{"x":5,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.410878618786075e-6,"z":-5.901315219128639e-5,"y":-0.0007004074569420229},"angle":{"x":-3.874221832202925e-6,"z":1.3762392068148196e-6,"y":-9.713887652630923e-6}},{"degrees_of_freedom":[1362,1363,1364,1365,1366,1367],"id":"n227","parent":"11","position":{"x":5,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8654911335490803e-5,"z":-5.111201245393576e-5,"y":-0.0007092090076190601},"angle":{"x":2.4851961455102402e-5,"z":1.096795015655709e-5,"y":1.3589587268073203e-5}},{"degrees_of_freedom":[1368,1369,1370,1371,1372,1373],"id":"n228","parent":"11","position":{"x":-5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.3717769271968124e-5,"z":-0.0003241917917796429,"y":-0.0011005269593739584},"angle":{"x":-5.228713023234536e-5,"z":1.903386972445698e-5,"y":-3.182730018588057e-5}},{"degrees_of_freedom":[1374,1375,1376,1377,1378,1379],"id":"n229","parent":"11","position":{"x":0,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00010148091786179426,"z":-0.00019495610616562255,"y":-0.0010021447469722323},"angle":{"x":-1.3919930931378277e-6,"z":4.9396038835486325e-6,"y":-2.949866996798636e-5}},{"degrees_of_freedom":[1380,1381,1382,1383,1384,1385],"id":"n230","parent":"11","position":{"x":2.857142857142857,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.751644083999643e-5,"z":-0.0001479807274365582,"y":-0.0009692857662660855},"angle":{"x":-1.7203535196803573e-5,"z":2.2357486304136117e-6,"y":-2.8080050284496092e-5}},{"degrees_of_freedom":[1386,1387,1388,1389,1390,1391],"id":"n231","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.580927216535214e-5,"z":-0.00015794125287374667,"y":-0.000956331625558979},"angle":{"x":-1.1236569776883703e-5,"z":2.8222338672555185e-6,"y":-2.4113588029766082e-5}},{"degrees_of_freedom":[1392,1393,1394,1395,1396,1397],"id":"n232","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.539266460184678e-5,"z":-0.00019825885418804735,"y":-0.0009546393895429103},"angle":{"x":-1.8568464279821984e-5,"z":6.067770726356623e-6,"y":-2.365374859963727e-5}},{"degrees_of_freedom":[1398,1399,1400,1401,1402,1403],"id":"n233","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.641644930067487e-5,"z":-0.0002448284281660097,"y":-0.0009840247610948842},"angle":{"x":0.00017135342493162289,"z":7.256199710017602e-5,"y":-3.05360844132991e-5}},{"degrees_of_freedom":[1404,1405,1406,1407,1408,1409],"id":"n234","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1445433249916346e-5,"z":-0.0002624428022871091,"y":-0.001058744275361857},"angle":{"x":-2.004784999398549e-5,"z":8.834178226057685e-6,"y":-2.905999456718444e-5}},{"degrees_of_freedom":[1410,1411,1412,1413,1414,1415],"id":"n235","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3362656871432217e-5,"z":-0.0002531407979152501,"y":-0.0010731264798861217},"angle":{"x":0.00014219511706832928,"z":-5.397229070076849e-5,"y":-2.5461348544811515e-5}},{"degrees_of_freedom":[1416,1417,1418,1419,1420,1421],"id":"n236","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.9113339464647036e-5,"z":-0.00020971702975131485,"y":-0.001078884039136763},"angle":{"x":-2.6839580997124527e-5,"z":7.68984735515725e-6,"y":-2.4382027039677526e-5}},{"degrees_of_freedom":[1422,1423,1424,1425,1426,1427],"id":"n237","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.307758759905145e-6,"z":-0.00016461897837069344,"y":-0.0010397208055947912},"angle":{"x":0.0001955742165205993,"z":8.442569006653548e-5,"y":-2.8700777182068545e-5}},{"degrees_of_freedom":[1428,1429,1430,1431,1432,1433],"id":"n238","parent":"11","position":{"x":-5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001447568454306696,"z":-0.00022505088543162645,"y":-0.000848661188788395},"angle":{"x":-2.085101203859593e-5,"z":1.2877664738298513e-5,"y":-2.1894141838154917e-5}},{"degrees_of_freedom":[1434,1435,1436,1437,1438,1439],"id":"n239","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012568299397796093,"z":-0.00025471078532880183,"y":-0.0008062070691703497},"angle":{"x":-6.187616948253693e-6,"z":1.0576516322807763e-5,"y":3.927424990528015e-5}},{"degrees_of_freedom":[1440,1441,1442,1443,1444,1445],"id":"n240","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011719059578555348,"z":-0.0002509922575803893,"y":-0.0008240142276198817},"angle":{"x":1.2828379607086553e-5,"z":-5.235271240882401e-5,"y":-0.0001363499236814304}},{"degrees_of_freedom":[1446,1447,1448,1449,1450,1451],"id":"n241","parent":"11","position":{"x":-5,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.03130798567088e-5,"z":-0.00024214196245286428,"y":-0.00090175507428994},"angle":{"x":5.246931984907852e-5,"z":4.184699667085215e-6,"y":2.5928696902515086e-5}},{"degrees_of_freedom":[1452,1453,1454,1455,1456,1457],"id":"n242","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.561044702112509e-5,"z":-0.00023962201724627281,"y":-0.0009590502699654958},"angle":{"x":-2.8858765580181173e-5,"z":5.0262839892839557e-5,"y":-0.00010676665487092}},{"degrees_of_freedom":[1458,1459,1460,1461,1462,1463],"id":"n243","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2691746307763843e-5,"z":-0.00021617324572389537,"y":-0.0009206889738274716},"angle":{"x":-5.568356403281102e-6,"z":8.441036940504815e-6,"y":9.156669434514302e-6}},{"degrees_of_freedom":[1464,1465,1466,1467,1468,1469],"id":"n244","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.566860108868154e-5,"z":-0.00021552170862749228,"y":-0.000895576832489326},"angle":{"x":8.38925245198165e-6,"z":-6.498515828882808e-5,"y":-0.00020089046138121794}},{"degrees_of_freedom":[1470,1471,1472,1473,1474,1475],"id":"n245","parent":"11","position":{"x":-5,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.337206355096147e-5,"z":-0.00022247868891695427,"y":-0.0008268209630555046},"angle":{"x":4.573738675924851e-5,"z":1.4832871183905771e-5,"y":2.250265181283172e-5}},{"degrees_of_freedom":[1476,1477,1478,1479,1480,1481],"id":"n246","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.844300747873177e-5,"z":-0.00022666456278100242,"y":-0.0007764837822811357},"angle":{"x":-3.0458662967849034e-5,"z":6.75471316597285e-5,"y":-0.00012422944127348073}},{"degrees_of_freedom":[1482,1483,1484,1485,1486,1487],"id":"n247","parent":"11","position":{"x":0,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010768241750065687,"z":-0.0001604418807832743,"y":-0.0008880391799495858},"angle":{"x":-1.8692301366517062e-6,"z":6.906518135755457e-6,"y":-2.1107388031139555e-5}},{"degrees_of_freedom":[1488,1489,1490,1491,1492,1493],"id":"n248","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012518858769036513,"z":-0.0002007067781670141,"y":-0.0008753560241765811},"angle":{"x":-3.113368717968871e-5,"z":-2.3429694509782812e-5,"y":-3.20200614285693e-5}},{"degrees_of_freedom":[1494,1495,1496,1497,1498,1499],"id":"n249","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013334610697607707,"z":-0.00016222667525804624,"y":-0.0008179432589605704},"angle":{"x":-1.9606465554490275e-5,"z":4.477749500630595e-6,"y":6.827592799172547e-8}},{"degrees_of_freedom":[1500,1501,1502,1503,1504,1505],"id":"n250","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010574479985961887,"z":-0.00012386084973136513,"y":-0.000751428366403649},"angle":{"x":-6.6388662910028866e-6,"z":3.494157791078376e-5,"y":-2.6979102052571973e-5}},{"degrees_of_freedom":[1506,1507,1508,1509,1510,1511],"id":"n251","parent":"11","position":{"x":0,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.125894495085004e-5,"z":-6.435177812862385e-5,"y":-0.0007113332161776433},"angle":{"x":-3.405767499796434e-5,"z":6.492194282103333e-6,"y":-1.5211574614184758e-5}},{"degrees_of_freedom":[1512,1513,1514,1515,1516,1517],"id":"n252","parent":"11","position":{"x":2.020305089104421,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.790654470751348e-5,"z":-6.184420972230736e-5,"y":-0.0007249710706542861},"angle":{"x":-1.2401322727470915e-6,"z":-2.1531671173364e-5,"y":-2.028382662532999e-6}},{"degrees_of_freedom":[1518,1519,1520,1521,1522,1523],"id":"n253","parent":"11","position":{"x":2.857142857142857,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.16005054774169e-5,"z":-6.374091194093171e-5,"y":-0.0007846421632078912},"angle":{"x":-1.3931800543470136e-5,"z":3.56436231545523e-6,"y":-3.071735438861017e-5}},{"degrees_of_freedom":[1524,1525,1526,1527,1528,1529],"id":"n254","parent":"11","position":{"x":2.020305089104421,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.308771269666133e-5,"z":-0.00011704850324454807,"y":-0.0008512059305324371},"angle":{"x":-2.0863849350089524e-5,"z":3.0134431533605887e-5,"y":-1.203049298555776e-5}},{"degrees_of_freedom":[1530,1531,1532,1533,1534,1535],"id":"n255","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.946472339895411e-5,"z":-4.293923880952299e-5,"y":-0.0005173129525155278},"angle":{"x":0.000678676347122847,"z":0.0003003667020621723,"y":-1.2259408489829057e-5}},{"degrees_of_freedom":[1536,1537,1538,1539,1540,1541],"id":"n256","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.528329934852938e-5,"z":-6.579849064038406e-5,"y":-0.0006556566510079514},"angle":{"x":-6.845650702458222e-6,"z":5.504320203301835e-5,"y":-1.2130536499726027e-5}},{"degrees_of_freedom":[1542,1543,1544,1545,1546,1547],"id":"n257","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.754633284993169e-5,"z":-8.45875653964246e-5,"y":-0.0007825428908019106},"angle":{"x":-0.00013346244212478195,"z":0.00010276381889450146,"y":-9.696395450794056e-6}},{"degrees_of_freedom":[1548,1549,1550,1551,1552,1553],"id":"n258","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.763594802733324e-5,"z":-8.537807876964171e-5,"y":-0.000627357235188324},"angle":{"x":0.0007964388957218858,"z":0.0003692596973413045,"y":-9.55122143170541e-6}},{"degrees_of_freedom":[1554,1555,1556,1557,1558,1559],"id":"n259","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.353712823311248e-5,"z":-6.688819276196104e-5,"y":-0.00041851814848619436},"angle":{"x":-8.232210782547549e-5,"z":5.9404533605464755e-5,"y":-1.1031949116037569e-5}},{"degrees_of_freedom":[1560,1561,1562,1563,1564,1565],"id":"n260","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.342321937399871e-5,"z":-4.6575238977643034e-5,"y":-0.00034745966073319244},"angle":{"x":-2.77527861265435e-5,"z":3.927751000605505e-5,"y":-1.2348181270276839e-5}},{"degrees_of_freedom":[1566,1567,1568,1569,1570,1571],"id":"n261","parent":"11","position":{"x":5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00015160717814133496,"z":-7.851320145895397e-5,"y":-0.0009602656275475087},"angle":{"x":-1.0943204039803035e-5,"z":-4.76046836300241e-6,"y":-2.2521133692893002e-5}},{"degrees_of_freedom":[1572,1573,1574,1575,1576,1577],"id":"n262","parent":"11","position":{"x":5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001805832594812788,"z":2.0213648868335877e-6,"y":-0.0007705072401202711},"angle":{"x":-1.638721754414191e-6,"z":8.988943608741816e-6,"y":-1.62401121641264e-5}},{"degrees_of_freedom":[1578,1579,1580,1581,1582,1583],"id":"n263","parent":"11","position":{"x":5,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014829828089279041,"z":2.1061525616475817e-6,"y":-0.0007571785027475973},"angle":{"x":-5.859510208042581e-6,"z":2.0922926164048205e-5,"y":-1.7098498818563926e-5}},{"degrees_of_freedom":[1584,1585,1586,1587,1588,1589],"id":"n264","parent":"11","position":{"x":5,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001822448140161808,"z":-3.0299951436950942e-5,"y":-0.0008207028874603168},"angle":{"x":-4.16657934987062e-5,"z":6.0805278992012474e-5,"y":-0.00013444848966309478}},{"degrees_of_freedom":[1590,1591,1592,1593,1594,1595],"id":"n265","parent":"11","position":{"x":5,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002519543701269692,"z":-4.7394965141980496e-5,"y":-0.00083695127856322},"angle":{"x":-5.982072855511071e-6,"z":1.7272726827101797e-5,"y":-1.5865345769462922e-5}},{"degrees_of_freedom":[1596,1597,1598,1599,1600,1601],"id":"n266","parent":"11","position":{"x":5,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012426135237587454,"z":-5.633836174453643e-5,"y":-0.0008323594033060675},"angle":{"x":2.159696288237318e-5,"z":6.352799887828475e-5,"y":0.00011950984855428395}},{"degrees_of_freedom":[1602,1603,1604,1605,1606,1607],"id":"n267","parent":"11","position":{"x":5,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.644089165992602e-5,"z":-6.045341588236015e-5,"y":-0.0007777930898955956},"angle":{"x":-6.103963555659243e-6,"z":1.6821206614829138e-5,"y":-8.051570250055348e-6}},{"degrees_of_freedom":[1608,1609,1610,1611,1612,1613],"id":"n268","parent":"11","position":{"x":5,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.2096149597776236e-5,"z":-3.405701048922203e-5,"y":-0.0007134368151772568},"angle":{"x":-3.5406956936308466e-5,"z":5.747297757452217e-5,"y":-0.00011848680223344987}},{"degrees_of_freedom":[1614,1615,1616,1617,1618,1619],"id":"n269","parent":"11","position":{"x":5,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.306357140165271e-5,"z":-1.997618231788006e-5,"y":-0.0006966099541480779},"angle":{"x":-4.666799422137268e-6,"z":2.0471298989943143e-5,"y":-9.284755265505269e-6}},{"degrees_of_freedom":[1620,1621,1622,1623,1624,1625],"id":"n270","parent":"11","position":{"x":5,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.573440530582977e-5,"z":-9.14859170042116e-6,"y":-0.0007027800806760757},"angle":{"x":2.8904537152108058e-5,"z":6.870309744932836e-5,"y":0.0001225898982614833}},{"degrees_of_freedom":[1626,1627,1628,1629,1630,1631],"id":"n271","parent":"11","position":{"x":-5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00016467386200149,"z":-0.000293220185670177,"y":-0.001113150869310457},"angle":{"x":-5.011980644318763e-5,"z":1.072626609133832e-5,"y":-2.3899993740759443e-5}},{"degrees_of_freedom":[1632,1633,1634,1635,1636,1637],"id":"n272","parent":"11","position":{"x":0,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0002462321285192256,"z":-0.00018955049345143827,"y":-0.0010102462539795746},"angle":{"x":2.3122792594937778e-5,"z":3.102492922280677e-5,"y":-3.731712666468301e-5}},{"degrees_of_freedom":[1638,1639,1640,1641,1642,1643],"id":"n273","parent":"11","position":{"x":2.857142857142857,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016119788089790702,"z":-0.0001315697916533882,"y":-0.0007332417560411539},"angle":{"x":-2.597562021352542e-5,"z":3.067103060150965e-5,"y":-2.6661781784340214e-5}},{"degrees_of_freedom":[1644,1645,1646,1647,1648,1649],"id":"n274","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001911907954128763,"z":-0.00014139815285730818,"y":-0.0008904457405093428},"angle":{"x":-0.00044965906629786085,"z":0.0001897055699886108,"y":-2.6788612212846958e-5}},{"degrees_of_freedom":[1650,1651,1652,1653,1654,1655],"id":"n275","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021058608523168403,"z":-0.0001867118490997322,"y":-0.0009638208917293169},"angle":{"x":-1.3342741818652823e-5,"z":3.5853944546539017e-5,"y":-2.548524614928012e-5}},{"degrees_of_freedom":[1656,1657,1658,1659,1660,1661],"id":"n276","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019072447904771493,"z":-0.00023301295558119205,"y":-0.001059527457284846},"angle":{"x":0.0003495748385597204,"z":0.00016375518560500721,"y":-2.792131494405813e-5}},{"degrees_of_freedom":[1662,1663,1664,1665,1666,1667],"id":"n277","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001640339746281162,"z":-0.0002465470251198863,"y":-0.0013042841641138384},"angle":{"x":-2.429950974539307e-5,"z":3.999183374044976e-5,"y":-2.6616289273687016e-5}},{"degrees_of_freedom":[1668,1669,1670,1671,1672,1673],"id":"n278","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013379439906065156,"z":-0.0002369040154036452,"y":-0.0011407495429362508},"angle":{"x":-0.00027839791122631494,"z":0.00012607226860096322,"y":-2.316713276535298e-5}},{"degrees_of_freedom":[1674,1675,1676,1677,1678,1679],"id":"n279","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011826619577351419,"z":-0.00019486234398202298,"y":-0.0010740048564866784},"angle":{"x":-2.1610161651301145e-5,"z":3.611665700063005e-5,"y":-2.4679548045451427e-5}},{"degrees_of_freedom":[1680,1681,1682,1683,1684,1685],"id":"n280","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014028784036485998,"z":-0.0001485928015682253,"y":-0.000971091761533604},"angle":{"x":0.0003466512123106765,"z":0.00016548415860911575,"y":-2.8963807320513914e-5}},{"degrees_of_freedom":[1686,1687,1688,1689,1690,1691],"id":"n281","parent":"11","position":{"x":-5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019617133537354366,"z":-0.0002231670202801528,"y":-0.000844344178100866},"angle":{"x":-4.402637770351677e-5,"z":1.6399310740721325e-5,"y":-8.145288187301844e-5}},{"degrees_of_freedom":[1692,1693,1694,1695,1696,1697],"id":"n282","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001619169853536015,"z":-0.00023634290905418765,"y":-0.0008159347700970659},"angle":{"x":-3.437941745279409e-6,"z":6.71845421175593e-5,"y":3.386830974194076e-5}},{"degrees_of_freedom":[1698,1699,1700,1701,1702,1703],"id":"n283","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00029259577659756613,"z":-0.0002282933335007321,"y":-0.0008367386585234821},"angle":{"x":1.5098724119096524e-5,"z":0.00015771774591779932,"y":0.00028993610030886334}},{"degrees_of_freedom":[1704,1705,1706,1707,1708,1709],"id":"n284","parent":"11","position":{"x":-5,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0006080795508053082,"z":-0.0002181861761682888,"y":-0.000915778119778697},"angle":{"x":5.43345562758366e-5,"z":6.626011960735274e-5,"y":3.125569339496442e-5}},{"degrees_of_freedom":[1710,1711,1712,1713,1714,1715],"id":"n285","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016630487806016604,"z":-0.00021676783636816866,"y":-0.0009755014692662891},"angle":{"x":-2.541159031424361e-5,"z":0.0003248912021771146,"y":-0.0007002643879465669}},{"degrees_of_freedom":[1716,1717,1718,1719,1720,1721],"id":"n286","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6683577071284288e-5,"z":-0.0001990892491471205,"y":-0.0009386798242222007},"angle":{"x":-2.94418855278585e-6,"z":6.718403904325088e-5,"y":2.864134564663681e-5}},{"degrees_of_freedom":[1722,1723,1724,1725,1726,1727],"id":"n287","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001517356340246197,"z":-0.0002011676750472961,"y":-0.000912132938907031},"angle":{"x":8.629037966725343e-6,"z":6.605840052047458e-5,"y":2.54575457206181e-5}},{"degrees_of_freedom":[1728,1729,1730,1731,1732,1733],"id":"n288","parent":"11","position":{"x":-5,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00047778032207006313,"z":-0.00020936579263139445,"y":-0.0008417148448350917},"angle":{"x":4.839345110620384e-5,"z":6.810812907503833e-5,"y":3.125494579786554e-5}},{"degrees_of_freedom":[1734,1735,1736,1737,1738,1739],"id":"n289","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5446442624676887e-5,"z":-0.00021328387265900486,"y":-0.0007868022888819953},"angle":{"x":-2.8007380592620233e-5,"z":0.00040646909686923894,"y":-0.0009257743510482718}},{"degrees_of_freedom":[1740,1741,1742,1743,1744,1745],"id":"n290","parent":"11","position":{"x":0,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019030486651557574,"z":5.648691008276619e-5,"y":-0.0008564333745591767},"angle":{"x":0.00021834608597196792,"z":-1.823252015385829e-5,"y":2.8126423269669034e-5}},{"degrees_of_freedom":[1746,1747,1748,1749,1750,1751],"id":"n291","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020177261019366368,"z":-6.940943844181374e-5,"y":-0.0008173273028026256},"angle":{"x":-4.061212194469097e-5,"z":-1.154450048842521e-5,"y":-7.913764350062178e-5}},{"degrees_of_freedom":[1752,1753,1754,1755,1756,1757],"id":"n292","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002086182863080143,"z":-5.358589096836769e-5,"y":-0.0007844652473883166},"angle":{"x":-5.0110761211892994e-6,"z":-1.309805003810008e-7,"y":6.810954178662e-6}},{"degrees_of_freedom":[1758,1759,1760,1761,1762,1763],"id":"n293","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019845122103046575,"z":-4.916167697372884e-5,"y":-0.0007472395910654441},"angle":{"x":-1.4118752963191532e-5,"z":1.8569047917990537e-5,"y":2.8798915708911924e-5}},{"degrees_of_freedom":[1764,1765,1766,1767,1768,1769],"id":"n294","parent":"11","position":{"x":0,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019111511505440435,"z":-9.552915336454505e-5,"y":-0.0007560805414395421},"angle":{"x":5.905452533393423e-5,"z":-1.6906510952117734e-5,"y":-1.5104609523720745e-6}},{"degrees_of_freedom":[1770,1771,1772,1773,1774,1775],"id":"n295","parent":"11","position":{"x":2.020305089104421,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018157086714379463,"z":-4.305849890203384e-5,"y":-0.0007936323551716749},"angle":{"x":-4.1100070308724645e-5,"z":-1.0903349783334501e-5,"y":-4.299585675536565e-5}},{"degrees_of_freedom":[1776,1777,1778,1779,1780,1781],"id":"n296","parent":"11","position":{"x":2.857142857142857,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001767627464509652,"z":-9.011263328321398e-5,"y":-0.0008300729175932256},"angle":{"x":-3.4647936427789276e-5,"z":-1.1781472381534979e-7,"y":-2.7419003667560717e-5}},{"degrees_of_freedom":[1782,1783,1784,1785,1786,1787],"id":"n297","parent":"11","position":{"x":2.020305089104421,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018377707676134168,"z":-0.00018305730027589508,"y":-0.0008695085742926196},"angle":{"x":-0.00011481743123630882,"z":1.574332029403869e-5,"y":0.00016612726144771723}},{"degrees_of_freedom":[1788,1789,1790,1791,1792,1793],"id":"n298","parent":"11","position":{"x":2.857142857142857,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014396702756868315,"z":-0.00016032131205169614,"y":-0.0011916814706801307},"angle":{"x":2.9012422861546105e-5,"z":-2.7693459412076616e-5,"y":-3.485873555391509e-5}},{"degrees_of_freedom":[1794,1795,1796,1797,1798,1799],"id":"n299","parent":"11","position":{"x":2.0203050891044216,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001812670877952777,"z":-0.00017274586567785262,"y":-0.0009722647044529875},"angle":{"x":-0.00031402542706146774,"z":-0.00015031675619055137,"y":-2.3485912671574285e-5}},{"degrees_of_freedom":[1800,1801,1802,1803,1804,1805],"id":"n300","parent":"11","position":{"x":3.140184917367551e-16,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019874156791158581,"z":-0.00021729641426999194,"y":-0.0008771467510500473},"angle":{"x":4.74761389011296e-5,"z":-2.384784744237743e-5,"y":-2.724815932043404e-5}},{"degrees_of_freedom":[1806,1807,1808,1809,1810,1811],"id":"n301","parent":"11","position":{"x":-2.020305089104421,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017534975252801906,"z":-0.00026973125522819735,"y":-0.0008614885227463935},"angle":{"x":-0.0002242468778725403,"z":7.35620182833402e-5,"y":-3.2992211100957e-5}},{"degrees_of_freedom":[1812,1813,1814,1815,1816,1817],"id":"n302","parent":"11","position":{"x":-2.857142857142857,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013737548179280546,"z":-0.00028568579980877134,"y":-0.0008339056066180499},"angle":{"x":3.4504327774101955e-5,"z":-1.657902445495272e-5,"y":-3.43518225548314e-5}},{"degrees_of_freedom":[1818,1819,1820,1821,1822,1823],"id":"n303","parent":"11","position":{"x":-2.0203050891044216,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.92105522661405e-5,"z":-0.0002731155069963017,"y":-0.0009957972358164138},"angle":{"x":-0.0005773382163388202,"z":-0.00023155670110406736,"y":-2.8363431903785356e-5}},{"degrees_of_freedom":[1824,1825,1826,1827,1828,1829],"id":"n304","parent":"11","position":{"x":-3.140184917367551e-16,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.976606037987689e-5,"z":-0.00022415955795390623,"y":-0.0010586221044107866},"angle":{"x":1.6039773311585208e-5,"z":-2.0424749070522064e-5,"y":-2.766754643478413e-5}},{"degrees_of_freedom":[1830,1831,1832,1833,1834,1835],"id":"n305","parent":"11","position":{"x":2.020305089104421,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010256538200059852,"z":-0.00017398317186665289,"y":-0.0010946015428183427},"angle":{"x":-7.405384474358984e-6,"z":-1.347671402134268e-5,"y":-3.0348391898814e-5}},{"degrees_of_freedom":[1836,1837,1838,1839,1840,1841],"id":"n306","parent":"11","position":{"x":5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00019591803840621118,"z":-0.00016133162631689452,"y":-0.001188460940339202},"angle":{"x":-4.85030400259166e-7,"z":-6.025574520360592e-6,"y":-3.590976712399207e-5}},{"degrees_of_freedom":[1842,1843,1844,1845,1846,1847],"id":"n307","parent":"11","position":{"x":5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027777938551015984,"z":-0.00016630749828432415,"y":-0.0011353018094475515},"angle":{"x":-1.7399428281920678e-5,"z":3.944963112528523e-6,"y":-2.0285168337587078e-5}},{"degrees_of_freedom":[1848,1849,1850,1851,1852,1853],"id":"n308","parent":"11","position":{"x":5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.655563865800501e-5,"z":-0.00013768902352300993,"y":-0.0010737155028295413},"angle":{"x":-6.962100172034008e-6,"z":3.7924360829897158e-6,"y":-1.7447856435058537e-5}},{"degrees_of_freedom":[1854,1855,1856,1857,1858,1859],"id":"n309","parent":"11","position":{"x":5,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.866679609024357e-5,"z":-0.0001336407456160637,"y":-0.0010783247218747773},"angle":{"x":-6.0502341616683935e-6,"z":-8.992578491882985e-7,"y":-2.4221511142907342e-5}},{"degrees_of_freedom":[1860,1861,1862,1863,1864,1865],"id":"n310","parent":"11","position":{"x":5,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012186019467735859,"z":-0.00015217453527136346,"y":-0.0011139031525237081},"angle":{"x":-2.0822977434262395e-5,"z":-4.063468842120248e-6,"y":-1.812336421862301e-5}},{"degrees_of_freedom":[1866,1867,1868,1869,1870,1871],"id":"n311","parent":"11","position":{"x":5,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018553547518048976,"z":-0.0001619511997718106,"y":-0.0011267769108734159},"angle":{"x":-7.367157533569788e-6,"z":-2.171300670220044e-6,"y":-2.6326822820204978e-5}},{"degrees_of_freedom":[1872,1873,1874,1875,1876,1877],"id":"n312","parent":"11","position":{"x":5,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002243958885193689,"z":-0.000166782938711312,"y":-0.0011308221998045835},"angle":{"x":1.1120172518431519e-5,"z":9.25801183654577e-6,"y":8.851755215948542e-6}},{"degrees_of_freedom":[1878,1879,1880,1881,1882,1883],"id":"n313","parent":"11","position":{"x":5,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023731065160713624,"z":-0.0001663477738090125,"y":-0.0011049957719808869},"angle":{"x":-6.512209644526126e-6,"z":-3.4724305773978796e-6,"y":-2.430381081642317e-5}},{"degrees_of_freedom":[1884,1885,1886,1887,1888,1889],"id":"n314","parent":"11","position":{"x":5,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020954871602986514,"z":-0.00014289422777916358,"y":-0.0010685905853452843},"angle":{"x":-2.6098108253813835e-5,"z":-1.556054706550745e-6,"y":-2.6872594004896756e-5}},{"degrees_of_freedom":[1890,1891,1892,1893,1894,1895],"id":"n315","parent":"11","position":{"x":5,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015020682673694928,"z":-0.00013310826896860238,"y":-0.001052845999397126},"angle":{"x":-7.951166718969356e-6,"z":-2.200398165000391e-6,"y":-2.2198550827277338e-5}},{"degrees_of_freedom":[1896,1897,1898,1899,1900,1901],"id":"n316","parent":"11","position":{"x":5,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011601234737192184,"z":-0.00013093916133437292,"y":-0.0010514776978751482},"angle":{"x":8.907004075093993e-6,"z":7.4990080388096985e-6,"y":2.383969438020725e-6}},{"degrees_of_freedom":[1902,1903,1904,1905,1906,1907],"id":"n317","parent":"11","position":{"x":-5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00012363192109715802,"z":-0.0006276378138302749,"y":-0.0014541915456846096},"angle":{"x":-7.032729993665673e-5,"z":4.817095618156793e-5,"y":-8.776719134917976e-5}},{"degrees_of_freedom":[1908,1909,1910,1911,1912,1913],"id":"n318","parent":"11","position":{"x":0,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003307053985500291,"z":-0.00030691569104690367,"y":-0.00138946177354428},"angle":{"x":-0.0001612057829425042,"z":-5.341728822770929e-5,"y":-4.873529984548105e-5}},{"degrees_of_freedom":[1914,1915,1916,1917,1918,1919],"id":"n319","parent":"11","position":{"x":0,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.1237459898371834e-5,"z":-0.00035560663600508915,"y":-0.001207434257533612},"angle":{"x":-2.2615496099482583e-5,"z":3.3405410937062755e-6,"y":-4.99996545725107e-5}},{"degrees_of_freedom":[1920,1921,1922,1923,1924,1925],"id":"n320","parent":"11","position":{"x":2.857142857142857,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018215067159433788,"z":-0.00022548813691579167,"y":-0.0010684428970099739},"angle":{"x":-2.2400079597977836e-5,"z":2.4165288416034968e-5,"y":-5.380614724621969e-5}},{"degrees_of_freedom":[1926,1927,1928,1929,1930,1931],"id":"n321","parent":"11","position":{"x":2.0203050891044216,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012521494992182483,"z":-0.000249110964468604,"y":-0.0011612755392730358},"angle":{"x":-0.0002027789707556631,"z":8.793899858525809e-5,"y":-4.730249497541926e-5}},{"degrees_of_freedom":[1932,1933,1934,1935,1936,1937],"id":"n322","parent":"11","position":{"x":3.140184917367551e-16,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.375975804369412e-5,"z":-0.0003355347026230387,"y":-0.001199728643802763},"angle":{"x":-3.4693297156524086e-5,"z":2.8511954388384842e-5,"y":-5.2516461585483e-5}},{"degrees_of_freedom":[1938,1939,1940,1941,1942,1943],"id":"n323","parent":"11","position":{"x":-2.020305089104421,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001205329494899355,"z":-0.0004355673084612072,"y":-0.0012962470685643698},"angle":{"x":0.00024278065497940812,"z":0.00012661360606809946,"y":-6.0575104916082314e-5}},{"degrees_of_freedom":[1944,1945,1946,1947,1948,1949],"id":"n324","parent":"11","position":{"x":-2.857142857142857,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017487377262088288,"z":-0.00046706080929970043,"y":-0.0015292619419103178},"angle":{"x":-2.239951198456998e-5,"z":3.28581417693918e-5,"y":-5.671148317305567e-5}},{"degrees_of_freedom":[1950,1951,1952,1953,1954,1955],"id":"n325","parent":"11","position":{"x":-2.0203050891044216,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024196164475858312,"z":-0.00044297840095307804,"y":-0.0013867552185117587},"angle":{"x":-8.504267735537778e-5,"z":5.500571561176785e-5,"y":-6.572065798041144e-5}},{"degrees_of_freedom":[1956,1957,1958,1959,1960,1961],"id":"n326","parent":"11","position":{"x":-3.140184917367551e-16,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00028490405211877836,"z":-0.00033823532707985234,"y":-0.0013277273476137517},"angle":{"x":-1.0106200456534113e-5,"z":2.8511581401849396e-5,"y":-5.450699104411093e-5}},{"degrees_of_freedom":[1962,1963,1964,1965,1966,1967],"id":"n327","parent":"11","position":{"x":2.020305089104421,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024412224466290806,"z":-0.0002472429686642128,"y":-0.0012517849619578074},"angle":{"x":9.575430250152881e-5,"z":6.593901759355062e-5,"y":-5.085887875055832e-5}},{"degrees_of_freedom":[1968,1969,1970,1971,1972,1973],"id":"n328","parent":"11","position":{"x":-5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024457826920299514,"z":-0.0005073153804643367,"y":-0.0013129235092559793},"angle":{"x":-1.5998493175941815e-5,"z":2.1447226416358562e-5,"y":-5.31645189322607e-6}},{"degrees_of_freedom":[1974,1975,1976,1977,1978,1979],"id":"n329","parent":"11","position":{"x":-5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.780746669887528e-6,"z":-0.000461171201071281,"y":-0.0011972205820811326},"angle":{"x":-1.805144755790101e-5,"z":2.1246381080039286e-5,"y":-4.375661316002176e-5}},{"degrees_of_freedom":[1980,1981,1982,1983,1984,1985],"id":"n330","parent":"11","position":{"x":-5,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014297053306471235,"z":-0.0004964752745541628,"y":-0.001286672821229645},"angle":{"x":-1.9406524715989487e-5,"z":2.5479290298157963e-5,"y":1.0145651153327401e-5}},{"degrees_of_freedom":[1986,1987,1988,1989,1990,1991],"id":"n331","parent":"11","position":{"x":-5,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.115299998912822e-5,"z":-0.00052175137027999,"y":-0.0012861844282982505},"angle":{"x":-7.882053289632659e-6,"z":1.544026794309908e-5,"y":-1.824898934501535e-5}},{"degrees_of_freedom":[1992,1993,1994,1995,1996,1997],"id":"n332","parent":"11","position":{"x":-5,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.3945653225140254e-5,"z":-0.0005245144342784773,"y":-0.0013090264508062177},"angle":{"x":8.943725925862997e-6,"z":2.7552103208737207e-5,"y":1.6008436407003274e-5}},{"degrees_of_freedom":[1998,1999,2000,2001,2002,2003],"id":"n333","parent":"11","position":{"x":-5,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001558368644410081,"z":-0.0005135293756138854,"y":-0.0013166638849422434},"angle":{"x":-3.854727186783497e-5,"z":0.00011545976228321323,"y":-0.00023263196533497246}},{"degrees_of_freedom":[2004,2005,2006,2007,2008,2009],"id":"n334","parent":"11","position":{"x":-5,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023444747973365825,"z":-0.000469770607318416,"y":-0.0012752920421917064},"angle":{"x":-1.8500487169904755e-5,"z":2.5479469022870405e-5,"y":2.1870936030248362e-5}},{"degrees_of_freedom":[2010,2011,2012,2013,2014,2015],"id":"n335","parent":"11","position":{"x":-5,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002764531925612092,"z":-0.0004420745527849079,"y":-0.0012680804238057205},"angle":{"x":-1.1489895762736912e-5,"z":-5.817692577876422e-5,"y":-0.00021474472984115613}},{"degrees_of_freedom":[2016,2017,2018,2019,2020,2021],"id":"n336","parent":"11","position":{"x":-5,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003778628490351817,"z":-0.0004391609517487106,"y":-0.0012586349427819268},"angle":{"x":1.347504990473254e-6,"z":2.340658743442974e-5,"y":1.6008770439751052e-5}},{"degrees_of_freedom":[2022,2023,2024,2025,2026,2027],"id":"n337","parent":"11","position":{"x":-5,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021176865415142203,"z":-0.0004515885347427511,"y":-0.0012568102561268523},"angle":{"x":-3.461259608527364e-5,"z":0.00017286395418981222,"y":-0.0004067210080344247}},{"degrees_of_freedom":[2028,2029,2030,2031,2032,2033],"id":"n338","parent":"11","position":{"x":0,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00031217126717385924,"z":-0.0001596969119332112,"y":-0.001189643845441915},"angle":{"x":-0.00014072829614154245,"z":2.4433785617050785e-5,"y":-8.993136887909013e-5}},{"degrees_of_freedom":[2034,2035,2036,2037,2038,2039],"id":"n339","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000306067908694224,"z":-9.577487451774992e-5,"y":-0.0011593338355805124},"angle":{"x":2.858599825919283e-5,"z":-3.724827963472419e-7,"y":-1.9799103109417276e-5}},{"degrees_of_freedom":[2040,2041,2042,2043,2044,2045],"id":"n340","parent":"11","position":{"x":2.857142857142857,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002900974714279875,"z":-2.1453876888261492e-5,"y":-0.0011634180825366854},"angle":{"x":-4.111481404816644e-5,"z":1.3655252254005137e-5,"y":-0.00018807160551150869}},{"degrees_of_freedom":[2046,2047,2048,2049,2050,2051],"id":"n341","parent":"11","position":{"x":2.020305089104421,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002516356468298776,"z":-0.00026190376233333016,"y":-0.001189472166797959},"angle":{"x":-0.00014701667142573468,"z":2.6276468397925278e-5,"y":6.759813491459928e-5}},{"degrees_of_freedom":[2052,2053,2054,2055,2056,2057],"id":"n342","parent":"11","position":{"x":0,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023453805560120816,"z":-0.00024836407211387357,"y":-0.001251585585701909},"angle":{"x":-0.0001850963067383233,"z":2.7172351816909278e-5,"y":8.33711945869854e-5}},{"degrees_of_freedom":[2058,2059,2060,2061,2062,2063],"id":"n343","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00024287255683250034,"z":7.496679926953742e-5,"y":-0.0012824220934035241},"angle":{"x":-2.732348764011305e-5,"z":-3.8035160719375863e-6,"y":0.00014872289673534175}},{"degrees_of_freedom":[2064,2065,2066,2067,2068,2069],"id":"n344","parent":"11","position":{"x":-2.857142857142857,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00025542878107833117,"z":0.00025462529755125205,"y":-0.0012735642981508862},"angle":{"x":0.0001321878318883788,"z":1.262830325342063e-5,"y":0.000533816855074881}},{"degrees_of_freedom":[2070,2071,2072,2073,2074,2075],"id":"n345","parent":"11","position":{"x":-2.020305089104421,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002921516362556335,"z":-0.00045915254267847594,"y":-0.001245649974917578},"angle":{"x":0.0005005846973315797,"z":2.5754346737569352e-5,"y":-0.00035557199455140456}},{"degrees_of_freedom":[2076,2077,2078,2079,2080,2081],"id":"n346","parent":"11","position":{"x":0,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.401994199361972e-5,"z":-0.00025599553502638275,"y":-0.001156155450730049},"angle":{"x":3.795906531873276e-5,"z":9.699414445376648e-6,"y":-3.7152736168433904e-5}},{"degrees_of_freedom":[2082,2083,2084,2085,2086,2087],"id":"n347","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.047152850536599e-6,"z":-0.00036156559914980746,"y":-0.0011642558386757383},"angle":{"x":-5.322605803322427e-5,"z":-4.16169613198091e-6,"y":-7.305870679279227e-5}},{"degrees_of_freedom":[2088,2089,2090,2091,2092,2093],"id":"n348","parent":"11","position":{"x":-2.857142857142857,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6143481398888025e-5,"z":-0.0003150585110948384,"y":-0.0011399576469216573},"angle":{"x":-1.678445442096743e-5,"z":8.06960585101912e-6,"y":1.5120749120029723e-5}},{"degrees_of_freedom":[2094,2095,2096,2097,2098,2099],"id":"n349","parent":"11","position":{"x":-2.020305089104421,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.184996939019885e-5,"z":-0.00029385866724502174,"y":-0.0010995391731132961},"angle":{"x":1.773555995094845e-5,"z":2.4457672448222983e-5,"y":-6.801625651873028e-5}},{"degrees_of_freedom":[2100,2101,2102,2103,2104,2105],"id":"n350","parent":"11","position":{"x":0,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.9232720868974774e-5,"z":-0.0001714796688177449,"y":-0.0010669648352821565},"angle":{"x":-7.00189413447942e-5,"z":8.528053930804169e-6,"y":-3.152399990622928e-5}},{"degrees_of_freedom":[2106,2107,2108,2109,2110,2111],"id":"n351","parent":"11","position":{"x":2.020305089104421,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.26005300364398e-5,"z":-0.00016628967642184399,"y":-0.0010652976238849337},"angle":{"x":1.905612595239792e-5,"z":-7.812176872494689e-6,"y":5.228965692732162e-6}},{"degrees_of_freedom":[2112,2113,2114,2115,2116,2117],"id":"n352","parent":"11","position":{"x":2.857142857142857,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.885898510610017e-5,"z":-0.00013177054143668996,"y":-0.0010898232849655537},"angle":{"x":-1.1699030079574188e-5,"z":6.324713468515765e-6,"y":-6.972989896906554e-5}},{"degrees_of_freedom":[2118,2119,2120,2121,2122,2123],"id":"n353","parent":"11","position":{"x":2.020305089104421,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.623781514424473e-5,"z":-0.00021395664596627508,"y":-0.001125894929448924},"angle":{"x":-3.955891084070758e-5,"z":2.1988706797582826e-5,"y":-3.1795790553304605e-6}},{"degrees_of_freedom":[2124,2125,2126,2127,2128,2129],"id":"n354","parent":"11","position":{"x":2.0203050891044216,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.803958665645318e-5,"z":-0.0001577003427512553,"y":-0.0009965609828222614},"angle":{"x":-4.881292158312797e-5,"z":-1.4512321939094613e-5,"y":-2.3690656314601145e-5}},{"degrees_of_freedom":[2130,2131,2132,2133,2134,2135],"id":"n355","parent":"11","position":{"x":3.140184917367551e-16,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.187336999006861e-5,"z":-0.00020252419232964715,"y":-0.00100225487412935},"angle":{"x":8.251598652551249e-6,"z":5.1529509445085564e-6,"y":-2.598800936723333e-5}},{"degrees_of_freedom":[2136,2137,2138,2139,2140,2141],"id":"n356","parent":"11","position":{"x":-2.020305089104421,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.332258343634633e-6,"z":-0.0002488007847065219,"y":-0.0010217592730727516},"angle":{"x":-2.1853255109372314e-6,"z":9.35305086180057e-6,"y":-2.7256380659866815e-5}},{"degrees_of_freedom":[2142,2143,2144,2145,2146,2147],"id":"n357","parent":"11","position":{"x":-2.0203050891044216,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.962279904956438e-5,"z":-0.0002525817975635517,"y":-0.0009541425004871906},"angle":{"x":-9.327013291030671e-5,"z":-1.4500365862878655e-5,"y":-2.691417573333261e-5}},{"degrees_of_freedom":[2148,2149,2150,2151,2152,2153],"id":"n358","parent":"11","position":{"x":-3.140184917367551e-16,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.633833071532267e-5,"z":-0.00020587172877639675,"y":-0.000913635049243154},"angle":{"x":-3.734586654477447e-5,"z":3.2292673982300468e-6,"y":-2.6030635539199416e-5}},{"degrees_of_freedom":[2154,2155,2156,2157,2158,2159],"id":"n359","parent":"11","position":{"x":2.020305089104421,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.365508362056214e-5,"z":-0.00015961665808574634,"y":-0.0009356324778887447},"angle":{"x":0.00019234158152376158,"z":-7.593494292866803e-5,"y":-2.769383009044404e-5}},{"degrees_of_freedom":[2160,2161,2162,2163,2164,2165],"id":"n360","parent":"11","position":{"x":5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.155706658857433e-5,"z":-0.00016400948973873512,"y":-0.0011583193687601681},"angle":{"x":-9.583624768307969e-6,"z":-2.0717295225740583e-7,"y":-4.461329445096247e-5}},{"degrees_of_freedom":[2166,2167,2168,2169,2170,2171],"id":"n361","parent":"11","position":{"x":5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010912123925425089,"z":-0.00012130898178834318,"y":-0.001064692071660898},"angle":{"x":-6.397974661489009e-6,"z":5.136769247980334e-6,"y":-1.4885999374398571e-5}},{"degrees_of_freedom":[2172,2173,2174,2175,2176,2177],"id":"n362","parent":"11","position":{"x":5,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.959706257035703e-5,"z":-0.00011695209398741909,"y":-0.0010557548004477824},"angle":{"x":-6.179723053596226e-6,"z":9.141218905153096e-6,"y":-2.2772580399988146e-5}},{"degrees_of_freedom":[2178,2179,2180,2181,2182,2183],"id":"n363","parent":"11","position":{"x":5,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.074672272436408e-5,"z":-0.00013611222343716046,"y":-0.0010886943455232965},"angle":{"x":-2.068682677105831e-5,"z":1.2760556735930906e-5,"y":-3.8136237353875306e-5}},{"degrees_of_freedom":[2184,2185,2186,2187,2188,2189],"id":"n364","parent":"11","position":{"x":5,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.971248983562623e-5,"z":-0.0001438279626810333,"y":-0.0010996059994553577},"angle":{"x":-5.047113164781044e-6,"z":6.95059326305268e-6,"y":-2.6829778678813663e-5}},{"degrees_of_freedom":[2190,2191,2192,2193,2194,2195],"id":"n365","parent":"11","position":{"x":5,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0757088121436782e-5,"z":-0.00014593875641353467,"y":-0.0010991694664090653},"angle":{"x":7.505155472082921e-6,"z":3.751430960731464e-5,"y":6.474407155986218e-5}},{"degrees_of_freedom":[2196,2197,2198,2199,2200,2201],"id":"n366","parent":"11","position":{"x":5,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.25106946260163e-5,"z":-0.00014267340585478018,"y":-0.00107475774395208},"angle":{"x":-6.0034989816024105e-6,"z":4.515176923303472e-6,"y":-2.346507669762304e-5}},{"degrees_of_freedom":[2202,2203,2204,2205,2206,2207],"id":"n367","parent":"11","position":{"x":5,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4991369080243965e-5,"z":-0.00012423637635427433,"y":-0.0010409600381883189},"angle":{"x":-2.064519100810092e-5,"z":1.4265411882252314e-5,"y":-4.5916429266819274e-5}},{"degrees_of_freedom":[2208,2209,2210,2211,2212,2213],"id":"n368","parent":"11","position":{"x":5,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.064756104102616e-5,"z":-0.00011698794803642863,"y":-0.0010297414094745368},"angle":{"x":-4.564235596103914e-6,"z":6.705758863450666e-6,"y":-1.9407986183719667e-5}},{"degrees_of_freedom":[2214,2215,2216,2217,2218,2219],"id":"n369","parent":"11","position":{"x":5,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.033348458428029e-5,"z":-0.00011468981090413983,"y":-0.0010314275264637668},"angle":{"x":9.073617002322506e-6,"z":3.605570029112373e-5,"y":5.8479675251829116e-5}},{"degrees_of_freedom":[2220,2221,2222,2223,2224,2225],"id":"n370","parent":"11","position":{"x":-5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00013646014511814174,"z":-0.0005751177325711181,"y":-0.0014256088957920055},"angle":{"x":-7.173738183657749e-5,"z":4.0819362197060975e-5,"y":-6.307530644496623e-5}},{"degrees_of_freedom":[2226,2227,2228,2229,2230,2231],"id":"n371","parent":"11","position":{"x":0,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00019986597407365306,"z":-0.0003750547339098219,"y":-0.0012087100353694999},"angle":{"x":-3.800945406566698e-5,"z":1.1714068654567122e-5,"y":-4.270686359123522e-5}},{"degrees_of_freedom":[2232,2233,2234,2235,2236,2237],"id":"n372","parent":"11","position":{"x":2.857142857142857,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.280473447748088e-5,"z":-0.0002635605003146771,"y":-0.0008473582760817409},"angle":{"x":3.2725837505961858e-6,"z":4.93945093662253e-5,"y":-3.337330116579302e-5}},{"degrees_of_freedom":[2238,2239,2240,2241,2242,2243],"id":"n373","parent":"11","position":{"x":2.0203050891044216,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012224183118093998,"z":-0.0002797186540452756,"y":-0.0011358913821425405},"angle":{"x":-0.0005028264671853218,"z":0.00022815278456934373,"y":-4.808609620082101e-5}},{"degrees_of_freedom":[2244,2245,2246,2247,2248,2249],"id":"n374","parent":"11","position":{"x":3.140184917367551e-16,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015766605945539695,"z":-0.0003597930014899276,"y":-0.0012548544941723943},"angle":{"x":-1.673383350620611e-5,"z":5.611852607209153e-5,"y":-4.417262725494936e-5}},{"degrees_of_freedom":[2250,2251,2252,2253,2254,2255],"id":"n375","parent":"11","position":{"x":-2.020305089104421,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012600401445120077,"z":-0.00043767543319299444,"y":-0.0014018245918033874},"angle":{"x":0.0002860934985938235,"z":0.00016335871383198888,"y":-4.499753855717454e-5}},{"degrees_of_freedom":[2256,2257,2258,2259,2260,2261],"id":"n376","parent":"11","position":{"x":-2.857142857142857,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.226784561335567e-5,"z":-0.0004599633027107465,"y":-0.0017579721639489382},"angle":{"x":2.5572245153015945e-6,"z":6.32881636026218e-5,"y":-3.628574916754981e-5}},{"degrees_of_freedom":[2262,2263,2264,2265,2266,2267],"id":"n377","parent":"11","position":{"x":-2.0203050891044216,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.0408425331408165e-5,"z":-0.000442522623973551,"y":-0.0013908264712217777},"angle":{"x":-0.000505878231611866,"z":0.00024322189716885983,"y":-4.809784611829254e-5}},{"degrees_of_freedom":[2268,2269,2270,2271,2272,2273],"id":"n378","parent":"11","position":{"x":-3.140184917367551e-16,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8852920727101666e-5,"z":-0.0003623422020644087,"y":-0.001238198278595159},"angle":{"x":2.2563357333192638e-5,"z":5.656441445492247e-5,"y":-4.3587345973266096e-5}},{"degrees_of_freedom":[2274,2275,2276,2277,2278,2279],"id":"n379","parent":"11","position":{"x":2.020305089104421,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.390193351493122e-5,"z":-0.0002863029254351086,"y":-0.0011233338291540243},"angle":{"x":0.0003215318533758723,"z":0.00016209088949664503,"y":-4.449455882150593e-5}},{"degrees_of_freedom":[2280,2281,2282,2283,2284,2285],"id":"n380","parent":"11","position":{"x":-5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017088756227823747,"z":-0.0004325240403678762,"y":-0.001209051653181711},"angle":{"x":-1.8131177236635392e-5,"z":2.2981836975848416e-5,"y":-4.579711310144684e-5}},{"degrees_of_freedom":[2286,2287,2288,2289,2290,2291],"id":"n381","parent":"11","position":{"x":-5,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018083982764215855,"z":-0.00045723985479132124,"y":-0.001209399351513953},"angle":{"x":-1.459638472851804e-5,"z":4.3954085485134826e-5,"y":3.891464175869695e-5}},{"degrees_of_freedom":[2292,2293,2294,2295,2296,2297],"id":"n382","parent":"11","position":{"x":-5,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002521729407194396,"z":-0.00046922733352650645,"y":-0.0012092727750666048},"angle":{"x":2.5339468695367454e-6,"z":-3.2701580055781843e-6,"y":-9.4160689462721e-5}},{"degrees_of_freedom":[2298,2299,2300,2301,2302,2303],"id":"n383","parent":"11","position":{"x":-5,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00042305285303161365,"z":-0.0004671845408405309,"y":-0.0012603490099324262},"angle":{"x":3.0584794609491294e-5,"z":4.4223960330250854e-5,"y":4.066802203016115e-5}},{"degrees_of_freedom":[2304,2305,2306,2307,2308,2309],"id":"n384","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.851608798041412e-5,"z":-0.00046170271678688194,"y":-0.001291574048072557},"angle":{"x":-3.2888046237798096e-5,"z":0.0002102982047736326,"y":-0.00042955595413113345}},{"degrees_of_freedom":[2310,2311,2312,2313,2314,2315],"id":"n385","parent":"11","position":{"x":-5,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.950142242308639e-5,"z":-0.00042753583446338147,"y":-0.0012583704411786455},"angle":{"x":-1.212190187905107e-5,"z":4.350765075424538e-5,"y":4.1704322149797756e-5}},{"degrees_of_freedom":[2316,2317,2318,2319,2320,2321],"id":"n386","parent":"11","position":{"x":-5,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011771936020852158,"z":-0.0004134028912621644,"y":-0.0012492440195259241},"angle":{"x":-2.9864502307445303e-6,"z":-2.3390556506286913e-5,"y":-0.00014800686197545792}},{"degrees_of_freedom":[2322,2323,2324,2325,2326,2327],"id":"n387","parent":"11","position":{"x":-5,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002837439340806968,"z":-0.0004132305021422939,"y":-0.0012122964600986188},"angle":{"x":2.144154012905082e-5,"z":4.323766010138185e-5,"y":3.995179788555124e-5}},{"degrees_of_freedom":[2328,2329,2330,2331,2332,2333],"id":"n388","parent":"11","position":{"x":-5,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.437615916388305e-5,"z":-0.0004190971573545463,"y":-0.0011897206958057728},"angle":{"x":-2.8985668615021267e-5,"z":0.00022497574966033387,"y":-0.0004735867811508052}},{"degrees_of_freedom":[2334,2335,2336,2337,2338,2339],"id":"n389","parent":"11","position":{"x":0,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001771350971654144,"z":-0.00022235159523676366,"y":-0.0011572473863271273},"angle":{"x":5.01383132815131e-5,"z":1.347150261625525e-5,"y":-3.447909858770025e-5}},{"degrees_of_freedom":[2340,2341,2342,2343,2344,2345],"id":"n390","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018166121912733635,"z":-0.00033324820337772223,"y":-0.0011729341247307243},"angle":{"x":-7.434882870717672e-5,"z":-4.680183619571178e-7,"y":-8.497521332725868e-5}},{"degrees_of_freedom":[2346,2347,2348,2349,2350,2351],"id":"n391","parent":"11","position":{"x":-2.857142857142857,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016446262426880574,"z":-0.00025446750780267716,"y":-0.0011516071962655108},"angle":{"x":-1.8630789482230515e-5,"z":1.2227222836163867e-5,"y":4.8973331768615707e-5}},{"degrees_of_freedom":[2352,2353,2354,2355,2356,2357],"id":"n392","parent":"11","position":{"x":-2.020305089104421,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013029868587194563,"z":-0.0002576523048920131,"y":-0.001107486634779378},"angle":{"x":3.5962036678905e-5,"z":2.8625849654370774e-5,"y":-8.339204981102675e-5}},{"degrees_of_freedom":[2358,2359,2360,2361,2362,2363],"id":"n393","parent":"11","position":{"x":0,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010904564841672007,"z":-0.00011936310413260101,"y":-0.0010662183003743262},"angle":{"x":-9.278095065598894e-5,"z":1.2764929546117408e-5,"y":-2.9995318804120347e-5}},{"degrees_of_freedom":[2364,2365,2366,2367,2368,2369],"id":"n394","parent":"11","position":{"x":2.020305089104421,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010806697111652135,"z":-0.00013635913542130198,"y":-0.001056824374771754},"angle":{"x":3.80480019775792e-5,"z":-4.82903327171227e-6,"y":2.4126192608042826e-5}},{"degrees_of_freedom":[2370,2371,2372,2373,2374,2375],"id":"n395","parent":"11","position":{"x":2.857142857142857,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001193749193397195,"z":-7.823854133938374e-5,"y":-0.0010789890818274448},"angle":{"x":-1.4247699523809276e-5,"z":1.048208191003235e-5,"y":-0.00010471104082737343}},{"degrees_of_freedom":[2376,2377,2378,2379,2380,2381],"id":"n396","parent":"11","position":{"x":2.020305089104421,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015072168745123952,"z":-0.00019537027823104491,"y":-0.0011190552817147525},"angle":{"x":-6.452468468030072e-5,"z":2.63622265722475e-5,"y":1.408404063098852e-5}},{"degrees_of_freedom":[2382,2383,2384,2385,2386,2387],"id":"n397","parent":"11","position":{"x":2.0203050891044216,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001264599722713234,"z":-0.00014036181244047626,"y":-0.000949315630216586},"angle":{"x":0.00035969892505633176,"z":0.00016313917773709693,"y":-2.507252464447903e-5}},{"degrees_of_freedom":[2388,2389,2390,2391,2392,2393],"id":"n398","parent":"11","position":{"x":3.140184917367551e-16,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011228729925324864,"z":-0.00018649148463933767,"y":-0.0010318404796718834},"angle":{"x":-2.3014951385502515e-6,"z":3.350165520353391e-5,"y":-2.624368488078287e-5}},{"degrees_of_freedom":[2394,2395,2396,2397,2398,2399],"id":"n399","parent":"11","position":{"x":-2.020305089104421,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013643143976439198,"z":-0.0002328603781761887,"y":-0.0011105133457587843},"angle":{"x":-0.00010047055856021747,"z":6.986068347523581e-5,"y":-2.742242540689141e-5}},{"degrees_of_freedom":[2400,2401,2402,2403,2404,2405],"id":"n400","parent":"11","position":{"x":-2.0203050891044216,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019620926961283917,"z":-0.00023666514684564347,"y":-0.0009922472952253326},"angle":{"x":0.00029864123154422416,"z":0.00016340839777037375,"y":-2.4061118154962704e-5}},{"degrees_of_freedom":[2406,2407,2408,2409,2410,2411],"id":"n401","parent":"11","position":{"x":-3.140184917367551e-16,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021300266187254186,"z":-0.0001929865420371054,"y":-0.0008547386564577616},"angle":{"x":-6.329533489552521e-5,"z":3.5853821211042185e-5,"y":-2.5642743865823376e-5}},{"degrees_of_freedom":[2412,2413,2414,2415,2416,2417],"id":"n402","parent":"11","position":{"x":2.020305089104421,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00019119672420612636,"z":-0.00014527090835153719,"y":-0.0008231659285276795},"angle":{"x":8.830024521671222e-5,"z":-1.8152682327878923e-5,"y":-2.9346074774148983e-5}},{"degrees_of_freedom":[2418,2419,2420,2421,2422,2423],"id":"n403","parent":"11","position":{"x":5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00026650445316536714,"z":-0.00016659636820202746,"y":-0.0011517660887452388},"angle":{"x":-1.7531227637433197e-5,"z":7.353941855941234e-6,"y":-4.7285628991607956e-5}},{"degrees_of_freedom":[2424,2425,2426,2427,2428,2429],"id":"n404","parent":"11","position":{"x":5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002873767944523551,"z":-9.584824140900433e-5,"y":-0.0010560766702162432},"angle":{"x":-2.910799473334956e-6,"z":3.109159299286871e-6,"y":-1.302602046202477e-5}},{"degrees_of_freedom":[2430,2431,2432,2433,2434,2435],"id":"n405","parent":"11","position":{"x":5,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002658106507901358,"z":-9.558383232348354e-5,"y":-0.0010429733753268894},"angle":{"x":-6.9616335919891295e-6,"z":1.8270877607324556e-5,"y":-2.3461509141102398e-5}},{"degrees_of_freedom":[2436,2437,2438,2439,2440,2441],"id":"n406","parent":"11","position":{"x":5,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00028818674113388225,"z":-0.00011947786021405673,"y":-0.001077096057287088},"angle":{"x":-2.5675308116882608e-5,"z":3.2837603018841686e-5,"y":-6.9094844818745e-5}},{"degrees_of_freedom":[2442,2443,2444,2445,2446,2447],"id":"n407","parent":"11","position":{"x":5,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033026771627675473,"z":-0.0001301913747179977,"y":-0.0010912999326878237},"angle":{"x":-8.590015251733477e-6,"z":1.6597347243781208e-5,"y":-2.7592814831659004e-5}},{"degrees_of_freedom":[2448,2449,2450,2451,2452,2453],"id":"n408","parent":"11","position":{"x":5,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001826647365552531,"z":-0.00013196840180002808,"y":-0.0010952277842540391},"angle":{"x":5.017461634894218e-6,"z":6.326215131873737e-5,"y":0.00010882753342063112}},{"degrees_of_freedom":[2454,2455,2456,2457,2458,2459],"id":"n409","parent":"11","position":{"x":5,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001264710417976154,"z":-0.0001255353418934173,"y":-0.0010714048634405879},"angle":{"x":-7.183858472032706e-6,"z":1.4271309186916212e-5,"y":-2.53072924376928e-5}},{"degrees_of_freedom":[2460,2461,2462,2463,2464,2465],"id":"n410","parent":"11","position":{"x":5,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011263354873754542,"z":-0.0001055407324558563,"y":-0.0010358261366079995},"angle":{"x":-2.169691273569597e-5,"z":3.803423851888917e-5,"y":-8.808684964047605e-5}},{"degrees_of_freedom":[2466,2467,2468,2469,2470,2471],"id":"n411","parent":"11","position":{"x":5,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.72876424003738e-5,"z":-9.686993479145808e-5,"y":-0.0010221685764907997},"angle":{"x":-7.012670325463981e-6,"z":1.594476322554344e-5,"y":-2.11761012519302e-5}},{"degrees_of_freedom":[2472,2473,2474,2475,2476,2477],"id":"n412","parent":"11","position":{"x":5,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020416759920864968,"z":-9.389061688302048e-5,"y":-0.001020216627728265},"angle":{"x":9.559609075422216e-6,"z":5.6620508637561096e-5,"y":8.944004152711306e-5}},{"degrees_of_freedom":[2478,2479,2480,2481,2482,2483],"id":"n413","parent":"11","position":{"x":-5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0003497837068908568,"z":-0.000623400701963219,"y":-0.001463180387452922},"angle":{"x":-0.00010431590579517753,"z":7.831485517031691e-5,"y":-5.2676754178526984e-5}},{"degrees_of_freedom":[2484,2485,2486,2487,2488,2489],"id":"n414","parent":"11","position":{"x":0,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.0004954333325767622,"z":-0.0004278902977995232,"y":-0.0012698082962803252},"angle":{"x":8.853501473734212e-5,"z":7.097765701926577e-5,"y":-6.978585520488575e-5}},{"degrees_of_freedom":[2490,2491,2492,2493,2494,2495],"id":"n415","parent":"11","position":{"x":2.857142857142857,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00031186681706645204,"z":-0.00027955465281216213,"y":-0.0007523070312501279},"angle":{"x":3.168441226250307e-5,"z":5.8102924469283244e-5,"y":-4.5049970407013435e-5}},{"degrees_of_freedom":[2496,2497,2498,2499,2500,2501],"id":"n416","parent":"11","position":{"x":2.0203050891044216,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036476243659549937,"z":-0.0003011976382475774,"y":-0.0011483356500388508},"angle":{"x":-0.0006318299153885454,"z":0.0002926905198059493,"y":-6.105584706066387e-5}},{"degrees_of_freedom":[2502,2503,2504,2505,2506,2507],"id":"n417","parent":"11","position":{"x":3.140184917367551e-16,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000412271932619201,"z":-0.0004036625533804349,"y":-0.0013123760000506664},"angle":{"x":9.019901363616192e-6,"z":6.61159870618384e-5,"y":-5.7003316328607103e-5}},{"degrees_of_freedom":[2508,2509,2510,2511,2512,2513],"id":"n418","parent":"11","position":{"x":-2.020305089104421,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00037454645086453073,"z":-0.0005038665607427365,"y":-0.0014613199208119083},"angle":{"x":0.00029812512678719966,"z":0.00016832999168753365,"y":-5.6627246766028196e-5}},{"degrees_of_freedom":[2514,2515,2516,2517,2518,2519],"id":"n419","parent":"11","position":{"x":-2.857142857142857,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000319729076425866,"z":-0.0005278734137225055,"y":-0.0018209018432152277},"angle":{"x":3.168421130623409e-5,"z":7.412889378824626e-5,"y":-4.982046724426034e-5}},{"degrees_of_freedom":[2520,2521,2522,2523,2524,2525],"id":"n420","parent":"11","position":{"x":-2.0203050891044216,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00026782498083137993,"z":-0.0005031519424649127,"y":-0.0013332964539179506},"angle":{"x":-0.0005000029971942348,"z":0.0002621086811901412,"y":-5.4043655697795374e-5}},{"degrees_of_freedom":[2526,2527,2528,2529,2530,2531],"id":"n421","parent":"11","position":{"x":-3.140184917367551e-16,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002293421743956572,"z":-0.00040547590958232073,"y":-0.0011313234930172044},"angle":{"x":5.434817845063815e-5,"z":6.611609163772531e-5,"y":-5.589107864887286e-5}},{"degrees_of_freedom":[2532,2533,2534,2535,2536,2537],"id":"n422","parent":"11","position":{"x":2.020305089104421,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00027100611878877316,"z":-0.0003074309876073307,"y":-0.0010203117882873112},"angle":{"x":0.0001580421603505264,"z":0.00010277724637671056,"y":-5.509986413206727e-5}},{"degrees_of_freedom":[2538,2539,2540,2541,2542,2543],"id":"n423","parent":"11","position":{"x":-5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033557607237191334,"z":-0.00039267805065696976,"y":-0.0011940042781429484},"angle":{"x":-3.2921134511506485e-5,"z":1.9066764086325878e-5,"y":-0.0001306856267869075}},{"degrees_of_freedom":[2544,2545,2546,2547,2548,2549],"id":"n424","parent":"11","position":{"x":-5,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036680259454164877,"z":-0.0004252448153707279,"y":-0.0012232019015974524},"angle":{"x":-2.125260057015066e-5,"z":6.162428095025222e-5,"y":6.918304880980428e-5}},{"degrees_of_freedom":[2550,2551,2552,2553,2554,2555],"id":"n425","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0004547679597299915,"z":-0.00045141122237252955,"y":-0.0012180787313216066},"angle":{"x":-6.10170150855949e-6,"z":1.4574792667734764e-5,"y":-6.389201949073486e-5}},{"degrees_of_freedom":[2556,2557,2558,2559,2560,2561],"id":"n426","parent":"11","position":{"x":-5,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0006671324648313395,"z":-0.0004559411311105063,"y":-0.0012695425993150824},"angle":{"x":2.5170365085887318e-5,"z":6.684296709564438e-5,"y":8.394572207043023e-5}},{"degrees_of_freedom":[2562,2563,2564,2565,2566,2567],"id":"n427","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011557738219484335,"z":-0.00044737865830328977,"y":-0.001290974592201354},"angle":{"x":-4.912221241406665e-5,"z":0.00023252749176714226,"y":-0.00038468192443818176}},{"degrees_of_freedom":[2568,2569,2570,2571,2572,2573],"id":"n428","parent":"11","position":{"x":-5,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011288329306265597,"z":-0.00039207861067276097,"y":-0.0012501338053167294},"angle":{"x":-2.02902759433715e-5,"z":6.162372604025261e-5,"y":9.870627565201302e-5}},{"degrees_of_freedom":[2574,2575,2576,2577,2578,2579],"id":"n429","parent":"11","position":{"x":-5,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017614156591249985,"z":-0.0003686509680070006,"y":-0.0012471700500712674},"angle":{"x":-6.506781141774282e-6,"z":-0.00014232181209073344,"y":-0.00047813918876288383}},{"degrees_of_freedom":[2580,2581,2582,2583,2584,2585],"id":"n430","parent":"11","position":{"x":-5,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003288610430575361,"z":-0.0003695323441146142,"y":-0.0012204291244903975},"angle":{"x":1.5979227560037976e-5,"z":5.640492359741944e-5,"y":8.394493010236467e-5}},{"degrees_of_freedom":[2586,2587,2588,2589,2590,2591],"id":"n431","parent":"11","position":{"x":-5,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016304715500747692,"z":-0.0003793662513321845,"y":-0.0012005700871571756},"angle":{"x":-3.044058709013337e-5,"z":0.0003616211103729778,"y":-0.0007793368836074831}},{"degrees_of_freedom":[2592,2593,2594,2595,2596,2597],"id":"n432","parent":"11","position":{"x":0,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036620632998999306,"z":0.0001265206631121388,"y":-0.0011459316972211892},"angle":{"x":0.000521926783143247,"z":3.555010257906492e-6,"y":0.00011902217072756837}},{"degrees_of_freedom":[2598,2599,2600,2601,2602,2603],"id":"n433","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00036028597279554747,"z":-6.978639171003413e-5,"y":-0.001148152153725814},"angle":{"x":4.2441847695042764e-5,"z":5.048377065946051e-6,"y":-7.958712388265778e-5}},{"degrees_of_freedom":[2604,2605,2606,2607,2608,2609],"id":"n434","parent":"11","position":{"x":-2.857142857142857,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00033909202464327027,"z":-0.0002221333106789961,"y":-0.0011379045097616358},"angle":{"x":3.124719021070537e-5,"z":1.2171415139189463e-5,"y":-0.0001066132848479405}},{"degrees_of_freedom":[2610,2611,2612,2613,2614,2615],"id":"n435","parent":"11","position":{"x":-2.020305089104421,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00031044447502595146,"z":-0.00019604416967892725,"y":-0.001106498519050945},"angle":{"x":-2.976706814850986e-5,"z":2.054630485846648e-5,"y":4.06882611763086e-5}},{"degrees_of_freedom":[2616,2617,2618,2619,2620,2621],"id":"n436","parent":"11","position":{"x":0,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002914500569274676,"z":-0.0002533366506432442,"y":-0.0010861205645262236},"angle":{"x":0.00010865195146078145,"z":4.680046936352767e-6,"y":-1.6646789548969762e-5}},{"degrees_of_freedom":[2622,2623,2624,2625,2626,2627],"id":"n437","parent":"11","position":{"x":2.020305089104421,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00028940851900574664,"z":-0.000128780976399749,"y":-0.0010799253608424087},"angle":{"x":-0.00019180277103496009,"z":3.3142409335365802e-6,"y":-0.00014109923594295837}},{"degrees_of_freedom":[2628,2629,2630,2631,2632,2633],"id":"n438","parent":"11","position":{"x":2.857142857142857,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00030927513062807327,"z":-0.00039820396073203827,"y":-0.001086362317263739},"angle":{"x":-0.00010442174108591179,"z":1.4143806416259603e-5,"y":6.985731008096139e-5}},{"degrees_of_freedom":[2634,2635,2636,2637,2638,2639],"id":"n439","parent":"11","position":{"x":2.020305089104421,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0003489362259299155,"z":-0.0005507084888708797,"y":-0.0011193017058367784},"angle":{"x":-0.0002587251696874035,"z":2.9473423912563578e-5,"y":0.0004423787853560225}},{"degrees_of_freedom":[2640,2641,2642,2643,2644,2645],"id":"n440","parent":"11","position":{"x":15,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2646,2647,2648,2649,2650,2651],"id":"n441","parent":"11","position":{"x":10,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2652,2653,2654,2655,2656,2657],"id":"n442","parent":"11","position":{"x":10,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2658,2659,2660,2661,2662,2663],"id":"n443","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2664,2665,2666,2667,2668,2669],"id":"n444","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2670,2671,2672,2673,2674,2675],"id":"n445","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2676,2677,2678,2679,2680,2681],"id":"n446","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2682,2683,2684,2685,2686,2687],"id":"n447","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2688,2689,2690,2691,2692,2693],"id":"n448","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2694,2695,2696,2697,2698,2699],"id":"n449","parent":"11","position":{"x":10,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2700,2701,2702,2703,2704,2705],"id":"n450","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2706,2707,2708,2709,2710,2711],"id":"n451","parent":"11","position":{"x":15,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":8.023045088831206e-5,"z":2.4683501873996646e-6,"y":-0.0005750384903405889},"angle":{"x":9.214227789691894e-6,"z":1.1203282766811428e-5,"y":-9.825590445584195e-6}},{"degrees_of_freedom":[2712,2713,2714,2715,2716,2717],"id":"n452","parent":"11","position":{"x":15,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4952816973753956e-5,"z":-7.465131385273751e-5,"y":-0.00027699837698717003},"angle":{"x":1.1440678093664258e-6,"z":-1.0753846854607912e-5,"y":1.439821233741866e-5}},{"degrees_of_freedom":[2718,2719,2720,2721,2722,2723],"id":"n453","parent":"11","position":{"x":15,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.067487219703007e-5,"z":-1.6609143612060945e-6,"y":-0.0002829002256048493},"angle":{"x":1.9539265356353546e-6,"z":-2.784265844897221e-6,"y":-4.7994366069596385e-6}},{"degrees_of_freedom":[2724,2725,2726,2727,2728,2729],"id":"n454","parent":"11","position":{"x":15,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.906180455961341e-5,"z":1.3053655900853058e-5,"y":-0.0002858828700701656},"angle":{"x":-4.416890666229981e-7,"z":-1.4873232231485742e-5,"y":-5.634787294481237e-6}},{"degrees_of_freedom":[2730,2731,2732,2733,2734,2735],"id":"n455","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.038200588443651e-5,"z":-7.770207011137102e-6,"y":-0.00037466604939587504},"angle":{"x":-4.032075549810101e-5,"z":-5.831605015405997e-5,"y":0.00011221818780100058}},{"degrees_of_freedom":[2736,2737,2738,2739,2740,2741],"id":"n456","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001936656148905043,"z":-2.2941484866447813e-5,"y":-0.000388898265657991},"angle":{"x":3.1531109937740546e-6,"z":-1.8640642430436435e-5,"y":-5.022837294090711e-6}},{"degrees_of_freedom":[2742,2743,2744,2745,2746,2747],"id":"n457","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.391332610234553e-5,"z":-4.309972164429166e-5,"y":-0.0003688693654719702},"angle":{"x":5.293325874732823e-5,"z":-5.747930693411341e-5,"y":-0.00010985315621446914}},{"degrees_of_freedom":[2748,2749,2750,2751,2752,2753],"id":"n458","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.699101175681189e-5,"z":-7.528166993736731e-5,"y":-0.00028270772408595763},"angle":{"x":-8.079802943763126e-7,"z":-1.9404936770804762e-5,"y":2.859586241952941e-6}},{"degrees_of_freedom":[2754,2755,2756,2757,2758,2759],"id":"n459","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.854714898354407e-6,"z":-4.0925077262856756e-5,"y":-0.0001961366219554462},"angle":{"x":-5.314548661712781e-5,"z":-6.638962965475668e-5,"y":0.00014077452158767185}},{"degrees_of_freedom":[2760,2761,2762,2763,2764,2765],"id":"n460","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.334316000790535e-5,"z":-2.0689945409639773e-5,"y":-0.00018099083459659752},"angle":{"x":-9.180104873089828e-8,"z":-1.5637427875342683e-5,"y":2.2475960836364916e-6}},{"degrees_of_freedom":[2766,2767,2768,2769,2770,2771],"id":"n461","parent":"11","position":{"x":15,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.172411855025744e-6,"z":-5.57715562892062e-6,"y":-0.0001984725849446615},"angle":{"x":3.811022715138987e-5,"z":-4.911011229732232e-5,"y":-9.744944690497316e-5}},{"degrees_of_freedom":[2772,2773,2774,2775,2776,2777],"id":"n462","parent":"11","position":{"x":10,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00010335797228078208,"z":-2.8481282483026242e-5,"y":-0.0005797470292849315},"angle":{"x":2.5017120166217947e-6,"z":-4.3534602604212434e-5,"y":-1.4528909238236059e-5}},{"degrees_of_freedom":[2778,2779,2780,2781,2782,2783],"id":"n463","parent":"11","position":{"x":10,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":3.913135779894378e-5,"z":-1.6705402197330846e-5,"y":-0.0005684663940655832},"angle":{"x":-1.0767627589542332e-6,"z":-5.218041069075428e-6,"y":-1.1517356759724203e-5}},{"degrees_of_freedom":[2784,2785,2786,2787,2788,2789],"id":"n464","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.085192096719362e-5,"z":-8.667648204470002e-6,"y":-0.0008600756553001551},"angle":{"x":-4.640525486975771e-6,"z":-3.394488129773467e-5,"y":-9.689781764439676e-6}},{"degrees_of_freedom":[2790,2791,2792,2793,2794,2795],"id":"n465","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.085290389875364e-5,"z":-1.2767300773251862e-5,"y":-0.0006626184963035694},"angle":{"x":0.0004953770945078302,"z":-0.0002076361539277606,"y":-7.722049593028299e-6}},{"degrees_of_freedom":[2796,2797,2798,2799,2800,2801],"id":"n466","parent":"11","position":{"x":10,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.0782790659548436e-5,"z":-2.578919348401561e-5,"y":-0.0005922150956360337},"angle":{"x":1.0452470022375097e-6,"z":-2.770685566592221e-5,"y":-9.139678210702395e-6}},{"degrees_of_freedom":[2802,2803,2804,2805,2806,2807],"id":"n467","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.931433954698719e-5,"z":-4.20970483923524e-5,"y":-0.0005267042547306298},"angle":{"x":-0.00018093969965226583,"z":-9.145096689966282e-5,"y":-1.1845036237859016e-5}},{"degrees_of_freedom":[2808,2809,2810,2811,2812,2813],"id":"n468","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.742595127983484e-5,"z":-4.94095495796782e-5,"y":-0.00036967229092976566},"angle":{"x":1.8286690196516901e-6,"z":-2.6834799372240646e-5,"y":-1.0153437272888792e-5}},{"degrees_of_freedom":[2814,2815,2816,2817,2818,2819],"id":"n469","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.077236214009273e-5,"z":-4.6211220291143707e-5,"y":-0.0005193237124709208},"angle":{"x":0.00040400184123519925,"z":-0.00016902668439064804,"y":-1.241897644334905e-5}},{"degrees_of_freedom":[2820,2821,2822,2823,2824,2825],"id":"n470","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.999550302800942e-5,"z":-2.7719081604757e-5,"y":-0.0005856240408087776},"angle":{"x":1.2616045867371326e-6,"z":-3.209592613075894e-5,"y":-9.312480893422763e-6}},{"degrees_of_freedom":[2826,2827,2828,2829,2830,2831],"id":"n471","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.238880489088021e-5,"z":-1.2496982328575339e-5,"y":-0.0006695913666708583},"angle":{"x":-0.00033114315493807094,"z":-0.00015247262740321132,"y":-9.239578679958806e-6}},{"degrees_of_freedom":[2832,2833,2834,2835,2836,2837],"id":"n472","parent":"11","position":{"x":10,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0003338941236555e-5,"z":-0.0001370529276677009,"y":-0.00019739253346328975},"angle":{"x":8.127148929141067e-5,"z":3.9057024775458475e-5,"y":-3.417397755768388e-5}},{"degrees_of_freedom":[2838,2839,2840,2841,2842,2843],"id":"n473","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6095664959042863e-5,"z":-1.8338759458385758e-11,"y":-0.00015557435430648724},"angle":{"x":-6.395801145306735e-5,"z":-1.305650669836034e-5,"y":-9.43299977840382e-5}},{"degrees_of_freedom":[2844,2845,2846,2847,2848,2849],"id":"n474","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.432432779934872e-5,"z":-5.0275802541708696e-5,"y":-0.00020685851055503985},"angle":{"x":-7.2854762073513515e-6,"z":4.279457577995127e-6,"y":4.248958857511232e-5}},{"degrees_of_freedom":[2850,2851,2852,2853,2854,2855],"id":"n475","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.665769737692256e-6,"z":-2.9437785814798312e-5,"y":-0.0002666598063638321},"angle":{"x":5.602538593394083e-6,"z":2.3769368728668067e-5,"y":1.1375189830116897e-5}},{"degrees_of_freedom":[2856,2857,2858,2859,2860,2861],"id":"n476","parent":"11","position":{"x":10,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.831965665685557e-6,"z":-1.7680318589929238e-6,"y":-0.0003465677216490409},"angle":{"x":5.4484943825791185e-5,"z":3.743872439196792e-5,"y":-8.872578540314162e-6}},{"degrees_of_freedom":[2862,2863,2864,2865,2866,2867],"id":"n477","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.7015671587357933e-6,"z":-6.528840650068556e-5,"y":-0.00038009766431700817},"angle":{"x":-1.2466186438798826e-5,"z":-2.049130803613391e-5,"y":-3.660464247125631e-5}},{"degrees_of_freedom":[2868,2869,2870,2871,2872,2873],"id":"n478","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1764691534752518e-5,"z":-7.073505522469966e-5,"y":-0.0003323622439537814},"angle":{"x":1.801591869522623e-5,"z":3.157352910385866e-6,"y":3.6985663238824164e-5}},{"degrees_of_freedom":[2874,2875,2876,2877,2878,2879],"id":"n479","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.041443943357858e-6,"z":-0.00013808371587421475,"y":-0.00027935984066142835},"angle":{"x":4.0495079981656414e-5,"z":2.677834630215975e-5,"y":-1.7283809621238643e-5}},{"degrees_of_freedom":[2880,2881,2882,2883,2884,2885],"id":"n480","parent":"11","position":{"x":10,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.35303089736292e-5,"z":-1.5008491691138772e-5,"y":-0.0004015065291200162},"angle":{"x":3.2901767160198867e-6,"z":-5.635965696523724e-7,"y":-5.235271264150474e-6}},{"degrees_of_freedom":[2886,2887,2888,2889,2890,2891],"id":"n481","parent":"11","position":{"x":7.979694910895579,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.142306105449629e-6,"z":-2.7868574783044313e-5,"y":-0.00036584327834758226},"angle":{"x":-3.5793935985328056e-6,"z":-3.584543716171198e-5,"y":-7.382668194552045e-6}},{"degrees_of_freedom":[2892,2893,2894,2895,2896,2897],"id":"n482","parent":"11","position":{"x":7.142857142857142,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.770427632349503e-5,"z":-2.6343923828186074e-5,"y":-0.0002792512259496838},"angle":{"x":-3.817864943084724e-6,"z":-3.4248912036548712e-6,"y":-7.1136382988411755e-6}},{"degrees_of_freedom":[2898,2899,2900,2901,2902,2903],"id":"n483","parent":"11","position":{"x":7.979694910895579,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.378171533208345e-6,"z":-1.29133501100245e-5,"y":-0.00019682250973299212},"angle":{"x":-5.188764016601313e-6,"z":3.149001934681484e-5,"y":-2.959245397310158e-6}},{"degrees_of_freedom":[2904,2905,2906,2907,2908,2909],"id":"n484","parent":"11","position":{"x":10,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.030671852993914e-6,"z":-3.1758810918026214e-6,"y":-0.0001642867595284442},"angle":{"x":-7.320571257417856e-6,"z":1.2992154350699266e-7,"y":-1.6431709969093227e-6}},{"degrees_of_freedom":[2910,2911,2912,2913,2914,2915],"id":"n485","parent":"11","position":{"x":12.020305089104422,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4750707690245843e-5,"z":-5.690673744360199e-6,"y":-0.00019842218995781106},"angle":{"x":-2.6575124789808596e-6,"z":-3.5250615647108965e-5,"y":-1.4471909699996617e-7}},{"degrees_of_freedom":[2916,2917,2918,2919,2920,2921],"id":"n486","parent":"11","position":{"x":12.857142857142858,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.8692552290075625e-5,"z":-1.0851261320647186e-5,"y":-0.00028589183250606016},"angle":{"x":-4.645665760518783e-7,"z":-3.908593110071477e-6,"y":4.993052593526772e-6}},{"degrees_of_freedom":[2922,2923,2924,2925,2926,2927],"id":"n487","parent":"11","position":{"x":12.020305089104422,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.819212785867943e-5,"z":-7.655097517756084e-6,"y":-0.0003696186066304923},"angle":{"x":3.4446937597210615e-6,"z":3.1883491259094635e-5,"y":-4.601201424604915e-6}},{"degrees_of_freedom":[2928,2929,2930,2931,2932,2933],"id":"n488","parent":"11","position":{"x":15,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2934,2935,2936,2937,2938,2939],"id":"n489","parent":"11","position":{"x":10,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2940,2941,2942,2943,2944,2945],"id":"n490","parent":"11","position":{"x":12.857142857142858,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2946,2947,2948,2949,2950,2951],"id":"n491","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2952,2953,2954,2955,2956,2957],"id":"n492","parent":"11","position":{"x":10,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2958,2959,2960,2961,2962,2963],"id":"n493","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2964,2965,2966,2967,2968,2969],"id":"n494","parent":"11","position":{"x":7.142857142857142,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2970,2971,2972,2973,2974,2975],"id":"n495","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2976,2977,2978,2979,2980,2981],"id":"n496","parent":"11","position":{"x":10,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2982,2983,2984,2985,2986,2987],"id":"n497","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[2988,2989,2990,2991,2992,2993],"id":"n498","parent":"11","position":{"x":15,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":2.15194958973014e-5,"z":3.61489765057133e-5,"y":-0.000570792564375898},"angle":{"x":6.452558259810067e-6,"z":1.1229477667529925e-6,"y":-9.480206388504093e-6}},{"degrees_of_freedom":[2994,2995,2996,2997,2998,2999],"id":"n499","parent":"11","position":{"x":15,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.608769718710891e-6,"z":3.040467504112373e-5,"y":-0.00028171794845582913},"angle":{"x":5.584451716549285e-6,"z":1.1503605837801873e-7,"y":-4.091199524031667e-6}},{"degrees_of_freedom":[3000,3001,3002,3003,3004,3005],"id":"n500","parent":"11","position":{"x":15,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.985421604654118e-6,"z":4.865622060748671e-5,"y":-0.0002876477723499779},"angle":{"x":4.1743227913830835e-6,"z":-2.419255649868147e-6,"y":-1.1308604406243934e-6}},{"degrees_of_freedom":[3006,3007,3008,3009,3010,3011],"id":"n501","parent":"11","position":{"x":15,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4512621058045451e-5,"z":3.3615531167446916e-5,"y":-0.00037154781247836514},"angle":{"x":-3.790421564462038e-5,"z":-1.246157976433943e-5,"y":2.4209327999378788e-5}},{"degrees_of_freedom":[3012,3013,3014,3015,3016,3017],"id":"n502","parent":"11","position":{"x":15,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.093800024795594e-5,"z":2.2716858266999497e-5,"y":-0.000388754668604636},"angle":{"x":2.1238472932316036e-6,"z":-3.17593531010634e-6,"y":-5.1182706963472236e-6}},{"degrees_of_freedom":[3018,3019,3020,3021,3022,3023],"id":"n503","parent":"11","position":{"x":15,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.10669789867996e-5,"z":8.761819373505094e-6,"y":-0.0003674909909344134},"angle":{"x":4.550753464356381e-5,"z":-1.1395997039698729e-5,"y":-2.5304289275158183e-5}},{"degrees_of_freedom":[3024,3025,3026,3027,3028,3029],"id":"n504","parent":"11","position":{"x":15,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.355968461602938e-5,"z":-2.0331326415405053e-5,"y":-0.00027936813146589833},"angle":{"x":3.663075569465201e-6,"z":-5.183953826274757e-6,"y":-4.670123170028615e-6}},{"degrees_of_freedom":[3030,3031,3032,3033,3034,3035],"id":"n505","parent":"11","position":{"x":15,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.236118173848588e-6,"z":-4.49199863792608e-6,"y":-0.00019698588204721264},"angle":{"x":-3.746510100102342e-5,"z":-1.5190603001909429e-5,"y":2.6696806562679458e-5}},{"degrees_of_freedom":[3036,3037,3038,3039,3040,3041],"id":"n506","parent":"11","position":{"x":15,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.0505074154552803e-5,"z":6.251535200814846e-6,"y":-0.00017865695145755754},"angle":{"x":1.1017216139906926e-6,"z":-4.427253753818484e-6,"y":-6.827287292663391e-7}},{"degrees_of_freedom":[3042,3043,3044,3045,3046,3047],"id":"n507","parent":"11","position":{"x":15,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3509164270471806e-6,"z":1.9676709420840868e-5,"y":-0.00019853866128445176},"angle":{"x":4.463978101651495e-5,"z":-9.801330690761912e-6,"y":-1.894673020417339e-5}},{"degrees_of_freedom":[3048,3049,3050,3051,3052,3053],"id":"n508","parent":"11","position":{"x":10,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-2.5413369561287007e-5,"z":9.336111215643926e-6,"y":-0.0005656667712033454},"angle":{"x":1.1139881192877551e-6,"z":3.921270712268578e-6,"y":-1.1386898035844068e-5}},{"degrees_of_freedom":[3054,3055,3056,3057,3058,3059],"id":"n509","parent":"11","position":{"x":12.857142857142858,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2024338633798352e-5,"z":1.6786215542338425e-5,"y":-0.0005799716136975541},"angle":{"x":-9.808879211619994e-7,"z":-1.483963009467016e-6,"y":-1.0834225897313337e-5}},{"degrees_of_freedom":[3060,3061,3062,3063,3064,3065],"id":"n510","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.969947349778464e-6,"z":1.5160976632309079e-5,"y":-0.0005696884987779661},"angle":{"x":-9.583423262053136e-6,"z":1.6511322812939694e-6,"y":-9.377939194433632e-6}},{"degrees_of_freedom":[3066,3067,3068,3069,3070,3071],"id":"n511","parent":"11","position":{"x":10,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.4132950466524624e-5,"z":1.195445901634033e-7,"y":-0.0005657246179814575},"angle":{"x":-2.82132713007659e-6,"z":-6.459850707516667e-7,"y":-9.395375586012351e-6}},{"degrees_of_freedom":[3072,3073,3074,3075,3076,3077],"id":"n512","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.320102845041162e-6,"z":-1.664137626947229e-5,"y":-0.0005669029679243076},"angle":{"x":1.6123453402593073e-5,"z":6.076332240102335e-6,"y":-1.2211214165447358e-5}},{"degrees_of_freedom":[3078,3079,3080,3081,3082,3083],"id":"n513","parent":"11","position":{"x":7.142857142857142,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.6292600959537505e-6,"z":-2.455552717958552e-5,"y":-0.0005680823527260176},"angle":{"x":-7.412371862498919e-7,"z":-4.2028940290789726e-9,"y":-1.1932202507694613e-5}},{"degrees_of_freedom":[3084,3085,3086,3087,3088,3089],"id":"n514","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.58643512688467e-5,"z":-2.083219280198386e-5,"y":-0.0005704053864837979},"angle":{"x":2.3819562056557915e-5,"z":-8.602357305984853e-6,"y":-9.905971511832606e-6}},{"degrees_of_freedom":[3090,3091,3092,3093,3094,3095],"id":"n515","parent":"11","position":{"x":10,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7284791879900033e-5,"z":-6.607554328548994e-6,"y":-0.0005705080280932488},"angle":{"x":1.2316347914079794e-6,"z":-7.953659196852725e-7,"y":-8.846492313190475e-6}},{"degrees_of_freedom":[3096,3097,3098,3099,3100,3101],"id":"n516","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.923699025901082e-5,"z":9.123173932116045e-6,"y":-0.0005738524803516316},"angle":{"x":-2.1367182385354656e-5,"z":-8.825319352012433e-6,"y":-1.1553547566237177e-5}},{"degrees_of_freedom":[3102,3103,3104,3105,3106,3107],"id":"n517","parent":"11","position":{"x":10,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.5195372733121924e-5,"z":6.992492772118253e-6,"y":-0.0003996695174489557},"angle":{"x":-5.170529042943432e-6,"z":3.819658574789103e-7,"y":-5.032684091444081e-6}},{"degrees_of_freedom":[3108,3109,3110,3111,3112,3113],"id":"n518","parent":"11","position":{"x":7.979694910895579,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0093725629322425e-5,"z":1.5821989113143888e-6,"y":-0.0003673001921712466},"angle":{"x":-3.6335338366237677e-6,"z":-3.2445073752880246e-5,"y":-3.7569740925223947e-6}},{"degrees_of_freedom":[3114,3115,3116,3117,3118,3119],"id":"n519","parent":"11","position":{"x":7.142857142857142,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.2942968009800264e-5,"z":6.027964798038736e-6,"y":-0.00028343839485272653},"angle":{"x":-5.986995620761313e-7,"z":2.5647123413817645e-6,"y":4.0159017607905845e-6}},{"degrees_of_freedom":[3120,3121,3122,3123,3124,3125],"id":"n520","parent":"11","position":{"x":7.979694910895579,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1423798979111456e-5,"z":3.752413090312551e-6,"y":-0.00019729911233040207},"angle":{"x":9.85920085677695e-7,"z":3.4370707733801426e-5,"y":6.364318425571552e-7}},{"degrees_of_freedom":[3126,3127,3128,3129,3130,3131],"id":"n521","parent":"11","position":{"x":10,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.3771234239734015e-6,"z":1.0517942357055155e-6,"y":-0.00016375171418051967},"angle":{"x":6.927439960482042e-6,"z":-1.6999638161502206e-7,"y":-1.3867391468225807e-6}},{"degrees_of_freedom":[3132,3133,3134,3135,3136,3137],"id":"n522","parent":"11","position":{"x":12.020305089104422,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.222245494886251e-6,"z":9.945463068019458e-6,"y":-0.00019653086687446193},"angle":{"x":3.4460345080327695e-6,"z":-3.1957164208841944e-5,"y":-3.266672513617773e-6}},{"degrees_of_freedom":[3138,3139,3140,3141,3142,3143],"id":"n523","parent":"11","position":{"x":12.857142857142858,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.254666855385976e-5,"z":2.0070375541509232e-5,"y":-0.00027942587599829417},"angle":{"x":2.856080767298404e-6,"z":2.1690197158484657e-6,"y":-5.460265308977253e-6}},{"degrees_of_freedom":[3144,3145,3146,3147,3148,3149],"id":"n524","parent":"11","position":{"x":12.020305089104422,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2914673668393546e-6,"z":2.1056575582383262e-5,"y":-0.00036495926889299526},"angle":{"x":3.6004639022932566e-6,"z":3.471819768652911e-5,"y":-8.026683557528605e-6}},{"degrees_of_freedom":[3150,3151,3152,3153,3154,3155],"id":"n525","parent":"11","position":{"x":15,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3156,3157,3158,3159,3160,3161],"id":"n526","parent":"11","position":{"x":10,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3162,3163,3164,3165,3166,3167],"id":"n527","parent":"11","position":{"x":12.857142857142858,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3168,3169,3170,3171,3172,3173],"id":"n528","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3174,3175,3176,3177,3178,3179],"id":"n529","parent":"11","position":{"x":10,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3180,3181,3182,3183,3184,3185],"id":"n530","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3186,3187,3188,3189,3190,3191],"id":"n531","parent":"11","position":{"x":7.142857142857142,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3192,3193,3194,3195,3196,3197],"id":"n532","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3198,3199,3200,3201,3202,3203],"id":"n533","parent":"11","position":{"x":10,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3204,3205,3206,3207,3208,3209],"id":"n534","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[3210,3211,3212,3213,3214,3215],"id":"n535","parent":"11","position":{"x":15,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-4.708915149258359e-5,"z":6.785723640022371e-5,"y":-0.0005833161908804671},"angle":{"x":5.141042481372717e-6,"z":-5.008312996641988e-6,"y":-9.231873685147082e-6}},{"degrees_of_freedom":[3216,3217,3218,3219,3220,3221],"id":"n536","parent":"11","position":{"x":15,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.152651085431032e-6,"z":0.00010310456399835923,"y":-0.0002912489147305187},"angle":{"x":5.774064182489943e-6,"z":7.882482849515374e-6,"y":1.007346448143532e-5}},{"degrees_of_freedom":[3222,3223,3224,3225,3226,3227],"id":"n537","parent":"11","position":{"x":15,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5038918665121486e-5,"z":0.00010337944730198492,"y":-0.0002993725213370609},"angle":{"x":8.093391914848736e-6,"z":1.1781914152291787e-5,"y":3.2349436095007924e-6}},{"degrees_of_freedom":[3228,3229,3230,3231,3232,3233],"id":"n538","parent":"11","position":{"x":15,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.42878250141037e-5,"z":8.427077283165074e-5,"y":-0.0003825107651393795},"angle":{"x":-4.565391865622523e-5,"z":3.4484727475786923e-5,"y":-6.580087946131026e-5}},{"degrees_of_freedom":[3234,3235,3236,3237,3238,3239],"id":"n539","parent":"11","position":{"x":15,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011191029601056807,"z":6.740104275818083e-5,"y":-0.00039548071521530183},"angle":{"x":3.643900104904175e-6,"z":1.1785641903135466e-5,"y":-6.420654535910821e-6}},{"degrees_of_freedom":[3240,3241,3242,3243,3244,3245],"id":"n540","parent":"11","position":{"x":15,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.483972618382964e-5,"z":4.8818747864037346e-5,"y":-0.00037377335284498927},"angle":{"x":4.8292072487753814e-5,"z":3.168636077313022e-5,"y":5.468956890718897e-5}},{"degrees_of_freedom":[3246,3247,3248,3249,3250,3251],"id":"n541","parent":"11","position":{"x":15,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.296859565556231e-6,"z":1.4393407716734524e-5,"y":-0.00027966252710780697},"angle":{"x":7.882913348348152e-6,"z":7.430254759319344e-6,"y":-9.094651693525199e-6}},{"degrees_of_freedom":[3252,3253,3254,3255,3256,3257],"id":"n542","parent":"11","position":{"x":15,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0245084390777274e-6,"z":2.0298056291555565e-5,"y":-0.00019790381459708836},"angle":{"x":-3.098780016568209e-5,"z":2.5243368901869764e-5,"y":-5.4655342618191696e-5}},{"degrees_of_freedom":[3258,3259,3260,3261,3262,3263],"id":"n543","parent":"11","position":{"x":15,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.334710229078927e-5,"z":3.23396002781246e-5,"y":-0.00018445672823985272},"angle":{"x":4.702433245539674e-6,"z":7.426471513386819e-6,"y":5.609235299886852e-7}},{"degrees_of_freedom":[3264,3265,3266,3267,3268,3269],"id":"n544","parent":"11","position":{"x":15,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2042566348285031e-6,"z":5.583904232552922e-5,"y":-0.00020452545867302832},"angle":{"x":6.164644672689748e-5,"z":3.856745970428253e-5,"y":8.381848226626973e-5}},{"degrees_of_freedom":[3270,3271,3272,3273,3274,3275],"id":"n545","parent":"11","position":{"x":10,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-8.94734391743743e-5,"z":2.0237728507733044e-5,"y":-0.0005728474530512086},"angle":{"x":-7.669631489471777e-6,"z":3.982332932787989e-5,"y":-1.4000817354418014e-5}},{"degrees_of_freedom":[3276,3277,3278,3279,3280,3281],"id":"n546","parent":"11","position":{"x":12.857142857142858,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.2637953470495785e-5,"z":4.207167407266307e-5,"y":-0.0003880555327787635},"angle":{"x":-6.6679038953875815e-6,"z":2.796990065962462e-5,"y":-1.1806697837260342e-5}},{"degrees_of_freedom":[3282,3283,3284,3285,3286,3287],"id":"n547","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.694445883454402e-5,"z":3.7717696453805425e-5,"y":-0.0005403915982376212},"angle":{"x":-0.0003674947907365894,"z":0.00015868058477893973,"y":-1.2745209597350964e-5}},{"degrees_of_freedom":[3288,3289,3290,3291,3292,3293],"id":"n548","parent":"11","position":{"x":10,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.652238174837184e-5,"z":1.9609137362931967e-5,"y":-0.0006133983069286636},"angle":{"x":1.9911086634161944e-5,"z":2.485121149460081e-5,"y":-8.659790456854178e-6}},{"degrees_of_freedom":[3294,3295,3296,3297,3298,3299],"id":"n549","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.979086044227369e-5,"z":5.162205821808963e-6,"y":-0.0006573217546461948},"angle":{"x":0.0001689229931098331,"z":7.65226533861185e-5,"y":-8.708543588441118e-6}},{"degrees_of_freedom":[3300,3301,3302,3303,3304,3305],"id":"n550","parent":"11","position":{"x":7.142857142857142,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.9148379666333274e-5,"z":8.582731895021854e-7,"y":-0.0007411505966101698},"angle":{"x":2.9725550067093073e-6,"z":1.5723350122926713e-5,"y":-1.1082329154722248e-5}},{"degrees_of_freedom":[3306,3307,3308,3309,3310,3311],"id":"n551","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7806728237027724e-5,"z":5.191308046422928e-6,"y":-0.0006485162489495868},"angle":{"x":-0.00031355522245799325,"z":0.00012610579115315403,"y":-7.514859275923099e-6}},{"degrees_of_freedom":[3312,3313,3314,3315,3316,3317],"id":"n552","parent":"11","position":{"x":10,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.7935979924599386e-5,"z":1.7065774158067262e-5,"y":-0.0006147749988312224},"angle":{"x":-1.4727592186907277e-5,"z":1.8842242180109703e-5,"y":-8.022942356937774e-6}},{"degrees_of_freedom":[3318,3319,3320,3321,3322,3323],"id":"n553","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.1471112202169766e-5,"z":3.5239369907087436e-5,"y":-0.0005553754368855145},"angle":{"x":0.0002686645091839521,"z":0.00012217547993013242,"y":-1.2416473716050825e-5}},{"degrees_of_freedom":[3324,3325,3326,3327,3328,3329],"id":"n554","parent":"11","position":{"x":10,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1164039638887296e-5,"z":-3.4546179097356765e-6,"y":-0.0003446680794591971},"angle":{"x":-6.15599200222012e-5,"z":-3.8466128329627816e-5,"y":-1.1540677701904341e-5}},{"degrees_of_freedom":[3330,3331,3332,3333,3334,3335],"id":"n555","parent":"11","position":{"x":7.979694910895579,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.14849154666071e-6,"z":2.4745368853581194e-5,"y":-0.00026352344762267454},"angle":{"x":-4.975470885143695e-6,"z":-2.435182369028264e-5,"y":1.1897381156640619e-5}},{"degrees_of_freedom":[3336,3337,3338,3339,3340,3341],"id":"n556","parent":"11","position":{"x":7.142857142857142,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3491192699546965e-5,"z":4.4753507064878004e-5,"y":-0.00020371042112465518},"angle":{"x":6.124160619221104e-6,"z":-5.839087042415999e-6,"y":3.869424152170395e-5}},{"degrees_of_freedom":[3342,3343,3344,3345,3346,3347],"id":"n557","parent":"11","position":{"x":7.979694910895579,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8113012081696405e-5,"z":2.5619957667808566e-11,"y":-0.00015411173139906446},"angle":{"x":5.693284045843424e-5,"z":1.1971523046415296e-5,"y":-8.396874896333411e-5}},{"degrees_of_freedom":[3348,3349,3350,3351,3352,3353],"id":"n558","parent":"11","position":{"x":10,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.550410835373771e-5,"z":0.00012199897755550863,"y":-0.0001980368262522724},"angle":{"x":-7.32179325857938e-5,"z":-4.040662878261127e-5,"y":-3.005854071198047e-5}},{"degrees_of_freedom":[3354,3355,3356,3357,3358,3359],"id":"n559","parent":"11","position":{"x":12.020305089104422,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6413547020582213e-5,"z":0.0001214548496776376,"y":-0.00028280705472706765},"angle":{"x":-2.2323004552336857e-5,"z":-2.7364325529739392e-5,"y":-8.977147098463546e-6}},{"degrees_of_freedom":[3360,3361,3362,3363,3364,3365],"id":"n560","parent":"11","position":{"x":12.857142857142858,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.051984086082982e-6,"z":8.386799727430935e-5,"y":-0.0003367383323044217},"angle":{"x":-1.2393697908789196e-5,"z":-5.772823435443907e-6,"y":1.499429649839814e-5}},{"degrees_of_freedom":[3366,3367,3368,3369,3370,3371],"id":"n561","parent":"11","position":{"x":12.020305089104422,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.09210652330102e-6,"z":7.137673977580794e-5,"y":-0.0003819837878023203},"angle":{"x":1.1056444571364418e-5,"z":1.7370499321555353e-5,"y":-4.16193603413964e-5}},{"degrees_of_freedom":[3372,3373,3374,3375,3376,3377],"id":"n562","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.426826366281822e-5,"z":-7.21855237958464e-6,"y":-0.0008016595792046271},"angle":{"x":-9.417682890257723e-8,"z":-2.593416929139971e-5,"y":-1.2387770622337185e-5}},{"degrees_of_freedom":[3378,3379,3380,3381,3382,3383],"id":"n563","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.641816429033099e-5,"z":-1.2514972155515491e-5,"y":-0.0006529923980384279},"angle":{"x":-0.0004477358936513636,"z":-0.00018454706970454546,"y":-6.898952575636185e-6}},{"degrees_of_freedom":[3384,3385,3386,3387,3388,3389],"id":"n564","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.168852929360208e-5,"z":-4.5775640203271894e-5,"y":-0.0005048117234115737},"angle":{"x":0.0003365336475021304,"z":-0.00015265233507450948,"y":-1.1470236129062242e-5}},{"degrees_of_freedom":[3390,3391,3392,3393,3394,3395],"id":"n565","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.843784448022896e-5,"z":-5.1628299311069725e-5,"y":-0.00032550707009109054},"angle":{"x":7.519800444089162e-6,"z":-3.289126406152608e-5,"y":-1.2670408604632796e-5}},{"degrees_of_freedom":[3396,3397,3398,3399,3400,3401],"id":"n566","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.373926160958906e-5,"z":-4.669332380357958e-5,"y":-0.0005221025274379835},"angle":{"x":-0.00044078688250330045,"z":-0.00018795448469741447,"y":-1.1945620360440594e-5}},{"degrees_of_freedom":[3402,3403,3404,3405,3406,3407],"id":"n567","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.781590691221995e-5,"z":-9.932689872485829e-6,"y":-0.0006539362894660219},"angle":{"x":7.656287061650786e-5,"z":-5.268886411191988e-5,"y":-8.519483648203783e-6}},{"degrees_of_freedom":[3408,3409,3410,3411,3412,3413],"id":"n568","parent":"11","position":{"x":15,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00017091811949380864,"z":5.516178750566903e-5,"y":-0.0009678931340729208},"angle":{"x":1.0186548633193767e-5,"z":5.280178587557459e-6,"y":-2.145179720664338e-5}},{"degrees_of_freedom":[3414,3415,3416,3417,3418,3419],"id":"n569","parent":"11","position":{"x":15,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019982438687279067,"z":-1.66420157473815e-5,"y":-0.000783387838046066},"angle":{"x":-2.019677812077863e-6,"z":-9.529736209198959e-6,"y":-1.7228031034404252e-5}},{"degrees_of_freedom":[3420,3421,3422,3423,3424,3425],"id":"n570","parent":"11","position":{"x":15,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.201500088176075e-5,"z":3.905898461278585e-5,"y":-0.0007765843518781197},"angle":{"x":3.720122326089462e-6,"z":-4.068690923021186e-6,"y":-9.515451624664266e-6}},{"degrees_of_freedom":[3426,3427,3428,3429,3430,3431],"id":"n571","parent":"11","position":{"x":15,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.314886864420822e-5,"z":4.637203268033187e-5,"y":-0.0007809225604438738},"angle":{"x":3.736874406116376e-6,"z":-1.8075682606415743e-5,"y":-7.841188943430397e-6}},{"degrees_of_freedom":[3432,3433,3434,3435,3436,3437],"id":"n572","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014374037873456067,"z":3.7907445643432395e-5,"y":-0.0008375326097868306},"angle":{"x":-2.4217221255838895e-5,"z":-6.64617310269411e-5,"y":0.00012454930058101887}},{"degrees_of_freedom":[3438,3439,3440,3441,3442,3443],"id":"n573","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027790935048753386,"z":2.7784028062473234e-5,"y":-0.0008438228909747146},"angle":{"x":4.282417000389482e-6,"z":-1.840653620794295e-5,"y":-1.5837406957653392e-5}},{"degrees_of_freedom":[3444,3445,3446,3447,3448,3449],"id":"n574","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002017179217882312,"z":1.1529759663792172e-5,"y":-0.0008293366144569847},"angle":{"x":3.9454302583859965e-5,"z":-6.552590902815507e-5,"y":-0.0001446450437499726}},{"degrees_of_freedom":[3450,3451,3452,3453,3454,3455],"id":"n575","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016517511959323496,"z":-1.6678228758297256e-5,"y":-0.000766954642846437},"angle":{"x":3.4198454260295522e-6,"z":-2.2105736723461942e-5,"y":-1.7367985797683076e-5}},{"degrees_of_freedom":[3456,3457,3458,3459,3460,3461],"id":"n576","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.95639408460452e-5,"z":-9.924928909320332e-7,"y":-0.0007101020068222646},"angle":{"x":-3.1636186741070856e-5,"z":-7.235171595341248e-5,"y":0.00012921534691953115}},{"degrees_of_freedom":[3462,3463,3464,3465,3466,3467],"id":"n577","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.680479408683178e-5,"z":1.0844104365052235e-5,"y":-0.0007023230405438619},"angle":{"x":3.2358838033472624e-6,"z":-2.177476931755194e-5,"y":-9.37179353093395e-6}},{"degrees_of_freedom":[3468,3469,3470,3471,3472,3473],"id":"n578","parent":"11","position":{"x":15,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.568096303028854e-5,"z":2.396878684179556e-5,"y":-0.0007179781851209504},"angle":{"x":3.3293097105345643e-5,"z":-6.152260883677905e-5,"y":-0.0001262617382213999}},{"degrees_of_freedom":[3474,3475,3476,3477,3478,3479],"id":"n579","parent":"11","position":{"x":10,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00024447420717906774,"z":-2.702812841149856e-5,"y":-0.0009945360318334422},"angle":{"x":-5.739405365243716e-6,"z":-2.4168820574161408e-5,"y":-3.5335712991909334e-5}},{"degrees_of_freedom":[3480,3481,3482,3483,3484,3485],"id":"n580","parent":"11","position":{"x":10,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":8.231889118939269e-5,"z":-1.9130357129103303e-5,"y":-0.0009576034344806075},"angle":{"x":-4.5302413402297643e-7,"z":-2.9732669163405634e-6,"y":-2.6989037850366503e-5}},{"degrees_of_freedom":[3486,3487,3488,3489,3490,3491],"id":"n581","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016073359975310854,"z":2.107342266087423e-5,"y":-0.001110609649401939},"angle":{"x":-1.3819400483050901e-6,"z":-1.656358530836337e-5,"y":-2.5731632249778144e-5}},{"degrees_of_freedom":[3492,3493,3494,3495,3496,3497],"id":"n582","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001331774065842983,"z":1.0331302596773017e-5,"y":-0.0010161469907033923},"angle":{"x":0.0002444972381843459,"z":-0.00010193137630164193,"y":-2.1333951550318324e-5}},{"degrees_of_freedom":[3498,3499,3500,3501,3502,3503],"id":"n583","parent":"11","position":{"x":10,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011408501902665826,"z":-2.554050681441632e-5,"y":-0.000983274923490274},"angle":{"x":4.405393303963602e-7,"z":-1.2406292399543828e-5,"y":-2.0836270308826566e-5}},{"degrees_of_freedom":[3504,3505,3506,3507,3508,3509],"id":"n584","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013173086294535633,"z":-6.256544965107623e-5,"y":-0.0009537091181117702},"angle":{"x":-0.00011456482677710606,"z":-5.2743447324082404e-5,"y":-2.465436855070259e-5}},{"degrees_of_freedom":[3510,3511,3512,3513,3514,3515],"id":"n585","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015892196108542337,"z":-7.553210197794122e-5,"y":-0.0008854276709633762},"angle":{"x":1.0949081782106576e-6,"z":-1.141743984288463e-5,"y":-2.6347233430741662e-5}},{"degrees_of_freedom":[3516,3517,3518,3519,3520,3521],"id":"n586","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018979869998731838,"z":-6.596583041718999e-5,"y":-0.0009476312263258658},"angle":{"x":0.0002051449304343454,"z":-8.312589354991006e-5,"y":-2.4334306635520612e-5}},{"degrees_of_freedom":[3522,3523,3524,3525,3526,3527],"id":"n587","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020775097250163804,"z":-2.6398934179615368e-5,"y":-0.0009746379936299213},"angle":{"x":2.5823534990893125e-6,"z":-1.4384691644762384e-5,"y":-2.1311551559339617e-5}},{"degrees_of_freedom":[3528,3529,3530,3531,3532,3533],"id":"n588","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019046502359589863,"z":1.0954723230834915e-5,"y":-0.0010157742182581096},"angle":{"x":-0.00021114668425141253,"z":-9.229023804419723e-5,"y":-2.3133861453009773e-5}},{"degrees_of_freedom":[3534,3535,3536,3537,3538,3539],"id":"n589","parent":"11","position":{"x":10,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020311660967047357,"z":-3.0717502053815504e-5,"y":-0.0007455314514731714},"angle":{"x":-6.427341383121176e-7,"z":2.509828827202386e-5,"y":-1.9591676133932174e-5}},{"degrees_of_freedom":[3540,3541,3542,3543,3544,3545],"id":"n590","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020070833717370472,"z":8.325800854048592e-6,"y":-0.0007253690734543904},"angle":{"x":-1.0436090908136584e-6,"z":-1.575264070083769e-5,"y":-1.9757729498501968e-5}},{"degrees_of_freedom":[3546,3547,3548,3549,3550,3551],"id":"n591","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020891584291997544,"z":2.2751391370243003e-5,"y":-0.0007559055634263631},"angle":{"x":-1.989362525491163e-5,"z":1.7259517467862756e-6,"y":-6.526566345782956e-5}},{"degrees_of_freedom":[3552,3553,3554,3555,3556,3557],"id":"n592","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019424496720512295,"z":-7.205657468949912e-5,"y":-0.0007887231324907274},"angle":{"x":-5.454228845570368e-5,"z":1.8238476841497444e-5,"y":1.8383610476618235e-5}},{"degrees_of_freedom":[3558,3559,3560,3561,3562,3563],"id":"n593","parent":"11","position":{"x":10,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018178647312571517,"z":-8.055911241786047e-5,"y":-0.000844470386713152},"angle":{"x":-4.628334315430637e-6,"z":2.5794091513916088e-5,"y":-2.2914208608479487e-6}},{"degrees_of_freedom":[3564,3565,3566,3567,3568,3569],"id":"n594","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001837804699981072,"z":-8.131532216350268e-5,"y":-0.0008688168508482439},"angle":{"x":2.498109511225621e-5,"z":-1.2311531059672623e-5,"y":9.973199048739428e-6}},{"degrees_of_freedom":[3570,3571,3572,3573,3574,3575],"id":"n595","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017979680717754488,"z":-0.00012343879613542074,"y":-0.0008373979039414395},"angle":{"x":-2.5933695231230757e-6,"z":2.3094123979005166e-6,"y":-5.659742646515982e-5}},{"degrees_of_freedom":[3576,3577,3578,3579,3580,3581],"id":"n596","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019367661542422595,"z":-7.0836531340539e-5,"y":-0.0008014416613315763},"angle":{"x":-2.1500235024502803e-5,"z":1.7998951176240147e-5,"y":-1.0952219907804192e-5}},{"degrees_of_freedom":[3582,3583,3584,3585,3586,3587],"id":"n597","parent":"11","position":{"x":10,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.97540782938346e-5,"z":-1.767756162668442e-5,"y":-0.0008491353234153903},"angle":{"x":4.653490809056696e-6,"z":-1.0197721536418888e-7,"y":-1.7261579062295607e-5}},{"degrees_of_freedom":[3588,3589,3590,3591,3592,3593],"id":"n598","parent":"11","position":{"x":7.979694910895579,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.418520944482578e-5,"z":-5.536921088214315e-5,"y":-0.0008257589917103045},"angle":{"x":-5.213503666370492e-6,"z":-2.4942328190982738e-5,"y":-1.9750511260242318e-5}},{"degrees_of_freedom":[3594,3595,3596,3597,3598,3599],"id":"n599","parent":"11","position":{"x":7.142857142857142,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5586843452427796e-5,"z":-6.102719940360369e-5,"y":-0.0007656711948294632},"angle":{"x":-2.3813257623330326e-6,"z":-3.471434712463105e-6,"y":-1.230875925414771e-5}},{"degrees_of_freedom":[3600,3601,3602,3603,3604,3605],"id":"n600","parent":"11","position":{"x":7.979694910895579,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.293514044298007e-5,"z":-4.608431946275558e-5,"y":-0.0007080888344332693},"angle":{"x":-1.8175474787601668e-6,"z":2.3253676576406844e-5,"y":-1.3065568867263294e-5}},{"degrees_of_freedom":[3606,3607,3608,3609,3610,3611],"id":"n601","parent":"11","position":{"x":10,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.4652287772066984e-5,"z":-1.8134549785475337e-5,"y":-0.0006849202577480193},"angle":{"x":-3.0935920261252287e-6,"z":-4.11240271532019e-7,"y":-1.2561026584769448e-5}},{"degrees_of_freedom":[3612,3613,3614,3615,3616,3617],"id":"n602","parent":"11","position":{"x":12.020305089104422,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.879607041322757e-5,"z":4.637550184911173e-6,"y":-0.0007112111149093482},"angle":{"x":-2.109096660245509e-8,"z":-2.6840071261332993e-5,"y":-1.1264341890311966e-5}},{"degrees_of_freedom":[3618,3619,3620,3621,3622,3623],"id":"n603","parent":"11","position":{"x":12.857142857142858,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.897580353246833e-5,"z":1.4268392743572605e-5,"y":-0.0007721072706696569},"angle":{"x":1.939095319204391e-6,"z":-3.7910290051294583e-6,"y":-6.97481875951336e-6}},{"degrees_of_freedom":[3624,3625,3626,3627,3628,3629],"id":"n604","parent":"11","position":{"x":12.020305089104422,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.301434257525452e-5,"z":1.2225653045264924e-5,"y":-0.0008279673965275871},"angle":{"x":5.499858890099634e-6,"z":2.1339150202390385e-5,"y":-1.6014044616134246e-5}},{"degrees_of_freedom":[3630,3631,3632,3633,3634,3635],"id":"n605","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.5578685778414275e-5,"z":1.2065071229426639e-5,"y":-0.0005729161991790029},"angle":{"x":-2.4938118813308005e-5,"z":-9.914049067562114e-6,"y":-9.61195833145782e-6}},{"degrees_of_freedom":[3636,3637,3638,3639,3640,3641],"id":"n606","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.044766881963554e-5,"z":-2.2244740789709132e-5,"y":-0.0005689807631382985},"angle":{"x":3.087040022754311e-5,"z":-1.1359638923856006e-5,"y":-8.291528316846894e-6}},{"degrees_of_freedom":[3642,3643,3644,3645,3646,3647],"id":"n607","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.1628229769678852e-5,"z":-1.9414752774988558e-5,"y":-0.0005661363631568797},"angle":{"x":-3.8069163182669636e-6,"z":-1.112409140338417e-6,"y":-1.0071929534471181e-5}},{"degrees_of_freedom":[3648,3649,3650,3651,3652,3653],"id":"n608","parent":"11","position":{"x":15,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":2.6426765204745604e-5,"z":7.837008077579305e-5,"y":-0.0009632190786334003},"angle":{"x":5.530003140068097e-6,"z":4.385840157210569e-7,"y":-2.1818195400722282e-5}},{"degrees_of_freedom":[3654,3655,3656,3657,3658,3659],"id":"n609","parent":"11","position":{"x":15,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4999655776040488e-5,"z":7.502546473085751e-5,"y":-0.0007729427162196642},"angle":{"x":4.525457750655463e-6,"z":-2.8836189506382734e-7,"y":-9.939167006291284e-6}},{"degrees_of_freedom":[3660,3661,3662,3663,3664,3665],"id":"n610","parent":"11","position":{"x":15,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.12293503509644e-6,"z":8.416995006905096e-5,"y":-0.000774803680379082},"angle":{"x":3.857926517870165e-6,"z":-3.7409116695892397e-7,"y":-1.0846944462490225e-5}},{"degrees_of_freedom":[3666,3667,3668,3669,3670,3671],"id":"n611","parent":"11","position":{"x":15,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9526410679464498e-6,"z":7.453095678395899e-5,"y":-0.0008310196414244803},"angle":{"x":-2.567714534253176e-5,"z":-1.167079391472451e-5,"y":1.71149578219268e-5}},{"degrees_of_freedom":[3672,3673,3674,3675,3676,3677],"id":"n612","parent":"11","position":{"x":15,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.94395158823498e-5,"z":6.572699779297506e-5,"y":-0.0008409072679332685},"angle":{"x":2.0564151122026006e-6,"z":-1.567792233954788e-6,"y":-1.545068253761784e-5}},{"degrees_of_freedom":[3678,3679,3680,3681,3682,3683],"id":"n613","parent":"11","position":{"x":15,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.900876796731704e-5,"z":5.385591243970679e-5,"y":-0.0008271458739461374},"angle":{"x":3.3356754080044695e-5,"z":-7.372496037327261e-6,"y":-2.7878830641172655e-5}},{"degrees_of_freedom":[3684,3685,3686,3687,3688,3689],"id":"n614","parent":"11","position":{"x":15,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.266259303587101e-5,"z":3.0295856862426103e-5,"y":-0.0007652474229085228},"angle":{"x":4.053998023900473e-6,"z":-3.974563107427058e-6,"y":-1.4277972748194778e-5}},{"degrees_of_freedom":[3690,3691,3692,3693,3694,3695],"id":"n615","parent":"11","position":{"x":15,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.241972204078886e-5,"z":4.033287539163243e-5,"y":-0.0007083918746957847},"angle":{"x":-2.684453667483044e-5,"z":-1.5008933603553345e-5,"y":2.0921986687874395e-5}},{"degrees_of_freedom":[3696,3697,3698,3699,3700,3701],"id":"n616","parent":"11","position":{"x":15,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.297203333827636e-6,"z":4.903385730879738e-5,"y":-0.0006977468003199332},"angle":{"x":2.163464035260237e-6,"z":-2.7808440113729124e-6,"y":-9.674267407446329e-6}},{"degrees_of_freedom":[3702,3703,3704,3705,3706,3707],"id":"n617","parent":"11","position":{"x":15,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.044243513838086e-6,"z":6.064591505005215e-5,"y":-0.0007126261766928376},"angle":{"x":3.3993484208412696e-5,"z":-5.066618847337184e-6,"y":-2.0129423711874116e-5}},{"degrees_of_freedom":[3708,3709,3710,3711,3712,3713],"id":"n618","parent":"11","position":{"x":10,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-6.20204061688515e-5,"z":-2.2700580614468657e-6,"y":-0.0009528604775244103},"angle":{"x":-8.294093000207425e-7,"z":2.7429456242146813e-6,"y":-2.665881779877385e-5}},{"degrees_of_freedom":[3714,3715,3716,3717,3718,3719],"id":"n619","parent":"11","position":{"x":12.857142857142858,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6146323527200494e-5,"z":3.5711576131289476e-5,"y":-0.0009674343650589919},"angle":{"x":-4.818584891633877e-7,"z":-1.0085403932687289e-6,"y":-2.5357209913956478e-5}},{"degrees_of_freedom":[3720,3721,3722,3723,3724,3725],"id":"n620","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.54466506024842e-5,"z":2.6976490197988755e-5,"y":-0.0009602317986618644},"angle":{"x":-1.166969717076526e-5,"z":2.7023232553716862e-6,"y":-2.301193357037298e-5}},{"degrees_of_freedom":[3726,3727,3728,3729,3730,3731],"id":"n621","parent":"11","position":{"x":10,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.607322552035794e-5,"z":-8.795425604077395e-6,"y":-0.0009564763470693368},"angle":{"x":-3.939996275941526e-6,"z":-2.751763744038939e-7,"y":-2.026136098828836e-5}},{"degrees_of_freedom":[3732,3733,3734,3735,3736,3737],"id":"n622","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8367924823639164e-5,"z":-4.464489686898849e-5,"y":-0.0009595493072308529},"angle":{"x":1.1732555202564423e-5,"z":5.4495986146597825e-6,"y":-2.370438214170449e-5}},{"degrees_of_freedom":[3738,3739,3740,3741,3742,3743],"id":"n623","parent":"11","position":{"x":7.142857142857142,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.537172221533086e-6,"z":-5.794483254598575e-5,"y":-0.0009667711636613451},"angle":{"x":-1.1079405457796066e-6,"z":9.707438562076594e-7,"y":-2.6645173953144315e-5}},{"degrees_of_freedom":[3744,3745,3746,3747,3748,3749],"id":"n624","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.613205364387823e-5,"z":-4.827921682455884e-5,"y":-0.0009637999485559923},"angle":{"x":1.4841871542849506e-5,"z":-4.440148916458645e-6,"y":-2.2955983346751106e-5}},{"degrees_of_freedom":[3750,3751,3752,3753,3754,3755],"id":"n625","parent":"11","position":{"x":10,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.5789703910760095e-5,"z":-1.2167989994528081e-5,"y":-0.0009613763831846027},"angle":{"x":2.0042341344210975e-6,"z":1.1506004962542456e-7,"y":-2.007238898472375e-5}},{"degrees_of_freedom":[3756,3757,3758,3759,3760,3761],"id":"n626","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.888703050765429e-5,"z":2.2819354112634235e-5,"y":-0.0009631839170555301},"angle":{"x":-7.655111280185455e-6,"z":-3.4791699767304753e-6,"y":-2.2893794315838374e-5}},{"degrees_of_freedom":[3762,3763,3764,3765,3766,3767],"id":"n627","parent":"11","position":{"x":10,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.173665870619403e-5,"z":3.1093235373761235e-6,"y":-0.000845089390140098},"angle":{"x":-3.0851058764777732e-6,"z":3.1825248013064676e-7,"y":-1.7257720688690526e-5}},{"degrees_of_freedom":[3768,3769,3770,3771,3772,3773],"id":"n628","parent":"11","position":{"x":7.979694910895579,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.498110902068216e-5,"z":-2.8134854791184445e-5,"y":-0.0008242396575261883},"angle":{"x":-9.291878623784822e-6,"z":-2.141418643486219e-5,"y":-1.8284403930067928e-5}},{"degrees_of_freedom":[3774,3775,3776,3777,3778,3779],"id":"n629","parent":"11","position":{"x":7.142857142857142,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.166195121694534e-5,"z":-2.4151586331416236e-5,"y":-0.0007684096507216585},"angle":{"x":-3.806163140308406e-6,"z":3.354483629916715e-6,"y":-4.123121208472454e-6}},{"degrees_of_freedom":[3780,3781,3782,3783,3784,3785],"id":"n630","parent":"11","position":{"x":7.979694910895579,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.217086307334257e-5,"z":-1.3267552968984843e-5,"y":-0.0007078506953451705},"angle":{"x":2.6008239195599106e-7,"z":2.6715451404764758e-5,"y":-1.3022307069462346e-5}},{"degrees_of_freedom":[3786,3787,3788,3789,3790,3791],"id":"n631","parent":"11","position":{"x":10,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.791816251356128e-5,"z":1.2891209911648518e-5,"y":-0.0006816335493373106},"angle":{"x":-1.1657365757544157e-6,"z":4.5628823643784305e-7,"y":-1.2481737881464581e-5}},{"degrees_of_freedom":[3792,3793,3794,3795,3796,3797],"id":"n632","parent":"11","position":{"x":12.020305089104422,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6051665914291054e-5,"z":3.7098907534439176e-5,"y":-0.0007046437151410367},"angle":{"x":2.337852006462369e-6,"z":-2.322312134212702e-5,"y":-1.0980479143080868e-5}},{"degrees_of_freedom":[3798,3799,3800,3801,3802,3803],"id":"n633","parent":"11","position":{"x":12.857142857142858,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.8275496447824697e-5,"z":5.125685867906747e-5,"y":-0.0007619824577275698},"angle":{"x":6.592959042539491e-7,"z":3.1767346471116436e-6,"y":-1.5473633393864812e-5}},{"degrees_of_freedom":[3804,3805,3806,3807,3808,3809],"id":"n634","parent":"11","position":{"x":12.020305089104422,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.630265497634235e-5,"z":3.951696792738735e-5,"y":-0.0008215615417603932},"angle":{"x":1.3343264155828847e-6,"z":2.468510234418652e-5,"y":-1.7544063104421347e-5}},{"degrees_of_freedom":[3810,3811,3812,3813,3814,3815],"id":"n635","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.397755288386477e-5,"z":3.057063095805157e-6,"y":-0.0006480578497243389},"angle":{"x":1.698026933228292e-5,"z":9.158791258355244e-6,"y":-7.561896050845923e-6}},{"degrees_of_freedom":[3816,3817,3818,3819,3820,3821],"id":"n636","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.267440625164114e-5,"z":5.3393800356901436e-6,"y":-0.0006513157243420709},"angle":{"x":0.00036061669632564305,"z":0.0001431817801801003,"y":-6.702095186035972e-6}},{"degrees_of_freedom":[3822,3823,3824,3825,3826,3827],"id":"n637","parent":"11","position":{"x":15,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00012679332778139503,"z":0.00010001678425591454,"y":-0.000979812817382633},"angle":{"x":2.68967849119062e-6,"z":-3.083293340204095e-6,"y":-2.2090309434761736e-5}},{"degrees_of_freedom":[3828,3829,3830,3831,3832,3833],"id":"n638","parent":"11","position":{"x":15,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001577228850301068,"z":0.00013088299914250134,"y":-0.0008004844402462385},"angle":{"x":6.985149767578659e-6,"z":3.7145485533786703e-6,"y":-1.4397777297133867e-5}},{"degrees_of_freedom":[3834,3835,3836,3837,3838,3839],"id":"n639","parent":"11","position":{"x":15,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012786934285646744,"z":0.00013097695197008367,"y":-0.0007916401426774778},"angle":{"x":3.6840831926934964e-6,"z":1.5551960555060673e-5,"y":-1.533050613706244e-5}},{"degrees_of_freedom":[3840,3841,3842,3843,3844,3845],"id":"n640","parent":"11","position":{"x":15,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001506841461735991,"z":0.0001155396168303766,"y":-0.0008486144177653239},"angle":{"x":-3.160338187622725e-5,"z":3.898214265844349e-5,"y":-8.578297847212427e-5}},{"degrees_of_freedom":[3846,3847,3848,3849,3850,3851],"id":"n641","parent":"11","position":{"x":15,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001944991240680068,"z":0.00010314546284678435,"y":-0.0008541539894779701},"angle":{"x":4.256851218440503e-6,"z":1.3314936185926553e-5,"y":-1.7366956430912248e-5}},{"degrees_of_freedom":[3852,3853,3854,3855,3856,3857],"id":"n642","parent":"11","position":{"x":15,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.614340328533021e-5,"z":8.940419167369378e-5,"y":-0.0008380783768806424},"angle":{"x":3.275932278858571e-5,"z":3.9313596615272886e-5,"y":6.0350167360008965e-5}},{"degrees_of_freedom":[3858,3859,3860,3861,3862,3863],"id":"n643","parent":"11","position":{"x":15,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.592694230877863e-5,"z":6.750875988517726e-5,"y":-0.0007748283478241652},"angle":{"x":3.6031328418563235e-6,"z":1.1778427651054647e-5,"y":-1.3349327799778619e-5}},{"degrees_of_freedom":[3864,3865,3866,3867,3868,3869],"id":"n644","parent":"11","position":{"x":15,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8052922917210908e-5,"z":7.643831188305975e-5,"y":-0.0007171436927457918},"angle":{"x":-2.4996683617096273e-5,"z":3.6028907890699816e-5,"y":-7.77583306115841e-5}},{"degrees_of_freedom":[3870,3871,3872,3873,3874,3875],"id":"n645","parent":"11","position":{"x":15,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6363345357199915e-5,"z":8.596713471665503e-5,"y":-0.0007113091619663108},"angle":{"x":5.5670917732759965e-6,"z":1.4015387738642712e-5,"y":-1.1312891095402708e-5}},{"degrees_of_freedom":[3876,3877,3878,3879,3880,3881],"id":"n646","parent":"11","position":{"x":15,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.939624730428924e-5,"z":0.0001019294931831462,"y":-0.0007285716268820528},"angle":{"x":4.0276527996800455e-5,"z":4.239452840503166e-5,"y":6.477362670680548e-5}},{"degrees_of_freedom":[3882,3883,3884,3885,3886,3887],"id":"n647","parent":"11","position":{"x":10,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00021690561725624287,"z":4.225440074106074e-6,"y":-0.0009773243543295068},"angle":{"x":1.0885530686869296e-6,"z":2.2328439639721516e-5,"y":-3.2707148545560235e-5}},{"degrees_of_freedom":[3888,3889,3890,3891,3892,3893],"id":"n648","parent":"11","position":{"x":12.857142857142858,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001335145300271841,"z":5.298021482849116e-5,"y":-0.0008846111538282912},"angle":{"x":-2.348364637480648e-6,"z":1.2281557482516086e-5,"y":-2.7773026267476787e-5}},{"degrees_of_freedom":[3894,3895,3896,3897,3898,3899],"id":"n649","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016586403759139963,"z":4.227129728598855e-5,"y":-0.0009519242925398733},"angle":{"x":-0.00017601109036021378,"z":7.46661462201803e-5,"y":-2.5453473690446492e-5}},{"degrees_of_freedom":[3900,3901,3902,3903,3904,3905],"id":"n650","parent":"11","position":{"x":10,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018525853990249404,"z":3.652759407306819e-6,"y":-0.0009829167308193273},"angle":{"x":7.868021185850944e-6,"z":1.064069182217338e-5,"y":-2.0219404915504935e-5}},{"degrees_of_freedom":[3906,3907,3908,3909,3910,3911],"id":"n651","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001688904212229178,"z":-3.157228267783931e-5,"y":-0.0010031294579087267},"angle":{"x":0.0001137113843321909,"z":4.7940393951396866e-5,"y":-2.1692688244520574e-5}},{"degrees_of_freedom":[3912,3913,3914,3915,3916,3917],"id":"n652","parent":"11","position":{"x":7.142857142857142,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014134668314547344,"z":-4.215125522851002e-5,"y":-0.0010413444017475938},"angle":{"x":6.783032850771493e-7,"z":7.11317531369525e-6,"y":-2.6984826973672685e-5}},{"degrees_of_freedom":[3918,3919,3920,3921,3922,3923],"id":"n653","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011194341006034826,"z":-3.150826523900827e-5,"y":-0.0010006349080942023},"angle":{"x":-0.00014358571945835495,"z":5.7693934001592754e-5,"y":-2.1576498130726058e-5}},{"degrees_of_freedom":[3924,3925,3926,3927,3928,3929],"id":"n654","parent":"11","position":{"x":10,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.244750497064573e-5,"z":3.198006643952653e-6,"y":-0.0009848057103480211},"angle":{"x":-6.750473329475135e-6,"z":8.754142820464827e-6,"y":-1.9622686787305916e-5}},{"degrees_of_freedom":[3930,3931,3932,3933,3934,3935],"id":"n655","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010425254364083912,"z":4.073422980117019e-5,"y":-0.0009576586505349416},"angle":{"x":0.00014608524669346764,"z":6.377521257117646e-5,"y":-2.3836242654464644e-5}},{"degrees_of_freedom":[3936,3937,3938,3939,3940,3941],"id":"n656","parent":"11","position":{"x":10,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015874586817792233,"z":4.890887314762808e-5,"y":-0.0008312136794329809},"angle":{"x":-9.765128954140937e-6,"z":-2.5579998334588023e-5,"y":-4.939614533227078e-6}},{"degrees_of_freedom":[3942,3943,3944,3945,3946,3947],"id":"n657","parent":"11","position":{"x":7.979694910895579,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017203863280935633,"z":4.710117292034796e-5,"y":-0.000776019939913608},"angle":{"x":5.395623920406779e-5,"z":-1.8301076936719328e-5,"y":2.1454638592065263e-5}},{"degrees_of_freedom":[3948,3949,3950,3951,3952,3953],"id":"n658","parent":"11","position":{"x":7.142857142857142,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018641961720229633,"z":-4.395284514327565e-5,"y":-0.0007430749311495631},"angle":{"x":1.9304618574118075e-5,"z":-1.637659238335623e-6,"y":-6.220178066968498e-5}},{"degrees_of_freedom":[3954,3955,3956,3957,3958,3959],"id":"n659","parent":"11","position":{"x":7.979694910895579,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017871136522740677,"z":-3.090125457196793e-5,"y":-0.0007129369927128079},"angle":{"x":1.034356751649191e-5,"z":1.4920566389822846e-5,"y":-4.056792041762338e-5}},{"degrees_of_freedom":[3960,3961,3962,3963,3964,3965],"id":"n660","parent":"11","position":{"x":10,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018041135661305086,"z":4.240242868550103e-5,"y":-0.0007339329667799285},"angle":{"x":-2.4996605126774206e-5,"z":-2.5090247065331015e-5,"y":-2.592953712549134e-5}},{"degrees_of_freedom":[3966,3967,3968,3969,3970,3971],"id":"n661","parent":"11","position":{"x":12.020305089104422,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016956591633775434,"z":7.386989842632493e-5,"y":-0.0007895741774010221},"angle":{"x":1.3487974518798694e-5,"z":-1.8280658345074485e-5,"y":-9.988699820470091e-6}},{"degrees_of_freedom":[3972,3973,3974,3975,3976,3977],"id":"n662","parent":"11","position":{"x":12.857142857142858,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015582049199339772,"z":0.00010947864575490999,"y":-0.0008250706529448063},"angle":{"x":-1.685303934051563e-6,"z":-2.0447017152400496e-6,"y":-4.662023652791624e-5}},{"degrees_of_freedom":[3978,3979,3980,3981,3982,3983],"id":"n663","parent":"11","position":{"x":12.020305089104422,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000160103073492381,"z":6.706023582480081e-5,"y":-0.0008557155932231691},"angle":{"x":-2.0852235483978376e-5,"z":1.1918614335341897e-5,"y":-3.471913822875984e-7}},{"degrees_of_freedom":[3984,3985,3986,3987,3988,3989],"id":"n664","parent":"11","position":{"x":12.857142857142858,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001646317587880682,"z":2.1358539755431073e-5,"y":-0.0010699258263368843},"angle":{"x":1.2308590421917295e-6,"z":-1.0984532059578355e-5,"y":-2.826539339581846e-5}},{"degrees_of_freedom":[3990,3991,3992,3993,3994,3995],"id":"n665","parent":"11","position":{"x":12.020305089104422,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019494617174704496,"z":1.0526332703597135e-5,"y":-0.0010046957937102378},"angle":{"x":-0.00021475266027863712,"z":-8.733288239142634e-5,"y":-1.9762738031946644e-5}},{"degrees_of_freedom":[3996,3997,3998,3999,4000,4001],"id":"n666","parent":"11","position":{"x":7.979694910895579,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018966114698198476,"z":-6.619243442539342e-5,"y":-0.0009390947867357105},"angle":{"x":0.00013746902462340497,"z":-6.33993925262562e-5,"y":-2.5139178158785922e-5}},{"degrees_of_freedom":[4002,4003,4004,4005,4006,4007],"id":"n667","parent":"11","position":{"x":7.142857142857142,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001577553764872856,"z":-7.798218552444169e-5,"y":-0.0008621016199794724},"angle":{"x":5.102078132323788e-6,"z":-1.4616187998451395e-5,"y":-2.844485685649104e-5}},{"degrees_of_freedom":[4008,4009,4010,4011,4012,4013],"id":"n668","parent":"11","position":{"x":7.979694910895578,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000126280209947149,"z":-6.681627151955301e-5,"y":-0.000952150578567819},"angle":{"x":-0.00022124043752224612,"z":-9.265592138494553e-5,"y":-2.3708651540325043e-5}},{"degrees_of_freedom":[4014,4015,4016,4017,4018,4019],"id":"n669","parent":"11","position":{"x":12.020305089104422,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013091520074320548,"z":1.1466199368577347e-5,"y":-0.0010096183576350857},"angle":{"x":-7.192218910921444e-8,"z":-1.053727796651438e-5,"y":-2.262845114088203e-5}},{"degrees_of_freedom":[4020,4021,4022,4023,4024,4025],"id":"n670","parent":"11","position":{"x":15,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00027376427097612133,"z":0.0001199101784300633,"y":-0.0011604770385185118},"angle":{"x":1.398403259709306e-5,"z":-6.48282205322104e-6,"y":-4.3785347545374426e-5}},{"degrees_of_freedom":[4026,4027,4028,4029,4030,4031],"id":"n671","parent":"11","position":{"x":15,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030566622756697623,"z":6.242232032930775e-5,"y":-0.001073156954925253},"angle":{"x":-1.1098710640514084e-6,"z":-3.3466142300268505e-6,"y":-1.5264216871571633e-5}},{"degrees_of_freedom":[4032,4033,4034,4035,4036,4037],"id":"n672","parent":"11","position":{"x":15,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012418609548047596,"z":8.816292474792934e-5,"y":-0.0010667238000740716},"angle":{"x":3.581438190469668e-6,"z":-4.533430081227751e-6,"y":-1.4116301592377095e-5}},{"degrees_of_freedom":[4038,4039,4040,4041,4042,4043],"id":"n673","parent":"11","position":{"x":15,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000142698290917116,"z":9.242777324972226e-5,"y":-0.0010746181403452463},"angle":{"x":4.540214845864568e-6,"z":-1.3108314618123014e-5,"y":-2.418672223050739e-5}},{"degrees_of_freedom":[4044,4045,4046,4047,4048,4049],"id":"n674","parent":"11","position":{"x":15,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000195146738422332,"z":9.387388804953125e-5,"y":-0.0011004277381317339},"angle":{"x":-8.128964323332823e-6,"z":-5.752038905262981e-5,"y":9.7193781680908e-5}},{"degrees_of_freedom":[4050,4051,4052,4053,4054,4055],"id":"n675","parent":"11","position":{"x":15,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00033317886353580986,"z":9.058386242600597e-5,"y":-0.001099867660978853},"angle":{"x":5.43101519527246e-6,"z":-1.5172696081796422e-5,"y":-2.6819540934438862e-5}},{"degrees_of_freedom":[4056,4057,4058,4059,4060,4061],"id":"n676","parent":"11","position":{"x":15,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002978087656524118,"z":8.113593450788343e-5,"y":-0.0010892195639354133},"angle":{"x":2.2686452979674762e-5,"z":-3.2216406475899114e-5,"y":-7.07904829127908e-5}},{"degrees_of_freedom":[4062,4063,4064,4065,4066,4067],"id":"n677","parent":"11","position":{"x":15,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002784315459432222,"z":6.224393611317445e-5,"y":-0.0010568096939725133},"angle":{"x":4.2367943176052045e-6,"z":-1.6930668445190454e-5,"y":-2.331986796491222e-5}},{"degrees_of_freedom":[4068,4069,4070,4071,4072,4073],"id":"n678","parent":"11","position":{"x":15,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022002443201198826,"z":6.543426495405804e-5,"y":-0.001031465187344315},"angle":{"x":-1.2608524762727533e-5,"z":-5.228960726750388e-5,"y":8.092632010291826e-5}},{"degrees_of_freedom":[4074,4075,4076,4077,4078,4079],"id":"n679","parent":"11","position":{"x":15,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.042770717441425e-5,"z":6.968350009506512e-5,"y":-0.0010303577119480302},"angle":{"x":4.302595732965429e-6,"z":-1.4866215581461299e-5,"y":-2.0687142845994053e-5}},{"degrees_of_freedom":[4080,4081,4082,4083,4084,4085],"id":"n680","parent":"11","position":{"x":15,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001307305737670264,"z":7.704461795826465e-5,"y":-0.0010412336235655442},"angle":{"x":1.8935128519630882e-5,"z":-3.611560666237359e-5,"y":-8.502537808878621e-5}},{"degrees_of_freedom":[4086,4087,4088,4089,4090,4091],"id":"n681","parent":"11","position":{"x":10,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003555786545656992,"z":-9.867326110925325e-6,"y":-0.0012596095003260756},"angle":{"x":-0.00011077718906437162,"z":-4.8719314969984324e-5,"y":-5.040289289168705e-5}},{"degrees_of_freedom":[4092,4093,4094,4095,4096,4097],"id":"n682","parent":"11","position":{"x":10,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00010493638551210992,"z":-2.0317022824884068e-5,"y":-0.0011513067155547497},"angle":{"x":5.509223613120903e-7,"z":-2.4222530728675935e-6,"y":-4.0686480889081326e-5}},{"degrees_of_freedom":[4098,4099,4100,4101,4102,4103],"id":"n683","parent":"11","position":{"x":12.857142857142858,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023435933351599277,"z":5.551041622582845e-5,"y":-0.0012226243767784048},"angle":{"x":-2.017666489618344e-5,"z":-3.732572457543781e-6,"y":-3.1539235771847884e-5}},{"degrees_of_freedom":[4104,4105,4106,4107,4108,4109],"id":"n684","parent":"11","position":{"x":12.020305089104422,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020160478128021978,"z":3.9658097771901515e-5,"y":-0.0011605325460104894},"angle":{"x":9.806302761298323e-5,"z":-4.553652464508553e-5,"y":-3.364127163702404e-5}},{"degrees_of_freedom":[4110,4111,4112,4113,4114,4115],"id":"n685","parent":"11","position":{"x":10,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001712535739755961,"z":-1.4967411550494056e-5,"y":-0.0011348135291358876},"angle":{"x":-1.4955483764647917e-5,"z":-5.578377903409845e-6,"y":-3.137974529007254e-5}},{"degrees_of_freedom":[4116,4117,4118,4119,4120,4121],"id":"n686","parent":"11","position":{"x":7.979694910895579,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019072971793369974,"z":-7.444920846633883e-5,"y":-0.0011341251458046502},"angle":{"x":2.1521935362879137e-5,"z":7.318301434751598e-6,"y":-3.6439811665979275e-5}},{"degrees_of_freedom":[4122,4123,4124,4125,4126,4127],"id":"n687","parent":"11","position":{"x":7.142857142857142,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022427698450911164,"z":-9.187778062666157e-5,"y":-0.0011324628936570142},"angle":{"x":-2.017638198077536e-5,"z":-7.42433661057621e-6,"y":-3.2800286509208195e-5}},{"degrees_of_freedom":[4128,4129,4130,4131,4132,4133],"id":"n688","parent":"11","position":{"x":7.979694910895578,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002610030105940195,"z":-7.724717587474119e-5,"y":-0.0012156502033641293},"angle":{"x":7.48764229181931e-5,"z":-4.103061075191702e-5,"y":-3.635749925220242e-5}},{"degrees_of_freedom":[4134,4135,4136,4137,4138,4139],"id":"n689","parent":"11","position":{"x":10,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00029063891673303965,"z":-1.7939599666672125e-5,"y":-0.0012501076921406344},"angle":{"x":-2.5397369866356222e-5,"z":-5.5785518033828055e-6,"y":-3.2947290972646187e-5}},{"degrees_of_freedom":[4140,4141,4142,4143,4144,4145],"id":"n690","parent":"11","position":{"x":12.020305089104422,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002695117487441418,"z":4.1202639033792634e-5,"y":-0.0012420582149372064},"angle":{"x":5.991424412892651e-6,"z":5.519147403678911e-6,"y":-3.439295221375463e-5}},{"degrees_of_freedom":[4146,4147,4148,4149,4150,4151],"id":"n691","parent":"11","position":{"x":10,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002992285333017807,"z":0.00014787152984946342,"y":-0.0010799371666403506},"angle":{"x":-0.00020266546141600145,"z":1.533569675344472e-5,"y":-2.4246615452405898e-5}},{"degrees_of_freedom":[4152,4153,4154,4155,4156,4157],"id":"n692","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002978720041910858,"z":2.7258972130939697e-5,"y":-0.001066167877557605},"angle":{"x":8.161972349829798e-5,"z":-7.421378489416332e-6,"y":9.350815339757635e-5}},{"degrees_of_freedom":[4158,4159,4160,4161,4162,4163],"id":"n693","parent":"11","position":{"x":12.857142857142858,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003018442913328115,"z":0.00011390451568024212,"y":-0.001078193289601536},"angle":{"x":-3.1089241456199458e-6,"z":2.1427286678894474e-6,"y":-0.00011104480719882258}},{"degrees_of_freedom":[4164,4165,4166,4167,4168,4169],"id":"n694","parent":"11","position":{"x":12.020305089104422,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002869434122503407,"z":1.4697049667487162e-5,"y":-0.0010965073563477658},"angle":{"x":-5.905662413005261e-5,"z":1.6003583849053785e-5,"y":2.402490125100289e-5}},{"degrees_of_freedom":[4170,4171,4172,4173,4174,4175],"id":"n695","parent":"11","position":{"x":10,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002746553350552468,"z":1.381383178946614e-5,"y":-0.0011367587147158285},"angle":{"x":-0.00012275621890217337,"z":1.7504695760107904e-5,"y":5.0410113786374596e-5}},{"degrees_of_freedom":[4176,4177,4178,4179,4180,4181],"id":"n696","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002742210628322104,"z":0.00021838471109459276,"y":-0.001152580531183833},"angle":{"x":-1.1050798132831516e-5,"z":-8.728494212502255e-6,"y":9.6680054134063e-5}},{"degrees_of_freedom":[4182,4183,4184,4185,4186,4187],"id":"n697","parent":"11","position":{"x":7.142857142857142,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027435494422615433,"z":0.00032161607078292465,"y":-0.0011363114548611601},"angle":{"x":7.154786588056561e-5,"z":4.571342994914004e-6,"y":0.0002960905874407412}},{"degrees_of_freedom":[4188,4189,4190,4191,4192,4193],"id":"n698","parent":"11","position":{"x":7.979694910895579,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002903836912437763,"z":-7.071221106581837e-5,"y":-0.0011151387552081878},"angle":{"x":0.00028850789012966645,"z":1.3503043756505353e-5,"y":-0.00022769736257358033}},{"degrees_of_freedom":[4194,4195,4196,4197,4198,4199],"id":"n699","parent":"11","position":{"x":10,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.768771064830792e-5,"z":-1.71307430764825e-5,"y":-0.0011004771574558113},"angle":{"x":4.98526461835882e-6,"z":2.3817441026658343e-7,"y":-2.9121842628724318e-5}},{"degrees_of_freedom":[4200,4201,4202,4203,4204,4205],"id":"n700","parent":"11","position":{"x":7.979694910895579,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.40042121792466e-5,"z":-7.861718020069221e-5,"y":-0.001089057093071733},"angle":{"x":-8.487770441710767e-6,"z":-1.3692763908490437e-5,"y":-3.244483660812804e-5}},{"degrees_of_freedom":[4206,4207,4208,4209,4210,4211],"id":"n701","parent":"11","position":{"x":7.142857142857142,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.380386951951436e-5,"z":-8.799007692082475e-5,"y":-0.0010589864182523063},"angle":{"x":-2.54318656065911e-6,"z":-1.2409252091546603e-6,"y":-1.696358542300161e-5}},{"degrees_of_freedom":[4212,4213,4214,4215,4216,4217],"id":"n702","parent":"11","position":{"x":7.979694910895579,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.062837201814325e-5,"z":-6.897143801453645e-5,"y":-0.001029042883922014},"angle":{"x":1.5164223293416423e-6,"z":1.4310966460111064e-5,"y":-2.56345866088152e-5}},{"degrees_of_freedom":[4218,4219,4220,4221,4222,4223],"id":"n703","parent":"11","position":{"x":10,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.163906228261211e-5,"z":-1.7136572384297925e-5,"y":-0.0010151436358726603},"angle":{"x":-3.082789037795459e-6,"z":2.1112823214441722e-7,"y":-2.4705259161525974e-5}},{"degrees_of_freedom":[4224,4225,4226,4227,4228,4229],"id":"n704","parent":"11","position":{"x":12.020305089104422,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010340265189850325,"z":2.9538703906285596e-5,"y":-0.0010291193113124647},"angle":{"x":1.3175674060509868e-7,"z":-1.564762037052136e-5,"y":-2.239802168940205e-5}},{"degrees_of_freedom":[4230,4231,4232,4233,4234,4235],"id":"n705","parent":"11","position":{"x":12.857142857142858,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011596461393670504,"z":4.8774852053658265e-5,"y":-0.0010602749869813416},"angle":{"x":1.6580965419716305e-6,"z":-2.0171350984104656e-6,"y":-1.9119012764731354e-5}},{"degrees_of_freedom":[4236,4237,4238,4239,4240,4241],"id":"n706","parent":"11","position":{"x":12.020305089104422,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011091812439883136,"z":3.6011977299111156e-5,"y":-0.0010888103580192195},"angle":{"x":4.638622393322997e-6,"z":1.2814924122971709e-5,"y":-2.6720537546147848e-5}},{"degrees_of_freedom":[4242,4243,4244,4245,4246,4247],"id":"n707","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.630682477925391e-5,"z":2.6131684603611042e-5,"y":-0.0009625716159711391},"angle":{"x":-1.3528091244648735e-5,"z":-5.441933023974312e-6,"y":-2.0919634047656813e-5}},{"degrees_of_freedom":[4248,4249,4250,4251,4252,4253],"id":"n708","parent":"11","position":{"x":7.979694910895579,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.857796801392167e-5,"z":-4.832117959200818e-5,"y":-0.0009626589278666216},"angle":{"x":1.9637325123386406e-5,"z":-6.347392346451092e-6,"y":-2.1993173495650536e-5}},{"degrees_of_freedom":[4254,4255,4256,4257,4258,4259],"id":"n709","parent":"11","position":{"x":7.979694910895578,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.586784396945134e-5,"z":-4.793292068778651e-5,"y":-0.0009588880242204368},"angle":{"x":3.127395715640925e-6,"z":2.284465578390286e-6,"y":-2.1666127325382407e-5}},{"degrees_of_freedom":[4260,4261,4262,4263,4264,4265],"id":"n710","parent":"11","position":{"x":15,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":5.101227731247397e-5,"z":0.00011921732835116545,"y":-0.001154466734999113},"angle":{"x":6.301028911423325e-6,"z":7.810454045876029e-7,"y":-4.191818497401217e-5}},{"degrees_of_freedom":[4266,4267,4268,4269,4270,4271],"id":"n711","parent":"11","position":{"x":15,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.898147055352282e-5,"z":0.00010577568116666413,"y":-0.0010641114608725875},"angle":{"x":4.582575282458421e-6,"z":-2.3718650119031573e-6,"y":-1.6355598274345617e-5}},{"degrees_of_freedom":[4272,4273,4274,4275,4276,4277],"id":"n712","parent":"11","position":{"x":15,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.538821579253702e-5,"z":0.00011038902723721508,"y":-0.0010661262426433094},"angle":{"x":3.7476710679548944e-6,"z":-3.008025273706911e-6,"y":-2.2593115307562054e-5}},{"degrees_of_freedom":[4278,4279,4280,4281,4282,4283],"id":"n713","parent":"11","position":{"x":15,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.0368498058698442e-6,"z":0.00010924207073691242,"y":-0.0010922415461954826},"angle":{"x":-1.0365501461469164e-5,"z":-3.0371044103153442e-5,"y":4.978769647743833e-5}},{"degrees_of_freedom":[4284,4285,4286,4287,4288,4289],"id":"n714","parent":"11","position":{"x":15,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.175198376913625e-5,"z":0.00010571352798723176,"y":-0.0010956287908590904},"angle":{"x":2.2634323180384595e-6,"z":-5.274440976529932e-6,"y":-2.620980135875095e-5}},{"degrees_of_freedom":[4290,4291,4292,4293,4294,4295],"id":"n715","parent":"11","position":{"x":15,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001011877974695859,"z":9.904540370508265e-5,"y":-0.0010878588888168599},"angle":{"x":1.8121786343391807e-5,"z":-9.101927051529067e-6,"y":-3.202198683263193e-5}},{"degrees_of_freedom":[4296,4297,4298,4299,4300,4301],"id":"n716","parent":"11","position":{"x":15,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010364429602231708,"z":8.409450780293192e-5,"y":-0.0010565673236300774},"angle":{"x":3.878908427451225e-6,"z":-7.532086609651762e-6,"y":-2.2568211586279098e-5}},{"degrees_of_freedom":[4302,4303,4304,4305,4306,4307],"id":"n717","parent":"11","position":{"x":15,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.832892439995663e-5,"z":8.600516834239154e-5,"y":-0.0010302167093813915},"angle":{"x":-1.1679659218921632e-5,"z":-3.0244878362492817e-5,"y":4.6686844934960383e-5}},{"degrees_of_freedom":[4308,4309,4310,4311,4312,4313],"id":"n718","parent":"11","position":{"x":15,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.424750357527888e-6,"z":8.956326045389911e-5,"y":-0.0010258678555785346},"angle":{"x":2.0689495950617286e-6,"z":-5.265636213205314e-6,"y":-1.8951622678108838e-5}},{"degrees_of_freedom":[4314,4315,4316,4317,4318,4319],"id":"n719","parent":"11","position":{"x":15,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.4999730580950834e-5,"z":9.5828177886642e-5,"y":-0.0010343048169122045},"angle":{"x":1.828914598633264e-5,"z":-9.411222877586961e-6,"y":-3.569061591198735e-5}},{"degrees_of_freedom":[4320,4321,4322,4323,4324,4325],"id":"n720","parent":"11","position":{"x":10,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-9.255195537083218e-5,"z":-2.0800442046465917e-5,"y":-0.001146594991449701},"angle":{"x":-2.8757156196701465e-6,"z":3.1770687580420882e-6,"y":-4.0830607692812616e-5}},{"degrees_of_freedom":[4326,4327,4328,4329,4330,4331],"id":"n721","parent":"11","position":{"x":12.857142857142858,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1825623101929807e-5,"z":4.565360593447818e-5,"y":-0.0011607835427227442},"angle":{"x":4.899136117158937e-9,"z":1.6072851997922494e-6,"y":-2.5170150905884283e-5}},{"degrees_of_freedom":[4332,4333,4334,4335,4336,4337],"id":"n722","parent":"11","position":{"x":12.020305089104422,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6549886194824206e-5,"z":3.312775485865349e-5,"y":-0.0011698662088312477},"angle":{"x":1.7185332692385663e-5,"z":-4.525567213774147e-6,"y":-3.311797925100682e-5}},{"degrees_of_freedom":[4338,4339,4340,4341,4342,4343],"id":"n723","parent":"11","position":{"x":10,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.301693455883169e-5,"z":-1.9445604417753607e-5,"y":-0.0011734432633236655},"angle":{"x":-6.390260197601462e-8,"z":1.514301356845069e-6,"y":-2.8851557053788858e-5}},{"degrees_of_freedom":[4344,4345,4346,4347,4348,4349],"id":"n724","parent":"11","position":{"x":7.979694910895579,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.358774172764842e-5,"z":-7.185906095641794e-5,"y":-0.001177127271358657},"angle":{"x":-2.9632442577133857e-5,"z":-8.881100850571348e-6,"y":-3.146878689715492e-5}},{"degrees_of_freedom":[4350,4351,4352,4353,4354,4355],"id":"n725","parent":"11","position":{"x":7.142857142857142,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9933381429116333e-7,"z":-8.697679574480343e-5,"y":-0.0011864681225415498},"angle":{"x":-2.3526799287046753e-7,"z":1.5710174988587775e-6,"y":-2.512496239387621e-5}},{"degrees_of_freedom":[4356,4357,4358,4359,4360,4361],"id":"n726","parent":"11","position":{"x":7.979694910895578,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.864556489247127e-5,"z":-7.436601735866066e-5,"y":-0.0011778544796002288},"angle":{"x":-5.367141892193569e-5,"z":2.0522191768040566e-5,"y":-3.3639720115633533e-5}},{"degrees_of_freedom":[4362,4363,4364,4365,4366,4367],"id":"n727","parent":"11","position":{"x":10,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.532296493763237e-5,"z":-2.1486790635526982e-5,"y":-0.001174101481297132},"angle":{"x":-1.6647933212816085e-7,"z":1.664009458728715e-6,"y":-2.879281007256876e-5}},{"degrees_of_freedom":[4368,4369,4370,4371,4372,4373],"id":"n728","parent":"11","position":{"x":12.020305089104422,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5907809470132024e-5,"z":3.066027959833855e-5,"y":-0.0011700698482813635},"angle":{"x":4.247875546633026e-5,"z":1.6682713871575033e-5,"y":-3.134372547874377e-5}},{"degrees_of_freedom":[4374,4375,4376,4377,4378,4379],"id":"n729","parent":"11","position":{"x":10,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.355740032543952e-5,"z":-1.5172221363500138e-5,"y":-0.0010957187844335696},"angle":{"x":-2.955457834851516e-6,"z":4.1431862658976025e-7,"y":-2.9392499410020607e-5}},{"degrees_of_freedom":[4380,4381,4382,4383,4384,4385],"id":"n730","parent":"11","position":{"x":7.979694910895579,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.645242496415755e-5,"z":-7.054074775286599e-5,"y":-0.0010852834349775644},"angle":{"x":-8.905641241095674e-6,"z":-1.2242137564634721e-5,"y":-2.9570287070145758e-5}},{"degrees_of_freedom":[4386,4387,4388,4389,4390,4391],"id":"n731","parent":"11","position":{"x":7.142857142857142,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.984747840663798e-5,"z":-7.695231704542963e-5,"y":-0.0010572867118567538},"angle":{"x":-3.8755611677344666e-6,"z":2.974795840708157e-6,"y":-1.681384437914314e-5}},{"degrees_of_freedom":[4392,4393,4394,4395,4396,4397],"id":"n732","parent":"11","position":{"x":7.979694910895579,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.526709943538673e-5,"z":-5.522296828670805e-5,"y":-0.001025304520341478},"angle":{"x":-4.0957544050254986e-7,"z":1.6612301519227164e-5,"y":-2.4568714302027736e-5}},{"degrees_of_freedom":[4398,4399,4400,4401,4402,4403],"id":"n733","parent":"11","position":{"x":10,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.238701676641112e-5,"z":-3.9442080248293585e-6,"y":-0.0010101340095102903},"angle":{"x":-2.150364431519142e-6,"z":2.839340883884706e-7,"y":-2.4812643924005838e-5}},{"degrees_of_freedom":[4404,4405,4406,4407,4408,4409],"id":"n734","parent":"11","position":{"x":12.020305089104422,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.155886556318285e-5,"z":4.373553964910753e-5,"y":-0.0010228324450362934},"angle":{"x":-1.3156455827511015e-6,"z":-1.3537512045531865e-5,"y":-2.3501903781942756e-5}},{"degrees_of_freedom":[4410,4411,4412,4413,4414,4415],"id":"n735","parent":"11","position":{"x":12.857142857142858,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.6649243175175925e-5,"z":6.130310822178323e-5,"y":-0.0010519803920167492},"angle":{"x":4.864452723458097e-7,"z":2.290652011265798e-6,"y":-2.0151991658798664e-5}},{"degrees_of_freedom":[4416,4417,4418,4419,4420,4421],"id":"n736","parent":"11","position":{"x":12.020305089104422,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.897877592296514e-5,"z":4.514278261444696e-5,"y":-0.0010827773670825606},"angle":{"x":4.175752653543436e-6,"z":1.4645099061913914e-5,"y":-3.0059484616467755e-5}},{"degrees_of_freedom":[4422,4423,4424,4425,4426,4427],"id":"n737","parent":"11","position":{"x":7.979694910895579,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010884311537786552,"z":-3.2429483869602694e-5,"y":-0.0009998968976250042},"angle":{"x":2.7293206943954843e-5,"z":-2.8578636917087378e-6,"y":-2.2070585798938478e-5}},{"degrees_of_freedom":[4428,4429,4430,4431,4432,4433],"id":"n738","parent":"11","position":{"x":7.979694910895578,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017350459153849527,"z":-3.2228963419537565e-5,"y":-0.0009991294995443133},"angle":{"x":0.00018532122156172815,"z":7.251583136664638e-5,"y":-1.9417369392354958e-5}},{"degrees_of_freedom":[4434,4435,4436,4437,4438,4439],"id":"n739","parent":"11","position":{"x":15,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-0.00018200543549371648,"z":0.00011816957955245372,"y":-0.0011746554441796557},"angle":{"x":-1.8816809763279548e-6,"z":7.00906839921225e-6,"y":-3.438281699007058e-5}},{"degrees_of_freedom":[4440,4441,4442,4443,4444,4445],"id":"n740","parent":"11","position":{"x":15,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00023752996656924483,"z":0.00013381881910205337,"y":-0.0011048142717966073},"angle":{"x":9.5821887848895e-6,"z":-2.4728424507196188e-6,"y":-1.6308448539342773e-5}},{"degrees_of_freedom":[4446,4447,4448,4449,4450,4451],"id":"n741","parent":"11","position":{"x":15,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020605519680284406,"z":0.00013393807724226494,"y":-0.0010874024619048463},"angle":{"x":3.3527411641627044e-6,"z":6.006805601438926e-6,"y":-2.0800506580751266e-5}},{"degrees_of_freedom":[4452,4453,4454,4455,4456,4457],"id":"n742","parent":"11","position":{"x":15,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020215860817094424,"z":0.0001290909522479701,"y":-0.0011138530705533441},"angle":{"x":-1.3804317231080565e-5,"z":-2.8762728493202496e-7,"y":-5.534047056550569e-6}},{"degrees_of_freedom":[4458,4459,4460,4461,4462,4463],"id":"n743","parent":"11","position":{"x":15,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018591768098753973,"z":0.00012349936781533744,"y":-0.0011136427827002598},"angle":{"x":4.3042356406498165e-6,"z":5.485675542998545e-6,"y":-2.4400316952741288e-5}},{"degrees_of_freedom":[4464,4465,4466,4467,4468,4469],"id":"n744","parent":"11","position":{"x":15,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010698331734089366,"z":0.00011563609036451527,"y":-0.0011036574922327518},"angle":{"x":1.7653731351716088e-5,"z":1.4965865213525767e-5,"y":4.950616315757847e-6}},{"degrees_of_freedom":[4470,4471,4472,4473,4474,4475],"id":"n745","parent":"11","position":{"x":15,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.711824846205834e-5,"z":0.00010247408952195098,"y":-0.0010712165603020706},"angle":{"x":3.0695278316752477e-6,"z":3.7176091552166923e-6,"y":-2.4327392365354748e-5}},{"degrees_of_freedom":[4476,4477,4478,4479,4480,4481],"id":"n746","parent":"11","position":{"x":15,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.796934633870015e-5,"z":0.00010455803083213376,"y":-0.001043553823476577},"angle":{"x":-1.0973211110943917e-5,"z":5.964744757194181e-7,"y":-1.2962629949742817e-5}},{"degrees_of_freedom":[4482,4483,4484,4485,4486,4487],"id":"n747","parent":"11","position":{"x":15,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001073325854995197,"z":0.0001082680649668006,"y":-0.0010435021351677268},"angle":{"x":5.451411344162545e-6,"z":4.238732903434459e-6,"y":-2.0727642610483008e-5}},{"degrees_of_freedom":[4488,4489,4490,4491,4492,4493],"id":"n748","parent":"11","position":{"x":15,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017513848083783589,"z":0.00011678393870916423,"y":-0.0010554961479804156},"angle":{"x":2.1532580576130672e-5,"z":1.2155344692541106e-5,"y":-8.729412674264841e-7}},{"degrees_of_freedom":[4494,4495,4496,4497,4498,4499],"id":"n749","parent":"11","position":{"x":10,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00034118014009470484,"z":-3.217021246090645e-5,"y":-0.0012406000044415627},"angle":{"x":0.00011262518510256956,"z":5.204808770184874e-5,"y":-5.0021204178364145e-5}},{"degrees_of_freedom":[4500,4501,4502,4503,4504,4505],"id":"n750","parent":"11","position":{"x":12.857142857142858,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021089210182553285,"z":5.0417163917365286e-5,"y":-0.0011036894543969406},"angle":{"x":2.0713834676356362e-5,"z":9.765560065158673e-6,"y":-3.203985738098699e-5}},{"degrees_of_freedom":[4506,4507,4508,4509,4510,4511],"id":"n751","parent":"11","position":{"x":12.020305089104422,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002466863326871101,"z":3.582125560996815e-5,"y":-0.001201340987493141},"angle":{"x":-9.873712270073125e-5,"z":5.199788655767638e-5,"y":-3.632970436360334e-5}},{"degrees_of_freedom":[4512,4513,4514,4515,4516,4517],"id":"n752","parent":"11","position":{"x":10,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00027657909774963873,"z":-2.3630023447678365e-5,"y":-0.0012417897454150902},"angle":{"x":2.5896472540558804e-5,"z":7.933326770974315e-6,"y":-3.309438370697481e-5}},{"degrees_of_freedom":[4518,4519,4520,4521,4522,4523],"id":"n753","parent":"11","position":{"x":7.979694910895579,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025573907074591303,"z":-8.293283784738335e-5,"y":-0.0012388961933658329},"angle":{"x":-8.62416859621711e-6,"z":-4.271656283827928e-6,"y":-3.426830867570564e-5}},{"degrees_of_freedom":[4524,4525,4526,4527,4528,4529],"id":"n754","parent":"11","position":{"x":7.142857142857142,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002220426439604083,"z":-9.725048470945143e-5,"y":-0.0012319098327229908},"angle":{"x":2.0714107561494913e-5,"z":6.1008981175593595e-6,"y":-3.0749449330641576e-5}},{"degrees_of_freedom":[4530,4531,4532,4533,4534,4535],"id":"n755","parent":"11","position":{"x":7.979694910895578,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001899670961106492,"z":-8.129987652957717e-5,"y":-0.001155198939714402},"angle":{"x":-0.00012812340117096736,"z":5.87227967181101e-5,"y":-3.460678164295787e-5}},{"degrees_of_freedom":[4536,4537,4538,4539,4540,4541],"id":"n756","parent":"11","position":{"x":10,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015902234086364242,"z":-2.5911952678890802e-5,"y":-0.0011234244976243112},"angle":{"x":1.5531235686215926e-5,"z":7.933160079633445e-6,"y":-3.143572397068691e-5}},{"degrees_of_freedom":[4542,4543,4544,4545,4546,4547],"id":"n757","parent":"11","position":{"x":12.020305089104422,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00017826726589318444,"z":3.324997162117579e-5,"y":-0.0011176443213357157},"angle":{"x":-1.8668081757799086e-5,"z":-4.1580830990262324e-6,"y":-3.609775088320043e-5}},{"degrees_of_freedom":[4548,4549,4550,4551,4552,4553],"id":"n758","parent":"11","position":{"x":10,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000253489062827865,"z":-6.582942084163367e-5,"y":-0.0011159280359164133},"angle":{"x":0.0001182762111747502,"z":-1.5657847084554013e-5,"y":5.043414292068929e-5}},{"degrees_of_freedom":[4554,4555,4556,4557,4558,4559],"id":"n759","parent":"11","position":{"x":7.979694910895579,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002654322272562548,"z":-6.291505046804636e-5,"y":-0.0010786200904558153},"angle":{"x":4.736425604842327e-5,"z":-1.5028071131688446e-5,"y":2.1061476365743815e-5}},{"degrees_of_freedom":[4560,4561,4562,4563,4564,4565],"id":"n760","parent":"11","position":{"x":7.142857142857142,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002759634514393425,"z":-0.00014098027282213575,"y":-0.0010613971095199664},"angle":{"x":-1.0656143070006072e-6,"z":5.133358810510793e-7,"y":-9.585858957328978e-5}},{"degrees_of_freedom":[4566,4567,4568,4569,4570,4571],"id":"n761","parent":"11","position":{"x":7.979694910895579,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00026709778213833386,"z":-5.860929151395569e-5,"y":-0.0010477658208068537},"angle":{"x":-7.16777730786704e-5,"z":8.978061468318768e-6,"y":7.461416028429891e-5}},{"degrees_of_freedom":[4572,4573,4574,4575,4576,4577],"id":"n762","parent":"11","position":{"x":10,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002643812970058066,"z":-0.00014937001403913537,"y":-0.0010582253596312494},"angle":{"x":0.00018282920131234285,"z":-1.3294355414489382e-5,"y":-3.080607296883362e-5}},{"degrees_of_freedom":[4578,4579,4580,4581,4582,4583],"id":"n763","parent":"11","position":{"x":12.020305089104422,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025408335698071625,"z":6.586609683125364e-5,"y":-0.0010891577849187384},"angle":{"x":-0.0003173921385211951,"z":-1.2243650223343699e-5,"y":-0.00023800461453076584}},{"degrees_of_freedom":[4584,4585,4586,4587,4588,4589],"id":"n764","parent":"11","position":{"x":12.857142857142858,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00024307324000341713,"z":-0.00037619168074176,"y":-0.0011084424345610437},"angle":{"x":-8.230589127023999e-5,"z":-1.3078940077461807e-6,"y":0.00032954390558828693}},{"degrees_of_freedom":[4590,4591,4592,4593,4594,4595],"id":"n765","parent":"11","position":{"x":12.020305089104422,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025001043372116277,"z":-0.00026669980888061447,"y":-0.0011269802755108982},"angle":{"x":1.570720314778021e-5,"z":1.192087574063258e-5,"y":9.291966047335284e-5}},{"degrees_of_freedom":[4596,4597,4598,4599,4600,4601],"id":"n766","parent":"11","position":{"x":25,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4602,4603,4604,4605,4606,4607],"id":"n767","parent":"11","position":{"x":20,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4608,4609,4610,4611,4612,4613],"id":"n768","parent":"11","position":{"x":20,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4614,4615,4616,4617,4618,4619],"id":"n769","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4620,4621,4622,4623,4624,4625],"id":"n770","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4626,4627,4628,4629,4630,4631],"id":"n771","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4632,4633,4634,4635,4636,4637],"id":"n772","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4638,4639,4640,4641,4642,4643],"id":"n773","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4644,4645,4646,4647,4648,4649],"id":"n774","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4650,4651,4652,4653,4654,4655],"id":"n775","parent":"11","position":{"x":20,"z":2.857142857142857,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4656,4657,4658,4659,4660,4661],"id":"n776","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4662,4663,4664,4665,4666,4667],"id":"n777","parent":"11","position":{"x":25,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":8.800141942526229e-5,"z":0.00010232256209551139,"y":-0.000652952104616271},"angle":{"x":6.471610938795587e-5,"z":2.9612797759522088e-5,"y":-9.987174983013996e-6}},{"degrees_of_freedom":[4668,4669,4670,4671,4672,4673],"id":"n778","parent":"11","position":{"x":25,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7738774934379678e-5,"z":2.158534983064027e-5,"y":-0.00028416174371298107},"angle":{"x":5.356141063335963e-5,"z":-1.5413640147758206e-5,"y":5.3132655423841006e-5}},{"degrees_of_freedom":[4674,4675,4676,4677,4678,4679],"id":"n779","parent":"11","position":{"x":25,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001242658387548679,"z":1.126801385719565e-5,"y":-0.00031755318847370625},"angle":{"x":2.5421613566736595e-5,"z":-7.082895234246143e-6,"y":6.680146293195557e-6}},{"degrees_of_freedom":[4680,4681,4682,4683,4684,4685],"id":"n780","parent":"11","position":{"x":25,"z":2.857142857142857,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.859387516188269e-5,"z":2.570824268136168e-5,"y":-0.0001958628109297879},"angle":{"x":-6.988078071399191e-7,"z":-3.164342243868323e-5,"y":-7.5347065782503795e-6}},{"degrees_of_freedom":[4686,4687,4688,4689,4690,4691],"id":"n781","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014979704601165674,"z":1.6012439108499038e-5,"y":-0.00024521632334961415},"angle":{"x":-1.8912973725396258e-5,"z":-0.00013095972484652508,"y":0.00027337446344103376}},{"degrees_of_freedom":[4692,4693,4694,4695,4696,4697],"id":"n782","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003458385656567038,"z":2.0405875959167535e-6,"y":-0.0003650250994919884},"angle":{"x":-8.392828973366257e-5,"z":-2.6679013248306088e-5,"y":-2.157597743500418e-5}},{"degrees_of_freedom":[4698,4699,4700,4701,4702,4703],"id":"n783","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023697712548672526,"z":2.2163128383317706e-6,"y":-0.0004591918432982362},"angle":{"x":3.2702275612055056e-5,"z":-0.00018892143407618582,"y":-0.0004804668386822553}},{"degrees_of_freedom":[4704,4705,4706,4707,4708,4709],"id":"n784","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001918849641075207,"z":-1.4548670222154077e-5,"y":-0.0004090187218259293},"angle":{"x":-1.70066426007746e-6,"z":-3.1643496257546173e-5,"y":-3.561715848839327e-5}},{"degrees_of_freedom":[4710,4711,4712,4713,4714,4715],"id":"n785","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.718122856283072e-5,"z":9.98886848205104e-7,"y":-0.0003646139240041374},"angle":{"x":-2.1063463291467725e-5,"z":-0.00021474592763804512,"y":0.000482275199450981}},{"degrees_of_freedom":[4716,4717,4718,4719,4720,4721],"id":"n786","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001655953164176197,"z":1.8097223470686535e-5,"y":-0.00024595716020589704},"angle":{"x":-8.707025379229689e-5,"z":-3.660766112731904e-5,"y":-2.157591047222122e-5}},{"degrees_of_freedom":[4722,4723,4724,4725,4726,4727],"id":"n787","parent":"11","position":{"x":25,"z":2.020305089104421,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.361981380321795e-9,"z":1.6124182134157457e-5,"y":-0.00014483930102924912},"angle":{"x":2.2419023703825954e-5,"z":-0.0001213344797223186,"y":-0.00026121957614799583}},{"degrees_of_freedom":[4728,4729,4730,4731,4732,4733],"id":"n788","parent":"11","position":{"x":20,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00011334209949441448,"z":5.8105372645226485e-5,"y":-0.0005959461655383495},"angle":{"x":-4.079209826286134e-6,"z":-5.0344904002335884e-5,"y":-1.4339083578549107e-5}},{"degrees_of_freedom":[4734,4735,4736,4737,4738,4739],"id":"n789","parent":"11","position":{"x":20,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":7.708897348434719e-5,"z":6.598706287040188e-5,"y":-0.0005946654881488123},"angle":{"x":-3.2121053295072184e-6,"z":-8.193747229511622e-6,"y":-1.183225324968823e-5}},{"degrees_of_freedom":[4740,4741,4742,4743,4744,4745],"id":"n790","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.648890146624778e-5,"z":8.238931287862016e-5,"y":-0.0012086982484194914},"angle":{"x":2.5499450691717302e-5,"z":-7.248925324208063e-5,"y":-9.422086833866765e-6}},{"degrees_of_freedom":[4746,4747,4748,4749,4750,4751],"id":"n791","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.609083019864705e-5,"z":7.862689318275907e-5,"y":-0.000846750384986554},"angle":{"x":0.000902070428062591,"z":-0.00038200502205928434,"y":-9.544255447913165e-6}},{"degrees_of_freedom":[4752,4753,4754,4755,4756,4757],"id":"n792","parent":"11","position":{"x":20,"z":2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.02843053494839e-5,"z":6.0220016429132546e-5,"y":-0.0007044430895328101},"angle":{"x":1.9764346152672077e-5,"z":-6.160547408559473e-5,"y":-1.1147815915382526e-5}},{"degrees_of_freedom":[4758,4759,4760,4761,4762,4763],"id":"n793","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.276945365404472e-5,"z":4.1895583130268185e-5,"y":-0.000545809307597526},"angle":{"x":-0.0005194441667586044,"z":-0.00024934992467869646,"y":-1.1863896156778706e-5}},{"degrees_of_freedom":[4764,4765,4766,4767,4768,4769],"id":"n794","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.724850893384296e-5,"z":3.435742538018852e-5,"y":-0.00017447033207237264},"angle":{"x":2.469618463307997e-5,"z":-5.5895725810522164e-5,"y":-7.897993927998666e-6}},{"degrees_of_freedom":[4770,4771,4772,4773,4774,4775],"id":"n795","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.839478752703262e-5,"z":3.7113693772261864e-5,"y":-0.00044193957141291186},"angle":{"x":0.0007594617848552986,"z":-0.0003146030338934354,"y":-1.3253384750336725e-5}},{"degrees_of_freedom":[4776,4777,4778,4779,4780,4781],"id":"n796","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010626012979981704,"z":5.853373576063406e-5,"y":-0.0005540664233278722},"angle":{"x":3.2867328248906716e-5,"z":-6.26226888704576e-5,"y":-1.1079944896757143e-5}},{"degrees_of_freedom":[4782,4783,4784,4785,4786,4787],"id":"n797","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.631437737753947e-5,"z":7.701626674672259e-5,"y":-0.0007421975994293118},"angle":{"x":-0.0006483939713179124,"z":-0.0003111453964446626,"y":-1.1149930097043164e-5}},{"degrees_of_freedom":[4788,4789,4790,4791,4792,4793],"id":"n798","parent":"11","position":{"x":20,"z":-5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.9158471347357616e-5,"z":-5.4867669866695094e-5,"y":-0.0001984883155747042},"angle":{"x":-6.0522621359132125e-6,"z":3.8828065768796233e-5,"y":-2.9665007647440442e-5}},{"degrees_of_freedom":[4794,4795,4796,4797,4798,4799],"id":"n799","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.40352812281303e-5,"z":-7.77771740489967e-11,"y":-0.00015852707003221532},"angle":{"x":-2.5604918221482238e-5,"z":-1.4772397029641545e-5,"y":-3.776396946778483e-5}},{"degrees_of_freedom":[4800,4801,4802,4803,4804,4805],"id":"n800","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.5623675032757584e-5,"z":-2.012750450013315e-5,"y":-0.00021025944860295122},"angle":{"x":7.130459417117838e-5,"z":3.082263999049248e-6,"y":0.00019619626990021076}},{"degrees_of_freedom":[4806,4807,4808,4809,4810,4811],"id":"n801","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9862891836544753e-5,"z":0.0002881140087995616,"y":-0.0002691954041329423},"angle":{"x":0.00016063500303244036,"z":2.418818564425198e-5,"y":-1.946633213789906e-5}},{"degrees_of_freedom":[4812,4813,4814,4815,4816,4817],"id":"n802","parent":"11","position":{"x":20,"z":-5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8378163503348867e-6,"z":0.0003832114008181824,"y":-0.000349776805817009},"angle":{"x":0.00026111292503056536,"z":3.8099015521420374e-5,"y":-6.108574258655343e-5}},{"degrees_of_freedom":[4818,4819,4820,4821,4822,4823],"id":"n803","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.349657002167933e-6,"z":4.1290429173349405e-5,"y":-0.0003851362777192358},"angle":{"x":-0.00015171588264969408,"z":-1.9901701298630717e-5,"y":-0.00023208498962297314}},{"degrees_of_freedom":[4824,4825,4826,4827,4828,4829],"id":"n804","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.1631504665227996e-7,"z":0.00015358522369722679,"y":-0.00033525901371759794},"angle":{"x":3.988389732808953e-5,"z":4.777715286724166e-6,"y":0.0002304776132508249}},{"degrees_of_freedom":[4830,4831,4832,4833,4834,4835],"id":"n805","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.1484432394510787e-5,"z":-0.00011986480083748148,"y":-0.0002799681560437164},"angle":{"x":0.0001794688977188101,"z":2.5350655578390547e-5,"y":-0.00010651039030331402}},{"degrees_of_freedom":[4836,4837,4838,4839,4840,4841],"id":"n806","parent":"11","position":{"x":20,"z":5,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.38216042058211e-5,"z":7.93532352799837e-5,"y":-0.00042411034187861835},"angle":{"x":3.4382363873578516e-5,"z":-4.601895313227497e-6,"y":-5.808508656254651e-6}},{"degrees_of_freedom":[4842,4843,4844,4845,4846,4847],"id":"n807","parent":"11","position":{"x":17.979694910895578,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.523421709875858e-5,"z":3.9325514987696503e-5,"y":-0.0003793433295401541},"angle":{"x":-3.210826546052468e-6,"z":-4.092281841020902e-5,"y":-2.06677984242973e-5}},{"degrees_of_freedom":[4848,4849,4850,4851,4852,4853],"id":"n808","parent":"11","position":{"x":17.142857142857142,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.2655800329852194e-5,"z":2.8375920413229477e-5,"y":-0.0002838547268893206},"angle":{"x":7.395088991846353e-6,"z":-7.833946246048394e-6,"y":4.6846780876085e-6}},{"degrees_of_freedom":[4854,4855,4856,4857,4858,4859],"id":"n809","parent":"11","position":{"x":17.979694910895578,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5626924118573984e-5,"z":9.585690421264548e-6,"y":-0.00019904181597212752},"angle":{"x":1.5525147330733718e-5,"z":2.912774289882799e-5,"y":-1.5195477342506216e-5}},{"degrees_of_freedom":[4860,4861,4862,4863,4864,4865],"id":"n810","parent":"11","position":{"x":20,"z":5,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.4533052239465706e-5,"z":2.797627875672557e-5,"y":-0.00017005443113106013},"angle":{"x":-2.2551153953247013e-5,"z":-1.9460368599064045e-6,"y":6.905494858835453e-8}},{"degrees_of_freedom":[4866,4867,4868,4869,4870,4871],"id":"n811","parent":"11","position":{"x":22.020305089104422,"z":5,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.625237913392513e-5,"z":8.623544717771334e-6,"y":-0.00021493438436143966},"angle":{"x":2.014452454146895e-5,"z":-4.8213753242193236e-5,"y":1.8261379756815275e-5}},{"degrees_of_freedom":[4872,4873,4874,4875,4876,4877],"id":"n812","parent":"11","position":{"x":22.857142857142858,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010773229117378732,"z":3.766636204186481e-5,"y":-0.00031068507712571396},"angle":{"x":1.4066942022727817e-5,"z":-8.41699071743807e-6,"y":-2.9116446030124674e-6}},{"degrees_of_freedom":[4878,4879,4880,4881,4882,4883],"id":"n813","parent":"11","position":{"x":22.020305089104422,"z":5,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.762826262650021e-5,"z":6.183602816323206e-5,"y":-0.00039548318302091827},"angle":{"x":7.701525086061045e-6,"z":3.636386418959175e-5,"y":5.955382241480321e-6}},{"degrees_of_freedom":[4884,4885,4886,4887,4888,4889],"id":"n814","parent":"11","position":{"x":25,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4890,4891,4892,4893,4894,4895],"id":"n815","parent":"11","position":{"x":20,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4896,4897,4898,4899,4900,4901],"id":"n816","parent":"11","position":{"x":22.857142857142858,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4902,4903,4904,4905,4906,4907],"id":"n817","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4908,4909,4910,4911,4912,4913],"id":"n818","parent":"11","position":{"x":20,"z":7.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4914,4915,4916,4917,4918,4919],"id":"n819","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4920,4921,4922,4923,4924,4925],"id":"n820","parent":"11","position":{"x":17.142857142857142,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4926,4927,4928,4929,4930,4931],"id":"n821","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4932,4933,4934,4935,4936,4937],"id":"n822","parent":"11","position":{"x":20,"z":12.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4938,4939,4940,4941,4942,4943],"id":"n823","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[4944,4945,4946,4947,4948,4949],"id":"n824","parent":"11","position":{"x":25,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":3.870480823596791e-5,"z":0.00011116010583942319,"y":-0.0006340980656278486},"angle":{"x":6.178452011405212e-5,"z":-9.675292959041952e-6,"y":-1.0192538777397896e-5}},{"degrees_of_freedom":[4950,4951,4952,4953,4954,4955],"id":"n825","parent":"11","position":{"x":25,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.638280962812538e-5,"z":1.3296799792446775e-5,"y":-0.00028587553279655145},"angle":{"x":2.6034950339209882e-5,"z":3.592286216253258e-6,"y":1.2413681132932838e-5}},{"degrees_of_freedom":[4956,4957,4958,4959,4960,4961],"id":"n826","parent":"11","position":{"x":25,"z":12.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.7744748725671213e-5,"z":3.089722166787598e-5,"y":-0.00018313660477618392},"angle":{"x":-6.904284149922484e-7,"z":3.055851861290809e-6,"y":1.1192728214792338e-5}},{"degrees_of_freedom":[4962,4963,4964,4965,4966,4967],"id":"n827","parent":"11","position":{"x":25,"z":12.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.497894269071734e-8,"z":2.0133687967381023e-5,"y":-0.00022874943162173967},"angle":{"x":-1.9463078183797306e-5,"z":-2.1858788253737524e-5,"y":8.54629676513048e-5}},{"degrees_of_freedom":[4968,4969,4970,4971,4972,4973],"id":"n828","parent":"11","position":{"x":25,"z":10,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.27882892605185e-5,"z":6.834069309617607e-6,"y":-0.00035263217003161083},"angle":{"x":-8.602276152471342e-5,"z":1.221042896237096e-5,"y":-7.098395746492226e-6}},{"degrees_of_freedom":[4974,4975,4976,4977,4978,4979],"id":"n829","parent":"11","position":{"x":25,"z":7.979694910895579,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.3886197490784665e-5,"z":8.224537507088451e-6,"y":-0.0004479694759005627},"angle":{"x":3.303817369833887e-5,"z":6.468185481353036e-5,"y":0.00013751227622158823}},{"degrees_of_freedom":[4980,4981,4982,4983,4984,4985],"id":"n830","parent":"11","position":{"x":25,"z":7.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.402904948259523e-5,"z":-1.0437908444908732e-5,"y":-0.0004013553019192155},"angle":{"x":-1.4304439129958295e-6,"z":6.485789688996902e-6,"y":-3.08921373394726e-5}},{"degrees_of_freedom":[4986,4987,4988,4989,4990,4991],"id":"n831","parent":"11","position":{"x":25,"z":7.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.24684722629685e-5,"z":7.642246174105813e-6,"y":-0.00035908753610330954},"angle":{"x":-2.4169875244128857e-5,"z":1.5508197862786974e-5,"y":-6.021248207685648e-5}},{"degrees_of_freedom":[4992,4993,4994,4995,4996,4997],"id":"n832","parent":"11","position":{"x":25,"z":10,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4319613227103532e-5,"z":2.4501941401693743e-5,"y":-0.00023678676176697297},"angle":{"x":-8.845384393169353e-5,"z":-2.6688179411146336e-6,"y":-1.2601187459611544e-5}},{"degrees_of_freedom":[4998,4999,5000,5001,5002,5003],"id":"n833","parent":"11","position":{"x":25,"z":12.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.6671536004363002e-5,"z":2.07442612263812e-5,"y":-0.00013644609010793476},"angle":{"x":2.1883922917802e-5,"z":2.0176042202201685e-5,"y":5.5814909387453854e-5}},{"degrees_of_freedom":[5004,5005,5006,5007,5008,5009],"id":"n834","parent":"11","position":{"x":20,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":1.0456342523547553e-5,"z":8.245274375548037e-5,"y":-0.0005790314409916059},"angle":{"x":2.1745604295069177e-6,"z":2.949666724435306e-6,"y":-1.0470870735768576e-5}},{"degrees_of_freedom":[5010,5011,5012,5013,5014,5015],"id":"n835","parent":"11","position":{"x":22.857142857142858,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.784614294792034e-5,"z":9.323444482821343e-5,"y":-0.000625600289380924},"angle":{"x":2.2498138512085882e-5,"z":-6.3999195468453515e-6,"y":-1.1572737141198486e-5}},{"degrees_of_freedom":[5016,5017,5018,5019,5020,5021],"id":"n836","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.3414833153037043e-5,"z":9.048011783643545e-5,"y":-0.0006289894664451458},"angle":{"x":-0.00010039866997063004,"z":3.416685756440536e-5,"y":-8.012168615950504e-6}},{"degrees_of_freedom":[5022,5023,5024,5025,5026,5027],"id":"n837","parent":"11","position":{"x":20,"z":12.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4965295335786696e-5,"z":7.691670724838649e-5,"y":-0.0006212923399374747},"angle":{"x":1.7015186483357804e-5,"z":-1.0228971307128416e-5,"y":-8.24168835159008e-6}},{"degrees_of_freedom":[5028,5029,5030,5031,5032,5033],"id":"n838","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9306572599031173e-5,"z":6.0769284059757894e-5,"y":-0.0005851172860546789},"angle":{"x":-0.00010443872075301121,"z":-5.0285672608392706e-5,"y":-9.854593175151207e-6}},{"degrees_of_freedom":[5034,5035,5036,5037,5038,5039],"id":"n839","parent":"11","position":{"x":17.142857142857142,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.226010963294067e-5,"z":5.382662711414831e-5,"y":-0.0005197541606614343},"angle":{"x":1.3641958899479792e-5,"z":-5.654155039418397e-6,"y":-1.276909746940052e-5}},{"degrees_of_freedom":[5040,5041,5042,5043,5044,5045],"id":"n840","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.4697091120852484e-5,"z":5.809631810792909e-5,"y":-0.0005223031880193374},"angle":{"x":0.00012574638945460055,"z":-4.37456919674527e-5,"y":-9.894290500068408e-6}},{"degrees_of_freedom":[5046,5047,5048,5049,5050,5051],"id":"n841","parent":"11","position":{"x":20,"z":7.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.567183410674034e-5,"z":7.201389071927345e-5,"y":-0.0005180353012137304},"angle":{"x":1.9124616763716693e-5,"z":-4.708875537169711e-6,"y":-8.172311466162615e-6}},{"degrees_of_freedom":[5052,5053,5054,5055,5056,5057],"id":"n842","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.960213520274419e-5,"z":8.72875348331634e-5,"y":-0.000548854404201299},"angle":{"x":-0.00024739245844675146,"z":-0.00010084866365298828,"y":-1.096560221906341e-5}},{"degrees_of_freedom":[5058,5059,5060,5061,5062,5063],"id":"n843","parent":"11","position":{"x":20,"z":15,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1377489371548494e-5,"z":8.876513759877269e-5,"y":-0.0004122077587379459},"angle":{"x":2.753593701147213e-5,"z":-1.2979474146359228e-6,"y":-2.9116865532810136e-6}},{"degrees_of_freedom":[5064,5065,5066,5067,5068,5069],"id":"n844","parent":"11","position":{"x":17.979694910895578,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.508215286784359e-6,"z":6.046521924226705e-5,"y":-0.0003750580224832129},"angle":{"x":-3.918369946906784e-6,"z":-3.594648500343025e-5,"y":-1.50113853543217e-5}},{"degrees_of_freedom":[5070,5071,5072,5073,5074,5075],"id":"n845","parent":"11","position":{"x":17.142857142857142,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2631166665120793e-5,"z":5.553001566215032e-5,"y":-0.0002847439228212578},"angle":{"x":9.163431222707421e-6,"z":-1.3871956148434617e-6,"y":1.6052114560831092e-5}},{"degrees_of_freedom":[5076,5077,5078,5079,5080,5081],"id":"n846","parent":"11","position":{"x":17.979694910895578,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.5259127898841952e-6,"z":2.3728775070976042e-5,"y":-0.00019720044540243634},"angle":{"x":2.029944621433127e-5,"z":3.2458348978483345e-5,"y":-1.1351352443597765e-5}},{"degrees_of_freedom":[5082,5083,5084,5085,5086,5087],"id":"n847","parent":"11","position":{"x":20,"z":15,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4085315845294137e-5,"z":3.0654676768099726e-5,"y":-0.00016467496305830724},"angle":{"x":-1.427954288201913e-5,"z":-2.1122684901322073e-7,"y":2.2440847652353718e-6}},{"degrees_of_freedom":[5088,5089,5090,5091,5092,5093],"id":"n848","parent":"11","position":{"x":22.020305089104422,"z":15,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.300386857112435e-5,"z":1.3681250117498673e-5,"y":-0.00020310004662766565},"angle":{"x":2.21183295713532e-5,"z":-4.2429516236934626e-5,"y":1.8048232916726214e-5}},{"degrees_of_freedom":[5094,5095,5096,5097,5098,5099],"id":"n849","parent":"11","position":{"x":22.857142857142858,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.062334062251834e-5,"z":4.657700920077297e-5,"y":-0.00029086644625890654},"angle":{"x":1.5000458870405017e-5,"z":-1.0329544588630023e-6,"y":-5.075020743154878e-6}},{"degrees_of_freedom":[5100,5101,5102,5103,5104,5105],"id":"n850","parent":"11","position":{"x":22.020305089104422,"z":15,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7318079396473766e-5,"z":7.097882694935065e-5,"y":-0.000376736865518564},"angle":{"x":7.888455221049903e-6,"z":4.009784557741376e-5,"y":6.1556734248759646e-6}},{"degrees_of_freedom":[5106,5107,5108,5109,5110,5111],"id":"n851","parent":"11","position":{"x":25,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5112,5113,5114,5115,5116,5117],"id":"n852","parent":"11","position":{"x":20,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5118,5119,5120,5121,5122,5123],"id":"n853","parent":"11","position":{"x":22.857142857142858,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5124,5125,5126,5127,5128,5129],"id":"n854","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5130,5131,5132,5133,5134,5135],"id":"n855","parent":"11","position":{"x":20,"z":17.142857142857142,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5136,5137,5138,5139,5140,5141],"id":"n856","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5142,5143,5144,5145,5146,5147],"id":"n857","parent":"11","position":{"x":17.142857142857142,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5148,5149,5150,5151,5152,5153],"id":"n858","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5154,5155,5156,5157,5158,5159],"id":"n859","parent":"11","position":{"x":20,"z":22.857142857142858,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5160,5161,5162,5163,5164,5165],"id":"n860","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[5166,5167,5168,5169,5170,5171],"id":"n861","parent":"11","position":{"x":25,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-3.4923994723091654e-5,"z":0.0001181852966244914,"y":-0.0006207150889528164},"angle":{"x":6.095568704466468e-5,"z":-1.4343598663791722e-5,"y":-9.175726807808534e-6}},{"degrees_of_freedom":[5172,5173,5174,5175,5176,5177],"id":"n862","parent":"11","position":{"x":25,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.9116781181668117e-5,"z":3.49704819706425e-6,"y":-0.0003067974878889031},"angle":{"x":5.585383954939906e-5,"z":7.378969094963392e-6,"y":6.945596421557684e-5}},{"degrees_of_freedom":[5178,5179,5180,5181,5182,5183],"id":"n863","parent":"11","position":{"x":25,"z":22.857142857142858,"y":-3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.000141316232206683,"z":3.328005619676882e-5,"y":-0.00017988156340219163},"angle":{"x":2.183454355698826e-6,"z":4.9679720841884016e-5,"y":-2.835362685510162e-5}},{"degrees_of_freedom":[5184,5185,5186,5187,5188,5189],"id":"n864","parent":"11","position":{"x":25,"z":22.020305089104422,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002351774922682589,"z":2.9726527690584893e-5,"y":-0.0002213465451922211},"angle":{"x":-1.3820394899463576e-5,"z":3.9701243917274594e-5,"y":-1.302192888443512e-7}},{"degrees_of_freedom":[5190,5191,5192,5193,5194,5195],"id":"n865","parent":"11","position":{"x":25,"z":20,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00046177876230488115,"z":1.7846643998170233e-5,"y":-0.0003386640306539485},"angle":{"x":-8.188745005202734e-5,"z":5.3340929094114565e-5,"y":-3.870899077941761e-5}},{"degrees_of_freedom":[5196,5197,5198,5199,5200,5201],"id":"n866","parent":"11","position":{"x":25,"z":17.979694910895578,"y":2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.876945503446289e-5,"z":1.729820082616824e-5,"y":-0.00043136301880867487},"angle":{"x":3.455991436978187e-5,"z":0.00031276338437860585,"y":0.0006950484838799174}},{"degrees_of_freedom":[5202,5203,5204,5205,5206,5207],"id":"n867","parent":"11","position":{"x":25,"z":17.142857142857142,"y":3.140184917367551e-16},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.987864833555858e-5,"z":-4.647002514018972e-6,"y":-0.0003816250687535176},"angle":{"x":1.2250805284939558e-6,"z":4.9680114121864335e-5,"y":-4.9064139055939415e-5}},{"degrees_of_freedom":[5208,5209,5210,5211,5212,5213],"id":"n868","parent":"11","position":{"x":25,"z":17.979694910895578,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015640923637326635,"z":7.1553286466420585e-6,"y":-0.0003403405765568337},"angle":{"x":-1.996077434051147e-5,"z":0.00010555788743027249,"y":-0.00020711126590521018}},{"degrees_of_freedom":[5214,5215,5216,5217,5218,5219],"id":"n869","parent":"11","position":{"x":25,"z":20,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003411682830009422,"z":2.2355361616971104e-5,"y":-0.00022694251551556385},"angle":{"x":-8.210652948238054e-5,"z":4.60186575528014e-5,"y":-3.8709578111631766e-5}},{"degrees_of_freedom":[5220,5221,5222,5223,5224,5225],"id":"n870","parent":"11","position":{"x":25,"z":22.020305089104422,"y":-2.0203050891044216},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.3791510189321574e-10,"z":1.9984223322078068e-5,"y":-0.0001328870933162912},"angle":{"x":2.2456142747054123e-5,"z":0.0002499800310732417,"y":0.0005381810251427999}},{"degrees_of_freedom":[5226,5227,5228,5229,5230,5231],"id":"n871","parent":"11","position":{"x":20,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-6.619640936075839e-5,"z":8.775545770899125e-5,"y":-0.0006052652259695725},"angle":{"x":-8.862334276218445e-6,"z":3.809208348520768e-5,"y":-9.36379982993781e-6}},{"degrees_of_freedom":[5232,5233,5234,5235,5236,5237],"id":"n872","parent":"11","position":{"x":22.857142857142858,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.4511161267040204e-5,"z":0.0001025527192646492,"y":-0.0005051316439815026},"angle":{"x":1.306098515988908e-5,"z":1.1140289272145158e-5,"y":-1.2784055314212878e-5}},{"degrees_of_freedom":[5238,5239,5240,5241,5242,5243],"id":"n873","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.915878402721301e-5,"z":9.857350981292002e-5,"y":-0.0005961079585568783},"angle":{"x":-0.00028309116340229855,"z":0.00011633431527646081,"y":-8.082800312954306e-6}},{"degrees_of_freedom":[5244,5245,5246,5247,5248,5249],"id":"n874","parent":"11","position":{"x":20,"z":22.857142857142858,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.529162142835551e-5,"z":8.746754531935644e-5,"y":-0.0006353332344129292},"angle":{"x":1.4655689422087567e-5,"z":1.155346863230116e-5,"y":-5.241144665632569e-6}},{"degrees_of_freedom":[5250,5251,5252,5253,5254,5255],"id":"n875","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.26335538484658e-5,"z":7.910540962794063e-5,"y":-0.0006500296282408909},"angle":{"x":0.00018800247586138317,"z":7.23522408479035e-5,"y":-4.476500020541698e-6}},{"degrees_of_freedom":[5256,5257,5258,5259,5260,5261],"id":"n876","parent":"11","position":{"x":17.142857142857142,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.954111348292716e-5,"z":7.519662944552527e-5,"y":-0.0006817877188989396},"angle":{"x":1.506116240020731e-5,"z":1.0719761967195176e-5,"y":-1.2376792177486221e-5}},{"degrees_of_freedom":[5262,5263,5264,5265,5266,5267],"id":"n877","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.3297104970540368e-5,"z":7.778202580395959e-5,"y":-0.000591034271722683},"angle":{"x":-0.00014259073900344985,"z":6.596962576371202e-5,"y":-6.480299868136951e-6}},{"degrees_of_freedom":[5268,5269,5270,5271,5272,5273],"id":"n878","parent":"11","position":{"x":20,"z":17.142857142857142,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.6405389419293103e-5,"z":8.616674873820613e-5,"y":-0.0005549845086504093},"angle":{"x":1.3466255156410982e-5,"z":1.0306719048065382e-5,"y":-4.880985875209096e-6}},{"degrees_of_freedom":[5274,5275,5276,5277,5278,5279],"id":"n879","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.9870940183055213e-5,"z":9.780927393245586e-5,"y":-0.000541472900944528},"angle":{"x":4.622119315184703e-5,"z":2.2375756929820026e-5,"y":-9.172267662746528e-6}},{"degrees_of_freedom":[5280,5281,5282,5283,5284,5285],"id":"n880","parent":"11","position":{"x":20,"z":25,"y":2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8413049997207885e-5,"z":6.461660519912971e-5,"y":-0.0003673483013419944},"angle":{"x":-5.29378363961616e-5,"z":-4.04691747787979e-5,"y":-1.1960035758168456e-5}},{"degrees_of_freedom":[5286,5287,5288,5289,5290,5291],"id":"n881","parent":"11","position":{"x":17.979694910895578,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0096802568732626e-5,"z":8.475406776157028e-5,"y":-0.00028206248505990226},"angle":{"x":1.4438450756764179e-5,"z":-2.6310329763294966e-5,"y":1.5948137268894246e-5}},{"degrees_of_freedom":[5292,5293,5294,5295,5296,5297],"id":"n882","parent":"11","position":{"x":17.142857142857142,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2283317166707337e-5,"z":6.892999077955585e-5,"y":-0.00021618977793732368},"angle":{"x":2.0975555289394654e-5,"z":-7.690895821519811e-6,"y":3.17300889230732e-5}},{"degrees_of_freedom":[5298,5299,5300,5301,5302,5303],"id":"n883","parent":"11","position":{"x":17.979694910895578,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.078876309690839e-5,"z":2.3367562763081858e-11,"y":-0.0001629625947781877},"angle":{"x":8.76888193346583e-5,"z":1.1288728424997627e-5,"y":-0.00012932995244083437}},{"degrees_of_freedom":[5304,5305,5306,5307,5308,5309],"id":"n884","parent":"11","position":{"x":20,"z":25,"y":-2.857142857142857},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6218987140442757e-5,"z":0.0001879046865756806,"y":-0.0002109177990777828},"angle":{"x":-0.00016621908863843614,"z":-4.2644438421681216e-5,"y":-2.415786124843721e-5}},{"degrees_of_freedom":[5310,5311,5312,5313,5314,5315],"id":"n885","parent":"11","position":{"x":22.020305089104422,"z":25,"y":-2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.4037823408584447e-6,"z":9.761248275731809e-5,"y":-0.00029987526645660186},"angle":{"x":4.968304536541242e-5,"z":-2.9596450014960764e-5,"y":6.527178297894975e-5}},{"degrees_of_freedom":[5316,5317,5318,5319,5320,5321],"id":"n886","parent":"11","position":{"x":22.857142857142858,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4443076324842364e-5,"z":0.00014336553184961232,"y":-0.0003589345080945855},"angle":{"x":8.777751554884233e-6,"z":-6.7966105786035875e-6,"y":-3.348238888652463e-5}},{"degrees_of_freedom":[5322,5323,5324,5325,5326,5327],"id":"n887","parent":"11","position":{"x":22.020305089104422,"z":25,"y":2.020305089104421},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.431059146057108e-5,"z":0.0001330799168325571,"y":-0.0004075087548528461},"angle":{"x":1.0798258316655042e-5,"z":1.7418813158109212e-5,"y":-3.8360401856286425e-5}},{"degrees_of_freedom":[5328,5329,5330,5331,5332,5333],"id":"n888","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.056644328223697e-5,"z":8.224881433979155e-5,"y":-0.001091160845542544},"angle":{"x":2.5500566786207723e-5,"z":-5.637111813656894e-5,"y":-8.828242887754213e-6}},{"degrees_of_freedom":[5334,5335,5336,5337,5338,5339],"id":"n889","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010045095887910417,"z":7.798805593277776e-5,"y":-0.0007167628924343613},"angle":{"x":-0.0007933760909406769,"z":-0.0003462858704417123,"y":-1.0254824785341804e-5}},{"degrees_of_freedom":[5340,5341,5342,5343,5344,5345],"id":"n890","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.609238463571016e-5,"z":3.8532782851525483e-5,"y":-0.00042538416313195955},"angle":{"x":0.00037275249818803923,"z":-0.0001869022770702059,"y":-1.2281396134001793e-5}},{"degrees_of_freedom":[5346,5347,5348,5349,5350,5351],"id":"n891","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.585645800440255e-5,"z":3.2011197010067814e-5,"y":-0.00011756377799524268},"angle":{"x":2.9567719150426072e-5,"z":-6.3699439121012e-5,"y":-1.0955848606421025e-5}},{"degrees_of_freedom":[5352,5353,5354,5355,5356,5357],"id":"n892","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.276379392055375e-5,"z":3.648380797292615e-5,"y":-0.0005377369142214572},"angle":{"x":-0.0007363348411126746,"z":-0.00033261816686775905,"y":-1.2876677119016368e-5}},{"degrees_of_freedom":[5358,5359,5360,5361,5362,5363],"id":"n893","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.153934013420636e-5,"z":7.787576116970879e-5,"y":-0.0008213174969308652},"angle":{"x":-1.0794403384982439e-5,"z":-4.314075700764764e-5,"y":-9.353524465905123e-6}},{"degrees_of_freedom":[5364,5365,5366,5367,5368,5369],"id":"n894","parent":"11","position":{"x":25,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00017906315571326642,"z":0.00025306067285702893,"y":-0.0011141012138001236},"angle":{"x":4.1946588295141905e-5,"z":-3.800802932602603e-6,"y":-2.278386671757943e-5}},{"degrees_of_freedom":[5370,5371,5372,5373,5374,5375],"id":"n895","parent":"11","position":{"x":25,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002115297066209477,"z":0.0002024797108463492,"y":-0.0008558943286480209},"angle":{"x":4.225556279621638e-5,"z":-1.6855751916574828e-5,"y":-8.462869636512097e-5}},{"degrees_of_freedom":[5376,5377,5378,5379,5380,5381],"id":"n896","parent":"11","position":{"x":25,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015976473250205224,"z":0.0001990030589516749,"y":-0.0008480344158042344},"angle":{"x":1.8393166021697842e-5,"z":-1.1975487557234377e-5,"y":-2.0063797134856754e-5}},{"degrees_of_freedom":[5382,5383,5384,5385,5386,5387],"id":"n897","parent":"11","position":{"x":25,"z":2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013759544492677344,"z":0.0002121389973881274,"y":-0.0008140037983874222},"angle":{"x":6.16825528021244e-7,"z":-7.54842095823057e-5,"y":2.3779749696440602e-5}},{"degrees_of_freedom":[5388,5389,5390,5391,5392,5393],"id":"n898","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00029636144434800135,"z":0.00019978866305984353,"y":-0.0008376398512456403},"angle":{"x":-1.7409164872566506e-5,"z":-0.00021298761372351177,"y":0.00041269948087011715}},{"degrees_of_freedom":[5394,5395,5396,5397,5398,5399],"id":"n899","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0006796534303710491,"z":0.00018859278266599287,"y":-0.0009204693337158228},"angle":{"x":-5.782899676545124e-5,"z":-7.475861429517933e-5,"y":2.1729729665311887e-5}},{"degrees_of_freedom":[5400,5401,5402,5403,5404,5405],"id":"n900","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020856132831337433,"z":0.00018881181625899723,"y":-0.000984236291938355},"angle":{"x":2.1998114538891726e-5,"z":-0.0003667913191718637,"y":-0.000804264466590967}},{"degrees_of_freedom":[5406,5407,5408,5409,5410,5411],"id":"n901","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.3429203448037395e-5,"z":0.0001765110531495367,"y":-0.0009493171356823625},"angle":{"x":2.1919812480948856e-7,"z":-7.54836512211231e-5,"y":1.967788857351461e-5}},{"degrees_of_freedom":[5412,5413,5414,5415,5416,5417],"id":"n902","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014876843666585137,"z":0.00018307545767156985,"y":-0.0009203974670036413},"angle":{"x":-1.1207118141449294e-5,"z":-0.00010792134164740775,"y":0.0001114255693330539}},{"degrees_of_freedom":[5418,5419,5420,5421,5422,5423],"id":"n903","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0005403483708447906,"z":0.00019254289221990503,"y":-0.0008457031772649974},"angle":{"x":-5.230405188546227e-5,"z":-7.620883923156056e-5,"y":2.1728902071844383e-5}},{"degrees_of_freedom":[5424,5425,5426,5427,5428,5429],"id":"n904","parent":"11","position":{"x":25,"z":2.020305089104421,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.097021347475403e-5,"z":0.000194795685302576,"y":-0.0007862418119411753},"angle":{"x":2.4522171598181404e-5,"z":-0.0004604020122584152,"y":-0.0010649333975350725}},{"degrees_of_freedom":[5430,5431,5432,5433,5434,5435],"id":"n905","parent":"11","position":{"x":20,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00026001672646664304,"z":0.00015728367525865575,"y":-0.0010213924136371723},"angle":{"x":-1.6884727240609048e-5,"z":-2.89196229410937e-5,"y":-3.6791070539645143e-5}},{"degrees_of_freedom":[5436,5437,5438,5439,5440,5441],"id":"n906","parent":"11","position":{"x":20,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00011823798545096379,"z":0.00016235667122802813,"y":-0.0010019357416676973},"angle":{"x":-6.892137734585887e-7,"z":-5.389163652106912e-6,"y":-2.7851440521117663e-5}},{"degrees_of_freedom":[5442,5443,5444,5445,5446,5447],"id":"n907","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017654993541914296,"z":0.00021041113628015155,"y":-0.001364817227661902},"angle":{"x":1.9683661008745045e-5,"z":-4.55131975061425e-5,"y":-2.6193628820789847e-5}},{"degrees_of_freedom":[5448,5449,5450,5451,5452,5453],"id":"n908","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001481358025172795,"z":0.00019967080564793792,"y":-0.0011448817925650181},"angle":{"x":0.0003707674234323482,"z":-0.00016944424394379413,"y":-2.3063205761460654e-5}},{"degrees_of_freedom":[5454,5455,5456,5457,5458,5459],"id":"n909","parent":"11","position":{"x":20,"z":2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013318063219704314,"z":0.00015843492517144252,"y":-0.001057984314828703},"angle":{"x":8.361200649087011e-6,"z":-3.657473949986096e-5,"y":-2.299619722625024e-5}},{"degrees_of_freedom":[5460,5461,5462,5463,5464,5465],"id":"n910","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015475999458284693,"z":0.00011914627533193573,"y":-0.0009665571924633061},"angle":{"x":-0.0002895489580340408,"z":-0.00014023070326199012,"y":-2.4954869656067915e-5}},{"degrees_of_freedom":[5466,5467,5468,5469,5470,5471],"id":"n911","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017849779650117568,"z":0.00010580254628750108,"y":-0.0007526163237320748},"angle":{"x":1.911700465723116e-5,"z":-3.0470753795248068e-5,"y":-2.4296192974277887e-5}},{"degrees_of_freedom":[5472,5473,5474,5475,5476,5477],"id":"n912","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020741893778170617,"z":0.00011500319916201388,"y":-0.0008869125889595148},"angle":{"x":0.00041468008705664754,"z":-0.00016969335214380538,"y":-2.5423475471735704e-5}},{"degrees_of_freedom":[5478,5479,5480,5481,5482,5483],"id":"n913","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022522122554203687,"z":0.00015760173557304637,"y":-0.000943215778008635},"angle":{"x":3.180766373482112e-5,"z":-3.707418837881564e-5,"y":-2.3258173836402186e-5}},{"degrees_of_freedom":[5484,5485,5486,5487,5488,5489],"id":"n914","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020589718844306727,"z":0.00019881366608468136,"y":-0.0010646018807449454},"angle":{"x":-0.00047867720528390706,"z":-0.00022190616217453347,"y":-2.5451971295654004e-5}},{"degrees_of_freedom":[5490,5491,5492,5493,5494,5495],"id":"n915","parent":"11","position":{"x":20,"z":-5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020669575212003787,"z":8.188466218170956e-5,"y":-0.0007659362050513954},"angle":{"x":-2.9920117009160866e-5,"z":1.786124483643235e-5,"y":-8.946059030580182e-6}},{"degrees_of_freedom":[5496,5497,5498,5499,5500,5501],"id":"n916","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021259060009617343,"z":7.492014145027252e-5,"y":-0.0007564344906849808},"angle":{"x":1.1097092686553803e-5,"z":-1.9033737141312595e-5,"y":8.043831592332074e-6}},{"degrees_of_freedom":[5502,5503,5504,5505,5506,5507],"id":"n917","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00022370394372184151,"z":9.060829986914004e-5,"y":-0.0007945818064307511},"angle":{"x":-9.711041631305747e-6,"z":-3.5790403887443577e-7,"y":-4.219149722586449e-5}},{"degrees_of_freedom":[5508,5509,5510,5511,5512,5513],"id":"n918","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021763105719043411,"z":3.5681577719371676e-5,"y":-0.0008278523505557328},"angle":{"x":-5.562732149117658e-6,"z":1.15164597602501e-5,"y":-5.2206460134733505e-5}},{"degrees_of_freedom":[5514,5515,5516,5517,5518,5519],"id":"n919","parent":"11","position":{"x":20,"z":-5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020625051245163896,"z":-7.444643249182419e-5,"y":-0.0008677819829302173},"angle":{"x":-0.0001899055202715305,"z":1.8806380091240917e-5,"y":2.4150881637140976e-5}},{"degrees_of_freedom":[5520,5521,5522,5523,5524,5525],"id":"n920","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002001928798376462,"z":0.00013326582668009166,"y":-0.000881867134965445},"angle":{"x":0.00010814066250317105,"z":-1.548575808713291e-5,"y":0.00014760563942883058}},{"degrees_of_freedom":[5526,5527,5528,5529,5530,5531],"id":"n921","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019338150915912836,"z":3.831068711764734e-5,"y":-0.0008423946032869573},"angle":{"x":2.3385877501547185e-5,"z":1.3355657250443892e-7,"y":-5.701047497342239e-5}},{"degrees_of_freedom":[5532,5533,5534,5535,5536,5537],"id":"n922","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019831508918046237,"z":3.877260729270789e-5,"y":-0.0008055756533393796},"angle":{"x":1.0393694922447811e-5,"z":1.1178372860659586e-5,"y":-2.564458827517652e-5}},{"degrees_of_freedom":[5538,5539,5540,5541,5542,5543],"id":"n923","parent":"11","position":{"x":20,"z":5,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012334437645225208,"z":0.00013456621047922118,"y":-0.0008887697339400886},"angle":{"x":2.3050142731556482e-7,"z":-6.875096997117852e-6,"y":-1.9822999260291755e-5}},{"degrees_of_freedom":[5544,5545,5546,5547,5548,5549],"id":"n924","parent":"11","position":{"x":17.979694910895578,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.918941436761857e-5,"z":9.507912654658032e-5,"y":-0.0008522095958447981},"angle":{"x":1.728160139383094e-5,"z":-2.982924619877173e-5,"y":-1.1640103365623991e-5}},{"degrees_of_freedom":[5550,5551,5552,5553,5554,5555],"id":"n925","parent":"11","position":{"x":17.142857142857142,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.761556448349228e-5,"z":4.947287905794044e-5,"y":-0.0007859610605709475},"angle":{"x":1.1326190926799395e-5,"z":-3.8067257605280697e-6,"y":-2.7722836177717284e-5}},{"degrees_of_freedom":[5556,5557,5558,5559,5560,5561],"id":"n926","parent":"11","position":{"x":17.979694910895578,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.323104725422965e-5,"z":5.026566823120217e-5,"y":-0.000726770312412798},"angle":{"x":5.6345516384595665e-8,"z":2.1124185187925277e-5,"y":-2.2201321005770773e-6}},{"degrees_of_freedom":[5562,5563,5564,5565,5566,5567],"id":"n927","parent":"11","position":{"x":20,"z":5,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.62647540479624e-5,"z":5.439136883750504e-5,"y":-0.0007134768553236037},"angle":{"x":2.9831477261036057e-5,"z":-6.513927048567876e-6,"y":-1.432138301515883e-5}},{"degrees_of_freedom":[5568,5569,5570,5571,5572,5573],"id":"n928","parent":"11","position":{"x":22.020305089104422,"z":5,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012063327586622697,"z":0.00010844528838410785,"y":-0.0007534540488999584},"angle":{"x":4.550825501427874e-6,"z":-3.48398801056382e-5,"y":-2.5024989505828142e-5}},{"degrees_of_freedom":[5574,5575,5576,5577,5578,5579],"id":"n929","parent":"11","position":{"x":22.857142857142858,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014835916118589672,"z":0.00014098227836251893,"y":-0.0008194668525592611},"angle":{"x":1.6735913081151576e-5,"z":-4.577309956264354e-6,"y":8.857178447021003e-8}},{"degrees_of_freedom":[5580,5581,5582,5583,5584,5585],"id":"n930","parent":"11","position":{"x":22.020305089104422,"z":5,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014045527086150512,"z":0.00017366751402307992,"y":-0.0008762395531537886},"angle":{"x":2.739811892595429e-5,"z":2.317443801745135e-5,"y":-2.995610001935432e-5}},{"degrees_of_freedom":[5586,5587,5588,5589,5590,5591],"id":"n931","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.056751087511057e-5,"z":8.838161331068688e-5,"y":-0.0005437909983383422},"angle":{"x":-4.3746626104599265e-6,"z":-1.3989070581208939e-5,"y":-9.49138040118986e-6}},{"degrees_of_freedom":[5592,5593,5594,5595,5596,5597],"id":"n932","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.023308060681837e-5,"z":5.6710033723380876e-5,"y":-0.0005212094553122796},"angle":{"x":-0.00011576400338070203,"z":4.1438091695938066e-5,"y":-9.130324015246753e-6}},{"degrees_of_freedom":[5598,5599,5600,5601,5602,5603],"id":"n933","parent":"11","position":{"x":25,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.103529968155514e-5,"z":0.0002734435591084503,"y":-0.0010824230307493546},"angle":{"x":4.358019050494194e-5,"z":-1.5966762422577155e-5,"y":-2.778817998430705e-5}},{"degrees_of_freedom":[5604,5605,5606,5607,5608,5609],"id":"n934","parent":"11","position":{"x":25,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.0627003741720084e-5,"z":0.0002082891300784803,"y":-0.000810258855760044},"angle":{"x":1.989567766705882e-5,"z":-5.536411141132326e-6,"y":-1.3905894926755795e-5}},{"degrees_of_freedom":[5610,5611,5612,5613,5614,5615],"id":"n935","parent":"11","position":{"x":25,"z":12.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00011541160558892992,"z":0.00022245445035092007,"y":-0.0007853196964568344},"angle":{"x":1.6964073675023286e-6,"z":-8.513538533254542e-6,"y":3.1960382844347504e-5}},{"degrees_of_freedom":[5616,5617,5618,5619,5620,5621],"id":"n936","parent":"11","position":{"x":25,"z":12.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.000108251902232363,"z":0.00021180094456627838,"y":-0.0008059746560228602},"angle":{"x":-1.628467578800824e-5,"z":3.849155518324089e-5,"y":-9.896450137477447e-5}},{"degrees_of_freedom":[5622,5623,5624,5625,5626,5627],"id":"n937","parent":"11","position":{"x":25,"z":10,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.551029634990768e-5,"z":0.0002017800229736931,"y":-0.0008892532662149782},"angle":{"x":-5.7145527327399685e-5,"z":-2.2886459759786466e-6,"y":1.8405018115728136e-5}},{"degrees_of_freedom":[5628,5629,5630,5631,5632,5633],"id":"n938","parent":"11","position":{"x":25,"z":7.979694910895579,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.6612735857137025e-5,"z":0.00020192352278017658,"y":-0.0009513999145436874},"angle":{"x":2.4107097931362826e-5,"z":-3.3843512664626064e-5,"y":-7.287131716203229e-5}},{"degrees_of_freedom":[5634,5635,5636,5637,5638,5639],"id":"n939","parent":"11","position":{"x":25,"z":7.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8618901910557462e-5,"z":0.00018640502446050128,"y":-0.0009165951183383419},"angle":{"x":1.2574587024407036e-6,"z":-6.685722084853497e-6,"y":1.916880638065365e-6}},{"degrees_of_freedom":[5640,5641,5642,5643,5644,5645],"id":"n940","parent":"11","position":{"x":25,"z":7.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.833331749152887e-6,"z":0.00019302964590645522,"y":-0.0008887314036946435},"angle":{"x":-1.2286131559518881e-5,"z":5.4113467863199776e-5,"y":-0.00017207477056252157}},{"degrees_of_freedom":[5646,5647,5648,5649,5650,5651],"id":"n941","parent":"11","position":{"x":25,"z":10,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.731837152224188e-5,"z":0.00020185003792481243,"y":-0.0008153719904288579},"angle":{"x":-5.040928696725223e-5,"z":-1.291062871717761e-5,"y":1.5472574003608842e-5}},{"degrees_of_freedom":[5652,5653,5654,5655,5656,5657],"id":"n942","parent":"11","position":{"x":25,"z":12.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.907996911456499e-5,"z":0.00020350823518832504,"y":-0.0007595408005569289},"angle":{"x":2.4503158067979247e-5,"z":-5.4447662081824535e-5,"y":-9.998647054976524e-5}},{"degrees_of_freedom":[5658,5659,5660,5661,5662,5663],"id":"n943","parent":"11","position":{"x":20,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-2.728258778632977e-5,"z":0.00017759985388971617,"y":-0.0009839393480853885},"angle":{"x":2.360988959914519e-6,"z":1.5863940393576163e-6,"y":-2.7285595696895278e-5}},{"degrees_of_freedom":[5664,5665,5666,5667,5668,5669],"id":"n944","parent":"11","position":{"x":22.857142857142858,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.070144357937148e-5,"z":0.0002206093799969118,"y":-0.0010831373078182293},"angle":{"x":1.7024319630132774e-5,"z":-1.2323206146668716e-5,"y":-2.791275718146308e-5}},{"degrees_of_freedom":[5670,5671,5672,5673,5674,5675],"id":"n945","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.59406193012677e-6,"z":0.00021080324008926416,"y":-0.0010424993781153022},"angle":{"x":-6.0789818212725645e-5,"z":1.2765931341433418e-5,"y":-2.3391888281897775e-5}},{"degrees_of_freedom":[5676,5677,5678,5679,5680,5681],"id":"n946","parent":"11","position":{"x":20,"z":12.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0321137535471396e-5,"z":0.0001730680158678022,"y":-0.001018022021197124},"angle":{"x":8.11018790488258e-6,"z":-1.4016190029315369e-5,"y":-2.092742906489785e-5}},{"degrees_of_freedom":[5682,5683,5684,5685,5686,5687],"id":"n947","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.219947609624655e-6,"z":0.0001345065629059837,"y":-0.0009799708218033482},"angle":{"x":-0.0001038323132154718,"z":-5.117156751413455e-5,"y":-2.375773029754374e-5}},{"degrees_of_freedom":[5688,5689,5690,5691,5692,5693],"id":"n948","parent":"11","position":{"x":17.142857142857142,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.61334289007843e-5,"z":0.0001213467516909184,"y":-0.0009065623469584384},"angle":{"x":9.585365046341222e-6,"z":-8.650135862725841e-6,"y":-2.815406193721765e-5}},{"degrees_of_freedom":[5694,5695,5696,5697,5698,5699],"id":"n949","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.657174949912506e-5,"z":0.0001313598841160409,"y":-0.0009343523227471082},"angle":{"x":0.00011263625919354183,"z":-4.386690329064345e-5,"y":-2.3258314997339752e-5}},{"degrees_of_freedom":[5700,5701,5702,5703,5704,5705],"id":"n950","parent":"11","position":{"x":20,"z":7.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.628374716890876e-5,"z":0.00016869734282228414,"y":-0.0009419946480822645},"angle":{"x":1.84992684050134e-5,"z":-9.37945351494155e-6,"y":-2.1089782515407947e-5}},{"degrees_of_freedom":[5706,5707,5708,5709,5710,5711],"id":"n951","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.831102337841082e-5,"z":0.00020681050730284798,"y":-0.0009823131326755189},"angle":{"x":-0.00022144062071274633,"z":-9.573423730461837e-5,"y":-2.540441611871275e-5}},{"degrees_of_freedom":[5712,5713,5714,5715,5716,5717],"id":"n952","parent":"11","position":{"x":20,"z":15,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.2541784416514535e-6,"z":0.00015917702877225643,"y":-0.0008707264574670966},"angle":{"x":1.9945417661280657e-6,"z":-2.9585284505801555e-6,"y":-1.7646738958051847e-5}},{"degrees_of_freedom":[5718,5719,5720,5721,5722,5723],"id":"n953","parent":"11","position":{"x":17.979694910895578,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.1607022444768115e-5,"z":0.00012274432997488223,"y":-0.0008427155436297656},"angle":{"x":7.5045917260988055e-6,"z":-2.4488249392667447e-5,"y":-1.4045484083404452e-5}},{"degrees_of_freedom":[5724,5725,5726,5727,5728,5729],"id":"n954","parent":"11","position":{"x":17.142857142857142,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0458310926847283e-5,"z":9.53314920797617e-5,"y":-0.0007818233978150452},"angle":{"x":9.73036378461674e-6,"z":2.8372348226530294e-6,"y":-9.563711721185496e-6}},{"degrees_of_freedom":[5730,5731,5732,5733,5734,5735],"id":"n955","parent":"11","position":{"x":17.979694910895578,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.2419236247906269e-5,"z":8.392520438136317e-5,"y":-0.0007188918629881736},"angle":{"x":8.136109348403809e-6,"z":2.5855160306868903e-5,"y":-6.606557420572786e-6}},{"degrees_of_freedom":[5736,5737,5738,5739,5740,5741],"id":"n956","parent":"11","position":{"x":20,"z":15,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.748179573797197e-6,"z":9.032604695479501e-5,"y":-0.0006966091978898094},"angle":{"x":2.1105734096472817e-5,"z":-2.0040289429529764e-6,"y":-1.1876429420687036e-5}},{"degrees_of_freedom":[5742,5743,5744,5745,5746,5747],"id":"n957","parent":"11","position":{"x":22.020305089104422,"z":15,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4878875784317433e-5,"z":0.00013205104249280046,"y":-0.0007266609885783784},"angle":{"x":1.1643627790039202e-5,"z":-2.924183913220792e-5,"y":-1.589808676573181e-5}},{"degrees_of_freedom":[5748,5749,5750,5751,5752,5753],"id":"n958","parent":"11","position":{"x":22.857142857142858,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.9185582975080074e-5,"z":0.00017089211080272395,"y":-0.0007878582485113672},"angle":{"x":1.5402064614782365e-5,"z":2.3541691118759173e-6,"y":-1.0433125487458407e-5}},{"degrees_of_freedom":[5754,5755,5756,5757,5758,5759],"id":"n959","parent":"11","position":{"x":22.020305089104422,"z":15,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.8312973583703643e-5,"z":0.0001922715139849221,"y":-0.0008494889985820131},"angle":{"x":1.932185077255382e-5,"z":2.8374777331499417e-5,"y":-2.3505030049203824e-5}},{"degrees_of_freedom":[5760,5761,5762,5763,5764,5765],"id":"n960","parent":"11","position":{"x":25,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00011613257785860701,"z":0.00028559884383256716,"y":-0.0010809990923913518},"angle":{"x":4.4115555054569554e-5,"z":-1.6242878757815312e-5,"y":-2.8345880269213035e-5}},{"degrees_of_freedom":[5766,5767,5768,5769,5770,5771],"id":"n961","parent":"11","position":{"x":25,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011970605462851171,"z":0.00021972522310382655,"y":-0.0008513327718672595},"angle":{"x":2.4017966337809556e-5,"z":-1.5146537576744626e-6,"y":-5.278696271025496e-6}},{"degrees_of_freedom":[5772,5773,5774,5775,5776,5777],"id":"n962","parent":"11","position":{"x":25,"z":22.857142857142858,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8223039327236096e-5,"z":0.00023175067583875608,"y":-0.0007920874912136161},"angle":{"x":3.9580900232519095e-6,"z":2.1797392443239867e-5,"y":1.726140623552755e-5}},{"degrees_of_freedom":[5778,5779,5780,5781,5782,5783],"id":"n963","parent":"11","position":{"x":25,"z":22.020305089104422,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.426099776679484e-5,"z":0.00022778244165011567,"y":-0.0008156405611143095},"angle":{"x":-1.1453490294076174e-5,"z":0.00012945827978819795,"y":-0.0002872497141569563}},{"degrees_of_freedom":[5784,5785,5786,5787,5788,5789],"id":"n964","parent":"11","position":{"x":25,"z":20,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00025369071497730603,"z":0.00021902112131489936,"y":-0.000887500606658087},"angle":{"x":-4.921828531068804e-5,"z":2.4815740478332404e-5,"y":8.724220522952861e-6}},{"degrees_of_freedom":[5790,5791,5792,5793,5794,5795],"id":"n965","parent":"11","position":{"x":25,"z":17.979694910895578,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012951200423515287,"z":0.00021627128051416165,"y":-0.000942272759647362},"angle":{"x":2.6274417988402445e-5,"z":0.00010079102855509984,"y":0.0002236146814563892}},{"degrees_of_freedom":[5796,5797,5798,5799,5800,5801],"id":"n966","parent":"11","position":{"x":25,"z":17.142857142857142,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.807523165875071e-5,"z":0.00019815085512729587,"y":-0.0009016058664425127},"angle":{"x":3.449444115137918e-6,"z":2.179747977882979e-5,"y":1.8681231987837228e-7}},{"degrees_of_freedom":[5802,5803,5804,5805,5806,5807],"id":"n967","parent":"11","position":{"x":25,"z":17.979694910895578,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6325787734218424e-5,"z":0.0001986503907359358,"y":-0.0008722259185548926},"angle":{"x":-7.980861786676668e-6,"z":0.000129772111834001,"y":-0.0003052119061474077}},{"degrees_of_freedom":[5808,5809,5810,5811,5812,5813],"id":"n968","parent":"11","position":{"x":25,"z":20,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.860787973207915e-5,"z":0.00020576195038654287,"y":-0.0008071549441895482},"angle":{"x":-4.3915267150056304e-5,"z":1.8778958760372518e-5,"y":8.724081928130412e-6}},{"degrees_of_freedom":[5814,5815,5816,5817,5818,5819],"id":"n969","parent":"11","position":{"x":25,"z":22.020305089104422,"y":7.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.924914591054044e-6,"z":0.00020976522779532795,"y":-0.0007581026241359491},"angle":{"x":2.785202131812573e-5,"z":9.78410375550975e-5,"y":0.00023234549285297367}},{"degrees_of_freedom":[5820,5821,5822,5823,5824,5825],"id":"n970","parent":"11","position":{"x":20,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00019510411910768547,"z":0.00018367747623371412,"y":-0.0010338444044698364},"angle":{"x":-2.950938529406498e-6,"z":2.1139392759323053e-5,"y":-3.0471765656590538e-5}},{"degrees_of_freedom":[5826,5827,5828,5829,5830,5831],"id":"n971","parent":"11","position":{"x":22.857142857142858,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011529499802053421,"z":0.0002327683680812553,"y":-0.001037118239270737},"angle":{"x":1.3374886566077063e-5,"z":-3.189292340294462e-6,"y":-3.176355006337787e-5}},{"degrees_of_freedom":[5832,5833,5834,5835,5836,5837],"id":"n972","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015128175052478928,"z":0.00022130631559702182,"y":-0.0010449699918285596},"angle":{"x":-0.0001312537540559142,"z":4.744849098204094e-5,"y":-2.4772889633597197e-5}},{"degrees_of_freedom":[5838,5839,5840,5841,5842,5843],"id":"n973","parent":"11","position":{"x":20,"z":22.857142857142858,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016835645038000752,"z":0.00018318361916023994,"y":-0.001046656545844846},"angle":{"x":8.73543085780104e-6,"z":-2.541260238419065e-6,"y":-1.9914131441340877e-5}},{"degrees_of_freedom":[5844,5845,5846,5847,5848,5849],"id":"n974","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015305596219157588,"z":0.00014823294997790506,"y":-0.0010337228173269812},"angle":{"x":7.861080499325281e-5,"z":2.2659510220412626e-5,"y":-2.1075970266106433e-5}},{"degrees_of_freedom":[5850,5851,5852,5853,5854,5855],"id":"n975","parent":"11","position":{"x":17.142857142857142,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011983489300113279,"z":0.0001368678231593715,"y":-0.0010062779260575896},"angle":{"x":1.1343321076317493e-5,"z":-6.270100528784618e-7,"y":-3.0323480152088466e-5}},{"degrees_of_freedom":[5856,5857,5858,5859,5860,5861],"id":"n976","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.406789188071284e-5,"z":0.00014715043189177118,"y":-0.0009859988761661104},"angle":{"x":-4.432919931741666e-5,"z":1.9552322260625383e-5,"y":-2.2675366921687745e-5}},{"degrees_of_freedom":[5862,5863,5864,5865,5866,5867],"id":"n977","parent":"11","position":{"x":20,"z":17.142857142857142,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.509651053228476e-5,"z":0.00018138139641539025,"y":-0.0009760332556320734},"angle":{"x":1.598265719812655e-5,"z":-1.2749912943004248e-6,"y":-1.9188321074708534e-5}},{"degrees_of_freedom":[5868,5869,5870,5871,5872,5873],"id":"n978","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.989502475511784e-5,"z":0.0002198107378170631,"y":-0.0009928174234416537},"angle":{"x":-2.1592836607432285e-6,"z":-8.185289986707893e-6,"y":-2.6195593544402168e-5}},{"degrees_of_freedom":[5874,5875,5876,5877,5878,5879],"id":"n979","parent":"11","position":{"x":20,"z":25,"y":12.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013021327087248133,"z":0.00018078831958875515,"y":-0.0008783688595814707},"angle":{"x":-4.800920182642415e-5,"z":-2.7956195388991924e-5,"y":-1.6367907323279532e-5}},{"degrees_of_freedom":[5880,5881,5882,5883,5884,5885],"id":"n980","parent":"11","position":{"x":17.979694910895578,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00014344542547482992,"z":0.00018789607218847745,"y":-0.0008170145639159643},"angle":{"x":8.586472935050187e-5,"z":-2.0684073802164443e-5,"y":3.9084495196519316e-5}},{"degrees_of_freedom":[5886,5887,5888,5889,5890,5891],"id":"n981","parent":"11","position":{"x":17.142857142857142,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015999949369524478,"z":4.7130492157302275e-5,"y":-0.000780734567535907},"angle":{"x":3.6000806668558605e-5,"z":-2.1566847259665116e-6,"y":-8.129768152824105e-5}},{"degrees_of_freedom":[5892,5893,5894,5895,5896,5897],"id":"n982","parent":"11","position":{"x":17.979694910895578,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015285993460754027,"z":4.24308657156136e-5,"y":-0.0007488974875984642},"angle":{"x":2.9861783118203576e-5,"z":1.5045747867240877e-5,"y":-6.647681670111927e-5}},{"degrees_of_freedom":[5898,5899,5900,5901,5902,5903],"id":"n983","parent":"11","position":{"x":20,"z":25,"y":7.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00015435291435386182,"z":0.00015174484169314676,"y":-0.0007722479821015037},"angle":{"x":-6.308637504984917e-5,"z":-2.6948956340847473e-5,"y":-2.797642085188588e-5}},{"degrees_of_freedom":[5904,5905,5906,5907,5908,5909],"id":"n984","parent":"11","position":{"x":22.020305089104422,"z":25,"y":7.979694910895579},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001413118759640148,"z":0.0001554726731123652,"y":-0.0008321020084978844},"angle":{"x":7.47442092600943e-5,"z":-2.033886049860613e-5,"y":2.9114890099266946e-5}},{"degrees_of_freedom":[5910,5911,5912,5913,5914,5915],"id":"n985","parent":"11","position":{"x":22.857142857142858,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012679917533941503,"z":0.00028211435426870604,"y":-0.0008705862324403198},"angle":{"x":2.4392296463935354e-5,"z":-1.5690052748018836e-6,"y":-9.244540185445359e-5}},{"degrees_of_freedom":[5916,5917,5918,5919,5920,5921],"id":"n986","parent":"11","position":{"x":22.020305089104422,"z":25,"y":12.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00013306517411348687,"z":0.00025403241104286284,"y":-0.0009041748823324462},"angle":{"x":1.3483660499786848e-6,"z":1.3592323008908183e-5,"y":-3.6812494040648105e-5}},{"degrees_of_freedom":[5922,5923,5924,5925,5926,5927],"id":"n987","parent":"11","position":{"x":22.857142857142858,"z":3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018153738814181736,"z":0.00020896405008948897,"y":-0.001298544642084846},"angle":{"x":1.9684150840040965e-5,"z":-3.642510896911073e-5,"y":-2.532944603197467e-5}},{"degrees_of_freedom":[5928,5929,5930,5931,5932,5933],"id":"n988","parent":"11","position":{"x":22.020305089104422,"z":-2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00021003728361263844,"z":0.00019884817459734944,"y":-0.0010502608015290323},"angle":{"x":-0.00029932158406255387,"z":-0.00014940616446428452,"y":-2.3084630135576386e-5}},{"degrees_of_freedom":[5934,5935,5936,5937,5938,5939],"id":"n989","parent":"11","position":{"x":17.979694910895578,"z":-2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002056187213019479,"z":0.00011521359793423275,"y":-0.0008775592927715755},"angle":{"x":0.00011657590820677158,"z":-6.939936032880663e-5,"y":-2.6371941366675758e-5}},{"degrees_of_freedom":[5940,5941,5942,5943,5944,5945],"id":"n990","parent":"11","position":{"x":17.142857142857142,"z":-3.140184917367551e-16,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017561217192179693,"z":0.00010277650713158992,"y":-0.0007204017932964431},"angle":{"x":2.185336031671444e-5,"z":-3.4888399410105875e-5,"y":-2.7402268334402684e-5}},{"degrees_of_freedom":[5946,5947,5948,5949,5950,5951],"id":"n991","parent":"11","position":{"x":17.979694910895578,"z":2.020305089104421,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014527185785734404,"z":0.00011386646445321194,"y":-0.0009619688259479992},"angle":{"x":-0.0003908702243245027,"z":-0.0001797867294022301,"y":-2.4849033915343047e-5}},{"degrees_of_freedom":[5952,5953,5954,5955,5956,5957],"id":"n992","parent":"11","position":{"x":22.020305089104422,"z":2.0203050891044216,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015413552015054353,"z":0.00019757059545461023,"y":-0.0011305415418356804},"angle":{"x":1.8508294466958988e-5,"z":-3.581388289210085e-5,"y":-2.3560272348757344e-5}},{"degrees_of_freedom":[5958,5959,5960,5961,5962,5963],"id":"n993","parent":"11","position":{"x":25,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0003465807434780965,"z":0.0005412496888843552,"y":-0.0014578039309126188},"angle":{"x":0.00010065666094584769,"z":-7.424250552716979e-5,"y":-4.7982284437231014e-5}},{"degrees_of_freedom":[5964,5965,5966,5967,5968,5969],"id":"n994","parent":"11","position":{"x":25,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034443994924990225,"z":0.0003311744939028875,"y":-0.0012013738888424794},"angle":{"x":2.9282731783771e-5,"z":-1.8612258412495582e-5,"y":-0.00013095331293427537}},{"degrees_of_freedom":[5970,5971,5972,5973,5974,5975],"id":"n995","parent":"11","position":{"x":25,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018335538174215423,"z":0.00036143490727588495,"y":-0.00119820336801159},"angle":{"x":1.5671507340684386e-5,"z":-2.11179154814322e-5,"y":-3.910343243634448e-5}},{"degrees_of_freedom":[5976,5977,5978,5979,5980,5981],"id":"n996","parent":"11","position":{"x":25,"z":2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034516351960746025,"z":0.000358939584880894,"y":-0.0012113568389226865},"angle":{"x":1.627397817863604e-5,"z":-6.036605323532771e-5,"y":6.298956424197509e-5}},{"degrees_of_freedom":[5982,5983,5984,5985,5986,5987],"id":"n997","parent":"11","position":{"x":25,"z":2.0203050891044216,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00043533366706856725,"z":0.000377476581909928,"y":-0.00121011462489704},"angle":{"x":2.3548486664275374e-6,"z":-3.4323909230222386e-5,"y":-1.066772026423095e-5}},{"degrees_of_freedom":[5988,5989,5990,5991,5992,5993],"id":"n998","parent":"11","position":{"x":25,"z":3.140184917367551e-16,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0006530209870980152,"z":0.000380454992081902,"y":-0.0012660359188539831},"angle":{"x":-2.92166612512517e-5,"z":-6.563422631414564e-5,"y":7.78922244882966e-5}},{"degrees_of_freedom":[5994,5995,5996,5997,5998,5999],"id":"n999","parent":"11","position":{"x":25,"z":-2.020305089104421,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001206028871505289,"z":0.0003740302192469436,"y":-0.0012918132112558786},"angle":{"x":4.467163155051948e-5,"z":-0.00022453462730210154,"y":-0.0003715469808269526}},{"degrees_of_freedom":[6000,6001,6002,6003,6004,6005],"id":"n1000","parent":"11","position":{"x":25,"z":-2.857142857142857,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.993100930504041e-5,"z":0.00032704702553682863,"y":-0.0012542961531304792},"angle":{"x":1.544402340975307e-5,"z":-6.036549054233751e-5,"y":9.2792805390954e-5}},{"degrees_of_freedom":[6006,6007,6008,6009,6010,6011],"id":"n1001","parent":"11","position":{"x":25,"z":-2.0203050891044216,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001651597422993056,"z":0.00031209027017537144,"y":-0.0012479160799221476},"angle":{"x":1.8753237231452664e-6,"z":0.0001377840058177281,"y":-0.0004676589640703936}},{"degrees_of_freedom":[6012,6013,6014,6015,6016,6017],"id":"n1002","parent":"11","position":{"x":25,"z":-3.140184917367551e-16,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0003226363472122155,"z":0.0003152145648058457,"y":-0.001216885020985111},"angle":{"x":-2.043041127405782e-5,"z":-5.5097187389622514e-5,"y":7.789143117076114e-5}},{"degrees_of_freedom":[6018,6019,6020,6021,6022,6023],"id":"n1003","parent":"11","position":{"x":25,"z":2.020305089104421,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001495691677704304,"z":0.0003227651301899976,"y":-0.001191868030030887},"angle":{"x":2.4675386542091653e-5,"z":-0.00036760341115053065,"y":-0.0008060096936408206}},{"degrees_of_freedom":[6024,6025,6026,6027,6028,6029],"id":"n1004","parent":"11","position":{"x":20,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.0004933348584495549,"z":0.00035786379563815983,"y":-0.0012789219329173505},"angle":{"x":-8.49973647642149e-5,"z":-6.737177993918251e-5,"y":-6.915755672826587e-5}},{"degrees_of_freedom":[6030,6031,6032,6033,6034,6035],"id":"n1005","parent":"11","position":{"x":20,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":0.00020531828651405078,"z":0.0003112023937294574,"y":-0.0012056420949745658},"angle":{"x":3.3368768785629825e-5,"z":-1.0194394228595412e-5,"y":-3.97190217371871e-5}},{"degrees_of_freedom":[6036,6037,6038,6039,6040,6041],"id":"n1006","parent":"11","position":{"x":22.857142857142858,"z":-3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032081323791345996,"z":0.0004544205062658881,"y":-0.0018006707381213666},"angle":{"x":-2.960031488745556e-5,"z":-7.046010348313718e-5,"y":-4.778522534527203e-5}},{"degrees_of_freedom":[6042,6043,6044,6045,6046,6047],"id":"n1007","parent":"11","position":{"x":22.020305089104422,"z":2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0002712418322271361,"z":0.00043112818282765766,"y":-0.0013382399611958163},"angle":{"x":0.00048167841523137525,"z":-0.00025122440957757745,"y":-5.014053376265527e-5}},{"degrees_of_freedom":[6048,6049,6050,6051,6052,6053],"id":"n1008","parent":"11","position":{"x":20,"z":2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00023519666184707296,"z":0.0003403390588473424,"y":-0.001146694657710852},"angle":{"x":-5.118724477727225e-5,"z":-6.28280965282176e-5,"y":-5.2107452100334296e-5}},{"degrees_of_freedom":[6054,6055,6056,6057,6058,6059],"id":"n1009","parent":"11","position":{"x":17.979694910895578,"z":2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00027389518518562087,"z":0.0002486370930491769,"y":-0.0010408202326390628},"angle":{"x":-0.0001716062537128072,"z":-0.00010540245469474039,"y":-5.165553992410391e-5}},{"degrees_of_freedom":[6060,6061,6062,6063,6064,6065],"id":"n1010","parent":"11","position":{"x":17.142857142857142,"z":3.140184917367551e-16,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003141840384859323,"z":0.00022269151043139286,"y":-0.0007852179341753125},"angle":{"x":-2.96005210971966e-5,"z":-5.5195731333387325e-5,"y":-4.330401363659303e-5}},{"degrees_of_freedom":[6066,6067,6068,6069,6070,6071],"id":"n1011","parent":"11","position":{"x":17.979694910895578,"z":-2.020305089104421,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00036465030809862257,"z":0.00024308938495597312,"y":-0.0011604239257457802},"angle":{"x":0.0005919837071302663,"z":-0.0002749588021664848,"y":-5.6294868937872875e-5}},{"degrees_of_freedom":[6072,6073,6074,6075,6076,6077],"id":"n1012","parent":"11","position":{"x":20,"z":-2.857142857142857,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00040910601532926884,"z":0.0003377122846447276,"y":-0.001315839256392031},"angle":{"x":-8.01309117314149e-6,"z":-6.282798594654827e-5,"y":-5.297779573032637e-5}},{"degrees_of_freedom":[6078,6079,6080,6081,6082,6083],"id":"n1013","parent":"11","position":{"x":22.020305089104422,"z":-2.0203050891044216,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003739949321752301,"z":0.00043175281182929973,"y":-0.0014578432392476396},"angle":{"x":-0.0002893868214749931,"z":-0.00016230850413292966,"y":-5.3717408951211674e-5}},{"degrees_of_freedom":[6084,6085,6086,6087,6088,6089],"id":"n1014","parent":"11","position":{"x":20,"z":-5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030613870566818135,"z":0.00022492625253739843,"y":-0.0010980682747584838},"angle":{"x":-9.464400835442641e-5,"z":-2.9726099383057797e-6,"y":-1.7609920870105908e-5}},{"degrees_of_freedom":[6090,6091,6092,6093,6094,6095],"id":"n1015","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032246875206908904,"z":0.0001813019727123543,"y":-0.001115719567251761},"angle":{"x":3.1566680831919077e-5,"z":-1.9512528727588108e-5,"y":3.466826679559262e-5}},{"degrees_of_freedom":[6096,6097,6098,6099,6100,6101],"id":"n1016","parent":"11","position":{"x":22.857142857142858,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00034879835218355623,"z":0.00021606462074628271,"y":-0.0011462031020497436},"angle":{"x":-4.483664392165528e-5,"z":-1.0987361270553114e-5,"y":-0.0001497857345264983}},{"degrees_of_freedom":[6102,6103,6104,6105,6106,6107],"id":"n1017","parent":"11","position":{"x":22.020305089104422,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00036771240094581986,"z":1.3452290987543325e-7,"y":-0.001157288107556843},"angle":{"x":-8.462944558862541e-5,"z":-4.066865200890454e-6,"y":-5.371753449375782e-5}},{"degrees_of_freedom":[6108,6109,6110,6111,6112,6113],"id":"n1018","parent":"11","position":{"x":20,"z":-5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00037240879391162136,"z":-0.00017921224960082448,"y":-0.001157351430351729},"angle":{"x":-0.0004958961250428509,"z":-2.1187370465259813e-6,"y":0.00011663482865464102}},{"degrees_of_freedom":[6114,6115,6116,6117,6118,6119],"id":"n1019","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003566356405312727,"z":0.0004714103013301518,"y":-0.0011345074833174864},"angle":{"x":0.00025063551166178616,"z":-2.7078276743668042e-5,"y":0.00042585834060208}},{"degrees_of_freedom":[6120,6121,6122,6123,6124,6125],"id":"n1020","parent":"11","position":{"x":17.142857142857142,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0003216128803915253,"z":0.000321424426874906,"y":-0.0011031076736858925},"angle":{"x":8.940807894518986e-5,"z":-1.2153447482565812e-5,"y":3.662086081309668e-5}},{"degrees_of_freedom":[6126,6127,6128,6129,6130,6131],"id":"n1021","parent":"11","position":{"x":17.979694910895578,"z":-5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00030480957703184924,"z":0.00011014713606611877,"y":-0.0010952844707035761},"angle":{"x":0.0001546418811048924,"z":-2.3732241439358914e-6,"y":-0.00012086754266039518}},{"degrees_of_freedom":[6132,6133,6134,6135,6136,6137],"id":"n1022","parent":"11","position":{"x":20,"z":5,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00018647614884502713,"z":0.00017841784259433344,"y":-0.0011542434527373091},"angle":{"x":-4.3040313717593496e-5,"z":-1.221966182450079e-5,"y":-3.079377011485393e-5}},{"degrees_of_freedom":[6138,6139,6140,6141,6142,6143],"id":"n1023","parent":"11","position":{"x":17.979694910895578,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016182465628337454,"z":0.00015295099335581728,"y":-0.0011186897517901082},"angle":{"x":5.485638172406102e-5,"z":-2.4794203468120113e-5,"y":1.0837687509648966e-5}},{"degrees_of_freedom":[6144,6145,6146,6147,6148,6149],"id":"n1024","parent":"11","position":{"x":17.142857142857142,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013342211818318382,"z":5.26397650755824e-5,"y":-0.001079863216088444},"angle":{"x":1.1347150494421317e-5,"z":-9.18894453961561e-6,"y":-9.16109595492299e-5}},{"degrees_of_freedom":[6150,6151,6152,6153,6154,6155],"id":"n1025","parent":"11","position":{"x":17.979694910895578,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012423880266895776,"z":0.0001056555790541629,"y":-0.0010569597834943045},"angle":{"x":-3.397498231702643e-5,"z":5.551706781727728e-6,"y":2.0398228410388717e-5}},{"degrees_of_freedom":[6156,6157,6158,6159,6160,6161],"id":"n1026","parent":"11","position":{"x":20,"z":5,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00012590170408030012,"z":9.308695416519864e-5,"y":-0.0010646397415422582},"angle":{"x":7.8973402459408e-5,"z":-1.1733759117096397e-5,"y":-2.6542794112982343e-5}},{"degrees_of_freedom":[6162,6163,6164,6165,6166,6167],"id":"n1027","parent":"11","position":{"x":22.020305089104422,"z":5,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00014591174729413942,"z":0.0002126942024359844,"y":-0.001103286285267929},"angle":{"x":-3.343661839207212e-5,"z":-2.6966005921236306e-5,"y":-7.294830084240931e-5}},{"degrees_of_freedom":[6168,6169,6170,6171,6172,6173],"id":"n1028","parent":"11","position":{"x":22.857142857142858,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00017716754266981053,"z":0.0002060492253274055,"y":-0.001145489507759319},"angle":{"x":1.5613314568937753e-5,"z":-1.0829872051131465e-5,"y":4.571732035148663e-5}},{"degrees_of_freedom":[6174,6175,6176,6177,6178,6179],"id":"n1029","parent":"11","position":{"x":22.020305089104422,"z":5,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00019155173583363698,"z":0.00027592023163712715,"y":-0.001167328730301222},"angle":{"x":6.560010548095514e-5,"z":1.7474375100111289e-6,"y":-7.471280598020482e-5}},{"degrees_of_freedom":[6180,6181,6182,6183,6184,6185],"id":"n1030","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895579,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.306208698796003e-5,"z":0.00020999707651220222,"y":-0.0009789501413927366},"angle":{"x":6.857138191966754e-6,"z":-1.4394585882657159e-5,"y":-2.4365976792715443e-5}},{"degrees_of_freedom":[6186,6187,6188,6189,6190,6191],"id":"n1031","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895578,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.93534952279571e-5,"z":0.00013131660568291634,"y":-0.0009342865686438009},"angle":{"x":-8.029243186164539e-5,"z":2.4331467769378365e-5,"y":-2.2740262316649643e-5}},{"degrees_of_freedom":[6192,6193,6194,6195,6196,6197],"id":"n1032","parent":"11","position":{"x":25,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":0.00013168805156364412,"z":0.00048706307189083626,"y":-0.0014034694832604896},"angle":{"x":7.156884512567607e-5,"z":-3.9419046434210945e-5,"y":-5.414114450728121e-5}},{"degrees_of_freedom":[6198,6199,6200,6201,6202,6203],"id":"n1033","parent":"11","position":{"x":25,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.3440458109579725e-6,"z":0.0003753218693961269,"y":-0.001158952784902263},"angle":{"x":1.4883084280515624e-5,"z":-1.6676722447527682e-5,"y":-3.3666148567228865e-5}},{"degrees_of_freedom":[6204,6205,6206,6207,6208,6209],"id":"n1034","parent":"11","position":{"x":25,"z":12.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00016010310888893924,"z":0.0003782542051902883,"y":-0.00117495330862793},"angle":{"x":9.087917312020817e-6,"z":-3.185318763171574e-5,"y":3.2796324476652106e-5}},{"degrees_of_freedom":[6210,6211,6212,6213,6214,6215],"id":"n1035","parent":"11","position":{"x":25,"z":12.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00020785391239682072,"z":0.00038185042097583697,"y":-0.0011782438060947479},"angle":{"x":-6.44724817747606e-6,"z":1.4161442582316352e-5,"y":-9.664149099298956e-5}},{"degrees_of_freedom":[6216,6217,6218,6219,6220,6221],"id":"n1036","parent":"11","position":{"x":25,"z":10,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00032121863809136443,"z":0.0003787844636120234,"y":-0.0012364042447059384},"angle":{"x":-3.588573328066883e-5,"z":-3.1661797157229604e-5,"y":3.36775011927625e-5}},{"degrees_of_freedom":[6222,6223,6224,6225,6226,6227],"id":"n1037","parent":"11","position":{"x":25,"z":7.979694910895579,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.273426540785066e-5,"z":0.0003760935376832616,"y":-0.001272590115799394},"angle":{"x":2.9065348282033476e-5,"z":-0.0001393132632614766,"y":-0.0002715181186667947}},{"degrees_of_freedom":[6228,6229,6230,6231,6232,6233],"id":"n1038","parent":"11","position":{"x":25,"z":7.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9397825579290705e-5,"z":0.0003502728686807277,"y":-0.0012430103324618483},"angle":{"x":6.786825822805128e-6,"z":-3.1211559892805936e-5,"y":3.352862037683644e-5}},{"degrees_of_freedom":[6234,6235,6236,6237,6238,6239],"id":"n1039","parent":"11","position":{"x":25,"z":7.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.541382594964439e-5,"z":0.0003457196194594996,"y":-0.001230723037026333},"angle":{"x":-2.0311279755034936e-6,"z":4.814032291657236e-5,"y":-0.0001916233008096931}},{"degrees_of_freedom":[6240,6241,6242,6243,6244,6245],"id":"n1040","parent":"11","position":{"x":25,"z":10,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018842108127638358,"z":0.0003478752979839277,"y":-0.001188358056918626},"angle":{"x":-2.6814200742665337e-5,"z":-3.140289169982511e-5,"y":3.2648128531266905e-5}},{"degrees_of_freedom":[6246,6247,6248,6249,6250,6251],"id":"n1041","parent":"11","position":{"x":25,"z":12.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7461834810808315e-5,"z":0.00035091050378097425,"y":-0.0011596428313387045},"angle":{"x":2.2349501377642497e-5,"z":-0.0001676858100612353,"y":-0.00035210743538718816}},{"degrees_of_freedom":[6252,6253,6254,6255,6256,6257],"id":"n1042","parent":"11","position":{"x":20,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-800},"displacement":{"x":-5.190344667910419e-6,"z":0.00029394886728419816,"y":-0.0011862116166823503},"angle":{"x":1.8990345786067032e-5,"z":-1.1195594258817201e-6,"y":-4.539745713752244e-5}},{"degrees_of_freedom":[6258,6259,6260,6261,6262,6263],"id":"n1043","parent":"11","position":{"x":22.857142857142858,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.675927461714832e-5,"z":0.00038896611174744954,"y":-0.0017080361894180422},"angle":{"x":-6.930484493764905e-7,"z":-5.8217159564912134e-5,"y":-3.546964251905904e-5}},{"degrees_of_freedom":[6264,6265,6266,6267,6268,6269],"id":"n1044","parent":"11","position":{"x":22.020305089104422,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.646650744216139e-5,"z":0.00037264946923922025,"y":-0.0013734880986841693},"angle":{"x":0.00046388271907296414,"z":-0.00022272068264195147,"y":-4.281791742361835e-5}},{"degrees_of_freedom":[6270,6271,6272,6273,6274,6275],"id":"n1045","parent":"11","position":{"x":20,"z":12.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7366312351800378e-5,"z":0.00030075726056803256,"y":-0.0012341207720450646},"angle":{"x":-2.0596490790949653e-5,"z":-5.168276033884156e-5,"y":-3.958081935349728e-5}},{"degrees_of_freedom":[6276,6277,6278,6279,6280,6281],"id":"n1046","parent":"11","position":{"x":17.979694910895578,"z":12.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.877520747950137e-5,"z":0.0002307659600422954,"y":-0.0011292253023605428},"angle":{"x":-0.00032265721082640555,"z":-0.00015822598975800267,"y":-4.13123396594181e-5}},{"degrees_of_freedom":[6282,6283,6284,6285,6286,6287],"id":"n1047","parent":"11","position":{"x":17.142857142857142,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":8.816740053809667e-5,"z":0.00020972810982030732,"y":-0.0008778999475718712},"angle":{"x":-1.7217419137388218e-6,"z":-4.4506919421667805e-5,"y":-3.2606527499625664e-5}},{"degrees_of_freedom":[6288,6289,6290,6291,6292,6293],"id":"n1048","parent":"11","position":{"x":17.979694910895578,"z":7.979694910895579,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001264368136822526,"z":0.00022492485109946918,"y":-0.0011352250354962972},"angle":{"x":0.0004475174832426482,"z":-0.000203085705318293,"y":-4.391833861580221e-5}},{"degrees_of_freedom":[6294,6295,6296,6297,6298,6299],"id":"n1049","parent":"11","position":{"x":20,"z":7.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00015968630045255563,"z":0.00029738228362953046,"y":-0.0012410198767518405},"angle":{"x":1.8181927284882686e-5,"z":-5.104156704551368e-5,"y":-4.0041428184003504e-5}},{"degrees_of_freedom":[6300,6301,6302,6303,6304,6305],"id":"n1050","parent":"11","position":{"x":22.020305089104422,"z":7.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00013148065615087857,"z":0.0003686708888228026,"y":-0.0013772453497473054},"angle":{"x":-0.00027441012029055117,"z":-0.00015473955484493525,"y":-4.1631868350969744e-5}},{"degrees_of_freedom":[6306,6307,6308,6309,6310,6311],"id":"n1051","parent":"11","position":{"x":20,"z":15,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.6386718003987964e-6,"z":0.00021475369194826305,"y":-0.0011349738008625788},"angle":{"x":-2.596413083061526e-5,"z":-7.3231027289264634e-6,"y":-3.188560371066655e-5}},{"degrees_of_freedom":[6312,6313,6314,6315,6316,6317],"id":"n1052","parent":"11","position":{"x":17.979694910895578,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.338111953628051e-5,"z":0.0001733751861435944,"y":-0.0011094414500509872},"angle":{"x":2.9917433009048053e-5,"z":-1.9539837073132787e-5,"y":-6.789925651880031e-6}},{"degrees_of_freedom":[6318,6319,6320,6321,6322,6323],"id":"n1053","parent":"11","position":{"x":17.142857142857142,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.115122568523683e-5,"z":0.00010756169604044676,"y":-0.001074740606122454},"angle":{"x":9.267813136549699e-6,"z":-4.080484608627699e-6,"y":-5.60852056797026e-5}},{"degrees_of_freedom":[6324,6325,6326,6327,6328,6329],"id":"n1054","parent":"11","position":{"x":17.979694910895578,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.060750328807464e-5,"z":0.0001356166527872203,"y":-0.0010477483747263244},"angle":{"x":-1.4305586332643812e-5,"z":9.98096505391779e-6,"y":1.383303055341725e-6}},{"degrees_of_freedom":[6330,6331,6332,6333,6334,6335],"id":"n1055","parent":"11","position":{"x":20,"z":15,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.519906272450494e-5,"z":0.0001448268732581103,"y":-0.0010462314746874128},"angle":{"x":5.311622358794513e-5,"z":-7.052017265175942e-6,"y":-2.6568569190331817e-5}},{"degrees_of_freedom":[6336,6337,6338,6339,6340,6341],"id":"n1056","parent":"11","position":{"x":22.020305089104422,"z":15,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.934372377289514e-5,"z":0.0002429364305659463,"y":-0.001075103565419469},"angle":{"x":-1.4377339868069824e-5,"z":-2.1929185642599176e-5,"y":-5.4500487089812166e-5}},{"degrees_of_freedom":[6342,6343,6344,6345,6346,6347],"id":"n1057","parent":"11","position":{"x":22.857142857142858,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.285553097362295e-6,"z":0.0002596236508839942,"y":-0.0011125393050505775},"angle":{"x":1.4051608005938553e-5,"z":-5.435962058559771e-6,"y":1.390762736186334e-5}},{"degrees_of_freedom":[6348,6349,6350,6351,6352,6353],"id":"n1058","parent":"11","position":{"x":22.020305089104422,"z":15,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.950853995509961e-6,"z":0.00029958774033915405,"y":-0.001138103994013931},"angle":{"x":4.414866967942265e-5,"z":6.648275227445276e-6,"y":-5.897851202696606e-5}},{"degrees_of_freedom":[6354,6355,6356,6357,6358,6359],"id":"n1059","parent":"11","position":{"x":25,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.00011826124973875342,"z":0.0005323412492756367,"y":-0.0013958898774304419},"angle":{"x":7.217634312954353e-5,"z":-3.704102849381559e-5,"y":-7.554244646271545e-5}},{"degrees_of_freedom":[6360,6361,6362,6363,6364,6365],"id":"n1060","parent":"11","position":{"x":25,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001882032068999121,"z":0.0004159385959079366,"y":-0.0012229603943095994},"angle":{"x":1.0223163675374219e-5,"z":-1.6592187271701554e-5,"y":-1.7520855579102156e-5}},{"degrees_of_freedom":[6366,6367,6368,6369,6370,6371],"id":"n1061","parent":"11","position":{"x":25,"z":22.857142857142858,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.267175204116724e-5,"z":0.00040453896569636404,"y":-0.0012025685468884332},"angle":{"x":1.645969234408873e-5,"z":-1.5461816515560165e-5,"y":2.80615094102431e-5}},{"degrees_of_freedom":[6372,6373,6374,6375,6376,6377],"id":"n1062","parent":"11","position":{"x":25,"z":22.020305089104422,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.955755119829541e-5,"z":0.0004243873765863948,"y":-0.001206127446353251},"angle":{"x":3.709547908872486e-6,"z":5.561709453989892e-5,"y":-0.0001729801250341836}},{"degrees_of_freedom":[6378,6379,6380,6381,6382,6383],"id":"n1063","parent":"11","position":{"x":25,"z":20,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.103030176163831e-6,"z":0.00042532622782237936,"y":-0.0012411365948054368},"angle":{"x":-1.8199561734463418e-5,"z":-1.4045265032129049e-5,"y":2.4054830024597343e-5}},{"degrees_of_freedom":[6384,6385,6386,6387,6388,6389],"id":"n1064","parent":"11","position":{"x":25,"z":17.979694910895578,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00012675369800413492,"z":0.00041686680635607523,"y":-0.0012588008309012053},"angle":{"x":3.601927499847698e-5,"z":-8.819295586753883e-5,"y":-0.0001856665533934059}},{"degrees_of_freedom":[6390,6391,6392,6393,6394,6395],"id":"n1065","parent":"11","position":{"x":25,"z":17.142857142857142,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00018012794751991618,"z":0.0003782392448305781,"y":-0.001221225295889229},"angle":{"x":1.4799543637728183e-5,"z":-1.546197190876445e-5,"y":2.0047846060783027e-5}},{"degrees_of_freedom":[6396,6397,6398,6399,6400,6401],"id":"n1066","parent":"11","position":{"x":25,"z":17.979694910895578,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001999485584355327,"z":0.0003585904325327747,"y":-0.001212253035379773},"angle":{"x":6.335269702628431e-6,"z":6.792122216565353e-5,"y":-0.00021579520326404694}},{"degrees_of_freedom":[6402,6403,6404,6405,6406,6407],"id":"n1067","parent":"11","position":{"x":25,"z":20,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002477989017208701,"z":0.0003575880122329982,"y":-0.0011882893042830722},"angle":{"x":-1.2471351218932385e-5,"z":-1.6878522331993728e-5,"y":2.4055087835405723e-5}},{"degrees_of_freedom":[6408,6409,6410,6411,6412,6413],"id":"n1068","parent":"11","position":{"x":25,"z":22.020305089104422,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010275186090599399,"z":0.00036606741269147494,"y":-0.0011746276309923043},"angle":{"x":2.985296943334521e-5,"z":-9.647433516559074e-5,"y":-0.0002010762669929268}},{"degrees_of_freedom":[6414,6415,6416,6417,6418,6419],"id":"n1069","parent":"11","position":{"x":20,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-0.000305844458333211,"z":0.00025336599247707,"y":-0.0013259021481708618},"angle":{"x":0.0001414938928811072,"z":5.8348835914838885e-5,"y":-4.677103441729697e-5}},{"degrees_of_freedom":[6420,6421,6422,6423,6424,6425],"id":"n1070","parent":"11","position":{"x":22.857142857142858,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001598945400638199,"z":0.00039431488578206477,"y":-0.0014597114353356172},"angle":{"x":3.2327337308485624e-5,"z":-2.527423721164314e-5,"y":-5.220378728473779e-5}},{"degrees_of_freedom":[6426,6427,6428,6429,6430,6431],"id":"n1071","parent":"11","position":{"x":22.020305089104422,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002210880573886298,"z":0.00037255956672345555,"y":-0.0013805984719660047},"angle":{"x":9.310811670725573e-5,"z":-4.676340548644601e-5,"y":-5.7872967531832536e-5}},{"degrees_of_freedom":[6432,6433,6434,6435,6436,6437],"id":"n1072","parent":"11","position":{"x":20,"z":22.857142857142858,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002595851248673193,"z":0.00027976588090487386,"y":-0.0013478290282850059},"angle":{"x":2.1786038782243077e-5,"z":-2.1547187193332838e-5,"y":-4.874382708756486e-5}},{"degrees_of_freedom":[6438,6439,6440,6441,6442,6443],"id":"n1073","parent":"11","position":{"x":17.979694910895578,"z":22.020305089104422,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00022321758600226158,"z":0.00019752606482236019,"y":-0.0012785968079020668},"angle":{"x":-0.0001971866806253283,"z":-9.896580428057878e-5,"y":-4.6367132319457195e-5}},{"degrees_of_freedom":[6444,6445,6446,6447,6448,6449],"id":"n1074","parent":"11","position":{"x":17.142857142857142,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00016668598251759237,"z":0.00017768117267096258,"y":-0.0011114546040202065},"angle":{"x":3.2327811590627735e-5,"z":-1.782032952625485e-5,"y":-4.9040646990721704e-5}},{"degrees_of_freedom":[6450,6451,6452,6453,6454,6455],"id":"n1075","parent":"11","position":{"x":17.979694910895578,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00011480775137217676,"z":0.00019912754010999395,"y":-0.0011479732899019304},"angle":{"x":0.00011290298959050466,"z":-4.6308103988740746e-5,"y":-4.2901675999558896e-5}},{"degrees_of_freedom":[6456,6457,6458,6459,6460,6461],"id":"n1076","parent":"11","position":{"x":20,"z":17.142857142857142,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.64740758399423e-5,"z":0.0002763995609582451,"y":-0.001163100347811417},"angle":{"x":4.286886372000311e-5,"z":-2.1547487240254608e-5,"y":-4.68669280461637e-5}},{"degrees_of_freedom":[6462,6463,6464,6465,6466,6467],"id":"n1077","parent":"11","position":{"x":22.020305089104422,"z":17.979694910895578,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010868175446707815,"z":0.00036616227741546675,"y":-0.001249975996967816},"angle":{"x":-0.00024125436916230735,"z":-0.00012200005271150009,"y":-5.469875317852261e-5}},{"degrees_of_freedom":[6468,6469,6470,6471,6472,6473],"id":"n1078","parent":"11","position":{"x":20,"z":25,"y":22.857142857142858},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020041812373870115,"z":0.0001972217918637139,"y":-0.0011891610248266175},"angle":{"x":0.00015918309068044804,"z":-2.0814119695366307e-5,"y":6.818821229578964e-5}},{"degrees_of_freedom":[6474,6475,6476,6477,6478,6479],"id":"n1079","parent":"11","position":{"x":17.979694910895578,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00021318379708455887,"z":0.0002017723821002164,"y":-0.001140465481290087},"angle":{"x":9.49852691927289e-5,"z":-1.9555679296911986e-5,"y":4.159663890542496e-5}},{"degrees_of_freedom":[6480,6481,6482,6483,6484,6485],"id":"n1080","parent":"11","position":{"x":17.142857142857142,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0002343757338727447,"z":4.468277692632966e-5,"y":-0.0011165368904751769},"angle":{"x":2.189023256461234e-5,"z":-5.400454056713462e-6,"y":-0.00013487041732860517}},{"degrees_of_freedom":[6486,6487,6488,6489,6490,6491],"id":"n1081","parent":"11","position":{"x":17.979694910895578,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00023713643005281773,"z":0.00011332252327157723,"y":-0.0011041837118303892},"angle":{"x":-5.024703025093626e-5,"z":4.721349167026895e-6,"y":3.9284233512998216e-5}},{"degrees_of_freedom":[6492,6493,6494,6495,6496,6497],"id":"n1082","parent":"11","position":{"x":20,"z":25,"y":17.142857142857142},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00024003166908533337,"z":7.600497569671414e-5,"y":-0.0011251818806083814},"angle":{"x":0.00018186966431178291,"z":-1.961831145195624e-5,"y":-5.6861642483460595e-5}},{"degrees_of_freedom":[6498,6499,6500,6501,6502,6503],"id":"n1083","parent":"11","position":{"x":22.020305089104422,"z":25,"y":17.979694910895578},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00022512988524254227,"z":0.0003430783145475804,"y":-0.001170818538337309},"angle":{"x":-0.0004084087254164157,"z":-2.0048658855414726e-5,"y":-0.0003013630416938561}},{"degrees_of_freedom":[6504,6505,6506,6507,6508,6509],"id":"n1084","parent":"11","position":{"x":22.857142857142858,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020130040998647333,"z":-0.00022984002476853817,"y":-0.0011935599397503874},"angle":{"x":-0.00010315969599908816,"z":-5.895782020737576e-6,"y":0.00043557343516574}},{"degrees_of_freedom":[6510,6511,6512,6513,6514,6515],"id":"n1085","parent":"11","position":{"x":22.020305089104422,"z":25,"y":22.020305089104422},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00020226867539120555,"z":-7.374966174275859e-5,"y":-0.0012075778601795526},"angle":{"x":2.620010289698452e-5,"z":1.0076241912251214e-5,"y":0.00012327162298132442}}],"bar":false,"animation":{"speed":3,"exaggeration":2000,"showDisplacement":true},"viz":{"colorMap":0,"colorMaps":[[[0,[0.23,0.299,0.754]],[0.002,[0.23,0.299,0.754]],[0.004,[0.234,0.306,0.76]],[0.006,[0.234,0.306,0.76]],[0.008,[0.239,0.312,0.766]],[0.01,[0.239,0.312,0.766]],[0.012,[0.244,0.319,0.772]],[0.014,[0.244,0.319,0.772]],[0.016,[0.248,0.326,0.778]],[0.018,[0.248,0.326,0.778]],[0.02,[0.253,0.333,0.784]],[0.022,[0.253,0.333,0.784]],[0.023,[0.257,0.34,0.79]],[0.025,[0.257,0.34,0.79]],[0.027,[0.262,0.346,0.796]],[0.029,[0.262,0.346,0.796]],[0.031,[0.266,0.353,0.802]],[0.033,[0.266,0.353,0.802]],[0.035,[0.271,0.36,0.807]],[0.037,[0.271,0.36,0.807]],[0.039,[0.276,0.367,0.813]],[0.041,[0.276,0.367,0.813]],[0.043,[0.281,0.373,0.818]],[0.045,[0.281,0.373,0.818]],[0.047,[0.285,0.38,0.823]],[0.049,[0.285,0.38,0.823]],[0.051,[0.29,0.387,0.829]],[0.053,[0.29,0.387,0.829]],[0.055,[0.295,0.394,0.834]],[0.057,[0.295,0.394,0.834]],[0.059,[0.299,0.4,0.84]],[0.061,[0.299,0.4,0.84]],[0.063,[0.304,0.407,0.845]],[0.065,[0.304,0.407,0.845]],[0.067,[0.309,0.413,0.85]],[0.068,[0.309,0.413,0.85]],[0.07,[0.314,0.42,0.855]],[0.072,[0.314,0.42,0.855]],[0.074,[0.319,0.427,0.86]],[0.076,[0.319,0.427,0.86]],[0.078,[0.324,0.433,0.865]],[0.08,[0.324,0.433,0.865]],[0.082,[0.329,0.44,0.87]],[0.084,[0.329,0.44,0.87]],[0.086,[0.333,0.446,0.874]],[0.088,[0.333,0.446,0.874]],[0.09,[0.338,0.453,0.879]],[0.092,[0.338,0.453,0.879]],[0.094,[0.343,0.459,0.884]],[0.096,[0.343,0.459,0.884]],[0.098,[0.348,0.466,0.888]],[0.1,[0.348,0.466,0.888]],[0.102,[0.353,0.472,0.893]],[0.104,[0.353,0.472,0.893]],[0.106,[0.358,0.478,0.897]],[0.108,[0.358,0.478,0.897]],[0.11,[0.363,0.485,0.901]],[0.112,[0.363,0.485,0.901]],[0.114,[0.369,0.491,0.905]],[0.115,[0.369,0.491,0.905]],[0.117,[0.374,0.497,0.909]],[0.119,[0.374,0.497,0.909]],[0.121,[0.379,0.504,0.914]],[0.123,[0.379,0.504,0.914]],[0.125,[0.384,0.51,0.918]],[0.127,[0.384,0.51,0.918]],[0.129,[0.389,0.516,0.921]],[0.131,[0.389,0.516,0.921]],[0.133,[0.394,0.522,0.925]],[0.135,[0.394,0.522,0.925]],[0.137,[0.399,0.529,0.928]],[0.139,[0.399,0.529,0.928]],[0.141,[0.404,0.535,0.932]],[0.143,[0.404,0.535,0.932]],[0.145,[0.41,0.541,0.936]],[0.147,[0.41,0.541,0.936]],[0.149,[0.415,0.547,0.939]],[0.151,[0.415,0.547,0.939]],[0.153,[0.42,0.553,0.943]],[0.155,[0.42,0.553,0.943]],[0.157,[0.425,0.559,0.946]],[0.159,[0.425,0.559,0.946]],[0.16,[0.431,0.565,0.949]],[0.162,[0.431,0.565,0.949]],[0.164,[0.436,0.571,0.952]],[0.166,[0.436,0.571,0.952]],[0.168,[0.441,0.577,0.955]],[0.17,[0.441,0.577,0.955]],[0.172,[0.446,0.582,0.957]],[0.174,[0.446,0.582,0.957]],[0.176,[0.452,0.588,0.96]],[0.178,[0.452,0.588,0.96]],[0.18,[0.457,0.594,0.963]],[0.182,[0.457,0.594,0.963]],[0.184,[0.462,0.6,0.966]],[0.186,[0.462,0.6,0.966]],[0.188,[0.468,0.606,0.969]],[0.19,[0.468,0.606,0.969]],[0.192,[0.473,0.611,0.971]],[0.194,[0.473,0.611,0.971]],[0.196,[0.478,0.617,0.973]],[0.198,[0.478,0.617,0.973]],[0.2,[0.484,0.622,0.975]],[0.202,[0.484,0.622,0.975]],[0.204,[0.489,0.628,0.977]],[0.205,[0.489,0.628,0.977]],[0.207,[0.495,0.633,0.979]],[0.209,[0.495,0.633,0.979]],[0.211,[0.5,0.639,0.981]],[0.213,[0.5,0.639,0.981]],[0.215,[0.505,0.644,0.983]],[0.217,[0.505,0.644,0.983]],[0.219,[0.511,0.649,0.985]],[0.221,[0.511,0.649,0.985]],[0.223,[0.516,0.654,0.986]],[0.225,[0.516,0.654,0.986]],[0.227,[0.522,0.66,0.988]],[0.229,[0.522,0.66,0.988]],[0.231,[0.527,0.665,0.989]],[0.233,[0.527,0.665,0.989]],[0.235,[0.533,0.67,0.99]],[0.237,[0.533,0.67,0.99]],[0.239,[0.538,0.675,0.992]],[0.241,[0.538,0.675,0.992]],[0.243,[0.543,0.68,0.993]],[0.245,[0.543,0.68,0.993]],[0.247,[0.549,0.685,0.994]],[0.249,[0.549,0.685,0.994]],[0.25,[0.554,0.69,0.996]],[0.252,[0.554,0.69,0.996]],[0.254,[0.56,0.695,0.996]],[0.256,[0.56,0.695,0.996]],[0.258,[0.565,0.699,0.997]],[0.26,[0.565,0.699,0.997]],[0.262,[0.571,0.704,0.997]],[0.264,[0.571,0.704,0.997]],[0.266,[0.576,0.709,0.998]],[0.268,[0.576,0.709,0.998]],[0.27,[0.581,0.713,0.998]],[0.272,[0.581,0.713,0.998]],[0.274,[0.587,0.718,0.999]],[0.276,[0.587,0.718,0.999]],[0.278,[0.592,0.723,0.999]],[0.28,[0.592,0.723,0.999]],[0.282,[0.598,0.727,1]],[0.284,[0.598,0.727,1]],[0.286,[0.603,0.732,1]],[0.288,[0.603,0.732,1]],[0.29,[0.609,0.736,0.999]],[0.292,[0.609,0.736,0.999]],[0.294,[0.614,0.74,0.999]],[0.295,[0.614,0.74,0.999]],[0.297,[0.619,0.744,0.999]],[0.299,[0.619,0.744,0.999]],[0.301,[0.625,0.748,0.999]],[0.303,[0.625,0.748,0.999]],[0.305,[0.63,0.753,0.999]],[0.307,[0.63,0.753,0.999]],[0.309,[0.635,0.757,0.998]],[0.311,[0.635,0.757,0.998]],[0.313,[0.641,0.761,0.998]],[0.315,[0.641,0.761,0.998]],[0.317,[0.646,0.764,0.997]],[0.319,[0.646,0.764,0.997]],[0.321,[0.651,0.768,0.996]],[0.323,[0.651,0.768,0.996]],[0.325,[0.657,0.772,0.995]],[0.327,[0.657,0.772,0.995]],[0.329,[0.662,0.775,0.994]],[0.331,[0.662,0.775,0.994]],[0.333,[0.667,0.779,0.993]],[0.335,[0.667,0.779,0.993]],[0.337,[0.673,0.783,0.992]],[0.339,[0.673,0.783,0.992]],[0.341,[0.678,0.787,0.991]],[0.342,[0.678,0.787,0.991]],[0.344,[0.683,0.79,0.99]],[0.346,[0.683,0.79,0.99]],[0.348,[0.688,0.793,0.988]],[0.35,[0.688,0.793,0.988]],[0.352,[0.693,0.796,0.986]],[0.354,[0.693,0.796,0.986]],[0.356,[0.698,0.799,0.985]],[0.358,[0.698,0.799,0.985]],[0.36,[0.704,0.803,0.983]],[0.362,[0.704,0.803,0.983]],[0.364,[0.709,0.806,0.981]],[0.366,[0.709,0.806,0.981]],[0.368,[0.714,0.809,0.979]],[0.37,[0.714,0.809,0.979]],[0.372,[0.719,0.812,0.978]],[0.374,[0.719,0.812,0.978]],[0.376,[0.724,0.815,0.976]],[0.378,[0.724,0.815,0.976]],[0.38,[0.729,0.817,0.973]],[0.382,[0.729,0.817,0.973]],[0.384,[0.734,0.82,0.971]],[0.386,[0.734,0.82,0.971]],[0.387,[0.739,0.823,0.968]],[0.389,[0.739,0.823,0.968]],[0.391,[0.744,0.825,0.966]],[0.393,[0.744,0.825,0.966]],[0.395,[0.749,0.828,0.963]],[0.397,[0.749,0.828,0.963]],[0.399,[0.754,0.83,0.961]],[0.401,[0.754,0.83,0.961]],[0.403,[0.759,0.833,0.958]],[0.405,[0.759,0.833,0.958]],[0.407,[0.763,0.835,0.956]],[0.409,[0.763,0.835,0.956]],[0.411,[0.768,0.837,0.952]],[0.413,[0.768,0.837,0.952]],[0.415,[0.773,0.839,0.949]],[0.417,[0.773,0.839,0.949]],[0.419,[0.777,0.841,0.946]],[0.421,[0.777,0.841,0.946]],[0.423,[0.782,0.843,0.943]],[0.425,[0.782,0.843,0.943]],[0.427,[0.787,0.845,0.94]],[0.429,[0.787,0.845,0.94]],[0.431,[0.791,0.847,0.937]],[0.432,[0.791,0.847,0.937]],[0.434,[0.796,0.849,0.933]],[0.436,[0.796,0.849,0.933]],[0.438,[0.801,0.85,0.93]],[0.44,[0.801,0.85,0.93]],[0.442,[0.805,0.852,0.926]],[0.444,[0.805,0.852,0.926]],[0.446,[0.809,0.853,0.922]],[0.448,[0.809,0.853,0.922]],[0.45,[0.814,0.854,0.918]],[0.452,[0.814,0.854,0.918]],[0.454,[0.818,0.856,0.915]],[0.456,[0.818,0.856,0.915]],[0.458,[0.822,0.857,0.911]],[0.46,[0.822,0.857,0.911]],[0.462,[0.827,0.858,0.907]],[0.464,[0.827,0.858,0.907]],[0.466,[0.831,0.86,0.903]],[0.468,[0.831,0.86,0.903]],[0.47,[0.835,0.861,0.899]],[0.472,[0.835,0.861,0.899]],[0.474,[0.839,0.861,0.894]],[0.476,[0.839,0.861,0.894]],[0.477,[0.843,0.862,0.89]],[0.479,[0.843,0.862,0.89]],[0.481,[0.847,0.862,0.886]],[0.483,[0.847,0.862,0.886]],[0.485,[0.851,0.863,0.881]],[0.487,[0.851,0.863,0.881]],[0.489,[0.855,0.864,0.877]],[0.491,[0.855,0.864,0.877]],[0.493,[0.859,0.864,0.872]],[0.495,[0.859,0.864,0.872]],[0.497,[0.863,0.865,0.868]],[0.499,[0.863,0.865,0.868]],[0.501,[0.867,0.864,0.863]],[0.503,[0.867,0.864,0.863]],[0.505,[0.871,0.862,0.857]],[0.507,[0.871,0.862,0.857]],[0.509,[0.876,0.86,0.851]],[0.511,[0.876,0.86,0.851]],[0.513,[0.88,0.858,0.846]],[0.515,[0.88,0.858,0.846]],[0.517,[0.884,0.856,0.84]],[0.519,[0.884,0.856,0.84]],[0.521,[0.888,0.854,0.835]],[0.523,[0.888,0.854,0.835]],[0.524,[0.892,0.852,0.829]],[0.526,[0.892,0.852,0.829]],[0.528,[0.896,0.85,0.823]],[0.53,[0.896,0.85,0.823]],[0.532,[0.9,0.848,0.818]],[0.534,[0.9,0.848,0.818]],[0.536,[0.903,0.845,0.812]],[0.538,[0.903,0.845,0.812]],[0.54,[0.906,0.842,0.806]],[0.542,[0.906,0.842,0.806]],[0.544,[0.909,0.839,0.8]],[0.546,[0.909,0.839,0.8]],[0.548,[0.913,0.837,0.795]],[0.55,[0.913,0.837,0.795]],[0.552,[0.916,0.834,0.789]],[0.554,[0.916,0.834,0.789]],[0.556,[0.919,0.831,0.783]],[0.558,[0.919,0.831,0.783]],[0.56,[0.923,0.829,0.777]],[0.562,[0.923,0.829,0.777]],[0.564,[0.926,0.826,0.771]],[0.566,[0.926,0.826,0.771]],[0.568,[0.928,0.822,0.765]],[0.569,[0.928,0.822,0.765]],[0.571,[0.931,0.819,0.759]],[0.573,[0.931,0.819,0.759]],[0.575,[0.933,0.816,0.753]],[0.577,[0.933,0.816,0.753]],[0.579,[0.936,0.812,0.747]],[0.581,[0.936,0.812,0.747]],[0.583,[0.938,0.809,0.741]],[0.585,[0.938,0.809,0.741]],[0.587,[0.941,0.806,0.735]],[0.589,[0.941,0.806,0.735]],[0.591,[0.943,0.802,0.729]],[0.593,[0.943,0.802,0.729]],[0.595,[0.946,0.799,0.723]],[0.597,[0.946,0.799,0.723]],[0.599,[0.947,0.795,0.717]],[0.601,[0.947,0.795,0.717]],[0.603,[0.949,0.791,0.711]],[0.605,[0.949,0.791,0.711]],[0.607,[0.951,0.787,0.705]],[0.609,[0.951,0.787,0.705]],[0.611,[0.953,0.783,0.699]],[0.613,[0.953,0.783,0.699]],[0.614,[0.955,0.779,0.693]],[0.616,[0.955,0.779,0.693]],[0.618,[0.956,0.775,0.686]],[0.62,[0.956,0.775,0.686]],[0.622,[0.958,0.771,0.68]],[0.624,[0.958,0.771,0.68]],[0.626,[0.96,0.767,0.674]],[0.628,[0.96,0.767,0.674]],[0.63,[0.961,0.763,0.668]],[0.632,[0.961,0.763,0.668]],[0.634,[0.962,0.758,0.662]],[0.636,[0.962,0.758,0.662]],[0.638,[0.963,0.754,0.656]],[0.64,[0.963,0.754,0.656]],[0.642,[0.964,0.749,0.649]],[0.644,[0.964,0.749,0.649]],[0.646,[0.965,0.745,0.643]],[0.648,[0.965,0.745,0.643]],[0.65,[0.966,0.74,0.637]],[0.652,[0.966,0.74,0.637]],[0.654,[0.967,0.736,0.631]],[0.656,[0.967,0.736,0.631]],[0.658,[0.968,0.731,0.625]],[0.659,[0.968,0.731,0.625]],[0.661,[0.968,0.726,0.618]],[0.663,[0.968,0.726,0.618]],[0.665,[0.968,0.721,0.612]],[0.667,[0.968,0.721,0.612]],[0.669,[0.969,0.716,0.606]],[0.671,[0.969,0.716,0.606]],[0.673,[0.969,0.711,0.6]],[0.675,[0.969,0.711,0.6]],[0.677,[0.969,0.706,0.594]],[0.679,[0.969,0.706,0.594]],[0.681,[0.97,0.701,0.588]],[0.683,[0.97,0.701,0.588]],[0.685,[0.97,0.696,0.581]],[0.687,[0.97,0.696,0.581]],[0.689,[0.97,0.69,0.575]],[0.691,[0.97,0.69,0.575]],[0.693,[0.969,0.685,0.569]],[0.695,[0.969,0.685,0.569]],[0.697,[0.969,0.679,0.563]],[0.699,[0.969,0.679,0.563]],[0.701,[0.968,0.674,0.557]],[0.703,[0.968,0.674,0.557]],[0.705,[0.968,0.668,0.55]],[0.706,[0.968,0.668,0.55]],[0.708,[0.968,0.663,0.544]],[0.71,[0.968,0.663,0.544]],[0.712,[0.967,0.657,0.538]],[0.714,[0.967,0.657,0.538]],[0.716,[0.967,0.652,0.532]],[0.718,[0.967,0.652,0.532]],[0.72,[0.966,0.646,0.526]],[0.722,[0.966,0.646,0.526]],[0.724,[0.965,0.64,0.52]],[0.726,[0.965,0.64,0.52]],[0.728,[0.964,0.634,0.514]],[0.73,[0.964,0.634,0.514]],[0.732,[0.963,0.628,0.508]],[0.734,[0.963,0.628,0.508]],[0.736,[0.962,0.622,0.502]],[0.738,[0.962,0.622,0.502]],[0.74,[0.96,0.616,0.495]],[0.742,[0.96,0.616,0.495]],[0.744,[0.959,0.61,0.489]],[0.746,[0.959,0.61,0.489]],[0.748,[0.958,0.604,0.483]],[0.75,[0.958,0.604,0.483]],[0.751,[0.957,0.598,0.477]],[0.753,[0.957,0.598,0.477]],[0.755,[0.955,0.592,0.471]],[0.757,[0.955,0.592,0.471]],[0.759,[0.953,0.585,0.465]],[0.761,[0.953,0.585,0.465]],[0.763,[0.951,0.579,0.459]],[0.765,[0.951,0.579,0.459]],[0.767,[0.949,0.572,0.453]],[0.769,[0.949,0.572,0.453]],[0.771,[0.948,0.566,0.447]],[0.773,[0.948,0.566,0.447]],[0.775,[0.946,0.56,0.442]],[0.777,[0.946,0.56,0.442]],[0.779,[0.944,0.553,0.436]],[0.781,[0.944,0.553,0.436]],[0.783,[0.942,0.546,0.43]],[0.785,[0.942,0.546,0.43]],[0.787,[0.939,0.54,0.424]],[0.789,[0.939,0.54,0.424]],[0.791,[0.937,0.533,0.418]],[0.793,[0.937,0.533,0.418]],[0.795,[0.934,0.526,0.412]],[0.796,[0.934,0.526,0.412]],[0.798,[0.932,0.519,0.406]],[0.8,[0.932,0.519,0.406]],[0.802,[0.929,0.512,0.401]],[0.804,[0.929,0.512,0.401]],[0.806,[0.927,0.505,0.395]],[0.808,[0.927,0.505,0.395]],[0.81,[0.924,0.499,0.389]],[0.812,[0.924,0.499,0.389]],[0.814,[0.921,0.491,0.383]],[0.816,[0.921,0.491,0.383]],[0.818,[0.918,0.484,0.378]],[0.82,[0.918,0.484,0.378]],[0.822,[0.915,0.477,0.372]],[0.824,[0.915,0.477,0.372]],[0.826,[0.912,0.47,0.367]],[0.828,[0.912,0.47,0.367]],[0.83,[0.909,0.462,0.361]],[0.832,[0.909,0.462,0.361]],[0.834,[0.906,0.455,0.355]],[0.836,[0.906,0.455,0.355]],[0.838,[0.903,0.448,0.35]],[0.84,[0.903,0.448,0.35]],[0.841,[0.9,0.441,0.344]],[0.843,[0.9,0.441,0.344]],[0.845,[0.896,0.433,0.339]],[0.847,[0.896,0.433,0.339]],[0.849,[0.892,0.425,0.333]],[0.851,[0.892,0.425,0.333]],[0.853,[0.888,0.418,0.328]],[0.855,[0.888,0.418,0.328]],[0.857,[0.885,0.41,0.323]],[0.859,[0.885,0.41,0.323]],[0.861,[0.881,0.402,0.317]],[0.863,[0.881,0.402,0.317]],[0.865,[0.877,0.395,0.312]],[0.867,[0.877,0.395,0.312]],[0.869,[0.873,0.387,0.306]],[0.871,[0.873,0.387,0.306]],[0.873,[0.87,0.379,0.301]],[0.875,[0.87,0.379,0.301]],[0.877,[0.865,0.371,0.296]],[0.879,[0.865,0.371,0.296]],[0.881,[0.861,0.363,0.291]],[0.883,[0.861,0.363,0.291]],[0.885,[0.857,0.355,0.285]],[0.886,[0.857,0.355,0.285]],[0.888,[0.852,0.346,0.28]],[0.89,[0.852,0.346,0.28]],[0.892,[0.848,0.338,0.275]],[0.894,[0.848,0.338,0.275]],[0.896,[0.844,0.33,0.27]],[0.898,[0.844,0.33,0.27]],[0.9,[0.839,0.322,0.265]],[0.902,[0.839,0.322,0.265]],[0.904,[0.835,0.314,0.26]],[0.906,[0.835,0.314,0.26]],[0.908,[0.83,0.305,0.255]],[0.91,[0.83,0.305,0.255]],[0.912,[0.825,0.296,0.25]],[0.914,[0.825,0.296,0.25]],[0.916,[0.82,0.287,0.245]],[0.918,[0.82,0.287,0.245]],[0.92,[0.816,0.278,0.24]],[0.922,[0.816,0.278,0.24]],[0.924,[0.811,0.269,0.235]],[0.926,[0.811,0.269,0.235]],[0.928,[0.806,0.26,0.231]],[0.93,[0.806,0.26,0.231]],[0.932,[0.801,0.251,0.226]],[0.933,[0.801,0.251,0.226]],[0.935,[0.796,0.242,0.221]],[0.937,[0.796,0.242,0.221]],[0.939,[0.791,0.231,0.216]],[0.941,[0.791,0.231,0.216]],[0.943,[0.785,0.221,0.212]],[0.945,[0.785,0.221,0.212]],[0.947,[0.78,0.21,0.207]],[0.949,[0.78,0.21,0.207]],[0.951,[0.774,0.2,0.203]],[0.953,[0.774,0.2,0.203]],[0.955,[0.769,0.189,0.198]],[0.957,[0.769,0.189,0.198]],[0.959,[0.764,0.179,0.193]],[0.961,[0.764,0.179,0.193]],[0.963,[0.758,0.168,0.189]],[0.965,[0.758,0.168,0.189]],[0.967,[0.753,0.158,0.184]],[0.969,[0.753,0.158,0.184]],[0.971,[0.747,0.14,0.18]],[0.973,[0.747,0.14,0.18]],[0.975,[0.741,0.122,0.176]],[0.977,[0.741,0.122,0.176]],[0.978,[0.735,0.104,0.171]],[0.98,[0.735,0.104,0.171]],[0.982,[0.729,0.087,0.167]],[0.984,[0.729,0.087,0.167]],[0.986,[0.723,0.069,0.163]],[0.988,[0.723,0.069,0.163]],[0.99,[0.717,0.051,0.159]],[0.992,[0.717,0.051,0.159]],[0.994,[0.712,0.033,0.154]],[0.996,[0.712,0.033,0.154]],[0.998,[0.706,0.016,0.15]],[1,[0.706,0.016,0.15]]],[[0,[1,1,0.851]],[0.002,[1,1,0.851]],[0.004,[0.998,0.999,0.846]],[0.006,[0.998,0.999,0.846]],[0.008,[0.996,0.998,0.841]],[0.01,[0.996,0.998,0.841]],[0.012,[0.993,0.997,0.836]],[0.014,[0.993,0.997,0.836]],[0.016,[0.991,0.997,0.831]],[0.018,[0.991,0.997,0.831]],[0.02,[0.989,0.996,0.826]],[0.022,[0.989,0.996,0.826]],[0.023,[0.987,0.995,0.821]],[0.025,[0.987,0.995,0.821]],[0.027,[0.984,0.994,0.817]],[0.029,[0.984,0.994,0.817]],[0.031,[0.982,0.993,0.812]],[0.033,[0.982,0.993,0.812]],[0.035,[0.98,0.992,0.807]],[0.037,[0.98,0.992,0.807]],[0.039,[0.978,0.991,0.802]],[0.041,[0.978,0.991,0.802]],[0.043,[0.976,0.991,0.797]],[0.045,[0.976,0.991,0.797]],[0.047,[0.973,0.99,0.792]],[0.049,[0.973,0.99,0.792]],[0.051,[0.971,0.989,0.787]],[0.053,[0.971,0.989,0.787]],[0.055,[0.969,0.988,0.782]],[0.057,[0.969,0.988,0.782]],[0.059,[0.967,0.987,0.777]],[0.061,[0.967,0.987,0.777]],[0.063,[0.965,0.986,0.772]],[0.065,[0.965,0.986,0.772]],[0.067,[0.962,0.985,0.767]],[0.068,[0.962,0.985,0.767]],[0.07,[0.96,0.984,0.762]],[0.072,[0.96,0.984,0.762]],[0.074,[0.958,0.984,0.757]],[0.076,[0.958,0.984,0.757]],[0.078,[0.956,0.983,0.753]],[0.08,[0.956,0.983,0.753]],[0.082,[0.953,0.982,0.748]],[0.084,[0.953,0.982,0.748]],[0.086,[0.951,0.981,0.743]],[0.088,[0.951,0.981,0.743]],[0.09,[0.949,0.98,0.738]],[0.092,[0.949,0.98,0.738]],[0.094,[0.947,0.979,0.733]],[0.096,[0.947,0.979,0.733]],[0.098,[0.945,0.978,0.728]],[0.1,[0.945,0.978,0.728]],[0.102,[0.942,0.978,0.723]],[0.104,[0.942,0.978,0.723]],[0.106,[0.94,0.977,0.718]],[0.108,[0.94,0.977,0.718]],[0.11,[0.938,0.976,0.713]],[0.112,[0.938,0.976,0.713]],[0.114,[0.936,0.975,0.708]],[0.115,[0.936,0.975,0.708]],[0.117,[0.934,0.974,0.703]],[0.119,[0.934,0.974,0.703]],[0.121,[0.931,0.973,0.698]],[0.123,[0.931,0.973,0.698]],[0.125,[0.929,0.972,0.694]],[0.127,[0.929,0.972,0.694]],[0.129,[0.924,0.97,0.695]],[0.131,[0.924,0.97,0.695]],[0.133,[0.919,0.969,0.695]],[0.135,[0.919,0.969,0.695]],[0.137,[0.915,0.967,0.695]],[0.139,[0.915,0.967,0.695]],[0.141,[0.91,0.965,0.696]],[0.143,[0.91,0.965,0.696]],[0.145,[0.905,0.963,0.696]],[0.147,[0.905,0.963,0.696]],[0.149,[0.901,0.961,0.696]],[0.151,[0.901,0.961,0.696]],[0.153,[0.896,0.959,0.697]],[0.155,[0.896,0.959,0.697]],[0.157,[0.891,0.958,0.697]],[0.159,[0.891,0.958,0.697]],[0.16,[0.887,0.956,0.697]],[0.162,[0.887,0.956,0.697]],[0.164,[0.882,0.954,0.698]],[0.166,[0.882,0.954,0.698]],[0.168,[0.877,0.952,0.698]],[0.17,[0.877,0.952,0.698]],[0.172,[0.873,0.95,0.699]],[0.174,[0.873,0.95,0.699]],[0.176,[0.868,0.948,0.699]],[0.178,[0.868,0.948,0.699]],[0.18,[0.863,0.946,0.699]],[0.182,[0.863,0.946,0.699]],[0.184,[0.859,0.945,0.7]],[0.186,[0.859,0.945,0.7]],[0.188,[0.854,0.943,0.7]],[0.19,[0.854,0.943,0.7]],[0.192,[0.849,0.941,0.7]],[0.194,[0.849,0.941,0.7]],[0.196,[0.845,0.939,0.701]],[0.198,[0.845,0.939,0.701]],[0.2,[0.84,0.937,0.701]],[0.202,[0.84,0.937,0.701]],[0.204,[0.835,0.935,0.702]],[0.205,[0.835,0.935,0.702]],[0.207,[0.831,0.934,0.702]],[0.209,[0.831,0.934,0.702]],[0.211,[0.826,0.932,0.702]],[0.213,[0.826,0.932,0.702]],[0.215,[0.821,0.93,0.703]],[0.217,[0.821,0.93,0.703]],[0.219,[0.817,0.928,0.703]],[0.221,[0.817,0.928,0.703]],[0.223,[0.812,0.926,0.703]],[0.225,[0.812,0.926,0.703]],[0.227,[0.807,0.924,0.704]],[0.229,[0.807,0.924,0.704]],[0.231,[0.803,0.922,0.704]],[0.233,[0.803,0.922,0.704]],[0.235,[0.798,0.921,0.704]],[0.237,[0.798,0.921,0.704]],[0.239,[0.793,0.919,0.705]],[0.241,[0.793,0.919,0.705]],[0.243,[0.789,0.917,0.705]],[0.245,[0.789,0.917,0.705]],[0.247,[0.784,0.915,0.706]],[0.249,[0.784,0.915,0.706]],[0.25,[0.778,0.913,0.706]],[0.252,[0.778,0.913,0.706]],[0.254,[0.769,0.909,0.707]],[0.256,[0.769,0.909,0.707]],[0.258,[0.76,0.906,0.708]],[0.26,[0.76,0.906,0.708]],[0.262,[0.752,0.903,0.709]],[0.264,[0.752,0.903,0.709]],[0.266,[0.743,0.899,0.71]],[0.268,[0.743,0.899,0.71]],[0.27,[0.734,0.896,0.71]],[0.272,[0.734,0.896,0.71]],[0.274,[0.725,0.892,0.711]],[0.276,[0.725,0.892,0.711]],[0.278,[0.716,0.889,0.712]],[0.28,[0.716,0.889,0.712]],[0.282,[0.707,0.885,0.713]],[0.284,[0.707,0.885,0.713]],[0.286,[0.698,0.882,0.714]],[0.288,[0.698,0.882,0.714]],[0.29,[0.69,0.878,0.715]],[0.292,[0.69,0.878,0.715]],[0.294,[0.681,0.875,0.716]],[0.295,[0.681,0.875,0.716]],[0.297,[0.672,0.872,0.716]],[0.299,[0.672,0.872,0.716]],[0.301,[0.663,0.868,0.717]],[0.303,[0.663,0.868,0.717]],[0.305,[0.654,0.865,0.718]],[0.307,[0.654,0.865,0.718]],[0.309,[0.645,0.861,0.719]],[0.311,[0.645,0.861,0.719]],[0.313,[0.636,0.858,0.72]],[0.315,[0.636,0.858,0.72]],[0.317,[0.628,0.854,0.721]],[0.319,[0.628,0.854,0.721]],[0.321,[0.619,0.851,0.722]],[0.323,[0.619,0.851,0.722]],[0.325,[0.61,0.847,0.722]],[0.327,[0.61,0.847,0.722]],[0.329,[0.601,0.844,0.723]],[0.331,[0.601,0.844,0.723]],[0.333,[0.592,0.841,0.724]],[0.335,[0.592,0.841,0.724]],[0.337,[0.583,0.837,0.725]],[0.339,[0.583,0.837,0.725]],[0.341,[0.574,0.834,0.726]],[0.342,[0.574,0.834,0.726]],[0.344,[0.566,0.83,0.727]],[0.346,[0.566,0.83,0.727]],[0.348,[0.557,0.827,0.728]],[0.35,[0.557,0.827,0.728]],[0.352,[0.548,0.823,0.728]],[0.354,[0.548,0.823,0.728]],[0.356,[0.539,0.82,0.729]],[0.358,[0.539,0.82,0.729]],[0.36,[0.53,0.816,0.73]],[0.362,[0.53,0.816,0.73]],[0.364,[0.521,0.813,0.731]],[0.366,[0.521,0.813,0.731]],[0.368,[0.512,0.81,0.732]],[0.37,[0.512,0.81,0.732]],[0.372,[0.504,0.806,0.733]],[0.374,[0.504,0.806,0.733]],[0.376,[0.495,0.803,0.734]],[0.378,[0.495,0.803,0.734]],[0.38,[0.488,0.8,0.735]],[0.382,[0.488,0.8,0.735]],[0.384,[0.48,0.797,0.736]],[0.386,[0.48,0.797,0.736]],[0.387,[0.472,0.794,0.737]],[0.389,[0.472,0.794,0.737]],[0.391,[0.465,0.792,0.738]],[0.393,[0.465,0.792,0.738]],[0.395,[0.457,0.789,0.739]],[0.397,[0.457,0.789,0.739]],[0.399,[0.449,0.786,0.74]],[0.401,[0.449,0.786,0.74]],[0.403,[0.442,0.783,0.741]],[0.405,[0.442,0.783,0.741]],[0.407,[0.434,0.78,0.743]],[0.409,[0.434,0.78,0.743]],[0.411,[0.427,0.777,0.744]],[0.413,[0.427,0.777,0.744]],[0.415,[0.419,0.775,0.745]],[0.417,[0.419,0.775,0.745]],[0.419,[0.411,0.772,0.746]],[0.421,[0.411,0.772,0.746]],[0.423,[0.404,0.769,0.747]],[0.425,[0.404,0.769,0.747]],[0.427,[0.396,0.766,0.748]],[0.429,[0.396,0.766,0.748]],[0.431,[0.388,0.763,0.749]],[0.432,[0.388,0.763,0.749]],[0.434,[0.381,0.76,0.75]],[0.436,[0.381,0.76,0.75]],[0.438,[0.373,0.758,0.751]],[0.44,[0.373,0.758,0.751]],[0.442,[0.366,0.755,0.753]],[0.444,[0.366,0.755,0.753]],[0.446,[0.358,0.752,0.754]],[0.448,[0.358,0.752,0.754]],[0.45,[0.35,0.749,0.755]],[0.452,[0.35,0.749,0.755]],[0.454,[0.343,0.746,0.756]],[0.456,[0.343,0.746,0.756]],[0.458,[0.335,0.743,0.757]],[0.46,[0.335,0.743,0.757]],[0.462,[0.327,0.741,0.758]],[0.464,[0.327,0.741,0.758]],[0.466,[0.32,0.738,0.759]],[0.468,[0.32,0.738,0.759]],[0.47,[0.312,0.735,0.76]],[0.472,[0.312,0.735,0.76]],[0.474,[0.304,0.732,0.761]],[0.476,[0.304,0.732,0.761]],[0.477,[0.297,0.729,0.763]],[0.479,[0.297,0.729,0.763]],[0.481,[0.289,0.726,0.764]],[0.483,[0.289,0.726,0.764]],[0.485,[0.282,0.724,0.765]],[0.487,[0.282,0.724,0.765]],[0.489,[0.274,0.721,0.766]],[0.491,[0.274,0.721,0.766]],[0.493,[0.266,0.718,0.767]],[0.495,[0.266,0.718,0.767]],[0.497,[0.259,0.715,0.768]],[0.499,[0.259,0.715,0.768]],[0.501,[0.253,0.711,0.768]],[0.503,[0.253,0.711,0.768]],[0.505,[0.248,0.707,0.768]],[0.507,[0.248,0.707,0.768]],[0.509,[0.244,0.702,0.767]],[0.511,[0.244,0.702,0.767]],[0.513,[0.239,0.698,0.767]],[0.515,[0.239,0.698,0.767]],[0.517,[0.235,0.693,0.766]],[0.519,[0.235,0.693,0.766]],[0.521,[0.231,0.689,0.766]],[0.523,[0.231,0.689,0.766]],[0.524,[0.226,0.684,0.765]],[0.526,[0.226,0.684,0.765]],[0.528,[0.222,0.68,0.765]],[0.53,[0.222,0.68,0.765]],[0.532,[0.217,0.675,0.764]],[0.534,[0.217,0.675,0.764]],[0.536,[0.213,0.67,0.764]],[0.538,[0.213,0.67,0.764]],[0.54,[0.208,0.666,0.763]],[0.542,[0.208,0.666,0.763]],[0.544,[0.204,0.661,0.763]],[0.546,[0.204,0.661,0.763]],[0.548,[0.2,0.657,0.762]],[0.55,[0.2,0.657,0.762]],[0.552,[0.195,0.652,0.762]],[0.554,[0.195,0.652,0.762]],[0.556,[0.191,0.648,0.761]],[0.558,[0.191,0.648,0.761]],[0.56,[0.186,0.643,0.761]],[0.562,[0.186,0.643,0.761]],[0.564,[0.182,0.639,0.761]],[0.566,[0.182,0.639,0.761]],[0.568,[0.177,0.634,0.76]],[0.569,[0.177,0.634,0.76]],[0.571,[0.173,0.63,0.76]],[0.573,[0.173,0.63,0.76]],[0.575,[0.169,0.625,0.759]],[0.577,[0.169,0.625,0.759]],[0.579,[0.164,0.62,0.759]],[0.581,[0.164,0.62,0.759]],[0.583,[0.16,0.616,0.758]],[0.585,[0.16,0.616,0.758]],[0.587,[0.155,0.611,0.758]],[0.589,[0.155,0.611,0.758]],[0.591,[0.151,0.607,0.757]],[0.593,[0.151,0.607,0.757]],[0.595,[0.146,0.602,0.757]],[0.597,[0.146,0.602,0.757]],[0.599,[0.142,0.598,0.756]],[0.601,[0.142,0.598,0.756]],[0.603,[0.138,0.593,0.756]],[0.605,[0.138,0.593,0.756]],[0.607,[0.133,0.589,0.755]],[0.609,[0.133,0.589,0.755]],[0.611,[0.129,0.584,0.755]],[0.613,[0.129,0.584,0.755]],[0.614,[0.124,0.579,0.754]],[0.616,[0.124,0.579,0.754]],[0.618,[0.12,0.575,0.754]],[0.62,[0.12,0.575,0.754]],[0.622,[0.115,0.57,0.753]],[0.624,[0.115,0.57,0.753]],[0.626,[0.114,0.565,0.751]],[0.628,[0.114,0.565,0.751]],[0.63,[0.115,0.558,0.748]],[0.632,[0.115,0.558,0.748]],[0.634,[0.115,0.552,0.745]],[0.636,[0.115,0.552,0.745]],[0.638,[0.116,0.546,0.742]],[0.64,[0.116,0.546,0.742]],[0.642,[0.117,0.54,0.739]],[0.644,[0.117,0.54,0.739]],[0.646,[0.117,0.533,0.736]],[0.648,[0.117,0.533,0.736]],[0.65,[0.118,0.527,0.733]],[0.652,[0.118,0.527,0.733]],[0.654,[0.118,0.521,0.73]],[0.656,[0.118,0.521,0.73]],[0.658,[0.119,0.515,0.727]],[0.659,[0.119,0.515,0.727]],[0.661,[0.12,0.508,0.725]],[0.663,[0.12,0.508,0.725]],[0.665,[0.12,0.502,0.722]],[0.667,[0.12,0.502,0.722]],[0.669,[0.121,0.496,0.719]],[0.671,[0.121,0.496,0.719]],[0.673,[0.121,0.489,0.716]],[0.675,[0.121,0.489,0.716]],[0.677,[0.122,0.483,0.713]],[0.679,[0.122,0.483,0.713]],[0.681,[0.123,0.477,0.71]],[0.683,[0.123,0.477,0.71]],[0.685,[0.123,0.471,0.707]],[0.687,[0.123,0.471,0.707]],[0.689,[0.124,0.464,0.704]],[0.691,[0.124,0.464,0.704]],[0.693,[0.125,0.458,0.701]],[0.695,[0.125,0.458,0.701]],[0.697,[0.125,0.452,0.698]],[0.699,[0.125,0.452,0.698]],[0.701,[0.126,0.445,0.695]],[0.703,[0.126,0.445,0.695]],[0.705,[0.126,0.439,0.692]],[0.706,[0.126,0.439,0.692]],[0.708,[0.127,0.433,0.689]],[0.71,[0.127,0.433,0.689]],[0.712,[0.128,0.427,0.686]],[0.714,[0.128,0.427,0.686]],[0.716,[0.128,0.42,0.683]],[0.718,[0.128,0.42,0.683]],[0.72,[0.129,0.414,0.68]],[0.722,[0.129,0.414,0.68]],[0.724,[0.129,0.408,0.677]],[0.726,[0.129,0.408,0.677]],[0.728,[0.13,0.402,0.674]],[0.73,[0.13,0.402,0.674]],[0.732,[0.131,0.395,0.671]],[0.734,[0.131,0.395,0.671]],[0.736,[0.131,0.389,0.668]],[0.738,[0.131,0.389,0.668]],[0.74,[0.132,0.383,0.665]],[0.742,[0.132,0.383,0.665]],[0.744,[0.133,0.376,0.663]],[0.746,[0.133,0.376,0.663]],[0.748,[0.133,0.37,0.66]],[0.75,[0.133,0.37,0.66]],[0.751,[0.134,0.365,0.657]],[0.753,[0.134,0.365,0.657]],[0.755,[0.134,0.36,0.655]],[0.757,[0.134,0.36,0.655]],[0.759,[0.134,0.354,0.652]],[0.761,[0.134,0.354,0.652]],[0.763,[0.135,0.349,0.65]],[0.765,[0.135,0.349,0.65]],[0.767,[0.135,0.344,0.647]],[0.769,[0.135,0.344,0.647]],[0.771,[0.135,0.339,0.645]],[0.773,[0.135,0.339,0.645]],[0.775,[0.136,0.334,0.642]],[0.777,[0.136,0.334,0.642]],[0.779,[0.136,0.329,0.64]],[0.781,[0.136,0.329,0.64]],[0.783,[0.137,0.323,0.637]],[0.785,[0.137,0.323,0.637]],[0.787,[0.137,0.318,0.635]],[0.789,[0.137,0.318,0.635]],[0.791,[0.137,0.313,0.632]],[0.793,[0.137,0.313,0.632]],[0.795,[0.138,0.308,0.63]],[0.796,[0.138,0.308,0.63]],[0.798,[0.138,0.303,0.627]],[0.8,[0.138,0.303,0.627]],[0.802,[0.138,0.298,0.625]],[0.804,[0.138,0.298,0.625]],[0.806,[0.139,0.292,0.623]],[0.808,[0.139,0.292,0.623]],[0.81,[0.139,0.287,0.62]],[0.812,[0.139,0.287,0.62]],[0.814,[0.14,0.282,0.618]],[0.816,[0.14,0.282,0.618]],[0.818,[0.14,0.277,0.615]],[0.82,[0.14,0.277,0.615]],[0.822,[0.14,0.272,0.613]],[0.824,[0.14,0.272,0.613]],[0.826,[0.141,0.267,0.61]],[0.828,[0.141,0.267,0.61]],[0.83,[0.141,0.261,0.608]],[0.832,[0.141,0.261,0.608]],[0.834,[0.141,0.256,0.605]],[0.836,[0.141,0.256,0.605]],[0.838,[0.142,0.251,0.603]],[0.84,[0.142,0.251,0.603]],[0.841,[0.142,0.246,0.6]],[0.843,[0.142,0.246,0.6]],[0.845,[0.142,0.241,0.598]],[0.847,[0.142,0.241,0.598]],[0.849,[0.143,0.236,0.595]],[0.851,[0.143,0.236,0.595]],[0.853,[0.143,0.23,0.593]],[0.855,[0.143,0.23,0.593]],[0.857,[0.144,0.225,0.591]],[0.859,[0.144,0.225,0.591]],[0.861,[0.144,0.22,0.588]],[0.863,[0.144,0.22,0.588]],[0.865,[0.144,0.215,0.586]],[0.867,[0.144,0.215,0.586]],[0.869,[0.145,0.21,0.583]],[0.871,[0.145,0.21,0.583]],[0.873,[0.145,0.205,0.581]],[0.875,[0.145,0.205,0.581]],[0.877,[0.142,0.201,0.574]],[0.879,[0.142,0.201,0.574]],[0.881,[0.138,0.199,0.567]],[0.883,[0.138,0.199,0.567]],[0.885,[0.135,0.196,0.559]],[0.886,[0.135,0.196,0.559]],[0.888,[0.131,0.193,0.552]],[0.89,[0.131,0.193,0.552]],[0.892,[0.128,0.19,0.544]],[0.894,[0.128,0.19,0.544]],[0.896,[0.124,0.187,0.537]],[0.898,[0.124,0.187,0.537]],[0.9,[0.121,0.184,0.53]],[0.902,[0.121,0.184,0.53]],[0.904,[0.117,0.182,0.522]],[0.906,[0.117,0.182,0.522]],[0.908,[0.113,0.179,0.515]],[0.91,[0.113,0.179,0.515]],[0.912,[0.11,0.176,0.507]],[0.914,[0.11,0.176,0.507]],[0.916,[0.106,0.173,0.5]],[0.918,[0.106,0.173,0.5]],[0.92,[0.103,0.17,0.493]],[0.922,[0.103,0.17,0.493]],[0.924,[0.099,0.167,0.485]],[0.926,[0.099,0.167,0.485]],[0.928,[0.096,0.165,0.478]],[0.93,[0.096,0.165,0.478]],[0.932,[0.092,0.162,0.471]],[0.933,[0.092,0.162,0.471]],[0.935,[0.088,0.159,0.463]],[0.937,[0.088,0.159,0.463]],[0.939,[0.085,0.156,0.456]],[0.941,[0.085,0.156,0.456]],[0.943,[0.081,0.153,0.448]],[0.945,[0.081,0.153,0.448]],[0.947,[0.078,0.151,0.441]],[0.949,[0.078,0.151,0.441]],[0.951,[0.074,0.148,0.434]],[0.953,[0.074,0.148,0.434]],[0.955,[0.071,0.145,0.426]],[0.957,[0.071,0.145,0.426]],[0.959,[0.067,0.142,0.419]],[0.961,[0.067,0.142,0.419]],[0.963,[0.063,0.139,0.412]],[0.965,[0.063,0.139,0.412]],[0.967,[0.06,0.136,0.404]],[0.969,[0.06,0.136,0.404]],[0.971,[0.056,0.134,0.397]],[0.973,[0.056,0.134,0.397]],[0.975,[0.053,0.131,0.389]],[0.977,[0.053,0.131,0.389]],[0.978,[0.049,0.128,0.382]],[0.98,[0.049,0.128,0.382]],[0.982,[0.046,0.125,0.375]],[0.984,[0.046,0.125,0.375]],[0.986,[0.042,0.122,0.367]],[0.988,[0.042,0.122,0.367]],[0.99,[0.039,0.119,0.36]],[0.992,[0.039,0.119,0.36]],[0.994,[0.035,0.117,0.352]],[0.996,[0.035,0.117,0.352]],[0.998,[0.031,0.114,0.345]],[1,[0.031,0.114,0.345]]],[[0,[0,0,1]],[0.002,[0,0,1]],[0.004,[0,0.004,0.998]],[0.006,[0,0.004,0.998]],[0.008,[0,0.008,0.996]],[0.01,[0,0.008,0.996]],[0.012,[0,0.012,0.994]],[0.014,[0,0.012,0.994]],[0.016,[0,0.016,0.992]],[0.018,[0,0.016,0.992]],[0.02,[0,0.02,0.99]],[0.022,[0,0.02,0.99]],[0.023,[0,0.024,0.988]],[0.025,[0,0.024,0.988]],[0.027,[0,0.027,0.986]],[0.029,[0,0.027,0.986]],[0.031,[0,0.031,0.984]],[0.033,[0,0.031,0.984]],[0.035,[0,0.035,0.982]],[0.037,[0,0.035,0.982]],[0.039,[0,0.039,0.98]],[0.041,[0,0.039,0.98]],[0.043,[0,0.043,0.978]],[0.045,[0,0.043,0.978]],[0.047,[0,0.047,0.976]],[0.049,[0,0.047,0.976]],[0.051,[0,0.051,0.975]],[0.053,[0,0.051,0.975]],[0.055,[0,0.055,0.973]],[0.057,[0,0.055,0.973]],[0.059,[0,0.059,0.971]],[0.061,[0,0.059,0.971]],[0.063,[0,0.063,0.969]],[0.065,[0,0.063,0.969]],[0.067,[0,0.067,0.967]],[0.068,[0,0.067,0.967]],[0.07,[0,0.071,0.965]],[0.072,[0,0.071,0.965]],[0.074,[0,0.075,0.963]],[0.076,[0,0.075,0.963]],[0.078,[0,0.078,0.961]],[0.08,[0,0.078,0.961]],[0.082,[0,0.082,0.959]],[0.084,[0,0.082,0.959]],[0.086,[0,0.086,0.957]],[0.088,[0,0.086,0.957]],[0.09,[0,0.09,0.955]],[0.092,[0,0.09,0.955]],[0.094,[0,0.094,0.953]],[0.096,[0,0.094,0.953]],[0.098,[0,0.098,0.951]],[0.1,[0,0.098,0.951]],[0.102,[0,0.102,0.949]],[0.104,[0,0.102,0.949]],[0.106,[0,0.106,0.947]],[0.108,[0,0.106,0.947]],[0.11,[0,0.11,0.945]],[0.112,[0,0.11,0.945]],[0.114,[0,0.114,0.943]],[0.115,[0,0.114,0.943]],[0.117,[0,0.118,0.941]],[0.119,[0,0.118,0.941]],[0.121,[0,0.122,0.939]],[0.123,[0,0.122,0.939]],[0.125,[0,0.125,0.937]],[0.127,[0,0.125,0.937]],[0.129,[0,0.129,0.935]],[0.131,[0,0.129,0.935]],[0.133,[0,0.133,0.933]],[0.135,[0,0.133,0.933]],[0.137,[0,0.137,0.931]],[0.139,[0,0.137,0.931]],[0.141,[0,0.141,0.929]],[0.143,[0,0.141,0.929]],[0.145,[0,0.145,0.927]],[0.147,[0,0.145,0.927]],[0.149,[0,0.149,0.925]],[0.151,[0,0.149,0.925]],[0.153,[0,0.153,0.924]],[0.155,[0,0.153,0.924]],[0.157,[0,0.157,0.922]],[0.159,[0,0.157,0.922]],[0.16,[0,0.161,0.92]],[0.162,[0,0.161,0.92]],[0.164,[0,0.165,0.918]],[0.166,[0,0.165,0.918]],[0.168,[0,0.169,0.916]],[0.17,[0,0.169,0.916]],[0.172,[0,0.173,0.914]],[0.174,[0,0.173,0.914]],[0.176,[0,0.176,0.912]],[0.178,[0,0.176,0.912]],[0.18,[0,0.18,0.91]],[0.182,[0,0.18,0.91]],[0.184,[0,0.184,0.908]],[0.186,[0,0.184,0.908]],[0.188,[0,0.188,0.906]],[0.19,[0,0.188,0.906]],[0.192,[0,0.192,0.904]],[0.194,[0,0.192,0.904]],[0.196,[0,0.196,0.902]],[0.198,[0,0.196,0.902]],[0.2,[0,0.2,0.9]],[0.202,[0,0.2,0.9]],[0.204,[0,0.204,0.898]],[0.205,[0,0.204,0.898]],[0.207,[0,0.208,0.896]],[0.209,[0,0.208,0.896]],[0.211,[0,0.212,0.894]],[0.213,[0,0.212,0.894]],[0.215,[0,0.216,0.892]],[0.217,[0,0.216,0.892]],[0.219,[0,0.22,0.89]],[0.221,[0,0.22,0.89]],[0.223,[0,0.224,0.888]],[0.225,[0,0.224,0.888]],[0.227,[0,0.227,0.886]],[0.229,[0,0.227,0.886]],[0.231,[0,0.231,0.884]],[0.233,[0,0.231,0.884]],[0.235,[0,0.235,0.882]],[0.237,[0,0.235,0.882]],[0.239,[0,0.239,0.88]],[0.241,[0,0.239,0.88]],[0.243,[0,0.243,0.878]],[0.245,[0,0.243,0.878]],[0.247,[0,0.247,0.876]],[0.249,[0,0.247,0.876]],[0.25,[0,0.251,0.875]],[0.252,[0,0.251,0.875]],[0.254,[0,0.255,0.873]],[0.256,[0,0.255,0.873]],[0.258,[0,0.259,0.871]],[0.26,[0,0.259,0.871]],[0.262,[0,0.263,0.869]],[0.264,[0,0.263,0.869]],[0.266,[0,0.267,0.867]],[0.268,[0,0.267,0.867]],[0.27,[0,0.271,0.865]],[0.272,[0,0.271,0.865]],[0.274,[0,0.275,0.863]],[0.276,[0,0.275,0.863]],[0.278,[0,0.278,0.861]],[0.28,[0,0.278,0.861]],[0.282,[0,0.282,0.859]],[0.284,[0,0.282,0.859]],[0.286,[0,0.286,0.857]],[0.288,[0,0.286,0.857]],[0.29,[0,0.29,0.855]],[0.292,[0,0.29,0.855]],[0.294,[0,0.294,0.853]],[0.295,[0,0.294,0.853]],[0.297,[0,0.298,0.851]],[0.299,[0,0.298,0.851]],[0.301,[0,0.302,0.849]],[0.303,[0,0.302,0.849]],[0.305,[0,0.306,0.847]],[0.307,[0,0.306,0.847]],[0.309,[0,0.31,0.845]],[0.311,[0,0.31,0.845]],[0.313,[0,0.314,0.843]],[0.315,[0,0.314,0.843]],[0.317,[0,0.318,0.841]],[0.319,[0,0.318,0.841]],[0.321,[0,0.322,0.839]],[0.323,[0,0.322,0.839]],[0.325,[0,0.325,0.837]],[0.327,[0,0.325,0.837]],[0.329,[0,0.329,0.835]],[0.331,[0,0.329,0.835]],[0.333,[0,0.333,0.833]],[0.335,[0,0.333,0.833]],[0.337,[0,0.337,0.831]],[0.339,[0,0.337,0.831]],[0.341,[0,0.341,0.829]],[0.342,[0,0.341,0.829]],[0.344,[0,0.345,0.827]],[0.346,[0,0.345,0.827]],[0.348,[0,0.349,0.825]],[0.35,[0,0.349,0.825]],[0.352,[0,0.353,0.824]],[0.354,[0,0.353,0.824]],[0.356,[0,0.357,0.822]],[0.358,[0,0.357,0.822]],[0.36,[0,0.361,0.82]],[0.362,[0,0.361,0.82]],[0.364,[0,0.365,0.818]],[0.366,[0,0.365,0.818]],[0.368,[0,0.369,0.816]],[0.37,[0,0.369,0.816]],[0.372,[0,0.373,0.814]],[0.374,[0,0.373,0.814]],[0.376,[0,0.376,0.812]],[0.378,[0,0.376,0.812]],[0.38,[0,0.38,0.81]],[0.382,[0,0.38,0.81]],[0.384,[0,0.384,0.808]],[0.386,[0,0.384,0.808]],[0.387,[0,0.388,0.806]],[0.389,[0,0.388,0.806]],[0.391,[0,0.392,0.804]],[0.393,[0,0.392,0.804]],[0.395,[0,0.396,0.802]],[0.397,[0,0.396,0.802]],[0.399,[0,0.4,0.8]],[0.401,[0,0.4,0.8]],[0.403,[0,0.404,0.798]],[0.405,[0,0.404,0.798]],[0.407,[0,0.408,0.796]],[0.409,[0,0.408,0.796]],[0.411,[0,0.412,0.794]],[0.413,[0,0.412,0.794]],[0.415,[0,0.416,0.792]],[0.417,[0,0.416,0.792]],[0.419,[0,0.42,0.79]],[0.421,[0,0.42,0.79]],[0.423,[0,0.424,0.788]],[0.425,[0,0.424,0.788]],[0.427,[0,0.427,0.786]],[0.429,[0,0.427,0.786]],[0.431,[0,0.431,0.784]],[0.432,[0,0.431,0.784]],[0.434,[0,0.435,0.782]],[0.436,[0,0.435,0.782]],[0.438,[0,0.439,0.78]],[0.44,[0,0.439,0.78]],[0.442,[0,0.443,0.778]],[0.444,[0,0.443,0.778]],[0.446,[0,0.447,0.776]],[0.448,[0,0.447,0.776]],[0.45,[0,0.451,0.775]],[0.452,[0,0.451,0.775]],[0.454,[0,0.455,0.773]],[0.456,[0,0.455,0.773]],[0.458,[0,0.459,0.771]],[0.46,[0,0.459,0.771]],[0.462,[0,0.463,0.769]],[0.464,[0,0.463,0.769]],[0.466,[0,0.467,0.767]],[0.468,[0,0.467,0.767]],[0.47,[0,0.471,0.765]],[0.472,[0,0.471,0.765]],[0.474,[0,0.475,0.763]],[0.476,[0,0.475,0.763]],[0.477,[0,0.478,0.761]],[0.479,[0,0.478,0.761]],[0.481,[0,0.482,0.759]],[0.483,[0,0.482,0.759]],[0.485,[0,0.486,0.757]],[0.487,[0,0.486,0.757]],[0.489,[0,0.49,0.755]],[0.491,[0,0.49,0.755]],[0.493,[0,0.494,0.753]],[0.495,[0,0.494,0.753]],[0.497,[0,0.498,0.751]],[0.499,[0,0.498,0.751]],[0.501,[0,0.502,0.749]],[0.503,[0,0.502,0.749]],[0.505,[0,0.506,0.747]],[0.507,[0,0.506,0.747]],[0.509,[0,0.51,0.745]],[0.511,[0,0.51,0.745]],[0.513,[0,0.514,0.743]],[0.515,[0,0.514,0.743]],[0.517,[0,0.518,0.741]],[0.519,[0,0.518,0.741]],[0.521,[0,0.522,0.739]],[0.523,[0,0.522,0.739]],[0.524,[0,0.525,0.737]],[0.526,[0,0.525,0.737]],[0.528,[0,0.529,0.735]],[0.53,[0,0.529,0.735]],[0.532,[0,0.533,0.733]],[0.534,[0,0.533,0.733]],[0.536,[0,0.537,0.731]],[0.538,[0,0.537,0.731]],[0.54,[0,0.541,0.729]],[0.542,[0,0.541,0.729]],[0.544,[0,0.545,0.727]],[0.546,[0,0.545,0.727]],[0.548,[0,0.549,0.725]],[0.55,[0,0.549,0.725]],[0.552,[0,0.553,0.724]],[0.554,[0,0.553,0.724]],[0.556,[0,0.557,0.722]],[0.558,[0,0.557,0.722]],[0.56,[0,0.561,0.72]],[0.562,[0,0.561,0.72]],[0.564,[0,0.565,0.718]],[0.566,[0,0.565,0.718]],[0.568,[0,0.569,0.716]],[0.569,[0,0.569,0.716]],[0.571,[0,0.573,0.714]],[0.573,[0,0.573,0.714]],[0.575,[0,0.576,0.712]],[0.577,[0,0.576,0.712]],[0.579,[0,0.58,0.71]],[0.581,[0,0.58,0.71]],[0.583,[0,0.584,0.708]],[0.585,[0,0.584,0.708]],[0.587,[0,0.588,0.706]],[0.589,[0,0.588,0.706]],[0.591,[0,0.592,0.704]],[0.593,[0,0.592,0.704]],[0.595,[0,0.596,0.702]],[0.597,[0,0.596,0.702]],[0.599,[0,0.6,0.7]],[0.601,[0,0.6,0.7]],[0.603,[0,0.604,0.698]],[0.605,[0,0.604,0.698]],[0.607,[0,0.608,0.696]],[0.609,[0,0.608,0.696]],[0.611,[0,0.612,0.694]],[0.613,[0,0.612,0.694]],[0.614,[0,0.616,0.692]],[0.616,[0,0.616,0.692]],[0.618,[0,0.62,0.69]],[0.62,[0,0.62,0.69]],[0.622,[0,0.624,0.688]],[0.624,[0,0.624,0.688]],[0.626,[0,0.627,0.686]],[0.628,[0,0.627,0.686]],[0.63,[0,0.631,0.684]],[0.632,[0,0.631,0.684]],[0.634,[0,0.635,0.682]],[0.636,[0,0.635,0.682]],[0.638,[0,0.639,0.68]],[0.64,[0,0.639,0.68]],[0.642,[0,0.643,0.678]],[0.644,[0,0.643,0.678]],[0.646,[0,0.647,0.676]],[0.648,[0,0.647,0.676]],[0.65,[0,0.651,0.675]],[0.652,[0,0.651,0.675]],[0.654,[0,0.655,0.673]],[0.656,[0,0.655,0.673]],[0.658,[0,0.659,0.671]],[0.659,[0,0.659,0.671]],[0.661,[0,0.663,0.669]],[0.663,[0,0.663,0.669]],[0.665,[0,0.667,0.667]],[0.667,[0,0.667,0.667]],[0.669,[0,0.671,0.665]],[0.671,[0,0.671,0.665]],[0.673,[0,0.675,0.663]],[0.675,[0,0.675,0.663]],[0.677,[0,0.678,0.661]],[0.679,[0,0.678,0.661]],[0.681,[0,0.682,0.659]],[0.683,[0,0.682,0.659]],[0.685,[0,0.686,0.657]],[0.687,[0,0.686,0.657]],[0.689,[0,0.69,0.655]],[0.691,[0,0.69,0.655]],[0.693,[0,0.694,0.653]],[0.695,[0,0.694,0.653]],[0.697,[0,0.698,0.651]],[0.699,[0,0.698,0.651]],[0.701,[0,0.702,0.649]],[0.703,[0,0.702,0.649]],[0.705,[0,0.706,0.647]],[0.706,[0,0.706,0.647]],[0.708,[0,0.71,0.645]],[0.71,[0,0.71,0.645]],[0.712,[0,0.714,0.643]],[0.714,[0,0.714,0.643]],[0.716,[0,0.718,0.641]],[0.718,[0,0.718,0.641]],[0.72,[0,0.722,0.639]],[0.722,[0,0.722,0.639]],[0.724,[0,0.725,0.637]],[0.726,[0,0.725,0.637]],[0.728,[0,0.729,0.635]],[0.73,[0,0.729,0.635]],[0.732,[0,0.733,0.633]],[0.734,[0,0.733,0.633]],[0.736,[0,0.737,0.631]],[0.738,[0,0.737,0.631]],[0.74,[0,0.741,0.629]],[0.742,[0,0.741,0.629]],[0.744,[0,0.745,0.627]],[0.746,[0,0.745,0.627]],[0.748,[0,0.749,0.625]],[0.75,[0,0.749,0.625]],[0.751,[0,0.753,0.624]],[0.753,[0,0.753,0.624]],[0.755,[0,0.757,0.622]],[0.757,[0,0.757,0.622]],[0.759,[0,0.761,0.62]],[0.761,[0,0.761,0.62]],[0.763,[0,0.765,0.618]],[0.765,[0,0.765,0.618]],[0.767,[0,0.769,0.616]],[0.769,[0,0.769,0.616]],[0.771,[0,0.773,0.614]],[0.773,[0,0.773,0.614]],[0.775,[0,0.776,0.612]],[0.777,[0,0.776,0.612]],[0.779,[0,0.78,0.61]],[0.781,[0,0.78,0.61]],[0.783,[0,0.784,0.608]],[0.785,[0,0.784,0.608]],[0.787,[0,0.788,0.606]],[0.789,[0,0.788,0.606]],[0.791,[0,0.792,0.604]],[0.793,[0,0.792,0.604]],[0.795,[0,0.796,0.602]],[0.796,[0,0.796,0.602]],[0.798,[0,0.8,0.6]],[0.8,[0,0.8,0.6]],[0.802,[0,0.804,0.598]],[0.804,[0,0.804,0.598]],[0.806,[0,0.808,0.596]],[0.808,[0,0.808,0.596]],[0.81,[0,0.812,0.594]],[0.812,[0,0.812,0.594]],[0.814,[0,0.816,0.592]],[0.816,[0,0.816,0.592]],[0.818,[0,0.82,0.59]],[0.82,[0,0.82,0.59]],[0.822,[0,0.824,0.588]],[0.824,[0,0.824,0.588]],[0.826,[0,0.827,0.586]],[0.828,[0,0.827,0.586]],[0.83,[0,0.831,0.584]],[0.832,[0,0.831,0.584]],[0.834,[0,0.835,0.582]],[0.836,[0,0.835,0.582]],[0.838,[0,0.839,0.58]],[0.84,[0,0.839,0.58]],[0.841,[0,0.843,0.578]],[0.843,[0,0.843,0.578]],[0.845,[0,0.847,0.576]],[0.847,[0,0.847,0.576]],[0.849,[0,0.851,0.575]],[0.851,[0,0.851,0.575]],[0.853,[0,0.855,0.573]],[0.855,[0,0.855,0.573]],[0.857,[0,0.859,0.571]],[0.859,[0,0.859,0.571]],[0.861,[0,0.863,0.569]],[0.863,[0,0.863,0.569]],[0.865,[0,0.867,0.567]],[0.867,[0,0.867,0.567]],[0.869,[0,0.871,0.565]],[0.871,[0,0.871,0.565]],[0.873,[0,0.875,0.563]],[0.875,[0,0.875,0.563]],[0.877,[0,0.878,0.561]],[0.879,[0,0.878,0.561]],[0.881,[0,0.882,0.559]],[0.883,[0,0.882,0.559]],[0.885,[0,0.886,0.557]],[0.886,[0,0.886,0.557]],[0.888,[0,0.89,0.555]],[0.89,[0,0.89,0.555]],[0.892,[0,0.894,0.553]],[0.894,[0,0.894,0.553]],[0.896,[0,0.898,0.551]],[0.898,[0,0.898,0.551]],[0.9,[0,0.902,0.549]],[0.902,[0,0.902,0.549]],[0.904,[0,0.906,0.547]],[0.906,[0,0.906,0.547]],[0.908,[0,0.91,0.545]],[0.91,[0,0.91,0.545]],[0.912,[0,0.914,0.543]],[0.914,[0,0.914,0.543]],[0.916,[0,0.918,0.541]],[0.918,[0,0.918,0.541]],[0.92,[0,0.922,0.539]],[0.922,[0,0.922,0.539]],[0.924,[0,0.925,0.537]],[0.926,[0,0.925,0.537]],[0.928,[0,0.929,0.535]],[0.93,[0,0.929,0.535]],[0.932,[0,0.933,0.533]],[0.933,[0,0.933,0.533]],[0.935,[0,0.937,0.531]],[0.937,[0,0.937,0.531]],[0.939,[0,0.941,0.529]],[0.941,[0,0.941,0.529]],[0.943,[0,0.945,0.527]],[0.945,[0,0.945,0.527]],[0.947,[0,0.949,0.525]],[0.949,[0,0.949,0.525]],[0.951,[0,0.953,0.524]],[0.953,[0,0.953,0.524]],[0.955,[0,0.957,0.522]],[0.957,[0,0.957,0.522]],[0.959,[0,0.961,0.52]],[0.961,[0,0.961,0.52]],[0.963,[0,0.965,0.518]],[0.965,[0,0.965,0.518]],[0.967,[0,0.969,0.516]],[0.969,[0,0.969,0.516]],[0.971,[0,0.973,0.514]],[0.973,[0,0.973,0.514]],[0.975,[0,0.976,0.512]],[0.977,[0,0.976,0.512]],[0.978,[0,0.98,0.51]],[0.98,[0,0.98,0.51]],[0.982,[0,0.984,0.508]],[0.984,[0,0.984,0.508]],[0.986,[0,0.988,0.506]],[0.988,[0,0.988,0.506]],[0.99,[0,0.992,0.504]],[0.992,[0,0.992,0.504]],[0.994,[0,0.996,0.502]],[0.996,[0,0.996,0.502]],[0.998,[0,1,0.5]],[1,[0,1,0.5]]],[[0,[0,0,0.5]],[0.002,[0,0,0.5]],[0.004,[0,0,0.518]],[0.006,[0,0,0.518]],[0.008,[0,0,0.536]],[0.01,[0,0,0.536]],[0.012,[0,0,0.553]],[0.014,[0,0,0.553]],[0.016,[0,0,0.571]],[0.018,[0,0,0.571]],[0.02,[0,0,0.589]],[0.022,[0,0,0.589]],[0.023,[0,0,0.607]],[0.025,[0,0,0.607]],[0.027,[0,0,0.625]],[0.029,[0,0,0.625]],[0.031,[0,0,0.643]],[0.033,[0,0,0.643]],[0.035,[0,0,0.66]],[0.037,[0,0,0.66]],[0.039,[0,0,0.678]],[0.041,[0,0,0.678]],[0.043,[0,0,0.696]],[0.045,[0,0,0.696]],[0.047,[0,0,0.714]],[0.049,[0,0,0.714]],[0.051,[0,0,0.732]],[0.053,[0,0,0.732]],[0.055,[0,0,0.75]],[0.057,[0,0,0.75]],[0.059,[0,0,0.767]],[0.061,[0,0,0.767]],[0.063,[0,0,0.785]],[0.065,[0,0,0.785]],[0.067,[0,0,0.803]],[0.068,[0,0,0.803]],[0.07,[0,0,0.821]],[0.072,[0,0,0.821]],[0.074,[0,0,0.839]],[0.076,[0,0,0.839]],[0.078,[0,0,0.857]],[0.08,[0,0,0.857]],[0.082,[0,0,0.874]],[0.084,[0,0,0.874]],[0.086,[0,0,0.892]],[0.088,[0,0,0.892]],[0.09,[0,0,0.91]],[0.092,[0,0,0.91]],[0.094,[0,0,0.928]],[0.096,[0,0,0.928]],[0.098,[0,0,0.946]],[0.1,[0,0,0.946]],[0.102,[0,0,0.963]],[0.104,[0,0,0.963]],[0.106,[0,0,0.981]],[0.108,[0,0,0.981]],[0.11,[0,0,0.999]],[0.112,[0,0,0.999]],[0.114,[0,0,1]],[0.115,[0,0,1]],[0.117,[0,0,1]],[0.119,[0,0,1]],[0.121,[0,0,1]],[0.123,[0,0,1]],[0.125,[0,0.002,1]],[0.127,[0,0.002,1]],[0.129,[0,0.018,1]],[0.131,[0,0.018,1]],[0.133,[0,0.033,1]],[0.135,[0,0.033,1]],[0.137,[0,0.049,1]],[0.139,[0,0.049,1]],[0.141,[0,0.065,1]],[0.143,[0,0.065,1]],[0.145,[0,0.08,1]],[0.147,[0,0.08,1]],[0.149,[0,0.096,1]],[0.151,[0,0.096,1]],[0.153,[0,0.112,1]],[0.155,[0,0.112,1]],[0.157,[0,0.127,1]],[0.159,[0,0.127,1]],[0.16,[0,0.143,1]],[0.162,[0,0.143,1]],[0.164,[0,0.159,1]],[0.166,[0,0.159,1]],[0.168,[0,0.175,1]],[0.17,[0,0.175,1]],[0.172,[0,0.19,1]],[0.174,[0,0.19,1]],[0.176,[0,0.206,1]],[0.178,[0,0.206,1]],[0.18,[0,0.222,1]],[0.182,[0,0.222,1]],[0.184,[0,0.237,1]],[0.186,[0,0.237,1]],[0.188,[0,0.253,1]],[0.19,[0,0.253,1]],[0.192,[0,0.269,1]],[0.194,[0,0.269,1]],[0.196,[0,0.284,1]],[0.198,[0,0.284,1]],[0.2,[0,0.3,1]],[0.202,[0,0.3,1]],[0.204,[0,0.316,1]],[0.205,[0,0.316,1]],[0.207,[0,0.331,1]],[0.209,[0,0.331,1]],[0.211,[0,0.347,1]],[0.213,[0,0.347,1]],[0.215,[0,0.363,1]],[0.217,[0,0.363,1]],[0.219,[0,0.378,1]],[0.221,[0,0.378,1]],[0.223,[0,0.394,1]],[0.225,[0,0.394,1]],[0.227,[0,0.41,1]],[0.229,[0,0.41,1]],[0.231,[0,0.425,1]],[0.233,[0,0.425,1]],[0.235,[0,0.441,1]],[0.237,[0,0.441,1]],[0.239,[0,0.457,1]],[0.241,[0,0.457,1]],[0.243,[0,0.473,1]],[0.245,[0,0.473,1]],[0.247,[0,0.488,1]],[0.249,[0,0.488,1]],[0.25,[0,0.504,1]],[0.252,[0,0.504,1]],[0.254,[0,0.52,1]],[0.256,[0,0.52,1]],[0.258,[0,0.535,1]],[0.26,[0,0.535,1]],[0.262,[0,0.551,1]],[0.264,[0,0.551,1]],[0.266,[0,0.567,1]],[0.268,[0,0.567,1]],[0.27,[0,0.582,1]],[0.272,[0,0.582,1]],[0.274,[0,0.598,1]],[0.276,[0,0.598,1]],[0.278,[0,0.614,1]],[0.28,[0,0.614,1]],[0.282,[0,0.629,1]],[0.284,[0,0.629,1]],[0.286,[0,0.645,1]],[0.288,[0,0.645,1]],[0.29,[0,0.661,1]],[0.292,[0,0.661,1]],[0.294,[0,0.676,1]],[0.295,[0,0.676,1]],[0.297,[0,0.692,1]],[0.299,[0,0.692,1]],[0.301,[0,0.708,1]],[0.303,[0,0.708,1]],[0.305,[0,0.724,1]],[0.307,[0,0.724,1]],[0.309,[0,0.739,1]],[0.311,[0,0.739,1]],[0.313,[0,0.755,1]],[0.315,[0,0.755,1]],[0.317,[0,0.771,1]],[0.319,[0,0.771,1]],[0.321,[0,0.786,1]],[0.323,[0,0.786,1]],[0.325,[0,0.802,1]],[0.327,[0,0.802,1]],[0.329,[0,0.818,1]],[0.331,[0,0.818,1]],[0.333,[0,0.833,1]],[0.335,[0,0.833,1]],[0.337,[0,0.849,1]],[0.339,[0,0.849,1]],[0.341,[0,0.865,0.996]],[0.342,[0,0.865,0.996]],[0.344,[0,0.88,0.984]],[0.346,[0,0.88,0.984]],[0.348,[0,0.896,0.971]],[0.35,[0,0.896,0.971]],[0.352,[0.009,0.912,0.958]],[0.354,[0.009,0.912,0.958]],[0.356,[0.022,0.927,0.946]],[0.358,[0.022,0.927,0.946]],[0.36,[0.035,0.943,0.933]],[0.362,[0.035,0.943,0.933]],[0.364,[0.047,0.959,0.92]],[0.366,[0.047,0.959,0.92]],[0.368,[0.06,0.975,0.908]],[0.37,[0.06,0.975,0.908]],[0.372,[0.073,0.99,0.895]],[0.374,[0.073,0.99,0.895]],[0.376,[0.085,1,0.882]],[0.378,[0.085,1,0.882]],[0.38,[0.098,1,0.87]],[0.382,[0.098,1,0.87]],[0.384,[0.111,1,0.857]],[0.386,[0.111,1,0.857]],[0.387,[0.123,1,0.844]],[0.389,[0.123,1,0.844]],[0.391,[0.136,1,0.832]],[0.393,[0.136,1,0.832]],[0.395,[0.149,1,0.819]],[0.397,[0.149,1,0.819]],[0.399,[0.161,1,0.806]],[0.401,[0.161,1,0.806]],[0.403,[0.174,1,0.794]],[0.405,[0.174,1,0.794]],[0.407,[0.187,1,0.781]],[0.409,[0.187,1,0.781]],[0.411,[0.199,1,0.769]],[0.413,[0.199,1,0.769]],[0.415,[0.212,1,0.756]],[0.417,[0.212,1,0.756]],[0.419,[0.225,1,0.743]],[0.421,[0.225,1,0.743]],[0.423,[0.237,1,0.731]],[0.425,[0.237,1,0.731]],[0.427,[0.25,1,0.718]],[0.429,[0.25,1,0.718]],[0.431,[0.262,1,0.705]],[0.432,[0.262,1,0.705]],[0.434,[0.275,1,0.693]],[0.436,[0.275,1,0.693]],[0.438,[0.288,1,0.68]],[0.44,[0.288,1,0.68]],[0.442,[0.3,1,0.667]],[0.444,[0.3,1,0.667]],[0.446,[0.313,1,0.655]],[0.448,[0.313,1,0.655]],[0.45,[0.326,1,0.642]],[0.452,[0.326,1,0.642]],[0.454,[0.338,1,0.629]],[0.456,[0.338,1,0.629]],[0.458,[0.351,1,0.617]],[0.46,[0.351,1,0.617]],[0.462,[0.364,1,0.604]],[0.464,[0.364,1,0.604]],[0.466,[0.376,1,0.591]],[0.468,[0.376,1,0.591]],[0.47,[0.389,1,0.579]],[0.472,[0.389,1,0.579]],[0.474,[0.402,1,0.566]],[0.476,[0.402,1,0.566]],[0.477,[0.414,1,0.553]],[0.479,[0.414,1,0.553]],[0.481,[0.427,1,0.541]],[0.483,[0.427,1,0.541]],[0.485,[0.44,1,0.528]],[0.487,[0.44,1,0.528]],[0.489,[0.452,1,0.515]],[0.491,[0.452,1,0.515]],[0.493,[0.465,1,0.503]],[0.495,[0.465,1,0.503]],[0.497,[0.478,1,0.49]],[0.499,[0.478,1,0.49]],[0.501,[0.49,1,0.478]],[0.503,[0.49,1,0.478]],[0.505,[0.503,1,0.465]],[0.507,[0.503,1,0.465]],[0.509,[0.515,1,0.452]],[0.511,[0.515,1,0.452]],[0.513,[0.528,1,0.44]],[0.515,[0.528,1,0.44]],[0.517,[0.541,1,0.427]],[0.519,[0.541,1,0.427]],[0.521,[0.553,1,0.414]],[0.523,[0.553,1,0.414]],[0.524,[0.566,1,0.402]],[0.526,[0.566,1,0.402]],[0.528,[0.579,1,0.389]],[0.53,[0.579,1,0.389]],[0.532,[0.591,1,0.376]],[0.534,[0.591,1,0.376]],[0.536,[0.604,1,0.364]],[0.538,[0.604,1,0.364]],[0.54,[0.617,1,0.351]],[0.542,[0.617,1,0.351]],[0.544,[0.629,1,0.338]],[0.546,[0.629,1,0.338]],[0.548,[0.642,1,0.326]],[0.55,[0.642,1,0.326]],[0.552,[0.655,1,0.313]],[0.554,[0.655,1,0.313]],[0.556,[0.667,1,0.3]],[0.558,[0.667,1,0.3]],[0.56,[0.68,1,0.288]],[0.562,[0.68,1,0.288]],[0.564,[0.693,1,0.275]],[0.566,[0.693,1,0.275]],[0.568,[0.705,1,0.262]],[0.569,[0.705,1,0.262]],[0.571,[0.718,1,0.25]],[0.573,[0.718,1,0.25]],[0.575,[0.731,1,0.237]],[0.577,[0.731,1,0.237]],[0.579,[0.743,1,0.225]],[0.581,[0.743,1,0.225]],[0.583,[0.756,1,0.212]],[0.585,[0.756,1,0.212]],[0.587,[0.769,1,0.199]],[0.589,[0.769,1,0.199]],[0.591,[0.781,1,0.187]],[0.593,[0.781,1,0.187]],[0.595,[0.794,1,0.174]],[0.597,[0.794,1,0.174]],[0.599,[0.806,1,0.161]],[0.601,[0.806,1,0.161]],[0.603,[0.819,1,0.149]],[0.605,[0.819,1,0.149]],[0.607,[0.832,1,0.136]],[0.609,[0.832,1,0.136]],[0.611,[0.844,1,0.123]],[0.613,[0.844,1,0.123]],[0.614,[0.857,1,0.111]],[0.616,[0.857,1,0.111]],[0.618,[0.87,1,0.098]],[0.62,[0.87,1,0.098]],[0.622,[0.882,1,0.085]],[0.624,[0.882,1,0.085]],[0.626,[0.895,1,0.073]],[0.628,[0.895,1,0.073]],[0.63,[0.908,1,0.06]],[0.632,[0.908,1,0.06]],[0.634,[0.92,1,0.047]],[0.636,[0.92,1,0.047]],[0.638,[0.933,1,0.035]],[0.64,[0.933,1,0.035]],[0.642,[0.946,0.988,0.022]],[0.644,[0.946,0.988,0.022]],[0.646,[0.958,0.974,0.009]],[0.648,[0.958,0.974,0.009]],[0.65,[0.971,0.959,0]],[0.652,[0.971,0.959,0]],[0.654,[0.984,0.945,0]],[0.656,[0.984,0.945,0]],[0.658,[0.996,0.93,0]],[0.659,[0.996,0.93,0]],[0.661,[1,0.916,0]],[0.663,[1,0.916,0]],[0.665,[1,0.901,0]],[0.667,[1,0.901,0]],[0.669,[1,0.887,0]],[0.671,[1,0.887,0]],[0.673,[1,0.872,0]],[0.675,[1,0.872,0]],[0.677,[1,0.858,0]],[0.679,[1,0.858,0]],[0.681,[1,0.843,0]],[0.683,[1,0.843,0]],[0.685,[1,0.829,0]],[0.687,[1,0.829,0]],[0.689,[1,0.814,0]],[0.691,[1,0.814,0]],[0.693,[1,0.8,0]],[0.695,[1,0.8,0]],[0.697,[1,0.785,0]],[0.699,[1,0.785,0]],[0.701,[1,0.771,0]],[0.703,[1,0.771,0]],[0.705,[1,0.756,0]],[0.706,[1,0.756,0]],[0.708,[1,0.741,0]],[0.71,[1,0.741,0]],[0.712,[1,0.727,0]],[0.714,[1,0.727,0]],[0.716,[1,0.712,0]],[0.718,[1,0.712,0]],[0.72,[1,0.698,0]],[0.722,[1,0.698,0]],[0.724,[1,0.683,0]],[0.726,[1,0.683,0]],[0.728,[1,0.669,0]],[0.73,[1,0.669,0]],[0.732,[1,0.654,0]],[0.734,[1,0.654,0]],[0.736,[1,0.64,0]],[0.738,[1,0.64,0]],[0.74,[1,0.625,0]],[0.742,[1,0.625,0]],[0.744,[1,0.611,0]],[0.746,[1,0.611,0]],[0.748,[1,0.596,0]],[0.75,[1,0.596,0]],[0.751,[1,0.582,0]],[0.753,[1,0.582,0]],[0.755,[1,0.567,0]],[0.757,[1,0.567,0]],[0.759,[1,0.553,0]],[0.761,[1,0.553,0]],[0.763,[1,0.538,0]],[0.765,[1,0.538,0]],[0.767,[1,0.524,0]],[0.769,[1,0.524,0]],[0.771,[1,0.509,0]],[0.773,[1,0.509,0]],[0.775,[1,0.495,0]],[0.777,[1,0.495,0]],[0.779,[1,0.48,0]],[0.781,[1,0.48,0]],[0.783,[1,0.466,0]],[0.785,[1,0.466,0]],[0.787,[1,0.451,0]],[0.789,[1,0.451,0]],[0.791,[1,0.436,0]],[0.793,[1,0.436,0]],[0.795,[1,0.422,0]],[0.796,[1,0.422,0]],[0.798,[1,0.407,0]],[0.8,[1,0.407,0]],[0.802,[1,0.393,0]],[0.804,[1,0.393,0]],[0.806,[1,0.378,0]],[0.808,[1,0.378,0]],[0.81,[1,0.364,0]],[0.812,[1,0.364,0]],[0.814,[1,0.349,0]],[0.816,[1,0.349,0]],[0.818,[1,0.335,0]],[0.82,[1,0.335,0]],[0.822,[1,0.32,0]],[0.824,[1,0.32,0]],[0.826,[1,0.306,0]],[0.828,[1,0.306,0]],[0.83,[1,0.291,0]],[0.832,[1,0.291,0]],[0.834,[1,0.277,0]],[0.836,[1,0.277,0]],[0.838,[1,0.262,0]],[0.84,[1,0.262,0]],[0.841,[1,0.248,0]],[0.843,[1,0.248,0]],[0.845,[1,0.233,0]],[0.847,[1,0.233,0]],[0.849,[1,0.219,0]],[0.851,[1,0.219,0]],[0.853,[1,0.204,0]],[0.855,[1,0.204,0]],[0.857,[1,0.19,0]],[0.859,[1,0.19,0]],[0.861,[1,0.175,0]],[0.863,[1,0.175,0]],[0.865,[1,0.16,0]],[0.867,[1,0.16,0]],[0.869,[1,0.146,0]],[0.871,[1,0.146,0]],[0.873,[1,0.131,0]],[0.875,[1,0.131,0]],[0.877,[1,0.117,0]],[0.879,[1,0.117,0]],[0.881,[1,0.102,0]],[0.883,[1,0.102,0]],[0.885,[1,0.088,0]],[0.886,[1,0.088,0]],[0.888,[0.999,0.073,0]],[0.89,[0.999,0.073,0]],[0.892,[0.981,0.059,0]],[0.894,[0.981,0.059,0]],[0.896,[0.963,0.044,0]],[0.898,[0.963,0.044,0]],[0.9,[0.946,0.03,0]],[0.902,[0.946,0.03,0]],[0.904,[0.928,0.015,0]],[0.906,[0.928,0.015,0]],[0.908,[0.91,0.001,0]],[0.91,[0.91,0.001,0]],[0.912,[0.892,0,0]],[0.914,[0.892,0,0]],[0.916,[0.874,0,0]],[0.918,[0.874,0,0]],[0.92,[0.857,0,0]],[0.922,[0.857,0,0]],[0.924,[0.839,0,0]],[0.926,[0.839,0,0]],[0.928,[0.821,0,0]],[0.93,[0.821,0,0]],[0.932,[0.803,0,0]],[0.933,[0.803,0,0]],[0.935,[0.785,0,0]],[0.937,[0.785,0,0]],[0.939,[0.767,0,0]],[0.941,[0.767,0,0]],[0.943,[0.75,0,0]],[0.945,[0.75,0,0]],[0.947,[0.732,0,0]],[0.949,[0.732,0,0]],[0.951,[0.714,0,0]],[0.953,[0.714,0,0]],[0.955,[0.696,0,0]],[0.957,[0.696,0,0]],[0.959,[0.678,0,0]],[0.961,[0.678,0,0]],[0.963,[0.66,0,0]],[0.965,[0.66,0,0]],[0.967,[0.643,0,0]],[0.969,[0.643,0,0]],[0.971,[0.625,0,0]],[0.973,[0.625,0,0]],[0.975,[0.607,0,0]],[0.977,[0.607,0,0]],[0.978,[0.589,0,0]],[0.98,[0.589,0,0]],[0.982,[0.571,0,0]],[0.984,[0.571,0,0]],[0.986,[0.553,0,0]],[0.988,[0.553,0,0]],[0.99,[0.536,0,0]],[0.992,[0.536,0,0]],[0.994,[0.518,0,0]],[0.996,[0.518,0,0]],[0.998,[0.5,0,0]],[1,[0.5,0,0]]]],"maxStress":505.8612091201023,"minStress":-1466.6131768776693},"edges":[{"source":4,"area":1,"density":0.284,"id":"e0","stiffness":30000000,"target":5,"stress":0.0},{"source":5,"area":1,"density":0.284,"id":"e1","stiffness":30000000,"target":6,"stress":0.0},{"source":6,"area":1,"density":0.284,"id":"e2","stiffness":30000000,"target":7,"stress":0.0},{"source":7,"area":1,"density":0.284,"id":"e3","stiffness":30000000,"target":8,"stress":0.0},{"source":8,"area":1,"density":0.284,"id":"e4","stiffness":30000000,"target":9,"stress":0.0},{"source":9,"area":1,"density":0.284,"id":"e5","stiffness":30000000,"target":10,"stress":0.0},{"source":10,"area":1,"density":0.284,"id":"e6","stiffness":30000000,"target":11,"stress":0.0},{"source":11,"area":1,"density":0.284,"id":"e7","stiffness":30000000,"target":4,"stress":0.0},{"source":0,"area":1,"density":0.284,"id":"e8","stiffness":30000000,"target":5,"stress":0.0},{"source":1,"area":1,"density":0.284,"id":"e9","stiffness":30000000,"target":7,"stress":0.0},{"source":2,"area":1,"density":0.284,"id":"e10","stiffness":30000000,"target":9,"stress":0.0},{"source":3,"area":1,"density":0.284,"id":"e11","stiffness":30000000,"target":11,"stress":0.0},{"source":15,"area":1,"density":0.284,"id":"e12","stiffness":30000000,"target":16,"stress":-1001.3561240512223},{"source":16,"area":1,"density":0.284,"id":"e13","stiffness":30000000,"target":17,"stress":136.64322962456967},{"source":17,"area":1,"density":0.284,"id":"e14","stiffness":30000000,"target":18,"stress":133.79889178188935},{"source":18,"area":1,"density":0.284,"id":"e15","stiffness":30000000,"target":19,"stress":-939.595427137831},{"source":19,"area":1,"density":0.284,"id":"e16","stiffness":30000000,"target":20,"stress":-936.5155938159199},{"source":20,"area":1,"density":0.284,"id":"e17","stiffness":30000000,"target":21,"stress":200.92276533447648},{"source":21,"area":1,"density":0.284,"id":"e18","stiffness":30000000,"target":22,"stress":73.46611338336315},{"source":22,"area":1,"density":0.284,"id":"e19","stiffness":30000000,"target":15,"stress":-998.0870856308499},{"source":14,"area":1,"density":0.284,"id":"e20","stiffness":30000000,"target":16,"stress":-263.4249887588032},{"source":12,"area":1,"density":0.284,"id":"e21","stiffness":30000000,"target":18,"stress":-1304.5367460427258},{"source":13,"area":1,"density":0.284,"id":"e22","stiffness":30000000,"target":20,"stress":-53.55907480512245},{"source":0,"area":1,"density":0.284,"id":"e23","stiffness":30000000,"target":22,"stress":-1466.6131768776693},{"source":26,"area":1,"density":0.284,"id":"e24","stiffness":30000000,"target":27,"stress":-2.8090951037559413},{"source":27,"area":1,"density":0.284,"id":"e25","stiffness":30000000,"target":28,"stress":74.30094785327282},{"source":28,"area":1,"density":0.284,"id":"e26","stiffness":30000000,"target":29,"stress":51.593217618545765},{"source":29,"area":1,"density":0.284,"id":"e27","stiffness":30000000,"target":30,"stress":-8.401272930024463},{"source":30,"area":1,"density":0.284,"id":"e28","stiffness":30000000,"target":31,"stress":14.17161974887154},{"source":31,"area":1,"density":0.284,"id":"e29","stiffness":30000000,"target":32,"stress":23.749276381444673},{"source":32,"area":1,"density":0.284,"id":"e30","stiffness":30000000,"target":33,"stress":16.138532307484034},{"source":33,"area":1,"density":0.284,"id":"e31","stiffness":30000000,"target":26,"stress":-18.70454752360655},{"source":23,"area":1,"density":0.284,"id":"e32","stiffness":30000000,"target":31,"stress":14.448422900828675},{"source":24,"area":1,"density":0.284,"id":"e33","stiffness":30000000,"target":33,"stress":-33.30073219298949},{"source":12,"area":1,"density":0.284,"id":"e34","stiffness":30000000,"target":27,"stress":79.80682307863978},{"source":25,"area":1,"density":0.284,"id":"e35","stiffness":30000000,"target":29,"stress":-59.41996793156431},{"source":36,"area":1,"density":0.284,"id":"e36","stiffness":30000000,"target":37,"stress":-508.1291251295248},{"source":37,"area":1,"density":0.284,"id":"e37","stiffness":30000000,"target":38,"stress":-466.51942825070466},{"source":38,"area":1,"density":0.284,"id":"e38","stiffness":30000000,"target":39,"stress":499.35719791611507},{"source":39,"area":1,"density":0.284,"id":"e39","stiffness":30000000,"target":40,"stress":-537.4161132071984},{"source":40,"area":1,"density":0.284,"id":"e40","stiffness":30000000,"target":41,"stress":-443.8324680007325},{"source":41,"area":1,"density":0.284,"id":"e41","stiffness":30000000,"target":42,"stress":-373.30331388664126},{"source":42,"area":1,"density":0.284,"id":"e42","stiffness":30000000,"target":43,"stress":462.1136421635565},{"source":43,"area":1,"density":0.284,"id":"e43","stiffness":30000000,"target":36,"stress":-530.1201000992029},{"source":35,"area":1,"density":0.284,"id":"e44","stiffness":30000000,"target":41,"stress":211.11230217314022},{"source":2,"area":1,"density":0.284,"id":"e45","stiffness":30000000,"target":43,"stress":-829.5258184160555},{"source":34,"area":1,"density":0.284,"id":"e46","stiffness":30000000,"target":37,"stress":219.20104002231528},{"source":23,"area":1,"density":0.284,"id":"e47","stiffness":30000000,"target":39,"stress":-866.1071131586893},{"source":44,"area":1,"density":0.284,"id":"e48","stiffness":30000000,"target":45,"stress":208.85492074499956},{"source":45,"area":1,"density":0.284,"id":"e49","stiffness":30000000,"target":46,"stress":-721.6941174263237},{"source":46,"area":1,"density":0.284,"id":"e50","stiffness":30000000,"target":47,"stress":-708.228892681511},{"source":47,"area":1,"density":0.284,"id":"e51","stiffness":30000000,"target":48,"stress":-139.37770983452117},{"source":48,"area":1,"density":0.284,"id":"e52","stiffness":30000000,"target":49,"stress":203.80618758989058},{"source":49,"area":1,"density":0.284,"id":"e53","stiffness":30000000,"target":50,"stress":-584.128213890682},{"source":50,"area":1,"density":0.284,"id":"e54","stiffness":30000000,"target":51,"stress":-537.9021365038722},{"source":51,"area":1,"density":0.284,"id":"e55","stiffness":30000000,"target":44,"stress":-97.25555542395604},{"source":24,"area":1,"density":0.284,"id":"e56","stiffness":30000000,"target":49,"stress":-927.1925039664127},{"source":34,"area":1,"density":0.284,"id":"e57","stiffness":30000000,"target":51,"stress":116.32687635477463},{"source":1,"area":1,"density":0.284,"id":"e58","stiffness":30000000,"target":45,"stress":-1015.3232029940253},{"source":13,"area":1,"density":0.284,"id":"e59","stiffness":30000000,"target":47,"stress":196.95355805257122},{"source":52,"area":1,"density":0.284,"id":"e60","stiffness":30000000,"target":53,"stress":142.54346199370724},{"source":53,"area":1,"density":0.284,"id":"e61","stiffness":30000000,"target":54,"stress":-982.2533513768813},{"source":54,"area":1,"density":0.284,"id":"e62","stiffness":30000000,"target":55,"stress":-980.4176526205179},{"source":55,"area":1,"density":0.284,"id":"e63","stiffness":30000000,"target":56,"stress":175.5600533358408},{"source":56,"area":1,"density":0.284,"id":"e64","stiffness":30000000,"target":57,"stress":126.93111106282207},{"source":57,"area":1,"density":0.284,"id":"e65","stiffness":30000000,"target":58,"stress":-1064.1311110502313},{"source":58,"area":1,"density":0.284,"id":"e66","stiffness":30000000,"target":59,"stress":-1072.754497124534},{"source":59,"area":1,"density":0.284,"id":"e67","stiffness":30000000,"target":52,"stress":116.0666786082145},{"source":14,"area":1,"density":0.284,"id":"e68","stiffness":30000000,"target":57,"stress":-388.40885719692915},{"source":3,"area":1,"density":0.284,"id":"e69","stiffness":30000000,"target":55,"stress":-1170.033420784172},{"source":35,"area":1,"density":0.284,"id":"e70","stiffness":30000000,"target":53,"stress":-156.6510175778715},{"source":25,"area":1,"density":0.284,"id":"e71","stiffness":30000000,"target":59,"stress":-1466.4663185137872},{"source":63,"area":1,"density":0.284,"id":"e72","stiffness":30000000,"target":64,"stress":0.0},{"source":64,"area":1,"density":0.284,"id":"e73","stiffness":30000000,"target":65,"stress":0.0},{"source":65,"area":1,"density":0.284,"id":"e74","stiffness":30000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.284,"id":"e75","stiffness":30000000,"target":67,"stress":0.0},{"source":67,"area":1,"density":0.284,"id":"e76","stiffness":30000000,"target":68,"stress":0.0},{"source":68,"area":1,"density":0.284,"id":"e77","stiffness":30000000,"target":69,"stress":0.0},{"source":69,"area":1,"density":0.284,"id":"e78","stiffness":30000000,"target":70,"stress":0.0},{"source":70,"area":1,"density":0.284,"id":"e79","stiffness":30000000,"target":63,"stress":0.0},{"source":60,"area":1,"density":0.284,"id":"e80","stiffness":30000000,"target":64,"stress":0.0},{"source":3,"area":1,"density":0.284,"id":"e81","stiffness":30000000,"target":66,"stress":0.0},{"source":61,"area":1,"density":0.284,"id":"e82","stiffness":30000000,"target":68,"stress":0.0},{"source":62,"area":1,"density":0.284,"id":"e83","stiffness":30000000,"target":70,"stress":0.0},{"source":73,"area":1,"density":0.284,"id":"e84","stiffness":30000000,"target":74,"stress":-968.189348269445},{"source":74,"area":1,"density":0.284,"id":"e85","stiffness":30000000,"target":75,"stress":67.0479699602888},{"source":75,"area":1,"density":0.284,"id":"e86","stiffness":30000000,"target":76,"stress":48.362315265495454},{"source":76,"area":1,"density":0.284,"id":"e87","stiffness":30000000,"target":77,"stress":-988.1810218518298},{"source":77,"area":1,"density":0.284,"id":"e88","stiffness":30000000,"target":78,"stress":-981.2110938618922},{"source":78,"area":1,"density":0.284,"id":"e89","stiffness":30000000,"target":79,"stress":71.08687019367063},{"source":79,"area":1,"density":0.284,"id":"e90","stiffness":30000000,"target":80,"stress":40.52712977676433},{"source":80,"area":1,"density":0.284,"id":"e91","stiffness":30000000,"target":73,"stress":-964.207020397175},{"source":72,"area":1,"density":0.284,"id":"e92","stiffness":30000000,"target":74,"stress":-321.0321247381263},{"source":71,"area":1,"density":0.284,"id":"e93","stiffness":30000000,"target":76,"stress":-1397.1922106936138},{"source":14,"area":1,"density":0.284,"id":"e94","stiffness":30000000,"target":78,"stress":-302.02227627183225},{"source":60,"area":1,"density":0.284,"id":"e95","stiffness":30000000,"target":80,"stress":-1345.8411305403279},{"source":83,"area":1,"density":0.284,"id":"e96","stiffness":30000000,"target":84,"stress":-5.753346114812863},{"source":84,"area":1,"density":0.284,"id":"e97","stiffness":30000000,"target":85,"stress":54.919743223036065},{"source":85,"area":1,"density":0.284,"id":"e98","stiffness":30000000,"target":86,"stress":30.01790729811335},{"source":86,"area":1,"density":0.284,"id":"e99","stiffness":30000000,"target":87,"stress":36.99794450914154},{"source":87,"area":1,"density":0.284,"id":"e100","stiffness":30000000,"target":88,"stress":6.052838903568637},{"source":88,"area":1,"density":0.284,"id":"e101","stiffness":30000000,"target":89,"stress":14.218977927854844},{"source":89,"area":1,"density":0.284,"id":"e102","stiffness":30000000,"target":90,"stress":-0.34472128696755316},{"source":90,"area":1,"density":0.284,"id":"e103","stiffness":30000000,"target":83,"stress":72.36238992822524},{"source":81,"area":1,"density":0.284,"id":"e104","stiffness":30000000,"target":88,"stress":9.525369226366102},{"source":25,"area":1,"density":0.284,"id":"e105","stiffness":30000000,"target":90,"stress":66.99626344427492},{"source":71,"area":1,"density":0.284,"id":"e106","stiffness":30000000,"target":84,"stress":56.847289810929645},{"source":82,"area":1,"density":0.284,"id":"e107","stiffness":30000000,"target":86,"stress":4.718604624959024},{"source":92,"area":1,"density":0.284,"id":"e108","stiffness":30000000,"target":93,"stress":-526.2253543877113},{"source":93,"area":1,"density":0.284,"id":"e109","stiffness":30000000,"target":94,"stress":-489.0637661100286},{"source":94,"area":1,"density":0.284,"id":"e110","stiffness":30000000,"target":95,"stress":471.64172663065153},{"source":95,"area":1,"density":0.284,"id":"e111","stiffness":30000000,"target":96,"stress":-494.7151143284027},{"source":96,"area":1,"density":0.284,"id":"e112","stiffness":30000000,"target":97,"stress":-430.42379055402967},{"source":97,"area":1,"density":0.284,"id":"e113","stiffness":30000000,"target":98,"stress":-408.81296125943106},{"source":98,"area":1,"density":0.284,"id":"e114","stiffness":30000000,"target":99,"stress":472.74997591851616},{"source":99,"area":1,"density":0.284,"id":"e115","stiffness":30000000,"target":92,"stress":-549.8587267908957},{"source":91,"area":1,"density":0.284,"id":"e116","stiffness":30000000,"target":97,"stress":171.67833631084517},{"source":61,"area":1,"density":0.284,"id":"e117","stiffness":30000000,"target":99,"stress":-853.3748976639919},{"source":35,"area":1,"density":0.284,"id":"e118","stiffness":30000000,"target":93,"stress":216.35622988665136},{"source":81,"area":1,"density":0.284,"id":"e119","stiffness":30000000,"target":95,"stress":-796.8759896083279},{"source":25,"area":1,"density":0.284,"id":"e120","stiffness":30000000,"target":53,"stress":-1184.8811751719115},{"source":35,"area":1,"density":0.284,"id":"e121","stiffness":30000000,"target":55,"stress":-87.55274027001501},{"source":3,"area":1,"density":0.284,"id":"e122","stiffness":30000000,"target":57,"stress":-1376.4926502619455},{"source":14,"area":1,"density":0.284,"id":"e123","stiffness":30000000,"target":59,"stress":-429.25226567523083},{"source":100,"area":1,"density":0.284,"id":"e124","stiffness":30000000,"target":101,"stress":151.55501989542245},{"source":101,"area":1,"density":0.284,"id":"e125","stiffness":30000000,"target":102,"stress":-1014.6657504815017},{"source":102,"area":1,"density":0.284,"id":"e126","stiffness":30000000,"target":103,"stress":-990.7219455278555},{"source":103,"area":1,"density":0.284,"id":"e127","stiffness":30000000,"target":104,"stress":164.93838451167292},{"source":104,"area":1,"density":0.284,"id":"e128","stiffness":30000000,"target":105,"stress":92.00169313052103},{"source":105,"area":1,"density":0.284,"id":"e129","stiffness":30000000,"target":106,"stress":-1053.0528256716175},{"source":106,"area":1,"density":0.284,"id":"e130","stiffness":30000000,"target":107,"stress":-1038.1642211750893},{"source":107,"area":1,"density":0.284,"id":"e131","stiffness":30000000,"target":100,"stress":124.06597963005555},{"source":72,"area":1,"density":0.284,"id":"e132","stiffness":30000000,"target":105,"stress":-476.2065295008203},{"source":62,"area":1,"density":0.284,"id":"e133","stiffness":30000000,"target":103,"stress":-1168.2542133181848},{"source":91,"area":1,"density":0.284,"id":"e134","stiffness":30000000,"target":101,"stress":-173.37056602539678},{"source":82,"area":1,"density":0.284,"id":"e135","stiffness":30000000,"target":107,"stress":-1346.487276128814},{"source":111,"area":1,"density":0.284,"id":"e136","stiffness":30000000,"target":112,"stress":0.0},{"source":112,"area":1,"density":0.284,"id":"e137","stiffness":30000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.284,"id":"e138","stiffness":30000000,"target":114,"stress":0.0},{"source":114,"area":1,"density":0.284,"id":"e139","stiffness":30000000,"target":115,"stress":0.0},{"source":115,"area":1,"density":0.284,"id":"e140","stiffness":30000000,"target":116,"stress":0.0},{"source":116,"area":1,"density":0.284,"id":"e141","stiffness":30000000,"target":117,"stress":0.0},{"source":117,"area":1,"density":0.284,"id":"e142","stiffness":30000000,"target":118,"stress":0.0},{"source":118,"area":1,"density":0.284,"id":"e143","stiffness":30000000,"target":111,"stress":0.0},{"source":108,"area":1,"density":0.284,"id":"e144","stiffness":30000000,"target":112,"stress":0.0},{"source":62,"area":1,"density":0.284,"id":"e145","stiffness":30000000,"target":114,"stress":0.0},{"source":109,"area":1,"density":0.284,"id":"e146","stiffness":30000000,"target":116,"stress":0.0},{"source":110,"area":1,"density":0.284,"id":"e147","stiffness":30000000,"target":118,"stress":0.0},{"source":121,"area":1,"density":0.284,"id":"e148","stiffness":30000000,"target":122,"stress":-916.7112173052103},{"source":122,"area":1,"density":0.284,"id":"e149","stiffness":30000000,"target":123,"stress":151.84678175626613},{"source":123,"area":1,"density":0.284,"id":"e150","stiffness":30000000,"target":124,"stress":110.53497286587992},{"source":124,"area":1,"density":0.284,"id":"e151","stiffness":30000000,"target":125,"stress":-1007.8200333826959},{"source":125,"area":1,"density":0.284,"id":"e152","stiffness":30000000,"target":126,"stress":-1001.4900066170883},{"source":126,"area":1,"density":0.284,"id":"e153","stiffness":30000000,"target":127,"stress":101.29800913091046},{"source":127,"area":1,"density":0.284,"id":"e154","stiffness":30000000,"target":128,"stress":172.3485237415243},{"source":128,"area":1,"density":0.284,"id":"e155","stiffness":30000000,"target":121,"stress":-910.9584108562221},{"source":120,"area":1,"density":0.284,"id":"e156","stiffness":30000000,"target":122,"stress":-204.44547638346123},{"source":119,"area":1,"density":0.284,"id":"e157","stiffness":30000000,"target":124,"stress":-1425.1979013872467},{"source":72,"area":1,"density":0.284,"id":"e158","stiffness":30000000,"target":126,"stress":-357.5096299670255},{"source":108,"area":1,"density":0.284,"id":"e159","stiffness":30000000,"target":128,"stress":-1156.9790351963854},{"source":131,"area":1,"density":0.284,"id":"e160","stiffness":30000000,"target":132,"stress":19.168591552820107},{"source":132,"area":1,"density":0.284,"id":"e161","stiffness":30000000,"target":133,"stress":-10.036590253145182},{"source":133,"area":1,"density":0.284,"id":"e162","stiffness":30000000,"target":134,"stress":-18.593618020218067},{"source":134,"area":1,"density":0.284,"id":"e163","stiffness":30000000,"target":135,"stress":33.9048430112748},{"source":135,"area":1,"density":0.284,"id":"e164","stiffness":30000000,"target":136,"stress":8.376049154128077},{"source":136,"area":1,"density":0.284,"id":"e165","stiffness":30000000,"target":137,"stress":-27.082687567512494},{"source":137,"area":1,"density":0.284,"id":"e166","stiffness":30000000,"target":138,"stress":-30.621366222091105},{"source":138,"area":1,"density":0.284,"id":"e167","stiffness":30000000,"target":131,"stress":104.80295012287559},{"source":129,"area":1,"density":0.284,"id":"e168","stiffness":30000000,"target":136,"stress":-34.005505893171694},{"source":82,"area":1,"density":0.284,"id":"e169","stiffness":30000000,"target":138,"stress":127.69192236967402},{"source":119,"area":1,"density":0.284,"id":"e170","stiffness":30000000,"target":132,"stress":-30.668237879125673},{"source":130,"area":1,"density":0.284,"id":"e171","stiffness":30000000,"target":134,"stress":51.83743732780936},{"source":140,"area":1,"density":0.284,"id":"e172","stiffness":30000000,"target":141,"stress":-565.8846133704319},{"source":141,"area":1,"density":0.284,"id":"e173","stiffness":30000000,"target":142,"stress":-444.4395999194465},{"source":142,"area":1,"density":0.284,"id":"e174","stiffness":30000000,"target":143,"stress":482.25128747765524},{"source":143,"area":1,"density":0.284,"id":"e175","stiffness":30000000,"target":144,"stress":-541.23998464196},{"source":144,"area":1,"density":0.284,"id":"e176","stiffness":30000000,"target":145,"stress":-467.41105726752966},{"source":145,"area":1,"density":0.284,"id":"e177","stiffness":30000000,"target":146,"stress":-385.0731651761627},{"source":146,"area":1,"density":0.284,"id":"e178","stiffness":30000000,"target":147,"stress":495.31670163037006},{"source":147,"area":1,"density":0.284,"id":"e179","stiffness":30000000,"target":140,"stress":-587.9940740700818},{"source":139,"area":1,"density":0.284,"id":"e180","stiffness":30000000,"target":145,"stress":234.6869204731796},{"source":109,"area":1,"density":0.284,"id":"e181","stiffness":30000000,"target":147,"stress":-909.6977857762},{"source":91,"area":1,"density":0.284,"id":"e182","stiffness":30000000,"target":141,"stress":301.01725814651587},{"source":129,"area":1,"density":0.284,"id":"e183","stiffness":30000000,"target":143,"stress":-856.1722495034767},{"source":82,"area":1,"density":0.284,"id":"e184","stiffness":30000000,"target":101,"stress":-1266.103524795937},{"source":91,"area":1,"density":0.284,"id":"e185","stiffness":30000000,"target":103,"stress":-86.06211810688072},{"source":62,"area":1,"density":0.284,"id":"e186","stiffness":30000000,"target":105,"stress":-1425.688697184993},{"source":72,"area":1,"density":0.284,"id":"e187","stiffness":30000000,"target":107,"stress":-362.8328525062381},{"source":148,"area":1,"density":0.284,"id":"e188","stiffness":30000000,"target":149,"stress":-194.7129962090998},{"source":149,"area":1,"density":0.284,"id":"e189","stiffness":30000000,"target":150,"stress":-648.432547323519},{"source":150,"area":1,"density":0.284,"id":"e190","stiffness":30000000,"target":151,"stress":-637.3787301513978},{"source":151,"area":1,"density":0.284,"id":"e191","stiffness":30000000,"target":152,"stress":143.5803541608458},{"source":152,"area":1,"density":0.284,"id":"e192","stiffness":30000000,"target":153,"stress":-193.6297484499997},{"source":153,"area":1,"density":0.284,"id":"e193","stiffness":30000000,"target":154,"stress":-575.2981668676344},{"source":154,"area":1,"density":0.284,"id":"e194","stiffness":30000000,"target":155,"stress":-607.5255361585462},{"source":155,"area":1,"density":0.284,"id":"e195","stiffness":30000000,"target":148,"stress":168.02970442389383},{"source":120,"area":1,"density":0.284,"id":"e196","stiffness":30000000,"target":153,"stress":54.71697686614733},{"source":110,"area":1,"density":0.284,"id":"e197","stiffness":30000000,"target":151,"stress":-917.3283928108781},{"source":139,"area":1,"density":0.284,"id":"e198","stiffness":30000000,"target":149,"stress":124.54643028783455},{"source":130,"area":1,"density":0.284,"id":"e199","stiffness":30000000,"target":155,"stress":-937.6394110533025},{"source":156,"area":1,"density":0.284,"id":"e200","stiffness":30000000,"target":157,"stress":-9.629544260106892},{"source":157,"area":1,"density":0.284,"id":"e201","stiffness":30000000,"target":158,"stress":10.662476973391875},{"source":158,"area":1,"density":0.284,"id":"e202","stiffness":30000000,"target":159,"stress":9.384546523008424},{"source":159,"area":1,"density":0.284,"id":"e203","stiffness":30000000,"target":160,"stress":27.216347021476885},{"source":160,"area":1,"density":0.284,"id":"e204","stiffness":30000000,"target":161,"stress":-18.975307141816813},{"source":161,"area":1,"density":0.284,"id":"e205","stiffness":30000000,"target":162,"stress":-31.861828344788925},{"source":162,"area":1,"density":0.284,"id":"e206","stiffness":30000000,"target":163,"stress":-23.841408859298667},{"source":163,"area":1,"density":0.284,"id":"e207","stiffness":30000000,"target":156,"stress":77.00739491860776},{"source":12,"area":1,"density":0.284,"id":"e208","stiffness":30000000,"target":157,"stress":9.958311522070876},{"source":24,"area":1,"density":0.284,"id":"e209","stiffness":30000000,"target":159,"stress":11.098012158522698},{"source":23,"area":1,"density":0.284,"id":"e210","stiffness":30000000,"target":161,"stress":-20.707966582951396},{"source":25,"area":1,"density":0.284,"id":"e211","stiffness":30000000,"target":163,"stress":90.98659105370342},{"source":167,"area":1,"density":0.284,"id":"e212","stiffness":30000000,"target":168,"stress":-698.0284577998084},{"source":168,"area":1,"density":0.284,"id":"e213","stiffness":30000000,"target":169,"stress":112.02077578897918},{"source":169,"area":1,"density":0.284,"id":"e214","stiffness":30000000,"target":170,"stress":126.92623224075732},{"source":170,"area":1,"density":0.284,"id":"e215","stiffness":30000000,"target":171,"stress":-660.4698113679235},{"source":171,"area":1,"density":0.284,"id":"e216","stiffness":30000000,"target":172,"stress":-666.2641707011161},{"source":172,"area":1,"density":0.284,"id":"e217","stiffness":30000000,"target":173,"stress":120.38450840523696},{"source":173,"area":1,"density":0.284,"id":"e218","stiffness":30000000,"target":174,"stress":72.35632703341975},{"source":174,"area":1,"density":0.284,"id":"e219","stiffness":30000000,"target":167,"stress":-703.7216569843574},{"source":166,"area":1,"density":0.284,"id":"e220","stiffness":30000000,"target":168,"stress":-156.37906755519228},{"source":164,"area":1,"density":0.284,"id":"e221","stiffness":30000000,"target":170,"stress":-846.7755743987906},{"source":165,"area":1,"density":0.284,"id":"e222","stiffness":30000000,"target":172,"stress":-151.9474897609486},{"source":12,"area":1,"density":0.284,"id":"e223","stiffness":30000000,"target":174,"stress":-1021.1015410984618},{"source":178,"area":1,"density":0.284,"id":"e224","stiffness":30000000,"target":179,"stress":27.418409903227513},{"source":179,"area":1,"density":0.284,"id":"e225","stiffness":30000000,"target":180,"stress":50.073402690565516},{"source":180,"area":1,"density":0.284,"id":"e226","stiffness":30000000,"target":181,"stress":20.981755223620638},{"source":181,"area":1,"density":0.284,"id":"e227","stiffness":30000000,"target":182,"stress":44.41117066505675},{"source":182,"area":1,"density":0.284,"id":"e228","stiffness":30000000,"target":183,"stress":62.62029793824197},{"source":183,"area":1,"density":0.284,"id":"e229","stiffness":30000000,"target":184,"stress":-12.139035390236772},{"source":184,"area":1,"density":0.284,"id":"e230","stiffness":30000000,"target":185,"stress":-37.35750027559393},{"source":185,"area":1,"density":0.284,"id":"e231","stiffness":30000000,"target":178,"stress":-8.052996615597662},{"source":175,"area":1,"density":0.284,"id":"e232","stiffness":30000000,"target":183,"stress":-59.71939222326834},{"source":176,"area":1,"density":0.284,"id":"e233","stiffness":30000000,"target":185,"stress":42.51261865073774},{"source":164,"area":1,"density":0.284,"id":"e234","stiffness":30000000,"target":179,"stress":33.32307218613653},{"source":177,"area":1,"density":0.284,"id":"e235","stiffness":30000000,"target":181,"stress":27.519569289259774},{"source":188,"area":1,"density":0.284,"id":"e236","stiffness":30000000,"target":189,"stress":-242.21586399491474},{"source":189,"area":1,"density":0.284,"id":"e237","stiffness":30000000,"target":190,"stress":-225.11461886221397},{"source":190,"area":1,"density":0.284,"id":"e238","stiffness":30000000,"target":191,"stress":309.80168755863184},{"source":191,"area":1,"density":0.284,"id":"e239","stiffness":30000000,"target":192,"stress":-455.3588501151025},{"source":192,"area":1,"density":0.284,"id":"e240","stiffness":30000000,"target":193,"stress":-380.90299550522826},{"source":193,"area":1,"density":0.284,"id":"e241","stiffness":30000000,"target":194,"stress":-190.75850325480263},{"source":194,"area":1,"density":0.284,"id":"e242","stiffness":30000000,"target":195,"stress":304.46197442347363},{"source":195,"area":1,"density":0.284,"id":"e243","stiffness":30000000,"target":188,"stress":-298.9301059951433},{"source":187,"area":1,"density":0.284,"id":"e244","stiffness":30000000,"target":193,"stress":283.8444199454538},{"source":23,"area":1,"density":0.284,"id":"e245","stiffness":30000000,"target":195,"stress":-509.6323546053261},{"source":186,"area":1,"density":0.284,"id":"e246","stiffness":30000000,"target":189,"stress":102.43885324950462},{"source":175,"area":1,"density":0.284,"id":"e247","stiffness":30000000,"target":191,"stress":-665.0897228007632},{"source":196,"area":1,"density":0.284,"id":"e248","stiffness":30000000,"target":197,"stress":126.8364150578122},{"source":197,"area":1,"density":0.284,"id":"e249","stiffness":30000000,"target":198,"stress":-348.07961631550904},{"source":198,"area":1,"density":0.284,"id":"e250","stiffness":30000000,"target":199,"stress":-310.23508159079466},{"source":199,"area":1,"density":0.284,"id":"e251","stiffness":30000000,"target":200,"stress":-116.37757209207483},{"source":200,"area":1,"density":0.284,"id":"e252","stiffness":30000000,"target":201,"stress":117.89328998779219},{"source":201,"area":1,"density":0.284,"id":"e253","stiffness":30000000,"target":202,"stress":-371.14663249692364},{"source":202,"area":1,"density":0.284,"id":"e254","stiffness":30000000,"target":203,"stress":-360.9729484446992},{"source":203,"area":1,"density":0.284,"id":"e255","stiffness":30000000,"target":196,"stress":-102.27591984596584},{"source":176,"area":1,"density":0.284,"id":"e256","stiffness":30000000,"target":201,"stress":-589.2122090803439},{"source":186,"area":1,"density":0.284,"id":"e257","stiffness":30000000,"target":203,"stress":54.36248731293736},{"source":24,"area":1,"density":0.284,"id":"e258","stiffness":30000000,"target":197,"stress":-577.8616313072196},{"source":165,"area":1,"density":0.284,"id":"e259","stiffness":30000000,"target":199,"stress":-12.082136154878667},{"source":204,"area":1,"density":0.284,"id":"e260","stiffness":30000000,"target":205,"stress":148.88883036597232},{"source":205,"area":1,"density":0.284,"id":"e261","stiffness":30000000,"target":206,"stress":-688.2003756072577},{"source":206,"area":1,"density":0.284,"id":"e262","stiffness":30000000,"target":207,"stress":-712.9947595714843},{"source":207,"area":1,"density":0.284,"id":"e263","stiffness":30000000,"target":208,"stress":104.46449080106687},{"source":208,"area":1,"density":0.284,"id":"e264","stiffness":30000000,"target":209,"stress":97.50198625188163},{"source":209,"area":1,"density":0.284,"id":"e265","stiffness":30000000,"target":210,"stress":-710.514496535517},{"source":210,"area":1,"density":0.284,"id":"e266","stiffness":30000000,"target":211,"stress":-736.0908943855887},{"source":211,"area":1,"density":0.284,"id":"e267","stiffness":30000000,"target":204,"stress":107.19621026307593},{"source":166,"area":1,"density":0.284,"id":"e268","stiffness":30000000,"target":209,"stress":-142.6633813540037},{"source":25,"area":1,"density":0.284,"id":"e269","stiffness":30000000,"target":207,"stress":-1001.6077100008736},{"source":187,"area":1,"density":0.284,"id":"e270","stiffness":30000000,"target":205,"stress":57.4706385927637},{"source":177,"area":1,"density":0.284,"id":"e271","stiffness":30000000,"target":211,"stress":-1054.9400963148134},{"source":83,"area":1,"density":0.284,"id":"e272","stiffness":30000000,"target":212,"stress":-45.15025564836974},{"source":212,"area":1,"density":0.284,"id":"e273","stiffness":30000000,"target":213,"stress":48.0260752303617},{"source":213,"area":1,"density":0.284,"id":"e274","stiffness":30000000,"target":214,"stress":37.445863960027154},{"source":214,"area":1,"density":0.284,"id":"e275","stiffness":30000000,"target":87,"stress":41.07296584578923},{"source":87,"area":1,"density":0.284,"id":"e276","stiffness":30000000,"target":215,"stress":-27.411681046774433},{"source":215,"area":1,"density":0.284,"id":"e277","stiffness":30000000,"target":216,"stress":3.5368814587082746},{"source":216,"area":1,"density":0.284,"id":"e278","stiffness":30000000,"target":217,"stress":3.8304865198540097},{"source":217,"area":1,"density":0.284,"id":"e279","stiffness":30000000,"target":83,"stress":63.885087925362846},{"source":71,"area":1,"density":0.284,"id":"e280","stiffness":30000000,"target":212,"stress":77.54462000380681},{"source":25,"area":1,"density":0.284,"id":"e281","stiffness":30000000,"target":214,"stress":-5.582028049458261},{"source":81,"area":1,"density":0.284,"id":"e282","stiffness":30000000,"target":215,"stress":20.86166675529119},{"source":82,"area":1,"density":0.284,"id":"e283","stiffness":30000000,"target":217,"stress":48.84284731188301},{"source":220,"area":1,"density":0.284,"id":"e284","stiffness":30000000,"target":221,"stress":-662.846849215129},{"source":221,"area":1,"density":0.284,"id":"e285","stiffness":30000000,"target":222,"stress":78.88846728996592},{"source":222,"area":1,"density":0.284,"id":"e286","stiffness":30000000,"target":223,"stress":57.624556739225085},{"source":223,"area":1,"density":0.284,"id":"e287","stiffness":30000000,"target":224,"stress":-665.1288050029974},{"source":224,"area":1,"density":0.284,"id":"e288","stiffness":30000000,"target":225,"stress":-669.4284803227823},{"source":225,"area":1,"density":0.284,"id":"e289","stiffness":30000000,"target":226,"stress":72.45846907205652},{"source":226,"area":1,"density":0.284,"id":"e290","stiffness":30000000,"target":227,"stress":53.935812184168235},{"source":227,"area":1,"density":0.284,"id":"e291","stiffness":30000000,"target":220,"stress":-668.1220986333789},{"source":219,"area":1,"density":0.284,"id":"e292","stiffness":30000000,"target":221,"stress":-125.32795623936703},{"source":218,"area":1,"density":0.284,"id":"e293","stiffness":30000000,"target":223,"stress":-946.1344481421049},{"source":166,"area":1,"density":0.284,"id":"e294","stiffness":30000000,"target":225,"stress":-168.3189169838992},{"source":71,"area":1,"density":0.284,"id":"e295","stiffness":30000000,"target":227,"stress":-976.5845362936482},{"source":230,"area":1,"density":0.284,"id":"e296","stiffness":30000000,"target":231,"stress":22.29147756429875},{"source":231,"area":1,"density":0.284,"id":"e297","stiffness":30000000,"target":232,"stress":36.544674091586735},{"source":232,"area":1,"density":0.284,"id":"e298","stiffness":30000000,"target":233,"stress":3.9739225856466707},{"source":233,"area":1,"density":0.284,"id":"e299","stiffness":30000000,"target":234,"stress":92.1576854368452},{"source":234,"area":1,"density":0.284,"id":"e300","stiffness":30000000,"target":235,"stress":64.8430913001518},{"source":235,"area":1,"density":0.284,"id":"e301","stiffness":30000000,"target":236,"stress":-28.340847311501836},{"source":236,"area":1,"density":0.284,"id":"e302","stiffness":30000000,"target":237,"stress":-52.28732698644332},{"source":237,"area":1,"density":0.284,"id":"e303","stiffness":30000000,"target":230,"stress":85.8064801621361},{"source":228,"area":1,"density":0.284,"id":"e304","stiffness":30000000,"target":235,"stress":-76.51801048531684},{"source":177,"area":1,"density":0.284,"id":"e305","stiffness":30000000,"target":237,"stress":141.69951014126175},{"source":218,"area":1,"density":0.284,"id":"e306","stiffness":30000000,"target":231,"stress":17.329968750083193},{"source":229,"area":1,"density":0.284,"id":"e307","stiffness":30000000,"target":233,"stress":86.47374989284936},{"source":239,"area":1,"density":0.284,"id":"e308","stiffness":30000000,"target":240,"stress":-206.17671736081624},{"source":240,"area":1,"density":0.284,"id":"e309","stiffness":30000000,"target":241,"stress":-295.96530674646147},{"source":241,"area":1,"density":0.284,"id":"e310","stiffness":30000000,"target":242,"stress":332.73912824116593},{"source":242,"area":1,"density":0.284,"id":"e311","stiffness":30000000,"target":243,"stress":-363.1088468923176},{"source":243,"area":1,"density":0.284,"id":"e312","stiffness":30000000,"target":244,"stress":-321.7074487997179},{"source":244,"area":1,"density":0.284,"id":"e313","stiffness":30000000,"target":245,"stress":-272.7912246456589},{"source":245,"area":1,"density":0.284,"id":"e314","stiffness":30000000,"target":246,"stress":317.3245646935194},{"source":246,"area":1,"density":0.284,"id":"e315","stiffness":30000000,"target":239,"stress":-229.48873383684872},{"source":238,"area":1,"density":0.284,"id":"e316","stiffness":30000000,"target":244,"stress":153.67772161714853},{"source":81,"area":1,"density":0.284,"id":"e317","stiffness":30000000,"target":246,"stress":-438.26294342864765},{"source":187,"area":1,"density":0.284,"id":"e318","stiffness":30000000,"target":240,"stress":9.159005516228213},{"source":228,"area":1,"density":0.284,"id":"e319","stiffness":30000000,"target":242,"stress":-580.3159211815922},{"source":177,"area":1,"density":0.284,"id":"e320","stiffness":30000000,"target":205,"stress":-702.7942765074646},{"source":187,"area":1,"density":0.284,"id":"e321","stiffness":30000000,"target":207,"stress":-238.10359594058025},{"source":25,"area":1,"density":0.284,"id":"e322","stiffness":30000000,"target":209,"stress":-821.31867291617},{"source":166,"area":1,"density":0.284,"id":"e323","stiffness":30000000,"target":211,"stress":-323.6514082456227},{"source":247,"area":1,"density":0.284,"id":"e324","stiffness":30000000,"target":248,"stress":155.29750805205262},{"source":248,"area":1,"density":0.284,"id":"e325","stiffness":30000000,"target":249,"stress":-684.8580750486461},{"source":249,"area":1,"density":0.284,"id":"e326","stiffness":30000000,"target":250,"stress":-698.1442051198153},{"source":250,"area":1,"density":0.284,"id":"e327","stiffness":30000000,"target":251,"stress":99.84939710047996},{"source":251,"area":1,"density":0.284,"id":"e328","stiffness":30000000,"target":252,"stress":97.63787922553426},{"source":252,"area":1,"density":0.284,"id":"e329","stiffness":30000000,"target":253,"stress":-723.2017888957938},{"source":253,"area":1,"density":0.284,"id":"e330","stiffness":30000000,"target":254,"stress":-730.8626987461871},{"source":254,"area":1,"density":0.284,"id":"e331","stiffness":30000000,"target":247,"stress":118.35400753690465},{"source":219,"area":1,"density":0.284,"id":"e332","stiffness":30000000,"target":252,"stress":-212.5758616380249},{"source":82,"area":1,"density":0.284,"id":"e333","stiffness":30000000,"target":250,"stress":-910.6074094175261},{"source":238,"area":1,"density":0.284,"id":"e334","stiffness":30000000,"target":248,"stress":10.128828295996655},{"source":229,"area":1,"density":0.284,"id":"e335","stiffness":30000000,"target":254,"stress":-955.0576649152822},{"source":131,"area":1,"density":0.284,"id":"e336","stiffness":30000000,"target":255,"stress":-44.9134559089827},{"source":255,"area":1,"density":0.284,"id":"e337","stiffness":30000000,"target":256,"stress":67.01310618603654},{"source":256,"area":1,"density":0.284,"id":"e338","stiffness":30000000,"target":257,"stress":56.78666195412273},{"source":257,"area":1,"density":0.284,"id":"e339","stiffness":30000000,"target":135,"stress":-8.964421769523154},{"source":135,"area":1,"density":0.284,"id":"e340","stiffness":30000000,"target":258,"stress":-12.104895896113959},{"source":258,"area":1,"density":0.284,"id":"e341","stiffness":30000000,"target":259,"stress":22.276677784624106},{"source":259,"area":1,"density":0.284,"id":"e342","stiffness":30000000,"target":260,"stress":21.546956297789166},{"source":260,"area":1,"density":0.284,"id":"e343","stiffness":30000000,"target":131,"stress":-32.55571984530499},{"source":119,"area":1,"density":0.284,"id":"e344","stiffness":30000000,"target":255,"stress":103.59829889107205},{"source":82,"area":1,"density":0.284,"id":"e345","stiffness":30000000,"target":257,"stress":-69.17760264217233},{"source":129,"area":1,"density":0.284,"id":"e346","stiffness":30000000,"target":258,"stress":31.052678397193965},{"source":130,"area":1,"density":0.284,"id":"e347","stiffness":30000000,"target":260,"stress":-54.13344202790103},{"source":263,"area":1,"density":0.284,"id":"e348","stiffness":30000000,"target":264,"stress":-635.0154673603402},{"source":264,"area":1,"density":0.284,"id":"e349","stiffness":30000000,"target":265,"stress":131.36876987184857},{"source":265,"area":1,"density":0.284,"id":"e350","stiffness":30000000,"target":266,"stress":89.24681910070245},{"source":266,"area":1,"density":0.284,"id":"e351","stiffness":30000000,"target":267,"stress":-670.0033186688037},{"source":267,"area":1,"density":0.284,"id":"e352","stiffness":30000000,"target":268,"stress":-677.1102757423414},{"source":268,"area":1,"density":0.284,"id":"e353","stiffness":30000000,"target":269,"stress":90.12814288548013},{"source":269,"area":1,"density":0.284,"id":"e354","stiffness":30000000,"target":270,"stress":104.84244533959883},{"source":270,"area":1,"density":0.284,"id":"e355","stiffness":30000000,"target":263,"stress":-630.391986392145},{"source":262,"area":1,"density":0.284,"id":"e356","stiffness":30000000,"target":264,"stress":-11.811980523921076},{"source":261,"area":1,"density":0.284,"id":"e357","stiffness":30000000,"target":266,"stress":-985.9130103750655},{"source":219,"area":1,"density":0.284,"id":"e358","stiffness":30000000,"target":268,"stress":-152.1105649264191},{"source":119,"area":1,"density":0.284,"id":"e359","stiffness":30000000,"target":270,"stress":-909.3109716689779},{"source":273,"area":1,"density":0.284,"id":"e360","stiffness":30000000,"target":274,"stress":32.892045902961186},{"source":274,"area":1,"density":0.284,"id":"e361","stiffness":30000000,"target":275,"stress":7.931046292567456},{"source":275,"area":1,"density":0.284,"id":"e362","stiffness":30000000,"target":276,"stress":-8.657525826556617},{"source":276,"area":1,"density":0.284,"id":"e363","stiffness":30000000,"target":277,"stress":31.41405652779203},{"source":277,"area":1,"density":0.284,"id":"e364","stiffness":30000000,"target":278,"stress":36.53627632420394},{"source":278,"area":1,"density":0.284,"id":"e365","stiffness":30000000,"target":279,"stress":-23.904680344275487},{"source":279,"area":1,"density":0.284,"id":"e366","stiffness":30000000,"target":280,"stress":-36.200905778044735},{"source":280,"area":1,"density":0.284,"id":"e367","stiffness":30000000,"target":273,"stress":105.98248959776289},{"source":271,"area":1,"density":0.284,"id":"e368","stiffness":30000000,"target":278,"stress":-50.379876710263055},{"source":229,"area":1,"density":0.284,"id":"e369","stiffness":30000000,"target":280,"stress":138.30021129796478},{"source":261,"area":1,"density":0.284,"id":"e370","stiffness":30000000,"target":274,"stress":-21.063735771398367},{"source":272,"area":1,"density":0.284,"id":"e371","stiffness":30000000,"target":276,"stress":40.19028533502123},{"source":282,"area":1,"density":0.284,"id":"e372","stiffness":30000000,"target":283,"stress":-221.42113368739993},{"source":283,"area":1,"density":0.284,"id":"e373","stiffness":30000000,"target":284,"stress":-286.8527809675056},{"source":284,"area":1,"density":0.284,"id":"e374","stiffness":30000000,"target":285,"stress":331.5245045127516},{"source":285,"area":1,"density":0.284,"id":"e375","stiffness":30000000,"target":286,"stress":-373.8878200747094},{"source":286,"area":1,"density":0.284,"id":"e376","stiffness":30000000,"target":287,"stress":-325.5599794989706},{"source":287,"area":1,"density":0.284,"id":"e377","stiffness":30000000,"target":288,"stress":-265.7869589260183},{"source":288,"area":1,"density":0.284,"id":"e378","stiffness":30000000,"target":289,"stress":337.95109894463735},{"source":289,"area":1,"density":0.284,"id":"e379","stiffness":30000000,"target":282,"stress":-248.1832230140561},{"source":281,"area":1,"density":0.284,"id":"e380","stiffness":30000000,"target":287,"stress":165.28115767358335},{"source":129,"area":1,"density":0.284,"id":"e381","stiffness":30000000,"target":289,"stress":-473.25146254395935},{"source":238,"area":1,"density":0.284,"id":"e382","stiffness":30000000,"target":283,"stress":33.39213865643557},{"source":271,"area":1,"density":0.284,"id":"e383","stiffness":30000000,"target":285,"stress":-591.8794355742693},{"source":229,"area":1,"density":0.284,"id":"e384","stiffness":30000000,"target":248,"stress":-763.6331672504002},{"source":238,"area":1,"density":0.284,"id":"e385","stiffness":30000000,"target":250,"stress":-185.63575340289165},{"source":82,"area":1,"density":0.284,"id":"e386","stiffness":30000000,"target":252,"stress":-931.3363912221392},{"source":219,"area":1,"density":0.284,"id":"e387","stiffness":30000000,"target":254,"stress":-236.75025609562874},{"source":290,"area":1,"density":0.284,"id":"e388","stiffness":30000000,"target":291,"stress":-59.95756955523731},{"source":291,"area":1,"density":0.284,"id":"e389","stiffness":30000000,"target":292,"stress":-380.5743047102341},{"source":292,"area":1,"density":0.284,"id":"e390","stiffness":30000000,"target":293,"stress":-418.4440001981913},{"source":293,"area":1,"density":0.284,"id":"e391","stiffness":30000000,"target":294,"stress":139.39735381168668},{"source":294,"area":1,"density":0.284,"id":"e392","stiffness":30000000,"target":295,"stress":-76.17729516436165},{"source":295,"area":1,"density":0.284,"id":"e393","stiffness":30000000,"target":296,"stress":-436.6276914603527},{"source":296,"area":1,"density":0.284,"id":"e394","stiffness":30000000,"target":297,"stress":-463.0067764055464},{"source":297,"area":1,"density":0.284,"id":"e395","stiffness":30000000,"target":290,"stress":151.38206102478281},{"source":262,"area":1,"density":0.284,"id":"e396","stiffness":30000000,"target":295,"stress":114.95772112996296},{"source":130,"area":1,"density":0.284,"id":"e397","stiffness":30000000,"target":293,"stress":-638.0084188291222},{"source":281,"area":1,"density":0.284,"id":"e398","stiffness":30000000,"target":291,"stress":87.71206872151096},{"source":272,"area":1,"density":0.284,"id":"e399","stiffness":30000000,"target":297,"stress":-678.6394413814226},{"source":298,"area":1,"density":0.284,"id":"e400","stiffness":30000000,"target":299,"stress":-38.34880536845281},{"source":299,"area":1,"density":0.284,"id":"e401","stiffness":30000000,"target":300,"stress":12.407963924628852},{"source":300,"area":1,"density":0.284,"id":"e402","stiffness":30000000,"target":301,"stress":21.199484193977906},{"source":301,"area":1,"density":0.284,"id":"e403","stiffness":30000000,"target":302,"stress":-2.8528876566453114},{"source":302,"area":1,"density":0.284,"id":"e404","stiffness":30000000,"target":303,"stress":-41.04218021294851},{"source":303,"area":1,"density":0.284,"id":"e405","stiffness":30000000,"target":304,"stress":10.567163339902429},{"source":304,"area":1,"density":0.284,"id":"e406","stiffness":30000000,"target":305,"stress":25.546738257594765},{"source":305,"area":1,"density":0.284,"id":"e407","stiffness":30000000,"target":298,"stress":44.19974115677437},{"source":164,"area":1,"density":0.284,"id":"e408","stiffness":30000000,"target":299,"stress":35.12823255400978},{"source":176,"area":1,"density":0.284,"id":"e409","stiffness":30000000,"target":301,"stress":-32.59518775516267},{"source":175,"area":1,"density":0.284,"id":"e410","stiffness":30000000,"target":303,"stress":39.23390270424369},{"source":177,"area":1,"density":0.284,"id":"e411","stiffness":30000000,"target":305,"stress":2.596443380791377},{"source":309,"area":1,"density":0.284,"id":"e412","stiffness":30000000,"target":310,"stress":-353.6407357628251},{"source":310,"area":1,"density":0.284,"id":"e413","stiffness":30000000,"target":311,"stress":56.32828783072793},{"source":311,"area":1,"density":0.284,"id":"e414","stiffness":30000000,"target":312,"stress":82.47822769598015},{"source":312,"area":1,"density":0.284,"id":"e415","stiffness":30000000,"target":313,"stress":-329.6248054150662},{"source":313,"area":1,"density":0.284,"id":"e416","stiffness":30000000,"target":314,"stress":-338.2908337543693},{"source":314,"area":1,"density":0.284,"id":"e417","stiffness":30000000,"target":315,"stress":41.37424479889596},{"source":315,"area":1,"density":0.284,"id":"e418","stiffness":30000000,"target":316,"stress":34.676200601602076},{"source":316,"area":1,"density":0.284,"id":"e419","stiffness":30000000,"target":309,"stress":-354.459177087495},{"source":308,"area":1,"density":0.284,"id":"e420","stiffness":30000000,"target":310,"stress":-88.02842223136412},{"source":306,"area":1,"density":0.284,"id":"e421","stiffness":30000000,"target":312,"stress":-372.05992706808894},{"source":307,"area":1,"density":0.284,"id":"e422","stiffness":30000000,"target":314,"stress":-150.48969214639735},{"source":164,"area":1,"density":0.284,"id":"e423","stiffness":30000000,"target":316,"stress":-506.2693573594691},{"source":320,"area":1,"density":0.284,"id":"e424","stiffness":30000000,"target":321,"stress":-0.4978521822080612},{"source":321,"area":1,"density":0.284,"id":"e425","stiffness":30000000,"target":322,"stress":71.70422861976897},{"source":322,"area":1,"density":0.284,"id":"e426","stiffness":30000000,"target":323,"stress":59.08490866377858},{"source":323,"area":1,"density":0.284,"id":"e427","stiffness":30000000,"target":324,"stress":113.87887202974441},{"source":324,"area":1,"density":0.284,"id":"e428","stiffness":30000000,"target":325,"stress":46.9759252865564},{"source":325,"area":1,"density":0.284,"id":"e429","stiffness":30000000,"target":326,"stress":-5.622391022283891},{"source":326,"area":1,"density":0.284,"id":"e430","stiffness":30000000,"target":327,"stress":-39.184079772656396},{"source":327,"area":1,"density":0.284,"id":"e431","stiffness":30000000,"target":320,"stress":-49.616506875532046},{"source":317,"area":1,"density":0.284,"id":"e432","stiffness":30000000,"target":325,"stress":-47.41096604399799},{"source":318,"area":1,"density":0.284,"id":"e433","stiffness":30000000,"target":327,"stress":6.671465490818394},{"source":306,"area":1,"density":0.284,"id":"e434","stiffness":30000000,"target":321,"stress":77.15749513363575},{"source":319,"area":1,"density":0.284,"id":"e435","stiffness":30000000,"target":323,"stress":40.38862566422093},{"source":330,"area":1,"density":0.284,"id":"e436","stiffness":30000000,"target":331,"stress":-126.50930715720834},{"source":331,"area":1,"density":0.284,"id":"e437","stiffness":30000000,"target":332,"stress":-154.9414077058054},{"source":332,"area":1,"density":0.284,"id":"e438","stiffness":30000000,"target":333,"stress":179.327986674627},{"source":333,"area":1,"density":0.284,"id":"e439","stiffness":30000000,"target":334,"stress":-294.63890175953406},{"source":334,"area":1,"density":0.284,"id":"e440","stiffness":30000000,"target":335,"stress":-236.80881759997476},{"source":335,"area":1,"density":0.284,"id":"e441","stiffness":30000000,"target":336,"stress":-86.51756484380917},{"source":336,"area":1,"density":0.284,"id":"e442","stiffness":30000000,"target":337,"stress":167.09451185072226},{"source":337,"area":1,"density":0.284,"id":"e443","stiffness":30000000,"target":330,"stress":-142.8413168017484},{"source":329,"area":1,"density":0.284,"id":"e444","stiffness":30000000,"target":335,"stress":199.6640881995677},{"source":175,"area":1,"density":0.284,"id":"e445","stiffness":30000000,"target":337,"stress":-258.64704929968633},{"source":328,"area":1,"density":0.284,"id":"e446","stiffness":30000000,"target":331,"stress":25.477022826013883},{"source":317,"area":1,"density":0.284,"id":"e447","stiffness":30000000,"target":333,"stress":-414.9389970921805},{"source":338,"area":1,"density":0.284,"id":"e448","stiffness":30000000,"target":339,"stress":81.7697949801734},{"source":339,"area":1,"density":0.284,"id":"e449","stiffness":30000000,"target":340,"stress":-135.6110787145296},{"source":340,"area":1,"density":0.284,"id":"e450","stiffness":30000000,"target":341,"stress":-128.301069648507},{"source":341,"area":1,"density":0.284,"id":"e451","stiffness":30000000,"target":342,"stress":-109.38995694787076},{"source":342,"area":1,"density":0.284,"id":"e452","stiffness":30000000,"target":343,"stress":56.25501941542429},{"source":343,"area":1,"density":0.284,"id":"e453","stiffness":30000000,"target":344,"stress":-178.18937680673585},{"source":344,"area":1,"density":0.284,"id":"e454","stiffness":30000000,"target":345,"stress":-161.00848342433918},{"source":345,"area":1,"density":0.284,"id":"e455","stiffness":30000000,"target":338,"stress":-40.29094124568944},{"source":318,"area":1,"density":0.284,"id":"e456","stiffness":30000000,"target":343,"stress":-327.532666980233},{"source":328,"area":1,"density":0.284,"id":"e457","stiffness":30000000,"target":345,"stress":13.520739074049796},{"source":176,"area":1,"density":0.284,"id":"e458","stiffness":30000000,"target":339,"stress":-268.1740318128664},{"source":307,"area":1,"density":0.284,"id":"e459","stiffness":30000000,"target":341,"stress":-73.0087077097674},{"source":346,"area":1,"density":0.284,"id":"e460","stiffness":30000000,"target":347,"stress":130.90449782806388},{"source":347,"area":1,"density":0.284,"id":"e461","stiffness":30000000,"target":348,"stress":-355.726101266527},{"source":348,"area":1,"density":0.284,"id":"e462","stiffness":30000000,"target":349,"stress":-377.32978314809793},{"source":349,"area":1,"density":0.284,"id":"e463","stiffness":30000000,"target":350,"stress":49.304516836481476},{"source":350,"area":1,"density":0.284,"id":"e464","stiffness":30000000,"target":351,"stress":51.43856531520776},{"source":351,"area":1,"density":0.284,"id":"e465","stiffness":30000000,"target":352,"stress":-330.4965748210259},{"source":352,"area":1,"density":0.284,"id":"e466","stiffness":30000000,"target":353,"stress":-338.43328767673523},{"source":353,"area":1,"density":0.284,"id":"e467","stiffness":30000000,"target":346,"stress":122.73538938254356},{"source":308,"area":1,"density":0.284,"id":"e468","stiffness":30000000,"target":351,"stress":-12.086991323531802},{"source":177,"area":1,"density":0.284,"id":"e469","stiffness":30000000,"target":349,"stress":-638.7281422187276},{"source":329,"area":1,"density":0.284,"id":"e470","stiffness":30000000,"target":347,"stress":135.30693566988455},{"source":319,"area":1,"density":0.284,"id":"e471","stiffness":30000000,"target":353,"stress":-445.4879444939475},{"source":230,"area":1,"density":0.284,"id":"e472","stiffness":30000000,"target":354,"stress":-63.476702008958185},{"source":354,"area":1,"density":0.284,"id":"e473","stiffness":30000000,"target":355,"stress":59.987246736094725},{"source":355,"area":1,"density":0.284,"id":"e474","stiffness":30000000,"target":356,"stress":55.42256282474811},{"source":356,"area":1,"density":0.284,"id":"e475","stiffness":30000000,"target":234,"stress":-16.574524405082688},{"source":234,"area":1,"density":0.284,"id":"e476","stiffness":30000000,"target":357,"stress":-75.44667090140531},{"source":357,"area":1,"density":0.284,"id":"e477","stiffness":30000000,"target":358,"stress":33.364829071372824},{"source":358,"area":1,"density":0.284,"id":"e478","stiffness":30000000,"target":359,"stress":44.662443441948},{"source":359,"area":1,"density":0.284,"id":"e479","stiffness":30000000,"target":230,"stress":42.246861281430235},{"source":218,"area":1,"density":0.284,"id":"e480","stiffness":30000000,"target":354,"stress":104.21785231451248},{"source":177,"area":1,"density":0.284,"id":"e481","stiffness":30000000,"target":356,"stress":-77.95168032826584},{"source":228,"area":1,"density":0.284,"id":"e482","stiffness":30000000,"target":357,"stress":87.23930029537733},{"source":229,"area":1,"density":0.284,"id":"e483","stiffness":30000000,"target":359,"stress":-20.08762435089909},{"source":362,"area":1,"density":0.284,"id":"e484","stiffness":30000000,"target":363,"stress":-316.905576802313},{"source":363,"area":1,"density":0.284,"id":"e485","stiffness":30000000,"target":364,"stress":40.507889069712505},{"source":364,"area":1,"density":0.284,"id":"e486","stiffness":30000000,"target":365,"stress":24.46171250294451},{"source":365,"area":1,"density":0.284,"id":"e487","stiffness":30000000,"target":366,"stress":-326.5524254753061},{"source":366,"area":1,"density":0.284,"id":"e488","stiffness":30000000,"target":367,"stress":-331.57871319017414},{"source":367,"area":1,"density":0.284,"id":"e489","stiffness":30000000,"target":368,"stress":32.97328249451361},{"source":368,"area":1,"density":0.284,"id":"e490","stiffness":30000000,"target":369,"stress":20.275903429607727},{"source":369,"area":1,"density":0.284,"id":"e491","stiffness":30000000,"target":362,"stress":-320.2159688230458},{"source":361,"area":1,"density":0.284,"id":"e492","stiffness":30000000,"target":363,"stress":-10.145138239636413},{"source":360,"area":1,"density":0.284,"id":"e493","stiffness":30000000,"target":365,"stress":-492.48504083877543},{"source":308,"area":1,"density":0.284,"id":"e494","stiffness":30000000,"target":367,"stress":-60.3954072863118},{"source":218,"area":1,"density":0.284,"id":"e495","stiffness":30000000,"target":369,"stress":-505.63006768944206},{"source":372,"area":1,"density":0.284,"id":"e496","stiffness":30000000,"target":373,"stress":2.24627982672823},{"source":373,"area":1,"density":0.284,"id":"e497","stiffness":30000000,"target":374,"stress":28.59835068374812},{"source":374,"area":1,"density":0.284,"id":"e498","stiffness":30000000,"target":375,"stress":7.578339517712791},{"source":375,"area":1,"density":0.284,"id":"e499","stiffness":30000000,"target":376,"stress":105.37541714864776},{"source":376,"area":1,"density":0.284,"id":"e500","stiffness":30000000,"target":377,"stress":-1.2920400275050106},{"source":377,"area":1,"density":0.284,"id":"e501","stiffness":30000000,"target":378,"stress":-20.993147310969857},{"source":378,"area":1,"density":0.284,"id":"e502","stiffness":30000000,"target":379,"stress":-45.02675830204697},{"source":379,"area":1,"density":0.284,"id":"e503","stiffness":30000000,"target":372,"stress":136.51191857336607},{"source":370,"area":1,"density":0.284,"id":"e504","stiffness":30000000,"target":377,"stress":-26.561368817307315},{"source":319,"area":1,"density":0.284,"id":"e505","stiffness":30000000,"target":379,"stress":173.3824687120994},{"source":360,"area":1,"density":0.284,"id":"e506","stiffness":30000000,"target":373,"stress":15.389025347655164},{"source":371,"area":1,"density":0.284,"id":"e507","stiffness":30000000,"target":375,"stress":86.49599040009501},{"source":381,"area":1,"density":0.284,"id":"e508","stiffness":30000000,"target":382,"stress":-61.32995483642892},{"source":382,"area":1,"density":0.284,"id":"e509","stiffness":30000000,"target":383,"stress":-242.25860955566895},{"source":383,"area":1,"density":0.284,"id":"e510","stiffness":30000000,"target":384,"stress":233.41149361421392},{"source":384,"area":1,"density":0.284,"id":"e511","stiffness":30000000,"target":385,"stress":-241.46700773730205},{"source":385,"area":1,"density":0.284,"id":"e512","stiffness":30000000,"target":386,"stress":-189.87188918854952},{"source":386,"area":1,"density":0.284,"id":"e513","stiffness":30000000,"target":387,"stress":-196.15965378713744},{"source":387,"area":1,"density":0.284,"id":"e514","stiffness":30000000,"target":388,"stress":192.88039507817072},{"source":388,"area":1,"density":0.284,"id":"e515","stiffness":30000000,"target":381,"stress":-49.17034533171739},{"source":380,"area":1,"density":0.284,"id":"e516","stiffness":30000000,"target":386,"stress":56.076969435196766},{"source":228,"area":1,"density":0.284,"id":"e517","stiffness":30000000,"target":388,"stress":-171.36829786368685},{"source":329,"area":1,"density":0.284,"id":"e518","stiffness":30000000,"target":382,"stress":-111.92852715190745},{"source":370,"area":1,"density":0.284,"id":"e519","stiffness":30000000,"target":384,"stress":-394.0907486788508},{"source":319,"area":1,"density":0.284,"id":"e520","stiffness":30000000,"target":347,"stress":-278.21950878645146},{"source":329,"area":1,"density":0.284,"id":"e521","stiffness":30000000,"target":349,"stress":-235.62051827035552},{"source":177,"area":1,"density":0.284,"id":"e522","stiffness":30000000,"target":351,"stress":-343.5276355996759},{"source":308,"area":1,"density":0.284,"id":"e523","stiffness":30000000,"target":353,"stress":-34.90797967376907},{"source":389,"area":1,"density":0.284,"id":"e524","stiffness":30000000,"target":390,"stress":139.72225800237428},{"source":390,"area":1,"density":0.284,"id":"e525","stiffness":30000000,"target":391,"stress":-360.60336271580076},{"source":391,"area":1,"density":0.284,"id":"e526","stiffness":30000000,"target":392,"stress":-379.85072749300883},{"source":392,"area":1,"density":0.284,"id":"e527","stiffness":30000000,"target":393,"stress":52.71544352013102},{"source":393,"area":1,"density":0.284,"id":"e528","stiffness":30000000,"target":394,"stress":61.72247347296796},{"source":394,"area":1,"density":0.284,"id":"e529","stiffness":30000000,"target":395,"stress":-340.29599416613763},{"source":395,"area":1,"density":0.284,"id":"e530","stiffness":30000000,"target":396,"stress":-343.2533740081377},{"source":396,"area":1,"density":0.284,"id":"e531","stiffness":30000000,"target":389,"stress":134.27141357754203},{"source":361,"area":1,"density":0.284,"id":"e532","stiffness":30000000,"target":394,"stress":-44.06534844184247},{"source":229,"area":1,"density":0.284,"id":"e533","stiffness":30000000,"target":392,"stress":-591.8096617400803},{"source":380,"area":1,"density":0.284,"id":"e534","stiffness":30000000,"target":390,"stress":94.59615730476405},{"source":371,"area":1,"density":0.284,"id":"e535","stiffness":30000000,"target":396,"stress":-388.55227729185447},{"source":273,"area":1,"density":0.284,"id":"e536","stiffness":30000000,"target":397,"stress":-70.93848720907891},{"source":397,"area":1,"density":0.284,"id":"e537","stiffness":30000000,"target":398,"stress":62.5475171136172},{"source":398,"area":1,"density":0.284,"id":"e538","stiffness":30000000,"target":399,"stress":62.58114416921265},{"source":399,"area":1,"density":0.284,"id":"e539","stiffness":30000000,"target":277,"stress":-28.559757508605287},{"source":277,"area":1,"density":0.284,"id":"e540","stiffness":30000000,"target":400,"stress":-43.671234774960624},{"source":400,"area":1,"density":0.284,"id":"e541","stiffness":30000000,"target":401,"stress":16.462789648789794},{"source":401,"area":1,"density":0.284,"id":"e542","stiffness":30000000,"target":402,"stress":25.874923037010202},{"source":402,"area":1,"density":0.284,"id":"e543","stiffness":30000000,"target":273,"stress":-16.16253683156962},{"source":261,"area":1,"density":0.284,"id":"e544","stiffness":30000000,"target":397,"stress":115.78989489794701},{"source":229,"area":1,"density":0.284,"id":"e545","stiffness":30000000,"target":399,"stress":-97.99015924110324},{"source":271,"area":1,"density":0.284,"id":"e546","stiffness":30000000,"target":400,"stress":46.9726931883309},{"source":272,"area":1,"density":0.284,"id":"e547","stiffness":30000000,"target":402,"stress":-48.034730675272826},{"source":405,"area":1,"density":0.284,"id":"e548","stiffness":30000000,"target":406,"stress":-307.0484218319809},{"source":406,"area":1,"density":0.284,"id":"e549","stiffness":30000000,"target":407,"stress":61.21939223063792},{"source":407,"area":1,"density":0.284,"id":"e550","stiffness":30000000,"target":408,"stress":43.14436585387659},{"source":408,"area":1,"density":0.284,"id":"e551","stiffness":30000000,"target":409,"stress":-335.72006175637176},{"source":409,"area":1,"density":0.284,"id":"e552","stiffness":30000000,"target":410,"stress":-345.9751859216158},{"source":410,"area":1,"density":0.284,"id":"e553","stiffness":30000000,"target":411,"stress":38.19688530411234},{"source":411,"area":1,"density":0.284,"id":"e554","stiffness":30000000,"target":412,"stress":48.0094569344559},{"source":412,"area":1,"density":0.284,"id":"e555","stiffness":30000000,"target":405,"stress":-297.3225366749569},{"source":404,"area":1,"density":0.284,"id":"e556","stiffness":30000000,"target":406,"stress":64.68291187734411},{"source":403,"area":1,"density":0.284,"id":"e557","stiffness":30000000,"target":408,"stress":-551.9028017769468},{"source":361,"area":1,"density":0.284,"id":"e558","stiffness":30000000,"target":410,"stress":-26.234341893755843},{"source":261,"area":1,"density":0.284,"id":"e559","stiffness":30000000,"target":412,"stress":-485.41502647419287},{"source":415,"area":1,"density":0.284,"id":"e560","stiffness":30000000,"target":416,"stress":3.3853604432775275},{"source":416,"area":1,"density":0.284,"id":"e561","stiffness":30000000,"target":417,"stress":64.22406117263628},{"source":417,"area":1,"density":0.284,"id":"e562","stiffness":30000000,"target":418,"stress":47.914847731368056},{"source":418,"area":1,"density":0.284,"id":"e563","stiffness":30000000,"target":419,"stress":16.486551978700465},{"source":419,"area":1,"density":0.284,"id":"e564","stiffness":30000000,"target":420,"stress":-40.83878188640768},{"source":420,"area":1,"density":0.284,"id":"e565","stiffness":30000000,"target":421,"stress":-25.044178253280833},{"source":421,"area":1,"density":0.284,"id":"e566","stiffness":30000000,"target":422,"stress":-13.33887261435209},{"source":422,"area":1,"density":0.284,"id":"e567","stiffness":30000000,"target":415,"stress":138.8033180838686},{"source":413,"area":1,"density":0.284,"id":"e568","stiffness":30000000,"target":420,"stress":2.9462896119345467},{"source":371,"area":1,"density":0.284,"id":"e569","stiffness":30000000,"target":422,"stress":133.73236226345787},{"source":403,"area":1,"density":0.284,"id":"e570","stiffness":30000000,"target":416,"stress":48.247308974536224},{"source":414,"area":1,"density":0.284,"id":"e571","stiffness":30000000,"target":418,"stress":-41.30093311034433},{"source":424,"area":1,"density":0.284,"id":"e572","stiffness":30000000,"target":425,"stress":-72.43939415741552},{"source":425,"area":1,"density":0.284,"id":"e573","stiffness":30000000,"target":426,"stress":-327.6001843013104},{"source":426,"area":1,"density":0.284,"id":"e574","stiffness":30000000,"target":427,"stress":221.04406204074948},{"source":427,"area":1,"density":0.284,"id":"e575","stiffness":30000000,"target":428,"stress":-227.31625331268947},{"source":428,"area":1,"density":0.284,"id":"e576","stiffness":30000000,"target":429,"stress":-160.55959906827528},{"source":429,"area":1,"density":0.284,"id":"e577","stiffness":30000000,"target":430,"stress":-129.21875099866833},{"source":430,"area":1,"density":0.284,"id":"e578","stiffness":30000000,"target":431,"stress":228.9009949222439},{"source":431,"area":1,"density":0.284,"id":"e579","stiffness":30000000,"target":424,"stress":-45.987213952495026},{"source":423,"area":1,"density":0.284,"id":"e580","stiffness":30000000,"target":429,"stress":82.9099794571983},{"source":271,"area":1,"density":0.284,"id":"e581","stiffness":30000000,"target":431,"stress":-200.09220735228072},{"source":380,"area":1,"density":0.284,"id":"e582","stiffness":30000000,"target":425,"stress":-172.48671114462107},{"source":413,"area":1,"density":0.284,"id":"e583","stiffness":30000000,"target":427,"stress":-364.5830912037963},{"source":371,"area":1,"density":0.284,"id":"e584","stiffness":30000000,"target":390,"stress":-331.8937171906931},{"source":380,"area":1,"density":0.284,"id":"e585","stiffness":30000000,"target":392,"stress":-195.0195862232076},{"source":229,"area":1,"density":0.284,"id":"e586","stiffness":30000000,"target":394,"stress":-407.943356368785},{"source":361,"area":1,"density":0.284,"id":"e587","stiffness":30000000,"target":396,"stress":32.69939848044295},{"source":432,"area":1,"density":0.284,"id":"e588","stiffness":30000000,"target":433,"stress":-63.3808881735688},{"source":433,"area":1,"density":0.284,"id":"e589","stiffness":30000000,"target":434,"stress":-241.15323326307654},{"source":434,"area":1,"density":0.284,"id":"e590","stiffness":30000000,"target":435,"stress":-247.65940025501854},{"source":435,"area":1,"density":0.284,"id":"e591","stiffness":30000000,"target":436,"stress":133.76279310462235},{"source":436,"area":1,"density":0.284,"id":"e592","stiffness":30000000,"target":437,"stress":58.40053916829587},{"source":437,"area":1,"density":0.284,"id":"e593","stiffness":30000000,"target":438,"stress":-185.8856953543135},{"source":438,"area":1,"density":0.284,"id":"e594","stiffness":30000000,"target":439,"stress":-209.27352246919926},{"source":439,"area":1,"density":0.284,"id":"e595","stiffness":30000000,"target":432,"stress":79.08457232037199},{"source":404,"area":1,"density":0.284,"id":"e596","stiffness":30000000,"target":437,"stress":125.54317841262542},{"source":272,"area":1,"density":0.284,"id":"e597","stiffness":30000000,"target":435,"stress":-363.5908687939219},{"source":423,"area":1,"density":0.284,"id":"e598","stiffness":30000000,"target":433,"stress":43.997688208846064},{"source":414,"area":1,"density":0.284,"id":"e599","stiffness":30000000,"target":439,"stress":-352.9915477149064},{"source":443,"area":1,"density":0.284,"id":"e600","stiffness":30000000,"target":444,"stress":0.0},{"source":444,"area":1,"density":0.284,"id":"e601","stiffness":30000000,"target":445,"stress":0.0},{"source":445,"area":1,"density":0.284,"id":"e602","stiffness":30000000,"target":446,"stress":0.0},{"source":446,"area":1,"density":0.284,"id":"e603","stiffness":30000000,"target":447,"stress":0.0},{"source":447,"area":1,"density":0.284,"id":"e604","stiffness":30000000,"target":448,"stress":0.0},{"source":448,"area":1,"density":0.284,"id":"e605","stiffness":30000000,"target":449,"stress":0.0},{"source":449,"area":1,"density":0.284,"id":"e606","stiffness":30000000,"target":450,"stress":0.0},{"source":450,"area":1,"density":0.284,"id":"e607","stiffness":30000000,"target":443,"stress":0.0},{"source":440,"area":1,"density":0.284,"id":"e608","stiffness":30000000,"target":444,"stress":0.0},{"source":441,"area":1,"density":0.284,"id":"e609","stiffness":30000000,"target":446,"stress":0.0},{"source":0,"area":1,"density":0.284,"id":"e610","stiffness":30000000,"target":448,"stress":0.0},{"source":442,"area":1,"density":0.284,"id":"e611","stiffness":30000000,"target":450,"stress":0.0},{"source":454,"area":1,"density":0.284,"id":"e612","stiffness":30000000,"target":455,"stress":-1015.967886815386},{"source":455,"area":1,"density":0.284,"id":"e613","stiffness":30000000,"target":456,"stress":117.57106459720538},{"source":456,"area":1,"density":0.284,"id":"e614","stiffness":30000000,"target":457,"stress":150.34628929203416},{"source":457,"area":1,"density":0.284,"id":"e615","stiffness":30000000,"target":458,"stress":-923.1109382111545},{"source":458,"area":1,"density":0.284,"id":"e616","stiffness":30000000,"target":459,"stress":-916.8838150424215},{"source":459,"area":1,"density":0.284,"id":"e617","stiffness":30000000,"target":460,"stress":176.95724758737688},{"source":460,"area":1,"density":0.284,"id":"e618","stiffness":30000000,"target":461,"stress":99.76969645566886},{"source":461,"area":1,"density":0.284,"id":"e619","stiffness":30000000,"target":454,"stress":-1010.0804926333667},{"source":453,"area":1,"density":0.284,"id":"e620","stiffness":30000000,"target":455,"stress":-387.01010779154296},{"source":451,"area":1,"density":0.284,"id":"e621","stiffness":30000000,"target":457,"stress":-1208.9144546674322},{"source":452,"area":1,"density":0.284,"id":"e622","stiffness":30000000,"target":459,"stress":-145.5335174104044},{"source":440,"area":1,"density":0.284,"id":"e623","stiffness":30000000,"target":461,"stress":-1395.0123537553281},{"source":464,"area":1,"density":0.284,"id":"e624","stiffness":30000000,"target":465,"stress":0.5332962383128504},{"source":465,"area":1,"density":0.284,"id":"e625","stiffness":30000000,"target":466,"stress":59.26993404128104},{"source":466,"area":1,"density":0.284,"id":"e626","stiffness":30000000,"target":467,"stress":-22.51791214977642},{"source":467,"area":1,"density":0.284,"id":"e627","stiffness":30000000,"target":468,"stress":50.09722099443411},{"source":468,"area":1,"density":0.284,"id":"e628","stiffness":30000000,"target":469,"stress":29.531044803449802},{"source":469,"area":1,"density":0.284,"id":"e629","stiffness":30000000,"target":470,"stress":19.816088947722807},{"source":470,"area":1,"density":0.284,"id":"e630","stiffness":30000000,"target":471,"stress":-16.495996289607618},{"source":471,"area":1,"density":0.284,"id":"e631","stiffness":30000000,"target":464,"stress":-12.033281118670274},{"source":12,"area":1,"density":0.284,"id":"e632","stiffness":30000000,"target":469,"stress":-6.632160838862589},{"source":462,"area":1,"density":0.284,"id":"e633","stiffness":30000000,"target":471,"stress":12.185498010478096},{"source":451,"area":1,"density":0.284,"id":"e634","stiffness":30000000,"target":465,"stress":62.40293744084978},{"source":463,"area":1,"density":0.284,"id":"e635","stiffness":30000000,"target":467,"stress":80.74768770902892},{"source":14,"area":1,"density":0.284,"id":"e636","stiffness":30000000,"target":22,"stress":-483.20389039924635},{"source":0,"area":1,"density":0.284,"id":"e637","stiffness":30000000,"target":20,"stress":-1116.4822111564642},{"source":13,"area":1,"density":0.284,"id":"e638","stiffness":30000000,"target":18,"stress":-316.27550498471385},{"source":12,"area":1,"density":0.284,"id":"e639","stiffness":30000000,"target":16,"stress":-1320.6040042735153},{"source":472,"area":1,"density":0.284,"id":"e640","stiffness":30000000,"target":473,"stress":170.0171530662046},{"source":473,"area":1,"density":0.284,"id":"e641","stiffness":30000000,"target":474,"stress":-659.306774226506},{"source":474,"area":1,"density":0.284,"id":"e642","stiffness":30000000,"target":475,"stress":-670.5013419689295},{"source":475,"area":1,"density":0.284,"id":"e643","stiffness":30000000,"target":476,"stress":-235.7632507160572},{"source":476,"area":1,"density":0.284,"id":"e644","stiffness":30000000,"target":477,"stress":136.3555837184979},{"source":477,"area":1,"density":0.284,"id":"e645","stiffness":30000000,"target":478,"stress":-562.6969680699482},{"source":478,"area":1,"density":0.284,"id":"e646","stiffness":30000000,"target":479,"stress":-562.5531732904476},{"source":479,"area":1,"density":0.284,"id":"e647","stiffness":30000000,"target":472,"stress":-164.64428400640054},{"source":462,"area":1,"density":0.284,"id":"e648","stiffness":30000000,"target":477,"stress":-876.3773166078508},{"source":13,"area":1,"density":0.284,"id":"e649","stiffness":30000000,"target":479,"stress":98.6216432325463},{"source":441,"area":1,"density":0.284,"id":"e650","stiffness":30000000,"target":473,"stress":-951.0095139967807},{"source":452,"area":1,"density":0.284,"id":"e651","stiffness":30000000,"target":475,"stress":98.61004543161351},{"source":480,"area":1,"density":0.284,"id":"e652","stiffness":30000000,"target":481,"stress":33.154283266164555},{"source":481,"area":1,"density":0.284,"id":"e653","stiffness":30000000,"target":482,"stress":-972.3269055348627},{"source":482,"area":1,"density":0.284,"id":"e654","stiffness":30000000,"target":483,"stress":-985.2907041025306},{"source":483,"area":1,"density":0.284,"id":"e655","stiffness":30000000,"target":484,"stress":11.813943311790123},{"source":484,"area":1,"density":0.284,"id":"e656","stiffness":30000000,"target":485,"stress":32.70911097452746},{"source":485,"area":1,"density":0.284,"id":"e657","stiffness":30000000,"target":486,"stress":-982.9499018644194},{"source":486,"area":1,"density":0.284,"id":"e658","stiffness":30000000,"target":487,"stress":-1006.0779182661721},{"source":487,"area":1,"density":0.284,"id":"e659","stiffness":30000000,"target":480,"stress":18.421407437067305},{"source":453,"area":1,"density":0.284,"id":"e660","stiffness":30000000,"target":485,"stress":-354.205256801284},{"source":442,"area":1,"density":0.284,"id":"e661","stiffness":30000000,"target":483,"stress":-1327.721501720019},{"source":14,"area":1,"density":0.284,"id":"e662","stiffness":30000000,"target":481,"stress":-348.91421549178455},{"source":463,"area":1,"density":0.284,"id":"e663","stiffness":30000000,"target":487,"stress":-1375.9107347787346},{"source":490,"area":1,"density":0.284,"id":"e664","stiffness":30000000,"target":491,"stress":0.0},{"source":491,"area":1,"density":0.284,"id":"e665","stiffness":30000000,"target":492,"stress":0.0},{"source":492,"area":1,"density":0.284,"id":"e666","stiffness":30000000,"target":493,"stress":0.0},{"source":493,"area":1,"density":0.284,"id":"e667","stiffness":30000000,"target":494,"stress":0.0},{"source":494,"area":1,"density":0.284,"id":"e668","stiffness":30000000,"target":495,"stress":0.0},{"source":495,"area":1,"density":0.284,"id":"e669","stiffness":30000000,"target":496,"stress":0.0},{"source":496,"area":1,"density":0.284,"id":"e670","stiffness":30000000,"target":497,"stress":0.0},{"source":497,"area":1,"density":0.284,"id":"e671","stiffness":30000000,"target":490,"stress":0.0},{"source":488,"area":1,"density":0.284,"id":"e672","stiffness":30000000,"target":491,"stress":0.0},{"source":442,"area":1,"density":0.284,"id":"e673","stiffness":30000000,"target":493,"stress":0.0},{"source":60,"area":1,"density":0.284,"id":"e674","stiffness":30000000,"target":495,"stress":0.0},{"source":489,"area":1,"density":0.284,"id":"e675","stiffness":30000000,"target":497,"stress":0.0},{"source":500,"area":1,"density":0.284,"id":"e676","stiffness":30000000,"target":501,"stress":-984.4376079381867},{"source":501,"area":1,"density":0.284,"id":"e677","stiffness":30000000,"target":502,"stress":47.800555959751165},{"source":502,"area":1,"density":0.284,"id":"e678","stiffness":30000000,"target":503,"stress":65.24052407195197},{"source":503,"area":1,"density":0.284,"id":"e679","stiffness":30000000,"target":504,"stress":-964.1848476491557},{"source":504,"area":1,"density":0.284,"id":"e680","stiffness":30000000,"target":505,"stress":-961.0073343565534},{"source":505,"area":1,"density":0.284,"id":"e681","stiffness":30000000,"target":506,"stress":39.94333618614944},{"source":506,"area":1,"density":0.284,"id":"e682","stiffness":30000000,"target":507,"stress":65.78002122464973},{"source":507,"area":1,"density":0.284,"id":"e683","stiffness":30000000,"target":500,"stress":-977.2817947134788},{"source":499,"area":1,"density":0.284,"id":"e684","stiffness":30000000,"target":501,"stress":-442.24060724312676},{"source":498,"area":1,"density":0.284,"id":"e685","stiffness":30000000,"target":503,"stress":-1274.1600560017355},{"source":453,"area":1,"density":0.284,"id":"e686","stiffness":30000000,"target":505,"stress":-421.31005035641454},{"source":488,"area":1,"density":0.284,"id":"e687","stiffness":30000000,"target":507,"stress":-1277.367020618579},{"source":509,"area":1,"density":0.284,"id":"e688","stiffness":30000000,"target":510,"stress":58.12071386565931},{"source":510,"area":1,"density":0.284,"id":"e689","stiffness":30000000,"target":511,"stress":62.51931776535918},{"source":511,"area":1,"density":0.284,"id":"e690","stiffness":30000000,"target":512,"stress":-23.704670804205048},{"source":512,"area":1,"density":0.284,"id":"e691","stiffness":30000000,"target":513,"stress":53.32470948455598},{"source":513,"area":1,"density":0.284,"id":"e692","stiffness":30000000,"target":514,"stress":17.04237581149444},{"source":514,"area":1,"density":0.284,"id":"e693","stiffness":30000000,"target":515,"stress":70.07040672474436},{"source":515,"area":1,"density":0.284,"id":"e694","stiffness":30000000,"target":516,"stress":-19.41651368881288},{"source":516,"area":1,"density":0.284,"id":"e695","stiffness":30000000,"target":509,"stress":59.259728635882745},{"source":71,"area":1,"density":0.284,"id":"e696","stiffness":30000000,"target":514,"stress":56.78165493685222},{"source":463,"area":1,"density":0.284,"id":"e697","stiffness":30000000,"target":516,"stress":85.11105685190063},{"source":498,"area":1,"density":0.284,"id":"e698","stiffness":30000000,"target":510,"stress":70.76018686248852},{"source":508,"area":1,"density":0.284,"id":"e699","stiffness":30000000,"target":512,"stress":85.20798439306114},{"source":72,"area":1,"density":0.284,"id":"e700","stiffness":30000000,"target":80,"stress":-426.1417843514871},{"source":60,"area":1,"density":0.284,"id":"e701","stiffness":30000000,"target":78,"stress":-1274.0059264325243},{"source":14,"area":1,"density":0.284,"id":"e702","stiffness":30000000,"target":76,"stress":-450.14161895527985},{"source":71,"area":1,"density":0.284,"id":"e703","stiffness":30000000,"target":74,"stress":-1277.2785095031275},{"source":463,"area":1,"density":0.284,"id":"e704","stiffness":30000000,"target":481,"stress":-1243.2829438888475},{"source":14,"area":1,"density":0.284,"id":"e705","stiffness":30000000,"target":483,"stress":-451.58496587808787},{"source":442,"area":1,"density":0.284,"id":"e706","stiffness":30000000,"target":485,"stress":-1252.8348488374263},{"source":453,"area":1,"density":0.284,"id":"e707","stiffness":30000000,"target":487,"stress":-457.3922358430235},{"source":517,"area":1,"density":0.284,"id":"e708","stiffness":30000000,"target":518,"stress":18.892021791922527},{"source":518,"area":1,"density":0.284,"id":"e709","stiffness":30000000,"target":519,"stress":-995.4579918721039},{"source":519,"area":1,"density":0.284,"id":"e710","stiffness":30000000,"target":520,"stress":-978.8071392109212},{"source":520,"area":1,"density":0.284,"id":"e711","stiffness":30000000,"target":521,"stress":27.261693933246633},{"source":521,"area":1,"density":0.284,"id":"e712","stiffness":30000000,"target":522,"stress":12.950919198299141},{"source":522,"area":1,"density":0.284,"id":"e713","stiffness":30000000,"target":523,"stress":-980.7096191593242},{"source":523,"area":1,"density":0.284,"id":"e714","stiffness":30000000,"target":524,"stress":-972.5135488695557},{"source":524,"area":1,"density":0.284,"id":"e715","stiffness":30000000,"target":517,"stress":26.73564817372405},{"source":499,"area":1,"density":0.284,"id":"e716","stiffness":30000000,"target":522,"stress":-437.10003615635804},{"source":489,"area":1,"density":0.284,"id":"e717","stiffness":30000000,"target":520,"stress":-1260.6470851193342},{"source":72,"area":1,"density":0.284,"id":"e718","stiffness":30000000,"target":518,"stress":-436.03708767746656},{"source":508,"area":1,"density":0.284,"id":"e719","stiffness":30000000,"target":524,"stress":-1259.458804856118},{"source":527,"area":1,"density":0.284,"id":"e720","stiffness":30000000,"target":528,"stress":0.0},{"source":528,"area":1,"density":0.284,"id":"e721","stiffness":30000000,"target":529,"stress":0.0},{"source":529,"area":1,"density":0.284,"id":"e722","stiffness":30000000,"target":530,"stress":0.0},{"source":530,"area":1,"density":0.284,"id":"e723","stiffness":30000000,"target":531,"stress":0.0},{"source":531,"area":1,"density":0.284,"id":"e724","stiffness":30000000,"target":532,"stress":0.0},{"source":532,"area":1,"density":0.284,"id":"e725","stiffness":30000000,"target":533,"stress":0.0},{"source":533,"area":1,"density":0.284,"id":"e726","stiffness":30000000,"target":534,"stress":0.0},{"source":534,"area":1,"density":0.284,"id":"e727","stiffness":30000000,"target":527,"stress":0.0},{"source":525,"area":1,"density":0.284,"id":"e728","stiffness":30000000,"target":528,"stress":0.0},{"source":489,"area":1,"density":0.284,"id":"e729","stiffness":30000000,"target":530,"stress":0.0},{"source":108,"area":1,"density":0.284,"id":"e730","stiffness":30000000,"target":532,"stress":0.0},{"source":526,"area":1,"density":0.284,"id":"e731","stiffness":30000000,"target":534,"stress":0.0},{"source":537,"area":1,"density":0.284,"id":"e732","stiffness":30000000,"target":538,"stress":-953.4252066627972},{"source":538,"area":1,"density":0.284,"id":"e733","stiffness":30000000,"target":539,"stress":145.7252005703657},{"source":539,"area":1,"density":0.284,"id":"e734","stiffness":30000000,"target":540,"stress":121.55989641151088},{"source":540,"area":1,"density":0.284,"id":"e735","stiffness":30000000,"target":541,"stress":-1012.086031496051},{"source":541,"area":1,"density":0.284,"id":"e736","stiffness":30000000,"target":542,"stress":-1005.2613060562725},{"source":542,"area":1,"density":0.284,"id":"e737","stiffness":30000000,"target":543,"stress":82.02480534702049},{"source":543,"area":1,"density":0.284,"id":"e738","stiffness":30000000,"target":544,"stress":192.4856916458133},{"source":544,"area":1,"density":0.284,"id":"e739","stiffness":30000000,"target":537,"stress":-952.5634653060882},{"source":536,"area":1,"density":0.284,"id":"e740","stiffness":30000000,"target":538,"stress":-296.8882111562405},{"source":535,"area":1,"density":0.284,"id":"e741","stiffness":30000000,"target":540,"stress":-1356.251109893877},{"source":499,"area":1,"density":0.284,"id":"e742","stiffness":30000000,"target":542,"stress":-461.67005091236234},{"source":525,"area":1,"density":0.284,"id":"e743","stiffness":30000000,"target":544,"stress":-1149.544793945351},{"source":546,"area":1,"density":0.284,"id":"e744","stiffness":30000000,"target":547,"stress":19.924136118249304},{"source":547,"area":1,"density":0.284,"id":"e745","stiffness":30000000,"target":548,"stress":26.326609612031877},{"source":548,"area":1,"density":0.284,"id":"e746","stiffness":30000000,"target":549,"stress":-9.473092080178528},{"source":549,"area":1,"density":0.284,"id":"e747","stiffness":30000000,"target":550,"stress":-1.3223082782976112},{"source":550,"area":1,"density":0.284,"id":"e748","stiffness":30000000,"target":551,"stress":4.624094535333669},{"source":551,"area":1,"density":0.284,"id":"e749","stiffness":30000000,"target":552,"stress":62.76704875870529},{"source":552,"area":1,"density":0.284,"id":"e750","stiffness":30000000,"target":553,"stress":50.60491516356607},{"source":553,"area":1,"density":0.284,"id":"e751","stiffness":30000000,"target":546,"stress":27.970950579940588},{"source":119,"area":1,"density":0.284,"id":"e752","stiffness":30000000,"target":551,"stress":63.21644739972766},{"source":508,"area":1,"density":0.284,"id":"e753","stiffness":30000000,"target":553,"stress":103.56835347464721},{"source":535,"area":1,"density":0.284,"id":"e754","stiffness":30000000,"target":547,"stress":-4.000646070863653},{"source":545,"area":1,"density":0.284,"id":"e755","stiffness":30000000,"target":549,"stress":11.93416424001276},{"source":120,"area":1,"density":0.284,"id":"e756","stiffness":30000000,"target":128,"stress":-150.78356072854186},{"source":108,"area":1,"density":0.284,"id":"e757","stiffness":30000000,"target":126,"stress":-1378.3082065254953},{"source":72,"area":1,"density":0.284,"id":"e758","stiffness":30000000,"target":124,"stress":-396.5579650788556},{"source":119,"area":1,"density":0.284,"id":"e759","stiffness":30000000,"target":122,"stress":-1196.4461786627112},{"source":508,"area":1,"density":0.284,"id":"e760","stiffness":30000000,"target":518,"stress":-1346.3113808687551},{"source":72,"area":1,"density":0.284,"id":"e761","stiffness":30000000,"target":520,"stress":-370.8411541992917},{"source":489,"area":1,"density":0.284,"id":"e762","stiffness":30000000,"target":522,"stress":-1312.4094776406191},{"source":499,"area":1,"density":0.284,"id":"e763","stiffness":30000000,"target":524,"stress":-373.29940102798935},{"source":554,"area":1,"density":0.284,"id":"e764","stiffness":30000000,"target":555,"stress":-231.928784714086},{"source":555,"area":1,"density":0.284,"id":"e765","stiffness":30000000,"target":556,"stress":-656.5582727823703},{"source":556,"area":1,"density":0.284,"id":"e766","stiffness":30000000,"target":557,"stress":-652.9091561664295},{"source":557,"area":1,"density":0.284,"id":"e767","stiffness":30000000,"target":558,"stress":136.92740246031326},{"source":558,"area":1,"density":0.284,"id":"e768","stiffness":30000000,"target":559,"stress":-203.07806605262334},{"source":559,"area":1,"density":0.284,"id":"e769","stiffness":30000000,"target":560,"stress":-555.1144759476276},{"source":560,"area":1,"density":0.284,"id":"e770","stiffness":30000000,"target":561,"stress":-563.1796523639639},{"source":561,"area":1,"density":0.284,"id":"e771","stiffness":30000000,"target":554,"stress":131.62263779713425},{"source":536,"area":1,"density":0.284,"id":"e772","stiffness":30000000,"target":559,"stress":51.9859255861031},{"source":526,"area":1,"density":0.284,"id":"e773","stiffness":30000000,"target":557,"stress":-931.48709001038},{"source":120,"area":1,"density":0.284,"id":"e774","stiffness":30000000,"target":555,"stress":90.15188310353076},{"source":545,"area":1,"density":0.284,"id":"e775","stiffness":30000000,"target":561,"stress":-869.531756968237},{"source":562,"area":1,"density":0.284,"id":"e776","stiffness":30000000,"target":563,"stress":3.3431360946930395},{"source":563,"area":1,"density":0.284,"id":"e777","stiffness":30000000,"target":470,"stress":34.480161195561834},{"source":470,"area":1,"density":0.284,"id":"e778","stiffness":30000000,"target":564,"stress":10.490812780183889},{"source":564,"area":1,"density":0.284,"id":"e779","stiffness":30000000,"target":565,"stress":-4.614141948248767},{"source":565,"area":1,"density":0.284,"id":"e780","stiffness":30000000,"target":566,"stress":-14.618614870010246},{"source":566,"area":1,"density":0.284,"id":"e781","stiffness":30000000,"target":466,"stress":72.27453478987252},{"source":466,"area":1,"density":0.284,"id":"e782","stiffness":30000000,"target":567,"stress":5.8954404149362745},{"source":567,"area":1,"density":0.284,"id":"e783","stiffness":30000000,"target":562,"stress":51.97420832672733},{"source":451,"area":1,"density":0.284,"id":"e784","stiffness":30000000,"target":563,"stress":27.391639986851047},{"source":462,"area":1,"density":0.284,"id":"e785","stiffness":30000000,"target":564,"stress":-17.946517301779433},{"source":12,"area":1,"density":0.284,"id":"e786","stiffness":30000000,"target":566,"stress":86.9314724151031},{"source":463,"area":1,"density":0.284,"id":"e787","stiffness":30000000,"target":567,"stress":40.6657003917327},{"source":571,"area":1,"density":0.284,"id":"e788","stiffness":30000000,"target":572,"stress":-673.0718497307521},{"source":572,"area":1,"density":0.284,"id":"e789","stiffness":30000000,"target":573,"stress":95.28650687657722},{"source":573,"area":1,"density":0.284,"id":"e790","stiffness":30000000,"target":574,"stress":129.9637431582964},{"source":574,"area":1,"density":0.284,"id":"e791","stiffness":30000000,"target":575,"stress":-642.5759208102573},{"source":575,"area":1,"density":0.284,"id":"e792","stiffness":30000000,"target":576,"stress":-638.2355126639778},{"source":576,"area":1,"density":0.284,"id":"e793","stiffness":30000000,"target":577,"stress":109.18481358404914},{"source":577,"area":1,"density":0.284,"id":"e794","stiffness":30000000,"target":578,"stress":84.16086976555508},{"source":578,"area":1,"density":0.284,"id":"e795","stiffness":30000000,"target":571,"stress":-680.1790733911295},{"source":570,"area":1,"density":0.284,"id":"e796","stiffness":30000000,"target":572,"stress":-277.0853250986459},{"source":568,"area":1,"density":0.284,"id":"e797","stiffness":30000000,"target":574,"stress":-751.6221678316087},{"source":569,"area":1,"density":0.284,"id":"e798","stiffness":30000000,"target":576,"stress":-234.78531508564083},{"source":451,"area":1,"density":0.284,"id":"e799","stiffness":30000000,"target":578,"stress":-885.3539623530793},{"source":581,"area":1,"density":0.284,"id":"e800","stiffness":30000000,"target":582,"stress":8.517711412438969},{"source":582,"area":1,"density":0.284,"id":"e801","stiffness":30000000,"target":583,"stress":53.66178073487974},{"source":583,"area":1,"density":0.284,"id":"e802","stiffness":30000000,"target":584,"stress":-29.273437574743475},{"source":584,"area":1,"density":0.284,"id":"e803","stiffness":30000000,"target":585,"stress":21.594141271642087},{"source":585,"area":1,"density":0.284,"id":"e804","stiffness":30000000,"target":586,"stress":40.85401088257292},{"source":586,"area":1,"density":0.284,"id":"e805","stiffness":30000000,"target":587,"stress":19.81204859504634},{"source":587,"area":1,"density":0.284,"id":"e806","stiffness":30000000,"target":588,"stress":-22.986153100439328},{"source":588,"area":1,"density":0.284,"id":"e807","stiffness":30000000,"target":581,"stress":-27.839292837364646},{"source":164,"area":1,"density":0.284,"id":"e808","stiffness":30000000,"target":586,"stress":-12.27246940356549},{"source":579,"area":1,"density":0.284,"id":"e809","stiffness":30000000,"target":588,"stress":9.403273337326373},{"source":568,"area":1,"density":0.284,"id":"e810","stiffness":30000000,"target":582,"stress":50.65785028089433},{"source":580,"area":1,"density":0.284,"id":"e811","stiffness":30000000,"target":584,"stress":68.50827893629123},{"source":166,"area":1,"density":0.284,"id":"e812","stiffness":30000000,"target":174,"stress":-309.03174654646483},{"source":12,"area":1,"density":0.284,"id":"e813","stiffness":30000000,"target":172,"stress":-879.4789742102519},{"source":165,"area":1,"density":0.284,"id":"e814","stiffness":30000000,"target":170,"stress":-112.49061752512235},{"source":164,"area":1,"density":0.284,"id":"e815","stiffness":30000000,"target":168,"stress":-911.7619138683322},{"source":589,"area":1,"density":0.284,"id":"e816","stiffness":30000000,"target":590,"stress":75.32854294975553},{"source":590,"area":1,"density":0.284,"id":"e817","stiffness":30000000,"target":591,"stress":-343.9490380795137},{"source":591,"area":1,"density":0.284,"id":"e818","stiffness":30000000,"target":592,"stress":-338.9281591733689},{"source":592,"area":1,"density":0.284,"id":"e819","stiffness":30000000,"target":593,"stress":-134.76639145816},{"source":593,"area":1,"density":0.284,"id":"e820","stiffness":30000000,"target":594,"stress":102.54578167277529},{"source":594,"area":1,"density":0.284,"id":"e821","stiffness":30000000,"target":595,"stress":-377.30902081595565},{"source":595,"area":1,"density":0.284,"id":"e822","stiffness":30000000,"target":596,"stress":-382.86276164864836},{"source":596,"area":1,"density":0.284,"id":"e823","stiffness":30000000,"target":589,"stress":-173.88025053204805},{"source":579,"area":1,"density":0.284,"id":"e824","stiffness":30000000,"target":594,"stress":-583.2888167041338},{"source":165,"area":1,"density":0.284,"id":"e825","stiffness":30000000,"target":596,"stress":10.008058492751143},{"source":462,"area":1,"density":0.284,"id":"e826","stiffness":30000000,"target":590,"stress":-549.13866092509},{"source":569,"area":1,"density":0.284,"id":"e827","stiffness":30000000,"target":592,"stress":13.53228970720967},{"source":597,"area":1,"density":0.284,"id":"e828","stiffness":30000000,"target":598,"stress":74.6037737602467},{"source":598,"area":1,"density":0.284,"id":"e829","stiffness":30000000,"target":599,"stress":-663.9486428948552},{"source":599,"area":1,"density":0.284,"id":"e830","stiffness":30000000,"target":600,"stress":-691.2560467648201},{"source":600,"area":1,"density":0.284,"id":"e831","stiffness":30000000,"target":601,"stress":26.875376372015904},{"source":601,"area":1,"density":0.284,"id":"e832","stiffness":30000000,"target":602,"stress":41.24008724964558},{"source":602,"area":1,"density":0.284,"id":"e833","stiffness":30000000,"target":603,"stress":-665.8921080718235},{"source":603,"area":1,"density":0.284,"id":"e834","stiffness":30000000,"target":604,"stress":-676.708265545564},{"source":604,"area":1,"density":0.284,"id":"e835","stiffness":30000000,"target":597,"stress":56.93721065052414},{"source":570,"area":1,"density":0.284,"id":"e836","stiffness":30000000,"target":602,"stress":-214.54622707515148},{"source":463,"area":1,"density":0.284,"id":"e837","stiffness":30000000,"target":600,"stress":-980.8103389502095},{"source":166,"area":1,"density":0.284,"id":"e838","stiffness":30000000,"target":598,"stress":-134.32206685315415},{"source":580,"area":1,"density":0.284,"id":"e839","stiffness":30000000,"target":604,"stress":-890.8899334306492},{"source":509,"area":1,"density":0.284,"id":"e840","stiffness":30000000,"target":605,"stress":-11.321606700934334},{"source":605,"area":1,"density":0.284,"id":"e841","stiffness":30000000,"target":515,"stress":76.40703561183643},{"source":515,"area":1,"density":0.284,"id":"e842","stiffness":30000000,"target":606,"stress":4.5627159823572585},{"source":606,"area":1,"density":0.284,"id":"e843","stiffness":30000000,"target":513,"stress":59.00830362784906},{"source":513,"area":1,"density":0.284,"id":"e844","stiffness":30000000,"target":607,"stress":-14.944453529009223},{"source":607,"area":1,"density":0.284,"id":"e845","stiffness":30000000,"target":511,"stress":70.80867511656902},{"source":498,"area":1,"density":0.284,"id":"e846","stiffness":30000000,"target":605,"stress":84.63213908299957},{"source":463,"area":1,"density":0.284,"id":"e847","stiffness":30000000,"target":606,"stress":49.16866087491042},{"source":71,"area":1,"density":0.284,"id":"e848","stiffness":30000000,"target":607,"stress":80.808130302212},{"source":508,"area":1,"density":0.284,"id":"e849","stiffness":30000000,"target":510,"stress":64.78188718756361},{"source":610,"area":1,"density":0.284,"id":"e850","stiffness":30000000,"target":611,"stress":-661.9112970358685},{"source":611,"area":1,"density":0.284,"id":"e851","stiffness":30000000,"target":612,"stress":59.676806121564205},{"source":612,"area":1,"density":0.284,"id":"e852","stiffness":30000000,"target":613,"stress":78.21419168229266},{"source":613,"area":1,"density":0.284,"id":"e853","stiffness":30000000,"target":614,"stress":-660.8491281399798},{"source":614,"area":1,"density":0.284,"id":"e854","stiffness":30000000,"target":615,"stress":-667.9281895762521},{"source":615,"area":1,"density":0.284,"id":"e855","stiffness":30000000,"target":616,"stress":54.39500941628784},{"source":616,"area":1,"density":0.284,"id":"e856","stiffness":30000000,"target":617,"stress":69.06170729373503},{"source":617,"area":1,"density":0.284,"id":"e857","stiffness":30000000,"target":610,"stress":-664.5751226878854},{"source":609,"area":1,"density":0.284,"id":"e858","stiffness":30000000,"target":611,"stress":-268.18913876130506},{"source":608,"area":1,"density":0.284,"id":"e859","stiffness":30000000,"target":613,"stress":-823.8996479654696},{"source":570,"area":1,"density":0.284,"id":"e860","stiffness":30000000,"target":615,"stress":-310.11941283195284},{"source":498,"area":1,"density":0.284,"id":"e861","stiffness":30000000,"target":617,"stress":-863.7116437796124},{"source":619,"area":1,"density":0.284,"id":"e862","stiffness":30000000,"target":620,"stress":55.149208805332016},{"source":620,"area":1,"density":0.284,"id":"e863","stiffness":30000000,"target":621,"stress":73.63146582733913},{"source":621,"area":1,"density":0.284,"id":"e864","stiffness":30000000,"target":622,"stress":-36.19825546575632},{"source":622,"area":1,"density":0.284,"id":"e865","stiffness":30000000,"target":623,"stress":37.819887235852654},{"source":623,"area":1,"density":0.284,"id":"e866","stiffness":30000000,"target":624,"stress":32.86510950969588},{"source":624,"area":1,"density":0.284,"id":"e867","stiffness":30000000,"target":625,"stress":59.56933000547803},{"source":625,"area":1,"density":0.284,"id":"e868","stiffness":30000000,"target":626,"stress":-30.55142613063839},{"source":626,"area":1,"density":0.284,"id":"e869","stiffness":30000000,"target":619,"stress":44.01531889707088},{"source":218,"area":1,"density":0.284,"id":"e870","stiffness":30000000,"target":624,"stress":35.00569778280038},{"source":580,"area":1,"density":0.284,"id":"e871","stiffness":30000000,"target":626,"stress":86.22943435090338},{"source":608,"area":1,"density":0.284,"id":"e872","stiffness":30000000,"target":620,"stress":48.46973372578326},{"source":618,"area":1,"density":0.284,"id":"e873","stiffness":30000000,"target":622,"stress":88.12993391557421},{"source":219,"area":1,"density":0.284,"id":"e874","stiffness":30000000,"target":227,"stress":-319.36857524638725},{"source":71,"area":1,"density":0.284,"id":"e875","stiffness":30000000,"target":225,"stress":-858.5356685102364},{"source":166,"area":1,"density":0.284,"id":"e876","stiffness":30000000,"target":223,"stress":-285.40066518108654},{"source":218,"area":1,"density":0.284,"id":"e877","stiffness":30000000,"target":221,"stress":-818.5401196240105},{"source":580,"area":1,"density":0.284,"id":"e878","stiffness":30000000,"target":598,"stress":-777.8056380559836},{"source":166,"area":1,"density":0.284,"id":"e879","stiffness":30000000,"target":600,"stress":-327.98277718541954},{"source":463,"area":1,"density":0.284,"id":"e880","stiffness":30000000,"target":602,"stress":-845.8284794319424},{"source":570,"area":1,"density":0.284,"id":"e881","stiffness":30000000,"target":604,"stress":-247.1884103239281},{"source":627,"area":1,"density":0.284,"id":"e882","stiffness":30000000,"target":628,"stress":58.40729454789684},{"source":628,"area":1,"density":0.284,"id":"e883","stiffness":30000000,"target":629,"stress":-672.5497664477267},{"source":629,"area":1,"density":0.284,"id":"e884","stiffness":30000000,"target":630,"stress":-665.2336070596729},{"source":630,"area":1,"density":0.284,"id":"e885","stiffness":30000000,"target":631,"stress":43.007564166035},{"source":631,"area":1,"density":0.284,"id":"e886","stiffness":30000000,"target":632,"stress":29.59997892645338},{"source":632,"area":1,"density":0.284,"id":"e887","stiffness":30000000,"target":633,"stress":-685.9219528106488},{"source":633,"area":1,"density":0.284,"id":"e888","stiffness":30000000,"target":634,"stress":-660.499739430777},{"source":634,"area":1,"density":0.284,"id":"e889","stiffness":30000000,"target":627,"stress":72.09894691975487},{"source":609,"area":1,"density":0.284,"id":"e890","stiffness":30000000,"target":632,"stress":-312.14796118154294},{"source":508,"area":1,"density":0.284,"id":"e891","stiffness":30000000,"target":630,"stress":-855.556250132249},{"source":219,"area":1,"density":0.284,"id":"e892","stiffness":30000000,"target":628,"stress":-231.48143388198892},{"source":618,"area":1,"density":0.284,"id":"e893","stiffness":30000000,"target":634,"stress":-785.3413289816742},{"source":552,"area":1,"density":0.284,"id":"e894","stiffness":30000000,"target":635,"stress":3.028915648830434},{"source":635,"area":1,"density":0.284,"id":"e895","stiffness":30000000,"target":550,"stress":51.77801144177969},{"source":550,"area":1,"density":0.284,"id":"e896","stiffness":30000000,"target":636,"stress":-14.21530772968926},{"source":636,"area":1,"density":0.284,"id":"e897","stiffness":30000000,"target":548,"stress":26.14459415061472},{"source":535,"area":1,"density":0.284,"id":"e898","stiffness":30000000,"target":553,"stress":113.7897808197433},{"source":508,"area":1,"density":0.284,"id":"e899","stiffness":30000000,"target":635,"stress":43.50776702857305},{"source":119,"area":1,"density":0.284,"id":"e900","stiffness":30000000,"target":636,"stress":31.067793923418023},{"source":545,"area":1,"density":0.284,"id":"e901","stiffness":30000000,"target":547,"stress":-15.207058359298133},{"source":639,"area":1,"density":0.284,"id":"e902","stiffness":30000000,"target":640,"stress":-641.0813455396689},{"source":640,"area":1,"density":0.284,"id":"e903","stiffness":30000000,"target":641,"stress":128.00845537558382},{"source":641,"area":1,"density":0.284,"id":"e904","stiffness":30000000,"target":642,"stress":89.76844082321858},{"source":642,"area":1,"density":0.284,"id":"e905","stiffness":30000000,"target":643,"stress":-686.7191424456455},{"source":643,"area":1,"density":0.284,"id":"e906","stiffness":30000000,"target":644,"stress":-684.2510043239896},{"source":644,"area":1,"density":0.284,"id":"e907","stiffness":30000000,"target":645,"stress":90.14293332888437},{"source":645,"area":1,"density":0.284,"id":"e908","stiffness":30000000,"target":646,"stress":111.68890625299058},{"source":646,"area":1,"density":0.284,"id":"e909","stiffness":30000000,"target":639,"stress":-646.8703888768763},{"source":638,"area":1,"density":0.284,"id":"e910","stiffness":30000000,"target":640,"stress":-119.25413888752001},{"source":637,"area":1,"density":0.284,"id":"e911","stiffness":30000000,"target":642,"stress":-927.9585277390837},{"source":609,"area":1,"density":0.284,"id":"e912","stiffness":30000000,"target":644,"stress":-251.20231999196318},{"source":535,"area":1,"density":0.284,"id":"e913","stiffness":30000000,"target":646,"stress":-842.533583166421},{"source":648,"area":1,"density":0.284,"id":"e914","stiffness":30000000,"target":649,"stress":34.10344137254538},{"source":649,"area":1,"density":0.284,"id":"e915","stiffness":30000000,"target":650,"stress":43.07064634025368},{"source":650,"area":1,"density":0.284,"id":"e916","stiffness":30000000,"target":651,"stress":-22.52823311350124},{"source":651,"area":1,"density":0.284,"id":"e917","stiffness":30000000,"target":652,"stress":-10.520155115622739},{"source":652,"area":1,"density":0.284,"id":"e918","stiffness":30000000,"target":653,"stress":19.471317118412077},{"source":653,"area":1,"density":0.284,"id":"e919","stiffness":30000000,"target":654,"stress":64.89528462552246},{"source":654,"area":1,"density":0.284,"id":"e920","stiffness":30000000,"target":655,"stress":47.44077815031351},{"source":655,"area":1,"density":0.284,"id":"e921","stiffness":30000000,"target":648,"stress":1.5877929439635468},{"source":261,"area":1,"density":0.284,"id":"e922","stiffness":30000000,"target":653,"stress":53.7528515253349},{"source":618,"area":1,"density":0.284,"id":"e923","stiffness":30000000,"target":655,"stress":99.1137663186321},{"source":637,"area":1,"density":0.284,"id":"e924","stiffness":30000000,"target":649,"stress":-0.5664397309383206},{"source":647,"area":1,"density":0.284,"id":"e925","stiffness":30000000,"target":651,"stress":22.36293419785485},{"source":262,"area":1,"density":0.284,"id":"e926","stiffness":30000000,"target":270,"stress":-239.68691901561095},{"source":119,"area":1,"density":0.284,"id":"e927","stiffness":30000000,"target":268,"stress":-870.8851314898039},{"source":219,"area":1,"density":0.284,"id":"e928","stiffness":30000000,"target":266,"stress":-292.59884068124705},{"source":261,"area":1,"density":0.284,"id":"e929","stiffness":30000000,"target":264,"stress":-737.1380637875254},{"source":618,"area":1,"density":0.284,"id":"e930","stiffness":30000000,"target":628,"stress":-873.2940698252223},{"source":219,"area":1,"density":0.284,"id":"e931","stiffness":30000000,"target":630,"stress":-220.41470751475927},{"source":508,"area":1,"density":0.284,"id":"e932","stiffness":30000000,"target":632,"stress":-961.5545684259783},{"source":609,"area":1,"density":0.284,"id":"e933","stiffness":30000000,"target":634,"stress":-149.40811024574953},{"source":656,"area":1,"density":0.284,"id":"e934","stiffness":30000000,"target":657,"stress":-121.28637603984107},{"source":657,"area":1,"density":0.284,"id":"e935","stiffness":30000000,"target":658,"stress":-342.0653385330164},{"source":658,"area":1,"density":0.284,"id":"e936","stiffness":30000000,"target":659,"stress":-341.5186306407254},{"source":659,"area":1,"density":0.284,"id":"e937","stiffness":30000000,"target":660,"stress":88.68211699190255},{"source":660,"area":1,"density":0.284,"id":"e938","stiffness":30000000,"target":661,"stress":-154.6545084974687},{"source":661,"area":1,"density":0.284,"id":"e939","stiffness":30000000,"target":662,"stress":-377.7409037319339},{"source":662,"area":1,"density":0.284,"id":"e940","stiffness":30000000,"target":663,"stress":-365.9294569305566},{"source":663,"area":1,"density":0.284,"id":"e941","stiffness":30000000,"target":656,"stress":111.43298414376032},{"source":638,"area":1,"density":0.284,"id":"e942","stiffness":30000000,"target":661,"stress":30.662827349303775},{"source":545,"area":1,"density":0.284,"id":"e943","stiffness":30000000,"target":659,"stress":-548.9174283507597},{"source":262,"area":1,"density":0.284,"id":"e944","stiffness":30000000,"target":657,"stress":33.154648612872535},{"source":647,"area":1,"density":0.284,"id":"e945","stiffness":30000000,"target":663,"stress":-573.1352825319038},{"source":664,"area":1,"density":0.284,"id":"e946","stiffness":30000000,"target":665,"stress":-21.856546866030502},{"source":665,"area":1,"density":0.284,"id":"e947","stiffness":30000000,"target":587,"stress":31.56165199944039},{"source":587,"area":1,"density":0.284,"id":"e948","stiffness":30000000,"target":666,"stress":20.365809789841908},{"source":666,"area":1,"density":0.284,"id":"e949","stiffness":30000000,"target":667,"stress":18.074665845462604},{"source":667,"area":1,"density":0.284,"id":"e950","stiffness":30000000,"target":668,"stress":-23.72089394452397},{"source":668,"area":1,"density":0.284,"id":"e951","stiffness":30000000,"target":583,"stress":62.12833929308327},{"source":583,"area":1,"density":0.284,"id":"e952","stiffness":30000000,"target":669,"stress":19.03097056506628},{"source":669,"area":1,"density":0.284,"id":"e953","stiffness":30000000,"target":664,"stress":51.6302625263741},{"source":568,"area":1,"density":0.284,"id":"e954","stiffness":30000000,"target":665,"stress":43.010796453638946},{"source":579,"area":1,"density":0.284,"id":"e955","stiffness":30000000,"target":666,"stress":-13.792778410842422},{"source":164,"area":1,"density":0.284,"id":"e956","stiffness":30000000,"target":668,"stress":80.99479551019074},{"source":580,"area":1,"density":0.284,"id":"e957","stiffness":30000000,"target":669,"stress":16.228823671397787},{"source":673,"area":1,"density":0.284,"id":"e958","stiffness":30000000,"target":674,"stress":-334.71897803054605},{"source":674,"area":1,"density":0.284,"id":"e959","stiffness":30000000,"target":675,"stress":44.6402335771904},{"source":675,"area":1,"density":0.284,"id":"e960","stiffness":30000000,"target":676,"stress":63.84639803227899},{"source":676,"area":1,"density":0.284,"id":"e961","stiffness":30000000,"target":677,"stress":-311.5998334284807},{"source":677,"area":1,"density":0.284,"id":"e962","stiffness":30000000,"target":678,"stress":-304.48279466097756},{"source":678,"area":1,"density":0.284,"id":"e963","stiffness":30000000,"target":679,"stress":48.04319998194595},{"source":679,"area":1,"density":0.284,"id":"e964","stiffness":30000000,"target":680,"stress":36.2008445507584},{"source":680,"area":1,"density":0.284,"id":"e965","stiffness":30000000,"target":673,"stress":-342.3745389297008},{"source":672,"area":1,"density":0.284,"id":"e966","stiffness":30000000,"target":674,"stress":-197.00869863965858},{"source":670,"area":1,"density":0.284,"id":"e967","stiffness":30000000,"target":676,"stress":-310.1562854557863},{"source":671,"area":1,"density":0.284,"id":"e968","stiffness":30000000,"target":678,"stress":-174.19946554211157},{"source":568,"area":1,"density":0.284,"id":"e969","stiffness":30000000,"target":680,"stress":-403.51714252557764},{"source":683,"area":1,"density":0.284,"id":"e970","stiffness":30000000,"target":684,"stress":-28.960732346462283},{"source":684,"area":1,"density":0.284,"id":"e971","stiffness":30000000,"target":685,"stress":97.90613168082719},{"source":685,"area":1,"density":0.284,"id":"e972","stiffness":30000000,"target":686,"stress":65.42668665466549},{"source":686,"area":1,"density":0.284,"id":"e973","stiffness":30000000,"target":687,"stress":44.777400710896146},{"source":687,"area":1,"density":0.284,"id":"e974","stiffness":30000000,"target":688,"stress":7.3742637522828485},{"source":688,"area":1,"density":0.284,"id":"e975","stiffness":30000000,"target":689,"stress":64.25910921133935},{"source":689,"area":1,"density":0.284,"id":"e976","stiffness":30000000,"target":690,"stress":42.717901837446824},{"source":690,"area":1,"density":0.284,"id":"e977","stiffness":30000000,"target":683,"stress":-3.2045237895497594},{"source":306,"area":1,"density":0.284,"id":"e978","stiffness":30000000,"target":688,"stress":55.68685013337423},{"source":681,"area":1,"density":0.284,"id":"e979","stiffness":30000000,"target":690,"stress":-50.25030890270627},{"source":670,"area":1,"density":0.284,"id":"e980","stiffness":30000000,"target":684,"stress":122.40440372639729},{"source":682,"area":1,"density":0.284,"id":"e981","stiffness":30000000,"target":686,"stress":-27.849789314604873},{"source":308,"area":1,"density":0.284,"id":"e982","stiffness":30000000,"target":316,"stress":-150.55232525381254},{"source":164,"area":1,"density":0.284,"id":"e983","stiffness":30000000,"target":314,"stress":-496.04359356986333},{"source":307,"area":1,"density":0.284,"id":"e984","stiffness":30000000,"target":312,"stress":17.6698714087911},{"source":306,"area":1,"density":0.284,"id":"e985","stiffness":30000000,"target":310,"stress":-471.42586555629475},{"source":691,"area":1,"density":0.284,"id":"e986","stiffness":30000000,"target":692,"stress":55.0952750562494},{"source":692,"area":1,"density":0.284,"id":"e987","stiffness":30000000,"target":693,"stress":-131.5630349662498},{"source":693,"area":1,"density":0.284,"id":"e988","stiffness":30000000,"target":694,"stress":-153.8942435020405},{"source":694,"area":1,"density":0.284,"id":"e989","stiffness":30000000,"target":695,"stress":-55.5729076779436},{"source":695,"area":1,"density":0.284,"id":"e990","stiffness":30000000,"target":696,"stress":88.56877238276036},{"source":696,"area":1,"density":0.284,"id":"e991","stiffness":30000000,"target":697,"stress":-206.90725702197528},{"source":697,"area":1,"density":0.284,"id":"e992","stiffness":30000000,"target":698,"stress":-184.2050260923413},{"source":698,"area":1,"density":0.284,"id":"e993","stiffness":30000000,"target":691,"stress":-72.70331730036551},{"source":681,"area":1,"density":0.284,"id":"e994","stiffness":30000000,"target":696,"stress":-357.7406509770913},{"source":307,"area":1,"density":0.284,"id":"e995","stiffness":30000000,"target":698,"stress":-7.357599203332482},{"source":579,"area":1,"density":0.284,"id":"e996","stiffness":30000000,"target":692,"stress":-244.35059883543394},{"source":671,"area":1,"density":0.284,"id":"e997","stiffness":30000000,"target":694,"stress":19.937963402971235},{"source":699,"area":1,"density":0.284,"id":"e998","stiffness":30000000,"target":700,"stress":113.4778218033651},{"source":700,"area":1,"density":0.284,"id":"e999","stiffness":30000000,"target":701,"stress":-327.58261367495635},{"source":701,"area":1,"density":0.284,"id":"e1000","stiffness":30000000,"target":702,"stress":-343.6943169814724},{"source":702,"area":1,"density":0.284,"id":"e1001","stiffness":30000000,"target":703,"stress":66.5852760206366},{"source":703,"area":1,"density":0.284,"id":"e1002","stiffness":30000000,"target":704,"stress":75.72674630362471},{"source":704,"area":1,"density":0.284,"id":"e1003","stiffness":30000000,"target":705,"stress":-328.93608670911505},{"source":705,"area":1,"density":0.284,"id":"e1004","stiffness":30000000,"target":706,"stress":-335.180948702875},{"source":706,"area":1,"density":0.284,"id":"e1005","stiffness":30000000,"target":699,"stress":106.43978559757936},{"source":672,"area":1,"density":0.284,"id":"e1006","stiffness":30000000,"target":704,"stress":-32.50922823425347},{"source":580,"area":1,"density":0.284,"id":"e1007","stiffness":30000000,"target":702,"stress":-484.83549595249264},{"source":308,"area":1,"density":0.284,"id":"e1008","stiffness":30000000,"target":700,"stress":48.60274423688866},{"source":682,"area":1,"density":0.284,"id":"e1009","stiffness":30000000,"target":706,"stress":-403.0839353575809},{"source":619,"area":1,"density":0.284,"id":"e1010","stiffness":30000000,"target":707,"stress":-36.921135299312425},{"source":707,"area":1,"density":0.284,"id":"e1011","stiffness":30000000,"target":625,"stress":80.88139073968858},{"source":625,"area":1,"density":0.284,"id":"e1012","stiffness":30000000,"target":708,"stress":28.34798734241812},{"source":708,"area":1,"density":0.284,"id":"e1013","stiffness":30000000,"target":623,"stress":46.23802213445138},{"source":623,"area":1,"density":0.284,"id":"e1014","stiffness":30000000,"target":709,"stress":-43.2291446875879},{"source":709,"area":1,"density":0.284,"id":"e1015","stiffness":30000000,"target":621,"stress":76.12250380517048},{"source":608,"area":1,"density":0.284,"id":"e1016","stiffness":30000000,"target":707,"stress":107.17643352485243},{"source":580,"area":1,"density":0.284,"id":"e1017","stiffness":30000000,"target":708,"stress":3.2181517483341486},{"source":218,"area":1,"density":0.284,"id":"e1018","stiffness":30000000,"target":709,"stress":106.27156764538495},{"source":618,"area":1,"density":0.284,"id":"e1019","stiffness":30000000,"target":620,"stress":16.081688520798423},{"source":712,"area":1,"density":0.284,"id":"e1020","stiffness":30000000,"target":713,"stress":-324.98005848443023},{"source":713,"area":1,"density":0.284,"id":"e1021","stiffness":30000000,"target":714,"stress":26.939908264943995},{"source":714,"area":1,"density":0.284,"id":"e1022","stiffness":30000000,"target":715,"stress":43.723963685446556},{"source":715,"area":1,"density":0.284,"id":"e1023","stiffness":30000000,"target":716,"stress":-318.11653208821843},{"source":716,"area":1,"density":0.284,"id":"e1024","stiffness":30000000,"target":717,"stress":-323.9530862220428},{"source":717,"area":1,"density":0.284,"id":"e1025","stiffness":30000000,"target":718,"stress":22.265987251816707},{"source":718,"area":1,"density":0.284,"id":"e1026","stiffness":30000000,"target":719,"stress":35.11140832293001},{"source":719,"area":1,"density":0.284,"id":"e1027","stiffness":30000000,"target":712,"stress":-326.8800581734211},{"source":711,"area":1,"density":0.284,"id":"e1028","stiffness":30000000,"target":713,"stress":-155.4607101676523},{"source":710,"area":1,"density":0.284,"id":"e1029","stiffness":30000000,"target":715,"stress":-365.08103930434453},{"source":672,"area":1,"density":0.284,"id":"e1030","stiffness":30000000,"target":717,"stress":-185.61016275022905},{"source":608,"area":1,"density":0.284,"id":"e1031","stiffness":30000000,"target":719,"stress":-408.65789213044087},{"source":721,"area":1,"density":0.284,"id":"e1032","stiffness":30000000,"target":722,"stress":-9.788993816529764},{"source":722,"area":1,"density":0.284,"id":"e1033","stiffness":30000000,"target":723,"stress":59.44967615981329},{"source":723,"area":1,"density":0.284,"id":"e1034","stiffness":30000000,"target":724,"stress":28.912987423212662},{"source":724,"area":1,"density":0.284,"id":"e1035","stiffness":30000000,"target":725,"stress":66.72941528683612},{"source":725,"area":1,"density":0.284,"id":"e1036","stiffness":30000000,"target":726,"stress":-10.494125952068135},{"source":726,"area":1,"density":0.284,"id":"e1037","stiffness":30000000,"target":727,"stress":60.509999942420734},{"source":727,"area":1,"density":0.284,"id":"e1038","stiffness":30000000,"target":728,"stress":27.69237759038108},{"source":728,"area":1,"density":0.284,"id":"e1039","stiffness":30000000,"target":721,"stress":63.60325344235691},{"source":360,"area":1,"density":0.284,"id":"e1040","stiffness":30000000,"target":726,"stress":64.98795328979229},{"source":682,"area":1,"density":0.284,"id":"e1041","stiffness":30000000,"target":728,"stress":28.791248505775517},{"source":710,"area":1,"density":0.284,"id":"e1042","stiffness":30000000,"target":722,"stress":63.39578292974157},{"source":720,"area":1,"density":0.284,"id":"e1043","stiffness":30000000,"target":724,"stress":29.65310925495535},{"source":361,"area":1,"density":0.284,"id":"e1044","stiffness":30000000,"target":369,"stress":-201.21805927543136},{"source":218,"area":1,"density":0.284,"id":"e1045","stiffness":30000000,"target":367,"stress":-402.86834237652045},{"source":308,"area":1,"density":0.284,"id":"e1046","stiffness":30000000,"target":365,"stress":-175.93796715116275},{"source":360,"area":1,"density":0.284,"id":"e1047","stiffness":30000000,"target":363,"stress":-349.7635150686853},{"source":682,"area":1,"density":0.284,"id":"e1048","stiffness":30000000,"target":700,"stress":-331.4655971451036},{"source":308,"area":1,"density":0.284,"id":"e1049","stiffness":30000000,"target":702,"stress":-111.84969430140471},{"source":580,"area":1,"density":0.284,"id":"e1050","stiffness":30000000,"target":704,"stress":-394.66908430391356},{"source":672,"area":1,"density":0.284,"id":"e1051","stiffness":30000000,"target":706,"stress":-11.775452190615056},{"source":729,"area":1,"density":0.284,"id":"e1052","stiffness":30000000,"target":730,"stress":108.65396804809747},{"source":730,"area":1,"density":0.284,"id":"e1053","stiffness":30000000,"target":731,"stress":-337.0238298933726},{"source":731,"area":1,"density":0.284,"id":"e1054","stiffness":30000000,"target":732,"stress":-328.8151730815428},{"source":732,"area":1,"density":0.284,"id":"e1055","stiffness":30000000,"target":733,"stress":83.60498702188474},{"source":733,"area":1,"density":0.284,"id":"e1056","stiffness":30000000,"target":734,"stress":70.57592831234983},{"source":734,"area":1,"density":0.284,"id":"e1057","stiffness":30000000,"target":735,"stress":-343.66366926959313},{"source":735,"area":1,"density":0.284,"id":"e1058","stiffness":30000000,"target":736,"stress":-325.60994621483275},{"source":736,"area":1,"density":0.284,"id":"e1059","stiffness":30000000,"target":729,"stress":116.83610086148718},{"source":711,"area":1,"density":0.284,"id":"e1060","stiffness":30000000,"target":734,"stress":-106.29316242929376},{"source":618,"area":1,"density":0.284,"id":"e1061","stiffness":30000000,"target":732,"stress":-390.9558767769832},{"source":361,"area":1,"density":0.284,"id":"e1062","stiffness":30000000,"target":730,"stress":-8.915673405462428},{"source":720,"area":1,"density":0.284,"id":"e1063","stiffness":30000000,"target":736,"stress":-329.9298103775749},{"source":654,"area":1,"density":0.284,"id":"e1064","stiffness":30000000,"target":737,"stress":20.763826098435715},{"source":737,"area":1,"density":0.284,"id":"e1065","stiffness":30000000,"target":652,"stress":47.42396138887869},{"source":652,"area":1,"density":0.284,"id":"e1066","stiffness":30000000,"target":738,"stress":-43.06772892437946},{"source":738,"area":1,"density":0.284,"id":"e1067","stiffness":30000000,"target":650,"stress":39.40220169398858},{"source":637,"area":1,"density":0.284,"id":"e1068","stiffness":30000000,"target":655,"stress":121.76693606461978},{"source":618,"area":1,"density":0.284,"id":"e1069","stiffness":30000000,"target":737,"stress":10.949518163132081},{"source":261,"area":1,"density":0.284,"id":"e1070","stiffness":30000000,"target":738,"stress":65.41713622155609},{"source":647,"area":1,"density":0.284,"id":"e1071","stiffness":30000000,"target":649,"stress":-23.716005693951956},{"source":741,"area":1,"density":0.284,"id":"e1072","stiffness":30000000,"target":742,"stress":-309.80403897414084},{"source":742,"area":1,"density":0.284,"id":"e1073","stiffness":30000000,"target":743,"stress":71.97522583387685},{"source":743,"area":1,"density":0.284,"id":"e1074","stiffness":30000000,"target":744,"stress":47.24128814458825},{"source":744,"area":1,"density":0.284,"id":"e1075","stiffness":30000000,"target":745,"stress":-342.0760192526687},{"source":745,"area":1,"density":0.284,"id":"e1076","stiffness":30000000,"target":746,"stress":-339.6740188079767},{"source":746,"area":1,"density":0.284,"id":"e1077","stiffness":30000000,"target":747,"stress":46.75191368362978},{"source":747,"area":1,"density":0.284,"id":"e1078","stiffness":30000000,"target":748,"stress":44.96690662580823},{"source":748,"area":1,"density":0.284,"id":"e1079","stiffness":30000000,"target":741,"stress":-314.3412156601143},{"source":740,"area":1,"density":0.284,"id":"e1080","stiffness":30000000,"target":742,"stress":-9.660789990326023},{"source":739,"area":1,"density":0.284,"id":"e1081","stiffness":30000000,"target":744,"stress":-477.8481475440207},{"source":711,"area":1,"density":0.284,"id":"e1082","stiffness":30000000,"target":746,"stress":-104.53745094749101},{"source":637,"area":1,"density":0.284,"id":"e1083","stiffness":30000000,"target":748,"stress":-443.60022468575},{"source":750,"area":1,"density":0.284,"id":"e1084","stiffness":30000000,"target":751,"stress":2.922103121201099},{"source":751,"area":1,"density":0.284,"id":"e1085","stiffness":30000000,"target":752,"stress":66.76025880899914},{"source":752,"area":1,"density":0.284,"id":"e1086","stiffness":30000000,"target":753,"stress":47.20032747721684},{"source":753,"area":1,"density":0.284,"id":"e1087","stiffness":30000000,"target":754,"stress":4.564509863385036},{"source":754,"area":1,"density":0.284,"id":"e1088","stiffness":30000000,"target":755,"stress":-33.77129041751089},{"source":755,"area":1,"density":0.284,"id":"e1089","stiffness":30000000,"target":756,"stress":101.42645074250528},{"source":756,"area":1,"density":0.284,"id":"e1090","stiffness":30000000,"target":757,"stress":66.677967756187},{"source":757,"area":1,"density":0.284,"id":"e1091","stiffness":30000000,"target":750,"stress":46.30727081914063},{"source":403,"area":1,"density":0.284,"id":"e1092","stiffness":30000000,"target":755,"stress":129.00952557365545},{"source":720,"area":1,"density":0.284,"id":"e1093","stiffness":30000000,"target":757,"stress":-28.04892373795228},{"source":739,"area":1,"density":0.284,"id":"e1094","stiffness":30000000,"target":751,"stress":61.01890311727411},{"source":749,"area":1,"density":0.284,"id":"e1095","stiffness":30000000,"target":753,"stress":-49.44337341653846},{"source":404,"area":1,"density":0.284,"id":"e1096","stiffness":30000000,"target":412,"stress":-181.20383119682097},{"source":261,"area":1,"density":0.284,"id":"e1097","stiffness":30000000,"target":410,"stress":-394.76987131055466},{"source":361,"area":1,"density":0.284,"id":"e1098","stiffness":30000000,"target":408,"stress":-216.32344678929852},{"source":403,"area":1,"density":0.284,"id":"e1099","stiffness":30000000,"target":406,"stress":-294.6714008953175},{"source":720,"area":1,"density":0.284,"id":"e1100","stiffness":30000000,"target":730,"stress":-404.64514389462954},{"source":361,"area":1,"density":0.284,"id":"e1101","stiffness":30000000,"target":732,"stress":-19.66821940701762},{"source":618,"area":1,"density":0.284,"id":"e1102","stiffness":30000000,"target":734,"stress":-480.46117761268874},{"source":711,"area":1,"density":0.284,"id":"e1103","stiffness":30000000,"target":736,"stress":50.635837567813645},{"source":758,"area":1,"density":0.284,"id":"e1104","stiffness":30000000,"target":759,"stress":-44.49162857962047},{"source":759,"area":1,"density":0.284,"id":"e1105","stiffness":30000000,"target":760,"stress":-163.00583237784582},{"source":760,"area":1,"density":0.284,"id":"e1106","stiffness":30000000,"target":761,"stress":-126.22665710975912},{"source":761,"area":1,"density":0.284,"id":"e1107","stiffness":30000000,"target":762,"stress":89.34299888497134},{"source":762,"area":1,"density":0.284,"id":"e1108","stiffness":30000000,"target":763,"stress":-31.8727437756603},{"source":763,"area":1,"density":0.284,"id":"e1109","stiffness":30000000,"target":764,"stress":-186.62251510752972},{"source":764,"area":1,"density":0.284,"id":"e1110","stiffness":30000000,"target":765,"stress":-198.53984493266955},{"source":765,"area":1,"density":0.284,"id":"e1111","stiffness":30000000,"target":758,"stress":102.11456410234481},{"source":740,"area":1,"density":0.284,"id":"e1112","stiffness":30000000,"target":763,"stress":40.955741510777514},{"source":647,"area":1,"density":0.284,"id":"e1113","stiffness":30000000,"target":761,"stress":-251.1314772105031},{"source":404,"area":1,"density":0.284,"id":"e1114","stiffness":30000000,"target":759,"stress":45.933333951124006},{"source":749,"area":1,"density":0.284,"id":"e1115","stiffness":30000000,"target":765,"stress":-357.31239014184507},{"source":769,"area":1,"density":0.284,"id":"e1116","stiffness":30000000,"target":770,"stress":0.0},{"source":770,"area":1,"density":0.284,"id":"e1117","stiffness":30000000,"target":771,"stress":0.0},{"source":771,"area":1,"density":0.284,"id":"e1118","stiffness":30000000,"target":772,"stress":0.0},{"source":772,"area":1,"density":0.284,"id":"e1119","stiffness":30000000,"target":773,"stress":0.0},{"source":773,"area":1,"density":0.284,"id":"e1120","stiffness":30000000,"target":774,"stress":0.0},{"source":774,"area":1,"density":0.284,"id":"e1121","stiffness":30000000,"target":775,"stress":0.0},{"source":775,"area":1,"density":0.284,"id":"e1122","stiffness":30000000,"target":776,"stress":0.0},{"source":776,"area":1,"density":0.284,"id":"e1123","stiffness":30000000,"target":769,"stress":0.0},{"source":766,"area":1,"density":0.284,"id":"e1124","stiffness":30000000,"target":770,"stress":0.0},{"source":767,"area":1,"density":0.284,"id":"e1125","stiffness":30000000,"target":772,"stress":0.0},{"source":440,"area":1,"density":0.284,"id":"e1126","stiffness":30000000,"target":774,"stress":0.0},{"source":768,"area":1,"density":0.284,"id":"e1127","stiffness":30000000,"target":776,"stress":0.0},{"source":780,"area":1,"density":0.284,"id":"e1128","stiffness":30000000,"target":781,"stress":-574.634106174612},{"source":781,"area":1,"density":0.284,"id":"e1129","stiffness":30000000,"target":782,"stress":-451.90814932848406},{"source":782,"area":1,"density":0.284,"id":"e1130","stiffness":30000000,"target":783,"stress":492.14815409948017},{"source":783,"area":1,"density":0.284,"id":"e1131","stiffness":30000000,"target":784,"stress":-547.9091481388891},{"source":784,"area":1,"density":0.284,"id":"e1132","stiffness":30000000,"target":785,"stress":-481.18931734359256},{"source":785,"area":1,"density":0.284,"id":"e1133","stiffness":30000000,"target":786,"stress":-406.2330700586819},{"source":786,"area":1,"density":0.284,"id":"e1134","stiffness":30000000,"target":787,"stress":505.8612091201023},{"source":787,"area":1,"density":0.284,"id":"e1135","stiffness":30000000,"target":780,"stress":-596.3873425364103},{"source":779,"area":1,"density":0.284,"id":"e1136","stiffness":30000000,"target":781,"stress":305.56345613399367},{"source":777,"area":1,"density":0.284,"id":"e1137","stiffness":30000000,"target":783,"stress":-868.2756806584334},{"source":778,"area":1,"density":0.284,"id":"e1138","stiffness":30000000,"target":785,"stress":234.24744463779712},{"source":766,"area":1,"density":0.284,"id":"e1139","stiffness":30000000,"target":787,"stress":-923.5985181395619},{"source":790,"area":1,"density":0.284,"id":"e1140","stiffness":30000000,"target":791,"stress":6.9026297051943155},{"source":791,"area":1,"density":0.284,"id":"e1141","stiffness":30000000,"target":792,"stress":-23.040599990732357},{"source":792,"area":1,"density":0.284,"id":"e1142","stiffness":30000000,"target":793,"stress":-62.04125059779066},{"source":793,"area":1,"density":0.284,"id":"e1143","stiffness":30000000,"target":794,"stress":72.02825382769767},{"source":794,"area":1,"density":0.284,"id":"e1144","stiffness":30000000,"target":795,"stress":23.583304812406098},{"source":795,"area":1,"density":0.284,"id":"e1145","stiffness":30000000,"target":796,"stress":-12.764986503725497},{"source":796,"area":1,"density":0.284,"id":"e1146","stiffness":30000000,"target":797,"stress":-29.02535684884011},{"source":797,"area":1,"density":0.284,"id":"e1147","stiffness":30000000,"target":790,"stress":16.517575890856772},{"source":451,"area":1,"density":0.284,"id":"e1148","stiffness":30000000,"target":795,"stress":-36.73546287385893},{"source":788,"area":1,"density":0.284,"id":"e1149","stiffness":30000000,"target":797,"stress":50.80356056594323},{"source":777,"area":1,"density":0.284,"id":"e1150","stiffness":30000000,"target":791,"stress":-28.662855397163046},{"source":789,"area":1,"density":0.284,"id":"e1151","stiffness":30000000,"target":793,"stress":139.60175653897832},{"source":453,"area":1,"density":0.284,"id":"e1152","stiffness":30000000,"target":461,"stress":-367.8188866846368},{"source":440,"area":1,"density":0.284,"id":"e1153","stiffness":30000000,"target":459,"stress":-1161.4302117509906},{"source":452,"area":1,"density":0.284,"id":"e1154","stiffness":30000000,"target":457,"stress":-212.0180359119095},{"source":451,"area":1,"density":0.284,"id":"e1155","stiffness":30000000,"target":455,"stress":-1429.915583174209},{"source":798,"area":1,"density":0.284,"id":"e1156","stiffness":30000000,"target":799,"stress":144.86204498868088},{"source":799,"area":1,"density":0.284,"id":"e1157","stiffness":30000000,"target":800,"stress":-647.3492348119786},{"source":800,"area":1,"density":0.284,"id":"e1158","stiffness":30000000,"target":801,"stress":-664.2467997674731},{"source":801,"area":1,"density":0.284,"id":"e1159","stiffness":30000000,"target":802,"stress":-207.2659761103737},{"source":802,"area":1,"density":0.284,"id":"e1160","stiffness":30000000,"target":803,"stress":166.4752199062285},{"source":803,"area":1,"density":0.284,"id":"e1161","stiffness":30000000,"target":804,"stress":-609.950382569334},{"source":804,"area":1,"density":0.284,"id":"e1162","stiffness":30000000,"target":805,"stress":-588.6080608992502},{"source":805,"area":1,"density":0.284,"id":"e1163","stiffness":30000000,"target":798,"stress":-203.75741361747947},{"source":788,"area":1,"density":0.284,"id":"e1164","stiffness":30000000,"target":803,"stress":-944.3157742485819},{"source":452,"area":1,"density":0.284,"id":"e1165","stiffness":30000000,"target":805,"stress":58.93902713752008},{"source":767,"area":1,"density":0.284,"id":"e1166","stiffness":30000000,"target":799,"stress":-934.2453118761556},{"source":778,"area":1,"density":0.284,"id":"e1167","stiffness":30000000,"target":801,"stress":124.31345443273725},{"source":806,"area":1,"density":0.284,"id":"e1168","stiffness":30000000,"target":807,"stress":127.30748797313292},{"source":807,"area":1,"density":0.284,"id":"e1169","stiffness":30000000,"target":808,"stress":-1039.2451797146543},{"source":808,"area":1,"density":0.284,"id":"e1170","stiffness":30000000,"target":809,"stress":-1059.3731190625108},{"source":809,"area":1,"density":0.284,"id":"e1171","stiffness":30000000,"target":810,"stress":87.4442419218519},{"source":810,"area":1,"density":0.284,"id":"e1172","stiffness":30000000,"target":811,"stress":166.41069872474293},{"source":811,"area":1,"density":0.284,"id":"e1173","stiffness":30000000,"target":812,"stress":-995.8342224509076},{"source":812,"area":1,"density":0.284,"id":"e1174","stiffness":30000000,"target":813,"stress":-1021.7377210344414},{"source":813,"area":1,"density":0.284,"id":"e1175","stiffness":30000000,"target":806,"stress":151.4477935755068},{"source":779,"area":1,"density":0.284,"id":"e1176","stiffness":30000000,"target":811,"stress":-79.764610413611},{"source":768,"area":1,"density":0.284,"id":"e1177","stiffness":30000000,"target":809,"stress":-1445.936819620732},{"source":453,"area":1,"density":0.284,"id":"e1178","stiffness":30000000,"target":807,"stress":-350.60088420370823},{"source":789,"area":1,"density":0.284,"id":"e1179","stiffness":30000000,"target":813,"stress":-1277.7725418817258},{"source":816,"area":1,"density":0.284,"id":"e1180","stiffness":30000000,"target":817,"stress":0.0},{"source":817,"area":1,"density":0.284,"id":"e1181","stiffness":30000000,"target":818,"stress":0.0},{"source":818,"area":1,"density":0.284,"id":"e1182","stiffness":30000000,"target":819,"stress":0.0},{"source":819,"area":1,"density":0.284,"id":"e1183","stiffness":30000000,"target":820,"stress":0.0},{"source":820,"area":1,"density":0.284,"id":"e1184","stiffness":30000000,"target":821,"stress":0.0},{"source":821,"area":1,"density":0.284,"id":"e1185","stiffness":30000000,"target":822,"stress":0.0},{"source":822,"area":1,"density":0.284,"id":"e1186","stiffness":30000000,"target":823,"stress":0.0},{"source":823,"area":1,"density":0.284,"id":"e1187","stiffness":30000000,"target":816,"stress":0.0},{"source":814,"area":1,"density":0.284,"id":"e1188","stiffness":30000000,"target":817,"stress":0.0},{"source":768,"area":1,"density":0.284,"id":"e1189","stiffness":30000000,"target":819,"stress":0.0},{"source":488,"area":1,"density":0.284,"id":"e1190","stiffness":30000000,"target":821,"stress":0.0},{"source":815,"area":1,"density":0.284,"id":"e1191","stiffness":30000000,"target":823,"stress":0.0},{"source":826,"area":1,"density":0.284,"id":"e1192","stiffness":30000000,"target":827,"stress":-521.6167503131622},{"source":827,"area":1,"density":0.284,"id":"e1193","stiffness":30000000,"target":828,"stress":-481.8167480275192},{"source":828,"area":1,"density":0.284,"id":"e1194","stiffness":30000000,"target":829,"stress":482.89719811498867},{"source":829,"area":1,"density":0.284,"id":"e1195","stiffness":30000000,"target":830,"stress":-492.8391566310983},{"source":830,"area":1,"density":0.284,"id":"e1196","stiffness":30000000,"target":831,"stress":-440.8071090410157},{"source":831,"area":1,"density":0.284,"id":"e1197","stiffness":30000000,"target":832,"stress":-428.38881466718817},{"source":832,"area":1,"density":0.284,"id":"e1198","stiffness":30000000,"target":833,"stress":479.1613533878748},{"source":833,"area":1,"density":0.284,"id":"e1199","stiffness":30000000,"target":826,"stress":-538.4815448500544},{"source":825,"area":1,"density":0.284,"id":"e1200","stiffness":30000000,"target":827,"stress":219.99708256149017},{"source":824,"area":1,"density":0.284,"id":"e1201","stiffness":30000000,"target":829,"stress":-802.4060743029013},{"source":779,"area":1,"density":0.284,"id":"e1202","stiffness":30000000,"target":831,"stress":169.22954366465845},{"source":814,"area":1,"density":0.284,"id":"e1203","stiffness":30000000,"target":833,"stress":-844.1017380621213},{"source":835,"area":1,"density":0.284,"id":"e1204","stiffness":30000000,"target":836,"stress":40.8543251346435},{"source":836,"area":1,"density":0.284,"id":"e1205","stiffness":30000000,"target":837,"stress":35.886785582241316},{"source":837,"area":1,"density":0.284,"id":"e1206","stiffness":30000000,"target":838,"stress":29.74992689382962},{"source":838,"area":1,"density":0.284,"id":"e1207","stiffness":30000000,"target":839,"stress":19.989477496195846},{"source":839,"area":1,"density":0.284,"id":"e1208","stiffness":30000000,"target":840,"stress":11.177436813815916},{"source":840,"area":1,"density":0.284,"id":"e1209","stiffness":30000000,"target":841,"stress":66.03345393091166},{"source":841,"area":1,"density":0.284,"id":"e1210","stiffness":30000000,"target":842,"stress":3.2554971767922143},{"source":842,"area":1,"density":0.284,"id":"e1211","stiffness":30000000,"target":835,"stress":13.655872174549787},{"source":498,"area":1,"density":0.284,"id":"e1212","stiffness":30000000,"target":840,"stress":57.22552685790692},{"source":789,"area":1,"density":0.284,"id":"e1213","stiffness":30000000,"target":842,"stress":18.372632710846386},{"source":824,"area":1,"density":0.284,"id":"e1214","stiffness":30000000,"target":836,"stress":8.748873628689774},{"source":834,"area":1,"density":0.284,"id":"e1215","stiffness":30000000,"target":838,"stress":108.16934384282018},{"source":499,"area":1,"density":0.284,"id":"e1216","stiffness":30000000,"target":507,"stress":-314.9981973887832},{"source":488,"area":1,"density":0.284,"id":"e1217","stiffness":30000000,"target":505,"stress":-1337.669124995913},{"source":453,"area":1,"density":0.284,"id":"e1218","stiffness":30000000,"target":503,"stress":-323.7043366896492},{"source":498,"area":1,"density":0.284,"id":"e1219","stiffness":30000000,"target":501,"stress":-1386.104164445609},{"source":789,"area":1,"density":0.284,"id":"e1220","stiffness":30000000,"target":807,"stress":-1336.176999740938},{"source":453,"area":1,"density":0.284,"id":"e1221","stiffness":30000000,"target":809,"stress":-495.9590772002537},{"source":768,"area":1,"density":0.284,"id":"e1222","stiffness":30000000,"target":811,"stress":-1172.640026555425},{"source":779,"area":1,"density":0.284,"id":"e1223","stiffness":30000000,"target":813,"stress":-180.7157938494268},{"source":843,"area":1,"density":0.284,"id":"e1224","stiffness":30000000,"target":844,"stress":107.49789206470186},{"source":844,"area":1,"density":0.284,"id":"e1225","stiffness":30000000,"target":845,"stress":-1038.965247208886},{"source":845,"area":1,"density":0.284,"id":"e1226","stiffness":30000000,"target":846,"stress":-1035.2557478907868},{"source":846,"area":1,"density":0.284,"id":"e1227","stiffness":30000000,"target":847,"stress":115.17310597423364},{"source":847,"area":1,"density":0.284,"id":"e1228","stiffness":30000000,"target":848,"stress":164.8000127840972},{"source":848,"area":1,"density":0.284,"id":"e1229","stiffness":30000000,"target":849,"stress":-967.4036413597748},{"source":849,"area":1,"density":0.284,"id":"e1230","stiffness":30000000,"target":850,"stress":-966.0224151757433},{"source":850,"area":1,"density":0.284,"id":"e1231","stiffness":30000000,"target":843,"stress":142.56496293245277},{"source":825,"area":1,"density":0.284,"id":"e1232","stiffness":30000000,"target":848,"stress":-87.90531893127994},{"source":815,"area":1,"density":0.284,"id":"e1233","stiffness":30000000,"target":846,"stress":-1367.292131246768},{"source":499,"area":1,"density":0.284,"id":"e1234","stiffness":30000000,"target":844,"stress":-409.6142149960005},{"source":834,"area":1,"density":0.284,"id":"e1235","stiffness":30000000,"target":850,"stress":-1176.1405219323108},{"source":853,"area":1,"density":0.284,"id":"e1236","stiffness":30000000,"target":854,"stress":0.0},{"source":854,"area":1,"density":0.284,"id":"e1237","stiffness":30000000,"target":855,"stress":0.0},{"source":855,"area":1,"density":0.284,"id":"e1238","stiffness":30000000,"target":856,"stress":0.0},{"source":856,"area":1,"density":0.284,"id":"e1239","stiffness":30000000,"target":857,"stress":0.0},{"source":857,"area":1,"density":0.284,"id":"e1240","stiffness":30000000,"target":858,"stress":0.0},{"source":858,"area":1,"density":0.284,"id":"e1241","stiffness":30000000,"target":859,"stress":0.0},{"source":859,"area":1,"density":0.284,"id":"e1242","stiffness":30000000,"target":860,"stress":0.0},{"source":860,"area":1,"density":0.284,"id":"e1243","stiffness":30000000,"target":853,"stress":0.0},{"source":851,"area":1,"density":0.284,"id":"e1244","stiffness":30000000,"target":854,"stress":0.0},{"source":815,"area":1,"density":0.284,"id":"e1245","stiffness":30000000,"target":856,"stress":0.0},{"source":525,"area":1,"density":0.284,"id":"e1246","stiffness":30000000,"target":858,"stress":0.0},{"source":852,"area":1,"density":0.284,"id":"e1247","stiffness":30000000,"target":860,"stress":0.0},{"source":863,"area":1,"density":0.284,"id":"e1248","stiffness":30000000,"target":864,"stress":-506.89691269800767},{"source":864,"area":1,"density":0.284,"id":"e1249","stiffness":30000000,"target":865,"stress":-465.3437729434456},{"source":865,"area":1,"density":0.284,"id":"e1250","stiffness":30000000,"target":866,"stress":493.62099726851295},{"source":866,"area":1,"density":0.284,"id":"e1251","stiffness":30000000,"target":867,"stress":-515.1973587999479},{"source":867,"area":1,"density":0.284,"id":"e1252","stiffness":30000000,"target":868,"stress":-461.3030615353618},{"source":868,"area":1,"density":0.284,"id":"e1253","stiffness":30000000,"target":869,"stress":-402.68516030286185},{"source":869,"area":1,"density":0.284,"id":"e1254","stiffness":30000000,"target":870,"stress":463.7376868397678},{"source":870,"area":1,"density":0.284,"id":"e1255","stiffness":30000000,"target":863,"stress":-525.8339843569407},{"source":862,"area":1,"density":0.284,"id":"e1256","stiffness":30000000,"target":864,"stress":218.70269613750804},{"source":861,"area":1,"density":0.284,"id":"e1257","stiffness":30000000,"target":866,"stress":-834.2192694522981},{"source":825,"area":1,"density":0.284,"id":"e1258","stiffness":30000000,"target":868,"stress":212.3490210051585},{"source":851,"area":1,"density":0.284,"id":"e1259","stiffness":30000000,"target":870,"stress":-823.1085294048013},{"source":872,"area":1,"density":0.284,"id":"e1260","stiffness":30000000,"target":873,"stress":26.46504700499643},{"source":873,"area":1,"density":0.284,"id":"e1261","stiffness":30000000,"target":874,"stress":19.42507736454384},{"source":874,"area":1,"density":0.284,"id":"e1262","stiffness":30000000,"target":875,"stress":10.21121267429473},{"source":875,"area":1,"density":0.284,"id":"e1263","stiffness":30000000,"target":876,"stress":-19.19300374328578},{"source":876,"area":1,"density":0.284,"id":"e1264","stiffness":30000000,"target":877,"stress":52.512125188659375},{"source":877,"area":1,"density":0.284,"id":"e1265","stiffness":30000000,"target":878,"stress":43.33008864235893},{"source":878,"area":1,"density":0.284,"id":"e1266","stiffness":30000000,"target":879,"stress":17.19871408123468},{"source":879,"area":1,"density":0.284,"id":"e1267","stiffness":30000000,"target":872,"stress":-16.739787910799407},{"source":535,"area":1,"density":0.284,"id":"e1268","stiffness":30000000,"target":877,"stress":117.68772283978969},{"source":834,"area":1,"density":0.284,"id":"e1269","stiffness":30000000,"target":879,"stress":-35.90817623077773},{"source":861,"area":1,"density":0.284,"id":"e1270","stiffness":30000000,"target":873,"stress":6.466412798068845},{"source":871,"area":1,"density":0.284,"id":"e1271","stiffness":30000000,"target":875,"stress":-3.7652195775518824},{"source":536,"area":1,"density":0.284,"id":"e1272","stiffness":30000000,"target":544,"stress":-79.5611958124562},{"source":525,"area":1,"density":0.284,"id":"e1273","stiffness":30000000,"target":542,"stress":-1459.9324565789989},{"source":499,"area":1,"density":0.284,"id":"e1274","stiffness":30000000,"target":540,"stress":-303.4942448216387},{"source":535,"area":1,"density":0.284,"id":"e1275","stiffness":30000000,"target":538,"stress":-1308.2620453889633},{"source":834,"area":1,"density":0.284,"id":"e1276","stiffness":30000000,"target":844,"stress":-1393.084453743676},{"source":499,"area":1,"density":0.284,"id":"e1277","stiffness":30000000,"target":846,"stress":-409.6168799234677},{"source":815,"area":1,"density":0.284,"id":"e1278","stiffness":30000000,"target":848,"stress":-1152.972105175558},{"source":825,"area":1,"density":0.284,"id":"e1279","stiffness":30000000,"target":850,"stress":-155.4757495898856},{"source":880,"area":1,"density":0.284,"id":"e1280","stiffness":30000000,"target":881,"stress":-215.59903747455064},{"source":881,"area":1,"density":0.284,"id":"e1281","stiffness":30000000,"target":882,"stress":-717.41598174813},{"source":882,"area":1,"density":0.284,"id":"e1282","stiffness":30000000,"target":883,"stress":-719.2879753494958},{"source":883,"area":1,"density":0.284,"id":"e1283","stiffness":30000000,"target":884,"stress":182.93878977659242},{"source":884,"area":1,"density":0.284,"id":"e1284","stiffness":30000000,"target":885,"stress":-165.17800404509134},{"source":885,"area":1,"density":0.284,"id":"e1285","stiffness":30000000,"target":886,"stress":-607.607508270993},{"source":886,"area":1,"density":0.284,"id":"e1286","stiffness":30000000,"target":887,"stress":-614.9646323182889},{"source":887,"area":1,"density":0.284,"id":"e1287","stiffness":30000000,"target":880,"stress":158.84527298130644},{"source":862,"area":1,"density":0.284,"id":"e1288","stiffness":30000000,"target":885,"stress":116.06223357329117},{"source":852,"area":1,"density":0.284,"id":"e1289","stiffness":30000000,"target":883,"stress":-1026.7866477501245},{"source":536,"area":1,"density":0.284,"id":"e1290","stiffness":30000000,"target":881,"stress":134.34666676235125},{"source":871,"area":1,"density":0.284,"id":"e1291","stiffness":30000000,"target":887,"stress":-940.7302608005843},{"source":888,"area":1,"density":0.284,"id":"e1292","stiffness":30000000,"target":889,"stress":2.1097919605385296},{"source":889,"area":1,"density":0.284,"id":"e1293","stiffness":30000000,"target":796,"stress":28.50613998338012},{"source":796,"area":1,"density":0.284,"id":"e1294","stiffness":30000000,"target":890,"stress":23.86731566536645},{"source":890,"area":1,"density":0.284,"id":"e1295","stiffness":30000000,"target":891,"stress":-28.920015365429222},{"source":891,"area":1,"density":0.284,"id":"e1296","stiffness":30000000,"target":892,"stress":-12.047836700012516},{"source":892,"area":1,"density":0.284,"id":"e1297","stiffness":30000000,"target":792,"stress":93.18851598094749},{"source":792,"area":1,"density":0.284,"id":"e1298","stiffness":30000000,"target":893,"stress":49.9606426288286},{"source":893,"area":1,"density":0.284,"id":"e1299","stiffness":30000000,"target":888,"stress":-8.034500901849837},{"source":777,"area":1,"density":0.284,"id":"e1300","stiffness":30000000,"target":889,"stress":27.933096401016016},{"source":788,"area":1,"density":0.284,"id":"e1301","stiffness":30000000,"target":890,"stress":-54.329331448538575},{"source":451,"area":1,"density":0.284,"id":"e1302","stiffness":30000000,"target":892,"stress":107.57517094010862},{"source":789,"area":1,"density":0.284,"id":"e1303","stiffness":30000000,"target":893,"stress":-61.18786599187695},{"source":897,"area":1,"density":0.284,"id":"e1304","stiffness":30000000,"target":898,"stress":-234.73876147571502},{"source":898,"area":1,"density":0.284,"id":"e1305","stiffness":30000000,"target":899,"stress":-292.9512399483671},{"source":899,"area":1,"density":0.284,"id":"e1306","stiffness":30000000,"target":900,"stress":332.0003628463511},{"source":900,"area":1,"density":0.284,"id":"e1307","stiffness":30000000,"target":901,"stress":-378.00807192950595},{"source":901,"area":1,"density":0.284,"id":"e1308","stiffness":30000000,"target":902,"stress":-332.0827220627297},{"source":902,"area":1,"density":0.284,"id":"e1309","stiffness":30000000,"target":903,"stress":-272.14887446866106},{"source":903,"area":1,"density":0.284,"id":"e1310","stiffness":30000000,"target":904,"stress":340.7254669204391},{"source":904,"area":1,"density":0.284,"id":"e1311","stiffness":30000000,"target":897,"stress":-260.8202735848283},{"source":896,"area":1,"density":0.284,"id":"e1312","stiffness":30000000,"target":898,"stress":43.192181508868075},{"source":894,"area":1,"density":0.284,"id":"e1313","stiffness":30000000,"target":900,"stress":-595.2576398474688},{"source":895,"area":1,"density":0.284,"id":"e1314","stiffness":30000000,"target":902,"stress":167.81496492242056},{"source":777,"area":1,"density":0.284,"id":"e1315","stiffness":30000000,"target":904,"stress":-486.8871789469447},{"source":907,"area":1,"density":0.284,"id":"e1316","stiffness":30000000,"target":908,"stress":13.044575382311043},{"source":908,"area":1,"density":0.284,"id":"e1317","stiffness":30000000,"target":909,"stress":-26.937253674351332},{"source":909,"area":1,"density":0.284,"id":"e1318","stiffness":30000000,"target":910,"stress":-67.24483237323908},{"source":910,"area":1,"density":0.284,"id":"e1319","stiffness":30000000,"target":911,"stress":44.503250995230225},{"source":911,"area":1,"density":0.284,"id":"e1320","stiffness":30000000,"target":912,"stress":35.22120172302212},{"source":912,"area":1,"density":0.284,"id":"e1321","stiffness":30000000,"target":913,"stress":1.9949377414389267},{"source":913,"area":1,"density":0.284,"id":"e1322","stiffness":30000000,"target":914,"stress":-28.562215145615564},{"source":914,"area":1,"density":0.284,"id":"e1323","stiffness":30000000,"target":907,"stress":-7.079536741213214},{"source":568,"area":1,"density":0.284,"id":"e1324","stiffness":30000000,"target":912,"stress":-28.093530609525068},{"source":905,"area":1,"density":0.284,"id":"e1325","stiffness":30000000,"target":914,"stress":33.35297649414242},{"source":894,"area":1,"density":0.284,"id":"e1326","stiffness":30000000,"target":908,"stress":-36.36454537042145},{"source":906,"area":1,"density":0.284,"id":"e1327","stiffness":30000000,"target":910,"stress":127.2390889736132},{"source":570,"area":1,"density":0.284,"id":"e1328","stiffness":30000000,"target":578,"stress":-169.99290852243365},{"source":451,"area":1,"density":0.284,"id":"e1329","stiffness":30000000,"target":576,"stress":-915.3925262940444},{"source":569,"area":1,"density":0.284,"id":"e1330","stiffness":30000000,"target":574,"stress":-20.571999921220023},{"source":568,"area":1,"density":0.284,"id":"e1331","stiffness":30000000,"target":572,"stress":-979.830144579776},{"source":915,"area":1,"density":0.284,"id":"e1332","stiffness":30000000,"target":916,"stress":124.59896556727598},{"source":916,"area":1,"density":0.284,"id":"e1333","stiffness":30000000,"target":917,"stress":-425.1577229334723},{"source":917,"area":1,"density":0.284,"id":"e1334","stiffness":30000000,"target":918,"stress":-389.8088896939426},{"source":918,"area":1,"density":0.284,"id":"e1335","stiffness":30000000,"target":919,"stress":-65.38647632417977},{"source":919,"area":1,"density":0.284,"id":"e1336","stiffness":30000000,"target":920,"stress":150.72524695096322},{"source":920,"area":1,"density":0.284,"id":"e1337","stiffness":30000000,"target":921,"stress":-464.5396908646652},{"source":921,"area":1,"density":0.284,"id":"e1338","stiffness":30000000,"target":922,"stress":-440.7649485458332},{"source":922,"area":1,"density":0.284,"id":"e1339","stiffness":30000000,"target":915,"stress":-101.8853753273134},{"source":905,"area":1,"density":0.284,"id":"e1340","stiffness":30000000,"target":920,"stress":-682.5820890632741},{"source":569,"area":1,"density":0.284,"id":"e1341","stiffness":30000000,"target":922,"stress":93.35241271953089},{"source":788,"area":1,"density":0.284,"id":"e1342","stiffness":30000000,"target":916,"stress":-642.799538538758},{"source":895,"area":1,"density":0.284,"id":"e1343","stiffness":30000000,"target":918,"stress":89.05683171913111},{"source":923,"area":1,"density":0.284,"id":"e1344","stiffness":30000000,"target":924,"stress":114.21426958220806},{"source":924,"area":1,"density":0.284,"id":"e1345","stiffness":30000000,"target":925,"stress":-726.4123779221203},{"source":925,"area":1,"density":0.284,"id":"e1346","stiffness":30000000,"target":926,"stress":-720.7390270483068},{"source":926,"area":1,"density":0.284,"id":"e1347","stiffness":30000000,"target":927,"stress":95.4066467562056},{"source":927,"area":1,"density":0.284,"id":"e1348","stiffness":30000000,"target":928,"stress":98.98151703449349},{"source":928,"area":1,"density":0.284,"id":"e1349","stiffness":30000000,"target":929,"stress":-691.126382965679},{"source":929,"area":1,"density":0.284,"id":"e1350","stiffness":30000000,"target":930,"stress":-678.0770504731852},{"source":930,"area":1,"density":0.284,"id":"e1351","stiffness":30000000,"target":923,"stress":151.0906559444761},{"source":896,"area":1,"density":0.284,"id":"e1352","stiffness":30000000,"target":928,"stress":-172.40778278880757},{"source":789,"area":1,"density":0.284,"id":"e1353","stiffness":30000000,"target":926,"stress":-939.8940228643976},{"source":570,"area":1,"density":0.284,"id":"e1354","stiffness":30000000,"target":924,"stress":-235.20803638325512},{"source":906,"area":1,"density":0.284,"id":"e1355","stiffness":30000000,"target":930,"stress":-763.0674645382554},{"source":835,"area":1,"density":0.284,"id":"e1356","stiffness":30000000,"target":931,"stress":-5.2793803737465455},{"source":931,"area":1,"density":0.284,"id":"e1357","stiffness":30000000,"target":841,"stress":21.23518014910309},{"source":841,"area":1,"density":0.284,"id":"e1358","stiffness":30000000,"target":932,"stress":-11.41110880337828},{"source":932,"area":1,"density":0.284,"id":"e1359","stiffness":30000000,"target":839,"stress":57.81201106816897},{"source":824,"area":1,"density":0.284,"id":"e1360","stiffness":30000000,"target":931,"stress":24.70391928592415},{"source":789,"area":1,"density":0.284,"id":"e1361","stiffness":30000000,"target":932,"stress":61.60634306561105},{"source":498,"area":1,"density":0.284,"id":"e1362","stiffness":30000000,"target":838,"stress":99.87495956817584},{"source":834,"area":1,"density":0.284,"id":"e1363","stiffness":30000000,"target":836,"stress":5.233660794289534},{"source":935,"area":1,"density":0.284,"id":"e1364","stiffness":30000000,"target":936,"stress":-205.86288308210987},{"source":936,"area":1,"density":0.284,"id":"e1365","stiffness":30000000,"target":937,"stress":-310.20131822306195},{"source":937,"area":1,"density":0.284,"id":"e1366","stiffness":30000000,"target":938,"stress":324.45109803591913},{"source":938,"area":1,"density":0.284,"id":"e1367","stiffness":30000000,"target":939,"stress":-359.6654917532309},{"source":939,"area":1,"density":0.284,"id":"e1368","stiffness":30000000,"target":940,"stress":-318.3827658110233},{"source":940,"area":1,"density":0.284,"id":"e1369","stiffness":30000000,"target":941,"stress":-273.34179195550627},{"source":941,"area":1,"density":0.284,"id":"e1370","stiffness":30000000,"target":942,"stress":314.1307690216029},{"source":942,"area":1,"density":0.284,"id":"e1371","stiffness":30000000,"target":935,"stress":-227.2701109452962},{"source":934,"area":1,"density":0.284,"id":"e1372","stiffness":30000000,"target":936,"stress":-4.1868409756202},{"source":933,"area":1,"density":0.284,"id":"e1373","stiffness":30000000,"target":938,"stress":-569.2420155826816},{"source":896,"area":1,"density":0.284,"id":"e1374","stiffness":30000000,"target":940,"stress":149.12110532619016},{"source":824,"area":1,"density":0.284,"id":"e1375","stiffness":30000000,"target":942,"stress":-433.3485786307805},{"source":944,"area":1,"density":0.284,"id":"e1376","stiffness":30000000,"target":945,"stress":49.52464487078749},{"source":945,"area":1,"density":0.284,"id":"e1377","stiffness":30000000,"target":946,"stress":28.958439830273033},{"source":946,"area":1,"density":0.284,"id":"e1378","stiffness":30000000,"target":947,"stress":5.470260760295832},{"source":947,"area":1,"density":0.284,"id":"e1379","stiffness":30000000,"target":948,"stress":4.499845468233211},{"source":948,"area":1,"density":0.284,"id":"e1380","stiffness":30000000,"target":949,"stress":32.88852260280408},{"source":949,"area":1,"density":0.284,"id":"e1381","stiffness":30000000,"target":950,"stress":53.820445400480814},{"source":950,"area":1,"density":0.284,"id":"e1382","stiffness":30000000,"target":951,"stress":-27.703352498019445},{"source":951,"area":1,"density":0.284,"id":"e1383","stiffness":30000000,"target":944,"stress":29.945190473254005},{"source":608,"area":1,"density":0.284,"id":"e1384","stiffness":30000000,"target":949,"stress":29.083398557934267},{"source":906,"area":1,"density":0.284,"id":"e1385","stiffness":30000000,"target":951,"stress":73.12650674931129},{"source":933,"area":1,"density":0.284,"id":"e1386","stiffness":30000000,"target":945,"stress":-62.28570414151652},{"source":943,"area":1,"density":0.284,"id":"e1387","stiffness":30000000,"target":947,"stress":145.22866711772974},{"source":609,"area":1,"density":0.284,"id":"e1388","stiffness":30000000,"target":617,"stress":-182.89313331057173},{"source":498,"area":1,"density":0.284,"id":"e1389","stiffness":30000000,"target":615,"stress":-968.6337822333838},{"source":570,"area":1,"density":0.284,"id":"e1390","stiffness":30000000,"target":613,"stress":-134.39446588916385},{"source":608,"area":1,"density":0.284,"id":"e1391","stiffness":30000000,"target":611,"stress":-929.7767285680955},{"source":906,"area":1,"density":0.284,"id":"e1392","stiffness":30000000,"target":924,"stress":-943.6286235258042},{"source":570,"area":1,"density":0.284,"id":"e1393","stiffness":30000000,"target":926,"stress":-224.57061390969434},{"source":789,"area":1,"density":0.284,"id":"e1394","stiffness":30000000,"target":928,"stress":-891.5794407542254},{"source":896,"area":1,"density":0.284,"id":"e1395","stiffness":30000000,"target":930,"stress":1.2808169029238758},{"source":952,"area":1,"density":0.284,"id":"e1396","stiffness":30000000,"target":953,"stress":98.23266928379095},{"source":953,"area":1,"density":0.284,"id":"e1397","stiffness":30000000,"target":954,"stress":-725.3156178755497},{"source":954,"area":1,"density":0.284,"id":"e1398","stiffness":30000000,"target":955,"stress":-702.9282235554965},{"source":955,"area":1,"density":0.284,"id":"e1399","stiffness":30000000,"target":956,"stress":100.60650079877571},{"source":956,"area":1,"density":0.284,"id":"e1400","stiffness":30000000,"target":957,"stress":97.377047895128},{"source":957,"area":1,"density":0.284,"id":"e1401","stiffness":30000000,"target":958,"stress":-700.541875527534},{"source":958,"area":1,"density":0.284,"id":"e1402","stiffness":30000000,"target":959,"stress":-671.5652122641179},{"source":959,"area":1,"density":0.284,"id":"e1403","stiffness":30000000,"target":952,"stress":149.18420198806973},{"source":934,"area":1,"density":0.284,"id":"e1404","stiffness":30000000,"target":957,"stress":-213.3567263171178},{"source":834,"area":1,"density":0.284,"id":"e1405","stiffness":30000000,"target":955,"stress":-857.6842811017649},{"source":609,"area":1,"density":0.284,"id":"e1406","stiffness":30000000,"target":953,"stress":-302.89634531169594},{"source":943,"area":1,"density":0.284,"id":"e1407","stiffness":30000000,"target":959,"stress":-714.1179944090273},{"source":861,"area":1,"density":0.284,"id":"e1408","stiffness":30000000,"target":879,"stress":-8.53626540699012},{"source":834,"area":1,"density":0.284,"id":"e1409","stiffness":30000000,"target":877,"stress":125.6343733949451},{"source":535,"area":1,"density":0.284,"id":"e1410","stiffness":30000000,"target":875,"stress":14.361137707923076},{"source":871,"area":1,"density":0.284,"id":"e1411","stiffness":30000000,"target":873,"stress":5.061736552426889},{"source":962,"area":1,"density":0.284,"id":"e1412","stiffness":30000000,"target":963,"stress":-277.6930096559606},{"source":963,"area":1,"density":0.284,"id":"e1413","stiffness":30000000,"target":964,"stress":-266.21882262256526},{"source":964,"area":1,"density":0.284,"id":"e1414","stiffness":30000000,"target":965,"stress":322.4069937101102},{"source":965,"area":1,"density":0.284,"id":"e1415","stiffness":30000000,"target":966,"stress":-420.30523357126447},{"source":966,"area":1,"density":0.284,"id":"e1416","stiffness":30000000,"target":967,"stress":-369.7571484782007},{"source":967,"area":1,"density":0.284,"id":"e1417","stiffness":30000000,"target":968,"stress":-251.48629068792542},{"source":968,"area":1,"density":0.284,"id":"e1418","stiffness":30000000,"target":969,"stress":308.2647050061066},{"source":969,"area":1,"density":0.284,"id":"e1419","stiffness":30000000,"target":962,"stress":-315.3217145973431},{"source":961,"area":1,"density":0.284,"id":"e1420","stiffness":30000000,"target":963,"stress":111.34330124490613},{"source":960,"area":1,"density":0.284,"id":"e1421","stiffness":30000000,"target":965,"stress":-632.6268453841145},{"source":934,"area":1,"density":0.284,"id":"e1422","stiffness":30000000,"target":967,"stress":223.3108187838768},{"source":861,"area":1,"density":0.284,"id":"e1423","stiffness":30000000,"target":969,"stress":-519.3283024863578},{"source":971,"area":1,"density":0.284,"id":"e1424","stiffness":30000000,"target":972,"stress":43.6532772069781},{"source":972,"area":1,"density":0.284,"id":"e1425","stiffness":30000000,"target":973,"stress":16.2711965174639},{"source":973,"area":1,"density":0.284,"id":"e1426","stiffness":30000000,"target":974,"stress":-10.436878793807319},{"source":974,"area":1,"density":0.284,"id":"e1427","stiffness":30000000,"target":975,"stress":-30.36193590700772},{"source":975,"area":1,"density":0.284,"id":"e1428","stiffness":30000000,"target":976,"stress":57.44858522594378},{"source":976,"area":1,"density":0.284,"id":"e1429","stiffness":30000000,"target":977,"stress":60.74250852971692},{"source":977,"area":1,"density":0.284,"id":"e1430","stiffness":30000000,"target":978,"stress":14.188480225174839},{"source":978,"area":1,"density":0.284,"id":"e1431","stiffness":30000000,"target":971,"stress":-21.616804363284192},{"source":637,"area":1,"density":0.284,"id":"e1432","stiffness":30000000,"target":976,"stress":74.268252140075},{"source":943,"area":1,"density":0.284,"id":"e1433","stiffness":30000000,"target":978,"stress":45.097360060243545},{"source":960,"area":1,"density":0.284,"id":"e1434","stiffness":30000000,"target":972,"stress":-58.232164062303475},{"source":970,"area":1,"density":0.284,"id":"e1435","stiffness":30000000,"target":974,"stress":47.83200748844259},{"source":638,"area":1,"density":0.284,"id":"e1436","stiffness":30000000,"target":646,"stress":-136.60238919307133},{"source":535,"area":1,"density":0.284,"id":"e1437","stiffness":30000000,"target":644,"stress":-963.1820201134251},{"source":609,"area":1,"density":0.284,"id":"e1438","stiffness":30000000,"target":642,"stress":-205.43569197953929},{"source":637,"area":1,"density":0.284,"id":"e1439","stiffness":30000000,"target":640,"stress":-832.3249936162454},{"source":943,"area":1,"density":0.284,"id":"e1440","stiffness":30000000,"target":953,"stress":-1000.60896633142},{"source":609,"area":1,"density":0.284,"id":"e1441","stiffness":30000000,"target":955,"stress":-166.00049855426127},{"source":834,"area":1,"density":0.284,"id":"e1442","stiffness":30000000,"target":957,"stress":-950.801617494224},{"source":934,"area":1,"density":0.284,"id":"e1443","stiffness":30000000,"target":959,"stress":39.41854697181164},{"source":979,"area":1,"density":0.284,"id":"e1444","stiffness":30000000,"target":980,"stress":-154.39750496676922},{"source":980,"area":1,"density":0.284,"id":"e1445","stiffness":30000000,"target":981,"stress":-372.9263531866225},{"source":981,"area":1,"density":0.284,"id":"e1446","stiffness":30000000,"target":982,"stress":-366.0402431890376},{"source":982,"area":1,"density":0.284,"id":"e1447","stiffness":30000000,"target":983,"stress":103.6671433933891},{"source":983,"area":1,"density":0.284,"id":"e1448","stiffness":30000000,"target":984,"stress":-148.94341690296582},{"source":984,"area":1,"density":0.284,"id":"e1449","stiffness":30000000,"target":985,"stress":-411.5812824618148},{"source":985,"area":1,"density":0.284,"id":"e1450","stiffness":30000000,"target":986,"stress":-392.8269205208319},{"source":986,"area":1,"density":0.284,"id":"e1451","stiffness":30000000,"target":979,"stress":99.33482615681163},{"source":961,"area":1,"density":0.284,"id":"e1452","stiffness":30000000,"target":984,"stress":59.088714026770454},{"source":871,"area":1,"density":0.284,"id":"e1453","stiffness":30000000,"target":982,"stress":-585.392069500035},{"source":638,"area":1,"density":0.284,"id":"e1454","stiffness":30000000,"target":980,"stress":21.172290004544234},{"source":970,"area":1,"density":0.284,"id":"e1455","stiffness":30000000,"target":986,"stress":-604.2446765685362},{"source":987,"area":1,"density":0.284,"id":"e1456","stiffness":30000000,"target":988,"stress":-21.409561227705762},{"source":988,"area":1,"density":0.284,"id":"e1457","stiffness":30000000,"target":913,"stress":24.093092562335872},{"source":913,"area":1,"density":0.284,"id":"e1458","stiffness":30000000,"target":989,"stress":25.91659325894729},{"source":989,"area":1,"density":0.284,"id":"e1459","stiffness":30000000,"target":990,"stress":-0.10103053828894147},{"source":990,"area":1,"density":0.284,"id":"e1460","stiffness":30000000,"target":991,"stress":-18.725640635384426},{"source":991,"area":1,"density":0.284,"id":"e1461","stiffness":30000000,"target":909,"stress":80.73271365294708},{"source":909,"area":1,"density":0.284,"id":"e1462","stiffness":30000000,"target":992,"stress":60.132998163953154},{"source":992,"area":1,"density":0.284,"id":"e1463","stiffness":30000000,"target":987,"stress":-0.5479147302980816},{"source":894,"area":1,"density":0.284,"id":"e1464","stiffness":30000000,"target":988,"stress":39.88900407972915},{"source":905,"area":1,"density":0.284,"id":"e1465","stiffness":30000000,"target":989,"stress":-35.775863280216846},{"source":568,"area":1,"density":0.284,"id":"e1466","stiffness":30000000,"target":991,"stress":97.64496394582368},{"source":906,"area":1,"density":0.284,"id":"e1467","stiffness":30000000,"target":992,"stress":-75.00519142580102},{"source":996,"area":1,"density":0.284,"id":"e1468","stiffness":30000000,"target":997,"stress":-81.57464217497717},{"source":997,"area":1,"density":0.284,"id":"e1469","stiffness":30000000,"target":998,"stress":-331.3370139892717},{"source":998,"area":1,"density":0.284,"id":"e1470","stiffness":30000000,"target":999,"stress":216.76234710489575},{"source":999,"area":1,"density":0.284,"id":"e1471","stiffness":30000000,"target":1000,"stress":-228.85273339195896},{"source":1000,"area":1,"density":0.284,"id":"e1472","stiffness":30000000,"target":1001,"stress":-159.38797680721035},{"source":1001,"area":1,"density":0.284,"id":"e1473","stiffness":30000000,"target":1002,"stress":-123.31380845330386},{"source":1002,"area":1,"density":0.284,"id":"e1474","stiffness":30000000,"target":1003,"stress":227.03975861819802},{"source":1003,"area":1,"density":0.284,"id":"e1475","stiffness":30000000,"target":996,"stress":-57.09738326345844},{"source":995,"area":1,"density":0.284,"id":"e1476","stiffness":30000000,"target":997,"stress":-166.3483339187606},{"source":993,"area":1,"density":0.284,"id":"e1477","stiffness":30000000,"target":999,"stress":-362.88139707524823},{"source":994,"area":1,"density":0.284,"id":"e1478","stiffness":30000000,"target":1001,"stress":86.02695909216018},{"source":894,"area":1,"density":0.284,"id":"e1479","stiffness":30000000,"target":1003,"stress":-210.40651126237552},{"source":1006,"area":1,"density":0.284,"id":"e1480","stiffness":30000000,"target":1007,"stress":-34.971496651521534},{"source":1007,"area":1,"density":0.284,"id":"e1481","stiffness":30000000,"target":1008,"stress":-19.784020151268898},{"source":1008,"area":1,"density":0.284,"id":"e1482","stiffness":30000000,"target":1009,"stress":-9.053803970235288},{"source":1009,"area":1,"density":0.284,"id":"e1483","stiffness":30000000,"target":1010,"stress":117.33395173087614},{"source":1010,"area":1,"density":0.284,"id":"e1484","stiffness":30000000,"target":1011,"stress":6.412582532285743},{"source":1011,"area":1,"density":0.284,"id":"e1485","stiffness":30000000,"target":1012,"stress":66.6890260698865},{"source":1012,"area":1,"density":0.284,"id":"e1486","stiffness":30000000,"target":1013,"stress":48.693088733532285},{"source":1013,"area":1,"density":0.284,"id":"e1487","stiffness":30000000,"target":1006,"stress":8.100545642545457},{"source":670,"area":1,"density":0.284,"id":"e1488","stiffness":30000000,"target":1011,"stress":50.81648443339613},{"source":1004,"area":1,"density":0.284,"id":"e1489","stiffness":30000000,"target":1013,"stress":-48.4629363350348},{"source":993,"area":1,"density":0.284,"id":"e1490","stiffness":30000000,"target":1007,"stress":4.647912317812247},{"source":1005,"area":1,"density":0.284,"id":"e1491","stiffness":30000000,"target":1009,"stress":110.82976512828718},{"source":672,"area":1,"density":0.284,"id":"e1492","stiffness":30000000,"target":680,"stress":-42.51960015886173},{"source":568,"area":1,"density":0.284,"id":"e1493","stiffness":30000000,"target":678,"stress":-486.51709457087236},{"source":671,"area":1,"density":0.284,"id":"e1494","stiffness":30000000,"target":676,"stress":53.95626057943549},{"source":670,"area":1,"density":0.284,"id":"e1495","stiffness":30000000,"target":674,"stress":-535.9398478465225},{"source":1014,"area":1,"density":0.284,"id":"e1496","stiffness":30000000,"target":1015,"stress":114.30786676037422},{"source":1015,"area":1,"density":0.284,"id":"e1497","stiffness":30000000,"target":1016,"stress":-248.1368558754463},{"source":1016,"area":1,"density":0.284,"id":"e1498","stiffness":30000000,"target":1017,"stress":-239.79700183153784},{"source":1017,"area":1,"density":0.284,"id":"e1499","stiffness":30000000,"target":1018,"stress":-59.85744653257818},{"source":1018,"area":1,"density":0.284,"id":"e1500","stiffness":30000000,"target":1019,"stress":79.98802233442815},{"source":1019,"area":1,"density":0.284,"id":"e1501","stiffness":30000000,"target":1020,"stress":-214.11120217609226},{"source":1020,"area":1,"density":0.284,"id":"e1502","stiffness":30000000,"target":1021,"stress":-187.37347702910526},{"source":1021,"area":1,"density":0.284,"id":"e1503","stiffness":30000000,"target":1014,"stress":31.461173283113112},{"source":1004,"area":1,"density":0.284,"id":"e1504","stiffness":30000000,"target":1019,"stress":-356.7924186106238},{"source":671,"area":1,"density":0.284,"id":"e1505","stiffness":30000000,"target":1021,"stress":97.57194012286675},{"source":905,"area":1,"density":0.284,"id":"e1506","stiffness":30000000,"target":1015,"stress":-358.54498114231706},{"source":994,"area":1,"density":0.284,"id":"e1507","stiffness":30000000,"target":1017,"stress":45.65184288119818},{"source":1022,"area":1,"density":0.284,"id":"e1508","stiffness":30000000,"target":1023,"stress":125.79140032137127},{"source":1023,"area":1,"density":0.284,"id":"e1509","stiffness":30000000,"target":1024,"stress":-342.9983075963354},{"source":1024,"area":1,"density":0.284,"id":"e1510","stiffness":30000000,"target":1025,"stress":-338.50473881644814},{"source":1025,"area":1,"density":0.284,"id":"e1511","stiffness":30000000,"target":1026,"stress":61.396425237555796},{"source":1026,"area":1,"density":0.284,"id":"e1512","stiffness":30000000,"target":1027,"stress":50.72536342047194},{"source":1027,"area":1,"density":0.284,"id":"e1513","stiffness":30000000,"target":1028,"stress":-370.81693287917983},{"source":1028,"area":1,"density":0.284,"id":"e1514","stiffness":30000000,"target":1029,"stress":-352.3208871849079},{"source":1029,"area":1,"density":0.284,"id":"e1515","stiffness":30000000,"target":1022,"stress":133.0288496713015},{"source":995,"area":1,"density":0.284,"id":"e1516","stiffness":30000000,"target":1027,"stress":-185.623915773686},{"source":906,"area":1,"density":0.284,"id":"e1517","stiffness":30000000,"target":1025,"stress":-407.5820044314036},{"source":672,"area":1,"density":0.284,"id":"e1518","stiffness":30000000,"target":1023,"stress":16.583872310241862},{"source":1005,"area":1,"density":0.284,"id":"e1519","stiffness":30000000,"target":1029,"stress":-328.63986409898973},{"source":944,"area":1,"density":0.284,"id":"e1520","stiffness":30000000,"target":1030,"stress":-35.386451140862995},{"source":1030,"area":1,"density":0.284,"id":"e1521","stiffness":30000000,"target":950,"stress":49.24406741091268},{"source":950,"area":1,"density":0.284,"id":"e1522","stiffness":30000000,"target":1031,"stress":18.33566023207357},{"source":1031,"area":1,"density":0.284,"id":"e1523","stiffness":30000000,"target":948,"stress":48.04122542526189},{"source":933,"area":1,"density":0.284,"id":"e1524","stiffness":30000000,"target":1030,"stress":75.81170066362914},{"source":906,"area":1,"density":0.284,"id":"e1525","stiffness":30000000,"target":1031,"stress":14.517489069974982},{"source":608,"area":1,"density":0.284,"id":"e1526","stiffness":30000000,"target":947,"stress":116.2549610501975},{"source":943,"area":1,"density":0.284,"id":"e1527","stiffness":30000000,"target":945,"stress":-65.91207612374738},{"source":1034,"area":1,"density":0.284,"id":"e1528","stiffness":30000000,"target":1035,"stress":-60.58594183369712},{"source":1035,"area":1,"density":0.284,"id":"e1529","stiffness":30000000,"target":1036,"stress":-266.48245449952526},{"source":1036,"area":1,"density":0.284,"id":"e1530","stiffness":30000000,"target":1037,"stress":224.08229007157203},{"source":1037,"area":1,"density":0.284,"id":"e1531","stiffness":30000000,"target":1038,"stress":-239.35403679088716},{"source":1038,"area":1,"density":0.284,"id":"e1532","stiffness":30000000,"target":1039,"stress":-179.64137365930702},{"source":1039,"area":1,"density":0.284,"id":"e1533","stiffness":30000000,"target":1040,"stress":-195.09373683406145},{"source":1040,"area":1,"density":0.284,"id":"e1534","stiffness":30000000,"target":1041,"stress":189.22501804365982},{"source":1041,"area":1,"density":0.284,"id":"e1535","stiffness":30000000,"target":1034,"stress":-50.500067670880476},{"source":1033,"area":1,"density":0.284,"id":"e1536","stiffness":30000000,"target":1035,"stress":-135.24507774841658},{"source":1032,"area":1,"density":0.284,"id":"e1537","stiffness":30000000,"target":1037,"stress":-383.7627954914079},{"source":995,"area":1,"density":0.284,"id":"e1538","stiffness":30000000,"target":1039,"stress":43.68652185594252},{"source":933,"area":1,"density":0.284,"id":"e1539","stiffness":30000000,"target":1041,"stress":-170.33186779281152},{"source":1043,"area":1,"density":0.284,"id":"e1540","stiffness":30000000,"target":1044,"stress":4.729764580938897},{"source":1044,"area":1,"density":0.284,"id":"e1541","stiffness":30000000,"target":1045,"stress":-8.600145835759447},{"source":1045,"area":1,"density":0.284,"id":"e1542","stiffness":30000000,"target":1046,"stress":-30.64152037124256},{"source":1046,"area":1,"density":0.284,"id":"e1543","stiffness":30000000,"target":1047,"stress":112.33776892013644},{"source":1047,"area":1,"density":0.284,"id":"e1544","stiffness":30000000,"target":1048,"stress":8.301479781673585},{"source":1048,"area":1,"density":0.284,"id":"e1545","stiffness":30000000,"target":1049,"stress":41.02312920693264},{"source":1049,"area":1,"density":0.284,"id":"e1546","stiffness":30000000,"target":1050,"stress":16.769319969633113},{"source":1050,"area":1,"density":0.284,"id":"e1547","stiffness":30000000,"target":1043,"stress":74.94700973727302},{"source":710,"area":1,"density":0.284,"id":"e1548","stiffness":30000000,"target":1048,"stress":25.880731571062384},{"source":1005,"area":1,"density":0.284,"id":"e1549","stiffness":30000000,"target":1050,"stress":51.07332626535184},{"source":1032,"area":1,"density":0.284,"id":"e1550","stiffness":30000000,"target":1044,"stress":-16.233832095823693},{"source":1042,"area":1,"density":0.284,"id":"e1551","stiffness":30000000,"target":1046,"stress":136.65481467222676},{"source":711,"area":1,"density":0.284,"id":"e1552","stiffness":30000000,"target":719,"stress":-70.78121226245611},{"source":608,"area":1,"density":0.284,"id":"e1553","stiffness":30000000,"target":717,"stress":-497.810527111814},{"source":672,"area":1,"density":0.284,"id":"e1554","stiffness":30000000,"target":715,"stress":-23.779375518399593},{"source":710,"area":1,"density":0.284,"id":"e1555","stiffness":30000000,"target":713,"stress":-475.83736398312413},{"source":1005,"area":1,"density":0.284,"id":"e1556","stiffness":30000000,"target":1023,"stress":-396.3384705564211},{"source":672,"area":1,"density":0.284,"id":"e1557","stiffness":30000000,"target":1025,"stress":-45.29841965148966},{"source":906,"area":1,"density":0.284,"id":"e1558","stiffness":30000000,"target":1027,"stress":-569.6300598454122},{"source":995,"area":1,"density":0.284,"id":"e1559","stiffness":30000000,"target":1029,"stress":87.85399353902476},{"source":1051,"area":1,"density":0.284,"id":"e1560","stiffness":30000000,"target":1052,"stress":116.18320490078456},{"source":1052,"area":1,"density":0.284,"id":"e1561","stiffness":30000000,"target":1053,"stress":-346.526994917779},{"source":1053,"area":1,"density":0.284,"id":"e1562","stiffness":30000000,"target":1054,"stress":-339.26176576995056},{"source":1054,"area":1,"density":0.284,"id":"e1563","stiffness":30000000,"target":1055,"stress":60.586210234971624},{"source":1055,"area":1,"density":0.284,"id":"e1564","stiffness":30000000,"target":1056,"stress":49.38193890494817},{"source":1056,"area":1,"density":0.284,"id":"e1565","stiffness":30000000,"target":1057,"stress":-366.18011568931666},{"source":1057,"area":1,"density":0.284,"id":"e1566","stiffness":30000000,"target":1058,"stress":-343.26557848445873},{"source":1058,"area":1,"density":0.284,"id":"e1567","stiffness":30000000,"target":1051,"stress":125.30249981649128},{"source":1033,"area":1,"density":0.284,"id":"e1568","stiffness":30000000,"target":1056,"stress":-208.05117279956343},{"source":943,"area":1,"density":0.284,"id":"e1569","stiffness":30000000,"target":1054,"stress":-377.7970767858254},{"source":711,"area":1,"density":0.284,"id":"e1570","stiffness":30000000,"target":1052,"stress":-35.414164518341714},{"source":1042,"area":1,"density":0.284,"id":"e1571","stiffness":30000000,"target":1058,"stress":-284.3881726866591},{"source":960,"area":1,"density":0.284,"id":"e1572","stiffness":30000000,"target":978,"stress":57.71939881846158},{"source":943,"area":1,"density":0.284,"id":"e1573","stiffness":30000000,"target":976,"stress":55.53994011083873},{"source":637,"area":1,"density":0.284,"id":"e1574","stiffness":30000000,"target":974,"stress":44.34354156415475},{"source":970,"area":1,"density":0.284,"id":"e1575","stiffness":30000000,"target":972,"stress":-54.600732982497675},{"source":1061,"area":1,"density":0.284,"id":"e1576","stiffness":30000000,"target":1062,"stress":-149.31185978685747},{"source":1062,"area":1,"density":0.284,"id":"e1577","stiffness":30000000,"target":1063,"stress":-195.6976131555391},{"source":1063,"area":1,"density":0.284,"id":"e1578","stiffness":30000000,"target":1064,"stress":199.95720218013804},{"source":1064,"area":1,"density":0.284,"id":"e1579","stiffness":30000000,"target":1065,"stress":-273.46097474766395},{"source":1065,"area":1,"density":0.284,"id":"e1580","stiffness":30000000,"target":1066,"stress":-216.87626785060172},{"source":1066,"area":1,"density":0.284,"id":"e1581","stiffness":30000000,"target":1067,"stress":-138.51488584300213},{"source":1067,"area":1,"density":0.284,"id":"e1582","stiffness":30000000,"target":1068,"stress":179.19697361167968},{"source":1068,"area":1,"density":0.284,"id":"e1583","stiffness":30000000,"target":1061,"stress":-152.16487175752277},{"source":1060,"area":1,"density":0.284,"id":"e1584","stiffness":30000000,"target":1062,"stress":20.44619328139224},{"source":1059,"area":1,"density":0.284,"id":"e1585","stiffness":30000000,"target":1064,"stress":-405.5255352573141},{"source":1033,"area":1,"density":0.284,"id":"e1586","stiffness":30000000,"target":1066,"stress":133.85933634540908},{"source":960,"area":1,"density":0.284,"id":"e1587","stiffness":30000000,"target":1068,"stress":-269.47105289356045},{"source":1070,"area":1,"density":0.284,"id":"e1588","stiffness":30000000,"target":1071,"stress":45.52553774874857},{"source":1071,"area":1,"density":0.284,"id":"e1589","stiffness":30000000,"target":1072,"stress":0.7688971503294953},{"source":1072,"area":1,"density":0.284,"id":"e1590","stiffness":30000000,"target":1073,"stress":-29.18574474710619},{"source":1073,"area":1,"density":0.284,"id":"e1591","stiffness":30000000,"target":1074,"stress":-45.26442747190174},{"source":1074,"area":1,"density":0.284,"id":"e1592","stiffness":30000000,"target":1075,"stress":0.5361300549637904},{"source":1075,"area":1,"density":0.284,"id":"e1593","stiffness":30000000,"target":1076,"stress":80.1867072157145},{"source":1076,"area":1,"density":0.284,"id":"e1594","stiffness":30000000,"target":1077,"stress":63.034134990939954},{"source":1077,"area":1,"density":0.284,"id":"e1595","stiffness":30000000,"target":1070,"stress":87.95652252490724},{"source":739,"area":1,"density":0.284,"id":"e1596","stiffness":30000000,"target":1075,"stress":84.88011812600622},{"source":1042,"area":1,"density":0.284,"id":"e1597","stiffness":30000000,"target":1077,"stress":14.096314865643285},{"source":1059,"area":1,"density":0.284,"id":"e1598","stiffness":30000000,"target":1071,"stress":-37.997591140388785},{"source":1069,"area":1,"density":0.284,"id":"e1599","stiffness":30000000,"target":1073,"stress":-1.2628087591999073},{"source":740,"area":1,"density":0.284,"id":"e1600","stiffness":30000000,"target":748,"stress":-113.143753377246},{"source":637,"area":1,"density":0.284,"id":"e1601","stiffness":30000000,"target":746,"stress":-460.8800024419221},{"source":711,"area":1,"density":0.284,"id":"e1602","stiffness":30000000,"target":744,"stress":-116.92870739669604},{"source":739,"area":1,"density":0.284,"id":"e1603","stiffness":30000000,"target":742,"stress":-368.29950492830557},{"source":1042,"area":1,"density":0.284,"id":"e1604","stiffness":30000000,"target":1052,"stress":-444.43885022930976},{"source":711,"area":1,"density":0.284,"id":"e1605","stiffness":30000000,"target":1054,"stress":-18.76487142170126},{"source":943,"area":1,"density":0.284,"id":"e1606","stiffness":30000000,"target":1056,"stress":-591.6629591730691},{"source":1033,"area":1,"density":0.284,"id":"e1607","stiffness":30000000,"target":1058,"stress":114.00714115352373},{"source":1078,"area":1,"density":0.284,"id":"e1608","stiffness":30000000,"target":1079,"stress":-93.85152951371504},{"source":1079,"area":1,"density":0.284,"id":"e1609","stiffness":30000000,"target":1080,"stress":-192.02815634964566},{"source":1080,"area":1,"density":0.284,"id":"e1610","stiffness":30000000,"target":1081,"stress":-171.06551491437105},{"source":1081,"area":1,"density":0.284,"id":"e1611","stiffness":30000000,"target":1082,"stress":73.54432805675033},{"source":1082,"area":1,"density":0.284,"id":"e1612","stiffness":30000000,"target":1083,"stress":-50.71798762857258},{"source":1083,"area":1,"density":0.284,"id":"e1613","stiffness":30000000,"target":1084,"stress":-163.13390342946536},{"source":1084,"area":1,"density":0.284,"id":"e1614","stiffness":30000000,"target":1085,"stress":-172.58843811103216},{"source":1085,"area":1,"density":0.284,"id":"e1615","stiffness":30000000,"target":1078,"stress":73.2333443918316},{"source":1060,"area":1,"density":0.284,"id":"e1616","stiffness":30000000,"target":1083,"stress":10.851159728169534},{"source":970,"area":1,"density":0.284,"id":"e1617","stiffness":30000000,"target":1081,"stress":-288.5868562263358},{"source":740,"area":1,"density":0.284,"id":"e1618","stiffness":30000000,"target":1079,"stress":1.198677717043211},{"source":1069,"area":1,"density":0.284,"id":"e1619","stiffness":30000000,"target":1085,"stress":-331.74357951347207}],"ndofs":6516}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/simulation/json/trialJuliaParallel.json b/01_Code/physical_computing_interface/simulation/json/trialJuliaParallel.json
index e46c2b75484bcfc9cf13fabba9605a1e289825c8..aca87fbf4faec6b8ad5e3ef96c3724492e629091 100644
--- a/01_Code/physical_computing_interface/simulation/json/trialJuliaParallel.json
+++ b/01_Code/physical_computing_interface/simulation/json/trialJuliaParallel.json
@@ -1 +1 @@
-{"nodes":[{"degrees_of_freedom":[0,1,2,3,4,5],"id":"n0","parent":"11","position":{"x":5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[6,7,8,9,10,11],"id":"n1","parent":"11","position":{"x":0,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[12,13,14,15,16,17],"id":"n2","parent":"11","position":{"x":-5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[18,19,20,21,22,23],"id":"n3","parent":"11","position":{"x":0,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[24,25,26,27,28,29],"id":"n4","parent":"11","position":{"x":5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.622669004540762e-5,"z":-3.649807507503507e-5,"y":-0.00018152598156514214},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[30,31,32,33,34,35],"id":"n5","parent":"11","position":{"x":5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0664850583263008e-5,"z":-4.622496070950513e-5,"y":-9.241220111914953e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[36,37,38,39,40,41],"id":"n6","parent":"11","position":{"x":5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0415461397413328e-5,"z":-7.979524037948363e-6,"y":-8.226909488574707e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[42,43,44,45,46,47],"id":"n7","parent":"11","position":{"x":-5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.943672435276918e-5,"z":-4.647451603141889e-5,"y":-0.00019857079727543677},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[48,49,50,51,52,53],"id":"n8","parent":"11","position":{"x":0,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.377908933265365e-5,"z":-4.9267195367282344e-5,"y":-0.0001966219143571467},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[54,55,56,57,58,59],"id":"n9","parent":"11","position":{"x":0,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7621166056535307e-5,"z":-2.152282985243175e-5,"y":-0.00018333998349201976},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[60,61,62,63,64,65],"id":"n10","parent":"11","position":{"x":-5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.540371661903145e-5,"z":-6.276743390482017e-5,"y":-0.00012068530154571406},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[66,67,68,69,70,71],"id":"n11","parent":"11","position":{"x":-5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.41110110322377e-5,"z":-9.330334893963357e-6,"y":-9.601815856311724e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[72,73,74,75,76,77],"id":"n12","parent":"11","position":{"x":5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[78,79,80,81,82,83],"id":"n13","parent":"11","position":{"x":-5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[84,85,86,87,88,89],"id":"n14","parent":"11","position":{"x":0,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[90,91,92,93,94,95],"id":"n15","parent":"11","position":{"x":5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.471553384292074e-5,"z":4.293076360450236e-15,"y":-0.00017523239732911627},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[96,97,98,99,100,101],"id":"n16","parent":"11","position":{"x":5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0415461397259376e-5,"z":7.979524038239048e-6,"y":-8.226909488636887e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[102,103,104,105,106,107],"id":"n17","parent":"11","position":{"x":-5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.0115326036532106e-5,"z":2.2989053293626976e-15,"y":-0.00018616562060585213},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[108,109,110,111,112,113],"id":"n18","parent":"11","position":{"x":0,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.762116605692124e-5,"z":2.152282984822276e-5,"y":-0.00018333998349205776},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[114,115,116,117,118,119],"id":"n19","parent":"11","position":{"x":-5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.411101103230907e-5,"z":9.330334892218617e-6,"y":-9.60181585633705e-5},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[120,121,122,123,124,125],"id":"n20","parent":"11","position":{"x":5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[126,127,128,129,130,131],"id":"n21","parent":"11","position":{"x":-5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[132,133,134,135,136,137],"id":"n22","parent":"11","position":{"x":0,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[138,139,140,141,142,143],"id":"n23","parent":"11","position":{"x":5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6226690045527584e-5,"z":3.649807507861705e-5,"y":-0.00018152598156441667},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[144,145,146,147,148,149],"id":"n24","parent":"11","position":{"x":5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0664850583020496e-5,"z":4.6224960711431364e-5,"y":-9.241220111875255e-5},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[150,151,152,153,154,155],"id":"n25","parent":"11","position":{"x":-5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.94367243532791e-5,"z":4.647451603424284e-5,"y":-0.0001985707972754713},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[156,157,158,159,160,161],"id":"n26","parent":"11","position":{"x":0,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.377908933215693e-5,"z":4.9267195364944194e-5,"y":-0.00019662191435669893},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[162,163,164,165,166,167],"id":"n27","parent":"11","position":{"x":-5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.540371661905112e-5,"z":6.27674339059022e-5,"y":-0.00012068530154538796},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[168,169,170,171,172,173],"id":"n28","parent":"11","position":{"x":5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.157181939621158e-5,"z":-4.391511017315585e-5,"y":-0.00038689371772921127},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[174,175,176,177,178,179],"id":"n29","parent":"11","position":{"x":5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.15755574346331e-5,"z":-7.619474063173224e-5,"y":-0.00028577052341646883},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[180,181,182,183,184,185],"id":"n30","parent":"11","position":{"x":5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8374076014173224e-5,"z":-2.2306797506710552e-5,"y":-0.0002809613713139767},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[186,187,188,189,190,191],"id":"n31","parent":"11","position":{"x":-5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.74773549988108e-5,"z":-5.453608168383314e-5,"y":-0.00039037793920424814},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[192,193,194,195,196,197],"id":"n32","parent":"11","position":{"x":0,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.265110343997018e-5,"z":-5.64156780532844e-5,"y":-0.0003870629312411871},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[198,199,200,201,202,203],"id":"n33","parent":"11","position":{"x":0,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.780310357938788e-5,"z":-2.569366250995223e-5,"y":-0.00039000978940298143},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[204,205,206,207,208,209],"id":"n34","parent":"11","position":{"x":-5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010749425148199805,"z":-9.216023831466012e-5,"y":-0.00029664225858187185},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[210,211,212,213,214,215],"id":"n35","parent":"11","position":{"x":-5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010088870315271804,"z":-2.789774547817684e-5,"y":-0.00028995401058972976},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[216,217,218,219,220,221],"id":"n36","parent":"11","position":{"x":5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0281177719633474e-5,"z":3.972900641371885e-15,"y":-0.0003908801157851507},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[222,223,224,225,226,227],"id":"n37","parent":"11","position":{"x":5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8374076014682307e-5,"z":2.2306797502773756e-5,"y":-0.0002809613713144747},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[228,229,230,231,232,233],"id":"n38","parent":"11","position":{"x":-5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.8763159630518174e-5,"z":1.503530880406231e-15,"y":-0.00039518547412590563},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[234,235,236,237,238,239],"id":"n39","parent":"11","position":{"x":0,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.7803103579533035e-5,"z":2.56936625084787e-5,"y":-0.0003900097894026942},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[240,241,242,243,244,245],"id":"n40","parent":"11","position":{"x":-5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001008887031527571,"z":2.7897745477413643e-5,"y":-0.0002899540105904807},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[246,247,248,249,250,251],"id":"n41","parent":"11","position":{"x":5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.157181939583025e-5,"z":4.391511017484086e-5,"y":-0.0003868937177300421},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[252,253,254,255,256,257],"id":"n42","parent":"11","position":{"x":5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.15755574344165e-5,"z":7.619474063370546e-5,"y":-0.000285770523415483},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[258,259,260,261,262,263],"id":"n43","parent":"11","position":{"x":-5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.747735499885347e-5,"z":5.453608168261128e-5,"y":-0.0003903779392038709},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[264,265,266,267,268,269],"id":"n44","parent":"11","position":{"x":0,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.265110344037391e-5,"z":5.64156780503657e-5,"y":-0.00038706293124060153},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[270,271,272,273,274,275],"id":"n45","parent":"11","position":{"x":-5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010749425148202485,"z":9.216023831524612e-5,"y":-0.00029664225858100373},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[276,277,278,279,280,281],"id":"n46","parent":"11","position":{"x":5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.640357923516516e-5,"z":-2.7593310076325773e-5,"y":-0.000684248754903702},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[282,283,284,285,286,287],"id":"n47","parent":"11","position":{"x":5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.739787689731868e-5,"z":-6.843540228700012e-5,"y":-0.0005094201798121322},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[288,289,290,291,292,293],"id":"n48","parent":"11","position":{"x":5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5529458048716966e-5,"z":-1.7609799416615502e-5,"y":-0.0005242205440922308},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[294,295,296,297,298,299],"id":"n49","parent":"11","position":{"x":-5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.054157383271568e-5,"z":-3.712901865602862e-5,"y":-0.0006807830087482441},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[300,301,302,303,304,305],"id":"n50","parent":"11","position":{"x":0,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.105490188550998e-5,"z":-2.939725528546853e-5,"y":-0.0006698870233351675},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[306,307,308,309,310,311],"id":"n51","parent":"11","position":{"x":0,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.7989864477355407e-5,"z":-1.7252236252765174e-5,"y":-0.0006869368037637531},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[312,313,314,315,316,317],"id":"n52","parent":"11","position":{"x":-5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.944414308591107e-5,"z":-8.304862567770509e-5,"y":-0.0004989706872073259},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[318,319,320,321,322,323],"id":"n53","parent":"11","position":{"x":-5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.690093516113132e-5,"z":-2.2608352359714697e-5,"y":-0.0005189452126844052},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[324,325,326,327,328,329],"id":"n54","parent":"11","position":{"x":5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.5436478834849228e-5,"z":3.919908888870616e-15,"y":-0.0006793167892824741},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[330,331,332,333,334,335],"id":"n55","parent":"11","position":{"x":5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5529458049329578e-5,"z":1.7609799415425506e-5,"y":-0.0005242205440920303},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[336,337,338,339,340,341],"id":"n56","parent":"11","position":{"x":-5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.217420980364284e-5,"z":1.8563881549496783e-15,"y":-0.0006782558432357761},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[342,343,344,345,346,347],"id":"n57","parent":"11","position":{"x":0,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.798986447810033e-5,"z":1.7252236247593926e-5,"y":-0.0006869368037634386},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[348,349,350,351,352,353],"id":"n58","parent":"11","position":{"x":-5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.690093516161118e-5,"z":2.2608352360963264e-5,"y":-0.0005189452126850586},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[354,355,356,357,358,359],"id":"n59","parent":"11","position":{"x":5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.640357923608995e-5,"z":2.7593310081519257e-5,"y":-0.0006842487549026783},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[360,361,362,363,364,365],"id":"n60","parent":"11","position":{"x":5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.739787689707269e-5,"z":6.843540228079202e-5,"y":-0.000509420179812258},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[366,367,368,369,370,371],"id":"n61","parent":"11","position":{"x":-5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.0541573832729864e-5,"z":3.7129018659037074e-5,"y":-0.0006807830087474601},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[372,373,374,375,376,377],"id":"n62","parent":"11","position":{"x":0,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.105490188500528e-5,"z":2.9397255284851536e-5,"y":-0.0006698870233334568},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[378,379,380,381,382,383],"id":"n63","parent":"11","position":{"x":-5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.944414308602272e-5,"z":8.304862567835243e-5,"y":-0.0004989706872080032},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[384,385,386,387,388,389],"id":"n64","parent":"11","position":{"x":15,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[390,391,392,393,394,395],"id":"n65","parent":"11","position":{"x":10,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[396,397,398,399,400,401],"id":"n66","parent":"11","position":{"x":10,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[402,403,404,405,406,407],"id":"n67","parent":"11","position":{"x":15,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6226690049924064e-5,"z":-3.64980750802813e-5,"y":-0.00018152598156451446},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[408,409,410,411,412,413],"id":"n68","parent":"11","position":{"x":15,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0664850591705531e-5,"z":-4.62249607120993e-5,"y":-9.24122011208084e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[414,415,416,417,418,419],"id":"n69","parent":"11","position":{"x":15,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0415461390419565e-5,"z":-7.979524039638566e-6,"y":-8.226909488656813e-5},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[420,421,422,423,424,425],"id":"n70","parent":"11","position":{"x":10,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4093426514988682e-14,"z":-3.967894390557354e-5,"y":-0.00018193413083052848},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[426,427,428,429,430,431],"id":"n71","parent":"11","position":{"x":10,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.973959241469921e-15,"z":-1.833652349287708e-5,"y":-0.0001745490197353032},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[432,433,434,435,436,437],"id":"n72","parent":"11","position":{"x":15,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[438,439,440,441,442,443],"id":"n73","parent":"11","position":{"x":10,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[444,445,446,447,448,449],"id":"n74","parent":"11","position":{"x":15,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4715533828102213e-5,"z":4.185197987257086e-15,"y":-0.00017523239733414835},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[450,451,452,453,454,455],"id":"n75","parent":"11","position":{"x":15,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.041546138984717e-5,"z":7.979524039919407e-6,"y":-8.22690948869498e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[456,457,458,459,460,461],"id":"n76","parent":"11","position":{"x":10,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.22250521945878e-15,"z":1.8336523489606273e-5,"y":-0.00017454901973526247},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[462,463,464,465,466,467],"id":"n77","parent":"11","position":{"x":15,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[468,469,470,471,472,473],"id":"n78","parent":"11","position":{"x":10,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[474,475,476,477,478,479],"id":"n79","parent":"11","position":{"x":15,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.622669005253111e-5,"z":3.649807508413272e-5,"y":-0.00018152598156403324},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[480,481,482,483,484,485],"id":"n80","parent":"11","position":{"x":15,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0664850591147653e-5,"z":4.622496071400262e-5,"y":-9.241220112013896e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[486,487,488,489,490,491],"id":"n81","parent":"11","position":{"x":10,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.379691294210751e-14,"z":3.967894390258713e-5,"y":-0.00018193413082949423},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[492,493,494,495,496,497],"id":"n82","parent":"11","position":{"x":15,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1571819396543286e-5,"z":-4.391511017068042e-5,"y":-0.000386893717721707},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[498,499,500,501,502,503],"id":"n83","parent":"11","position":{"x":15,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.157555748933821e-5,"z":-7.619474063694344e-5,"y":-0.00028577052339586953},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[504,505,506,507,508,509],"id":"n84","parent":"11","position":{"x":15,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8374075968478117e-5,"z":-2.2306797513444115e-5,"y":-0.00028096137132857806},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[510,511,512,513,514,515],"id":"n85","parent":"11","position":{"x":10,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.23002739784772e-14,"z":-4.597811671261646e-5,"y":-0.0003876268082655333},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[516,517,518,519,520,521],"id":"n86","parent":"11","position":{"x":10,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9530289181524966e-14,"z":-2.225015419963793e-5,"y":-0.00038998851029909044},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[522,523,524,525,526,527],"id":"n87","parent":"11","position":{"x":15,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0281177658931956e-5,"z":3.7085489220645106e-15,"y":-0.0003908801158224606},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[528,529,530,531,532,533],"id":"n88","parent":"11","position":{"x":15,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8374075968120144e-5,"z":2.2306797509617416e-5,"y":-0.0002809613713290442},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[534,535,536,537,538,539],"id":"n89","parent":"11","position":{"x":10,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.947743667059755e-14,"z":2.2250154198290694e-5,"y":-0.0003899885102990893},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[540,541,542,543,544,545],"id":"n90","parent":"11","position":{"x":15,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.157181939641227e-5,"z":4.391511017250436e-5,"y":-0.0003868937177226845},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[546,547,548,549,550,551],"id":"n91","parent":"11","position":{"x":15,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1575557488802574e-5,"z":7.619474063893544e-5,"y":-0.00028577052339515016},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[552,553,554,555,556,557],"id":"n92","parent":"11","position":{"x":10,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.22239395123529e-14,"z":4.59781167107343e-5,"y":-0.00038762680826382405},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[558,559,560,561,562,563],"id":"n93","parent":"11","position":{"x":15,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.6403579194246127e-5,"z":-2.759331002200859e-5,"y":-0.0006842487548826687},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[564,565,566,567,568,569],"id":"n94","parent":"11","position":{"x":15,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7397876987371424e-5,"z":-6.843540224762872e-5,"y":-0.0005094201797351822},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[570,571,572,573,574,575],"id":"n95","parent":"11","position":{"x":15,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.552945794730746e-5,"z":-1.760979939863312e-5,"y":-0.0005242205441317948},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[576,577,578,579,580,581],"id":"n96","parent":"11","position":{"x":10,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":9.944324498261432e-15,"z":-1.848470678214762e-5,"y":-0.0006623083405927487},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[582,583,584,585,586,587],"id":"n97","parent":"11","position":{"x":10,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.999523230647442e-14,"z":-1.4132588321151932e-5,"y":-0.0006762177500546807},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[588,589,590,591,592,593],"id":"n98","parent":"11","position":{"x":15,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.5436478700342232e-5,"z":3.816790768587257e-15,"y":-0.0006793167893080055},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[594,595,596,597,598,599],"id":"n99","parent":"11","position":{"x":15,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.552945794684534e-5,"z":1.7609799397626064e-5,"y":-0.0005242205441316564},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[600,601,602,603,604,605],"id":"n100","parent":"11","position":{"x":10,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.992333447664059e-14,"z":1.4132588316510469e-5,"y":-0.0006762177500546768},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[606,607,608,609,610,611],"id":"n101","parent":"11","position":{"x":15,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.6403579195027708e-5,"z":2.7593310027274586e-5,"y":-0.0006842487548815358},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[612,613,614,615,616,617],"id":"n102","parent":"11","position":{"x":15,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7397876987732294e-5,"z":6.843540224140432e-5,"y":-0.0005094201797351987},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[618,619,620,621,622,623],"id":"n103","parent":"11","position":{"x":10,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":9.936151831844958e-15,"z":1.8484706778428716e-5,"y":-0.0006623083405910376},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[624,625,626,627,628,629],"id":"n104","parent":"11","position":{"x":25,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[630,631,632,633,634,635],"id":"n105","parent":"11","position":{"x":20,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[636,637,638,639,640,641],"id":"n106","parent":"11","position":{"x":20,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[642,643,644,645,646,647],"id":"n107","parent":"11","position":{"x":25,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.943672434929455e-5,"z":-4.6474516045339845e-5,"y":-0.00019857079727649368},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[648,649,650,651,652,653],"id":"n108","parent":"11","position":{"x":25,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.540371662474222e-5,"z":-6.276743391166985e-5,"y":-0.00012068530155025119},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[654,655,656,657,658,659],"id":"n109","parent":"11","position":{"x":25,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.411101103000319e-5,"z":-9.33033489726297e-6,"y":-9.601815856137757e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[660,661,662,663,664,665],"id":"n110","parent":"11","position":{"x":20,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.377908934464671e-5,"z":-4.926719537586471e-5,"y":-0.00019662191435361419},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[666,667,668,669,670,671],"id":"n111","parent":"11","position":{"x":20,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.7621166041136505e-5,"z":-2.1522829856823794e-5,"y":-0.00018333998349751143},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[672,673,674,675,676,677],"id":"n112","parent":"11","position":{"x":25,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[678,679,680,681,682,683],"id":"n113","parent":"11","position":{"x":20,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[684,685,686,687,688,689],"id":"n114","parent":"11","position":{"x":25,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.011532602470781e-5,"z":2.475233219871976e-15,"y":-0.00018616562060938966},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[690,691,692,693,694,695],"id":"n115","parent":"11","position":{"x":25,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.411101103003464e-5,"z":9.330334895621843e-6,"y":-9.601815856166844e-5},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[696,697,698,699,700,701],"id":"n116","parent":"11","position":{"x":20,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.7621166041564426e-5,"z":2.1522829852024325e-5,"y":-0.00018333998349757779},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[702,703,704,705,706,707],"id":"n117","parent":"11","position":{"x":25,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[708,709,710,711,712,713],"id":"n118","parent":"11","position":{"x":20,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[714,715,716,717,718,719],"id":"n119","parent":"11","position":{"x":25,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.9436724349415116e-5,"z":4.647451604777672e-5,"y":-0.0001985707972767195},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[720,721,722,723,724,725],"id":"n120","parent":"11","position":{"x":25,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.54037166245126e-5,"z":6.27674339126665e-5,"y":-0.00012068530155027375},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[726,727,728,729,730,731],"id":"n121","parent":"11","position":{"x":20,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.377908934575334e-5,"z":4.9267195374104666e-5,"y":-0.00019662191435311963},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[732,733,734,735,736,737],"id":"n122","parent":"11","position":{"x":25,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.74773549921152e-5,"z":-5.4536081695715786e-5,"y":-0.00039037793919015687},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[738,739,740,741,742,743],"id":"n123","parent":"11","position":{"x":25,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010749425148966461,"z":-9.216023833340413e-5,"y":-0.0002966422585563283},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[744,745,746,747,748,749],"id":"n124","parent":"11","position":{"x":25,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010088870313693533,"z":-2.789774550173317e-5,"y":-0.0002899540106140654},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[750,751,752,753,754,755],"id":"n125","parent":"11","position":{"x":20,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.265110349141813e-5,"z":-5.64156780422259e-5,"y":-0.00038706293114100753},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[756,757,758,759,760,761],"id":"n126","parent":"11","position":{"x":20,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7803103523855025e-5,"z":-2.5693662503752205e-5,"y":-0.0003900097894660623},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[762,763,764,765,766,767],"id":"n127","parent":"11","position":{"x":25,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.8763159591997684e-5,"z":1.5606480032091826e-15,"y":-0.0003951854742226091},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[768,769,770,771,772,773],"id":"n128","parent":"11","position":{"x":25,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010088870313629748,"z":2.7897745500794137e-5,"y":-0.00028995401061367236},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[774,775,776,777,778,779],"id":"n129","parent":"11","position":{"x":20,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.780310352368397e-5,"z":2.5693662502984837e-5,"y":-0.00039000978946627276},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[780,781,782,783,784,785],"id":"n130","parent":"11","position":{"x":25,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.747735499324769e-5,"z":5.453608169457314e-5,"y":-0.0003903779391902922},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[786,787,788,789,790,791],"id":"n131","parent":"11","position":{"x":25,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001074942514892943,"z":9.216023833401722e-5,"y":-0.00029664225855504885},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[792,793,794,795,796,797],"id":"n132","parent":"11","position":{"x":20,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.265110349130742e-5,"z":5.6415678038750215e-5,"y":-0.0003870629311404042},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[798,799,800,801,802,803],"id":"n133","parent":"11","position":{"x":25,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.0541573847183614e-5,"z":-3.712901822761736e-5,"y":-0.0006807830086985303},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[804,805,806,807,808,809],"id":"n134","parent":"11","position":{"x":25,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.944414317251503e-5,"z":-8.304862563637759e-5,"y":-0.0004989706869786226},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[810,811,812,813,814,815],"id":"n135","parent":"11","position":{"x":25,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.690093505333794e-5,"z":-2.260835235581193e-5,"y":-0.0005189452128393646},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[816,817,818,819,820,821],"id":"n136","parent":"11","position":{"x":20,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.1054901981180646e-5,"z":-2.9397255144471136e-5,"y":-0.0006698870230960394},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[822,823,824,825,826,827],"id":"n137","parent":"11","position":{"x":20,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.798986435548446e-5,"z":-1.725223619059061e-5,"y":-0.0006869368039293332},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[828,829,830,831,832,833],"id":"n138","parent":"11","position":{"x":25,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.217420971102332e-5,"z":1.676054791632663e-15,"y":-0.0006782558434006911},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[834,835,836,837,838,839],"id":"n139","parent":"11","position":{"x":25,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.690093505293194e-5,"z":2.2608352357014057e-5,"y":-0.0005189452128387015},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[840,841,842,843,844,845],"id":"n140","parent":"11","position":{"x":20,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.7989864356023846e-5,"z":1.7252236185361894e-5,"y":-0.0006869368039293307},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[846,847,848,849,850,851],"id":"n141","parent":"11","position":{"x":25,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.054157384752511e-5,"z":3.712901823057802e-5,"y":-0.0006807830086981802},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[852,853,854,855,856,857],"id":"n142","parent":"11","position":{"x":25,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.944414317247121e-5,"z":8.304862563733013e-5,"y":-0.0004989706869791533},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[858,859,860,861,862,863],"id":"n143","parent":"11","position":{"x":20,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.105490198073157e-5,"z":2.9397255143902086e-5,"y":-0.0006698870230943305},"angle":{"x":0.0,"z":0.0,"y":0.0}}],"bar":false,"animation":{"speed":3,"exageration":2000,"showDisplacement":true},"viz":{"colorMap":0,"colorMaps":[[[0,[0.23,0.299,0.754]],[0.002,[0.23,0.299,0.754]],[0.004,[0.234,0.306,0.76]],[0.006,[0.234,0.306,0.76]],[0.008,[0.239,0.312,0.766]],[0.01,[0.239,0.312,0.766]],[0.012,[0.244,0.319,0.772]],[0.014,[0.244,0.319,0.772]],[0.016,[0.248,0.326,0.778]],[0.018,[0.248,0.326,0.778]],[0.02,[0.253,0.333,0.784]],[0.022,[0.253,0.333,0.784]],[0.023,[0.257,0.34,0.79]],[0.025,[0.257,0.34,0.79]],[0.027,[0.262,0.346,0.796]],[0.029,[0.262,0.346,0.796]],[0.031,[0.266,0.353,0.802]],[0.033,[0.266,0.353,0.802]],[0.035,[0.271,0.36,0.807]],[0.037,[0.271,0.36,0.807]],[0.039,[0.276,0.367,0.813]],[0.041,[0.276,0.367,0.813]],[0.043,[0.281,0.373,0.818]],[0.045,[0.281,0.373,0.818]],[0.047,[0.285,0.38,0.823]],[0.049,[0.285,0.38,0.823]],[0.051,[0.29,0.387,0.829]],[0.053,[0.29,0.387,0.829]],[0.055,[0.295,0.394,0.834]],[0.057,[0.295,0.394,0.834]],[0.059,[0.299,0.4,0.84]],[0.061,[0.299,0.4,0.84]],[0.063,[0.304,0.407,0.845]],[0.065,[0.304,0.407,0.845]],[0.067,[0.309,0.413,0.85]],[0.068,[0.309,0.413,0.85]],[0.07,[0.314,0.42,0.855]],[0.072,[0.314,0.42,0.855]],[0.074,[0.319,0.427,0.86]],[0.076,[0.319,0.427,0.86]],[0.078,[0.324,0.433,0.865]],[0.08,[0.324,0.433,0.865]],[0.082,[0.329,0.44,0.87]],[0.084,[0.329,0.44,0.87]],[0.086,[0.333,0.446,0.874]],[0.088,[0.333,0.446,0.874]],[0.09,[0.338,0.453,0.879]],[0.092,[0.338,0.453,0.879]],[0.094,[0.343,0.459,0.884]],[0.096,[0.343,0.459,0.884]],[0.098,[0.348,0.466,0.888]],[0.1,[0.348,0.466,0.888]],[0.102,[0.353,0.472,0.893]],[0.104,[0.353,0.472,0.893]],[0.106,[0.358,0.478,0.897]],[0.108,[0.358,0.478,0.897]],[0.11,[0.363,0.485,0.901]],[0.112,[0.363,0.485,0.901]],[0.114,[0.369,0.491,0.905]],[0.115,[0.369,0.491,0.905]],[0.117,[0.374,0.497,0.909]],[0.119,[0.374,0.497,0.909]],[0.121,[0.379,0.504,0.914]],[0.123,[0.379,0.504,0.914]],[0.125,[0.384,0.51,0.918]],[0.127,[0.384,0.51,0.918]],[0.129,[0.389,0.516,0.921]],[0.131,[0.389,0.516,0.921]],[0.133,[0.394,0.522,0.925]],[0.135,[0.394,0.522,0.925]],[0.137,[0.399,0.529,0.928]],[0.139,[0.399,0.529,0.928]],[0.141,[0.404,0.535,0.932]],[0.143,[0.404,0.535,0.932]],[0.145,[0.41,0.541,0.936]],[0.147,[0.41,0.541,0.936]],[0.149,[0.415,0.547,0.939]],[0.151,[0.415,0.547,0.939]],[0.153,[0.42,0.553,0.943]],[0.155,[0.42,0.553,0.943]],[0.157,[0.425,0.559,0.946]],[0.159,[0.425,0.559,0.946]],[0.16,[0.431,0.565,0.949]],[0.162,[0.431,0.565,0.949]],[0.164,[0.436,0.571,0.952]],[0.166,[0.436,0.571,0.952]],[0.168,[0.441,0.577,0.955]],[0.17,[0.441,0.577,0.955]],[0.172,[0.446,0.582,0.957]],[0.174,[0.446,0.582,0.957]],[0.176,[0.452,0.588,0.96]],[0.178,[0.452,0.588,0.96]],[0.18,[0.457,0.594,0.963]],[0.182,[0.457,0.594,0.963]],[0.184,[0.462,0.6,0.966]],[0.186,[0.462,0.6,0.966]],[0.188,[0.468,0.606,0.969]],[0.19,[0.468,0.606,0.969]],[0.192,[0.473,0.611,0.971]],[0.194,[0.473,0.611,0.971]],[0.196,[0.478,0.617,0.973]],[0.198,[0.478,0.617,0.973]],[0.2,[0.484,0.622,0.975]],[0.202,[0.484,0.622,0.975]],[0.204,[0.489,0.628,0.977]],[0.205,[0.489,0.628,0.977]],[0.207,[0.495,0.633,0.979]],[0.209,[0.495,0.633,0.979]],[0.211,[0.5,0.639,0.981]],[0.213,[0.5,0.639,0.981]],[0.215,[0.505,0.644,0.983]],[0.217,[0.505,0.644,0.983]],[0.219,[0.511,0.649,0.985]],[0.221,[0.511,0.649,0.985]],[0.223,[0.516,0.654,0.986]],[0.225,[0.516,0.654,0.986]],[0.227,[0.522,0.66,0.988]],[0.229,[0.522,0.66,0.988]],[0.231,[0.527,0.665,0.989]],[0.233,[0.527,0.665,0.989]],[0.235,[0.533,0.67,0.99]],[0.237,[0.533,0.67,0.99]],[0.239,[0.538,0.675,0.992]],[0.241,[0.538,0.675,0.992]],[0.243,[0.543,0.68,0.993]],[0.245,[0.543,0.68,0.993]],[0.247,[0.549,0.685,0.994]],[0.249,[0.549,0.685,0.994]],[0.25,[0.554,0.69,0.996]],[0.252,[0.554,0.69,0.996]],[0.254,[0.56,0.695,0.996]],[0.256,[0.56,0.695,0.996]],[0.258,[0.565,0.699,0.997]],[0.26,[0.565,0.699,0.997]],[0.262,[0.571,0.704,0.997]],[0.264,[0.571,0.704,0.997]],[0.266,[0.576,0.709,0.998]],[0.268,[0.576,0.709,0.998]],[0.27,[0.581,0.713,0.998]],[0.272,[0.581,0.713,0.998]],[0.274,[0.587,0.718,0.999]],[0.276,[0.587,0.718,0.999]],[0.278,[0.592,0.723,0.999]],[0.28,[0.592,0.723,0.999]],[0.282,[0.598,0.727,1]],[0.028,[0.598,0.727,1]],[0.286,[0.603,0.732,1]],[0.288,[0.603,0.732,1]],[0.29,[0.609,0.736,0.999]],[0.292,[0.609,0.736,0.999]],[0.294,[0.614,0.74,0.999]],[0.295,[0.614,0.74,0.999]],[0.297,[0.619,0.744,0.999]],[0.299,[0.619,0.744,0.999]],[0.301,[0.625,0.748,0.999]],[0.303,[0.625,0.748,0.999]],[0.305,[0.63,0.753,0.999]],[0.307,[0.63,0.753,0.999]],[0.309,[0.635,0.757,0.998]],[0.311,[0.635,0.757,0.998]],[0.313,[0.641,0.761,0.998]],[0.315,[0.641,0.761,0.998]],[0.317,[0.646,0.764,0.997]],[0.319,[0.646,0.764,0.997]],[0.321,[0.651,0.768,0.996]],[0.323,[0.651,0.768,0.996]],[0.325,[0.657,0.772,0.995]],[0.327,[0.657,0.772,0.995]],[0.329,[0.662,0.775,0.994]],[0.331,[0.662,0.775,0.994]],[0.333,[0.667,0.779,0.993]],[0.335,[0.667,0.779,0.993]],[0.337,[0.673,0.783,0.992]],[0.339,[0.673,0.783,0.992]],[0.341,[0.678,0.787,0.991]],[0.342,[0.678,0.787,0.991]],[0.344,[0.683,0.79,0.99]],[0.346,[0.683,0.79,0.99]],[0.348,[0.688,0.793,0.988]],[0.35,[0.688,0.793,0.988]],[0.352,[0.693,0.796,0.986]],[0.354,[0.693,0.796,0.986]],[0.356,[0.698,0.799,0.985]],[0.358,[0.698,0.799,0.985]],[0.36,[0.704,0.803,0.983]],[0.362,[0.704,0.803,0.983]],[0.364,[0.709,0.806,0.981]],[0.366,[0.709,0.806,0.981]],[0.368,[0.714,0.809,0.979]],[0.37,[0.714,0.809,0.979]],[0.372,[0.719,0.812,0.978]],[0.374,[0.719,0.812,0.978]],[0.376,[0.724,0.815,0.976]],[0.378,[0.724,0.815,0.976]],[0.38,[0.729,0.817,0.973]],[0.382,[0.729,0.817,0.973]],[0.384,[0.734,0.82,0.971]],[0.386,[0.734,0.82,0.971]],[0.387,[0.739,0.823,0.968]],[0.389,[0.739,0.823,0.968]],[0.391,[0.744,0.825,0.966]],[0.393,[0.744,0.825,0.966]],[0.395,[0.749,0.828,0.963]],[0.397,[0.749,0.828,0.963]],[0.399,[0.754,0.83,0.961]],[0.401,[0.754,0.83,0.961]],[0.403,[0.759,0.833,0.958]],[0.405,[0.759,0.833,0.958]],[0.407,[0.763,0.835,0.956]],[0.409,[0.763,0.835,0.956]],[0.411,[0.768,0.837,0.952]],[0.413,[0.768,0.837,0.952]],[0.415,[0.773,0.839,0.949]],[0.417,[0.773,0.839,0.949]],[0.419,[0.777,0.841,0.946]],[0.421,[0.777,0.841,0.946]],[0.423,[0.782,0.843,0.943]],[0.425,[0.782,0.843,0.943]],[0.427,[0.787,0.845,0.94]],[0.429,[0.787,0.845,0.94]],[0.431,[0.791,0.847,0.937]],[0.432,[0.791,0.847,0.937]],[0.434,[0.796,0.849,0.933]],[0.436,[0.796,0.849,0.933]],[0.438,[0.801,0.85,0.93]],[0.44,[0.801,0.85,0.93]],[0.442,[0.805,0.852,0.926]],[0.444,[0.805,0.852,0.926]],[0.446,[0.809,0.853,0.922]],[0.448,[0.809,0.853,0.922]],[0.45,[0.814,0.854,0.918]],[0.452,[0.814,0.854,0.918]],[0.454,[0.818,0.856,0.915]],[0.456,[0.818,0.856,0.915]],[0.458,[0.822,0.857,0.911]],[0.46,[0.822,0.857,0.911]],[0.462,[0.827,0.858,0.907]],[0.464,[0.827,0.858,0.907]],[0.466,[0.831,0.86,0.903]],[0.468,[0.831,0.86,0.903]],[0.47,[0.835,0.861,0.899]],[0.472,[0.835,0.861,0.899]],[0.474,[0.839,0.861,0.894]],[0.476,[0.839,0.861,0.894]],[0.477,[0.843,0.862,0.89]],[0.479,[0.843,0.862,0.89]],[0.481,[0.847,0.862,0.886]],[0.483,[0.847,0.862,0.886]],[0.485,[0.851,0.863,0.881]],[0.487,[0.851,0.863,0.881]],[0.489,[0.855,0.864,0.877]],[0.491,[0.855,0.864,0.877]],[0.493,[0.859,0.864,0.872]],[0.495,[0.859,0.864,0.872]],[0.497,[0.863,0.865,0.868]],[0.499,[0.863,0.865,0.868]],[0.501,[0.867,0.864,0.863]],[0.503,[0.867,0.864,0.863]],[0.505,[0.871,0.862,0.857]],[0.507,[0.871,0.862,0.857]],[0.509,[0.876,0.86,0.851]],[0.511,[0.876,0.86,0.851]],[0.513,[0.88,0.858,0.846]],[0.515,[0.88,0.858,0.846]],[0.517,[0.884,0.856,0.84]],[0.519,[0.884,0.856,0.84]],[0.521,[0.888,0.854,0.835]],[0.523,[0.888,0.854,0.835]],[0.524,[0.892,0.852,0.829]],[0.526,[0.892,0.852,0.829]],[0.528,[0.896,0.85,0.823]],[0.53,[0.896,0.85,0.823]],[0.532,[0.9,0.848,0.818]],[0.534,[0.9,0.848,0.818]],[0.536,[0.903,0.845,0.812]],[0.538,[0.903,0.845,0.812]],[0.54,[0.906,0.842,0.806]],[0.542,[0.906,0.842,0.806]],[0.544,[0.909,0.839,0.8]],[0.546,[0.909,0.839,0.8]],[0.548,[0.913,0.837,0.795]],[0.55,[0.913,0.837,0.795]],[0.552,[0.916,0.834,0.789]],[0.554,[0.916,0.834,0.789]],[0.556,[0.919,0.831,0.783]],[0.558,[0.919,0.831,0.783]],[0.56,[0.923,0.829,0.777]],[0.562,[0.923,0.829,0.777]],[0.564,[0.926,0.826,0.771]],[0.566,[0.926,0.826,0.771]],[0.568,[0.928,0.822,0.765]],[0.569,[0.928,0.822,0.765]],[0.571,[0.931,0.819,0.759]],[0.573,[0.931,0.819,0.759]],[0.575,[0.933,0.816,0.753]],[0.577,[0.933,0.816,0.753]],[0.579,[0.936,0.812,0.747]],[0.581,[0.936,0.812,0.747]],[0.583,[0.938,0.809,0.741]],[0.585,[0.938,0.809,0.741]],[0.587,[0.941,0.806,0.735]],[0.589,[0.941,0.806,0.735]],[0.591,[0.943,0.802,0.729]],[0.593,[0.943,0.802,0.729]],[0.595,[0.946,0.799,0.723]],[0.597,[0.946,0.799,0.723]],[0.599,[0.947,0.795,0.717]],[0.601,[0.947,0.795,0.717]],[0.603,[0.949,0.791,0.711]],[0.605,[0.949,0.791,0.711]],[0.607,[0.951,0.787,0.705]],[0.609,[0.951,0.787,0.705]],[0.611,[0.953,0.783,0.699]],[0.613,[0.953,0.783,0.699]],[0.614,[0.955,0.779,0.693]],[0.616,[0.955,0.779,0.693]],[0.618,[0.956,0.775,0.686]],[0.62,[0.956,0.775,0.686]],[0.622,[0.958,0.771,0.68]],[0.624,[0.958,0.771,0.68]],[0.626,[0.96,0.767,0.674]],[0.628,[0.96,0.767,0.674]],[0.63,[0.961,0.763,0.668]],[0.632,[0.961,0.763,0.668]],[0.634,[0.962,0.758,0.662]],[0.636,[0.962,0.758,0.662]],[0.638,[0.963,0.754,0.656]],[0.64,[0.963,0.754,0.656]],[0.642,[0.964,0.749,0.649]],[0.644,[0.964,0.749,0.649]],[0.646,[0.965,0.745,0.643]],[0.648,[0.965,0.745,0.643]],[0.65,[0.966,0.74,0.637]],[0.652,[0.966,0.74,0.637]],[0.654,[0.967,0.736,0.631]],[0.656,[0.967,0.736,0.631]],[0.658,[0.968,0.731,0.625]],[0.659,[0.968,0.731,0.625]],[0.661,[0.968,0.726,0.618]],[0.663,[0.968,0.726,0.618]],[0.665,[0.968,0.721,0.612]],[0.667,[0.968,0.721,0.612]],[0.669,[0.969,0.716,0.606]],[0.671,[0.969,0.716,0.606]],[0.673,[0.969,0.711,0.6]],[0.675,[0.969,0.711,0.6]],[0.677,[0.969,0.706,0.594]],[0.679,[0.969,0.706,0.594]],[0.681,[0.97,0.701,0.588]],[0.683,[0.97,0.701,0.588]],[0.685,[0.97,0.696,0.581]],[0.687,[0.97,0.696,0.581]],[0.689,[0.97,0.69,0.575]],[0.691,[0.97,0.69,0.575]],[0.693,[0.969,0.685,0.569]],[0.695,[0.969,0.685,0.569]],[0.697,[0.969,0.679,0.563]],[0.699,[0.969,0.679,0.563]],[0.701,[0.968,0.674,0.557]],[0.703,[0.968,0.674,0.557]],[0.705,[0.968,0.668,0.55]],[0.706,[0.968,0.668,0.55]],[0.708,[0.968,0.663,0.544]],[0.71,[0.968,0.663,0.544]],[0.712,[0.967,0.657,0.538]],[0.714,[0.967,0.657,0.538]],[0.716,[0.967,0.652,0.532]],[0.718,[0.967,0.652,0.532]],[0.72,[0.966,0.646,0.526]],[0.722,[0.966,0.646,0.526]],[0.724,[0.965,0.64,0.52]],[0.726,[0.965,0.64,0.52]],[0.728,[0.964,0.634,0.514]],[0.73,[0.964,0.634,0.514]],[0.732,[0.963,0.628,0.508]],[0.734,[0.963,0.628,0.508]],[0.736,[0.962,0.622,0.502]],[0.738,[0.962,0.622,0.502]],[0.74,[0.96,0.616,0.495]],[0.742,[0.96,0.616,0.495]],[0.744,[0.959,0.61,0.489]],[0.746,[0.959,0.61,0.489]],[0.748,[0.958,0.604,0.483]],[0.75,[0.958,0.604,0.483]],[0.751,[0.957,0.598,0.477]],[0.753,[0.957,0.598,0.477]],[0.755,[0.955,0.592,0.471]],[0.757,[0.955,0.592,0.471]],[0.759,[0.953,0.585,0.465]],[0.761,[0.953,0.585,0.465]],[0.763,[0.951,0.579,0.459]],[0.765,[0.951,0.579,0.459]],[0.767,[0.949,0.572,0.453]],[0.769,[0.949,0.572,0.453]],[0.771,[0.948,0.566,0.447]],[0.773,[0.948,0.566,0.447]],[0.775,[0.946,0.56,0.442]],[0.777,[0.946,0.56,0.442]],[0.779,[0.944,0.553,0.436]],[0.781,[0.944,0.553,0.436]],[0.783,[0.942,0.546,0.43]],[0.785,[0.942,0.546,0.43]],[0.787,[0.939,0.54,0.424]],[0.789,[0.939,0.54,0.424]],[0.791,[0.937,0.533,0.418]],[0.793,[0.937,0.533,0.418]],[0.795,[0.934,0.526,0.412]],[0.796,[0.934,0.526,0.412]],[0.798,[0.932,0.519,0.406]],[0.8,[0.932,0.519,0.406]],[0.802,[0.929,0.512,0.401]],[0.804,[0.929,0.512,0.401]],[0.806,[0.927,0.505,0.395]],[0.808,[0.927,0.505,0.395]],[0.81,[0.924,0.499,0.389]],[0.812,[0.924,0.499,0.389]],[0.814,[0.921,0.491,0.383]],[0.816,[0.921,0.491,0.383]],[0.818,[0.918,0.484,0.378]],[0.82,[0.918,0.484,0.378]],[0.822,[0.915,0.477,0.372]],[0.824,[0.915,0.477,0.372]],[0.826,[0.912,0.47,0.367]],[0.828,[0.912,0.47,0.367]],[0.83,[0.909,0.462,0.361]],[0.832,[0.909,0.462,0.361]],[0.834,[0.906,0.455,0.355]],[0.836,[0.906,0.455,0.355]],[0.838,[0.903,0.448,0.35]],[0.84,[0.903,0.448,0.35]],[0.841,[0.9,0.441,0.344]],[0.843,[0.9,0.441,0.344]],[0.845,[0.896,0.433,0.339]],[0.847,[0.896,0.433,0.339]],[0.849,[0.892,0.425,0.333]],[0.851,[0.892,0.425,0.333]],[0.853,[0.888,0.418,0.328]],[0.855,[0.888,0.418,0.328]],[0.857,[0.885,0.41,0.323]],[0.859,[0.885,0.41,0.323]],[0.861,[0.881,0.402,0.317]],[0.863,[0.881,0.402,0.317]],[0.865,[0.877,0.395,0.312]],[0.867,[0.877,0.395,0.312]],[0.869,[0.873,0.387,0.306]],[0.871,[0.873,0.387,0.306]],[0.873,[0.87,0.379,0.301]],[0.875,[0.87,0.379,0.301]],[0.877,[0.865,0.371,0.296]],[0.879,[0.865,0.371,0.296]],[0.881,[0.861,0.363,0.291]],[0.883,[0.861,0.363,0.291]],[0.885,[0.857,0.355,0.285]],[0.886,[0.857,0.355,0.285]],[0.888,[0.852,0.346,0.28]],[0.89,[0.852,0.346,0.28]],[0.892,[0.848,0.338,0.275]],[0.894,[0.848,0.338,0.275]],[0.896,[0.844,0.33,0.27]],[0.898,[0.844,0.33,0.27]],[0.9,[0.839,0.322,0.265]],[0.902,[0.839,0.322,0.265]],[0.904,[0.835,0.314,0.26]],[0.906,[0.835,0.314,0.26]],[0.908,[0.83,0.305,0.255]],[0.91,[0.83,0.305,0.255]],[0.912,[0.825,0.296,0.25]],[0.914,[0.825,0.296,0.25]],[0.916,[0.82,0.287,0.245]],[0.918,[0.82,0.287,0.245]],[0.92,[0.816,0.278,0.24]],[0.922,[0.816,0.278,0.24]],[0.924,[0.811,0.269,0.235]],[0.926,[0.811,0.269,0.235]],[0.928,[0.806,0.26,0.231]],[0.93,[0.806,0.26,0.231]],[0.932,[0.801,0.251,0.226]],[0.933,[0.801,0.251,0.226]],[0.935,[0.796,0.242,0.221]],[0.937,[0.796,0.242,0.221]],[0.939,[0.791,0.231,0.216]],[0.941,[0.791,0.231,0.216]],[0.943,[0.785,0.221,0.212]],[0.945,[0.785,0.221,0.212]],[0.947,[0.78,0.21,0.207]],[0.949,[0.78,0.21,0.207]],[0.951,[0.774,0.2,0.203]],[0.953,[0.774,0.2,0.203]],[0.955,[0.769,0.189,0.198]],[0.957,[0.769,0.189,0.198]],[0.959,[0.764,0.179,0.193]],[0.961,[0.764,0.179,0.193]],[0.963,[0.758,0.168,0.189]],[0.965,[0.758,0.168,0.189]],[0.967,[0.753,0.158,0.184]],[0.969,[0.753,0.158,0.184]],[0.971,[0.747,0.14,0.18]],[0.973,[0.747,0.14,0.18]],[0.975,[0.741,0.122,0.176]],[0.977,[0.741,0.122,0.176]],[0.978,[0.735,0.104,0.171]],[0.98,[0.735,0.104,0.171]],[0.982,[0.729,0.087,0.167]],[0.984,[0.729,0.087,0.167]],[0.986,[0.723,0.069,0.163]],[0.988,[0.723,0.069,0.163]],[0.99,[0.717,0.051,0.159]],[0.992,[0.717,0.051,0.159]],[0.994,[0.712,0.033,0.154]],[0.996,[0.712,0.033,0.154]],[0.998,[0.706,0.016,0.15]],[1,[0.706,0.016,0.15]]],[[0,[1,1,0.851]],[0.002,[1,1,0.851]],[0.004,[0.998,0.999,0.846]],[0.006,[0.998,0.999,0.846]],[0.008,[0.996,0.998,0.841]],[0.01,[0.996,0.998,0.841]],[0.012,[0.993,0.997,0.836]],[0.014,[0.993,0.997,0.836]],[0.016,[0.991,0.997,0.831]],[0.018,[0.991,0.997,0.831]],[0.02,[0.989,0.996,0.826]],[0.022,[0.989,0.996,0.826]],[0.023,[0.987,0.995,0.821]],[0.025,[0.987,0.995,0.821]],[0.027,[0.984,0.994,0.817]],[0.029,[0.984,0.994,0.817]],[0.031,[0.982,0.993,0.812]],[0.033,[0.982,0.993,0.812]],[0.035,[0.98,0.992,0.807]],[0.037,[0.98,0.992,0.807]],[0.039,[0.978,0.991,0.802]],[0.041,[0.978,0.991,0.802]],[0.043,[0.976,0.991,0.797]],[0.045,[0.976,0.991,0.797]],[0.047,[0.973,0.99,0.792]],[0.049,[0.973,0.99,0.792]],[0.051,[0.971,0.989,0.787]],[0.053,[0.971,0.989,0.787]],[0.055,[0.969,0.988,0.782]],[0.057,[0.969,0.988,0.782]],[0.059,[0.967,0.987,0.777]],[0.061,[0.967,0.987,0.777]],[0.063,[0.965,0.986,0.772]],[0.065,[0.965,0.986,0.772]],[0.067,[0.962,0.985,0.767]],[0.068,[0.962,0.985,0.767]],[0.07,[0.96,0.984,0.762]],[0.072,[0.96,0.984,0.762]],[0.074,[0.958,0.984,0.757]],[0.076,[0.958,0.984,0.757]],[0.078,[0.956,0.983,0.753]],[0.08,[0.956,0.983,0.753]],[0.082,[0.953,0.982,0.748]],[0.084,[0.953,0.982,0.748]],[0.086,[0.951,0.981,0.743]],[0.088,[0.951,0.981,0.743]],[0.09,[0.949,0.98,0.738]],[0.092,[0.949,0.98,0.738]],[0.094,[0.947,0.979,0.733]],[0.096,[0.947,0.979,0.733]],[0.098,[0.945,0.978,0.728]],[0.1,[0.945,0.978,0.728]],[0.102,[0.942,0.978,0.723]],[0.104,[0.942,0.978,0.723]],[0.106,[0.94,0.977,0.718]],[0.108,[0.94,0.977,0.718]],[0.11,[0.938,0.976,0.713]],[0.112,[0.938,0.976,0.713]],[0.114,[0.936,0.975,0.708]],[0.115,[0.936,0.975,0.708]],[0.117,[0.934,0.974,0.703]],[0.119,[0.934,0.974,0.703]],[0.121,[0.931,0.973,0.698]],[0.123,[0.931,0.973,0.698]],[0.125,[0.929,0.972,0.694]],[0.127,[0.929,0.972,0.694]],[0.129,[0.924,0.97,0.695]],[0.131,[0.924,0.97,0.695]],[0.133,[0.919,0.969,0.695]],[0.135,[0.919,0.969,0.695]],[0.137,[0.915,0.967,0.695]],[0.139,[0.915,0.967,0.695]],[0.141,[0.91,0.965,0.696]],[0.143,[0.91,0.965,0.696]],[0.145,[0.905,0.963,0.696]],[0.147,[0.905,0.963,0.696]],[0.149,[0.901,0.961,0.696]],[0.151,[0.901,0.961,0.696]],[0.153,[0.896,0.959,0.697]],[0.155,[0.896,0.959,0.697]],[0.157,[0.891,0.958,0.697]],[0.159,[0.891,0.958,0.697]],[0.16,[0.887,0.956,0.697]],[0.162,[0.887,0.956,0.697]],[0.164,[0.882,0.954,0.698]],[0.166,[0.882,0.954,0.698]],[0.168,[0.877,0.952,0.698]],[0.17,[0.877,0.952,0.698]],[0.172,[0.873,0.95,0.699]],[0.174,[0.873,0.95,0.699]],[0.176,[0.868,0.948,0.699]],[0.178,[0.868,0.948,0.699]],[0.18,[0.863,0.946,0.699]],[0.182,[0.863,0.946,0.699]],[0.184,[0.859,0.945,0.7]],[0.186,[0.859,0.945,0.7]],[0.188,[0.854,0.943,0.7]],[0.19,[0.854,0.943,0.7]],[0.192,[0.849,0.941,0.7]],[0.194,[0.849,0.941,0.7]],[0.196,[0.845,0.939,0.701]],[0.198,[0.845,0.939,0.701]],[0.2,[0.84,0.937,0.701]],[0.202,[0.84,0.937,0.701]],[0.204,[0.835,0.935,0.702]],[0.205,[0.835,0.935,0.702]],[0.207,[0.831,0.934,0.702]],[0.209,[0.831,0.934,0.702]],[0.211,[0.826,0.932,0.702]],[0.213,[0.826,0.932,0.702]],[0.215,[0.821,0.93,0.703]],[0.217,[0.821,0.93,0.703]],[0.219,[0.817,0.928,0.703]],[0.221,[0.817,0.928,0.703]],[0.223,[0.812,0.926,0.703]],[0.225,[0.812,0.926,0.703]],[0.227,[0.807,0.924,0.704]],[0.229,[0.807,0.924,0.704]],[0.231,[0.803,0.922,0.704]],[0.233,[0.803,0.922,0.704]],[0.235,[0.798,0.921,0.704]],[0.237,[0.798,0.921,0.704]],[0.239,[0.793,0.919,0.705]],[0.241,[0.793,0.919,0.705]],[0.243,[0.789,0.917,0.705]],[0.245,[0.789,0.917,0.705]],[0.247,[0.784,0.915,0.706]],[0.249,[0.784,0.915,0.706]],[0.25,[0.778,0.913,0.706]],[0.252,[0.778,0.913,0.706]],[0.254,[0.769,0.909,0.707]],[0.256,[0.769,0.909,0.707]],[0.258,[0.76,0.906,0.708]],[0.26,[0.76,0.906,0.708]],[0.262,[0.752,0.903,0.709]],[0.264,[0.752,0.903,0.709]],[0.266,[0.743,0.899,0.71]],[0.268,[0.743,0.899,0.71]],[0.27,[0.734,0.896,0.71]],[0.272,[0.734,0.896,0.71]],[0.274,[0.725,0.892,0.711]],[0.276,[0.725,0.892,0.711]],[0.278,[0.716,0.889,0.712]],[0.28,[0.716,0.889,0.712]],[0.282,[0.707,0.885,0.713]],[0.028,[0.707,0.885,0.713]],[0.286,[0.698,0.882,0.714]],[0.288,[0.698,0.882,0.714]],[0.29,[0.69,0.878,0.715]],[0.292,[0.69,0.878,0.715]],[0.294,[0.681,0.875,0.716]],[0.295,[0.681,0.875,0.716]],[0.297,[0.672,0.872,0.716]],[0.299,[0.672,0.872,0.716]],[0.301,[0.663,0.868,0.717]],[0.303,[0.663,0.868,0.717]],[0.305,[0.654,0.865,0.718]],[0.307,[0.654,0.865,0.718]],[0.309,[0.645,0.861,0.719]],[0.311,[0.645,0.861,0.719]],[0.313,[0.636,0.858,0.72]],[0.315,[0.636,0.858,0.72]],[0.317,[0.628,0.854,0.721]],[0.319,[0.628,0.854,0.721]],[0.321,[0.619,0.851,0.722]],[0.323,[0.619,0.851,0.722]],[0.325,[0.61,0.847,0.722]],[0.327,[0.61,0.847,0.722]],[0.329,[0.601,0.844,0.723]],[0.331,[0.601,0.844,0.723]],[0.333,[0.592,0.841,0.724]],[0.335,[0.592,0.841,0.724]],[0.337,[0.583,0.837,0.725]],[0.339,[0.583,0.837,0.725]],[0.341,[0.574,0.834,0.726]],[0.342,[0.574,0.834,0.726]],[0.344,[0.566,0.83,0.727]],[0.346,[0.566,0.83,0.727]],[0.348,[0.557,0.827,0.728]],[0.35,[0.557,0.827,0.728]],[0.352,[0.548,0.823,0.728]],[0.354,[0.548,0.823,0.728]],[0.356,[0.539,0.82,0.729]],[0.358,[0.539,0.82,0.729]],[0.36,[0.53,0.816,0.73]],[0.362,[0.53,0.816,0.73]],[0.364,[0.521,0.813,0.731]],[0.366,[0.521,0.813,0.731]],[0.368,[0.512,0.81,0.732]],[0.37,[0.512,0.81,0.732]],[0.372,[0.504,0.806,0.733]],[0.374,[0.504,0.806,0.733]],[0.376,[0.495,0.803,0.734]],[0.378,[0.495,0.803,0.734]],[0.38,[0.488,0.8,0.735]],[0.382,[0.488,0.8,0.735]],[0.384,[0.48,0.797,0.736]],[0.386,[0.48,0.797,0.736]],[0.387,[0.472,0.794,0.737]],[0.389,[0.472,0.794,0.737]],[0.391,[0.465,0.792,0.738]],[0.393,[0.465,0.792,0.738]],[0.395,[0.457,0.789,0.739]],[0.397,[0.457,0.789,0.739]],[0.399,[0.449,0.786,0.74]],[0.401,[0.449,0.786,0.74]],[0.403,[0.442,0.783,0.741]],[0.405,[0.442,0.783,0.741]],[0.407,[0.434,0.78,0.743]],[0.409,[0.434,0.78,0.743]],[0.411,[0.427,0.777,0.744]],[0.413,[0.427,0.777,0.744]],[0.415,[0.419,0.775,0.745]],[0.417,[0.419,0.775,0.745]],[0.419,[0.411,0.772,0.746]],[0.421,[0.411,0.772,0.746]],[0.423,[0.404,0.769,0.747]],[0.425,[0.404,0.769,0.747]],[0.427,[0.396,0.766,0.748]],[0.429,[0.396,0.766,0.748]],[0.431,[0.388,0.763,0.749]],[0.432,[0.388,0.763,0.749]],[0.434,[0.381,0.76,0.75]],[0.436,[0.381,0.76,0.75]],[0.438,[0.373,0.758,0.751]],[0.44,[0.373,0.758,0.751]],[0.442,[0.366,0.755,0.753]],[0.444,[0.366,0.755,0.753]],[0.446,[0.358,0.752,0.754]],[0.448,[0.358,0.752,0.754]],[0.45,[0.35,0.749,0.755]],[0.452,[0.35,0.749,0.755]],[0.454,[0.343,0.746,0.756]],[0.456,[0.343,0.746,0.756]],[0.458,[0.335,0.743,0.757]],[0.46,[0.335,0.743,0.757]],[0.462,[0.327,0.741,0.758]],[0.464,[0.327,0.741,0.758]],[0.466,[0.32,0.738,0.759]],[0.468,[0.32,0.738,0.759]],[0.47,[0.312,0.735,0.76]],[0.472,[0.312,0.735,0.76]],[0.474,[0.304,0.732,0.761]],[0.476,[0.304,0.732,0.761]],[0.477,[0.297,0.729,0.763]],[0.479,[0.297,0.729,0.763]],[0.481,[0.289,0.726,0.764]],[0.483,[0.289,0.726,0.764]],[0.485,[0.282,0.724,0.765]],[0.487,[0.282,0.724,0.765]],[0.489,[0.274,0.721,0.766]],[0.491,[0.274,0.721,0.766]],[0.493,[0.266,0.718,0.767]],[0.495,[0.266,0.718,0.767]],[0.497,[0.259,0.715,0.768]],[0.499,[0.259,0.715,0.768]],[0.501,[0.253,0.711,0.768]],[0.503,[0.253,0.711,0.768]],[0.505,[0.248,0.707,0.768]],[0.507,[0.248,0.707,0.768]],[0.509,[0.244,0.702,0.767]],[0.511,[0.244,0.702,0.767]],[0.513,[0.239,0.698,0.767]],[0.515,[0.239,0.698,0.767]],[0.517,[0.235,0.693,0.766]],[0.519,[0.235,0.693,0.766]],[0.521,[0.231,0.689,0.766]],[0.523,[0.231,0.689,0.766]],[0.524,[0.226,0.684,0.765]],[0.526,[0.226,0.684,0.765]],[0.528,[0.222,0.68,0.765]],[0.53,[0.222,0.68,0.765]],[0.532,[0.217,0.675,0.764]],[0.534,[0.217,0.675,0.764]],[0.536,[0.213,0.67,0.764]],[0.538,[0.213,0.67,0.764]],[0.54,[0.208,0.666,0.763]],[0.542,[0.208,0.666,0.763]],[0.544,[0.204,0.661,0.763]],[0.546,[0.204,0.661,0.763]],[0.548,[0.2,0.657,0.762]],[0.55,[0.2,0.657,0.762]],[0.552,[0.195,0.652,0.762]],[0.554,[0.195,0.652,0.762]],[0.556,[0.191,0.648,0.761]],[0.558,[0.191,0.648,0.761]],[0.56,[0.186,0.643,0.761]],[0.562,[0.186,0.643,0.761]],[0.564,[0.182,0.639,0.761]],[0.566,[0.182,0.639,0.761]],[0.568,[0.177,0.634,0.76]],[0.569,[0.177,0.634,0.76]],[0.571,[0.173,0.63,0.76]],[0.573,[0.173,0.63,0.76]],[0.575,[0.169,0.625,0.759]],[0.577,[0.169,0.625,0.759]],[0.579,[0.164,0.62,0.759]],[0.581,[0.164,0.62,0.759]],[0.583,[0.16,0.616,0.758]],[0.585,[0.16,0.616,0.758]],[0.587,[0.155,0.611,0.758]],[0.589,[0.155,0.611,0.758]],[0.591,[0.151,0.607,0.757]],[0.593,[0.151,0.607,0.757]],[0.595,[0.146,0.602,0.757]],[0.597,[0.146,0.602,0.757]],[0.599,[0.142,0.598,0.756]],[0.601,[0.142,0.598,0.756]],[0.603,[0.138,0.593,0.756]],[0.605,[0.138,0.593,0.756]],[0.607,[0.133,0.589,0.755]],[0.609,[0.133,0.589,0.755]],[0.611,[0.129,0.584,0.755]],[0.613,[0.129,0.584,0.755]],[0.614,[0.124,0.579,0.754]],[0.616,[0.124,0.579,0.754]],[0.618,[0.12,0.575,0.754]],[0.62,[0.12,0.575,0.754]],[0.622,[0.115,0.57,0.753]],[0.624,[0.115,0.57,0.753]],[0.626,[0.114,0.565,0.751]],[0.628,[0.114,0.565,0.751]],[0.63,[0.115,0.558,0.748]],[0.632,[0.115,0.558,0.748]],[0.634,[0.115,0.552,0.745]],[0.636,[0.115,0.552,0.745]],[0.638,[0.116,0.546,0.742]],[0.64,[0.116,0.546,0.742]],[0.642,[0.117,0.54,0.739]],[0.644,[0.117,0.54,0.739]],[0.646,[0.117,0.533,0.736]],[0.648,[0.117,0.533,0.736]],[0.65,[0.118,0.527,0.733]],[0.652,[0.118,0.527,0.733]],[0.654,[0.118,0.521,0.73]],[0.656,[0.118,0.521,0.73]],[0.658,[0.119,0.515,0.727]],[0.659,[0.119,0.515,0.727]],[0.661,[0.12,0.508,0.725]],[0.663,[0.12,0.508,0.725]],[0.665,[0.12,0.502,0.722]],[0.667,[0.12,0.502,0.722]],[0.669,[0.121,0.496,0.719]],[0.671,[0.121,0.496,0.719]],[0.673,[0.121,0.489,0.716]],[0.675,[0.121,0.489,0.716]],[0.677,[0.122,0.483,0.713]],[0.679,[0.122,0.483,0.713]],[0.681,[0.123,0.477,0.71]],[0.683,[0.123,0.477,0.71]],[0.685,[0.123,0.471,0.707]],[0.687,[0.123,0.471,0.707]],[0.689,[0.124,0.464,0.704]],[0.691,[0.124,0.464,0.704]],[0.693,[0.125,0.458,0.701]],[0.695,[0.125,0.458,0.701]],[0.697,[0.125,0.452,0.698]],[0.699,[0.125,0.452,0.698]],[0.701,[0.126,0.445,0.695]],[0.703,[0.126,0.445,0.695]],[0.705,[0.126,0.439,0.692]],[0.706,[0.126,0.439,0.692]],[0.708,[0.127,0.433,0.689]],[0.71,[0.127,0.433,0.689]],[0.712,[0.128,0.427,0.686]],[0.714,[0.128,0.427,0.686]],[0.716,[0.128,0.42,0.683]],[0.718,[0.128,0.42,0.683]],[0.72,[0.129,0.414,0.68]],[0.722,[0.129,0.414,0.68]],[0.724,[0.129,0.408,0.677]],[0.726,[0.129,0.408,0.677]],[0.728,[0.13,0.402,0.674]],[0.73,[0.13,0.402,0.674]],[0.732,[0.131,0.395,0.671]],[0.734,[0.131,0.395,0.671]],[0.736,[0.131,0.389,0.668]],[0.738,[0.131,0.389,0.668]],[0.74,[0.132,0.383,0.665]],[0.742,[0.132,0.383,0.665]],[0.744,[0.133,0.376,0.663]],[0.746,[0.133,0.376,0.663]],[0.748,[0.133,0.37,0.66]],[0.75,[0.133,0.37,0.66]],[0.751,[0.134,0.365,0.657]],[0.753,[0.134,0.365,0.657]],[0.755,[0.134,0.36,0.655]],[0.757,[0.134,0.36,0.655]],[0.759,[0.134,0.354,0.652]],[0.761,[0.134,0.354,0.652]],[0.763,[0.135,0.349,0.65]],[0.765,[0.135,0.349,0.65]],[0.767,[0.135,0.344,0.647]],[0.769,[0.135,0.344,0.647]],[0.771,[0.135,0.339,0.645]],[0.773,[0.135,0.339,0.645]],[0.775,[0.136,0.334,0.642]],[0.777,[0.136,0.334,0.642]],[0.779,[0.136,0.329,0.64]],[0.781,[0.136,0.329,0.64]],[0.783,[0.137,0.323,0.637]],[0.785,[0.137,0.323,0.637]],[0.787,[0.137,0.318,0.635]],[0.789,[0.137,0.318,0.635]],[0.791,[0.137,0.313,0.632]],[0.793,[0.137,0.313,0.632]],[0.795,[0.138,0.308,0.63]],[0.796,[0.138,0.308,0.63]],[0.798,[0.138,0.303,0.627]],[0.8,[0.138,0.303,0.627]],[0.802,[0.138,0.298,0.625]],[0.804,[0.138,0.298,0.625]],[0.806,[0.139,0.292,0.623]],[0.808,[0.139,0.292,0.623]],[0.81,[0.139,0.287,0.62]],[0.812,[0.139,0.287,0.62]],[0.814,[0.14,0.282,0.618]],[0.816,[0.14,0.282,0.618]],[0.818,[0.14,0.277,0.615]],[0.82,[0.14,0.277,0.615]],[0.822,[0.14,0.272,0.613]],[0.824,[0.14,0.272,0.613]],[0.826,[0.141,0.267,0.61]],[0.828,[0.141,0.267,0.61]],[0.83,[0.141,0.261,0.608]],[0.832,[0.141,0.261,0.608]],[0.834,[0.141,0.256,0.605]],[0.836,[0.141,0.256,0.605]],[0.838,[0.142,0.251,0.603]],[0.84,[0.142,0.251,0.603]],[0.841,[0.142,0.246,0.6]],[0.843,[0.142,0.246,0.6]],[0.845,[0.142,0.241,0.598]],[0.847,[0.142,0.241,0.598]],[0.849,[0.143,0.236,0.595]],[0.851,[0.143,0.236,0.595]],[0.853,[0.143,0.23,0.593]],[0.855,[0.143,0.23,0.593]],[0.857,[0.144,0.225,0.591]],[0.859,[0.144,0.225,0.591]],[0.861,[0.144,0.22,0.588]],[0.863,[0.144,0.22,0.588]],[0.865,[0.144,0.215,0.586]],[0.867,[0.144,0.215,0.586]],[0.869,[0.145,0.21,0.583]],[0.871,[0.145,0.21,0.583]],[0.873,[0.145,0.205,0.581]],[0.875,[0.145,0.205,0.581]],[0.877,[0.142,0.201,0.574]],[0.879,[0.142,0.201,0.574]],[0.881,[0.138,0.199,0.567]],[0.883,[0.138,0.199,0.567]],[0.885,[0.135,0.196,0.559]],[0.886,[0.135,0.196,0.559]],[0.888,[0.131,0.193,0.552]],[0.89,[0.131,0.193,0.552]],[0.892,[0.128,0.19,0.544]],[0.894,[0.128,0.19,0.544]],[0.896,[0.124,0.187,0.537]],[0.898,[0.124,0.187,0.537]],[0.9,[0.121,0.184,0.53]],[0.902,[0.121,0.184,0.53]],[0.904,[0.117,0.182,0.522]],[0.906,[0.117,0.182,0.522]],[0.908,[0.113,0.179,0.515]],[0.91,[0.113,0.179,0.515]],[0.912,[0.11,0.176,0.507]],[0.914,[0.11,0.176,0.507]],[0.916,[0.106,0.173,0.5]],[0.918,[0.106,0.173,0.5]],[0.92,[0.103,0.17,0.493]],[0.922,[0.103,0.17,0.493]],[0.924,[0.099,0.167,0.485]],[0.926,[0.099,0.167,0.485]],[0.928,[0.096,0.165,0.478]],[0.93,[0.096,0.165,0.478]],[0.932,[0.092,0.162,0.471]],[0.933,[0.092,0.162,0.471]],[0.935,[0.088,0.159,0.463]],[0.937,[0.088,0.159,0.463]],[0.939,[0.085,0.156,0.456]],[0.941,[0.085,0.156,0.456]],[0.943,[0.081,0.153,0.448]],[0.945,[0.081,0.153,0.448]],[0.947,[0.078,0.151,0.441]],[0.949,[0.078,0.151,0.441]],[0.951,[0.074,0.148,0.434]],[0.953,[0.074,0.148,0.434]],[0.955,[0.071,0.145,0.426]],[0.957,[0.071,0.145,0.426]],[0.959,[0.067,0.142,0.419]],[0.961,[0.067,0.142,0.419]],[0.963,[0.063,0.139,0.412]],[0.965,[0.063,0.139,0.412]],[0.967,[0.06,0.136,0.404]],[0.969,[0.06,0.136,0.404]],[0.971,[0.056,0.134,0.397]],[0.973,[0.056,0.134,0.397]],[0.975,[0.053,0.131,0.389]],[0.977,[0.053,0.131,0.389]],[0.978,[0.049,0.128,0.382]],[0.98,[0.049,0.128,0.382]],[0.982,[0.046,0.125,0.375]],[0.984,[0.046,0.125,0.375]],[0.986,[0.042,0.122,0.367]],[0.988,[0.042,0.122,0.367]],[0.99,[0.039,0.119,0.36]],[0.992,[0.039,0.119,0.36]],[0.994,[0.035,0.117,0.352]],[0.996,[0.035,0.117,0.352]],[0.998,[0.031,0.114,0.345]],[1,[0.031,0.114,0.345]]],[[0,[0,0,1]],[0.002,[0,0,1]],[0.004,[0,0.004,0.998]],[0.006,[0,0.004,0.998]],[0.008,[0,0.008,0.996]],[0.01,[0,0.008,0.996]],[0.012,[0,0.012,0.994]],[0.014,[0,0.012,0.994]],[0.016,[0,0.016,0.992]],[0.018,[0,0.016,0.992]],[0.02,[0,0.02,0.99]],[0.022,[0,0.02,0.99]],[0.023,[0,0.024,0.988]],[0.025,[0,0.024,0.988]],[0.027,[0,0.027,0.986]],[0.029,[0,0.027,0.986]],[0.031,[0,0.031,0.984]],[0.033,[0,0.031,0.984]],[0.035,[0,0.035,0.982]],[0.037,[0,0.035,0.982]],[0.039,[0,0.039,0.98]],[0.041,[0,0.039,0.98]],[0.043,[0,0.043,0.978]],[0.045,[0,0.043,0.978]],[0.047,[0,0.047,0.976]],[0.049,[0,0.047,0.976]],[0.051,[0,0.051,0.975]],[0.053,[0,0.051,0.975]],[0.055,[0,0.055,0.973]],[0.057,[0,0.055,0.973]],[0.059,[0,0.059,0.971]],[0.061,[0,0.059,0.971]],[0.063,[0,0.063,0.969]],[0.065,[0,0.063,0.969]],[0.067,[0,0.067,0.967]],[0.068,[0,0.067,0.967]],[0.07,[0,0.071,0.965]],[0.072,[0,0.071,0.965]],[0.074,[0,0.075,0.963]],[0.076,[0,0.075,0.963]],[0.078,[0,0.078,0.961]],[0.08,[0,0.078,0.961]],[0.082,[0,0.082,0.959]],[0.084,[0,0.082,0.959]],[0.086,[0,0.086,0.957]],[0.088,[0,0.086,0.957]],[0.09,[0,0.09,0.955]],[0.092,[0,0.09,0.955]],[0.094,[0,0.094,0.953]],[0.096,[0,0.094,0.953]],[0.098,[0,0.098,0.951]],[0.1,[0,0.098,0.951]],[0.102,[0,0.102,0.949]],[0.104,[0,0.102,0.949]],[0.106,[0,0.106,0.947]],[0.108,[0,0.106,0.947]],[0.11,[0,0.11,0.945]],[0.112,[0,0.11,0.945]],[0.114,[0,0.114,0.943]],[0.115,[0,0.114,0.943]],[0.117,[0,0.118,0.941]],[0.119,[0,0.118,0.941]],[0.121,[0,0.122,0.939]],[0.123,[0,0.122,0.939]],[0.125,[0,0.125,0.937]],[0.127,[0,0.125,0.937]],[0.129,[0,0.129,0.935]],[0.131,[0,0.129,0.935]],[0.133,[0,0.133,0.933]],[0.135,[0,0.133,0.933]],[0.137,[0,0.137,0.931]],[0.139,[0,0.137,0.931]],[0.141,[0,0.141,0.929]],[0.143,[0,0.141,0.929]],[0.145,[0,0.145,0.927]],[0.147,[0,0.145,0.927]],[0.149,[0,0.149,0.925]],[0.151,[0,0.149,0.925]],[0.153,[0,0.153,0.924]],[0.155,[0,0.153,0.924]],[0.157,[0,0.157,0.922]],[0.159,[0,0.157,0.922]],[0.16,[0,0.161,0.92]],[0.162,[0,0.161,0.92]],[0.164,[0,0.165,0.918]],[0.166,[0,0.165,0.918]],[0.168,[0,0.169,0.916]],[0.17,[0,0.169,0.916]],[0.172,[0,0.173,0.914]],[0.174,[0,0.173,0.914]],[0.176,[0,0.176,0.912]],[0.178,[0,0.176,0.912]],[0.18,[0,0.18,0.91]],[0.182,[0,0.18,0.91]],[0.184,[0,0.184,0.908]],[0.186,[0,0.184,0.908]],[0.188,[0,0.188,0.906]],[0.19,[0,0.188,0.906]],[0.192,[0,0.192,0.904]],[0.194,[0,0.192,0.904]],[0.196,[0,0.196,0.902]],[0.198,[0,0.196,0.902]],[0.2,[0,0.2,0.9]],[0.202,[0,0.2,0.9]],[0.204,[0,0.204,0.898]],[0.205,[0,0.204,0.898]],[0.207,[0,0.208,0.896]],[0.209,[0,0.208,0.896]],[0.211,[0,0.212,0.894]],[0.213,[0,0.212,0.894]],[0.215,[0,0.216,0.892]],[0.217,[0,0.216,0.892]],[0.219,[0,0.22,0.89]],[0.221,[0,0.22,0.89]],[0.223,[0,0.224,0.888]],[0.225,[0,0.224,0.888]],[0.227,[0,0.227,0.886]],[0.229,[0,0.227,0.886]],[0.231,[0,0.231,0.884]],[0.233,[0,0.231,0.884]],[0.235,[0,0.235,0.882]],[0.237,[0,0.235,0.882]],[0.239,[0,0.239,0.88]],[0.241,[0,0.239,0.88]],[0.243,[0,0.243,0.878]],[0.245,[0,0.243,0.878]],[0.247,[0,0.247,0.876]],[0.249,[0,0.247,0.876]],[0.25,[0,0.251,0.875]],[0.252,[0,0.251,0.875]],[0.254,[0,0.255,0.873]],[0.256,[0,0.255,0.873]],[0.258,[0,0.259,0.871]],[0.26,[0,0.259,0.871]],[0.262,[0,0.263,0.869]],[0.264,[0,0.263,0.869]],[0.266,[0,0.267,0.867]],[0.268,[0,0.267,0.867]],[0.27,[0,0.271,0.865]],[0.272,[0,0.271,0.865]],[0.274,[0,0.275,0.863]],[0.276,[0,0.275,0.863]],[0.278,[0,0.278,0.861]],[0.28,[0,0.278,0.861]],[0.282,[0,0.282,0.859]],[0.028,[0,0.282,0.859]],[0.286,[0,0.286,0.857]],[0.288,[0,0.286,0.857]],[0.29,[0,0.29,0.855]],[0.292,[0,0.29,0.855]],[0.294,[0,0.294,0.853]],[0.295,[0,0.294,0.853]],[0.297,[0,0.298,0.851]],[0.299,[0,0.298,0.851]],[0.301,[0,0.302,0.849]],[0.303,[0,0.302,0.849]],[0.305,[0,0.306,0.847]],[0.307,[0,0.306,0.847]],[0.309,[0,0.31,0.845]],[0.311,[0,0.31,0.845]],[0.313,[0,0.314,0.843]],[0.315,[0,0.314,0.843]],[0.317,[0,0.318,0.841]],[0.319,[0,0.318,0.841]],[0.321,[0,0.322,0.839]],[0.323,[0,0.322,0.839]],[0.325,[0,0.325,0.837]],[0.327,[0,0.325,0.837]],[0.329,[0,0.329,0.835]],[0.331,[0,0.329,0.835]],[0.333,[0,0.333,0.833]],[0.335,[0,0.333,0.833]],[0.337,[0,0.337,0.831]],[0.339,[0,0.337,0.831]],[0.341,[0,0.341,0.829]],[0.342,[0,0.341,0.829]],[0.344,[0,0.345,0.827]],[0.346,[0,0.345,0.827]],[0.348,[0,0.349,0.825]],[0.35,[0,0.349,0.825]],[0.352,[0,0.353,0.824]],[0.354,[0,0.353,0.824]],[0.356,[0,0.357,0.822]],[0.358,[0,0.357,0.822]],[0.36,[0,0.361,0.82]],[0.362,[0,0.361,0.82]],[0.364,[0,0.365,0.818]],[0.366,[0,0.365,0.818]],[0.368,[0,0.369,0.816]],[0.37,[0,0.369,0.816]],[0.372,[0,0.373,0.814]],[0.374,[0,0.373,0.814]],[0.376,[0,0.376,0.812]],[0.378,[0,0.376,0.812]],[0.38,[0,0.38,0.81]],[0.382,[0,0.38,0.81]],[0.384,[0,0.384,0.808]],[0.386,[0,0.384,0.808]],[0.387,[0,0.388,0.806]],[0.389,[0,0.388,0.806]],[0.391,[0,0.392,0.804]],[0.393,[0,0.392,0.804]],[0.395,[0,0.396,0.802]],[0.397,[0,0.396,0.802]],[0.399,[0,0.4,0.8]],[0.401,[0,0.4,0.8]],[0.403,[0,0.404,0.798]],[0.405,[0,0.404,0.798]],[0.407,[0,0.408,0.796]],[0.409,[0,0.408,0.796]],[0.411,[0,0.412,0.794]],[0.413,[0,0.412,0.794]],[0.415,[0,0.416,0.792]],[0.417,[0,0.416,0.792]],[0.419,[0,0.42,0.79]],[0.421,[0,0.42,0.79]],[0.423,[0,0.424,0.788]],[0.425,[0,0.424,0.788]],[0.427,[0,0.427,0.786]],[0.429,[0,0.427,0.786]],[0.431,[0,0.431,0.784]],[0.432,[0,0.431,0.784]],[0.434,[0,0.435,0.782]],[0.436,[0,0.435,0.782]],[0.438,[0,0.439,0.78]],[0.44,[0,0.439,0.78]],[0.442,[0,0.443,0.778]],[0.444,[0,0.443,0.778]],[0.446,[0,0.447,0.776]],[0.448,[0,0.447,0.776]],[0.45,[0,0.451,0.775]],[0.452,[0,0.451,0.775]],[0.454,[0,0.455,0.773]],[0.456,[0,0.455,0.773]],[0.458,[0,0.459,0.771]],[0.46,[0,0.459,0.771]],[0.462,[0,0.463,0.769]],[0.464,[0,0.463,0.769]],[0.466,[0,0.467,0.767]],[0.468,[0,0.467,0.767]],[0.47,[0,0.471,0.765]],[0.472,[0,0.471,0.765]],[0.474,[0,0.475,0.763]],[0.476,[0,0.475,0.763]],[0.477,[0,0.478,0.761]],[0.479,[0,0.478,0.761]],[0.481,[0,0.482,0.759]],[0.483,[0,0.482,0.759]],[0.485,[0,0.486,0.757]],[0.487,[0,0.486,0.757]],[0.489,[0,0.49,0.755]],[0.491,[0,0.49,0.755]],[0.493,[0,0.494,0.753]],[0.495,[0,0.494,0.753]],[0.497,[0,0.498,0.751]],[0.499,[0,0.498,0.751]],[0.501,[0,0.502,0.749]],[0.503,[0,0.502,0.749]],[0.505,[0,0.506,0.747]],[0.507,[0,0.506,0.747]],[0.509,[0,0.51,0.745]],[0.511,[0,0.51,0.745]],[0.513,[0,0.514,0.743]],[0.515,[0,0.514,0.743]],[0.517,[0,0.518,0.741]],[0.519,[0,0.518,0.741]],[0.521,[0,0.522,0.739]],[0.523,[0,0.522,0.739]],[0.524,[0,0.525,0.737]],[0.526,[0,0.525,0.737]],[0.528,[0,0.529,0.735]],[0.53,[0,0.529,0.735]],[0.532,[0,0.533,0.733]],[0.534,[0,0.533,0.733]],[0.536,[0,0.537,0.731]],[0.538,[0,0.537,0.731]],[0.54,[0,0.541,0.729]],[0.542,[0,0.541,0.729]],[0.544,[0,0.545,0.727]],[0.546,[0,0.545,0.727]],[0.548,[0,0.549,0.725]],[0.55,[0,0.549,0.725]],[0.552,[0,0.553,0.724]],[0.554,[0,0.553,0.724]],[0.556,[0,0.557,0.722]],[0.558,[0,0.557,0.722]],[0.56,[0,0.561,0.72]],[0.562,[0,0.561,0.72]],[0.564,[0,0.565,0.718]],[0.566,[0,0.565,0.718]],[0.568,[0,0.569,0.716]],[0.569,[0,0.569,0.716]],[0.571,[0,0.573,0.714]],[0.573,[0,0.573,0.714]],[0.575,[0,0.576,0.712]],[0.577,[0,0.576,0.712]],[0.579,[0,0.58,0.71]],[0.581,[0,0.58,0.71]],[0.583,[0,0.584,0.708]],[0.585,[0,0.584,0.708]],[0.587,[0,0.588,0.706]],[0.589,[0,0.588,0.706]],[0.591,[0,0.592,0.704]],[0.593,[0,0.592,0.704]],[0.595,[0,0.596,0.702]],[0.597,[0,0.596,0.702]],[0.599,[0,0.6,0.7]],[0.601,[0,0.6,0.7]],[0.603,[0,0.604,0.698]],[0.605,[0,0.604,0.698]],[0.607,[0,0.608,0.696]],[0.609,[0,0.608,0.696]],[0.611,[0,0.612,0.694]],[0.613,[0,0.612,0.694]],[0.614,[0,0.616,0.692]],[0.616,[0,0.616,0.692]],[0.618,[0,0.62,0.69]],[0.62,[0,0.62,0.69]],[0.622,[0,0.624,0.688]],[0.624,[0,0.624,0.688]],[0.626,[0,0.627,0.686]],[0.628,[0,0.627,0.686]],[0.63,[0,0.631,0.684]],[0.632,[0,0.631,0.684]],[0.634,[0,0.635,0.682]],[0.636,[0,0.635,0.682]],[0.638,[0,0.639,0.68]],[0.64,[0,0.639,0.68]],[0.642,[0,0.643,0.678]],[0.644,[0,0.643,0.678]],[0.646,[0,0.647,0.676]],[0.648,[0,0.647,0.676]],[0.65,[0,0.651,0.675]],[0.652,[0,0.651,0.675]],[0.654,[0,0.655,0.673]],[0.656,[0,0.655,0.673]],[0.658,[0,0.659,0.671]],[0.659,[0,0.659,0.671]],[0.661,[0,0.663,0.669]],[0.663,[0,0.663,0.669]],[0.665,[0,0.667,0.667]],[0.667,[0,0.667,0.667]],[0.669,[0,0.671,0.665]],[0.671,[0,0.671,0.665]],[0.673,[0,0.675,0.663]],[0.675,[0,0.675,0.663]],[0.677,[0,0.678,0.661]],[0.679,[0,0.678,0.661]],[0.681,[0,0.682,0.659]],[0.683,[0,0.682,0.659]],[0.685,[0,0.686,0.657]],[0.687,[0,0.686,0.657]],[0.689,[0,0.69,0.655]],[0.691,[0,0.69,0.655]],[0.693,[0,0.694,0.653]],[0.695,[0,0.694,0.653]],[0.697,[0,0.698,0.651]],[0.699,[0,0.698,0.651]],[0.701,[0,0.702,0.649]],[0.703,[0,0.702,0.649]],[0.705,[0,0.706,0.647]],[0.706,[0,0.706,0.647]],[0.708,[0,0.71,0.645]],[0.71,[0,0.71,0.645]],[0.712,[0,0.714,0.643]],[0.714,[0,0.714,0.643]],[0.716,[0,0.718,0.641]],[0.718,[0,0.718,0.641]],[0.72,[0,0.722,0.639]],[0.722,[0,0.722,0.639]],[0.724,[0,0.725,0.637]],[0.726,[0,0.725,0.637]],[0.728,[0,0.729,0.635]],[0.73,[0,0.729,0.635]],[0.732,[0,0.733,0.633]],[0.734,[0,0.733,0.633]],[0.736,[0,0.737,0.631]],[0.738,[0,0.737,0.631]],[0.74,[0,0.741,0.629]],[0.742,[0,0.741,0.629]],[0.744,[0,0.745,0.627]],[0.746,[0,0.745,0.627]],[0.748,[0,0.749,0.625]],[0.75,[0,0.749,0.625]],[0.751,[0,0.753,0.624]],[0.753,[0,0.753,0.624]],[0.755,[0,0.757,0.622]],[0.757,[0,0.757,0.622]],[0.759,[0,0.761,0.62]],[0.761,[0,0.761,0.62]],[0.763,[0,0.765,0.618]],[0.765,[0,0.765,0.618]],[0.767,[0,0.769,0.616]],[0.769,[0,0.769,0.616]],[0.771,[0,0.773,0.614]],[0.773,[0,0.773,0.614]],[0.775,[0,0.776,0.612]],[0.777,[0,0.776,0.612]],[0.779,[0,0.78,0.61]],[0.781,[0,0.78,0.61]],[0.783,[0,0.784,0.608]],[0.785,[0,0.784,0.608]],[0.787,[0,0.788,0.606]],[0.789,[0,0.788,0.606]],[0.791,[0,0.792,0.604]],[0.793,[0,0.792,0.604]],[0.795,[0,0.796,0.602]],[0.796,[0,0.796,0.602]],[0.798,[0,0.8,0.6]],[0.8,[0,0.8,0.6]],[0.802,[0,0.804,0.598]],[0.804,[0,0.804,0.598]],[0.806,[0,0.808,0.596]],[0.808,[0,0.808,0.596]],[0.81,[0,0.812,0.594]],[0.812,[0,0.812,0.594]],[0.814,[0,0.816,0.592]],[0.816,[0,0.816,0.592]],[0.818,[0,0.82,0.59]],[0.82,[0,0.82,0.59]],[0.822,[0,0.824,0.588]],[0.824,[0,0.824,0.588]],[0.826,[0,0.827,0.586]],[0.828,[0,0.827,0.586]],[0.83,[0,0.831,0.584]],[0.832,[0,0.831,0.584]],[0.834,[0,0.835,0.582]],[0.836,[0,0.835,0.582]],[0.838,[0,0.839,0.58]],[0.84,[0,0.839,0.58]],[0.841,[0,0.843,0.578]],[0.843,[0,0.843,0.578]],[0.845,[0,0.847,0.576]],[0.847,[0,0.847,0.576]],[0.849,[0,0.851,0.575]],[0.851,[0,0.851,0.575]],[0.853,[0,0.855,0.573]],[0.855,[0,0.855,0.573]],[0.857,[0,0.859,0.571]],[0.859,[0,0.859,0.571]],[0.861,[0,0.863,0.569]],[0.863,[0,0.863,0.569]],[0.865,[0,0.867,0.567]],[0.867,[0,0.867,0.567]],[0.869,[0,0.871,0.565]],[0.871,[0,0.871,0.565]],[0.873,[0,0.875,0.563]],[0.875,[0,0.875,0.563]],[0.877,[0,0.878,0.561]],[0.879,[0,0.878,0.561]],[0.881,[0,0.882,0.559]],[0.883,[0,0.882,0.559]],[0.885,[0,0.886,0.557]],[0.886,[0,0.886,0.557]],[0.888,[0,0.89,0.555]],[0.89,[0,0.89,0.555]],[0.892,[0,0.894,0.553]],[0.894,[0,0.894,0.553]],[0.896,[0,0.898,0.551]],[0.898,[0,0.898,0.551]],[0.9,[0,0.902,0.549]],[0.902,[0,0.902,0.549]],[0.904,[0,0.906,0.547]],[0.906,[0,0.906,0.547]],[0.908,[0,0.91,0.545]],[0.91,[0,0.91,0.545]],[0.912,[0,0.914,0.543]],[0.914,[0,0.914,0.543]],[0.916,[0,0.918,0.541]],[0.918,[0,0.918,0.541]],[0.92,[0,0.922,0.539]],[0.922,[0,0.922,0.539]],[0.924,[0,0.925,0.537]],[0.926,[0,0.925,0.537]],[0.928,[0,0.929,0.535]],[0.93,[0,0.929,0.535]],[0.932,[0,0.933,0.533]],[0.933,[0,0.933,0.533]],[0.935,[0,0.937,0.531]],[0.937,[0,0.937,0.531]],[0.939,[0,0.941,0.529]],[0.941,[0,0.941,0.529]],[0.943,[0,0.945,0.527]],[0.945,[0,0.945,0.527]],[0.947,[0,0.949,0.525]],[0.949,[0,0.949,0.525]],[0.951,[0,0.953,0.524]],[0.953,[0,0.953,0.524]],[0.955,[0,0.957,0.522]],[0.957,[0,0.957,0.522]],[0.959,[0,0.961,0.52]],[0.961,[0,0.961,0.52]],[0.963,[0,0.965,0.518]],[0.965,[0,0.965,0.518]],[0.967,[0,0.969,0.516]],[0.969,[0,0.969,0.516]],[0.971,[0,0.973,0.514]],[0.973,[0,0.973,0.514]],[0.975,[0,0.976,0.512]],[0.977,[0,0.976,0.512]],[0.978,[0,0.98,0.51]],[0.98,[0,0.98,0.51]],[0.982,[0,0.984,0.508]],[0.984,[0,0.984,0.508]],[0.986,[0,0.988,0.506]],[0.988,[0,0.988,0.506]],[0.99,[0,0.992,0.504]],[0.992,[0,0.992,0.504]],[0.994,[0,0.996,0.502]],[0.996,[0,0.996,0.502]],[0.998,[0,1,0.5]],[1,[0,1,0.5]]],[[0,[0,0,0.5]],[0.002,[0,0,0.5]],[0.004,[0,0,0.518]],[0.006,[0,0,0.518]],[0.008,[0,0,0.536]],[0.01,[0,0,0.536]],[0.012,[0,0,0.553]],[0.014,[0,0,0.553]],[0.016,[0,0,0.571]],[0.018,[0,0,0.571]],[0.02,[0,0,0.589]],[0.022,[0,0,0.589]],[0.023,[0,0,0.607]],[0.025,[0,0,0.607]],[0.027,[0,0,0.625]],[0.029,[0,0,0.625]],[0.031,[0,0,0.643]],[0.033,[0,0,0.643]],[0.035,[0,0,0.66]],[0.037,[0,0,0.66]],[0.039,[0,0,0.678]],[0.041,[0,0,0.678]],[0.043,[0,0,0.696]],[0.045,[0,0,0.696]],[0.047,[0,0,0.714]],[0.049,[0,0,0.714]],[0.051,[0,0,0.732]],[0.053,[0,0,0.732]],[0.055,[0,0,0.75]],[0.057,[0,0,0.75]],[0.059,[0,0,0.767]],[0.061,[0,0,0.767]],[0.063,[0,0,0.785]],[0.065,[0,0,0.785]],[0.067,[0,0,0.803]],[0.068,[0,0,0.803]],[0.07,[0,0,0.821]],[0.072,[0,0,0.821]],[0.074,[0,0,0.839]],[0.076,[0,0,0.839]],[0.078,[0,0,0.857]],[0.08,[0,0,0.857]],[0.082,[0,0,0.874]],[0.084,[0,0,0.874]],[0.086,[0,0,0.892]],[0.088,[0,0,0.892]],[0.09,[0,0,0.91]],[0.092,[0,0,0.91]],[0.094,[0,0,0.928]],[0.096,[0,0,0.928]],[0.098,[0,0,0.946]],[0.1,[0,0,0.946]],[0.102,[0,0,0.963]],[0.104,[0,0,0.963]],[0.106,[0,0,0.981]],[0.108,[0,0,0.981]],[0.11,[0,0,0.999]],[0.112,[0,0,0.999]],[0.114,[0,0,1]],[0.115,[0,0,1]],[0.117,[0,0,1]],[0.119,[0,0,1]],[0.121,[0,0,1]],[0.123,[0,0,1]],[0.125,[0,0.002,1]],[0.127,[0,0.002,1]],[0.129,[0,0.018,1]],[0.131,[0,0.018,1]],[0.133,[0,0.033,1]],[0.135,[0,0.033,1]],[0.137,[0,0.049,1]],[0.139,[0,0.049,1]],[0.141,[0,0.065,1]],[0.143,[0,0.065,1]],[0.145,[0,0.08,1]],[0.147,[0,0.08,1]],[0.149,[0,0.096,1]],[0.151,[0,0.096,1]],[0.153,[0,0.112,1]],[0.155,[0,0.112,1]],[0.157,[0,0.127,1]],[0.159,[0,0.127,1]],[0.16,[0,0.143,1]],[0.162,[0,0.143,1]],[0.164,[0,0.159,1]],[0.166,[0,0.159,1]],[0.168,[0,0.175,1]],[0.17,[0,0.175,1]],[0.172,[0,0.19,1]],[0.174,[0,0.19,1]],[0.176,[0,0.206,1]],[0.178,[0,0.206,1]],[0.18,[0,0.222,1]],[0.182,[0,0.222,1]],[0.184,[0,0.237,1]],[0.186,[0,0.237,1]],[0.188,[0,0.253,1]],[0.19,[0,0.253,1]],[0.192,[0,0.269,1]],[0.194,[0,0.269,1]],[0.196,[0,0.028,1]],[0.198,[0,0.028,1]],[0.2,[0,0.3,1]],[0.202,[0,0.3,1]],[0.204,[0,0.316,1]],[0.205,[0,0.316,1]],[0.207,[0,0.331,1]],[0.209,[0,0.331,1]],[0.211,[0,0.347,1]],[0.213,[0,0.347,1]],[0.215,[0,0.363,1]],[0.217,[0,0.363,1]],[0.219,[0,0.378,1]],[0.221,[0,0.378,1]],[0.223,[0,0.394,1]],[0.225,[0,0.394,1]],[0.227,[0,0.41,1]],[0.229,[0,0.41,1]],[0.231,[0,0.425,1]],[0.233,[0,0.425,1]],[0.235,[0,0.441,1]],[0.237,[0,0.441,1]],[0.239,[0,0.457,1]],[0.241,[0,0.457,1]],[0.243,[0,0.473,1]],[0.245,[0,0.473,1]],[0.247,[0,0.488,1]],[0.249,[0,0.488,1]],[0.25,[0,0.504,1]],[0.252,[0,0.504,1]],[0.254,[0,0.52,1]],[0.256,[0,0.52,1]],[0.258,[0,0.535,1]],[0.26,[0,0.535,1]],[0.262,[0,0.551,1]],[0.264,[0,0.551,1]],[0.266,[0,0.567,1]],[0.268,[0,0.567,1]],[0.27,[0,0.582,1]],[0.272,[0,0.582,1]],[0.274,[0,0.598,1]],[0.276,[0,0.598,1]],[0.278,[0,0.614,1]],[0.28,[0,0.614,1]],[0.282,[0,0.629,1]],[0.028,[0,0.629,1]],[0.286,[0,0.645,1]],[0.288,[0,0.645,1]],[0.29,[0,0.661,1]],[0.292,[0,0.661,1]],[0.294,[0,0.676,1]],[0.295,[0,0.676,1]],[0.297,[0,0.692,1]],[0.299,[0,0.692,1]],[0.301,[0,0.708,1]],[0.303,[0,0.708,1]],[0.305,[0,0.724,1]],[0.307,[0,0.724,1]],[0.309,[0,0.739,1]],[0.311,[0,0.739,1]],[0.313,[0,0.755,1]],[0.315,[0,0.755,1]],[0.317,[0,0.771,1]],[0.319,[0,0.771,1]],[0.321,[0,0.786,1]],[0.323,[0,0.786,1]],[0.325,[0,0.802,1]],[0.327,[0,0.802,1]],[0.329,[0,0.818,1]],[0.331,[0,0.818,1]],[0.333,[0,0.833,1]],[0.335,[0,0.833,1]],[0.337,[0,0.849,1]],[0.339,[0,0.849,1]],[0.341,[0,0.865,0.996]],[0.342,[0,0.865,0.996]],[0.344,[0,0.88,0.984]],[0.346,[0,0.88,0.984]],[0.348,[0,0.896,0.971]],[0.35,[0,0.896,0.971]],[0.352,[0.009,0.912,0.958]],[0.354,[0.009,0.912,0.958]],[0.356,[0.022,0.927,0.946]],[0.358,[0.022,0.927,0.946]],[0.36,[0.035,0.943,0.933]],[0.362,[0.035,0.943,0.933]],[0.364,[0.047,0.959,0.92]],[0.366,[0.047,0.959,0.92]],[0.368,[0.06,0.975,0.908]],[0.37,[0.06,0.975,0.908]],[0.372,[0.073,0.99,0.895]],[0.374,[0.073,0.99,0.895]],[0.376,[0.085,1,0.882]],[0.378,[0.085,1,0.882]],[0.38,[0.098,1,0.87]],[0.382,[0.098,1,0.87]],[0.384,[0.111,1,0.857]],[0.386,[0.111,1,0.857]],[0.387,[0.123,1,0.844]],[0.389,[0.123,1,0.844]],[0.391,[0.136,1,0.832]],[0.393,[0.136,1,0.832]],[0.395,[0.149,1,0.819]],[0.397,[0.149,1,0.819]],[0.399,[0.161,1,0.806]],[0.401,[0.161,1,0.806]],[0.403,[0.174,1,0.794]],[0.405,[0.174,1,0.794]],[0.407,[0.187,1,0.781]],[0.409,[0.187,1,0.781]],[0.411,[0.199,1,0.769]],[0.413,[0.199,1,0.769]],[0.415,[0.212,1,0.756]],[0.417,[0.212,1,0.756]],[0.419,[0.225,1,0.743]],[0.421,[0.225,1,0.743]],[0.423,[0.237,1,0.731]],[0.425,[0.237,1,0.731]],[0.427,[0.25,1,0.718]],[0.429,[0.25,1,0.718]],[0.431,[0.262,1,0.705]],[0.432,[0.262,1,0.705]],[0.434,[0.275,1,0.693]],[0.436,[0.275,1,0.693]],[0.438,[0.288,1,0.68]],[0.44,[0.288,1,0.68]],[0.442,[0.3,1,0.667]],[0.444,[0.3,1,0.667]],[0.446,[0.313,1,0.655]],[0.448,[0.313,1,0.655]],[0.45,[0.326,1,0.642]],[0.452,[0.326,1,0.642]],[0.454,[0.338,1,0.629]],[0.456,[0.338,1,0.629]],[0.458,[0.351,1,0.617]],[0.46,[0.351,1,0.617]],[0.462,[0.364,1,0.604]],[0.464,[0.364,1,0.604]],[0.466,[0.376,1,0.591]],[0.468,[0.376,1,0.591]],[0.47,[0.389,1,0.579]],[0.472,[0.389,1,0.579]],[0.474,[0.402,1,0.566]],[0.476,[0.402,1,0.566]],[0.477,[0.414,1,0.553]],[0.479,[0.414,1,0.553]],[0.481,[0.427,1,0.541]],[0.483,[0.427,1,0.541]],[0.485,[0.44,1,0.528]],[0.487,[0.44,1,0.528]],[0.489,[0.452,1,0.515]],[0.491,[0.452,1,0.515]],[0.493,[0.465,1,0.503]],[0.495,[0.465,1,0.503]],[0.497,[0.478,1,0.49]],[0.499,[0.478,1,0.49]],[0.501,[0.49,1,0.478]],[0.503,[0.49,1,0.478]],[0.505,[0.503,1,0.465]],[0.507,[0.503,1,0.465]],[0.509,[0.515,1,0.452]],[0.511,[0.515,1,0.452]],[0.513,[0.528,1,0.44]],[0.515,[0.528,1,0.44]],[0.517,[0.541,1,0.427]],[0.519,[0.541,1,0.427]],[0.521,[0.553,1,0.414]],[0.523,[0.553,1,0.414]],[0.524,[0.566,1,0.402]],[0.526,[0.566,1,0.402]],[0.528,[0.579,1,0.389]],[0.53,[0.579,1,0.389]],[0.532,[0.591,1,0.376]],[0.534,[0.591,1,0.376]],[0.536,[0.604,1,0.364]],[0.538,[0.604,1,0.364]],[0.54,[0.617,1,0.351]],[0.542,[0.617,1,0.351]],[0.544,[0.629,1,0.338]],[0.546,[0.629,1,0.338]],[0.548,[0.642,1,0.326]],[0.55,[0.642,1,0.326]],[0.552,[0.655,1,0.313]],[0.554,[0.655,1,0.313]],[0.556,[0.667,1,0.3]],[0.558,[0.667,1,0.3]],[0.56,[0.68,1,0.288]],[0.562,[0.68,1,0.288]],[0.564,[0.693,1,0.275]],[0.566,[0.693,1,0.275]],[0.568,[0.705,1,0.262]],[0.569,[0.705,1,0.262]],[0.571,[0.718,1,0.25]],[0.573,[0.718,1,0.25]],[0.575,[0.731,1,0.237]],[0.577,[0.731,1,0.237]],[0.579,[0.743,1,0.225]],[0.581,[0.743,1,0.225]],[0.583,[0.756,1,0.212]],[0.585,[0.756,1,0.212]],[0.587,[0.769,1,0.199]],[0.589,[0.769,1,0.199]],[0.591,[0.781,1,0.187]],[0.593,[0.781,1,0.187]],[0.595,[0.794,1,0.174]],[0.597,[0.794,1,0.174]],[0.599,[0.806,1,0.161]],[0.601,[0.806,1,0.161]],[0.603,[0.819,1,0.149]],[0.605,[0.819,1,0.149]],[0.607,[0.832,1,0.136]],[0.609,[0.832,1,0.136]],[0.611,[0.844,1,0.123]],[0.613,[0.844,1,0.123]],[0.614,[0.857,1,0.111]],[0.616,[0.857,1,0.111]],[0.618,[0.87,1,0.098]],[0.62,[0.87,1,0.098]],[0.622,[0.882,1,0.085]],[0.624,[0.882,1,0.085]],[0.626,[0.895,1,0.073]],[0.628,[0.895,1,0.073]],[0.63,[0.908,1,0.06]],[0.632,[0.908,1,0.06]],[0.634,[0.92,1,0.047]],[0.636,[0.92,1,0.047]],[0.638,[0.933,1,0.035]],[0.64,[0.933,1,0.035]],[0.642,[0.946,0.988,0.022]],[0.644,[0.946,0.988,0.022]],[0.646,[0.958,0.974,0.009]],[0.648,[0.958,0.974,0.009]],[0.65,[0.971,0.959,0]],[0.652,[0.971,0.959,0]],[0.654,[0.984,0.945,0]],[0.656,[0.984,0.945,0]],[0.658,[0.996,0.93,0]],[0.659,[0.996,0.93,0]],[0.661,[1,0.916,0]],[0.663,[1,0.916,0]],[0.665,[1,0.901,0]],[0.667,[1,0.901,0]],[0.669,[1,0.887,0]],[0.671,[1,0.887,0]],[0.673,[1,0.872,0]],[0.675,[1,0.872,0]],[0.677,[1,0.858,0]],[0.679,[1,0.858,0]],[0.681,[1,0.843,0]],[0.683,[1,0.843,0]],[0.685,[1,0.829,0]],[0.687,[1,0.829,0]],[0.689,[1,0.814,0]],[0.691,[1,0.814,0]],[0.693,[1,0.8,0]],[0.695,[1,0.8,0]],[0.697,[1,0.785,0]],[0.699,[1,0.785,0]],[0.701,[1,0.771,0]],[0.703,[1,0.771,0]],[0.705,[1,0.756,0]],[0.706,[1,0.756,0]],[0.708,[1,0.741,0]],[0.71,[1,0.741,0]],[0.712,[1,0.727,0]],[0.714,[1,0.727,0]],[0.716,[1,0.712,0]],[0.718,[1,0.712,0]],[0.72,[1,0.698,0]],[0.722,[1,0.698,0]],[0.724,[1,0.683,0]],[0.726,[1,0.683,0]],[0.728,[1,0.669,0]],[0.73,[1,0.669,0]],[0.732,[1,0.654,0]],[0.734,[1,0.654,0]],[0.736,[1,0.64,0]],[0.738,[1,0.64,0]],[0.74,[1,0.625,0]],[0.742,[1,0.625,0]],[0.744,[1,0.611,0]],[0.746,[1,0.611,0]],[0.748,[1,0.596,0]],[0.75,[1,0.596,0]],[0.751,[1,0.582,0]],[0.753,[1,0.582,0]],[0.755,[1,0.567,0]],[0.757,[1,0.567,0]],[0.759,[1,0.553,0]],[0.761,[1,0.553,0]],[0.763,[1,0.538,0]],[0.765,[1,0.538,0]],[0.767,[1,0.524,0]],[0.769,[1,0.524,0]],[0.771,[1,0.509,0]],[0.773,[1,0.509,0]],[0.775,[1,0.495,0]],[0.777,[1,0.495,0]],[0.779,[1,0.48,0]],[0.781,[1,0.48,0]],[0.783,[1,0.466,0]],[0.785,[1,0.466,0]],[0.787,[1,0.451,0]],[0.789,[1,0.451,0]],[0.791,[1,0.436,0]],[0.793,[1,0.436,0]],[0.795,[1,0.422,0]],[0.796,[1,0.422,0]],[0.798,[1,0.407,0]],[0.8,[1,0.407,0]],[0.802,[1,0.393,0]],[0.804,[1,0.393,0]],[0.806,[1,0.378,0]],[0.808,[1,0.378,0]],[0.81,[1,0.364,0]],[0.812,[1,0.364,0]],[0.814,[1,0.349,0]],[0.816,[1,0.349,0]],[0.818,[1,0.335,0]],[0.82,[1,0.335,0]],[0.822,[1,0.32,0]],[0.824,[1,0.32,0]],[0.826,[1,0.306,0]],[0.828,[1,0.306,0]],[0.83,[1,0.291,0]],[0.832,[1,0.291,0]],[0.834,[1,0.277,0]],[0.836,[1,0.277,0]],[0.838,[1,0.262,0]],[0.84,[1,0.262,0]],[0.841,[1,0.248,0]],[0.843,[1,0.248,0]],[0.845,[1,0.233,0]],[0.847,[1,0.233,0]],[0.849,[1,0.219,0]],[0.851,[1,0.219,0]],[0.853,[1,0.204,0]],[0.855,[1,0.204,0]],[0.857,[1,0.19,0]],[0.859,[1,0.19,0]],[0.861,[1,0.175,0]],[0.863,[1,0.175,0]],[0.865,[1,0.16,0]],[0.867,[1,0.16,0]],[0.869,[1,0.146,0]],[0.871,[1,0.146,0]],[0.873,[1,0.131,0]],[0.875,[1,0.131,0]],[0.877,[1,0.117,0]],[0.879,[1,0.117,0]],[0.881,[1,0.102,0]],[0.883,[1,0.102,0]],[0.885,[1,0.088,0]],[0.886,[1,0.088,0]],[0.888,[0.999,0.073,0]],[0.89,[0.999,0.073,0]],[0.892,[0.981,0.059,0]],[0.894,[0.981,0.059,0]],[0.896,[0.963,0.044,0]],[0.898,[0.963,0.044,0]],[0.9,[0.946,0.03,0]],[0.902,[0.946,0.03,0]],[0.904,[0.928,0.015,0]],[0.906,[0.928,0.015,0]],[0.908,[0.91,0.001,0]],[0.91,[0.91,0.001,0]],[0.912,[0.892,0,0]],[0.914,[0.892,0,0]],[0.916,[0.874,0,0]],[0.918,[0.874,0,0]],[0.92,[0.857,0,0]],[0.922,[0.857,0,0]],[0.924,[0.839,0,0]],[0.926,[0.839,0,0]],[0.928,[0.821,0,0]],[0.93,[0.821,0,0]],[0.932,[0.803,0,0]],[0.933,[0.803,0,0]],[0.935,[0.785,0,0]],[0.937,[0.785,0,0]],[0.939,[0.767,0,0]],[0.941,[0.767,0,0]],[0.943,[0.75,0,0]],[0.945,[0.75,0,0]],[0.947,[0.732,0,0]],[0.949,[0.732,0,0]],[0.951,[0.714,0,0]],[0.953,[0.714,0,0]],[0.955,[0.696,0,0]],[0.957,[0.696,0,0]],[0.959,[0.678,0,0]],[0.961,[0.678,0,0]],[0.963,[0.66,0,0]],[0.965,[0.66,0,0]],[0.967,[0.643,0,0]],[0.969,[0.643,0,0]],[0.971,[0.625,0,0]],[0.973,[0.625,0,0]],[0.975,[0.607,0,0]],[0.977,[0.607,0,0]],[0.978,[0.589,0,0]],[0.98,[0.589,0,0]],[0.982,[0.571,0,0]],[0.984,[0.571,0,0]],[0.986,[0.553,0,0]],[0.988,[0.553,0,0]],[0.99,[0.536,0,0]],[0.992,[0.536,0,0]],[0.994,[0.518,0,0]],[0.996,[0.518,0,0]],[0.998,[0.5,0,0]],[1,[0.5,0,0]]]],"maxStress":178.10598907470705,"minStress":-347.64988403320314},"edges":[{"source":0,"area":1,"density":0.028,"id":"e0","stiffness":1000000,"target":1,"stress":0.0},{"source":1,"area":1,"density":0.028,"id":"e1","stiffness":1000000,"target":2,"stress":0.0},{"source":2,"area":1,"density":0.028,"id":"e2","stiffness":1000000,"target":3,"stress":0.0},{"source":3,"area":1,"density":0.028,"id":"e3","stiffness":1000000,"target":0,"stress":0.0},{"source":4,"area":1,"density":0.028,"id":"e4","stiffness":1000000,"target":5,"stress":3.2599264486366094e-5},{"source":5,"area":1,"density":0.028,"id":"e5","stiffness":1000000,"target":0,"stress":-1.303679170294312e-5},{"source":0,"area":1,"density":0.028,"id":"e6","stiffness":1000000,"target":6,"stress":1.00310067000389e-6},{"source":6,"area":1,"density":0.028,"id":"e7","stiffness":1000000,"target":4,"stress":-0.00028226230409700374},{"source":7,"area":1,"density":0.028,"id":"e8","stiffness":1000000,"target":8,"stress":-0.0004395000298199689},{"source":8,"area":1,"density":0.028,"id":"e9","stiffness":1000000,"target":4,"stress":-0.00019573815131344505},{"source":4,"area":1,"density":0.028,"id":"e10","stiffness":1000000,"target":9,"stress":-0.00018969982693214064},{"source":9,"area":1,"density":0.028,"id":"e11","stiffness":1000000,"target":7,"stress":-0.00019573840252823846},{"source":2,"area":1,"density":0.028,"id":"e12","stiffness":1000000,"target":10,"stress":-7.657780546889203e-6},{"source":10,"area":1,"density":0.028,"id":"e13","stiffness":1000000,"target":7,"stress":1.5467294828985605e-6},{"source":7,"area":1,"density":0.028,"id":"e14","stiffness":1000000,"target":11,"stress":-0.0002008625562763988},{"source":11,"area":1,"density":0.028,"id":"e15","stiffness":1000000,"target":2,"stress":-8.60285059962014e-7},{"source":8,"area":1,"density":0.028,"id":"e16","stiffness":1000000,"target":10,"stress":1.5467294828985605e-6},{"source":10,"area":1,"density":0.028,"id":"e17","stiffness":1000000,"target":1,"stress":-7.657529332095813e-6},{"source":1,"area":1,"density":0.028,"id":"e18","stiffness":1000000,"target":5,"stress":-8.601594525653192e-7},{"source":5,"area":1,"density":0.028,"id":"e19","stiffness":1000000,"target":8,"stress":-0.0002008623050616054},{"source":6,"area":1,"density":0.028,"id":"e20","stiffness":1000000,"target":3,"stress":1.0032262774005849e-6},{"source":3,"area":1,"density":0.028,"id":"e21","stiffness":1000000,"target":11,"stress":-1.303654048814973e-5},{"source":11,"area":1,"density":0.028,"id":"e22","stiffness":1000000,"target":9,"stress":3.25991388789694e-5},{"source":9,"area":1,"density":0.028,"id":"e23","stiffness":1000000,"target":6,"stress":-0.0002822618016674169},{"source":12,"area":1,"density":0.028,"id":"e24","stiffness":1000000,"target":3,"stress":0.0},{"source":3,"area":1,"density":0.028,"id":"e25","stiffness":1000000,"target":13,"stress":0.0},{"source":13,"area":1,"density":0.028,"id":"e26","stiffness":1000000,"target":14,"stress":0.0},{"source":14,"area":1,"density":0.028,"id":"e27","stiffness":1000000,"target":12,"stress":0.0},{"source":15,"area":1,"density":0.028,"id":"e28","stiffness":1000000,"target":6,"stress":-0.00021207377007578112},{"source":6,"area":1,"density":0.028,"id":"e29","stiffness":1000000,"target":12,"stress":-5.3232414719214705e-6},{"source":12,"area":1,"density":0.028,"id":"e30","stiffness":1000000,"target":16,"stress":-5.3232414719214705e-6},{"source":16,"area":1,"density":0.028,"id":"e31","stiffness":1000000,"target":15,"stress":-0.00021207402129057453},{"source":17,"area":1,"density":0.028,"id":"e32","stiffness":1000000,"target":9,"stress":-0.0003065115656732961},{"source":9,"area":1,"density":0.028,"id":"e33","stiffness":1000000,"target":15,"stress":-0.00016559802843956785},{"source":15,"area":1,"density":0.028,"id":"e34","stiffness":1000000,"target":18,"stress":-0.00016559827965436123},{"source":18,"area":1,"density":0.028,"id":"e35","stiffness":1000000,"target":17,"stress":-0.0003065119424954862},{"source":13,"area":1,"density":0.028,"id":"e36","stiffness":1000000,"target":11,"stress":-4.173808184768253e-6},{"source":11,"area":1,"density":0.028,"id":"e37","stiffness":1000000,"target":17,"stress":-0.00012958462930364305},{"source":17,"area":1,"density":0.028,"id":"e38","stiffness":1000000,"target":19,"stress":-0.00012958462930364305},{"source":19,"area":1,"density":0.028,"id":"e39","stiffness":1000000,"target":13,"stress":-4.173682577371558e-6},{"source":16,"area":1,"density":0.028,"id":"e40","stiffness":1000000,"target":14,"stress":1.00310067000389e-6},{"source":14,"area":1,"density":0.028,"id":"e41","stiffness":1000000,"target":19,"stress":-1.303654048814973e-5},{"source":19,"area":1,"density":0.028,"id":"e42","stiffness":1000000,"target":18,"stress":3.25991388789694e-5},{"source":18,"area":1,"density":0.028,"id":"e43","stiffness":1000000,"target":16,"stress":-0.00028226192727481364},{"source":20,"area":1,"density":0.028,"id":"e44","stiffness":1000000,"target":14,"stress":0.0},{"source":14,"area":1,"density":0.028,"id":"e45","stiffness":1000000,"target":21,"stress":0.0},{"source":21,"area":1,"density":0.028,"id":"e46","stiffness":1000000,"target":22,"stress":0.0},{"source":22,"area":1,"density":0.028,"id":"e47","stiffness":1000000,"target":20,"stress":0.0},{"source":23,"area":1,"density":0.028,"id":"e48","stiffness":1000000,"target":16,"stress":-0.00028226167606002026},{"source":16,"area":1,"density":0.028,"id":"e49","stiffness":1000000,"target":20,"stress":1.0032262774005849e-6},{"source":20,"area":1,"density":0.028,"id":"e50","stiffness":1000000,"target":24,"stress":-1.303704291773651e-5},{"source":24,"area":1,"density":0.028,"id":"e51","stiffness":1000000,"target":23,"stress":3.259838523458923e-5},{"source":25,"area":1,"density":0.028,"id":"e52","stiffness":1000000,"target":18,"stress":-0.00019573777449125498},{"source":18,"area":1,"density":0.028,"id":"e53","stiffness":1000000,"target":23,"stress":-0.00018969932450255386},{"source":23,"area":1,"density":0.028,"id":"e54","stiffness":1000000,"target":26,"stress":-0.0001957386537430318},{"source":26,"area":1,"density":0.028,"id":"e55","stiffness":1000000,"target":25,"stress":-0.0004395005322495557},{"source":21,"area":1,"density":0.028,"id":"e56","stiffness":1000000,"target":19,"stress":-8.604106673587087e-7},{"source":19,"area":1,"density":0.028,"id":"e57","stiffness":1000000,"target":25,"stress":-0.0002008621794542087},{"source":25,"area":1,"density":0.028,"id":"e58","stiffness":1000000,"target":27,"stress":1.5462270533117817e-6},{"source":27,"area":1,"density":0.028,"id":"e59","stiffness":1000000,"target":21,"stress":-7.658031761682592e-6},{"source":24,"area":1,"density":0.028,"id":"e60","stiffness":1000000,"target":22,"stress":-8.601594525653192e-7},{"source":22,"area":1,"density":0.028,"id":"e61","stiffness":1000000,"target":27,"stress":-7.657529332095813e-6},{"source":27,"area":1,"density":0.028,"id":"e62","stiffness":1000000,"target":26,"stress":1.546855090295255e-6},{"source":26,"area":1,"density":0.028,"id":"e63","stiffness":1000000,"target":24,"stress":-0.0002008623050616054},{"source":28,"area":1,"density":0.028,"id":"e64","stiffness":1000000,"target":29,"stress":-0.11213785183764498},{"source":29,"area":1,"density":0.028,"id":"e65","stiffness":1000000,"target":4,"stress":-0.017016456071084176},{"source":4,"area":1,"density":0.028,"id":"e66","stiffness":1000000,"target":30,"stress":-0.009829780133526882},{"source":30,"area":1,"density":0.028,"id":"e67","stiffness":1000000,"target":28,"stress":-0.18349613589122138},{"source":31,"area":1,"density":0.028,"id":"e68","stiffness":1000000,"target":32,"stress":-0.0765012550458356},{"source":32,"area":1,"density":0.028,"id":"e69","stiffness":1000000,"target":28,"stress":-0.08632485805880784},{"source":28,"area":1,"density":0.028,"id":"e70","stiffness":1000000,"target":33,"stress":-0.08283171459822462},{"source":33,"area":1,"density":0.028,"id":"e71","stiffness":1000000,"target":31,"stress":-0.08632485818441524},{"source":7,"area":1,"density":0.028,"id":"e72","stiffness":1000000,"target":34,"stress":-0.011617832701717741},{"source":34,"area":1,"density":0.028,"id":"e73","stiffness":1000000,"target":31,"stress":-0.06220368424847268},{"source":31,"area":1,"density":0.028,"id":"e74","stiffness":1000000,"target":35,"stress":-0.1453469309400165},{"source":35,"area":1,"density":0.028,"id":"e75","stiffness":1000000,"target":7,"stress":-0.006038546957611352},{"source":32,"area":1,"density":0.028,"id":"e76","stiffness":1000000,"target":34,"stress":-0.06220368424847268},{"source":34,"area":1,"density":0.028,"id":"e77","stiffness":1000000,"target":8,"stress":-0.011617832827325139},{"source":8,"area":1,"density":0.028,"id":"e78","stiffness":1000000,"target":29,"stress":-0.006038546706396558},{"source":29,"area":1,"density":0.028,"id":"e79","stiffness":1000000,"target":32,"stress":-0.1453469306888017},{"source":30,"area":1,"density":0.028,"id":"e80","stiffness":1000000,"target":9,"stress":-0.009829779756704692},{"source":9,"area":1,"density":0.028,"id":"e81","stiffness":1000000,"target":35,"stress":-0.01701645594547678},{"source":35,"area":1,"density":0.028,"id":"e82","stiffness":1000000,"target":33,"stress":-0.11213785183764498},{"source":33,"area":1,"density":0.028,"id":"e83","stiffness":1000000,"target":30,"stress":-0.1834961355143992},{"source":36,"area":1,"density":0.028,"id":"e84","stiffness":1000000,"target":30,"stress":-0.18361865397399438},{"source":30,"area":1,"density":0.028,"id":"e85","stiffness":1000000,"target":15,"stress":-0.012763147699155531},{"source":15,"area":1,"density":0.028,"id":"e86","stiffness":1000000,"target":37,"stress":-0.012763147824762927},{"source":37,"area":1,"density":0.028,"id":"e87","stiffness":1000000,"target":36,"stress":-0.18361865422520915},{"source":38,"area":1,"density":0.028,"id":"e88","stiffness":1000000,"target":33,"stress":-0.038860065065518354},{"source":33,"area":1,"density":0.028,"id":"e89","stiffness":1000000,"target":36,"stress":-0.04306632103225256},{"source":36,"area":1,"density":0.028,"id":"e90","stiffness":1000000,"target":39,"stress":-0.04306632103225256},{"source":39,"area":1,"density":0.028,"id":"e91","stiffness":1000000,"target":38,"stress":-0.038860064939910954},{"source":17,"area":1,"density":0.028,"id":"e92","stiffness":1000000,"target":35,"stress":-0.009320440381426312},{"source":35,"area":1,"density":0.028,"id":"e93","stiffness":1000000,"target":38,"stress":-0.14705780215919734},{"source":38,"area":1,"density":0.028,"id":"e94","stiffness":1000000,"target":40,"stress":-0.1470578024104121},{"source":40,"area":1,"density":0.028,"id":"e95","stiffness":1000000,"target":17,"stress":-0.009320440381426312},{"source":37,"area":1,"density":0.028,"id":"e96","stiffness":1000000,"target":18,"stress":-0.009829779756704692},{"source":18,"area":1,"density":0.028,"id":"e97","stiffness":1000000,"target":40,"stress":-0.01701645594547678},{"source":40,"area":1,"density":0.028,"id":"e98","stiffness":1000000,"target":39,"stress":-0.11213785183764498},{"source":39,"area":1,"density":0.028,"id":"e99","stiffness":1000000,"target":37,"stress":-0.1834961355143992},{"source":41,"area":1,"density":0.028,"id":"e100","stiffness":1000000,"target":37,"stress":-0.18349613538879178},{"source":37,"area":1,"density":0.028,"id":"e101","stiffness":1000000,"target":23,"stress":-0.009829779505489898},{"source":23,"area":1,"density":0.028,"id":"e102","stiffness":1000000,"target":42,"stress":-0.017016456322298965},{"source":42,"area":1,"density":0.028,"id":"e103","stiffness":1000000,"target":41,"stress":-0.11213785221446715},{"source":43,"area":1,"density":0.028,"id":"e104","stiffness":1000000,"target":39,"stress":-0.08632485780759304},{"source":39,"area":1,"density":0.028,"id":"e105","stiffness":1000000,"target":41,"stress":-0.08283171447261724},{"source":41,"area":1,"density":0.028,"id":"e106","stiffness":1000000,"target":44,"stress":-0.08632485831002264},{"source":44,"area":1,"density":0.028,"id":"e107","stiffness":1000000,"target":43,"stress":-0.0765012554226578},{"source":25,"area":1,"density":0.028,"id":"e108","stiffness":1000000,"target":40,"stress":-0.006038546455181765},{"source":40,"area":1,"density":0.028,"id":"e109","stiffness":1000000,"target":43,"stress":-0.14534693056319428},{"source":43,"area":1,"density":0.028,"id":"e110","stiffness":1000000,"target":45,"stress":-0.062203684499687474},{"source":45,"area":1,"density":0.028,"id":"e111","stiffness":1000000,"target":25,"stress":-0.011617832827325139},{"source":42,"area":1,"density":0.028,"id":"e112","stiffness":1000000,"target":26,"stress":-0.006038546706396558},{"source":26,"area":1,"density":0.028,"id":"e113","stiffness":1000000,"target":45,"stress":-0.011617832576110345},{"source":45,"area":1,"density":0.028,"id":"e114","stiffness":1000000,"target":44,"stress":-0.06220368424847268},{"source":44,"area":1,"density":0.028,"id":"e115","stiffness":1000000,"target":42,"stress":-0.1453469304375869},{"source":46,"area":1,"density":0.028,"id":"e116","stiffness":1000000,"target":47,"stress":-6.284610206173206},{"source":47,"area":1,"density":0.028,"id":"e117","stiffness":1000000,"target":28,"stress":-2.2982880695949897},{"source":28,"area":1,"density":0.028,"id":"e118","stiffness":1000000,"target":48,"stress":-2.3104177590954307},{"source":48,"area":1,"density":0.028,"id":"e119","stiffness":1000000,"target":46,"stress":-5.284067615336782},{"source":49,"area":1,"density":0.028,"id":"e120","stiffness":1000000,"target":50,"stress":-0.17117806142207717},{"source":50,"area":1,"density":0.028,"id":"e121","stiffness":1000000,"target":46,"stress":-0.08750808174539028},{"source":46,"area":1,"density":0.028,"id":"e122","stiffness":1000000,"target":51,"stress":-0.010449475278571103},{"source":51,"area":1,"density":0.028,"id":"e123","stiffness":1000000,"target":49,"stress":-0.08750808224781986},{"source":31,"area":1,"density":0.028,"id":"e124","stiffness":1000000,"target":52,"stress":-1.865627913941519},{"source":52,"area":1,"density":0.028,"id":"e125","stiffness":1000000,"target":49,"stress":-6.876095359960009},{"source":49,"area":1,"density":0.028,"id":"e126","stiffness":1000000,"target":53,"stress":-5.710318826409683},{"source":53,"area":1,"density":0.028,"id":"e127","stiffness":1000000,"target":31,"stress":-1.890283150431024},{"source":50,"area":1,"density":0.028,"id":"e128","stiffness":1000000,"target":52,"stress":-6.876095359960009},{"source":52,"area":1,"density":0.028,"id":"e129","stiffness":1000000,"target":32,"stress":-1.865627913941519},{"source":32,"area":1,"density":0.028,"id":"e130","stiffness":1000000,"target":47,"stress":-1.8902831501798092},{"source":47,"area":1,"density":0.028,"id":"e131","stiffness":1000000,"target":50,"stress":-5.710318826032861},{"source":48,"area":1,"density":0.028,"id":"e132","stiffness":1000000,"target":33,"stress":-2.3104177587186085},{"source":33,"area":1,"density":0.028,"id":"e133","stiffness":1000000,"target":53,"stress":-2.2982880695949897},{"source":53,"area":1,"density":0.028,"id":"e134","stiffness":1000000,"target":51,"stress":-6.284610205921991},{"source":51,"area":1,"density":0.028,"id":"e135","stiffness":1000000,"target":48,"stress":-5.284067614959959},{"source":54,"area":1,"density":0.028,"id":"e136","stiffness":1000000,"target":48,"stress":-5.282841449370239},{"source":48,"area":1,"density":0.028,"id":"e137","stiffness":1000000,"target":36,"stress":-2.2278348034147752},{"source":36,"area":1,"density":0.028,"id":"e138","stiffness":1000000,"target":55,"stress":-2.2278348034147752},{"source":55,"area":1,"density":0.028,"id":"e139","stiffness":1000000,"target":54,"stress":-5.282841449370239},{"source":56,"area":1,"density":0.028,"id":"e140","stiffness":1000000,"target":51,"stress":-0.07929461194019798},{"source":51,"area":1,"density":0.028,"id":"e141","stiffness":1000000,"target":54,"stress":-0.005209025033210821},{"source":54,"area":1,"density":0.028,"id":"e142","stiffness":1000000,"target":57,"stress":-0.005209025410033011},{"source":57,"area":1,"density":0.028,"id":"e143","stiffness":1000000,"target":56,"stress":-0.07929461244262756},{"source":38,"area":1,"density":0.028,"id":"e144","stiffness":1000000,"target":53,"stress":-1.7995415778209203},{"source":53,"area":1,"density":0.028,"id":"e145","stiffness":1000000,"target":56,"stress":-5.709383305784893},{"source":56,"area":1,"density":0.028,"id":"e146","stiffness":1000000,"target":58,"stress":-5.7093833064129305},{"source":58,"area":1,"density":0.028,"id":"e147","stiffness":1000000,"target":38,"stress":-1.7995415776953128},{"source":55,"area":1,"density":0.028,"id":"e148","stiffness":1000000,"target":39,"stress":-2.3104177587186085},{"source":39,"area":1,"density":0.028,"id":"e149","stiffness":1000000,"target":58,"stress":-2.298288069343775},{"source":58,"area":1,"density":0.028,"id":"e150","stiffness":1000000,"target":57,"stress":-6.284610206550028},{"source":57,"area":1,"density":0.028,"id":"e151","stiffness":1000000,"target":55,"stress":-5.284067614834352},{"source":59,"area":1,"density":0.028,"id":"e152","stiffness":1000000,"target":55,"stress":-5.284067614834352},{"source":55,"area":1,"density":0.028,"id":"e153","stiffness":1000000,"target":41,"stress":-2.3104177585930006},{"source":41,"area":1,"density":0.028,"id":"e154","stiffness":1000000,"target":60,"stress":-2.2982880695949897},{"source":60,"area":1,"density":0.028,"id":"e155","stiffness":1000000,"target":59,"stress":-6.284610206173206},{"source":61,"area":1,"density":0.028,"id":"e156","stiffness":1000000,"target":57,"stress":-0.08750808174539028},{"source":57,"area":1,"density":0.028,"id":"e157","stiffness":1000000,"target":59,"stress":-0.010449474399319326},{"source":59,"area":1,"density":0.028,"id":"e158","stiffness":1000000,"target":62,"stress":-0.08750808224781986},{"source":62,"area":1,"density":0.028,"id":"e159","stiffness":1000000,"target":61,"stress":-0.17117806167329194},{"source":43,"area":1,"density":0.028,"id":"e160","stiffness":1000000,"target":58,"stress":-1.890283149426165},{"source":58,"area":1,"density":0.028,"id":"e161","stiffness":1000000,"target":61,"stress":-5.710318826409683},{"source":61,"area":1,"density":0.028,"id":"e162","stiffness":1000000,"target":63,"stress":-6.876095359708794},{"source":63,"area":1,"density":0.028,"id":"e163","stiffness":1000000,"target":43,"stress":-1.8656279140671264},{"source":60,"area":1,"density":0.028,"id":"e164","stiffness":1000000,"target":44,"stress":-1.890283150431024},{"source":44,"area":1,"density":0.028,"id":"e165","stiffness":1000000,"target":63,"stress":-1.8656279140671264},{"source":63,"area":1,"density":0.028,"id":"e166","stiffness":1000000,"target":62,"stress":-6.876095359960009},{"source":62,"area":1,"density":0.028,"id":"e167","stiffness":1000000,"target":60,"stress":-5.710318826032861},{"source":64,"area":1,"density":0.028,"id":"e168","stiffness":1000000,"target":65,"stress":0.0},{"source":65,"area":1,"density":0.028,"id":"e169","stiffness":1000000,"target":0,"stress":0.0},{"source":0,"area":1,"density":0.028,"id":"e170","stiffness":1000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.028,"id":"e171","stiffness":1000000,"target":64,"stress":0.0},{"source":67,"area":1,"density":0.028,"id":"e172","stiffness":1000000,"target":68,"stress":3.2599264486366094e-5},{"source":68,"area":1,"density":0.028,"id":"e173","stiffness":1000000,"target":64,"stress":-1.303679170294312e-5},{"source":64,"area":1,"density":0.028,"id":"e174","stiffness":1000000,"target":69,"stress":1.0028494552105007e-6},{"source":69,"area":1,"density":0.028,"id":"e175","stiffness":1000000,"target":67,"stress":-0.000282262178489607},{"source":4,"area":1,"density":0.028,"id":"e176","stiffness":1000000,"target":70,"stress":-0.0003065116912806928},{"source":70,"area":1,"density":0.028,"id":"e177","stiffness":1000000,"target":67,"stress":-0.0003065116912806928},{"source":67,"area":1,"density":0.028,"id":"e178","stiffness":1000000,"target":71,"stress":-0.0001655985308691546},{"source":71,"area":1,"density":0.028,"id":"e179","stiffness":1000000,"target":4,"stress":-0.0001655985308691546},{"source":70,"area":1,"density":0.028,"id":"e180","stiffness":1000000,"target":5,"stress":-0.00012958450369624636},{"source":5,"area":1,"density":0.028,"id":"e181","stiffness":1000000,"target":65,"stress":-4.173682577371558e-6},{"source":65,"area":1,"density":0.028,"id":"e182","stiffness":1000000,"target":68,"stress":-4.173682577371558e-6},{"source":68,"area":1,"density":0.028,"id":"e183","stiffness":1000000,"target":70,"stress":-0.00012958437808884964},{"source":69,"area":1,"density":0.028,"id":"e184","stiffness":1000000,"target":66,"stress":-5.322990257128081e-6},{"source":66,"area":1,"density":0.028,"id":"e185","stiffness":1000000,"target":6,"stress":-5.322990257128081e-6},{"source":6,"area":1,"density":0.028,"id":"e186","stiffness":1000000,"target":71,"stress":-0.00021207377007578112},{"source":71,"area":1,"density":0.028,"id":"e187","stiffness":1000000,"target":69,"stress":-0.00021207377007578112},{"source":72,"area":1,"density":0.028,"id":"e188","stiffness":1000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.028,"id":"e189","stiffness":1000000,"target":12,"stress":0.0},{"source":12,"area":1,"density":0.028,"id":"e190","stiffness":1000000,"target":73,"stress":0.0},{"source":73,"area":1,"density":0.028,"id":"e191","stiffness":1000000,"target":72,"stress":0.0},{"source":74,"area":1,"density":0.028,"id":"e192","stiffness":1000000,"target":69,"stress":-0.00021207377007578112},{"source":69,"area":1,"density":0.028,"id":"e193","stiffness":1000000,"target":72,"stress":-5.322990257128081e-6},{"source":72,"area":1,"density":0.028,"id":"e194","stiffness":1000000,"target":75,"stress":-5.323367079318165e-6},{"source":75,"area":1,"density":0.028,"id":"e195","stiffness":1000000,"target":74,"stress":-0.00021207389568317784},{"source":15,"area":1,"density":0.028,"id":"e196","stiffness":1000000,"target":71,"stress":-0.0001354771234973849},{"source":71,"area":1,"density":0.028,"id":"e197","stiffness":1000000,"target":74,"stress":-0.0001354771234973849},{"source":74,"area":1,"density":0.028,"id":"e198","stiffness":1000000,"target":76,"stress":-0.00013547737471217828},{"source":76,"area":1,"density":0.028,"id":"e199","stiffness":1000000,"target":15,"stress":-0.0001354776259269717},{"source":75,"area":1,"density":0.028,"id":"e200","stiffness":1000000,"target":73,"stress":-5.323115864524776e-6},{"source":73,"area":1,"density":0.028,"id":"e201","stiffness":1000000,"target":16,"stress":-5.322990257128081e-6},{"source":16,"area":1,"density":0.028,"id":"e202","stiffness":1000000,"target":76,"stress":-0.00021207377007578112},{"source":76,"area":1,"density":0.028,"id":"e203","stiffness":1000000,"target":75,"stress":-0.00021207377007578112},{"source":77,"area":1,"density":0.028,"id":"e204","stiffness":1000000,"target":73,"stress":0.0},{"source":73,"area":1,"density":0.028,"id":"e205","stiffness":1000000,"target":20,"stress":0.0},{"source":20,"area":1,"density":0.028,"id":"e206","stiffness":1000000,"target":78,"stress":0.0},{"source":78,"area":1,"density":0.028,"id":"e207","stiffness":1000000,"target":77,"stress":0.0},{"source":79,"area":1,"density":0.028,"id":"e208","stiffness":1000000,"target":75,"stress":-0.00028226167606002026},{"source":75,"area":1,"density":0.028,"id":"e209","stiffness":1000000,"target":77,"stress":1.0029750626071955e-6},{"source":77,"area":1,"density":0.028,"id":"e210","stiffness":1000000,"target":80,"stress":-1.3036917310339816e-5},{"source":80,"area":1,"density":0.028,"id":"e211","stiffness":1000000,"target":79,"stress":3.259838523458923e-5},{"source":23,"area":1,"density":0.028,"id":"e212","stiffness":1000000,"target":76,"stress":-0.00016559777722477444},{"source":76,"area":1,"density":0.028,"id":"e213","stiffness":1000000,"target":79,"stress":-0.00016559802843956785},{"source":79,"area":1,"density":0.028,"id":"e214","stiffness":1000000,"target":81,"stress":-0.0003065123193176763},{"source":81,"area":1,"density":0.028,"id":"e215","stiffness":1000000,"target":23,"stress":-0.0003065121937102796},{"source":80,"area":1,"density":0.028,"id":"e216","stiffness":1000000,"target":78,"stress":-4.173431362578168e-6},{"source":78,"area":1,"density":0.028,"id":"e217","stiffness":1000000,"target":24,"stress":-4.173682577371558e-6},{"source":24,"area":1,"density":0.028,"id":"e218","stiffness":1000000,"target":81,"stress":-0.00012958450369624636},{"source":81,"area":1,"density":0.028,"id":"e219","stiffness":1000000,"target":80,"stress":-0.00012958437808884964},{"source":82,"area":1,"density":0.028,"id":"e220","stiffness":1000000,"target":83,"stress":-0.11213785183764498},{"source":83,"area":1,"density":0.028,"id":"e221","stiffness":1000000,"target":67,"stress":-0.01701645581986938},{"source":67,"area":1,"density":0.028,"id":"e222","stiffness":1000000,"target":84,"stress":-0.009829780133526882},{"source":84,"area":1,"density":0.028,"id":"e223","stiffness":1000000,"target":82,"stress":-0.18349613589122138},{"source":28,"area":1,"density":0.028,"id":"e224","stiffness":1000000,"target":85,"stress":-0.038860064814303555},{"source":85,"area":1,"density":0.028,"id":"e225","stiffness":1000000,"target":82,"stress":-0.038860064939910954},{"source":82,"area":1,"density":0.028,"id":"e226","stiffness":1000000,"target":86,"stress":-0.043066321283467345},{"source":86,"area":1,"density":0.028,"id":"e227","stiffness":1000000,"target":28,"stress":-0.04306632115785995},{"source":85,"area":1,"density":0.028,"id":"e228","stiffness":1000000,"target":29,"stress":-0.14705780215919734},{"source":29,"area":1,"density":0.028,"id":"e229","stiffness":1000000,"target":70,"stress":-0.009320440255818916},{"source":70,"area":1,"density":0.028,"id":"e230","stiffness":1000000,"target":83,"stress":-0.009320440381426312},{"source":83,"area":1,"density":0.028,"id":"e231","stiffness":1000000,"target":85,"stress":-0.14705780215919734},{"source":84,"area":1,"density":0.028,"id":"e232","stiffness":1000000,"target":71,"stress":-0.012763147573548135},{"source":71,"area":1,"density":0.028,"id":"e233","stiffness":1000000,"target":30,"stress":-0.012763147573548135},{"source":30,"area":1,"density":0.028,"id":"e234","stiffness":1000000,"target":86,"stress":-0.18361865384838696},{"source":86,"area":1,"density":0.028,"id":"e235","stiffness":1000000,"target":84,"stress":-0.18361865384838696},{"source":87,"area":1,"density":0.028,"id":"e236","stiffness":1000000,"target":84,"stress":-0.18361865409960176},{"source":84,"area":1,"density":0.028,"id":"e237","stiffness":1000000,"target":74,"stress":-0.012763147699155531},{"source":74,"area":1,"density":0.028,"id":"e238","stiffness":1000000,"target":88,"stress":-0.012763147950370323},{"source":88,"area":1,"density":0.028,"id":"e239","stiffness":1000000,"target":87,"stress":-0.18361865422520915},{"source":36,"area":1,"density":0.028,"id":"e240","stiffness":1000000,"target":86,"stress":-0.0033384432554882776},{"source":86,"area":1,"density":0.028,"id":"e241","stiffness":1000000,"target":87,"stress":-0.003338443129880881},{"source":87,"area":1,"density":0.028,"id":"e242","stiffness":1000000,"target":89,"stress":-0.003338443129880881},{"source":89,"area":1,"density":0.028,"id":"e243","stiffness":1000000,"target":36,"stress":-0.003338443129880881},{"source":88,"area":1,"density":0.028,"id":"e244","stiffness":1000000,"target":76,"stress":-0.012763147573548135},{"source":76,"area":1,"density":0.028,"id":"e245","stiffness":1000000,"target":37,"stress":-0.012763147573548135},{"source":37,"area":1,"density":0.028,"id":"e246","stiffness":1000000,"target":89,"stress":-0.18361865384838696},{"source":89,"area":1,"density":0.028,"id":"e247","stiffness":1000000,"target":88,"stress":-0.18361865384838696},{"source":90,"area":1,"density":0.028,"id":"e248","stiffness":1000000,"target":88,"stress":-0.18349613538879178},{"source":88,"area":1,"density":0.028,"id":"e249","stiffness":1000000,"target":79,"stress":-0.0098297793798825},{"source":79,"area":1,"density":0.028,"id":"e250","stiffness":1000000,"target":91,"stress":-0.01701645619669157},{"source":91,"area":1,"density":0.028,"id":"e251","stiffness":1000000,"target":90,"stress":-0.11213785221446715},{"source":41,"area":1,"density":0.028,"id":"e252","stiffness":1000000,"target":89,"stress":-0.04306632065543036},{"source":89,"area":1,"density":0.028,"id":"e253","stiffness":1000000,"target":90,"stress":-0.04306632078103777},{"source":90,"area":1,"density":0.028,"id":"e254","stiffness":1000000,"target":92,"stress":-0.038860065316733146},{"source":92,"area":1,"density":0.028,"id":"e255","stiffness":1000000,"target":41,"stress":-0.038860065316733146},{"source":91,"area":1,"density":0.028,"id":"e256","stiffness":1000000,"target":81,"stress":-0.009320440507033708},{"source":81,"area":1,"density":0.028,"id":"e257","stiffness":1000000,"target":42,"stress":-0.009320440255818916},{"source":42,"area":1,"density":0.028,"id":"e258","stiffness":1000000,"target":92,"stress":-0.14705780215919734},{"source":92,"area":1,"density":0.028,"id":"e259","stiffness":1000000,"target":91,"stress":-0.14705780215919734},{"source":93,"area":1,"density":0.028,"id":"e260","stiffness":1000000,"target":94,"stress":-6.284610206424421},{"source":94,"area":1,"density":0.028,"id":"e261","stiffness":1000000,"target":82,"stress":-2.298288069343775},{"source":82,"area":1,"density":0.028,"id":"e262","stiffness":1000000,"target":95,"stress":-2.3104177587186085},{"source":95,"area":1,"density":0.028,"id":"e263","stiffness":1000000,"target":93,"stress":-5.284067615839211},{"source":46,"area":1,"density":0.028,"id":"e264","stiffness":1000000,"target":96,"stress":-0.07929461219141276},{"source":96,"area":1,"density":0.028,"id":"e265","stiffness":1000000,"target":93,"stress":-0.07929461219141276},{"source":93,"area":1,"density":0.028,"id":"e266","stiffness":1000000,"target":97,"stress":-0.005209025661247805},{"source":97,"area":1,"density":0.028,"id":"e267","stiffness":1000000,"target":46,"stress":-0.005209025661247805},{"source":96,"area":1,"density":0.028,"id":"e268","stiffness":1000000,"target":47,"stress":-5.709383305784893},{"source":47,"area":1,"density":0.028,"id":"e269","stiffness":1000000,"target":85,"stress":-1.7995415778209203},{"source":85,"area":1,"density":0.028,"id":"e270","stiffness":1000000,"target":94,"stress":-1.7995415775697055},{"source":94,"area":1,"density":0.028,"id":"e271","stiffness":1000000,"target":96,"stress":-5.709383306036108},{"source":95,"area":1,"density":0.028,"id":"e272","stiffness":1000000,"target":86,"stress":-2.2278348029123456},{"source":86,"area":1,"density":0.028,"id":"e273","stiffness":1000000,"target":48,"stress":-2.22783480366599},{"source":48,"area":1,"density":0.028,"id":"e274","stiffness":1000000,"target":97,"stress":-5.282841448993417},{"source":97,"area":1,"density":0.028,"id":"e275","stiffness":1000000,"target":95,"stress":-5.282841449119025},{"source":98,"area":1,"density":0.028,"id":"e276","stiffness":1000000,"target":95,"stress":-5.282841449747061},{"source":95,"area":1,"density":0.028,"id":"e277","stiffness":1000000,"target":87,"stress":-2.22783480316356},{"source":87,"area":1,"density":0.028,"id":"e278","stiffness":1000000,"target":99,"stress":-2.22783480316356},{"source":99,"area":1,"density":0.028,"id":"e279","stiffness":1000000,"target":98,"stress":-5.282841449747061},{"source":54,"area":1,"density":0.028,"id":"e280","stiffness":1000000,"target":97,"stress":-0.00023974859657473142},{"source":97,"area":1,"density":0.028,"id":"e281","stiffness":1000000,"target":98,"stress":-0.0002397488477895248},{"source":98,"area":1,"density":0.028,"id":"e282","stiffness":1000000,"target":100,"stress":-0.0002397492246117149},{"source":100,"area":1,"density":0.028,"id":"e283","stiffness":1000000,"target":54,"stress":-0.00023974909900431818},{"source":99,"area":1,"density":0.028,"id":"e284","stiffness":1000000,"target":89,"stress":-2.2278348029123456},{"source":89,"area":1,"density":0.028,"id":"e285","stiffness":1000000,"target":55,"stress":-2.22783480366599},{"source":55,"area":1,"density":0.028,"id":"e286","stiffness":1000000,"target":100,"stress":-5.282841448993417},{"source":100,"area":1,"density":0.028,"id":"e287","stiffness":1000000,"target":99,"stress":-5.282841449119025},{"source":101,"area":1,"density":0.028,"id":"e288","stiffness":1000000,"target":99,"stress":-5.284067615211174},{"source":99,"area":1,"density":0.028,"id":"e289","stiffness":1000000,"target":90,"stress":-2.310417758341786},{"source":90,"area":1,"density":0.028,"id":"e290","stiffness":1000000,"target":102,"stress":-2.2982880690925604},{"source":102,"area":1,"density":0.028,"id":"e291","stiffness":1000000,"target":101,"stress":-6.284610206550028},{"source":59,"area":1,"density":0.028,"id":"e292","stiffness":1000000,"target":100,"stress":-0.005209024656388631},{"source":100,"area":1,"density":0.028,"id":"e293","stiffness":1000000,"target":101,"stress":-0.005209024656388631},{"source":101,"area":1,"density":0.028,"id":"e294","stiffness":1000000,"target":103,"stress":-0.07929461206580538},{"source":103,"area":1,"density":0.028,"id":"e295","stiffness":1000000,"target":59,"stress":-0.07929461206580538},{"source":102,"area":1,"density":0.028,"id":"e296","stiffness":1000000,"target":92,"stress":-1.7995415775697055},{"source":92,"area":1,"density":0.028,"id":"e297","stiffness":1000000,"target":60,"stress":-1.7995415778209203},{"source":60,"area":1,"density":0.028,"id":"e298","stiffness":1000000,"target":103,"stress":-5.709383305784893},{"source":103,"area":1,"density":0.028,"id":"e299","stiffness":1000000,"target":102,"stress":-5.709383306036108},{"source":104,"area":1,"density":0.028,"id":"e300","stiffness":1000000,"target":105,"stress":0.0},{"source":105,"area":1,"density":0.028,"id":"e301","stiffness":1000000,"target":64,"stress":0.0},{"source":64,"area":1,"density":0.028,"id":"e302","stiffness":1000000,"target":106,"stress":0.0},{"source":106,"area":1,"density":0.028,"id":"e303","stiffness":1000000,"target":104,"stress":0.0},{"source":107,"area":1,"density":0.028,"id":"e304","stiffness":1000000,"target":108,"stress":1.5467294828985605e-6},{"source":108,"area":1,"density":0.028,"id":"e305","stiffness":1000000,"target":104,"stress":-7.657780546889203e-6},{"source":104,"area":1,"density":0.028,"id":"e306","stiffness":1000000,"target":109,"stress":-8.60285059962014e-7},{"source":109,"area":1,"density":0.028,"id":"e307","stiffness":1000000,"target":107,"stress":-0.0002008628074911922},{"source":67,"area":1,"density":0.028,"id":"e308","stiffness":1000000,"target":110,"stress":-0.00019573802570604836},{"source":110,"area":1,"density":0.028,"id":"e309","stiffness":1000000,"target":107,"stress":-0.0004395002810347623},{"source":107,"area":1,"density":0.028,"id":"e310","stiffness":1000000,"target":111,"stress":-0.00019573827692084177},{"source":111,"area":1,"density":0.028,"id":"e311","stiffness":1000000,"target":67,"stress":-0.00018969995253953733},{"source":110,"area":1,"density":0.028,"id":"e312","stiffness":1000000,"target":68,"stress":-0.00020086205384681202},{"source":68,"area":1,"density":0.028,"id":"e313","stiffness":1000000,"target":105,"stress":-8.604106673587087e-7},{"source":105,"area":1,"density":0.028,"id":"e314","stiffness":1000000,"target":108,"stress":-7.657780546889203e-6},{"source":108,"area":1,"density":0.028,"id":"e315","stiffness":1000000,"target":110,"stress":1.5463526607084763e-6},{"source":109,"area":1,"density":0.028,"id":"e316","stiffness":1000000,"target":106,"stress":-1.303679170294312e-5},{"source":106,"area":1,"density":0.028,"id":"e317","stiffness":1000000,"target":69,"stress":1.0032262774005849e-6},{"source":69,"area":1,"density":0.028,"id":"e318","stiffness":1000000,"target":111,"stress":-0.00028226192727481364},{"source":111,"area":1,"density":0.028,"id":"e319","stiffness":1000000,"target":109,"stress":3.259888766417601e-5},{"source":112,"area":1,"density":0.028,"id":"e320","stiffness":1000000,"target":106,"stress":0.0},{"source":106,"area":1,"density":0.028,"id":"e321","stiffness":1000000,"target":72,"stress":0.0},{"source":72,"area":1,"density":0.028,"id":"e322","stiffness":1000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.028,"id":"e323","stiffness":1000000,"target":112,"stress":0.0},{"source":114,"area":1,"density":0.028,"id":"e324","stiffness":1000000,"target":109,"stress":-0.00012958475491103974},{"source":109,"area":1,"density":0.028,"id":"e325","stiffness":1000000,"target":112,"stress":-4.173808184768253e-6},{"source":112,"area":1,"density":0.028,"id":"e326","stiffness":1000000,"target":115,"stress":-4.173682577371558e-6},{"source":115,"area":1,"density":0.028,"id":"e327","stiffness":1000000,"target":114,"stress":-0.00012958462930364305},{"source":74,"area":1,"density":0.028,"id":"e328","stiffness":1000000,"target":111,"stress":-0.00016559827965436123},{"source":111,"area":1,"density":0.028,"id":"e329","stiffness":1000000,"target":114,"stress":-0.0003065116912806928},{"source":114,"area":1,"density":0.028,"id":"e330","stiffness":1000000,"target":116,"stress":-0.0003065118168880895},{"source":116,"area":1,"density":0.028,"id":"e331","stiffness":1000000,"target":74,"stress":-0.0001655985308691546},{"source":115,"area":1,"density":0.028,"id":"e332","stiffness":1000000,"target":113,"stress":-1.303679170294312e-5},{"source":113,"area":1,"density":0.028,"id":"e333","stiffness":1000000,"target":75,"stress":1.0032262774005849e-6},{"source":75,"area":1,"density":0.028,"id":"e334","stiffness":1000000,"target":116,"stress":-0.00028226192727481364},{"source":116,"area":1,"density":0.028,"id":"e335","stiffness":1000000,"target":115,"stress":3.259888766417601e-5},{"source":117,"area":1,"density":0.028,"id":"e336","stiffness":1000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.028,"id":"e337","stiffness":1000000,"target":77,"stress":0.0},{"source":77,"area":1,"density":0.028,"id":"e338","stiffness":1000000,"target":118,"stress":0.0},{"source":118,"area":1,"density":0.028,"id":"e339","stiffness":1000000,"target":117,"stress":0.0},{"source":119,"area":1,"density":0.028,"id":"e340","stiffness":1000000,"target":115,"stress":-0.0002008623050616054},{"source":115,"area":1,"density":0.028,"id":"e341","stiffness":1000000,"target":117,"stress":-8.604106673587087e-7},{"source":117,"area":1,"density":0.028,"id":"e342","stiffness":1000000,"target":120,"stress":-7.657906154285896e-6},{"source":120,"area":1,"density":0.028,"id":"e343","stiffness":1000000,"target":119,"stress":1.546101445915087e-6},{"source":79,"area":1,"density":0.028,"id":"e344","stiffness":1000000,"target":116,"stress":-0.00018969932450255386},{"source":116,"area":1,"density":0.028,"id":"e345","stiffness":1000000,"target":119,"stress":-0.00019573764888385827},{"source":119,"area":1,"density":0.028,"id":"e346","stiffness":1000000,"target":121,"stress":-0.00043950040664215897},{"source":121,"area":1,"density":0.028,"id":"e347","stiffness":1000000,"target":79,"stress":-0.0001957386537430318},{"source":120,"area":1,"density":0.028,"id":"e348","stiffness":1000000,"target":118,"stress":-7.657780546889203e-6},{"source":118,"area":1,"density":0.028,"id":"e349","stiffness":1000000,"target":80,"stress":-8.601594525653192e-7},{"source":80,"area":1,"density":0.028,"id":"e350","stiffness":1000000,"target":121,"stress":-0.0002008625562763988},{"source":121,"area":1,"density":0.028,"id":"e351","stiffness":1000000,"target":120,"stress":1.5466038755018657e-6},{"source":122,"area":1,"density":0.028,"id":"e352","stiffness":1000000,"target":123,"stress":-0.06220368437408008},{"source":123,"area":1,"density":0.028,"id":"e353","stiffness":1000000,"target":107,"stress":-0.011617832450502947},{"source":107,"area":1,"density":0.028,"id":"e354","stiffness":1000000,"target":124,"stress":-0.006038547083218749},{"source":124,"area":1,"density":0.028,"id":"e355","stiffness":1000000,"target":122,"stress":-0.14534693106562388},{"source":82,"area":1,"density":0.028,"id":"e356","stiffness":1000000,"target":125,"stress":-0.08632485755637825},{"source":125,"area":1,"density":0.028,"id":"e357","stiffness":1000000,"target":122,"stress":-0.0765012554226578},{"source":122,"area":1,"density":0.028,"id":"e358","stiffness":1000000,"target":126,"stress":-0.08632485793320044},{"source":126,"area":1,"density":0.028,"id":"e359","stiffness":1000000,"target":82,"stress":-0.08283171484943941},{"source":125,"area":1,"density":0.028,"id":"e360","stiffness":1000000,"target":83,"stress":-0.1453469303119795},{"source":83,"area":1,"density":0.028,"id":"e361","stiffness":1000000,"target":110,"stress":-0.006038546455181765},{"source":110,"area":1,"density":0.028,"id":"e362","stiffness":1000000,"target":123,"stress":-0.011617832827325139},{"source":123,"area":1,"density":0.028,"id":"e363","stiffness":1000000,"target":125,"stress":-0.062203684625294874},{"source":124,"area":1,"density":0.028,"id":"e364","stiffness":1000000,"target":111,"stress":-0.01701645594547678},{"source":111,"area":1,"density":0.028,"id":"e365","stiffness":1000000,"target":84,"stress":-0.009829779882312088},{"source":84,"area":1,"density":0.028,"id":"e366","stiffness":1000000,"target":126,"stress":-0.18349613576561397},{"source":126,"area":1,"density":0.028,"id":"e367","stiffness":1000000,"target":124,"stress":-0.11213785183764498},{"source":127,"area":1,"density":0.028,"id":"e368","stiffness":1000000,"target":124,"stress":-0.14705780215919734},{"source":124,"area":1,"density":0.028,"id":"e369","stiffness":1000000,"target":114,"stress":-0.009320440255818916},{"source":114,"area":1,"density":0.028,"id":"e370","stiffness":1000000,"target":128,"stress":-0.009320440381426312},{"source":128,"area":1,"density":0.028,"id":"e371","stiffness":1000000,"target":127,"stress":-0.14705780228480472},{"source":87,"area":1,"density":0.028,"id":"e372","stiffness":1000000,"target":126,"stress":-0.043066321409074744},{"source":126,"area":1,"density":0.028,"id":"e373","stiffness":1000000,"target":127,"stress":-0.038860064688696155},{"source":127,"area":1,"density":0.028,"id":"e374","stiffness":1000000,"target":129,"stress":-0.038860064688696155},{"source":129,"area":1,"density":0.028,"id":"e375","stiffness":1000000,"target":87,"stress":-0.043066321534682137},{"source":128,"area":1,"density":0.028,"id":"e376","stiffness":1000000,"target":116,"stress":-0.01701645594547678},{"source":116,"area":1,"density":0.028,"id":"e377","stiffness":1000000,"target":88,"stress":-0.009829779882312088},{"source":88,"area":1,"density":0.028,"id":"e378","stiffness":1000000,"target":129,"stress":-0.18349613576561397},{"source":129,"area":1,"density":0.028,"id":"e379","stiffness":1000000,"target":128,"stress":-0.11213785183764498},{"source":130,"area":1,"density":0.028,"id":"e380","stiffness":1000000,"target":128,"stress":-0.14534693056319428},{"source":128,"area":1,"density":0.028,"id":"e381","stiffness":1000000,"target":119,"stress":-0.006038546580789162},{"source":119,"area":1,"density":0.028,"id":"e382","stiffness":1000000,"target":131,"stress":-0.011617832827325139},{"source":131,"area":1,"density":0.028,"id":"e383","stiffness":1000000,"target":130,"stress":-0.062203684625294874},{"source":90,"area":1,"density":0.028,"id":"e384","stiffness":1000000,"target":129,"stress":-0.08283171434700982},{"source":129,"area":1,"density":0.028,"id":"e385","stiffness":1000000,"target":130,"stress":-0.08632485755637825},{"source":130,"area":1,"density":0.028,"id":"e386","stiffness":1000000,"target":132,"stress":-0.0765012552970504},{"source":132,"area":1,"density":0.028,"id":"e387","stiffness":1000000,"target":90,"stress":-0.08632485755637825},{"source":131,"area":1,"density":0.028,"id":"e388","stiffness":1000000,"target":121,"stress":-0.011617832450502947},{"source":121,"area":1,"density":0.028,"id":"e389","stiffness":1000000,"target":91,"stress":-0.006038546706396558},{"source":91,"area":1,"density":0.028,"id":"e390","stiffness":1000000,"target":132,"stress":-0.1453469301863721},{"source":132,"area":1,"density":0.028,"id":"e391","stiffness":1000000,"target":131,"stress":-0.062203684499687474},{"source":133,"area":1,"density":0.028,"id":"e392","stiffness":1000000,"target":134,"stress":-6.876095359834401},{"source":134,"area":1,"density":0.028,"id":"e393","stiffness":1000000,"target":122,"stress":-1.8656279140671264},{"source":122,"area":1,"density":0.028,"id":"e394","stiffness":1000000,"target":135,"stress":-1.8902831503054165},{"source":135,"area":1,"density":0.028,"id":"e395","stiffness":1000000,"target":133,"stress":-5.710318826409683},{"source":93,"area":1,"density":0.028,"id":"e396","stiffness":1000000,"target":136,"stress":-0.08750808174539028},{"source":136,"area":1,"density":0.028,"id":"e397","stiffness":1000000,"target":133,"stress":-0.17117806167329194},{"source":133,"area":1,"density":0.028,"id":"e398","stiffness":1000000,"target":137,"stress":-0.08750808237342726},{"source":137,"area":1,"density":0.028,"id":"e399","stiffness":1000000,"target":93,"stress":-0.010449475278571103},{"source":136,"area":1,"density":0.028,"id":"e400","stiffness":1000000,"target":94,"stress":-5.710318826409683},{"source":94,"area":1,"density":0.028,"id":"e401","stiffness":1000000,"target":125,"stress":-1.8902831496773795},{"source":125,"area":1,"density":0.028,"id":"e402","stiffness":1000000,"target":134,"stress":-1.8656279138159115},{"source":134,"area":1,"density":0.028,"id":"e403","stiffness":1000000,"target":136,"stress":-6.876095359708794},{"source":135,"area":1,"density":0.028,"id":"e404","stiffness":1000000,"target":126,"stress":-2.2982880690925604},{"source":126,"area":1,"density":0.028,"id":"e405","stiffness":1000000,"target":95,"stress":-2.3104177587186085},{"source":95,"area":1,"density":0.028,"id":"e406","stiffness":1000000,"target":137,"stress":-5.284067615587997},{"source":137,"area":1,"density":0.028,"id":"e407","stiffness":1000000,"target":135,"stress":-6.284610205921991},{"source":138,"area":1,"density":0.028,"id":"e408","stiffness":1000000,"target":135,"stress":-5.709383305910501},{"source":135,"area":1,"density":0.028,"id":"e409","stiffness":1000000,"target":127,"stress":-1.7995415779465276},{"source":127,"area":1,"density":0.028,"id":"e410","stiffness":1000000,"target":139,"stress":-1.7995415780721349},{"source":139,"area":1,"density":0.028,"id":"e411","stiffness":1000000,"target":138,"stress":-5.709383306036108},{"source":98,"area":1,"density":0.028,"id":"e412","stiffness":1000000,"target":137,"stress":-0.005209024907603424},{"source":137,"area":1,"density":0.028,"id":"e413","stiffness":1000000,"target":138,"stress":-0.07929461156337578},{"source":138,"area":1,"density":0.028,"id":"e414","stiffness":1000000,"target":140,"stress":-0.07929461181459056},{"source":140,"area":1,"density":0.028,"id":"e415","stiffness":1000000,"target":98,"stress":-0.005209025033210821},{"source":139,"area":1,"density":0.028,"id":"e416","stiffness":1000000,"target":129,"stress":-2.2982880690925604},{"source":129,"area":1,"density":0.028,"id":"e417","stiffness":1000000,"target":99,"stress":-2.3104177587186085},{"source":99,"area":1,"density":0.028,"id":"e418","stiffness":1000000,"target":140,"stress":-5.284067615587997},{"source":140,"area":1,"density":0.028,"id":"e419","stiffness":1000000,"target":139,"stress":-6.284610205921991},{"source":141,"area":1,"density":0.028,"id":"e420","stiffness":1000000,"target":139,"stress":-5.710318825907254},{"source":139,"area":1,"density":0.028,"id":"e421","stiffness":1000000,"target":130,"stress":-1.8902831499285944},{"source":130,"area":1,"density":0.028,"id":"e422","stiffness":1000000,"target":142,"stress":-1.865627913941519},{"source":142,"area":1,"density":0.028,"id":"e423","stiffness":1000000,"target":141,"stress":-6.876095360085617},{"source":101,"area":1,"density":0.028,"id":"e424","stiffness":1000000,"target":140,"stress":-0.010449474776141516},{"source":140,"area":1,"density":0.028,"id":"e425","stiffness":1000000,"target":141,"stress":-0.08750808174539028},{"source":141,"area":1,"density":0.028,"id":"e426","stiffness":1000000,"target":143,"stress":-0.17117806230132893},{"source":143,"area":1,"density":0.028,"id":"e427","stiffness":1000000,"target":101,"stress":-0.08750808237342726},{"source":142,"area":1,"density":0.028,"id":"e428","stiffness":1000000,"target":132,"stress":-1.865627913941519},{"source":132,"area":1,"density":0.028,"id":"e429","stiffness":1000000,"target":102,"stress":-1.8902831498029868},{"source":102,"area":1,"density":0.028,"id":"e430","stiffness":1000000,"target":143,"stress":-5.710318826409683},{"source":143,"area":1,"density":0.028,"id":"e431","stiffness":1000000,"target":142,"stress":-6.876095359708794}],"ndofs":864}
\ No newline at end of file
+{"nodes":[{"degrees_of_freedom":[0,1,2,3,4,5],"id":"n0","parent":"11","position":{"x":5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[6,7,8,9,10,11],"id":"n1","parent":"11","position":{"x":0,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[12,13,14,15,16,17],"id":"n2","parent":"11","position":{"x":-5,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[18,19,20,21,22,23],"id":"n3","parent":"11","position":{"x":0,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[24,25,26,27,28,29],"id":"n4","parent":"11","position":{"x":5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.622669004540762e-5,"z":-3.649807507503507e-5,"y":-0.00018152598156514214},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[30,31,32,33,34,35],"id":"n5","parent":"11","position":{"x":5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0664850583263008e-5,"z":-4.622496070950513e-5,"y":-9.241220111914953e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[36,37,38,39,40,41],"id":"n6","parent":"11","position":{"x":5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0415461397413328e-5,"z":-7.979524037948363e-6,"y":-8.226909488574707e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[42,43,44,45,46,47],"id":"n7","parent":"11","position":{"x":-5,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.943672435276918e-5,"z":-4.647451603141889e-5,"y":-0.00019857079727543677},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[48,49,50,51,52,53],"id":"n8","parent":"11","position":{"x":0,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.377908933265365e-5,"z":-4.9267195367282344e-5,"y":-0.0001966219143571467},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[54,55,56,57,58,59],"id":"n9","parent":"11","position":{"x":0,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.7621166056535307e-5,"z":-2.152282985243175e-5,"y":-0.00018333998349201976},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[60,61,62,63,64,65],"id":"n10","parent":"11","position":{"x":-5,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.540371661903145e-5,"z":-6.276743390482017e-5,"y":-0.00012068530154571406},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[66,67,68,69,70,71],"id":"n11","parent":"11","position":{"x":-5,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.41110110322377e-5,"z":-9.330334893963357e-6,"y":-9.601815856311724e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[72,73,74,75,76,77],"id":"n12","parent":"11","position":{"x":5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[78,79,80,81,82,83],"id":"n13","parent":"11","position":{"x":-5,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[84,85,86,87,88,89],"id":"n14","parent":"11","position":{"x":0,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[90,91,92,93,94,95],"id":"n15","parent":"11","position":{"x":5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.471553384292074e-5,"z":4.293076360450236e-15,"y":-0.00017523239732911627},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[96,97,98,99,100,101],"id":"n16","parent":"11","position":{"x":5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0415461397259376e-5,"z":7.979524038239048e-6,"y":-8.226909488636887e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[102,103,104,105,106,107],"id":"n17","parent":"11","position":{"x":-5,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.0115326036532106e-5,"z":2.2989053293626976e-15,"y":-0.00018616562060585213},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[108,109,110,111,112,113],"id":"n18","parent":"11","position":{"x":0,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-4.762116605692124e-5,"z":2.152282984822276e-5,"y":-0.00018333998349205776},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[114,115,116,117,118,119],"id":"n19","parent":"11","position":{"x":-5,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.411101103230907e-5,"z":9.330334892218617e-6,"y":-9.60181585633705e-5},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[120,121,122,123,124,125],"id":"n20","parent":"11","position":{"x":5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[126,127,128,129,130,131],"id":"n21","parent":"11","position":{"x":-5,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[132,133,134,135,136,137],"id":"n22","parent":"11","position":{"x":0,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[138,139,140,141,142,143],"id":"n23","parent":"11","position":{"x":5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.6226690045527584e-5,"z":3.649807507861705e-5,"y":-0.00018152598156441667},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[144,145,146,147,148,149],"id":"n24","parent":"11","position":{"x":5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-1.0664850583020496e-5,"z":4.6224960711431364e-5,"y":-9.241220111875255e-5},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[150,151,152,153,154,155],"id":"n25","parent":"11","position":{"x":-5,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.94367243532791e-5,"z":4.647451603424284e-5,"y":-0.0001985707972754713},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[156,157,158,159,160,161],"id":"n26","parent":"11","position":{"x":0,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.377908933215693e-5,"z":4.9267195364944194e-5,"y":-0.00019662191435669893},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[162,163,164,165,166,167],"id":"n27","parent":"11","position":{"x":-5,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-7.540371661905112e-5,"z":6.27674339059022e-5,"y":-0.00012068530154538796},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[168,169,170,171,172,173],"id":"n28","parent":"11","position":{"x":5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.157181939621158e-5,"z":-4.391511017315585e-5,"y":-0.00038689371772921127},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[174,175,176,177,178,179],"id":"n29","parent":"11","position":{"x":5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.15755574346331e-5,"z":-7.619474063173224e-5,"y":-0.00028577052341646883},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[180,181,182,183,184,185],"id":"n30","parent":"11","position":{"x":5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8374076014173224e-5,"z":-2.2306797506710552e-5,"y":-0.0002809613713139767},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[186,187,188,189,190,191],"id":"n31","parent":"11","position":{"x":-5,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.74773549988108e-5,"z":-5.453608168383314e-5,"y":-0.00039037793920424814},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[192,193,194,195,196,197],"id":"n32","parent":"11","position":{"x":0,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.265110343997018e-5,"z":-5.64156780532844e-5,"y":-0.0003870629312411871},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[198,199,200,201,202,203],"id":"n33","parent":"11","position":{"x":0,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.780310357938788e-5,"z":-2.569366250995223e-5,"y":-0.00039000978940298143},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[204,205,206,207,208,209],"id":"n34","parent":"11","position":{"x":-5,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010749425148199805,"z":-9.216023831466012e-5,"y":-0.00029664225858187185},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[210,211,212,213,214,215],"id":"n35","parent":"11","position":{"x":-5,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010088870315271804,"z":-2.789774547817684e-5,"y":-0.00028995401058972976},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[216,217,218,219,220,221],"id":"n36","parent":"11","position":{"x":5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.0281177719633474e-5,"z":3.972900641371885e-15,"y":-0.0003908801157851507},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[222,223,224,225,226,227],"id":"n37","parent":"11","position":{"x":5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.8374076014682307e-5,"z":2.2306797502773756e-5,"y":-0.0002809613713144747},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[228,229,230,231,232,233],"id":"n38","parent":"11","position":{"x":-5,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.8763159630518174e-5,"z":1.503530880406231e-15,"y":-0.00039518547412590563},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[234,235,236,237,238,239],"id":"n39","parent":"11","position":{"x":0,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-5.7803103579533035e-5,"z":2.56936625084787e-5,"y":-0.0003900097894026942},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[240,241,242,243,244,245],"id":"n40","parent":"11","position":{"x":-5,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.0001008887031527571,"z":2.7897745477413643e-5,"y":-0.0002899540105904807},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[246,247,248,249,250,251],"id":"n41","parent":"11","position":{"x":5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.157181939583025e-5,"z":4.391511017484086e-5,"y":-0.0003868937177300421},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[252,253,254,255,256,257],"id":"n42","parent":"11","position":{"x":5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-3.15755574344165e-5,"z":7.619474063370546e-5,"y":-0.000285770523415483},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[258,259,260,261,262,263],"id":"n43","parent":"11","position":{"x":-5,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.747735499885347e-5,"z":5.453608168261128e-5,"y":-0.0003903779392038709},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[264,265,266,267,268,269],"id":"n44","parent":"11","position":{"x":0,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-6.265110344037391e-5,"z":5.64156780503657e-5,"y":-0.00038706293124060153},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[270,271,272,273,274,275],"id":"n45","parent":"11","position":{"x":-5,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-0.00010749425148202485,"z":9.216023831524612e-5,"y":-0.00029664225858100373},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[276,277,278,279,280,281],"id":"n46","parent":"11","position":{"x":5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.640357923516516e-5,"z":-2.7593310076325773e-5,"y":-0.000684248754903702},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[282,283,284,285,286,287],"id":"n47","parent":"11","position":{"x":5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.739787689731868e-5,"z":-6.843540228700012e-5,"y":-0.0005094201798121322},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[288,289,290,291,292,293],"id":"n48","parent":"11","position":{"x":5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5529458048716966e-5,"z":-1.7609799416615502e-5,"y":-0.0005242205440922308},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[294,295,296,297,298,299],"id":"n49","parent":"11","position":{"x":-5,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.054157383271568e-5,"z":-3.712901865602862e-5,"y":-0.0006807830087482441},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[300,301,302,303,304,305],"id":"n50","parent":"11","position":{"x":0,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.105490188550998e-5,"z":-2.939725528546853e-5,"y":-0.0006698870233351675},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[306,307,308,309,310,311],"id":"n51","parent":"11","position":{"x":0,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.7989864477355407e-5,"z":-1.7252236252765174e-5,"y":-0.0006869368037637531},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[312,313,314,315,316,317],"id":"n52","parent":"11","position":{"x":-5,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.944414308591107e-5,"z":-8.304862567770509e-5,"y":-0.0004989706872073259},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[318,319,320,321,322,323],"id":"n53","parent":"11","position":{"x":-5,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.690093516113132e-5,"z":-2.2608352359714697e-5,"y":-0.0005189452126844052},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[324,325,326,327,328,329],"id":"n54","parent":"11","position":{"x":5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.5436478834849228e-5,"z":3.919908888870616e-15,"y":-0.0006793167892824741},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[330,331,332,333,334,335],"id":"n55","parent":"11","position":{"x":5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.5529458049329578e-5,"z":1.7609799415425506e-5,"y":-0.0005242205440920303},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[336,337,338,339,340,341],"id":"n56","parent":"11","position":{"x":-5,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.217420980364284e-5,"z":1.8563881549496783e-15,"y":-0.0006782558432357761},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[342,343,344,345,346,347],"id":"n57","parent":"11","position":{"x":0,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.798986447810033e-5,"z":1.7252236247593926e-5,"y":-0.0006869368037634386},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[348,349,350,351,352,353],"id":"n58","parent":"11","position":{"x":-5,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.690093516161118e-5,"z":2.2608352360963264e-5,"y":-0.0005189452126850586},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[354,355,356,357,358,359],"id":"n59","parent":"11","position":{"x":5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-2.640357923608995e-5,"z":2.7593310081519257e-5,"y":-0.0006842487549026783},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[360,361,362,363,364,365],"id":"n60","parent":"11","position":{"x":5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.739787689707269e-5,"z":6.843540228079202e-5,"y":-0.000509420179812258},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[366,367,368,369,370,371],"id":"n61","parent":"11","position":{"x":-5,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.0541573832729864e-5,"z":3.7129018659037074e-5,"y":-0.0006807830087474601},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[372,373,374,375,376,377],"id":"n62","parent":"11","position":{"x":0,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-5.105490188500528e-5,"z":2.9397255284851536e-5,"y":-0.0006698870233334568},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[378,379,380,381,382,383],"id":"n63","parent":"11","position":{"x":-5,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.944414308602272e-5,"z":8.304862567835243e-5,"y":-0.0004989706872080032},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[384,385,386,387,388,389],"id":"n64","parent":"11","position":{"x":15,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[390,391,392,393,394,395],"id":"n65","parent":"11","position":{"x":10,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[396,397,398,399,400,401],"id":"n66","parent":"11","position":{"x":10,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[402,403,404,405,406,407],"id":"n67","parent":"11","position":{"x":15,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.6226690049924064e-5,"z":-3.64980750802813e-5,"y":-0.00018152598156451446},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[408,409,410,411,412,413],"id":"n68","parent":"11","position":{"x":15,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0664850591705531e-5,"z":-4.62249607120993e-5,"y":-9.24122011208084e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[414,415,416,417,418,419],"id":"n69","parent":"11","position":{"x":15,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0415461390419565e-5,"z":-7.979524039638566e-6,"y":-8.226909488656813e-5},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[420,421,422,423,424,425],"id":"n70","parent":"11","position":{"x":10,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.4093426514988682e-14,"z":-3.967894390557354e-5,"y":-0.00018193413083052848},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[426,427,428,429,430,431],"id":"n71","parent":"11","position":{"x":10,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-8.973959241469921e-15,"z":-1.833652349287708e-5,"y":-0.0001745490197353032},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[432,433,434,435,436,437],"id":"n72","parent":"11","position":{"x":15,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[438,439,440,441,442,443],"id":"n73","parent":"11","position":{"x":10,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[444,445,446,447,448,449],"id":"n74","parent":"11","position":{"x":15,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.4715533828102213e-5,"z":4.185197987257086e-15,"y":-0.00017523239733414835},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[450,451,452,453,454,455],"id":"n75","parent":"11","position":{"x":15,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.041546138984717e-5,"z":7.979524039919407e-6,"y":-8.22690948869498e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[456,457,458,459,460,461],"id":"n76","parent":"11","position":{"x":10,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-9.22250521945878e-15,"z":1.8336523489606273e-5,"y":-0.00017454901973526247},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[462,463,464,465,466,467],"id":"n77","parent":"11","position":{"x":15,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[468,469,470,471,472,473],"id":"n78","parent":"11","position":{"x":10,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[474,475,476,477,478,479],"id":"n79","parent":"11","position":{"x":15,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.622669005253111e-5,"z":3.649807508413272e-5,"y":-0.00018152598156403324},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[480,481,482,483,484,485],"id":"n80","parent":"11","position":{"x":15,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.0664850591147653e-5,"z":4.622496071400262e-5,"y":-9.241220112013896e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[486,487,488,489,490,491],"id":"n81","parent":"11","position":{"x":10,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":1.379691294210751e-14,"z":3.967894390258713e-5,"y":-0.00018193413082949423},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[492,493,494,495,496,497],"id":"n82","parent":"11","position":{"x":15,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1571819396543286e-5,"z":-4.391511017068042e-5,"y":-0.000386893717721707},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[498,499,500,501,502,503],"id":"n83","parent":"11","position":{"x":15,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.157555748933821e-5,"z":-7.619474063694344e-5,"y":-0.00028577052339586953},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[504,505,506,507,508,509],"id":"n84","parent":"11","position":{"x":15,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8374075968478117e-5,"z":-2.2306797513444115e-5,"y":-0.00028096137132857806},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[510,511,512,513,514,515],"id":"n85","parent":"11","position":{"x":10,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.23002739784772e-14,"z":-4.597811671261646e-5,"y":-0.0003876268082655333},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[516,517,518,519,520,521],"id":"n86","parent":"11","position":{"x":10,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.9530289181524966e-14,"z":-2.225015419963793e-5,"y":-0.00038998851029909044},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[522,523,524,525,526,527],"id":"n87","parent":"11","position":{"x":15,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.0281177658931956e-5,"z":3.7085489220645106e-15,"y":-0.0003908801158224606},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[528,529,530,531,532,533],"id":"n88","parent":"11","position":{"x":15,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.8374075968120144e-5,"z":2.2306797509617416e-5,"y":-0.0002809613713290442},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[534,535,536,537,538,539],"id":"n89","parent":"11","position":{"x":10,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":-2.947743667059755e-14,"z":2.2250154198290694e-5,"y":-0.0003899885102990893},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[540,541,542,543,544,545],"id":"n90","parent":"11","position":{"x":15,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.157181939641227e-5,"z":4.391511017250436e-5,"y":-0.0003868937177226845},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[546,547,548,549,550,551],"id":"n91","parent":"11","position":{"x":15,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.1575557488802574e-5,"z":7.619474063893544e-5,"y":-0.00028577052339515016},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[552,553,554,555,556,557],"id":"n92","parent":"11","position":{"x":10,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":3.22239395123529e-14,"z":4.59781167107343e-5,"y":-0.00038762680826382405},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[558,559,560,561,562,563],"id":"n93","parent":"11","position":{"x":15,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.6403579194246127e-5,"z":-2.759331002200859e-5,"y":-0.0006842487548826687},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[564,565,566,567,568,569],"id":"n94","parent":"11","position":{"x":15,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7397876987371424e-5,"z":-6.843540224762872e-5,"y":-0.0005094201797351822},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[570,571,572,573,574,575],"id":"n95","parent":"11","position":{"x":15,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.552945794730746e-5,"z":-1.760979939863312e-5,"y":-0.0005242205441317948},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[576,577,578,579,580,581],"id":"n96","parent":"11","position":{"x":10,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":9.944324498261432e-15,"z":-1.848470678214762e-5,"y":-0.0006623083405927487},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[582,583,584,585,586,587],"id":"n97","parent":"11","position":{"x":10,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.999523230647442e-14,"z":-1.4132588321151932e-5,"y":-0.0006762177500546807},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[588,589,590,591,592,593],"id":"n98","parent":"11","position":{"x":15,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.5436478700342232e-5,"z":3.816790768587257e-15,"y":-0.0006793167893080055},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[594,595,596,597,598,599],"id":"n99","parent":"11","position":{"x":15,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.552945794684534e-5,"z":1.7609799397626064e-5,"y":-0.0005242205441316564},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[600,601,602,603,604,605],"id":"n100","parent":"11","position":{"x":10,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":-4.992333447664059e-14,"z":1.4132588316510469e-5,"y":-0.0006762177500546768},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[606,607,608,609,610,611],"id":"n101","parent":"11","position":{"x":15,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":2.6403579195027708e-5,"z":2.7593310027274586e-5,"y":-0.0006842487548815358},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[612,613,614,615,616,617],"id":"n102","parent":"11","position":{"x":15,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":2.7397876987732294e-5,"z":6.843540224140432e-5,"y":-0.0005094201797351987},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[618,619,620,621,622,623],"id":"n103","parent":"11","position":{"x":10,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":9.936151831844958e-15,"z":1.8484706778428716e-5,"y":-0.0006623083405910376},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[624,625,626,627,628,629],"id":"n104","parent":"11","position":{"x":25,"z":0,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[630,631,632,633,634,635],"id":"n105","parent":"11","position":{"x":20,"z":-5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[636,637,638,639,640,641],"id":"n106","parent":"11","position":{"x":20,"z":5,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[642,643,644,645,646,647],"id":"n107","parent":"11","position":{"x":25,"z":0,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.943672434929455e-5,"z":-4.6474516045339845e-5,"y":-0.00019857079727649368},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[648,649,650,651,652,653],"id":"n108","parent":"11","position":{"x":25,"z":-5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.540371662474222e-5,"z":-6.276743391166985e-5,"y":-0.00012068530155025119},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[654,655,656,657,658,659],"id":"n109","parent":"11","position":{"x":25,"z":5,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.411101103000319e-5,"z":-9.33033489726297e-6,"y":-9.601815856137757e-5},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[660,661,662,663,664,665],"id":"n110","parent":"11","position":{"x":20,"z":-5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.377908934464671e-5,"z":-4.926719537586471e-5,"y":-0.00019662191435361419},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[666,667,668,669,670,671],"id":"n111","parent":"11","position":{"x":20,"z":5,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.7621166041136505e-5,"z":-2.1522829856823794e-5,"y":-0.00018333998349751143},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[672,673,674,675,676,677],"id":"n112","parent":"11","position":{"x":25,"z":10,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[678,679,680,681,682,683],"id":"n113","parent":"11","position":{"x":20,"z":15,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[684,685,686,687,688,689],"id":"n114","parent":"11","position":{"x":25,"z":10,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.011532602470781e-5,"z":2.475233219871976e-15,"y":-0.00018616562060938966},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[690,691,692,693,694,695],"id":"n115","parent":"11","position":{"x":25,"z":15,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.411101103003464e-5,"z":9.330334895621843e-6,"y":-9.601815856166844e-5},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[696,697,698,699,700,701],"id":"n116","parent":"11","position":{"x":20,"z":15,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":4.7621166041564426e-5,"z":2.1522829852024325e-5,"y":-0.00018333998349757779},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[702,703,704,705,706,707],"id":"n117","parent":"11","position":{"x":25,"z":20,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[708,709,710,711,712,713],"id":"n118","parent":"11","position":{"x":20,"z":25,"y":-5},"restrained_degrees_of_freedom":[true,true,true,true,true,true],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0,"z":0,"y":0},"angle":{"x":0,"z":0,"y":0}},{"degrees_of_freedom":[714,715,716,717,718,719],"id":"n119","parent":"11","position":{"x":25,"z":20,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.9436724349415116e-5,"z":4.647451604777672e-5,"y":-0.0001985707972767195},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[720,721,722,723,724,725],"id":"n120","parent":"11","position":{"x":25,"z":25,"y":0},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":7.54037166245126e-5,"z":6.27674339126665e-5,"y":-0.00012068530155027375},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[726,727,728,729,730,731],"id":"n121","parent":"11","position":{"x":20,"z":25,"y":5},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.377908934575334e-5,"z":4.9267195374104666e-5,"y":-0.00019662191435311963},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[732,733,734,735,736,737],"id":"n122","parent":"11","position":{"x":25,"z":0,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.74773549921152e-5,"z":-5.4536081695715786e-5,"y":-0.00039037793919015687},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[738,739,740,741,742,743],"id":"n123","parent":"11","position":{"x":25,"z":-5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010749425148966461,"z":-9.216023833340413e-5,"y":-0.0002966422585563283},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[744,745,746,747,748,749],"id":"n124","parent":"11","position":{"x":25,"z":5,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010088870313693533,"z":-2.789774550173317e-5,"y":-0.0002899540106140654},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[750,751,752,753,754,755],"id":"n125","parent":"11","position":{"x":20,"z":-5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.265110349141813e-5,"z":-5.64156780422259e-5,"y":-0.00038706293114100753},"angle":{"x":0.0,"z":-0.0,"y":0.0}},{"degrees_of_freedom":[756,757,758,759,760,761],"id":"n126","parent":"11","position":{"x":20,"z":5,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.7803103523855025e-5,"z":-2.5693662503752205e-5,"y":-0.0003900097894660623},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[762,763,764,765,766,767],"id":"n127","parent":"11","position":{"x":25,"z":10,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.8763159591997684e-5,"z":1.5606480032091826e-15,"y":-0.0003951854742226091},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[768,769,770,771,772,773],"id":"n128","parent":"11","position":{"x":25,"z":15,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.00010088870313629748,"z":2.7897745500794137e-5,"y":-0.00028995401061367236},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[774,775,776,777,778,779],"id":"n129","parent":"11","position":{"x":20,"z":15,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":5.780310352368397e-5,"z":2.5693662502984837e-5,"y":-0.00039000978946627276},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[780,781,782,783,784,785],"id":"n130","parent":"11","position":{"x":25,"z":20,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.747735499324769e-5,"z":5.453608169457314e-5,"y":-0.0003903779391902922},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[786,787,788,789,790,791],"id":"n131","parent":"11","position":{"x":25,"z":25,"y":10},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":0.0001074942514892943,"z":9.216023833401722e-5,"y":-0.00029664225855504885},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[792,793,794,795,796,797],"id":"n132","parent":"11","position":{"x":20,"z":25,"y":15},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":6.265110349130742e-5,"z":5.6415678038750215e-5,"y":-0.0003870629311404042},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[798,799,800,801,802,803],"id":"n133","parent":"11","position":{"x":25,"z":0,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.0541573847183614e-5,"z":-3.712901822761736e-5,"y":-0.0006807830086985303},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[804,805,806,807,808,809],"id":"n134","parent":"11","position":{"x":25,"z":-5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.944414317251503e-5,"z":-8.304862563637759e-5,"y":-0.0004989706869786226},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[810,811,812,813,814,815],"id":"n135","parent":"11","position":{"x":25,"z":5,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.690093505333794e-5,"z":-2.260835235581193e-5,"y":-0.0005189452128393646},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[816,817,818,819,820,821],"id":"n136","parent":"11","position":{"x":20,"z":-5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.1054901981180646e-5,"z":-2.9397255144471136e-5,"y":-0.0006698870230960394},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[822,823,824,825,826,827],"id":"n137","parent":"11","position":{"x":20,"z":5,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.798986435548446e-5,"z":-1.725223619059061e-5,"y":-0.0006869368039293332},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[828,829,830,831,832,833],"id":"n138","parent":"11","position":{"x":25,"z":10,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.217420971102332e-5,"z":1.676054791632663e-15,"y":-0.0006782558434006911},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[834,835,836,837,838,839],"id":"n139","parent":"11","position":{"x":25,"z":15,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.690093505293194e-5,"z":2.2608352357014057e-5,"y":-0.0005189452128387015},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[840,841,842,843,844,845],"id":"n140","parent":"11","position":{"x":20,"z":15,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":4.7989864356023846e-5,"z":1.7252236185361894e-5,"y":-0.0006869368039293307},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[846,847,848,849,850,851],"id":"n141","parent":"11","position":{"x":25,"z":20,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.054157384752511e-5,"z":3.712901823057802e-5,"y":-0.0006807830086981802},"angle":{"x":0.0,"z":0.0,"y":-0.0}},{"degrees_of_freedom":[852,853,854,855,856,857],"id":"n142","parent":"11","position":{"x":25,"z":25,"y":20},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":0},"displacement":{"x":9.944414317247121e-5,"z":8.304862563733013e-5,"y":-0.0004989706869791533},"angle":{"x":0.0,"z":0.0,"y":0.0}},{"degrees_of_freedom":[858,859,860,861,862,863],"id":"n143","parent":"11","position":{"x":20,"z":25,"y":25},"restrained_degrees_of_freedom":[false,false,false,false,false,false],"force":{"x":0,"z":0,"y":-400},"displacement":{"x":5.105490198073157e-5,"z":2.9397255143902086e-5,"y":-0.0006698870230943305},"angle":{"x":0.0,"z":0.0,"y":0.0}}],"bar":false,"animation":{"speed":3,"exaggeration":2000,"showDisplacement":true},"viz":{"colorMap":0,"colorMaps":[[[0,[0.23,0.299,0.754]],[0.002,[0.23,0.299,0.754]],[0.004,[0.234,0.306,0.76]],[0.006,[0.234,0.306,0.76]],[0.008,[0.239,0.312,0.766]],[0.01,[0.239,0.312,0.766]],[0.012,[0.244,0.319,0.772]],[0.014,[0.244,0.319,0.772]],[0.016,[0.248,0.326,0.778]],[0.018,[0.248,0.326,0.778]],[0.02,[0.253,0.333,0.784]],[0.022,[0.253,0.333,0.784]],[0.023,[0.257,0.34,0.79]],[0.025,[0.257,0.34,0.79]],[0.027,[0.262,0.346,0.796]],[0.029,[0.262,0.346,0.796]],[0.031,[0.266,0.353,0.802]],[0.033,[0.266,0.353,0.802]],[0.035,[0.271,0.36,0.807]],[0.037,[0.271,0.36,0.807]],[0.039,[0.276,0.367,0.813]],[0.041,[0.276,0.367,0.813]],[0.043,[0.281,0.373,0.818]],[0.045,[0.281,0.373,0.818]],[0.047,[0.285,0.38,0.823]],[0.049,[0.285,0.38,0.823]],[0.051,[0.29,0.387,0.829]],[0.053,[0.29,0.387,0.829]],[0.055,[0.295,0.394,0.834]],[0.057,[0.295,0.394,0.834]],[0.059,[0.299,0.4,0.84]],[0.061,[0.299,0.4,0.84]],[0.063,[0.304,0.407,0.845]],[0.065,[0.304,0.407,0.845]],[0.067,[0.309,0.413,0.85]],[0.068,[0.309,0.413,0.85]],[0.07,[0.314,0.42,0.855]],[0.072,[0.314,0.42,0.855]],[0.074,[0.319,0.427,0.86]],[0.076,[0.319,0.427,0.86]],[0.078,[0.324,0.433,0.865]],[0.08,[0.324,0.433,0.865]],[0.082,[0.329,0.44,0.87]],[0.084,[0.329,0.44,0.87]],[0.086,[0.333,0.446,0.874]],[0.088,[0.333,0.446,0.874]],[0.09,[0.338,0.453,0.879]],[0.092,[0.338,0.453,0.879]],[0.094,[0.343,0.459,0.884]],[0.096,[0.343,0.459,0.884]],[0.098,[0.348,0.466,0.888]],[0.1,[0.348,0.466,0.888]],[0.102,[0.353,0.472,0.893]],[0.104,[0.353,0.472,0.893]],[0.106,[0.358,0.478,0.897]],[0.108,[0.358,0.478,0.897]],[0.11,[0.363,0.485,0.901]],[0.112,[0.363,0.485,0.901]],[0.114,[0.369,0.491,0.905]],[0.115,[0.369,0.491,0.905]],[0.117,[0.374,0.497,0.909]],[0.119,[0.374,0.497,0.909]],[0.121,[0.379,0.504,0.914]],[0.123,[0.379,0.504,0.914]],[0.125,[0.384,0.51,0.918]],[0.127,[0.384,0.51,0.918]],[0.129,[0.389,0.516,0.921]],[0.131,[0.389,0.516,0.921]],[0.133,[0.394,0.522,0.925]],[0.135,[0.394,0.522,0.925]],[0.137,[0.399,0.529,0.928]],[0.139,[0.399,0.529,0.928]],[0.141,[0.404,0.535,0.932]],[0.143,[0.404,0.535,0.932]],[0.145,[0.41,0.541,0.936]],[0.147,[0.41,0.541,0.936]],[0.149,[0.415,0.547,0.939]],[0.151,[0.415,0.547,0.939]],[0.153,[0.42,0.553,0.943]],[0.155,[0.42,0.553,0.943]],[0.157,[0.425,0.559,0.946]],[0.159,[0.425,0.559,0.946]],[0.16,[0.431,0.565,0.949]],[0.162,[0.431,0.565,0.949]],[0.164,[0.436,0.571,0.952]],[0.166,[0.436,0.571,0.952]],[0.168,[0.441,0.577,0.955]],[0.17,[0.441,0.577,0.955]],[0.172,[0.446,0.582,0.957]],[0.174,[0.446,0.582,0.957]],[0.176,[0.452,0.588,0.96]],[0.178,[0.452,0.588,0.96]],[0.18,[0.457,0.594,0.963]],[0.182,[0.457,0.594,0.963]],[0.184,[0.462,0.6,0.966]],[0.186,[0.462,0.6,0.966]],[0.188,[0.468,0.606,0.969]],[0.19,[0.468,0.606,0.969]],[0.192,[0.473,0.611,0.971]],[0.194,[0.473,0.611,0.971]],[0.196,[0.478,0.617,0.973]],[0.198,[0.478,0.617,0.973]],[0.2,[0.484,0.622,0.975]],[0.202,[0.484,0.622,0.975]],[0.204,[0.489,0.628,0.977]],[0.205,[0.489,0.628,0.977]],[0.207,[0.495,0.633,0.979]],[0.209,[0.495,0.633,0.979]],[0.211,[0.5,0.639,0.981]],[0.213,[0.5,0.639,0.981]],[0.215,[0.505,0.644,0.983]],[0.217,[0.505,0.644,0.983]],[0.219,[0.511,0.649,0.985]],[0.221,[0.511,0.649,0.985]],[0.223,[0.516,0.654,0.986]],[0.225,[0.516,0.654,0.986]],[0.227,[0.522,0.66,0.988]],[0.229,[0.522,0.66,0.988]],[0.231,[0.527,0.665,0.989]],[0.233,[0.527,0.665,0.989]],[0.235,[0.533,0.67,0.99]],[0.237,[0.533,0.67,0.99]],[0.239,[0.538,0.675,0.992]],[0.241,[0.538,0.675,0.992]],[0.243,[0.543,0.68,0.993]],[0.245,[0.543,0.68,0.993]],[0.247,[0.549,0.685,0.994]],[0.249,[0.549,0.685,0.994]],[0.25,[0.554,0.69,0.996]],[0.252,[0.554,0.69,0.996]],[0.254,[0.56,0.695,0.996]],[0.256,[0.56,0.695,0.996]],[0.258,[0.565,0.699,0.997]],[0.26,[0.565,0.699,0.997]],[0.262,[0.571,0.704,0.997]],[0.264,[0.571,0.704,0.997]],[0.266,[0.576,0.709,0.998]],[0.268,[0.576,0.709,0.998]],[0.27,[0.581,0.713,0.998]],[0.272,[0.581,0.713,0.998]],[0.274,[0.587,0.718,0.999]],[0.276,[0.587,0.718,0.999]],[0.278,[0.592,0.723,0.999]],[0.28,[0.592,0.723,0.999]],[0.282,[0.598,0.727,1]],[0.028,[0.598,0.727,1]],[0.286,[0.603,0.732,1]],[0.288,[0.603,0.732,1]],[0.29,[0.609,0.736,0.999]],[0.292,[0.609,0.736,0.999]],[0.294,[0.614,0.74,0.999]],[0.295,[0.614,0.74,0.999]],[0.297,[0.619,0.744,0.999]],[0.299,[0.619,0.744,0.999]],[0.301,[0.625,0.748,0.999]],[0.303,[0.625,0.748,0.999]],[0.305,[0.63,0.753,0.999]],[0.307,[0.63,0.753,0.999]],[0.309,[0.635,0.757,0.998]],[0.311,[0.635,0.757,0.998]],[0.313,[0.641,0.761,0.998]],[0.315,[0.641,0.761,0.998]],[0.317,[0.646,0.764,0.997]],[0.319,[0.646,0.764,0.997]],[0.321,[0.651,0.768,0.996]],[0.323,[0.651,0.768,0.996]],[0.325,[0.657,0.772,0.995]],[0.327,[0.657,0.772,0.995]],[0.329,[0.662,0.775,0.994]],[0.331,[0.662,0.775,0.994]],[0.333,[0.667,0.779,0.993]],[0.335,[0.667,0.779,0.993]],[0.337,[0.673,0.783,0.992]],[0.339,[0.673,0.783,0.992]],[0.341,[0.678,0.787,0.991]],[0.342,[0.678,0.787,0.991]],[0.344,[0.683,0.79,0.99]],[0.346,[0.683,0.79,0.99]],[0.348,[0.688,0.793,0.988]],[0.35,[0.688,0.793,0.988]],[0.352,[0.693,0.796,0.986]],[0.354,[0.693,0.796,0.986]],[0.356,[0.698,0.799,0.985]],[0.358,[0.698,0.799,0.985]],[0.36,[0.704,0.803,0.983]],[0.362,[0.704,0.803,0.983]],[0.364,[0.709,0.806,0.981]],[0.366,[0.709,0.806,0.981]],[0.368,[0.714,0.809,0.979]],[0.37,[0.714,0.809,0.979]],[0.372,[0.719,0.812,0.978]],[0.374,[0.719,0.812,0.978]],[0.376,[0.724,0.815,0.976]],[0.378,[0.724,0.815,0.976]],[0.38,[0.729,0.817,0.973]],[0.382,[0.729,0.817,0.973]],[0.384,[0.734,0.82,0.971]],[0.386,[0.734,0.82,0.971]],[0.387,[0.739,0.823,0.968]],[0.389,[0.739,0.823,0.968]],[0.391,[0.744,0.825,0.966]],[0.393,[0.744,0.825,0.966]],[0.395,[0.749,0.828,0.963]],[0.397,[0.749,0.828,0.963]],[0.399,[0.754,0.83,0.961]],[0.401,[0.754,0.83,0.961]],[0.403,[0.759,0.833,0.958]],[0.405,[0.759,0.833,0.958]],[0.407,[0.763,0.835,0.956]],[0.409,[0.763,0.835,0.956]],[0.411,[0.768,0.837,0.952]],[0.413,[0.768,0.837,0.952]],[0.415,[0.773,0.839,0.949]],[0.417,[0.773,0.839,0.949]],[0.419,[0.777,0.841,0.946]],[0.421,[0.777,0.841,0.946]],[0.423,[0.782,0.843,0.943]],[0.425,[0.782,0.843,0.943]],[0.427,[0.787,0.845,0.94]],[0.429,[0.787,0.845,0.94]],[0.431,[0.791,0.847,0.937]],[0.432,[0.791,0.847,0.937]],[0.434,[0.796,0.849,0.933]],[0.436,[0.796,0.849,0.933]],[0.438,[0.801,0.85,0.93]],[0.44,[0.801,0.85,0.93]],[0.442,[0.805,0.852,0.926]],[0.444,[0.805,0.852,0.926]],[0.446,[0.809,0.853,0.922]],[0.448,[0.809,0.853,0.922]],[0.45,[0.814,0.854,0.918]],[0.452,[0.814,0.854,0.918]],[0.454,[0.818,0.856,0.915]],[0.456,[0.818,0.856,0.915]],[0.458,[0.822,0.857,0.911]],[0.46,[0.822,0.857,0.911]],[0.462,[0.827,0.858,0.907]],[0.464,[0.827,0.858,0.907]],[0.466,[0.831,0.86,0.903]],[0.468,[0.831,0.86,0.903]],[0.47,[0.835,0.861,0.899]],[0.472,[0.835,0.861,0.899]],[0.474,[0.839,0.861,0.894]],[0.476,[0.839,0.861,0.894]],[0.477,[0.843,0.862,0.89]],[0.479,[0.843,0.862,0.89]],[0.481,[0.847,0.862,0.886]],[0.483,[0.847,0.862,0.886]],[0.485,[0.851,0.863,0.881]],[0.487,[0.851,0.863,0.881]],[0.489,[0.855,0.864,0.877]],[0.491,[0.855,0.864,0.877]],[0.493,[0.859,0.864,0.872]],[0.495,[0.859,0.864,0.872]],[0.497,[0.863,0.865,0.868]],[0.499,[0.863,0.865,0.868]],[0.501,[0.867,0.864,0.863]],[0.503,[0.867,0.864,0.863]],[0.505,[0.871,0.862,0.857]],[0.507,[0.871,0.862,0.857]],[0.509,[0.876,0.86,0.851]],[0.511,[0.876,0.86,0.851]],[0.513,[0.88,0.858,0.846]],[0.515,[0.88,0.858,0.846]],[0.517,[0.884,0.856,0.84]],[0.519,[0.884,0.856,0.84]],[0.521,[0.888,0.854,0.835]],[0.523,[0.888,0.854,0.835]],[0.524,[0.892,0.852,0.829]],[0.526,[0.892,0.852,0.829]],[0.528,[0.896,0.85,0.823]],[0.53,[0.896,0.85,0.823]],[0.532,[0.9,0.848,0.818]],[0.534,[0.9,0.848,0.818]],[0.536,[0.903,0.845,0.812]],[0.538,[0.903,0.845,0.812]],[0.54,[0.906,0.842,0.806]],[0.542,[0.906,0.842,0.806]],[0.544,[0.909,0.839,0.8]],[0.546,[0.909,0.839,0.8]],[0.548,[0.913,0.837,0.795]],[0.55,[0.913,0.837,0.795]],[0.552,[0.916,0.834,0.789]],[0.554,[0.916,0.834,0.789]],[0.556,[0.919,0.831,0.783]],[0.558,[0.919,0.831,0.783]],[0.56,[0.923,0.829,0.777]],[0.562,[0.923,0.829,0.777]],[0.564,[0.926,0.826,0.771]],[0.566,[0.926,0.826,0.771]],[0.568,[0.928,0.822,0.765]],[0.569,[0.928,0.822,0.765]],[0.571,[0.931,0.819,0.759]],[0.573,[0.931,0.819,0.759]],[0.575,[0.933,0.816,0.753]],[0.577,[0.933,0.816,0.753]],[0.579,[0.936,0.812,0.747]],[0.581,[0.936,0.812,0.747]],[0.583,[0.938,0.809,0.741]],[0.585,[0.938,0.809,0.741]],[0.587,[0.941,0.806,0.735]],[0.589,[0.941,0.806,0.735]],[0.591,[0.943,0.802,0.729]],[0.593,[0.943,0.802,0.729]],[0.595,[0.946,0.799,0.723]],[0.597,[0.946,0.799,0.723]],[0.599,[0.947,0.795,0.717]],[0.601,[0.947,0.795,0.717]],[0.603,[0.949,0.791,0.711]],[0.605,[0.949,0.791,0.711]],[0.607,[0.951,0.787,0.705]],[0.609,[0.951,0.787,0.705]],[0.611,[0.953,0.783,0.699]],[0.613,[0.953,0.783,0.699]],[0.614,[0.955,0.779,0.693]],[0.616,[0.955,0.779,0.693]],[0.618,[0.956,0.775,0.686]],[0.62,[0.956,0.775,0.686]],[0.622,[0.958,0.771,0.68]],[0.624,[0.958,0.771,0.68]],[0.626,[0.96,0.767,0.674]],[0.628,[0.96,0.767,0.674]],[0.63,[0.961,0.763,0.668]],[0.632,[0.961,0.763,0.668]],[0.634,[0.962,0.758,0.662]],[0.636,[0.962,0.758,0.662]],[0.638,[0.963,0.754,0.656]],[0.64,[0.963,0.754,0.656]],[0.642,[0.964,0.749,0.649]],[0.644,[0.964,0.749,0.649]],[0.646,[0.965,0.745,0.643]],[0.648,[0.965,0.745,0.643]],[0.65,[0.966,0.74,0.637]],[0.652,[0.966,0.74,0.637]],[0.654,[0.967,0.736,0.631]],[0.656,[0.967,0.736,0.631]],[0.658,[0.968,0.731,0.625]],[0.659,[0.968,0.731,0.625]],[0.661,[0.968,0.726,0.618]],[0.663,[0.968,0.726,0.618]],[0.665,[0.968,0.721,0.612]],[0.667,[0.968,0.721,0.612]],[0.669,[0.969,0.716,0.606]],[0.671,[0.969,0.716,0.606]],[0.673,[0.969,0.711,0.6]],[0.675,[0.969,0.711,0.6]],[0.677,[0.969,0.706,0.594]],[0.679,[0.969,0.706,0.594]],[0.681,[0.97,0.701,0.588]],[0.683,[0.97,0.701,0.588]],[0.685,[0.97,0.696,0.581]],[0.687,[0.97,0.696,0.581]],[0.689,[0.97,0.69,0.575]],[0.691,[0.97,0.69,0.575]],[0.693,[0.969,0.685,0.569]],[0.695,[0.969,0.685,0.569]],[0.697,[0.969,0.679,0.563]],[0.699,[0.969,0.679,0.563]],[0.701,[0.968,0.674,0.557]],[0.703,[0.968,0.674,0.557]],[0.705,[0.968,0.668,0.55]],[0.706,[0.968,0.668,0.55]],[0.708,[0.968,0.663,0.544]],[0.71,[0.968,0.663,0.544]],[0.712,[0.967,0.657,0.538]],[0.714,[0.967,0.657,0.538]],[0.716,[0.967,0.652,0.532]],[0.718,[0.967,0.652,0.532]],[0.72,[0.966,0.646,0.526]],[0.722,[0.966,0.646,0.526]],[0.724,[0.965,0.64,0.52]],[0.726,[0.965,0.64,0.52]],[0.728,[0.964,0.634,0.514]],[0.73,[0.964,0.634,0.514]],[0.732,[0.963,0.628,0.508]],[0.734,[0.963,0.628,0.508]],[0.736,[0.962,0.622,0.502]],[0.738,[0.962,0.622,0.502]],[0.74,[0.96,0.616,0.495]],[0.742,[0.96,0.616,0.495]],[0.744,[0.959,0.61,0.489]],[0.746,[0.959,0.61,0.489]],[0.748,[0.958,0.604,0.483]],[0.75,[0.958,0.604,0.483]],[0.751,[0.957,0.598,0.477]],[0.753,[0.957,0.598,0.477]],[0.755,[0.955,0.592,0.471]],[0.757,[0.955,0.592,0.471]],[0.759,[0.953,0.585,0.465]],[0.761,[0.953,0.585,0.465]],[0.763,[0.951,0.579,0.459]],[0.765,[0.951,0.579,0.459]],[0.767,[0.949,0.572,0.453]],[0.769,[0.949,0.572,0.453]],[0.771,[0.948,0.566,0.447]],[0.773,[0.948,0.566,0.447]],[0.775,[0.946,0.56,0.442]],[0.777,[0.946,0.56,0.442]],[0.779,[0.944,0.553,0.436]],[0.781,[0.944,0.553,0.436]],[0.783,[0.942,0.546,0.43]],[0.785,[0.942,0.546,0.43]],[0.787,[0.939,0.54,0.424]],[0.789,[0.939,0.54,0.424]],[0.791,[0.937,0.533,0.418]],[0.793,[0.937,0.533,0.418]],[0.795,[0.934,0.526,0.412]],[0.796,[0.934,0.526,0.412]],[0.798,[0.932,0.519,0.406]],[0.8,[0.932,0.519,0.406]],[0.802,[0.929,0.512,0.401]],[0.804,[0.929,0.512,0.401]],[0.806,[0.927,0.505,0.395]],[0.808,[0.927,0.505,0.395]],[0.81,[0.924,0.499,0.389]],[0.812,[0.924,0.499,0.389]],[0.814,[0.921,0.491,0.383]],[0.816,[0.921,0.491,0.383]],[0.818,[0.918,0.484,0.378]],[0.82,[0.918,0.484,0.378]],[0.822,[0.915,0.477,0.372]],[0.824,[0.915,0.477,0.372]],[0.826,[0.912,0.47,0.367]],[0.828,[0.912,0.47,0.367]],[0.83,[0.909,0.462,0.361]],[0.832,[0.909,0.462,0.361]],[0.834,[0.906,0.455,0.355]],[0.836,[0.906,0.455,0.355]],[0.838,[0.903,0.448,0.35]],[0.84,[0.903,0.448,0.35]],[0.841,[0.9,0.441,0.344]],[0.843,[0.9,0.441,0.344]],[0.845,[0.896,0.433,0.339]],[0.847,[0.896,0.433,0.339]],[0.849,[0.892,0.425,0.333]],[0.851,[0.892,0.425,0.333]],[0.853,[0.888,0.418,0.328]],[0.855,[0.888,0.418,0.328]],[0.857,[0.885,0.41,0.323]],[0.859,[0.885,0.41,0.323]],[0.861,[0.881,0.402,0.317]],[0.863,[0.881,0.402,0.317]],[0.865,[0.877,0.395,0.312]],[0.867,[0.877,0.395,0.312]],[0.869,[0.873,0.387,0.306]],[0.871,[0.873,0.387,0.306]],[0.873,[0.87,0.379,0.301]],[0.875,[0.87,0.379,0.301]],[0.877,[0.865,0.371,0.296]],[0.879,[0.865,0.371,0.296]],[0.881,[0.861,0.363,0.291]],[0.883,[0.861,0.363,0.291]],[0.885,[0.857,0.355,0.285]],[0.886,[0.857,0.355,0.285]],[0.888,[0.852,0.346,0.28]],[0.89,[0.852,0.346,0.28]],[0.892,[0.848,0.338,0.275]],[0.894,[0.848,0.338,0.275]],[0.896,[0.844,0.33,0.27]],[0.898,[0.844,0.33,0.27]],[0.9,[0.839,0.322,0.265]],[0.902,[0.839,0.322,0.265]],[0.904,[0.835,0.314,0.26]],[0.906,[0.835,0.314,0.26]],[0.908,[0.83,0.305,0.255]],[0.91,[0.83,0.305,0.255]],[0.912,[0.825,0.296,0.25]],[0.914,[0.825,0.296,0.25]],[0.916,[0.82,0.287,0.245]],[0.918,[0.82,0.287,0.245]],[0.92,[0.816,0.278,0.24]],[0.922,[0.816,0.278,0.24]],[0.924,[0.811,0.269,0.235]],[0.926,[0.811,0.269,0.235]],[0.928,[0.806,0.26,0.231]],[0.93,[0.806,0.26,0.231]],[0.932,[0.801,0.251,0.226]],[0.933,[0.801,0.251,0.226]],[0.935,[0.796,0.242,0.221]],[0.937,[0.796,0.242,0.221]],[0.939,[0.791,0.231,0.216]],[0.941,[0.791,0.231,0.216]],[0.943,[0.785,0.221,0.212]],[0.945,[0.785,0.221,0.212]],[0.947,[0.78,0.21,0.207]],[0.949,[0.78,0.21,0.207]],[0.951,[0.774,0.2,0.203]],[0.953,[0.774,0.2,0.203]],[0.955,[0.769,0.189,0.198]],[0.957,[0.769,0.189,0.198]],[0.959,[0.764,0.179,0.193]],[0.961,[0.764,0.179,0.193]],[0.963,[0.758,0.168,0.189]],[0.965,[0.758,0.168,0.189]],[0.967,[0.753,0.158,0.184]],[0.969,[0.753,0.158,0.184]],[0.971,[0.747,0.14,0.18]],[0.973,[0.747,0.14,0.18]],[0.975,[0.741,0.122,0.176]],[0.977,[0.741,0.122,0.176]],[0.978,[0.735,0.104,0.171]],[0.98,[0.735,0.104,0.171]],[0.982,[0.729,0.087,0.167]],[0.984,[0.729,0.087,0.167]],[0.986,[0.723,0.069,0.163]],[0.988,[0.723,0.069,0.163]],[0.99,[0.717,0.051,0.159]],[0.992,[0.717,0.051,0.159]],[0.994,[0.712,0.033,0.154]],[0.996,[0.712,0.033,0.154]],[0.998,[0.706,0.016,0.15]],[1,[0.706,0.016,0.15]]],[[0,[1,1,0.851]],[0.002,[1,1,0.851]],[0.004,[0.998,0.999,0.846]],[0.006,[0.998,0.999,0.846]],[0.008,[0.996,0.998,0.841]],[0.01,[0.996,0.998,0.841]],[0.012,[0.993,0.997,0.836]],[0.014,[0.993,0.997,0.836]],[0.016,[0.991,0.997,0.831]],[0.018,[0.991,0.997,0.831]],[0.02,[0.989,0.996,0.826]],[0.022,[0.989,0.996,0.826]],[0.023,[0.987,0.995,0.821]],[0.025,[0.987,0.995,0.821]],[0.027,[0.984,0.994,0.817]],[0.029,[0.984,0.994,0.817]],[0.031,[0.982,0.993,0.812]],[0.033,[0.982,0.993,0.812]],[0.035,[0.98,0.992,0.807]],[0.037,[0.98,0.992,0.807]],[0.039,[0.978,0.991,0.802]],[0.041,[0.978,0.991,0.802]],[0.043,[0.976,0.991,0.797]],[0.045,[0.976,0.991,0.797]],[0.047,[0.973,0.99,0.792]],[0.049,[0.973,0.99,0.792]],[0.051,[0.971,0.989,0.787]],[0.053,[0.971,0.989,0.787]],[0.055,[0.969,0.988,0.782]],[0.057,[0.969,0.988,0.782]],[0.059,[0.967,0.987,0.777]],[0.061,[0.967,0.987,0.777]],[0.063,[0.965,0.986,0.772]],[0.065,[0.965,0.986,0.772]],[0.067,[0.962,0.985,0.767]],[0.068,[0.962,0.985,0.767]],[0.07,[0.96,0.984,0.762]],[0.072,[0.96,0.984,0.762]],[0.074,[0.958,0.984,0.757]],[0.076,[0.958,0.984,0.757]],[0.078,[0.956,0.983,0.753]],[0.08,[0.956,0.983,0.753]],[0.082,[0.953,0.982,0.748]],[0.084,[0.953,0.982,0.748]],[0.086,[0.951,0.981,0.743]],[0.088,[0.951,0.981,0.743]],[0.09,[0.949,0.98,0.738]],[0.092,[0.949,0.98,0.738]],[0.094,[0.947,0.979,0.733]],[0.096,[0.947,0.979,0.733]],[0.098,[0.945,0.978,0.728]],[0.1,[0.945,0.978,0.728]],[0.102,[0.942,0.978,0.723]],[0.104,[0.942,0.978,0.723]],[0.106,[0.94,0.977,0.718]],[0.108,[0.94,0.977,0.718]],[0.11,[0.938,0.976,0.713]],[0.112,[0.938,0.976,0.713]],[0.114,[0.936,0.975,0.708]],[0.115,[0.936,0.975,0.708]],[0.117,[0.934,0.974,0.703]],[0.119,[0.934,0.974,0.703]],[0.121,[0.931,0.973,0.698]],[0.123,[0.931,0.973,0.698]],[0.125,[0.929,0.972,0.694]],[0.127,[0.929,0.972,0.694]],[0.129,[0.924,0.97,0.695]],[0.131,[0.924,0.97,0.695]],[0.133,[0.919,0.969,0.695]],[0.135,[0.919,0.969,0.695]],[0.137,[0.915,0.967,0.695]],[0.139,[0.915,0.967,0.695]],[0.141,[0.91,0.965,0.696]],[0.143,[0.91,0.965,0.696]],[0.145,[0.905,0.963,0.696]],[0.147,[0.905,0.963,0.696]],[0.149,[0.901,0.961,0.696]],[0.151,[0.901,0.961,0.696]],[0.153,[0.896,0.959,0.697]],[0.155,[0.896,0.959,0.697]],[0.157,[0.891,0.958,0.697]],[0.159,[0.891,0.958,0.697]],[0.16,[0.887,0.956,0.697]],[0.162,[0.887,0.956,0.697]],[0.164,[0.882,0.954,0.698]],[0.166,[0.882,0.954,0.698]],[0.168,[0.877,0.952,0.698]],[0.17,[0.877,0.952,0.698]],[0.172,[0.873,0.95,0.699]],[0.174,[0.873,0.95,0.699]],[0.176,[0.868,0.948,0.699]],[0.178,[0.868,0.948,0.699]],[0.18,[0.863,0.946,0.699]],[0.182,[0.863,0.946,0.699]],[0.184,[0.859,0.945,0.7]],[0.186,[0.859,0.945,0.7]],[0.188,[0.854,0.943,0.7]],[0.19,[0.854,0.943,0.7]],[0.192,[0.849,0.941,0.7]],[0.194,[0.849,0.941,0.7]],[0.196,[0.845,0.939,0.701]],[0.198,[0.845,0.939,0.701]],[0.2,[0.84,0.937,0.701]],[0.202,[0.84,0.937,0.701]],[0.204,[0.835,0.935,0.702]],[0.205,[0.835,0.935,0.702]],[0.207,[0.831,0.934,0.702]],[0.209,[0.831,0.934,0.702]],[0.211,[0.826,0.932,0.702]],[0.213,[0.826,0.932,0.702]],[0.215,[0.821,0.93,0.703]],[0.217,[0.821,0.93,0.703]],[0.219,[0.817,0.928,0.703]],[0.221,[0.817,0.928,0.703]],[0.223,[0.812,0.926,0.703]],[0.225,[0.812,0.926,0.703]],[0.227,[0.807,0.924,0.704]],[0.229,[0.807,0.924,0.704]],[0.231,[0.803,0.922,0.704]],[0.233,[0.803,0.922,0.704]],[0.235,[0.798,0.921,0.704]],[0.237,[0.798,0.921,0.704]],[0.239,[0.793,0.919,0.705]],[0.241,[0.793,0.919,0.705]],[0.243,[0.789,0.917,0.705]],[0.245,[0.789,0.917,0.705]],[0.247,[0.784,0.915,0.706]],[0.249,[0.784,0.915,0.706]],[0.25,[0.778,0.913,0.706]],[0.252,[0.778,0.913,0.706]],[0.254,[0.769,0.909,0.707]],[0.256,[0.769,0.909,0.707]],[0.258,[0.76,0.906,0.708]],[0.26,[0.76,0.906,0.708]],[0.262,[0.752,0.903,0.709]],[0.264,[0.752,0.903,0.709]],[0.266,[0.743,0.899,0.71]],[0.268,[0.743,0.899,0.71]],[0.27,[0.734,0.896,0.71]],[0.272,[0.734,0.896,0.71]],[0.274,[0.725,0.892,0.711]],[0.276,[0.725,0.892,0.711]],[0.278,[0.716,0.889,0.712]],[0.28,[0.716,0.889,0.712]],[0.282,[0.707,0.885,0.713]],[0.028,[0.707,0.885,0.713]],[0.286,[0.698,0.882,0.714]],[0.288,[0.698,0.882,0.714]],[0.29,[0.69,0.878,0.715]],[0.292,[0.69,0.878,0.715]],[0.294,[0.681,0.875,0.716]],[0.295,[0.681,0.875,0.716]],[0.297,[0.672,0.872,0.716]],[0.299,[0.672,0.872,0.716]],[0.301,[0.663,0.868,0.717]],[0.303,[0.663,0.868,0.717]],[0.305,[0.654,0.865,0.718]],[0.307,[0.654,0.865,0.718]],[0.309,[0.645,0.861,0.719]],[0.311,[0.645,0.861,0.719]],[0.313,[0.636,0.858,0.72]],[0.315,[0.636,0.858,0.72]],[0.317,[0.628,0.854,0.721]],[0.319,[0.628,0.854,0.721]],[0.321,[0.619,0.851,0.722]],[0.323,[0.619,0.851,0.722]],[0.325,[0.61,0.847,0.722]],[0.327,[0.61,0.847,0.722]],[0.329,[0.601,0.844,0.723]],[0.331,[0.601,0.844,0.723]],[0.333,[0.592,0.841,0.724]],[0.335,[0.592,0.841,0.724]],[0.337,[0.583,0.837,0.725]],[0.339,[0.583,0.837,0.725]],[0.341,[0.574,0.834,0.726]],[0.342,[0.574,0.834,0.726]],[0.344,[0.566,0.83,0.727]],[0.346,[0.566,0.83,0.727]],[0.348,[0.557,0.827,0.728]],[0.35,[0.557,0.827,0.728]],[0.352,[0.548,0.823,0.728]],[0.354,[0.548,0.823,0.728]],[0.356,[0.539,0.82,0.729]],[0.358,[0.539,0.82,0.729]],[0.36,[0.53,0.816,0.73]],[0.362,[0.53,0.816,0.73]],[0.364,[0.521,0.813,0.731]],[0.366,[0.521,0.813,0.731]],[0.368,[0.512,0.81,0.732]],[0.37,[0.512,0.81,0.732]],[0.372,[0.504,0.806,0.733]],[0.374,[0.504,0.806,0.733]],[0.376,[0.495,0.803,0.734]],[0.378,[0.495,0.803,0.734]],[0.38,[0.488,0.8,0.735]],[0.382,[0.488,0.8,0.735]],[0.384,[0.48,0.797,0.736]],[0.386,[0.48,0.797,0.736]],[0.387,[0.472,0.794,0.737]],[0.389,[0.472,0.794,0.737]],[0.391,[0.465,0.792,0.738]],[0.393,[0.465,0.792,0.738]],[0.395,[0.457,0.789,0.739]],[0.397,[0.457,0.789,0.739]],[0.399,[0.449,0.786,0.74]],[0.401,[0.449,0.786,0.74]],[0.403,[0.442,0.783,0.741]],[0.405,[0.442,0.783,0.741]],[0.407,[0.434,0.78,0.743]],[0.409,[0.434,0.78,0.743]],[0.411,[0.427,0.777,0.744]],[0.413,[0.427,0.777,0.744]],[0.415,[0.419,0.775,0.745]],[0.417,[0.419,0.775,0.745]],[0.419,[0.411,0.772,0.746]],[0.421,[0.411,0.772,0.746]],[0.423,[0.404,0.769,0.747]],[0.425,[0.404,0.769,0.747]],[0.427,[0.396,0.766,0.748]],[0.429,[0.396,0.766,0.748]],[0.431,[0.388,0.763,0.749]],[0.432,[0.388,0.763,0.749]],[0.434,[0.381,0.76,0.75]],[0.436,[0.381,0.76,0.75]],[0.438,[0.373,0.758,0.751]],[0.44,[0.373,0.758,0.751]],[0.442,[0.366,0.755,0.753]],[0.444,[0.366,0.755,0.753]],[0.446,[0.358,0.752,0.754]],[0.448,[0.358,0.752,0.754]],[0.45,[0.35,0.749,0.755]],[0.452,[0.35,0.749,0.755]],[0.454,[0.343,0.746,0.756]],[0.456,[0.343,0.746,0.756]],[0.458,[0.335,0.743,0.757]],[0.46,[0.335,0.743,0.757]],[0.462,[0.327,0.741,0.758]],[0.464,[0.327,0.741,0.758]],[0.466,[0.32,0.738,0.759]],[0.468,[0.32,0.738,0.759]],[0.47,[0.312,0.735,0.76]],[0.472,[0.312,0.735,0.76]],[0.474,[0.304,0.732,0.761]],[0.476,[0.304,0.732,0.761]],[0.477,[0.297,0.729,0.763]],[0.479,[0.297,0.729,0.763]],[0.481,[0.289,0.726,0.764]],[0.483,[0.289,0.726,0.764]],[0.485,[0.282,0.724,0.765]],[0.487,[0.282,0.724,0.765]],[0.489,[0.274,0.721,0.766]],[0.491,[0.274,0.721,0.766]],[0.493,[0.266,0.718,0.767]],[0.495,[0.266,0.718,0.767]],[0.497,[0.259,0.715,0.768]],[0.499,[0.259,0.715,0.768]],[0.501,[0.253,0.711,0.768]],[0.503,[0.253,0.711,0.768]],[0.505,[0.248,0.707,0.768]],[0.507,[0.248,0.707,0.768]],[0.509,[0.244,0.702,0.767]],[0.511,[0.244,0.702,0.767]],[0.513,[0.239,0.698,0.767]],[0.515,[0.239,0.698,0.767]],[0.517,[0.235,0.693,0.766]],[0.519,[0.235,0.693,0.766]],[0.521,[0.231,0.689,0.766]],[0.523,[0.231,0.689,0.766]],[0.524,[0.226,0.684,0.765]],[0.526,[0.226,0.684,0.765]],[0.528,[0.222,0.68,0.765]],[0.53,[0.222,0.68,0.765]],[0.532,[0.217,0.675,0.764]],[0.534,[0.217,0.675,0.764]],[0.536,[0.213,0.67,0.764]],[0.538,[0.213,0.67,0.764]],[0.54,[0.208,0.666,0.763]],[0.542,[0.208,0.666,0.763]],[0.544,[0.204,0.661,0.763]],[0.546,[0.204,0.661,0.763]],[0.548,[0.2,0.657,0.762]],[0.55,[0.2,0.657,0.762]],[0.552,[0.195,0.652,0.762]],[0.554,[0.195,0.652,0.762]],[0.556,[0.191,0.648,0.761]],[0.558,[0.191,0.648,0.761]],[0.56,[0.186,0.643,0.761]],[0.562,[0.186,0.643,0.761]],[0.564,[0.182,0.639,0.761]],[0.566,[0.182,0.639,0.761]],[0.568,[0.177,0.634,0.76]],[0.569,[0.177,0.634,0.76]],[0.571,[0.173,0.63,0.76]],[0.573,[0.173,0.63,0.76]],[0.575,[0.169,0.625,0.759]],[0.577,[0.169,0.625,0.759]],[0.579,[0.164,0.62,0.759]],[0.581,[0.164,0.62,0.759]],[0.583,[0.16,0.616,0.758]],[0.585,[0.16,0.616,0.758]],[0.587,[0.155,0.611,0.758]],[0.589,[0.155,0.611,0.758]],[0.591,[0.151,0.607,0.757]],[0.593,[0.151,0.607,0.757]],[0.595,[0.146,0.602,0.757]],[0.597,[0.146,0.602,0.757]],[0.599,[0.142,0.598,0.756]],[0.601,[0.142,0.598,0.756]],[0.603,[0.138,0.593,0.756]],[0.605,[0.138,0.593,0.756]],[0.607,[0.133,0.589,0.755]],[0.609,[0.133,0.589,0.755]],[0.611,[0.129,0.584,0.755]],[0.613,[0.129,0.584,0.755]],[0.614,[0.124,0.579,0.754]],[0.616,[0.124,0.579,0.754]],[0.618,[0.12,0.575,0.754]],[0.62,[0.12,0.575,0.754]],[0.622,[0.115,0.57,0.753]],[0.624,[0.115,0.57,0.753]],[0.626,[0.114,0.565,0.751]],[0.628,[0.114,0.565,0.751]],[0.63,[0.115,0.558,0.748]],[0.632,[0.115,0.558,0.748]],[0.634,[0.115,0.552,0.745]],[0.636,[0.115,0.552,0.745]],[0.638,[0.116,0.546,0.742]],[0.64,[0.116,0.546,0.742]],[0.642,[0.117,0.54,0.739]],[0.644,[0.117,0.54,0.739]],[0.646,[0.117,0.533,0.736]],[0.648,[0.117,0.533,0.736]],[0.65,[0.118,0.527,0.733]],[0.652,[0.118,0.527,0.733]],[0.654,[0.118,0.521,0.73]],[0.656,[0.118,0.521,0.73]],[0.658,[0.119,0.515,0.727]],[0.659,[0.119,0.515,0.727]],[0.661,[0.12,0.508,0.725]],[0.663,[0.12,0.508,0.725]],[0.665,[0.12,0.502,0.722]],[0.667,[0.12,0.502,0.722]],[0.669,[0.121,0.496,0.719]],[0.671,[0.121,0.496,0.719]],[0.673,[0.121,0.489,0.716]],[0.675,[0.121,0.489,0.716]],[0.677,[0.122,0.483,0.713]],[0.679,[0.122,0.483,0.713]],[0.681,[0.123,0.477,0.71]],[0.683,[0.123,0.477,0.71]],[0.685,[0.123,0.471,0.707]],[0.687,[0.123,0.471,0.707]],[0.689,[0.124,0.464,0.704]],[0.691,[0.124,0.464,0.704]],[0.693,[0.125,0.458,0.701]],[0.695,[0.125,0.458,0.701]],[0.697,[0.125,0.452,0.698]],[0.699,[0.125,0.452,0.698]],[0.701,[0.126,0.445,0.695]],[0.703,[0.126,0.445,0.695]],[0.705,[0.126,0.439,0.692]],[0.706,[0.126,0.439,0.692]],[0.708,[0.127,0.433,0.689]],[0.71,[0.127,0.433,0.689]],[0.712,[0.128,0.427,0.686]],[0.714,[0.128,0.427,0.686]],[0.716,[0.128,0.42,0.683]],[0.718,[0.128,0.42,0.683]],[0.72,[0.129,0.414,0.68]],[0.722,[0.129,0.414,0.68]],[0.724,[0.129,0.408,0.677]],[0.726,[0.129,0.408,0.677]],[0.728,[0.13,0.402,0.674]],[0.73,[0.13,0.402,0.674]],[0.732,[0.131,0.395,0.671]],[0.734,[0.131,0.395,0.671]],[0.736,[0.131,0.389,0.668]],[0.738,[0.131,0.389,0.668]],[0.74,[0.132,0.383,0.665]],[0.742,[0.132,0.383,0.665]],[0.744,[0.133,0.376,0.663]],[0.746,[0.133,0.376,0.663]],[0.748,[0.133,0.37,0.66]],[0.75,[0.133,0.37,0.66]],[0.751,[0.134,0.365,0.657]],[0.753,[0.134,0.365,0.657]],[0.755,[0.134,0.36,0.655]],[0.757,[0.134,0.36,0.655]],[0.759,[0.134,0.354,0.652]],[0.761,[0.134,0.354,0.652]],[0.763,[0.135,0.349,0.65]],[0.765,[0.135,0.349,0.65]],[0.767,[0.135,0.344,0.647]],[0.769,[0.135,0.344,0.647]],[0.771,[0.135,0.339,0.645]],[0.773,[0.135,0.339,0.645]],[0.775,[0.136,0.334,0.642]],[0.777,[0.136,0.334,0.642]],[0.779,[0.136,0.329,0.64]],[0.781,[0.136,0.329,0.64]],[0.783,[0.137,0.323,0.637]],[0.785,[0.137,0.323,0.637]],[0.787,[0.137,0.318,0.635]],[0.789,[0.137,0.318,0.635]],[0.791,[0.137,0.313,0.632]],[0.793,[0.137,0.313,0.632]],[0.795,[0.138,0.308,0.63]],[0.796,[0.138,0.308,0.63]],[0.798,[0.138,0.303,0.627]],[0.8,[0.138,0.303,0.627]],[0.802,[0.138,0.298,0.625]],[0.804,[0.138,0.298,0.625]],[0.806,[0.139,0.292,0.623]],[0.808,[0.139,0.292,0.623]],[0.81,[0.139,0.287,0.62]],[0.812,[0.139,0.287,0.62]],[0.814,[0.14,0.282,0.618]],[0.816,[0.14,0.282,0.618]],[0.818,[0.14,0.277,0.615]],[0.82,[0.14,0.277,0.615]],[0.822,[0.14,0.272,0.613]],[0.824,[0.14,0.272,0.613]],[0.826,[0.141,0.267,0.61]],[0.828,[0.141,0.267,0.61]],[0.83,[0.141,0.261,0.608]],[0.832,[0.141,0.261,0.608]],[0.834,[0.141,0.256,0.605]],[0.836,[0.141,0.256,0.605]],[0.838,[0.142,0.251,0.603]],[0.84,[0.142,0.251,0.603]],[0.841,[0.142,0.246,0.6]],[0.843,[0.142,0.246,0.6]],[0.845,[0.142,0.241,0.598]],[0.847,[0.142,0.241,0.598]],[0.849,[0.143,0.236,0.595]],[0.851,[0.143,0.236,0.595]],[0.853,[0.143,0.23,0.593]],[0.855,[0.143,0.23,0.593]],[0.857,[0.144,0.225,0.591]],[0.859,[0.144,0.225,0.591]],[0.861,[0.144,0.22,0.588]],[0.863,[0.144,0.22,0.588]],[0.865,[0.144,0.215,0.586]],[0.867,[0.144,0.215,0.586]],[0.869,[0.145,0.21,0.583]],[0.871,[0.145,0.21,0.583]],[0.873,[0.145,0.205,0.581]],[0.875,[0.145,0.205,0.581]],[0.877,[0.142,0.201,0.574]],[0.879,[0.142,0.201,0.574]],[0.881,[0.138,0.199,0.567]],[0.883,[0.138,0.199,0.567]],[0.885,[0.135,0.196,0.559]],[0.886,[0.135,0.196,0.559]],[0.888,[0.131,0.193,0.552]],[0.89,[0.131,0.193,0.552]],[0.892,[0.128,0.19,0.544]],[0.894,[0.128,0.19,0.544]],[0.896,[0.124,0.187,0.537]],[0.898,[0.124,0.187,0.537]],[0.9,[0.121,0.184,0.53]],[0.902,[0.121,0.184,0.53]],[0.904,[0.117,0.182,0.522]],[0.906,[0.117,0.182,0.522]],[0.908,[0.113,0.179,0.515]],[0.91,[0.113,0.179,0.515]],[0.912,[0.11,0.176,0.507]],[0.914,[0.11,0.176,0.507]],[0.916,[0.106,0.173,0.5]],[0.918,[0.106,0.173,0.5]],[0.92,[0.103,0.17,0.493]],[0.922,[0.103,0.17,0.493]],[0.924,[0.099,0.167,0.485]],[0.926,[0.099,0.167,0.485]],[0.928,[0.096,0.165,0.478]],[0.93,[0.096,0.165,0.478]],[0.932,[0.092,0.162,0.471]],[0.933,[0.092,0.162,0.471]],[0.935,[0.088,0.159,0.463]],[0.937,[0.088,0.159,0.463]],[0.939,[0.085,0.156,0.456]],[0.941,[0.085,0.156,0.456]],[0.943,[0.081,0.153,0.448]],[0.945,[0.081,0.153,0.448]],[0.947,[0.078,0.151,0.441]],[0.949,[0.078,0.151,0.441]],[0.951,[0.074,0.148,0.434]],[0.953,[0.074,0.148,0.434]],[0.955,[0.071,0.145,0.426]],[0.957,[0.071,0.145,0.426]],[0.959,[0.067,0.142,0.419]],[0.961,[0.067,0.142,0.419]],[0.963,[0.063,0.139,0.412]],[0.965,[0.063,0.139,0.412]],[0.967,[0.06,0.136,0.404]],[0.969,[0.06,0.136,0.404]],[0.971,[0.056,0.134,0.397]],[0.973,[0.056,0.134,0.397]],[0.975,[0.053,0.131,0.389]],[0.977,[0.053,0.131,0.389]],[0.978,[0.049,0.128,0.382]],[0.98,[0.049,0.128,0.382]],[0.982,[0.046,0.125,0.375]],[0.984,[0.046,0.125,0.375]],[0.986,[0.042,0.122,0.367]],[0.988,[0.042,0.122,0.367]],[0.99,[0.039,0.119,0.36]],[0.992,[0.039,0.119,0.36]],[0.994,[0.035,0.117,0.352]],[0.996,[0.035,0.117,0.352]],[0.998,[0.031,0.114,0.345]],[1,[0.031,0.114,0.345]]],[[0,[0,0,1]],[0.002,[0,0,1]],[0.004,[0,0.004,0.998]],[0.006,[0,0.004,0.998]],[0.008,[0,0.008,0.996]],[0.01,[0,0.008,0.996]],[0.012,[0,0.012,0.994]],[0.014,[0,0.012,0.994]],[0.016,[0,0.016,0.992]],[0.018,[0,0.016,0.992]],[0.02,[0,0.02,0.99]],[0.022,[0,0.02,0.99]],[0.023,[0,0.024,0.988]],[0.025,[0,0.024,0.988]],[0.027,[0,0.027,0.986]],[0.029,[0,0.027,0.986]],[0.031,[0,0.031,0.984]],[0.033,[0,0.031,0.984]],[0.035,[0,0.035,0.982]],[0.037,[0,0.035,0.982]],[0.039,[0,0.039,0.98]],[0.041,[0,0.039,0.98]],[0.043,[0,0.043,0.978]],[0.045,[0,0.043,0.978]],[0.047,[0,0.047,0.976]],[0.049,[0,0.047,0.976]],[0.051,[0,0.051,0.975]],[0.053,[0,0.051,0.975]],[0.055,[0,0.055,0.973]],[0.057,[0,0.055,0.973]],[0.059,[0,0.059,0.971]],[0.061,[0,0.059,0.971]],[0.063,[0,0.063,0.969]],[0.065,[0,0.063,0.969]],[0.067,[0,0.067,0.967]],[0.068,[0,0.067,0.967]],[0.07,[0,0.071,0.965]],[0.072,[0,0.071,0.965]],[0.074,[0,0.075,0.963]],[0.076,[0,0.075,0.963]],[0.078,[0,0.078,0.961]],[0.08,[0,0.078,0.961]],[0.082,[0,0.082,0.959]],[0.084,[0,0.082,0.959]],[0.086,[0,0.086,0.957]],[0.088,[0,0.086,0.957]],[0.09,[0,0.09,0.955]],[0.092,[0,0.09,0.955]],[0.094,[0,0.094,0.953]],[0.096,[0,0.094,0.953]],[0.098,[0,0.098,0.951]],[0.1,[0,0.098,0.951]],[0.102,[0,0.102,0.949]],[0.104,[0,0.102,0.949]],[0.106,[0,0.106,0.947]],[0.108,[0,0.106,0.947]],[0.11,[0,0.11,0.945]],[0.112,[0,0.11,0.945]],[0.114,[0,0.114,0.943]],[0.115,[0,0.114,0.943]],[0.117,[0,0.118,0.941]],[0.119,[0,0.118,0.941]],[0.121,[0,0.122,0.939]],[0.123,[0,0.122,0.939]],[0.125,[0,0.125,0.937]],[0.127,[0,0.125,0.937]],[0.129,[0,0.129,0.935]],[0.131,[0,0.129,0.935]],[0.133,[0,0.133,0.933]],[0.135,[0,0.133,0.933]],[0.137,[0,0.137,0.931]],[0.139,[0,0.137,0.931]],[0.141,[0,0.141,0.929]],[0.143,[0,0.141,0.929]],[0.145,[0,0.145,0.927]],[0.147,[0,0.145,0.927]],[0.149,[0,0.149,0.925]],[0.151,[0,0.149,0.925]],[0.153,[0,0.153,0.924]],[0.155,[0,0.153,0.924]],[0.157,[0,0.157,0.922]],[0.159,[0,0.157,0.922]],[0.16,[0,0.161,0.92]],[0.162,[0,0.161,0.92]],[0.164,[0,0.165,0.918]],[0.166,[0,0.165,0.918]],[0.168,[0,0.169,0.916]],[0.17,[0,0.169,0.916]],[0.172,[0,0.173,0.914]],[0.174,[0,0.173,0.914]],[0.176,[0,0.176,0.912]],[0.178,[0,0.176,0.912]],[0.18,[0,0.18,0.91]],[0.182,[0,0.18,0.91]],[0.184,[0,0.184,0.908]],[0.186,[0,0.184,0.908]],[0.188,[0,0.188,0.906]],[0.19,[0,0.188,0.906]],[0.192,[0,0.192,0.904]],[0.194,[0,0.192,0.904]],[0.196,[0,0.196,0.902]],[0.198,[0,0.196,0.902]],[0.2,[0,0.2,0.9]],[0.202,[0,0.2,0.9]],[0.204,[0,0.204,0.898]],[0.205,[0,0.204,0.898]],[0.207,[0,0.208,0.896]],[0.209,[0,0.208,0.896]],[0.211,[0,0.212,0.894]],[0.213,[0,0.212,0.894]],[0.215,[0,0.216,0.892]],[0.217,[0,0.216,0.892]],[0.219,[0,0.22,0.89]],[0.221,[0,0.22,0.89]],[0.223,[0,0.224,0.888]],[0.225,[0,0.224,0.888]],[0.227,[0,0.227,0.886]],[0.229,[0,0.227,0.886]],[0.231,[0,0.231,0.884]],[0.233,[0,0.231,0.884]],[0.235,[0,0.235,0.882]],[0.237,[0,0.235,0.882]],[0.239,[0,0.239,0.88]],[0.241,[0,0.239,0.88]],[0.243,[0,0.243,0.878]],[0.245,[0,0.243,0.878]],[0.247,[0,0.247,0.876]],[0.249,[0,0.247,0.876]],[0.25,[0,0.251,0.875]],[0.252,[0,0.251,0.875]],[0.254,[0,0.255,0.873]],[0.256,[0,0.255,0.873]],[0.258,[0,0.259,0.871]],[0.26,[0,0.259,0.871]],[0.262,[0,0.263,0.869]],[0.264,[0,0.263,0.869]],[0.266,[0,0.267,0.867]],[0.268,[0,0.267,0.867]],[0.27,[0,0.271,0.865]],[0.272,[0,0.271,0.865]],[0.274,[0,0.275,0.863]],[0.276,[0,0.275,0.863]],[0.278,[0,0.278,0.861]],[0.28,[0,0.278,0.861]],[0.282,[0,0.282,0.859]],[0.028,[0,0.282,0.859]],[0.286,[0,0.286,0.857]],[0.288,[0,0.286,0.857]],[0.29,[0,0.29,0.855]],[0.292,[0,0.29,0.855]],[0.294,[0,0.294,0.853]],[0.295,[0,0.294,0.853]],[0.297,[0,0.298,0.851]],[0.299,[0,0.298,0.851]],[0.301,[0,0.302,0.849]],[0.303,[0,0.302,0.849]],[0.305,[0,0.306,0.847]],[0.307,[0,0.306,0.847]],[0.309,[0,0.31,0.845]],[0.311,[0,0.31,0.845]],[0.313,[0,0.314,0.843]],[0.315,[0,0.314,0.843]],[0.317,[0,0.318,0.841]],[0.319,[0,0.318,0.841]],[0.321,[0,0.322,0.839]],[0.323,[0,0.322,0.839]],[0.325,[0,0.325,0.837]],[0.327,[0,0.325,0.837]],[0.329,[0,0.329,0.835]],[0.331,[0,0.329,0.835]],[0.333,[0,0.333,0.833]],[0.335,[0,0.333,0.833]],[0.337,[0,0.337,0.831]],[0.339,[0,0.337,0.831]],[0.341,[0,0.341,0.829]],[0.342,[0,0.341,0.829]],[0.344,[0,0.345,0.827]],[0.346,[0,0.345,0.827]],[0.348,[0,0.349,0.825]],[0.35,[0,0.349,0.825]],[0.352,[0,0.353,0.824]],[0.354,[0,0.353,0.824]],[0.356,[0,0.357,0.822]],[0.358,[0,0.357,0.822]],[0.36,[0,0.361,0.82]],[0.362,[0,0.361,0.82]],[0.364,[0,0.365,0.818]],[0.366,[0,0.365,0.818]],[0.368,[0,0.369,0.816]],[0.37,[0,0.369,0.816]],[0.372,[0,0.373,0.814]],[0.374,[0,0.373,0.814]],[0.376,[0,0.376,0.812]],[0.378,[0,0.376,0.812]],[0.38,[0,0.38,0.81]],[0.382,[0,0.38,0.81]],[0.384,[0,0.384,0.808]],[0.386,[0,0.384,0.808]],[0.387,[0,0.388,0.806]],[0.389,[0,0.388,0.806]],[0.391,[0,0.392,0.804]],[0.393,[0,0.392,0.804]],[0.395,[0,0.396,0.802]],[0.397,[0,0.396,0.802]],[0.399,[0,0.4,0.8]],[0.401,[0,0.4,0.8]],[0.403,[0,0.404,0.798]],[0.405,[0,0.404,0.798]],[0.407,[0,0.408,0.796]],[0.409,[0,0.408,0.796]],[0.411,[0,0.412,0.794]],[0.413,[0,0.412,0.794]],[0.415,[0,0.416,0.792]],[0.417,[0,0.416,0.792]],[0.419,[0,0.42,0.79]],[0.421,[0,0.42,0.79]],[0.423,[0,0.424,0.788]],[0.425,[0,0.424,0.788]],[0.427,[0,0.427,0.786]],[0.429,[0,0.427,0.786]],[0.431,[0,0.431,0.784]],[0.432,[0,0.431,0.784]],[0.434,[0,0.435,0.782]],[0.436,[0,0.435,0.782]],[0.438,[0,0.439,0.78]],[0.44,[0,0.439,0.78]],[0.442,[0,0.443,0.778]],[0.444,[0,0.443,0.778]],[0.446,[0,0.447,0.776]],[0.448,[0,0.447,0.776]],[0.45,[0,0.451,0.775]],[0.452,[0,0.451,0.775]],[0.454,[0,0.455,0.773]],[0.456,[0,0.455,0.773]],[0.458,[0,0.459,0.771]],[0.46,[0,0.459,0.771]],[0.462,[0,0.463,0.769]],[0.464,[0,0.463,0.769]],[0.466,[0,0.467,0.767]],[0.468,[0,0.467,0.767]],[0.47,[0,0.471,0.765]],[0.472,[0,0.471,0.765]],[0.474,[0,0.475,0.763]],[0.476,[0,0.475,0.763]],[0.477,[0,0.478,0.761]],[0.479,[0,0.478,0.761]],[0.481,[0,0.482,0.759]],[0.483,[0,0.482,0.759]],[0.485,[0,0.486,0.757]],[0.487,[0,0.486,0.757]],[0.489,[0,0.49,0.755]],[0.491,[0,0.49,0.755]],[0.493,[0,0.494,0.753]],[0.495,[0,0.494,0.753]],[0.497,[0,0.498,0.751]],[0.499,[0,0.498,0.751]],[0.501,[0,0.502,0.749]],[0.503,[0,0.502,0.749]],[0.505,[0,0.506,0.747]],[0.507,[0,0.506,0.747]],[0.509,[0,0.51,0.745]],[0.511,[0,0.51,0.745]],[0.513,[0,0.514,0.743]],[0.515,[0,0.514,0.743]],[0.517,[0,0.518,0.741]],[0.519,[0,0.518,0.741]],[0.521,[0,0.522,0.739]],[0.523,[0,0.522,0.739]],[0.524,[0,0.525,0.737]],[0.526,[0,0.525,0.737]],[0.528,[0,0.529,0.735]],[0.53,[0,0.529,0.735]],[0.532,[0,0.533,0.733]],[0.534,[0,0.533,0.733]],[0.536,[0,0.537,0.731]],[0.538,[0,0.537,0.731]],[0.54,[0,0.541,0.729]],[0.542,[0,0.541,0.729]],[0.544,[0,0.545,0.727]],[0.546,[0,0.545,0.727]],[0.548,[0,0.549,0.725]],[0.55,[0,0.549,0.725]],[0.552,[0,0.553,0.724]],[0.554,[0,0.553,0.724]],[0.556,[0,0.557,0.722]],[0.558,[0,0.557,0.722]],[0.56,[0,0.561,0.72]],[0.562,[0,0.561,0.72]],[0.564,[0,0.565,0.718]],[0.566,[0,0.565,0.718]],[0.568,[0,0.569,0.716]],[0.569,[0,0.569,0.716]],[0.571,[0,0.573,0.714]],[0.573,[0,0.573,0.714]],[0.575,[0,0.576,0.712]],[0.577,[0,0.576,0.712]],[0.579,[0,0.58,0.71]],[0.581,[0,0.58,0.71]],[0.583,[0,0.584,0.708]],[0.585,[0,0.584,0.708]],[0.587,[0,0.588,0.706]],[0.589,[0,0.588,0.706]],[0.591,[0,0.592,0.704]],[0.593,[0,0.592,0.704]],[0.595,[0,0.596,0.702]],[0.597,[0,0.596,0.702]],[0.599,[0,0.6,0.7]],[0.601,[0,0.6,0.7]],[0.603,[0,0.604,0.698]],[0.605,[0,0.604,0.698]],[0.607,[0,0.608,0.696]],[0.609,[0,0.608,0.696]],[0.611,[0,0.612,0.694]],[0.613,[0,0.612,0.694]],[0.614,[0,0.616,0.692]],[0.616,[0,0.616,0.692]],[0.618,[0,0.62,0.69]],[0.62,[0,0.62,0.69]],[0.622,[0,0.624,0.688]],[0.624,[0,0.624,0.688]],[0.626,[0,0.627,0.686]],[0.628,[0,0.627,0.686]],[0.63,[0,0.631,0.684]],[0.632,[0,0.631,0.684]],[0.634,[0,0.635,0.682]],[0.636,[0,0.635,0.682]],[0.638,[0,0.639,0.68]],[0.64,[0,0.639,0.68]],[0.642,[0,0.643,0.678]],[0.644,[0,0.643,0.678]],[0.646,[0,0.647,0.676]],[0.648,[0,0.647,0.676]],[0.65,[0,0.651,0.675]],[0.652,[0,0.651,0.675]],[0.654,[0,0.655,0.673]],[0.656,[0,0.655,0.673]],[0.658,[0,0.659,0.671]],[0.659,[0,0.659,0.671]],[0.661,[0,0.663,0.669]],[0.663,[0,0.663,0.669]],[0.665,[0,0.667,0.667]],[0.667,[0,0.667,0.667]],[0.669,[0,0.671,0.665]],[0.671,[0,0.671,0.665]],[0.673,[0,0.675,0.663]],[0.675,[0,0.675,0.663]],[0.677,[0,0.678,0.661]],[0.679,[0,0.678,0.661]],[0.681,[0,0.682,0.659]],[0.683,[0,0.682,0.659]],[0.685,[0,0.686,0.657]],[0.687,[0,0.686,0.657]],[0.689,[0,0.69,0.655]],[0.691,[0,0.69,0.655]],[0.693,[0,0.694,0.653]],[0.695,[0,0.694,0.653]],[0.697,[0,0.698,0.651]],[0.699,[0,0.698,0.651]],[0.701,[0,0.702,0.649]],[0.703,[0,0.702,0.649]],[0.705,[0,0.706,0.647]],[0.706,[0,0.706,0.647]],[0.708,[0,0.71,0.645]],[0.71,[0,0.71,0.645]],[0.712,[0,0.714,0.643]],[0.714,[0,0.714,0.643]],[0.716,[0,0.718,0.641]],[0.718,[0,0.718,0.641]],[0.72,[0,0.722,0.639]],[0.722,[0,0.722,0.639]],[0.724,[0,0.725,0.637]],[0.726,[0,0.725,0.637]],[0.728,[0,0.729,0.635]],[0.73,[0,0.729,0.635]],[0.732,[0,0.733,0.633]],[0.734,[0,0.733,0.633]],[0.736,[0,0.737,0.631]],[0.738,[0,0.737,0.631]],[0.74,[0,0.741,0.629]],[0.742,[0,0.741,0.629]],[0.744,[0,0.745,0.627]],[0.746,[0,0.745,0.627]],[0.748,[0,0.749,0.625]],[0.75,[0,0.749,0.625]],[0.751,[0,0.753,0.624]],[0.753,[0,0.753,0.624]],[0.755,[0,0.757,0.622]],[0.757,[0,0.757,0.622]],[0.759,[0,0.761,0.62]],[0.761,[0,0.761,0.62]],[0.763,[0,0.765,0.618]],[0.765,[0,0.765,0.618]],[0.767,[0,0.769,0.616]],[0.769,[0,0.769,0.616]],[0.771,[0,0.773,0.614]],[0.773,[0,0.773,0.614]],[0.775,[0,0.776,0.612]],[0.777,[0,0.776,0.612]],[0.779,[0,0.78,0.61]],[0.781,[0,0.78,0.61]],[0.783,[0,0.784,0.608]],[0.785,[0,0.784,0.608]],[0.787,[0,0.788,0.606]],[0.789,[0,0.788,0.606]],[0.791,[0,0.792,0.604]],[0.793,[0,0.792,0.604]],[0.795,[0,0.796,0.602]],[0.796,[0,0.796,0.602]],[0.798,[0,0.8,0.6]],[0.8,[0,0.8,0.6]],[0.802,[0,0.804,0.598]],[0.804,[0,0.804,0.598]],[0.806,[0,0.808,0.596]],[0.808,[0,0.808,0.596]],[0.81,[0,0.812,0.594]],[0.812,[0,0.812,0.594]],[0.814,[0,0.816,0.592]],[0.816,[0,0.816,0.592]],[0.818,[0,0.82,0.59]],[0.82,[0,0.82,0.59]],[0.822,[0,0.824,0.588]],[0.824,[0,0.824,0.588]],[0.826,[0,0.827,0.586]],[0.828,[0,0.827,0.586]],[0.83,[0,0.831,0.584]],[0.832,[0,0.831,0.584]],[0.834,[0,0.835,0.582]],[0.836,[0,0.835,0.582]],[0.838,[0,0.839,0.58]],[0.84,[0,0.839,0.58]],[0.841,[0,0.843,0.578]],[0.843,[0,0.843,0.578]],[0.845,[0,0.847,0.576]],[0.847,[0,0.847,0.576]],[0.849,[0,0.851,0.575]],[0.851,[0,0.851,0.575]],[0.853,[0,0.855,0.573]],[0.855,[0,0.855,0.573]],[0.857,[0,0.859,0.571]],[0.859,[0,0.859,0.571]],[0.861,[0,0.863,0.569]],[0.863,[0,0.863,0.569]],[0.865,[0,0.867,0.567]],[0.867,[0,0.867,0.567]],[0.869,[0,0.871,0.565]],[0.871,[0,0.871,0.565]],[0.873,[0,0.875,0.563]],[0.875,[0,0.875,0.563]],[0.877,[0,0.878,0.561]],[0.879,[0,0.878,0.561]],[0.881,[0,0.882,0.559]],[0.883,[0,0.882,0.559]],[0.885,[0,0.886,0.557]],[0.886,[0,0.886,0.557]],[0.888,[0,0.89,0.555]],[0.89,[0,0.89,0.555]],[0.892,[0,0.894,0.553]],[0.894,[0,0.894,0.553]],[0.896,[0,0.898,0.551]],[0.898,[0,0.898,0.551]],[0.9,[0,0.902,0.549]],[0.902,[0,0.902,0.549]],[0.904,[0,0.906,0.547]],[0.906,[0,0.906,0.547]],[0.908,[0,0.91,0.545]],[0.91,[0,0.91,0.545]],[0.912,[0,0.914,0.543]],[0.914,[0,0.914,0.543]],[0.916,[0,0.918,0.541]],[0.918,[0,0.918,0.541]],[0.92,[0,0.922,0.539]],[0.922,[0,0.922,0.539]],[0.924,[0,0.925,0.537]],[0.926,[0,0.925,0.537]],[0.928,[0,0.929,0.535]],[0.93,[0,0.929,0.535]],[0.932,[0,0.933,0.533]],[0.933,[0,0.933,0.533]],[0.935,[0,0.937,0.531]],[0.937,[0,0.937,0.531]],[0.939,[0,0.941,0.529]],[0.941,[0,0.941,0.529]],[0.943,[0,0.945,0.527]],[0.945,[0,0.945,0.527]],[0.947,[0,0.949,0.525]],[0.949,[0,0.949,0.525]],[0.951,[0,0.953,0.524]],[0.953,[0,0.953,0.524]],[0.955,[0,0.957,0.522]],[0.957,[0,0.957,0.522]],[0.959,[0,0.961,0.52]],[0.961,[0,0.961,0.52]],[0.963,[0,0.965,0.518]],[0.965,[0,0.965,0.518]],[0.967,[0,0.969,0.516]],[0.969,[0,0.969,0.516]],[0.971,[0,0.973,0.514]],[0.973,[0,0.973,0.514]],[0.975,[0,0.976,0.512]],[0.977,[0,0.976,0.512]],[0.978,[0,0.98,0.51]],[0.98,[0,0.98,0.51]],[0.982,[0,0.984,0.508]],[0.984,[0,0.984,0.508]],[0.986,[0,0.988,0.506]],[0.988,[0,0.988,0.506]],[0.99,[0,0.992,0.504]],[0.992,[0,0.992,0.504]],[0.994,[0,0.996,0.502]],[0.996,[0,0.996,0.502]],[0.998,[0,1,0.5]],[1,[0,1,0.5]]],[[0,[0,0,0.5]],[0.002,[0,0,0.5]],[0.004,[0,0,0.518]],[0.006,[0,0,0.518]],[0.008,[0,0,0.536]],[0.01,[0,0,0.536]],[0.012,[0,0,0.553]],[0.014,[0,0,0.553]],[0.016,[0,0,0.571]],[0.018,[0,0,0.571]],[0.02,[0,0,0.589]],[0.022,[0,0,0.589]],[0.023,[0,0,0.607]],[0.025,[0,0,0.607]],[0.027,[0,0,0.625]],[0.029,[0,0,0.625]],[0.031,[0,0,0.643]],[0.033,[0,0,0.643]],[0.035,[0,0,0.66]],[0.037,[0,0,0.66]],[0.039,[0,0,0.678]],[0.041,[0,0,0.678]],[0.043,[0,0,0.696]],[0.045,[0,0,0.696]],[0.047,[0,0,0.714]],[0.049,[0,0,0.714]],[0.051,[0,0,0.732]],[0.053,[0,0,0.732]],[0.055,[0,0,0.75]],[0.057,[0,0,0.75]],[0.059,[0,0,0.767]],[0.061,[0,0,0.767]],[0.063,[0,0,0.785]],[0.065,[0,0,0.785]],[0.067,[0,0,0.803]],[0.068,[0,0,0.803]],[0.07,[0,0,0.821]],[0.072,[0,0,0.821]],[0.074,[0,0,0.839]],[0.076,[0,0,0.839]],[0.078,[0,0,0.857]],[0.08,[0,0,0.857]],[0.082,[0,0,0.874]],[0.084,[0,0,0.874]],[0.086,[0,0,0.892]],[0.088,[0,0,0.892]],[0.09,[0,0,0.91]],[0.092,[0,0,0.91]],[0.094,[0,0,0.928]],[0.096,[0,0,0.928]],[0.098,[0,0,0.946]],[0.1,[0,0,0.946]],[0.102,[0,0,0.963]],[0.104,[0,0,0.963]],[0.106,[0,0,0.981]],[0.108,[0,0,0.981]],[0.11,[0,0,0.999]],[0.112,[0,0,0.999]],[0.114,[0,0,1]],[0.115,[0,0,1]],[0.117,[0,0,1]],[0.119,[0,0,1]],[0.121,[0,0,1]],[0.123,[0,0,1]],[0.125,[0,0.002,1]],[0.127,[0,0.002,1]],[0.129,[0,0.018,1]],[0.131,[0,0.018,1]],[0.133,[0,0.033,1]],[0.135,[0,0.033,1]],[0.137,[0,0.049,1]],[0.139,[0,0.049,1]],[0.141,[0,0.065,1]],[0.143,[0,0.065,1]],[0.145,[0,0.08,1]],[0.147,[0,0.08,1]],[0.149,[0,0.096,1]],[0.151,[0,0.096,1]],[0.153,[0,0.112,1]],[0.155,[0,0.112,1]],[0.157,[0,0.127,1]],[0.159,[0,0.127,1]],[0.16,[0,0.143,1]],[0.162,[0,0.143,1]],[0.164,[0,0.159,1]],[0.166,[0,0.159,1]],[0.168,[0,0.175,1]],[0.17,[0,0.175,1]],[0.172,[0,0.19,1]],[0.174,[0,0.19,1]],[0.176,[0,0.206,1]],[0.178,[0,0.206,1]],[0.18,[0,0.222,1]],[0.182,[0,0.222,1]],[0.184,[0,0.237,1]],[0.186,[0,0.237,1]],[0.188,[0,0.253,1]],[0.19,[0,0.253,1]],[0.192,[0,0.269,1]],[0.194,[0,0.269,1]],[0.196,[0,0.028,1]],[0.198,[0,0.028,1]],[0.2,[0,0.3,1]],[0.202,[0,0.3,1]],[0.204,[0,0.316,1]],[0.205,[0,0.316,1]],[0.207,[0,0.331,1]],[0.209,[0,0.331,1]],[0.211,[0,0.347,1]],[0.213,[0,0.347,1]],[0.215,[0,0.363,1]],[0.217,[0,0.363,1]],[0.219,[0,0.378,1]],[0.221,[0,0.378,1]],[0.223,[0,0.394,1]],[0.225,[0,0.394,1]],[0.227,[0,0.41,1]],[0.229,[0,0.41,1]],[0.231,[0,0.425,1]],[0.233,[0,0.425,1]],[0.235,[0,0.441,1]],[0.237,[0,0.441,1]],[0.239,[0,0.457,1]],[0.241,[0,0.457,1]],[0.243,[0,0.473,1]],[0.245,[0,0.473,1]],[0.247,[0,0.488,1]],[0.249,[0,0.488,1]],[0.25,[0,0.504,1]],[0.252,[0,0.504,1]],[0.254,[0,0.52,1]],[0.256,[0,0.52,1]],[0.258,[0,0.535,1]],[0.26,[0,0.535,1]],[0.262,[0,0.551,1]],[0.264,[0,0.551,1]],[0.266,[0,0.567,1]],[0.268,[0,0.567,1]],[0.27,[0,0.582,1]],[0.272,[0,0.582,1]],[0.274,[0,0.598,1]],[0.276,[0,0.598,1]],[0.278,[0,0.614,1]],[0.28,[0,0.614,1]],[0.282,[0,0.629,1]],[0.028,[0,0.629,1]],[0.286,[0,0.645,1]],[0.288,[0,0.645,1]],[0.29,[0,0.661,1]],[0.292,[0,0.661,1]],[0.294,[0,0.676,1]],[0.295,[0,0.676,1]],[0.297,[0,0.692,1]],[0.299,[0,0.692,1]],[0.301,[0,0.708,1]],[0.303,[0,0.708,1]],[0.305,[0,0.724,1]],[0.307,[0,0.724,1]],[0.309,[0,0.739,1]],[0.311,[0,0.739,1]],[0.313,[0,0.755,1]],[0.315,[0,0.755,1]],[0.317,[0,0.771,1]],[0.319,[0,0.771,1]],[0.321,[0,0.786,1]],[0.323,[0,0.786,1]],[0.325,[0,0.802,1]],[0.327,[0,0.802,1]],[0.329,[0,0.818,1]],[0.331,[0,0.818,1]],[0.333,[0,0.833,1]],[0.335,[0,0.833,1]],[0.337,[0,0.849,1]],[0.339,[0,0.849,1]],[0.341,[0,0.865,0.996]],[0.342,[0,0.865,0.996]],[0.344,[0,0.88,0.984]],[0.346,[0,0.88,0.984]],[0.348,[0,0.896,0.971]],[0.35,[0,0.896,0.971]],[0.352,[0.009,0.912,0.958]],[0.354,[0.009,0.912,0.958]],[0.356,[0.022,0.927,0.946]],[0.358,[0.022,0.927,0.946]],[0.36,[0.035,0.943,0.933]],[0.362,[0.035,0.943,0.933]],[0.364,[0.047,0.959,0.92]],[0.366,[0.047,0.959,0.92]],[0.368,[0.06,0.975,0.908]],[0.37,[0.06,0.975,0.908]],[0.372,[0.073,0.99,0.895]],[0.374,[0.073,0.99,0.895]],[0.376,[0.085,1,0.882]],[0.378,[0.085,1,0.882]],[0.38,[0.098,1,0.87]],[0.382,[0.098,1,0.87]],[0.384,[0.111,1,0.857]],[0.386,[0.111,1,0.857]],[0.387,[0.123,1,0.844]],[0.389,[0.123,1,0.844]],[0.391,[0.136,1,0.832]],[0.393,[0.136,1,0.832]],[0.395,[0.149,1,0.819]],[0.397,[0.149,1,0.819]],[0.399,[0.161,1,0.806]],[0.401,[0.161,1,0.806]],[0.403,[0.174,1,0.794]],[0.405,[0.174,1,0.794]],[0.407,[0.187,1,0.781]],[0.409,[0.187,1,0.781]],[0.411,[0.199,1,0.769]],[0.413,[0.199,1,0.769]],[0.415,[0.212,1,0.756]],[0.417,[0.212,1,0.756]],[0.419,[0.225,1,0.743]],[0.421,[0.225,1,0.743]],[0.423,[0.237,1,0.731]],[0.425,[0.237,1,0.731]],[0.427,[0.25,1,0.718]],[0.429,[0.25,1,0.718]],[0.431,[0.262,1,0.705]],[0.432,[0.262,1,0.705]],[0.434,[0.275,1,0.693]],[0.436,[0.275,1,0.693]],[0.438,[0.288,1,0.68]],[0.44,[0.288,1,0.68]],[0.442,[0.3,1,0.667]],[0.444,[0.3,1,0.667]],[0.446,[0.313,1,0.655]],[0.448,[0.313,1,0.655]],[0.45,[0.326,1,0.642]],[0.452,[0.326,1,0.642]],[0.454,[0.338,1,0.629]],[0.456,[0.338,1,0.629]],[0.458,[0.351,1,0.617]],[0.46,[0.351,1,0.617]],[0.462,[0.364,1,0.604]],[0.464,[0.364,1,0.604]],[0.466,[0.376,1,0.591]],[0.468,[0.376,1,0.591]],[0.47,[0.389,1,0.579]],[0.472,[0.389,1,0.579]],[0.474,[0.402,1,0.566]],[0.476,[0.402,1,0.566]],[0.477,[0.414,1,0.553]],[0.479,[0.414,1,0.553]],[0.481,[0.427,1,0.541]],[0.483,[0.427,1,0.541]],[0.485,[0.44,1,0.528]],[0.487,[0.44,1,0.528]],[0.489,[0.452,1,0.515]],[0.491,[0.452,1,0.515]],[0.493,[0.465,1,0.503]],[0.495,[0.465,1,0.503]],[0.497,[0.478,1,0.49]],[0.499,[0.478,1,0.49]],[0.501,[0.49,1,0.478]],[0.503,[0.49,1,0.478]],[0.505,[0.503,1,0.465]],[0.507,[0.503,1,0.465]],[0.509,[0.515,1,0.452]],[0.511,[0.515,1,0.452]],[0.513,[0.528,1,0.44]],[0.515,[0.528,1,0.44]],[0.517,[0.541,1,0.427]],[0.519,[0.541,1,0.427]],[0.521,[0.553,1,0.414]],[0.523,[0.553,1,0.414]],[0.524,[0.566,1,0.402]],[0.526,[0.566,1,0.402]],[0.528,[0.579,1,0.389]],[0.53,[0.579,1,0.389]],[0.532,[0.591,1,0.376]],[0.534,[0.591,1,0.376]],[0.536,[0.604,1,0.364]],[0.538,[0.604,1,0.364]],[0.54,[0.617,1,0.351]],[0.542,[0.617,1,0.351]],[0.544,[0.629,1,0.338]],[0.546,[0.629,1,0.338]],[0.548,[0.642,1,0.326]],[0.55,[0.642,1,0.326]],[0.552,[0.655,1,0.313]],[0.554,[0.655,1,0.313]],[0.556,[0.667,1,0.3]],[0.558,[0.667,1,0.3]],[0.56,[0.68,1,0.288]],[0.562,[0.68,1,0.288]],[0.564,[0.693,1,0.275]],[0.566,[0.693,1,0.275]],[0.568,[0.705,1,0.262]],[0.569,[0.705,1,0.262]],[0.571,[0.718,1,0.25]],[0.573,[0.718,1,0.25]],[0.575,[0.731,1,0.237]],[0.577,[0.731,1,0.237]],[0.579,[0.743,1,0.225]],[0.581,[0.743,1,0.225]],[0.583,[0.756,1,0.212]],[0.585,[0.756,1,0.212]],[0.587,[0.769,1,0.199]],[0.589,[0.769,1,0.199]],[0.591,[0.781,1,0.187]],[0.593,[0.781,1,0.187]],[0.595,[0.794,1,0.174]],[0.597,[0.794,1,0.174]],[0.599,[0.806,1,0.161]],[0.601,[0.806,1,0.161]],[0.603,[0.819,1,0.149]],[0.605,[0.819,1,0.149]],[0.607,[0.832,1,0.136]],[0.609,[0.832,1,0.136]],[0.611,[0.844,1,0.123]],[0.613,[0.844,1,0.123]],[0.614,[0.857,1,0.111]],[0.616,[0.857,1,0.111]],[0.618,[0.87,1,0.098]],[0.62,[0.87,1,0.098]],[0.622,[0.882,1,0.085]],[0.624,[0.882,1,0.085]],[0.626,[0.895,1,0.073]],[0.628,[0.895,1,0.073]],[0.63,[0.908,1,0.06]],[0.632,[0.908,1,0.06]],[0.634,[0.92,1,0.047]],[0.636,[0.92,1,0.047]],[0.638,[0.933,1,0.035]],[0.64,[0.933,1,0.035]],[0.642,[0.946,0.988,0.022]],[0.644,[0.946,0.988,0.022]],[0.646,[0.958,0.974,0.009]],[0.648,[0.958,0.974,0.009]],[0.65,[0.971,0.959,0]],[0.652,[0.971,0.959,0]],[0.654,[0.984,0.945,0]],[0.656,[0.984,0.945,0]],[0.658,[0.996,0.93,0]],[0.659,[0.996,0.93,0]],[0.661,[1,0.916,0]],[0.663,[1,0.916,0]],[0.665,[1,0.901,0]],[0.667,[1,0.901,0]],[0.669,[1,0.887,0]],[0.671,[1,0.887,0]],[0.673,[1,0.872,0]],[0.675,[1,0.872,0]],[0.677,[1,0.858,0]],[0.679,[1,0.858,0]],[0.681,[1,0.843,0]],[0.683,[1,0.843,0]],[0.685,[1,0.829,0]],[0.687,[1,0.829,0]],[0.689,[1,0.814,0]],[0.691,[1,0.814,0]],[0.693,[1,0.8,0]],[0.695,[1,0.8,0]],[0.697,[1,0.785,0]],[0.699,[1,0.785,0]],[0.701,[1,0.771,0]],[0.703,[1,0.771,0]],[0.705,[1,0.756,0]],[0.706,[1,0.756,0]],[0.708,[1,0.741,0]],[0.71,[1,0.741,0]],[0.712,[1,0.727,0]],[0.714,[1,0.727,0]],[0.716,[1,0.712,0]],[0.718,[1,0.712,0]],[0.72,[1,0.698,0]],[0.722,[1,0.698,0]],[0.724,[1,0.683,0]],[0.726,[1,0.683,0]],[0.728,[1,0.669,0]],[0.73,[1,0.669,0]],[0.732,[1,0.654,0]],[0.734,[1,0.654,0]],[0.736,[1,0.64,0]],[0.738,[1,0.64,0]],[0.74,[1,0.625,0]],[0.742,[1,0.625,0]],[0.744,[1,0.611,0]],[0.746,[1,0.611,0]],[0.748,[1,0.596,0]],[0.75,[1,0.596,0]],[0.751,[1,0.582,0]],[0.753,[1,0.582,0]],[0.755,[1,0.567,0]],[0.757,[1,0.567,0]],[0.759,[1,0.553,0]],[0.761,[1,0.553,0]],[0.763,[1,0.538,0]],[0.765,[1,0.538,0]],[0.767,[1,0.524,0]],[0.769,[1,0.524,0]],[0.771,[1,0.509,0]],[0.773,[1,0.509,0]],[0.775,[1,0.495,0]],[0.777,[1,0.495,0]],[0.779,[1,0.48,0]],[0.781,[1,0.48,0]],[0.783,[1,0.466,0]],[0.785,[1,0.466,0]],[0.787,[1,0.451,0]],[0.789,[1,0.451,0]],[0.791,[1,0.436,0]],[0.793,[1,0.436,0]],[0.795,[1,0.422,0]],[0.796,[1,0.422,0]],[0.798,[1,0.407,0]],[0.8,[1,0.407,0]],[0.802,[1,0.393,0]],[0.804,[1,0.393,0]],[0.806,[1,0.378,0]],[0.808,[1,0.378,0]],[0.81,[1,0.364,0]],[0.812,[1,0.364,0]],[0.814,[1,0.349,0]],[0.816,[1,0.349,0]],[0.818,[1,0.335,0]],[0.82,[1,0.335,0]],[0.822,[1,0.32,0]],[0.824,[1,0.32,0]],[0.826,[1,0.306,0]],[0.828,[1,0.306,0]],[0.83,[1,0.291,0]],[0.832,[1,0.291,0]],[0.834,[1,0.277,0]],[0.836,[1,0.277,0]],[0.838,[1,0.262,0]],[0.84,[1,0.262,0]],[0.841,[1,0.248,0]],[0.843,[1,0.248,0]],[0.845,[1,0.233,0]],[0.847,[1,0.233,0]],[0.849,[1,0.219,0]],[0.851,[1,0.219,0]],[0.853,[1,0.204,0]],[0.855,[1,0.204,0]],[0.857,[1,0.19,0]],[0.859,[1,0.19,0]],[0.861,[1,0.175,0]],[0.863,[1,0.175,0]],[0.865,[1,0.16,0]],[0.867,[1,0.16,0]],[0.869,[1,0.146,0]],[0.871,[1,0.146,0]],[0.873,[1,0.131,0]],[0.875,[1,0.131,0]],[0.877,[1,0.117,0]],[0.879,[1,0.117,0]],[0.881,[1,0.102,0]],[0.883,[1,0.102,0]],[0.885,[1,0.088,0]],[0.886,[1,0.088,0]],[0.888,[0.999,0.073,0]],[0.89,[0.999,0.073,0]],[0.892,[0.981,0.059,0]],[0.894,[0.981,0.059,0]],[0.896,[0.963,0.044,0]],[0.898,[0.963,0.044,0]],[0.9,[0.946,0.03,0]],[0.902,[0.946,0.03,0]],[0.904,[0.928,0.015,0]],[0.906,[0.928,0.015,0]],[0.908,[0.91,0.001,0]],[0.91,[0.91,0.001,0]],[0.912,[0.892,0,0]],[0.914,[0.892,0,0]],[0.916,[0.874,0,0]],[0.918,[0.874,0,0]],[0.92,[0.857,0,0]],[0.922,[0.857,0,0]],[0.924,[0.839,0,0]],[0.926,[0.839,0,0]],[0.928,[0.821,0,0]],[0.93,[0.821,0,0]],[0.932,[0.803,0,0]],[0.933,[0.803,0,0]],[0.935,[0.785,0,0]],[0.937,[0.785,0,0]],[0.939,[0.767,0,0]],[0.941,[0.767,0,0]],[0.943,[0.75,0,0]],[0.945,[0.75,0,0]],[0.947,[0.732,0,0]],[0.949,[0.732,0,0]],[0.951,[0.714,0,0]],[0.953,[0.714,0,0]],[0.955,[0.696,0,0]],[0.957,[0.696,0,0]],[0.959,[0.678,0,0]],[0.961,[0.678,0,0]],[0.963,[0.66,0,0]],[0.965,[0.66,0,0]],[0.967,[0.643,0,0]],[0.969,[0.643,0,0]],[0.971,[0.625,0,0]],[0.973,[0.625,0,0]],[0.975,[0.607,0,0]],[0.977,[0.607,0,0]],[0.978,[0.589,0,0]],[0.98,[0.589,0,0]],[0.982,[0.571,0,0]],[0.984,[0.571,0,0]],[0.986,[0.553,0,0]],[0.988,[0.553,0,0]],[0.99,[0.536,0,0]],[0.992,[0.536,0,0]],[0.994,[0.518,0,0]],[0.996,[0.518,0,0]],[0.998,[0.5,0,0]],[1,[0.5,0,0]]]],"maxStress":178.10598907470705,"minStress":-347.64988403320314},"edges":[{"source":0,"area":1,"density":0.028,"id":"e0","stiffness":1000000,"target":1,"stress":0.0},{"source":1,"area":1,"density":0.028,"id":"e1","stiffness":1000000,"target":2,"stress":0.0},{"source":2,"area":1,"density":0.028,"id":"e2","stiffness":1000000,"target":3,"stress":0.0},{"source":3,"area":1,"density":0.028,"id":"e3","stiffness":1000000,"target":0,"stress":0.0},{"source":4,"area":1,"density":0.028,"id":"e4","stiffness":1000000,"target":5,"stress":3.2599264486366094e-5},{"source":5,"area":1,"density":0.028,"id":"e5","stiffness":1000000,"target":0,"stress":-1.303679170294312e-5},{"source":0,"area":1,"density":0.028,"id":"e6","stiffness":1000000,"target":6,"stress":1.00310067000389e-6},{"source":6,"area":1,"density":0.028,"id":"e7","stiffness":1000000,"target":4,"stress":-0.00028226230409700374},{"source":7,"area":1,"density":0.028,"id":"e8","stiffness":1000000,"target":8,"stress":-0.0004395000298199689},{"source":8,"area":1,"density":0.028,"id":"e9","stiffness":1000000,"target":4,"stress":-0.00019573815131344505},{"source":4,"area":1,"density":0.028,"id":"e10","stiffness":1000000,"target":9,"stress":-0.00018969982693214064},{"source":9,"area":1,"density":0.028,"id":"e11","stiffness":1000000,"target":7,"stress":-0.00019573840252823846},{"source":2,"area":1,"density":0.028,"id":"e12","stiffness":1000000,"target":10,"stress":-7.657780546889203e-6},{"source":10,"area":1,"density":0.028,"id":"e13","stiffness":1000000,"target":7,"stress":1.5467294828985605e-6},{"source":7,"area":1,"density":0.028,"id":"e14","stiffness":1000000,"target":11,"stress":-0.0002008625562763988},{"source":11,"area":1,"density":0.028,"id":"e15","stiffness":1000000,"target":2,"stress":-8.60285059962014e-7},{"source":8,"area":1,"density":0.028,"id":"e16","stiffness":1000000,"target":10,"stress":1.5467294828985605e-6},{"source":10,"area":1,"density":0.028,"id":"e17","stiffness":1000000,"target":1,"stress":-7.657529332095813e-6},{"source":1,"area":1,"density":0.028,"id":"e18","stiffness":1000000,"target":5,"stress":-8.601594525653192e-7},{"source":5,"area":1,"density":0.028,"id":"e19","stiffness":1000000,"target":8,"stress":-0.0002008623050616054},{"source":6,"area":1,"density":0.028,"id":"e20","stiffness":1000000,"target":3,"stress":1.0032262774005849e-6},{"source":3,"area":1,"density":0.028,"id":"e21","stiffness":1000000,"target":11,"stress":-1.303654048814973e-5},{"source":11,"area":1,"density":0.028,"id":"e22","stiffness":1000000,"target":9,"stress":3.25991388789694e-5},{"source":9,"area":1,"density":0.028,"id":"e23","stiffness":1000000,"target":6,"stress":-0.0002822618016674169},{"source":12,"area":1,"density":0.028,"id":"e24","stiffness":1000000,"target":3,"stress":0.0},{"source":3,"area":1,"density":0.028,"id":"e25","stiffness":1000000,"target":13,"stress":0.0},{"source":13,"area":1,"density":0.028,"id":"e26","stiffness":1000000,"target":14,"stress":0.0},{"source":14,"area":1,"density":0.028,"id":"e27","stiffness":1000000,"target":12,"stress":0.0},{"source":15,"area":1,"density":0.028,"id":"e28","stiffness":1000000,"target":6,"stress":-0.00021207377007578112},{"source":6,"area":1,"density":0.028,"id":"e29","stiffness":1000000,"target":12,"stress":-5.3232414719214705e-6},{"source":12,"area":1,"density":0.028,"id":"e30","stiffness":1000000,"target":16,"stress":-5.3232414719214705e-6},{"source":16,"area":1,"density":0.028,"id":"e31","stiffness":1000000,"target":15,"stress":-0.00021207402129057453},{"source":17,"area":1,"density":0.028,"id":"e32","stiffness":1000000,"target":9,"stress":-0.0003065115656732961},{"source":9,"area":1,"density":0.028,"id":"e33","stiffness":1000000,"target":15,"stress":-0.00016559802843956785},{"source":15,"area":1,"density":0.028,"id":"e34","stiffness":1000000,"target":18,"stress":-0.00016559827965436123},{"source":18,"area":1,"density":0.028,"id":"e35","stiffness":1000000,"target":17,"stress":-0.0003065119424954862},{"source":13,"area":1,"density":0.028,"id":"e36","stiffness":1000000,"target":11,"stress":-4.173808184768253e-6},{"source":11,"area":1,"density":0.028,"id":"e37","stiffness":1000000,"target":17,"stress":-0.00012958462930364305},{"source":17,"area":1,"density":0.028,"id":"e38","stiffness":1000000,"target":19,"stress":-0.00012958462930364305},{"source":19,"area":1,"density":0.028,"id":"e39","stiffness":1000000,"target":13,"stress":-4.173682577371558e-6},{"source":16,"area":1,"density":0.028,"id":"e40","stiffness":1000000,"target":14,"stress":1.00310067000389e-6},{"source":14,"area":1,"density":0.028,"id":"e41","stiffness":1000000,"target":19,"stress":-1.303654048814973e-5},{"source":19,"area":1,"density":0.028,"id":"e42","stiffness":1000000,"target":18,"stress":3.25991388789694e-5},{"source":18,"area":1,"density":0.028,"id":"e43","stiffness":1000000,"target":16,"stress":-0.00028226192727481364},{"source":20,"area":1,"density":0.028,"id":"e44","stiffness":1000000,"target":14,"stress":0.0},{"source":14,"area":1,"density":0.028,"id":"e45","stiffness":1000000,"target":21,"stress":0.0},{"source":21,"area":1,"density":0.028,"id":"e46","stiffness":1000000,"target":22,"stress":0.0},{"source":22,"area":1,"density":0.028,"id":"e47","stiffness":1000000,"target":20,"stress":0.0},{"source":23,"area":1,"density":0.028,"id":"e48","stiffness":1000000,"target":16,"stress":-0.00028226167606002026},{"source":16,"area":1,"density":0.028,"id":"e49","stiffness":1000000,"target":20,"stress":1.0032262774005849e-6},{"source":20,"area":1,"density":0.028,"id":"e50","stiffness":1000000,"target":24,"stress":-1.303704291773651e-5},{"source":24,"area":1,"density":0.028,"id":"e51","stiffness":1000000,"target":23,"stress":3.259838523458923e-5},{"source":25,"area":1,"density":0.028,"id":"e52","stiffness":1000000,"target":18,"stress":-0.00019573777449125498},{"source":18,"area":1,"density":0.028,"id":"e53","stiffness":1000000,"target":23,"stress":-0.00018969932450255386},{"source":23,"area":1,"density":0.028,"id":"e54","stiffness":1000000,"target":26,"stress":-0.0001957386537430318},{"source":26,"area":1,"density":0.028,"id":"e55","stiffness":1000000,"target":25,"stress":-0.0004395005322495557},{"source":21,"area":1,"density":0.028,"id":"e56","stiffness":1000000,"target":19,"stress":-8.604106673587087e-7},{"source":19,"area":1,"density":0.028,"id":"e57","stiffness":1000000,"target":25,"stress":-0.0002008621794542087},{"source":25,"area":1,"density":0.028,"id":"e58","stiffness":1000000,"target":27,"stress":1.5462270533117817e-6},{"source":27,"area":1,"density":0.028,"id":"e59","stiffness":1000000,"target":21,"stress":-7.658031761682592e-6},{"source":24,"area":1,"density":0.028,"id":"e60","stiffness":1000000,"target":22,"stress":-8.601594525653192e-7},{"source":22,"area":1,"density":0.028,"id":"e61","stiffness":1000000,"target":27,"stress":-7.657529332095813e-6},{"source":27,"area":1,"density":0.028,"id":"e62","stiffness":1000000,"target":26,"stress":1.546855090295255e-6},{"source":26,"area":1,"density":0.028,"id":"e63","stiffness":1000000,"target":24,"stress":-0.0002008623050616054},{"source":28,"area":1,"density":0.028,"id":"e64","stiffness":1000000,"target":29,"stress":-0.11213785183764498},{"source":29,"area":1,"density":0.028,"id":"e65","stiffness":1000000,"target":4,"stress":-0.017016456071084176},{"source":4,"area":1,"density":0.028,"id":"e66","stiffness":1000000,"target":30,"stress":-0.009829780133526882},{"source":30,"area":1,"density":0.028,"id":"e67","stiffness":1000000,"target":28,"stress":-0.18349613589122138},{"source":31,"area":1,"density":0.028,"id":"e68","stiffness":1000000,"target":32,"stress":-0.0765012550458356},{"source":32,"area":1,"density":0.028,"id":"e69","stiffness":1000000,"target":28,"stress":-0.08632485805880784},{"source":28,"area":1,"density":0.028,"id":"e70","stiffness":1000000,"target":33,"stress":-0.08283171459822462},{"source":33,"area":1,"density":0.028,"id":"e71","stiffness":1000000,"target":31,"stress":-0.08632485818441524},{"source":7,"area":1,"density":0.028,"id":"e72","stiffness":1000000,"target":34,"stress":-0.011617832701717741},{"source":34,"area":1,"density":0.028,"id":"e73","stiffness":1000000,"target":31,"stress":-0.06220368424847268},{"source":31,"area":1,"density":0.028,"id":"e74","stiffness":1000000,"target":35,"stress":-0.1453469309400165},{"source":35,"area":1,"density":0.028,"id":"e75","stiffness":1000000,"target":7,"stress":-0.006038546957611352},{"source":32,"area":1,"density":0.028,"id":"e76","stiffness":1000000,"target":34,"stress":-0.06220368424847268},{"source":34,"area":1,"density":0.028,"id":"e77","stiffness":1000000,"target":8,"stress":-0.011617832827325139},{"source":8,"area":1,"density":0.028,"id":"e78","stiffness":1000000,"target":29,"stress":-0.006038546706396558},{"source":29,"area":1,"density":0.028,"id":"e79","stiffness":1000000,"target":32,"stress":-0.1453469306888017},{"source":30,"area":1,"density":0.028,"id":"e80","stiffness":1000000,"target":9,"stress":-0.009829779756704692},{"source":9,"area":1,"density":0.028,"id":"e81","stiffness":1000000,"target":35,"stress":-0.01701645594547678},{"source":35,"area":1,"density":0.028,"id":"e82","stiffness":1000000,"target":33,"stress":-0.11213785183764498},{"source":33,"area":1,"density":0.028,"id":"e83","stiffness":1000000,"target":30,"stress":-0.1834961355143992},{"source":36,"area":1,"density":0.028,"id":"e84","stiffness":1000000,"target":30,"stress":-0.18361865397399438},{"source":30,"area":1,"density":0.028,"id":"e85","stiffness":1000000,"target":15,"stress":-0.012763147699155531},{"source":15,"area":1,"density":0.028,"id":"e86","stiffness":1000000,"target":37,"stress":-0.012763147824762927},{"source":37,"area":1,"density":0.028,"id":"e87","stiffness":1000000,"target":36,"stress":-0.18361865422520915},{"source":38,"area":1,"density":0.028,"id":"e88","stiffness":1000000,"target":33,"stress":-0.038860065065518354},{"source":33,"area":1,"density":0.028,"id":"e89","stiffness":1000000,"target":36,"stress":-0.04306632103225256},{"source":36,"area":1,"density":0.028,"id":"e90","stiffness":1000000,"target":39,"stress":-0.04306632103225256},{"source":39,"area":1,"density":0.028,"id":"e91","stiffness":1000000,"target":38,"stress":-0.038860064939910954},{"source":17,"area":1,"density":0.028,"id":"e92","stiffness":1000000,"target":35,"stress":-0.009320440381426312},{"source":35,"area":1,"density":0.028,"id":"e93","stiffness":1000000,"target":38,"stress":-0.14705780215919734},{"source":38,"area":1,"density":0.028,"id":"e94","stiffness":1000000,"target":40,"stress":-0.1470578024104121},{"source":40,"area":1,"density":0.028,"id":"e95","stiffness":1000000,"target":17,"stress":-0.009320440381426312},{"source":37,"area":1,"density":0.028,"id":"e96","stiffness":1000000,"target":18,"stress":-0.009829779756704692},{"source":18,"area":1,"density":0.028,"id":"e97","stiffness":1000000,"target":40,"stress":-0.01701645594547678},{"source":40,"area":1,"density":0.028,"id":"e98","stiffness":1000000,"target":39,"stress":-0.11213785183764498},{"source":39,"area":1,"density":0.028,"id":"e99","stiffness":1000000,"target":37,"stress":-0.1834961355143992},{"source":41,"area":1,"density":0.028,"id":"e100","stiffness":1000000,"target":37,"stress":-0.18349613538879178},{"source":37,"area":1,"density":0.028,"id":"e101","stiffness":1000000,"target":23,"stress":-0.009829779505489898},{"source":23,"area":1,"density":0.028,"id":"e102","stiffness":1000000,"target":42,"stress":-0.017016456322298965},{"source":42,"area":1,"density":0.028,"id":"e103","stiffness":1000000,"target":41,"stress":-0.11213785221446715},{"source":43,"area":1,"density":0.028,"id":"e104","stiffness":1000000,"target":39,"stress":-0.08632485780759304},{"source":39,"area":1,"density":0.028,"id":"e105","stiffness":1000000,"target":41,"stress":-0.08283171447261724},{"source":41,"area":1,"density":0.028,"id":"e106","stiffness":1000000,"target":44,"stress":-0.08632485831002264},{"source":44,"area":1,"density":0.028,"id":"e107","stiffness":1000000,"target":43,"stress":-0.0765012554226578},{"source":25,"area":1,"density":0.028,"id":"e108","stiffness":1000000,"target":40,"stress":-0.006038546455181765},{"source":40,"area":1,"density":0.028,"id":"e109","stiffness":1000000,"target":43,"stress":-0.14534693056319428},{"source":43,"area":1,"density":0.028,"id":"e110","stiffness":1000000,"target":45,"stress":-0.062203684499687474},{"source":45,"area":1,"density":0.028,"id":"e111","stiffness":1000000,"target":25,"stress":-0.011617832827325139},{"source":42,"area":1,"density":0.028,"id":"e112","stiffness":1000000,"target":26,"stress":-0.006038546706396558},{"source":26,"area":1,"density":0.028,"id":"e113","stiffness":1000000,"target":45,"stress":-0.011617832576110345},{"source":45,"area":1,"density":0.028,"id":"e114","stiffness":1000000,"target":44,"stress":-0.06220368424847268},{"source":44,"area":1,"density":0.028,"id":"e115","stiffness":1000000,"target":42,"stress":-0.1453469304375869},{"source":46,"area":1,"density":0.028,"id":"e116","stiffness":1000000,"target":47,"stress":-6.284610206173206},{"source":47,"area":1,"density":0.028,"id":"e117","stiffness":1000000,"target":28,"stress":-2.2982880695949897},{"source":28,"area":1,"density":0.028,"id":"e118","stiffness":1000000,"target":48,"stress":-2.3104177590954307},{"source":48,"area":1,"density":0.028,"id":"e119","stiffness":1000000,"target":46,"stress":-5.284067615336782},{"source":49,"area":1,"density":0.028,"id":"e120","stiffness":1000000,"target":50,"stress":-0.17117806142207717},{"source":50,"area":1,"density":0.028,"id":"e121","stiffness":1000000,"target":46,"stress":-0.08750808174539028},{"source":46,"area":1,"density":0.028,"id":"e122","stiffness":1000000,"target":51,"stress":-0.010449475278571103},{"source":51,"area":1,"density":0.028,"id":"e123","stiffness":1000000,"target":49,"stress":-0.08750808224781986},{"source":31,"area":1,"density":0.028,"id":"e124","stiffness":1000000,"target":52,"stress":-1.865627913941519},{"source":52,"area":1,"density":0.028,"id":"e125","stiffness":1000000,"target":49,"stress":-6.876095359960009},{"source":49,"area":1,"density":0.028,"id":"e126","stiffness":1000000,"target":53,"stress":-5.710318826409683},{"source":53,"area":1,"density":0.028,"id":"e127","stiffness":1000000,"target":31,"stress":-1.890283150431024},{"source":50,"area":1,"density":0.028,"id":"e128","stiffness":1000000,"target":52,"stress":-6.876095359960009},{"source":52,"area":1,"density":0.028,"id":"e129","stiffness":1000000,"target":32,"stress":-1.865627913941519},{"source":32,"area":1,"density":0.028,"id":"e130","stiffness":1000000,"target":47,"stress":-1.8902831501798092},{"source":47,"area":1,"density":0.028,"id":"e131","stiffness":1000000,"target":50,"stress":-5.710318826032861},{"source":48,"area":1,"density":0.028,"id":"e132","stiffness":1000000,"target":33,"stress":-2.3104177587186085},{"source":33,"area":1,"density":0.028,"id":"e133","stiffness":1000000,"target":53,"stress":-2.2982880695949897},{"source":53,"area":1,"density":0.028,"id":"e134","stiffness":1000000,"target":51,"stress":-6.284610205921991},{"source":51,"area":1,"density":0.028,"id":"e135","stiffness":1000000,"target":48,"stress":-5.284067614959959},{"source":54,"area":1,"density":0.028,"id":"e136","stiffness":1000000,"target":48,"stress":-5.282841449370239},{"source":48,"area":1,"density":0.028,"id":"e137","stiffness":1000000,"target":36,"stress":-2.2278348034147752},{"source":36,"area":1,"density":0.028,"id":"e138","stiffness":1000000,"target":55,"stress":-2.2278348034147752},{"source":55,"area":1,"density":0.028,"id":"e139","stiffness":1000000,"target":54,"stress":-5.282841449370239},{"source":56,"area":1,"density":0.028,"id":"e140","stiffness":1000000,"target":51,"stress":-0.07929461194019798},{"source":51,"area":1,"density":0.028,"id":"e141","stiffness":1000000,"target":54,"stress":-0.005209025033210821},{"source":54,"area":1,"density":0.028,"id":"e142","stiffness":1000000,"target":57,"stress":-0.005209025410033011},{"source":57,"area":1,"density":0.028,"id":"e143","stiffness":1000000,"target":56,"stress":-0.07929461244262756},{"source":38,"area":1,"density":0.028,"id":"e144","stiffness":1000000,"target":53,"stress":-1.7995415778209203},{"source":53,"area":1,"density":0.028,"id":"e145","stiffness":1000000,"target":56,"stress":-5.709383305784893},{"source":56,"area":1,"density":0.028,"id":"e146","stiffness":1000000,"target":58,"stress":-5.7093833064129305},{"source":58,"area":1,"density":0.028,"id":"e147","stiffness":1000000,"target":38,"stress":-1.7995415776953128},{"source":55,"area":1,"density":0.028,"id":"e148","stiffness":1000000,"target":39,"stress":-2.3104177587186085},{"source":39,"area":1,"density":0.028,"id":"e149","stiffness":1000000,"target":58,"stress":-2.298288069343775},{"source":58,"area":1,"density":0.028,"id":"e150","stiffness":1000000,"target":57,"stress":-6.284610206550028},{"source":57,"area":1,"density":0.028,"id":"e151","stiffness":1000000,"target":55,"stress":-5.284067614834352},{"source":59,"area":1,"density":0.028,"id":"e152","stiffness":1000000,"target":55,"stress":-5.284067614834352},{"source":55,"area":1,"density":0.028,"id":"e153","stiffness":1000000,"target":41,"stress":-2.3104177585930006},{"source":41,"area":1,"density":0.028,"id":"e154","stiffness":1000000,"target":60,"stress":-2.2982880695949897},{"source":60,"area":1,"density":0.028,"id":"e155","stiffness":1000000,"target":59,"stress":-6.284610206173206},{"source":61,"area":1,"density":0.028,"id":"e156","stiffness":1000000,"target":57,"stress":-0.08750808174539028},{"source":57,"area":1,"density":0.028,"id":"e157","stiffness":1000000,"target":59,"stress":-0.010449474399319326},{"source":59,"area":1,"density":0.028,"id":"e158","stiffness":1000000,"target":62,"stress":-0.08750808224781986},{"source":62,"area":1,"density":0.028,"id":"e159","stiffness":1000000,"target":61,"stress":-0.17117806167329194},{"source":43,"area":1,"density":0.028,"id":"e160","stiffness":1000000,"target":58,"stress":-1.890283149426165},{"source":58,"area":1,"density":0.028,"id":"e161","stiffness":1000000,"target":61,"stress":-5.710318826409683},{"source":61,"area":1,"density":0.028,"id":"e162","stiffness":1000000,"target":63,"stress":-6.876095359708794},{"source":63,"area":1,"density":0.028,"id":"e163","stiffness":1000000,"target":43,"stress":-1.8656279140671264},{"source":60,"area":1,"density":0.028,"id":"e164","stiffness":1000000,"target":44,"stress":-1.890283150431024},{"source":44,"area":1,"density":0.028,"id":"e165","stiffness":1000000,"target":63,"stress":-1.8656279140671264},{"source":63,"area":1,"density":0.028,"id":"e166","stiffness":1000000,"target":62,"stress":-6.876095359960009},{"source":62,"area":1,"density":0.028,"id":"e167","stiffness":1000000,"target":60,"stress":-5.710318826032861},{"source":64,"area":1,"density":0.028,"id":"e168","stiffness":1000000,"target":65,"stress":0.0},{"source":65,"area":1,"density":0.028,"id":"e169","stiffness":1000000,"target":0,"stress":0.0},{"source":0,"area":1,"density":0.028,"id":"e170","stiffness":1000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.028,"id":"e171","stiffness":1000000,"target":64,"stress":0.0},{"source":67,"area":1,"density":0.028,"id":"e172","stiffness":1000000,"target":68,"stress":3.2599264486366094e-5},{"source":68,"area":1,"density":0.028,"id":"e173","stiffness":1000000,"target":64,"stress":-1.303679170294312e-5},{"source":64,"area":1,"density":0.028,"id":"e174","stiffness":1000000,"target":69,"stress":1.0028494552105007e-6},{"source":69,"area":1,"density":0.028,"id":"e175","stiffness":1000000,"target":67,"stress":-0.000282262178489607},{"source":4,"area":1,"density":0.028,"id":"e176","stiffness":1000000,"target":70,"stress":-0.0003065116912806928},{"source":70,"area":1,"density":0.028,"id":"e177","stiffness":1000000,"target":67,"stress":-0.0003065116912806928},{"source":67,"area":1,"density":0.028,"id":"e178","stiffness":1000000,"target":71,"stress":-0.0001655985308691546},{"source":71,"area":1,"density":0.028,"id":"e179","stiffness":1000000,"target":4,"stress":-0.0001655985308691546},{"source":70,"area":1,"density":0.028,"id":"e180","stiffness":1000000,"target":5,"stress":-0.00012958450369624636},{"source":5,"area":1,"density":0.028,"id":"e181","stiffness":1000000,"target":65,"stress":-4.173682577371558e-6},{"source":65,"area":1,"density":0.028,"id":"e182","stiffness":1000000,"target":68,"stress":-4.173682577371558e-6},{"source":68,"area":1,"density":0.028,"id":"e183","stiffness":1000000,"target":70,"stress":-0.00012958437808884964},{"source":69,"area":1,"density":0.028,"id":"e184","stiffness":1000000,"target":66,"stress":-5.322990257128081e-6},{"source":66,"area":1,"density":0.028,"id":"e185","stiffness":1000000,"target":6,"stress":-5.322990257128081e-6},{"source":6,"area":1,"density":0.028,"id":"e186","stiffness":1000000,"target":71,"stress":-0.00021207377007578112},{"source":71,"area":1,"density":0.028,"id":"e187","stiffness":1000000,"target":69,"stress":-0.00021207377007578112},{"source":72,"area":1,"density":0.028,"id":"e188","stiffness":1000000,"target":66,"stress":0.0},{"source":66,"area":1,"density":0.028,"id":"e189","stiffness":1000000,"target":12,"stress":0.0},{"source":12,"area":1,"density":0.028,"id":"e190","stiffness":1000000,"target":73,"stress":0.0},{"source":73,"area":1,"density":0.028,"id":"e191","stiffness":1000000,"target":72,"stress":0.0},{"source":74,"area":1,"density":0.028,"id":"e192","stiffness":1000000,"target":69,"stress":-0.00021207377007578112},{"source":69,"area":1,"density":0.028,"id":"e193","stiffness":1000000,"target":72,"stress":-5.322990257128081e-6},{"source":72,"area":1,"density":0.028,"id":"e194","stiffness":1000000,"target":75,"stress":-5.323367079318165e-6},{"source":75,"area":1,"density":0.028,"id":"e195","stiffness":1000000,"target":74,"stress":-0.00021207389568317784},{"source":15,"area":1,"density":0.028,"id":"e196","stiffness":1000000,"target":71,"stress":-0.0001354771234973849},{"source":71,"area":1,"density":0.028,"id":"e197","stiffness":1000000,"target":74,"stress":-0.0001354771234973849},{"source":74,"area":1,"density":0.028,"id":"e198","stiffness":1000000,"target":76,"stress":-0.00013547737471217828},{"source":76,"area":1,"density":0.028,"id":"e199","stiffness":1000000,"target":15,"stress":-0.0001354776259269717},{"source":75,"area":1,"density":0.028,"id":"e200","stiffness":1000000,"target":73,"stress":-5.323115864524776e-6},{"source":73,"area":1,"density":0.028,"id":"e201","stiffness":1000000,"target":16,"stress":-5.322990257128081e-6},{"source":16,"area":1,"density":0.028,"id":"e202","stiffness":1000000,"target":76,"stress":-0.00021207377007578112},{"source":76,"area":1,"density":0.028,"id":"e203","stiffness":1000000,"target":75,"stress":-0.00021207377007578112},{"source":77,"area":1,"density":0.028,"id":"e204","stiffness":1000000,"target":73,"stress":0.0},{"source":73,"area":1,"density":0.028,"id":"e205","stiffness":1000000,"target":20,"stress":0.0},{"source":20,"area":1,"density":0.028,"id":"e206","stiffness":1000000,"target":78,"stress":0.0},{"source":78,"area":1,"density":0.028,"id":"e207","stiffness":1000000,"target":77,"stress":0.0},{"source":79,"area":1,"density":0.028,"id":"e208","stiffness":1000000,"target":75,"stress":-0.00028226167606002026},{"source":75,"area":1,"density":0.028,"id":"e209","stiffness":1000000,"target":77,"stress":1.0029750626071955e-6},{"source":77,"area":1,"density":0.028,"id":"e210","stiffness":1000000,"target":80,"stress":-1.3036917310339816e-5},{"source":80,"area":1,"density":0.028,"id":"e211","stiffness":1000000,"target":79,"stress":3.259838523458923e-5},{"source":23,"area":1,"density":0.028,"id":"e212","stiffness":1000000,"target":76,"stress":-0.00016559777722477444},{"source":76,"area":1,"density":0.028,"id":"e213","stiffness":1000000,"target":79,"stress":-0.00016559802843956785},{"source":79,"area":1,"density":0.028,"id":"e214","stiffness":1000000,"target":81,"stress":-0.0003065123193176763},{"source":81,"area":1,"density":0.028,"id":"e215","stiffness":1000000,"target":23,"stress":-0.0003065121937102796},{"source":80,"area":1,"density":0.028,"id":"e216","stiffness":1000000,"target":78,"stress":-4.173431362578168e-6},{"source":78,"area":1,"density":0.028,"id":"e217","stiffness":1000000,"target":24,"stress":-4.173682577371558e-6},{"source":24,"area":1,"density":0.028,"id":"e218","stiffness":1000000,"target":81,"stress":-0.00012958450369624636},{"source":81,"area":1,"density":0.028,"id":"e219","stiffness":1000000,"target":80,"stress":-0.00012958437808884964},{"source":82,"area":1,"density":0.028,"id":"e220","stiffness":1000000,"target":83,"stress":-0.11213785183764498},{"source":83,"area":1,"density":0.028,"id":"e221","stiffness":1000000,"target":67,"stress":-0.01701645581986938},{"source":67,"area":1,"density":0.028,"id":"e222","stiffness":1000000,"target":84,"stress":-0.009829780133526882},{"source":84,"area":1,"density":0.028,"id":"e223","stiffness":1000000,"target":82,"stress":-0.18349613589122138},{"source":28,"area":1,"density":0.028,"id":"e224","stiffness":1000000,"target":85,"stress":-0.038860064814303555},{"source":85,"area":1,"density":0.028,"id":"e225","stiffness":1000000,"target":82,"stress":-0.038860064939910954},{"source":82,"area":1,"density":0.028,"id":"e226","stiffness":1000000,"target":86,"stress":-0.043066321283467345},{"source":86,"area":1,"density":0.028,"id":"e227","stiffness":1000000,"target":28,"stress":-0.04306632115785995},{"source":85,"area":1,"density":0.028,"id":"e228","stiffness":1000000,"target":29,"stress":-0.14705780215919734},{"source":29,"area":1,"density":0.028,"id":"e229","stiffness":1000000,"target":70,"stress":-0.009320440255818916},{"source":70,"area":1,"density":0.028,"id":"e230","stiffness":1000000,"target":83,"stress":-0.009320440381426312},{"source":83,"area":1,"density":0.028,"id":"e231","stiffness":1000000,"target":85,"stress":-0.14705780215919734},{"source":84,"area":1,"density":0.028,"id":"e232","stiffness":1000000,"target":71,"stress":-0.012763147573548135},{"source":71,"area":1,"density":0.028,"id":"e233","stiffness":1000000,"target":30,"stress":-0.012763147573548135},{"source":30,"area":1,"density":0.028,"id":"e234","stiffness":1000000,"target":86,"stress":-0.18361865384838696},{"source":86,"area":1,"density":0.028,"id":"e235","stiffness":1000000,"target":84,"stress":-0.18361865384838696},{"source":87,"area":1,"density":0.028,"id":"e236","stiffness":1000000,"target":84,"stress":-0.18361865409960176},{"source":84,"area":1,"density":0.028,"id":"e237","stiffness":1000000,"target":74,"stress":-0.012763147699155531},{"source":74,"area":1,"density":0.028,"id":"e238","stiffness":1000000,"target":88,"stress":-0.012763147950370323},{"source":88,"area":1,"density":0.028,"id":"e239","stiffness":1000000,"target":87,"stress":-0.18361865422520915},{"source":36,"area":1,"density":0.028,"id":"e240","stiffness":1000000,"target":86,"stress":-0.0033384432554882776},{"source":86,"area":1,"density":0.028,"id":"e241","stiffness":1000000,"target":87,"stress":-0.003338443129880881},{"source":87,"area":1,"density":0.028,"id":"e242","stiffness":1000000,"target":89,"stress":-0.003338443129880881},{"source":89,"area":1,"density":0.028,"id":"e243","stiffness":1000000,"target":36,"stress":-0.003338443129880881},{"source":88,"area":1,"density":0.028,"id":"e244","stiffness":1000000,"target":76,"stress":-0.012763147573548135},{"source":76,"area":1,"density":0.028,"id":"e245","stiffness":1000000,"target":37,"stress":-0.012763147573548135},{"source":37,"area":1,"density":0.028,"id":"e246","stiffness":1000000,"target":89,"stress":-0.18361865384838696},{"source":89,"area":1,"density":0.028,"id":"e247","stiffness":1000000,"target":88,"stress":-0.18361865384838696},{"source":90,"area":1,"density":0.028,"id":"e248","stiffness":1000000,"target":88,"stress":-0.18349613538879178},{"source":88,"area":1,"density":0.028,"id":"e249","stiffness":1000000,"target":79,"stress":-0.0098297793798825},{"source":79,"area":1,"density":0.028,"id":"e250","stiffness":1000000,"target":91,"stress":-0.01701645619669157},{"source":91,"area":1,"density":0.028,"id":"e251","stiffness":1000000,"target":90,"stress":-0.11213785221446715},{"source":41,"area":1,"density":0.028,"id":"e252","stiffness":1000000,"target":89,"stress":-0.04306632065543036},{"source":89,"area":1,"density":0.028,"id":"e253","stiffness":1000000,"target":90,"stress":-0.04306632078103777},{"source":90,"area":1,"density":0.028,"id":"e254","stiffness":1000000,"target":92,"stress":-0.038860065316733146},{"source":92,"area":1,"density":0.028,"id":"e255","stiffness":1000000,"target":41,"stress":-0.038860065316733146},{"source":91,"area":1,"density":0.028,"id":"e256","stiffness":1000000,"target":81,"stress":-0.009320440507033708},{"source":81,"area":1,"density":0.028,"id":"e257","stiffness":1000000,"target":42,"stress":-0.009320440255818916},{"source":42,"area":1,"density":0.028,"id":"e258","stiffness":1000000,"target":92,"stress":-0.14705780215919734},{"source":92,"area":1,"density":0.028,"id":"e259","stiffness":1000000,"target":91,"stress":-0.14705780215919734},{"source":93,"area":1,"density":0.028,"id":"e260","stiffness":1000000,"target":94,"stress":-6.284610206424421},{"source":94,"area":1,"density":0.028,"id":"e261","stiffness":1000000,"target":82,"stress":-2.298288069343775},{"source":82,"area":1,"density":0.028,"id":"e262","stiffness":1000000,"target":95,"stress":-2.3104177587186085},{"source":95,"area":1,"density":0.028,"id":"e263","stiffness":1000000,"target":93,"stress":-5.284067615839211},{"source":46,"area":1,"density":0.028,"id":"e264","stiffness":1000000,"target":96,"stress":-0.07929461219141276},{"source":96,"area":1,"density":0.028,"id":"e265","stiffness":1000000,"target":93,"stress":-0.07929461219141276},{"source":93,"area":1,"density":0.028,"id":"e266","stiffness":1000000,"target":97,"stress":-0.005209025661247805},{"source":97,"area":1,"density":0.028,"id":"e267","stiffness":1000000,"target":46,"stress":-0.005209025661247805},{"source":96,"area":1,"density":0.028,"id":"e268","stiffness":1000000,"target":47,"stress":-5.709383305784893},{"source":47,"area":1,"density":0.028,"id":"e269","stiffness":1000000,"target":85,"stress":-1.7995415778209203},{"source":85,"area":1,"density":0.028,"id":"e270","stiffness":1000000,"target":94,"stress":-1.7995415775697055},{"source":94,"area":1,"density":0.028,"id":"e271","stiffness":1000000,"target":96,"stress":-5.709383306036108},{"source":95,"area":1,"density":0.028,"id":"e272","stiffness":1000000,"target":86,"stress":-2.2278348029123456},{"source":86,"area":1,"density":0.028,"id":"e273","stiffness":1000000,"target":48,"stress":-2.22783480366599},{"source":48,"area":1,"density":0.028,"id":"e274","stiffness":1000000,"target":97,"stress":-5.282841448993417},{"source":97,"area":1,"density":0.028,"id":"e275","stiffness":1000000,"target":95,"stress":-5.282841449119025},{"source":98,"area":1,"density":0.028,"id":"e276","stiffness":1000000,"target":95,"stress":-5.282841449747061},{"source":95,"area":1,"density":0.028,"id":"e277","stiffness":1000000,"target":87,"stress":-2.22783480316356},{"source":87,"area":1,"density":0.028,"id":"e278","stiffness":1000000,"target":99,"stress":-2.22783480316356},{"source":99,"area":1,"density":0.028,"id":"e279","stiffness":1000000,"target":98,"stress":-5.282841449747061},{"source":54,"area":1,"density":0.028,"id":"e280","stiffness":1000000,"target":97,"stress":-0.00023974859657473142},{"source":97,"area":1,"density":0.028,"id":"e281","stiffness":1000000,"target":98,"stress":-0.0002397488477895248},{"source":98,"area":1,"density":0.028,"id":"e282","stiffness":1000000,"target":100,"stress":-0.0002397492246117149},{"source":100,"area":1,"density":0.028,"id":"e283","stiffness":1000000,"target":54,"stress":-0.00023974909900431818},{"source":99,"area":1,"density":0.028,"id":"e284","stiffness":1000000,"target":89,"stress":-2.2278348029123456},{"source":89,"area":1,"density":0.028,"id":"e285","stiffness":1000000,"target":55,"stress":-2.22783480366599},{"source":55,"area":1,"density":0.028,"id":"e286","stiffness":1000000,"target":100,"stress":-5.282841448993417},{"source":100,"area":1,"density":0.028,"id":"e287","stiffness":1000000,"target":99,"stress":-5.282841449119025},{"source":101,"area":1,"density":0.028,"id":"e288","stiffness":1000000,"target":99,"stress":-5.284067615211174},{"source":99,"area":1,"density":0.028,"id":"e289","stiffness":1000000,"target":90,"stress":-2.310417758341786},{"source":90,"area":1,"density":0.028,"id":"e290","stiffness":1000000,"target":102,"stress":-2.2982880690925604},{"source":102,"area":1,"density":0.028,"id":"e291","stiffness":1000000,"target":101,"stress":-6.284610206550028},{"source":59,"area":1,"density":0.028,"id":"e292","stiffness":1000000,"target":100,"stress":-0.005209024656388631},{"source":100,"area":1,"density":0.028,"id":"e293","stiffness":1000000,"target":101,"stress":-0.005209024656388631},{"source":101,"area":1,"density":0.028,"id":"e294","stiffness":1000000,"target":103,"stress":-0.07929461206580538},{"source":103,"area":1,"density":0.028,"id":"e295","stiffness":1000000,"target":59,"stress":-0.07929461206580538},{"source":102,"area":1,"density":0.028,"id":"e296","stiffness":1000000,"target":92,"stress":-1.7995415775697055},{"source":92,"area":1,"density":0.028,"id":"e297","stiffness":1000000,"target":60,"stress":-1.7995415778209203},{"source":60,"area":1,"density":0.028,"id":"e298","stiffness":1000000,"target":103,"stress":-5.709383305784893},{"source":103,"area":1,"density":0.028,"id":"e299","stiffness":1000000,"target":102,"stress":-5.709383306036108},{"source":104,"area":1,"density":0.028,"id":"e300","stiffness":1000000,"target":105,"stress":0.0},{"source":105,"area":1,"density":0.028,"id":"e301","stiffness":1000000,"target":64,"stress":0.0},{"source":64,"area":1,"density":0.028,"id":"e302","stiffness":1000000,"target":106,"stress":0.0},{"source":106,"area":1,"density":0.028,"id":"e303","stiffness":1000000,"target":104,"stress":0.0},{"source":107,"area":1,"density":0.028,"id":"e304","stiffness":1000000,"target":108,"stress":1.5467294828985605e-6},{"source":108,"area":1,"density":0.028,"id":"e305","stiffness":1000000,"target":104,"stress":-7.657780546889203e-6},{"source":104,"area":1,"density":0.028,"id":"e306","stiffness":1000000,"target":109,"stress":-8.60285059962014e-7},{"source":109,"area":1,"density":0.028,"id":"e307","stiffness":1000000,"target":107,"stress":-0.0002008628074911922},{"source":67,"area":1,"density":0.028,"id":"e308","stiffness":1000000,"target":110,"stress":-0.00019573802570604836},{"source":110,"area":1,"density":0.028,"id":"e309","stiffness":1000000,"target":107,"stress":-0.0004395002810347623},{"source":107,"area":1,"density":0.028,"id":"e310","stiffness":1000000,"target":111,"stress":-0.00019573827692084177},{"source":111,"area":1,"density":0.028,"id":"e311","stiffness":1000000,"target":67,"stress":-0.00018969995253953733},{"source":110,"area":1,"density":0.028,"id":"e312","stiffness":1000000,"target":68,"stress":-0.00020086205384681202},{"source":68,"area":1,"density":0.028,"id":"e313","stiffness":1000000,"target":105,"stress":-8.604106673587087e-7},{"source":105,"area":1,"density":0.028,"id":"e314","stiffness":1000000,"target":108,"stress":-7.657780546889203e-6},{"source":108,"area":1,"density":0.028,"id":"e315","stiffness":1000000,"target":110,"stress":1.5463526607084763e-6},{"source":109,"area":1,"density":0.028,"id":"e316","stiffness":1000000,"target":106,"stress":-1.303679170294312e-5},{"source":106,"area":1,"density":0.028,"id":"e317","stiffness":1000000,"target":69,"stress":1.0032262774005849e-6},{"source":69,"area":1,"density":0.028,"id":"e318","stiffness":1000000,"target":111,"stress":-0.00028226192727481364},{"source":111,"area":1,"density":0.028,"id":"e319","stiffness":1000000,"target":109,"stress":3.259888766417601e-5},{"source":112,"area":1,"density":0.028,"id":"e320","stiffness":1000000,"target":106,"stress":0.0},{"source":106,"area":1,"density":0.028,"id":"e321","stiffness":1000000,"target":72,"stress":0.0},{"source":72,"area":1,"density":0.028,"id":"e322","stiffness":1000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.028,"id":"e323","stiffness":1000000,"target":112,"stress":0.0},{"source":114,"area":1,"density":0.028,"id":"e324","stiffness":1000000,"target":109,"stress":-0.00012958475491103974},{"source":109,"area":1,"density":0.028,"id":"e325","stiffness":1000000,"target":112,"stress":-4.173808184768253e-6},{"source":112,"area":1,"density":0.028,"id":"e326","stiffness":1000000,"target":115,"stress":-4.173682577371558e-6},{"source":115,"area":1,"density":0.028,"id":"e327","stiffness":1000000,"target":114,"stress":-0.00012958462930364305},{"source":74,"area":1,"density":0.028,"id":"e328","stiffness":1000000,"target":111,"stress":-0.00016559827965436123},{"source":111,"area":1,"density":0.028,"id":"e329","stiffness":1000000,"target":114,"stress":-0.0003065116912806928},{"source":114,"area":1,"density":0.028,"id":"e330","stiffness":1000000,"target":116,"stress":-0.0003065118168880895},{"source":116,"area":1,"density":0.028,"id":"e331","stiffness":1000000,"target":74,"stress":-0.0001655985308691546},{"source":115,"area":1,"density":0.028,"id":"e332","stiffness":1000000,"target":113,"stress":-1.303679170294312e-5},{"source":113,"area":1,"density":0.028,"id":"e333","stiffness":1000000,"target":75,"stress":1.0032262774005849e-6},{"source":75,"area":1,"density":0.028,"id":"e334","stiffness":1000000,"target":116,"stress":-0.00028226192727481364},{"source":116,"area":1,"density":0.028,"id":"e335","stiffness":1000000,"target":115,"stress":3.259888766417601e-5},{"source":117,"area":1,"density":0.028,"id":"e336","stiffness":1000000,"target":113,"stress":0.0},{"source":113,"area":1,"density":0.028,"id":"e337","stiffness":1000000,"target":77,"stress":0.0},{"source":77,"area":1,"density":0.028,"id":"e338","stiffness":1000000,"target":118,"stress":0.0},{"source":118,"area":1,"density":0.028,"id":"e339","stiffness":1000000,"target":117,"stress":0.0},{"source":119,"area":1,"density":0.028,"id":"e340","stiffness":1000000,"target":115,"stress":-0.0002008623050616054},{"source":115,"area":1,"density":0.028,"id":"e341","stiffness":1000000,"target":117,"stress":-8.604106673587087e-7},{"source":117,"area":1,"density":0.028,"id":"e342","stiffness":1000000,"target":120,"stress":-7.657906154285896e-6},{"source":120,"area":1,"density":0.028,"id":"e343","stiffness":1000000,"target":119,"stress":1.546101445915087e-6},{"source":79,"area":1,"density":0.028,"id":"e344","stiffness":1000000,"target":116,"stress":-0.00018969932450255386},{"source":116,"area":1,"density":0.028,"id":"e345","stiffness":1000000,"target":119,"stress":-0.00019573764888385827},{"source":119,"area":1,"density":0.028,"id":"e346","stiffness":1000000,"target":121,"stress":-0.00043950040664215897},{"source":121,"area":1,"density":0.028,"id":"e347","stiffness":1000000,"target":79,"stress":-0.0001957386537430318},{"source":120,"area":1,"density":0.028,"id":"e348","stiffness":1000000,"target":118,"stress":-7.657780546889203e-6},{"source":118,"area":1,"density":0.028,"id":"e349","stiffness":1000000,"target":80,"stress":-8.601594525653192e-7},{"source":80,"area":1,"density":0.028,"id":"e350","stiffness":1000000,"target":121,"stress":-0.0002008625562763988},{"source":121,"area":1,"density":0.028,"id":"e351","stiffness":1000000,"target":120,"stress":1.5466038755018657e-6},{"source":122,"area":1,"density":0.028,"id":"e352","stiffness":1000000,"target":123,"stress":-0.06220368437408008},{"source":123,"area":1,"density":0.028,"id":"e353","stiffness":1000000,"target":107,"stress":-0.011617832450502947},{"source":107,"area":1,"density":0.028,"id":"e354","stiffness":1000000,"target":124,"stress":-0.006038547083218749},{"source":124,"area":1,"density":0.028,"id":"e355","stiffness":1000000,"target":122,"stress":-0.14534693106562388},{"source":82,"area":1,"density":0.028,"id":"e356","stiffness":1000000,"target":125,"stress":-0.08632485755637825},{"source":125,"area":1,"density":0.028,"id":"e357","stiffness":1000000,"target":122,"stress":-0.0765012554226578},{"source":122,"area":1,"density":0.028,"id":"e358","stiffness":1000000,"target":126,"stress":-0.08632485793320044},{"source":126,"area":1,"density":0.028,"id":"e359","stiffness":1000000,"target":82,"stress":-0.08283171484943941},{"source":125,"area":1,"density":0.028,"id":"e360","stiffness":1000000,"target":83,"stress":-0.1453469303119795},{"source":83,"area":1,"density":0.028,"id":"e361","stiffness":1000000,"target":110,"stress":-0.006038546455181765},{"source":110,"area":1,"density":0.028,"id":"e362","stiffness":1000000,"target":123,"stress":-0.011617832827325139},{"source":123,"area":1,"density":0.028,"id":"e363","stiffness":1000000,"target":125,"stress":-0.062203684625294874},{"source":124,"area":1,"density":0.028,"id":"e364","stiffness":1000000,"target":111,"stress":-0.01701645594547678},{"source":111,"area":1,"density":0.028,"id":"e365","stiffness":1000000,"target":84,"stress":-0.009829779882312088},{"source":84,"area":1,"density":0.028,"id":"e366","stiffness":1000000,"target":126,"stress":-0.18349613576561397},{"source":126,"area":1,"density":0.028,"id":"e367","stiffness":1000000,"target":124,"stress":-0.11213785183764498},{"source":127,"area":1,"density":0.028,"id":"e368","stiffness":1000000,"target":124,"stress":-0.14705780215919734},{"source":124,"area":1,"density":0.028,"id":"e369","stiffness":1000000,"target":114,"stress":-0.009320440255818916},{"source":114,"area":1,"density":0.028,"id":"e370","stiffness":1000000,"target":128,"stress":-0.009320440381426312},{"source":128,"area":1,"density":0.028,"id":"e371","stiffness":1000000,"target":127,"stress":-0.14705780228480472},{"source":87,"area":1,"density":0.028,"id":"e372","stiffness":1000000,"target":126,"stress":-0.043066321409074744},{"source":126,"area":1,"density":0.028,"id":"e373","stiffness":1000000,"target":127,"stress":-0.038860064688696155},{"source":127,"area":1,"density":0.028,"id":"e374","stiffness":1000000,"target":129,"stress":-0.038860064688696155},{"source":129,"area":1,"density":0.028,"id":"e375","stiffness":1000000,"target":87,"stress":-0.043066321534682137},{"source":128,"area":1,"density":0.028,"id":"e376","stiffness":1000000,"target":116,"stress":-0.01701645594547678},{"source":116,"area":1,"density":0.028,"id":"e377","stiffness":1000000,"target":88,"stress":-0.009829779882312088},{"source":88,"area":1,"density":0.028,"id":"e378","stiffness":1000000,"target":129,"stress":-0.18349613576561397},{"source":129,"area":1,"density":0.028,"id":"e379","stiffness":1000000,"target":128,"stress":-0.11213785183764498},{"source":130,"area":1,"density":0.028,"id":"e380","stiffness":1000000,"target":128,"stress":-0.14534693056319428},{"source":128,"area":1,"density":0.028,"id":"e381","stiffness":1000000,"target":119,"stress":-0.006038546580789162},{"source":119,"area":1,"density":0.028,"id":"e382","stiffness":1000000,"target":131,"stress":-0.011617832827325139},{"source":131,"area":1,"density":0.028,"id":"e383","stiffness":1000000,"target":130,"stress":-0.062203684625294874},{"source":90,"area":1,"density":0.028,"id":"e384","stiffness":1000000,"target":129,"stress":-0.08283171434700982},{"source":129,"area":1,"density":0.028,"id":"e385","stiffness":1000000,"target":130,"stress":-0.08632485755637825},{"source":130,"area":1,"density":0.028,"id":"e386","stiffness":1000000,"target":132,"stress":-0.0765012552970504},{"source":132,"area":1,"density":0.028,"id":"e387","stiffness":1000000,"target":90,"stress":-0.08632485755637825},{"source":131,"area":1,"density":0.028,"id":"e388","stiffness":1000000,"target":121,"stress":-0.011617832450502947},{"source":121,"area":1,"density":0.028,"id":"e389","stiffness":1000000,"target":91,"stress":-0.006038546706396558},{"source":91,"area":1,"density":0.028,"id":"e390","stiffness":1000000,"target":132,"stress":-0.1453469301863721},{"source":132,"area":1,"density":0.028,"id":"e391","stiffness":1000000,"target":131,"stress":-0.062203684499687474},{"source":133,"area":1,"density":0.028,"id":"e392","stiffness":1000000,"target":134,"stress":-6.876095359834401},{"source":134,"area":1,"density":0.028,"id":"e393","stiffness":1000000,"target":122,"stress":-1.8656279140671264},{"source":122,"area":1,"density":0.028,"id":"e394","stiffness":1000000,"target":135,"stress":-1.8902831503054165},{"source":135,"area":1,"density":0.028,"id":"e395","stiffness":1000000,"target":133,"stress":-5.710318826409683},{"source":93,"area":1,"density":0.028,"id":"e396","stiffness":1000000,"target":136,"stress":-0.08750808174539028},{"source":136,"area":1,"density":0.028,"id":"e397","stiffness":1000000,"target":133,"stress":-0.17117806167329194},{"source":133,"area":1,"density":0.028,"id":"e398","stiffness":1000000,"target":137,"stress":-0.08750808237342726},{"source":137,"area":1,"density":0.028,"id":"e399","stiffness":1000000,"target":93,"stress":-0.010449475278571103},{"source":136,"area":1,"density":0.028,"id":"e400","stiffness":1000000,"target":94,"stress":-5.710318826409683},{"source":94,"area":1,"density":0.028,"id":"e401","stiffness":1000000,"target":125,"stress":-1.8902831496773795},{"source":125,"area":1,"density":0.028,"id":"e402","stiffness":1000000,"target":134,"stress":-1.8656279138159115},{"source":134,"area":1,"density":0.028,"id":"e403","stiffness":1000000,"target":136,"stress":-6.876095359708794},{"source":135,"area":1,"density":0.028,"id":"e404","stiffness":1000000,"target":126,"stress":-2.2982880690925604},{"source":126,"area":1,"density":0.028,"id":"e405","stiffness":1000000,"target":95,"stress":-2.3104177587186085},{"source":95,"area":1,"density":0.028,"id":"e406","stiffness":1000000,"target":137,"stress":-5.284067615587997},{"source":137,"area":1,"density":0.028,"id":"e407","stiffness":1000000,"target":135,"stress":-6.284610205921991},{"source":138,"area":1,"density":0.028,"id":"e408","stiffness":1000000,"target":135,"stress":-5.709383305910501},{"source":135,"area":1,"density":0.028,"id":"e409","stiffness":1000000,"target":127,"stress":-1.7995415779465276},{"source":127,"area":1,"density":0.028,"id":"e410","stiffness":1000000,"target":139,"stress":-1.7995415780721349},{"source":139,"area":1,"density":0.028,"id":"e411","stiffness":1000000,"target":138,"stress":-5.709383306036108},{"source":98,"area":1,"density":0.028,"id":"e412","stiffness":1000000,"target":137,"stress":-0.005209024907603424},{"source":137,"area":1,"density":0.028,"id":"e413","stiffness":1000000,"target":138,"stress":-0.07929461156337578},{"source":138,"area":1,"density":0.028,"id":"e414","stiffness":1000000,"target":140,"stress":-0.07929461181459056},{"source":140,"area":1,"density":0.028,"id":"e415","stiffness":1000000,"target":98,"stress":-0.005209025033210821},{"source":139,"area":1,"density":0.028,"id":"e416","stiffness":1000000,"target":129,"stress":-2.2982880690925604},{"source":129,"area":1,"density":0.028,"id":"e417","stiffness":1000000,"target":99,"stress":-2.3104177587186085},{"source":99,"area":1,"density":0.028,"id":"e418","stiffness":1000000,"target":140,"stress":-5.284067615587997},{"source":140,"area":1,"density":0.028,"id":"e419","stiffness":1000000,"target":139,"stress":-6.284610205921991},{"source":141,"area":1,"density":0.028,"id":"e420","stiffness":1000000,"target":139,"stress":-5.710318825907254},{"source":139,"area":1,"density":0.028,"id":"e421","stiffness":1000000,"target":130,"stress":-1.8902831499285944},{"source":130,"area":1,"density":0.028,"id":"e422","stiffness":1000000,"target":142,"stress":-1.865627913941519},{"source":142,"area":1,"density":0.028,"id":"e423","stiffness":1000000,"target":141,"stress":-6.876095360085617},{"source":101,"area":1,"density":0.028,"id":"e424","stiffness":1000000,"target":140,"stress":-0.010449474776141516},{"source":140,"area":1,"density":0.028,"id":"e425","stiffness":1000000,"target":141,"stress":-0.08750808174539028},{"source":141,"area":1,"density":0.028,"id":"e426","stiffness":1000000,"target":143,"stress":-0.17117806230132893},{"source":143,"area":1,"density":0.028,"id":"e427","stiffness":1000000,"target":101,"stress":-0.08750808237342726},{"source":142,"area":1,"density":0.028,"id":"e428","stiffness":1000000,"target":132,"stress":-1.865627913941519},{"source":132,"area":1,"density":0.028,"id":"e429","stiffness":1000000,"target":102,"stress":-1.8902831498029868},{"source":102,"area":1,"density":0.028,"id":"e430","stiffness":1000000,"target":143,"stress":-5.710318826409683},{"source":143,"area":1,"density":0.028,"id":"e431","stiffness":1000000,"target":142,"stress":-6.876095359708794}],"ndofs":864}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU.ipynb b/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU.ipynb
index d4300705306bd8eb0bbd501ed79b2e532b64447d..f1e6ab0f7b4ab8f9e925346d72130d503c24a8e5 100644
--- a/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU.ipynb	
+++ b/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU.ipynb	
@@ -215,7 +215,7 @@
        "Dict{String,Any} with 6 entries:\n",
        "  \"nodes\"     => Any[Dict{String,Any}(\"degrees_of_freedom\"=>Any[0, 1, 2, 3, 4, …\n",
        "  \"bar\"       => false\n",
-       "  \"animation\" => Dict{String,Any}(\"speed\"=>3,\"exageration\"=>2000,\"showDisplacem…\n",
+       "  \"animation\" => Dict{String,Any}(\"speed\"=>3,\"exaggeration\"=>2000,\"showDisplacem…\n",
        "  \"viz\"       => Dict{String,Any}(\"colorMap\"=>0,\"colorMaps\"=>Any[\"coolwarm\", \"Y…\n",
        "  \"edges\"     => Any[Dict{String,Any}(\"source\"=>0,\"area\"=>1,\"density\"=>0.0284,\"…\n",
        "  \"ndofs\"     => 72"
diff --git a/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU1.ipynb b/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU1.ipynb
index dd67fe3d80c13e2e1cf5a593646d7669fae10ab2..8a63670b4555eeca066c578c4c98cd3ca69f672b 100644
--- a/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU1.ipynb	
+++ b/01_Code/physical_computing_interface/simulation/julia/MetaVoxel GPU1.ipynb	
@@ -2,9 +2,17 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
+   "execution_count": 2,
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stderr",
+     "text": "┌ Warning: `haskey(::TargetIterator, name::String)` is deprecated, use `Target(; name=name) !== nothing` instead.\n│   caller = llvm_support(::VersionNumber) at CUDAnative.jl:158\n└ @ CUDAnative C:\\Users\\amira\\.julia\\packages\\CUDAnative\\Phjco\\src\\CUDAnative.jl:158\n"
+    }
+   ],
    "source": [
     "using LinearAlgebra\n",
     "using Plots\n",
@@ -219,7 +227,7 @@
   {
    "cell_type": "code",
    "execution_count": 5,
-   "metadata": {},
+   "metadata": {},exaggeration
    "outputs": [
     {
      "data": {
@@ -986,4 +994,4 @@
  },
  "nbformat": 4,
  "nbformat_minor": 4
-}
+}
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/simulation/julia/parallelFEA.jl b/01_Code/physical_computing_interface/simulation/julia/parallelFEA.jl
index 336f29ad5eb58aa877271ed3722e9c77e841948f..ddc47e3927e3773cd420020bfb1ebb18fc853941 100644
--- a/01_Code/physical_computing_interface/simulation/julia/parallelFEA.jl
+++ b/01_Code/physical_computing_interface/simulation/julia/parallelFEA.jl
@@ -1268,6 +1268,6 @@ strain =0 #todooo moveeee
 dt=0.0251646
 numTimeSteps=10
 simulateParallel(setup,numTimeSteps,dt,true,10)
-# setup["animation"]["exageration"]=75444
+# setup["animation"]["exaggeration"]=75444
 
 updateDataAndSave(setup,"../json/trialJuliaParallel.json")
\ No newline at end of file
diff --git a/01_Code/physical_computing_interface/simulation/visualization/draw.js b/01_Code/physical_computing_interface/simulation/visualization/draw.js
index 96970c07d5a354384632511374d61e18ae951716..92668de327b747e07e9c75fa901139d769d57982 100644
--- a/01_Code/physical_computing_interface/simulation/visualization/draw.js
+++ b/01_Code/physical_computing_interface/simulation/visualization/draw.js
@@ -16,12 +16,12 @@ var three1; //todo change location
 var setup=JSON.parse(JSON.stringify(setupEmpty));
 var setup1=JSON.parse(JSON.stringify(setupEmpty));
 var globalSetup={
-    exageration:10e3,
+    exaggeration:10e3,
     speed:3.0,
     updateStress:false
 
 };
-var ex=gui.add(globalSetup, 'exageration', 0, 10e4).listen();
+var ex=gui.add(globalSetup, 'exaggeration', 0, 10e4).listen();
 var sp=gui.add(globalSetup, 'speed', 0, 5).listen();
 var sp=gui.add(globalSetup, 'updateStress').listen();
 
@@ -57,7 +57,7 @@ rhino3dm().then(async m => {
 		stiffness:1000000
 	};
 
-    setup.hierarical=false;
+    setup.hierarchical=false;
     setup.voxelSize=voxelSize;
 
     const position=new THREE.Vector3(0,0,0);
@@ -93,7 +93,7 @@ rhino3dm().then(async m => {
     setup.viz.minStress=10e6;
     setup.viz.maxStress=-10e6;
 
-    setup.viz.exageration=globalSetup.exageration;
+    setup.viz.exaggeration=globalSetup.exaggeration;
     setup.solve=solveParallel;
     setup.numTimeSteps=100;
     setup.supports=supports;
@@ -107,7 +107,7 @@ rhino3dm().then(async m => {
 
     ////////////////////////////////////
 
-    setup1.hierarical=true;
+    setup1.hierarchical=true;
     setup1.voxelSize=voxelSize;
 
     
@@ -119,7 +119,7 @@ rhino3dm().then(async m => {
     setup1.viz.minStress=10e6;
     setup1.viz.maxStress=-10e6;
 
-    setup1.viz.exageration=globalSetup.exageration;
+    setup1.viz.exaggeration=globalSetup.exaggeration;
     setup1.solve=solveParallel;
     setup1.supports=supports;
     setup1.loads=loads;
@@ -167,8 +167,8 @@ function solveParallel(){
 }
 
 function updateExSpeed(){
-    three.setup.animation.exageration=globalSetup.exageration;
-    three1.setup.animation.exageration=globalSetup.exageration;
+    three.setup.animation.exaggeration=globalSetup.exaggeration;
+    three1.setup.animation.exaggeration=globalSetup.exaggeration;
     three.setup.animation.speed=globalSetup.speed;
     three1.setup.animation.speed=globalSetup.speed;
 
diff --git a/01_Code/physical_computing_interface/simulation/visualization/geometry.js b/01_Code/physical_computing_interface/simulation/visualization/geometry.js
index 1cfe55eb8ab51c047d7b4c72800a119bd85aa34f..193e19282df96a276b32f1392b11881f30d508b8 100644
--- a/01_Code/physical_computing_interface/simulation/visualization/geometry.js
+++ b/01_Code/physical_computing_interface/simulation/visualization/geometry.js
@@ -19,7 +19,7 @@ function latticeSetup(setup,latticeSize,voxelSize,voxelBuilder,forces) {//later
 
 	
 	//todo fix this
-	if(setup.hierarical){
+	if(setup.hierarchical){
 		addForceAbove(setup,0.75*voxelSize*latticeSize,forces);
 		restrainBelow(setup,voxelSize*0.75);
 	}else{
@@ -350,7 +350,7 @@ function createSimpleSetupnotRhino(setup,size,position){
 	
 }
 
-/////////////hierarical nodes///
+/////////////hierarchical nodes///
 function createHieraricalVoxel(setup,size,position,area,density,stiffness){
 	var i=parseInt(position.x/size);
 	var j=parseInt(position.y/size);
@@ -428,7 +428,7 @@ var setupSimple={
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 10000,
+		exaggeration : 10000,
 		speed:3.0
 		
 	},
@@ -526,7 +526,7 @@ var oldVoxel={
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 10000,
+		exaggeration : 10000,
 		speed:3.0
 		
 	},
@@ -556,7 +556,7 @@ var setupEmpty={//empty
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 20e2,
+		exaggeration : 20e2,
 		speed:3.0
 		
 	},
diff --git a/01_Code/physical_computing_interface/simulation/visualization/main.js b/01_Code/physical_computing_interface/simulation/visualization/main.js
index c7b026b1cf185c06e5eb6583a06bcb945fefd563..ad1d930edab1ad6c0d3bfe9932ce80a4288190a9 100644
--- a/01_Code/physical_computing_interface/simulation/visualization/main.js
+++ b/01_Code/physical_computing_interface/simulation/visualization/main.js
@@ -32,7 +32,7 @@ var setupEmpty={//empty
 	animation :  {
 	
 		showDisplacement : true,
-		exageration : 10e5/2,
+		exaggeration : 10e5/2,
 		speed:3.0
 		
 	},
@@ -278,7 +278,7 @@ threejs1.prototype.createNode=function(point,name,displacement,restrained) {
 	cube.position.set(point.x, point.y, point.z);
 	cube.scale.set(0.5, 0.5,0.5);
 
-	if(this.setup.hierarical){
+	if(this.setup.hierarchical){
 		cube.scale.set(0.75*this.setup.voxelSize, 0.75*this.setup.voxelSize,0.75*this.setup.voxelSize);
 	}
 	
@@ -384,8 +384,8 @@ threejs1.prototype.render=function(){
 	this.renderer.render( this.scene, camera );
 
 	var speed=this.setup.animation.speed;
-	var exageration=this.setup.animation.exageration;
-	// var exageration=0.01;
+	var exaggeration=this.setup.animation.exaggeration;
+	// var exaggeration=0.01;
 	
 	if(this.setup.animation.showDisplacement){
 		//displacement animation edges
@@ -395,9 +395,9 @@ threejs1.prototype.render=function(){
 			var node1=this.setup.nodes[this.setup.edges[i].source];
 			var node2=this.setup.nodes[this.setup.edges[i].target];
 
-			fromPoint.x = node1.position.x+node1.displacement.x*exageration+ Math.sin(timeElapsed*speed)* node1.displacement.x*exageration ;
-			fromPoint.y = node1.position.y+node1.displacement.y*exageration+ Math.sin(timeElapsed*speed)* node1.displacement.y*exageration ;
-			fromPoint.z = node1.position.z+node1.displacement.z*exageration+ Math.sin(timeElapsed*speed)* node1.displacement.z*exageration ;
+			fromPoint.x = node1.position.x+node1.displacement.x*exaggeration+ Math.sin(timeElapsed*speed)* node1.displacement.x*exaggeration ;
+			fromPoint.y = node1.position.y+node1.displacement.y*exaggeration+ Math.sin(timeElapsed*speed)* node1.displacement.y*exaggeration ;
+			fromPoint.z = node1.position.z+node1.displacement.z*exaggeration+ Math.sin(timeElapsed*speed)* node1.displacement.z*exaggeration ;
 
 			var node = this.scene.getObjectByName('d'+node1.id);
 
@@ -405,14 +405,14 @@ threejs1.prototype.render=function(){
 			node.position.y = fromPoint.y;
 			node.position.z = fromPoint.z;
 
-			node.rotation.x = 0+node1.angle.x*exageration+ Math.sin(timeElapsed*speed)* node1.angle.x*exageration ;
-			node.rotation.y = 0+node1.angle.y*exageration+ Math.sin(timeElapsed*speed)* node1.angle.y*exageration ;
-			node.rotation.z = 0+node1.angle.z*exageration+ Math.sin(timeElapsed*speed)* node1.angle.z*exageration ;
+			node.rotation.x = 0+node1.angle.x*exaggeration+ Math.sin(timeElapsed*speed)* node1.angle.x*exaggeration ;
+			node.rotation.y = 0+node1.angle.y*exaggeration+ Math.sin(timeElapsed*speed)* node1.angle.y*exaggeration ;
+			node.rotation.z = 0+node1.angle.z*exaggeration+ Math.sin(timeElapsed*speed)* node1.angle.z*exaggeration ;
 		
 
-			toPoint.x   = node2.position.x+node2.displacement.x*exageration+ Math.sin(timeElapsed*speed)* node2.displacement.x*exageration ;
-			toPoint.y   = node2.position.y+node2.displacement.y*exageration+ Math.sin(timeElapsed*speed)* node2.displacement.y*exageration ;
-			toPoint.z   = node2.position.z+node2.displacement.z*exageration+ Math.sin(timeElapsed*speed)* node2.displacement.z*exageration ;
+			toPoint.x   = node2.position.x+node2.displacement.x*exaggeration+ Math.sin(timeElapsed*speed)* node2.displacement.x*exaggeration ;
+			toPoint.y   = node2.position.y+node2.displacement.y*exaggeration+ Math.sin(timeElapsed*speed)* node2.displacement.y*exaggeration ;
+			toPoint.z   = node2.position.z+node2.displacement.z*exaggeration+ Math.sin(timeElapsed*speed)* node2.displacement.z*exaggeration ;
 
 			node = this.scene.getObjectByName('d'+node2.id);
 
@@ -420,9 +420,9 @@ threejs1.prototype.render=function(){
 			node.position.y = toPoint.y;
 			node.position.z = toPoint.z;
 
-			node.rotation.x = 0+node2.angle.x*exageration+ Math.sin(timeElapsed*speed)* node2.angle.x*exageration ;
-			node.rotation.y = 0+node2.angle.y*exageration+ Math.sin(timeElapsed*speed)* node2.angle.y*exageration ;
-			node.rotation.z = 0+node2.angle.z*exageration+ Math.sin(timeElapsed*speed)* node2.angle.z*exageration ;
+			node.rotation.x = 0+node2.angle.x*exaggeration+ Math.sin(timeElapsed*speed)* node2.angle.x*exaggeration ;
+			node.rotation.y = 0+node2.angle.y*exaggeration+ Math.sin(timeElapsed*speed)* node2.angle.y*exaggeration ;
+			node.rotation.z = 0+node2.angle.z*exaggeration+ Math.sin(timeElapsed*speed)* node2.angle.z*exaggeration ;
 		
 
 			this.editEdge(fromPoint,toPoint,'d'+this.setup.edges[i].id);
@@ -432,16 +432,16 @@ threejs1.prototype.render=function(){
 		// for(var i=0;i<this.setup.nodes.length;i++){
 		// 	var node = this.scene.getObjectByName('d'+this.setup.nodes[i].id);
 		// 	// var origPos=toThreeVec(setup.nodes[i].position);
-		// 	// var displacement=toThreeVec(setup.nodes[i].displacement).multiplyScalar(exageration);
+		// 	// var displacement=toThreeVec(setup.nodes[i].displacement).multiplyScalar(exaggeration);
 		// 	// var currPos=origPos.clone().addVectors(displacement,displacement.clone().multiplyScalar(Math.sin(timeElapsed*speed)));
 		// 	// nodeD.position.set(currPos.x,currPos.y,currPos.z);
-		// 	node.position.x = this.setup.nodes[i].position.x+this.setup.nodes[i].displacement.x*exageration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.x*exageration ;
-		// 	node.position.y = this.setup.nodes[i].position.y+this.setup.nodes[i].displacement.y*exageration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.y*exageration ;
-		// 	node.position.z = this.setup.nodes[i].position.z+this.setup.nodes[i].displacement.z*exageration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.z*exageration ;
+		// 	node.position.x = this.setup.nodes[i].position.x+this.setup.nodes[i].displacement.x*exaggeration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.x*exaggeration ;
+		// 	node.position.y = this.setup.nodes[i].position.y+this.setup.nodes[i].displacement.y*exaggeration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.y*exaggeration ;
+		// 	node.position.z = this.setup.nodes[i].position.z+this.setup.nodes[i].displacement.z*exaggeration+ Math.sin(timeElapsed*speed)*this.setup.nodes[i].displacement.z*exaggeration ;
 
-		// 	node.rotation.x = 0+this.setup.nodes[i].angle.x*exageration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.x*exageration ;
-		// 	node.rotation.y = 0+this.setup.nodes[i].angle.y*exageration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.y*exageration ;
-		// 	node.rotation.z = 0+this.setup.nodes[i].angle.z*exageration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.z*exageration ;
+		// 	node.rotation.x = 0+this.setup.nodes[i].angle.x*exaggeration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.x*exaggeration ;
+		// 	node.rotation.y = 0+this.setup.nodes[i].angle.y*exaggeration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.y*exaggeration ;
+		// 	node.rotation.z = 0+this.setup.nodes[i].angle.z*exaggeration+ Math.sin(timeElapsed*speed)* this.setup.nodes[i].angle.z*exaggeration ;
 		
 		// }
 
@@ -459,7 +459,7 @@ threejs1.prototype.renderEuler=function(){
 	this.renderer.render( this.scene, camera );
 
 	var speed=this.setup.animation.speed;
-	var exageration=this.setup.animation.exageration;
+	var exaggeration=this.setup.animation.exaggeration;
 
 	
 	//todo later change how it's implemented
@@ -486,9 +486,9 @@ threejs1.prototype.renderEuler=function(){
 				var node1=this.setup.nodes[this.setup.edges[i].source];
 				var node2=this.setup.nodes[this.setup.edges[i].target];
 
-				fromPoint.x =  node1.position.x+node1.posTimeSteps[index].x*exageration ;
-				fromPoint.y =  node1.position.y+node1.posTimeSteps[index].y*exageration ;
-				fromPoint.z =  node1.position.z+node1.posTimeSteps[index].z*exageration ;
+				fromPoint.x =  node1.position.x+node1.posTimeSteps[index].x*exaggeration ;
+				fromPoint.y =  node1.position.y+node1.posTimeSteps[index].y*exaggeration ;
+				fromPoint.z =  node1.position.z+node1.posTimeSteps[index].z*exaggeration ;
 
 				var node = this.scene.getObjectByName('d'+node1.id);
 				//todo check if this is effecient or ject go thought nodes
@@ -497,16 +497,16 @@ threejs1.prototype.renderEuler=function(){
 				node.position.y = fromPoint.y;
 				node.position.z = fromPoint.z;
 
-				node.rotation.x = 0+node1.angTimeSteps[index].x*exageration ;
-				node.rotation.y = 0+node1.angTimeSteps[index].y*exageration ;
-				node.rotation.z = 0+node1.angTimeSteps[index].z*exageration ;
+				node.rotation.x = 0+node1.angTimeSteps[index].x*exaggeration ;
+				node.rotation.y = 0+node1.angTimeSteps[index].y*exaggeration ;
+				node.rotation.z = 0+node1.angTimeSteps[index].z*exaggeration ;
 				
 				this.updateForce(node1.id,getForce(node1.position.z,currTimeStep));
 			
 
-				toPoint.x   =  node2.position.x+node2.posTimeSteps[index].x*exageration ;
-				toPoint.y   =  node2.position.y+node2.posTimeSteps[index].y*exageration ;
-				toPoint.z   =  node2.position.z+node2.posTimeSteps[index].z*exageration ;
+				toPoint.x   =  node2.position.x+node2.posTimeSteps[index].x*exaggeration ;
+				toPoint.y   =  node2.position.y+node2.posTimeSteps[index].y*exaggeration ;
+				toPoint.z   =  node2.position.z+node2.posTimeSteps[index].z*exaggeration ;
 
 				node = this.scene.getObjectByName('d'+node2.id);
 
@@ -514,9 +514,9 @@ threejs1.prototype.renderEuler=function(){
 				node.position.y = toPoint.y;
 				node.position.z = toPoint.z;
 
-				node.rotation.x = 0+node2.angTimeSteps[index].x*exageration ;
-				node.rotation.y = 0+node2.angTimeSteps[index].y*exageration ;
-				node.rotation.z = 0+node2.angTimeSteps[index].z*exageration ;
+				node.rotation.x = 0+node2.angTimeSteps[index].x*exaggeration ;
+				node.rotation.y = 0+node2.angTimeSteps[index].y*exaggeration ;
+				node.rotation.z = 0+node2.angTimeSteps[index].z*exaggeration ;
 
 				this.updateForce(node2.id,getForce(node2.position.z,currTimeStep));
 			
@@ -658,7 +658,7 @@ function guiCreate (three){
 
 	var f1 = gui.addFolder('Displacement Animation '+three.containerName);
 	f1.add(three.setup.animation, 'showDisplacement');
-	f1.add(three.setup.animation, 'exageration', 0, 10e4);
+	f1.add(three.setup.animation, 'exaggeration', 0, 10e4);
 	f1.add(three.setup.animation, 'speed', 0, 5);
 
 	var f2 = gui.addFolder('Stresses Visualization '+three.containerName);
diff --git a/02_Presentation/macro_dice/1rover1.gif b/02_Presentation/macro_dice/1rover1.gif
new file mode 100644
index 0000000000000000000000000000000000000000..880a03fc352af475b3c511c3128cb8b2518e1582
Binary files /dev/null and b/02_Presentation/macro_dice/1rover1.gif differ
diff --git a/02_Presentation/macro_dice/1rover2.gif b/02_Presentation/macro_dice/1rover2.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f3b090dd7342314f4e39d60be464233bae4a8a55
Binary files /dev/null and b/02_Presentation/macro_dice/1rover2.gif differ
diff --git a/02_Presentation/macro_dice/1rover3.gif b/02_Presentation/macro_dice/1rover3.gif
new file mode 100644
index 0000000000000000000000000000000000000000..aa6d39c4300de33fd1747dc799b6d980200585be
Binary files /dev/null and b/02_Presentation/macro_dice/1rover3.gif differ
diff --git a/02_Presentation/macro_dice/1rover4.gif b/02_Presentation/macro_dice/1rover4.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d563d387831ad470e10b6354e9e96bdc578c7769
Binary files /dev/null and b/02_Presentation/macro_dice/1rover4.gif differ
diff --git a/02_Presentation/macro_dice/macro_dice.md b/02_Presentation/macro_dice/macro_dice.md
index 910535d873122fff7e5c24d1111875b3de46c780..a97d5ee530838141d00d7ed18953573f4eddd5b8 100644
--- a/02_Presentation/macro_dice/macro_dice.md
+++ b/02_Presentation/macro_dice/macro_dice.md
@@ -12,22 +12,24 @@ Hardware Implementation:
 
 Using the [MetaVoxel simulation tool](https://gitlab.cba.mit.edu/amiraa/metavoxels):
 
-<img src="./200114_simulation.PNG" width="75%" /><br/>
+<img src="./200114_simulation.PNG" width="80%" /><br/>
 
 ## Robotics Design
 
-<img src="./dice_assembly.gif" width="75%" /><br/>
+<img src="./dice_assembly.gif" width="80%" /><br/>
 
 ## Assembly
 - Option for different kinds of assembly (swarm assembly)
-<img src="./assembly.gif" width="75%" /> <br/>
+  
+<img src="./assembly.gif" width="80%" /> <br/>
 
 ## Control
-<img src="./rover1.gif" width="50%" />
-<img src="./rover2.gif" width="50%" /><br/>
 
-<img src="./r.gif" width="50%" /><br/>
-<img src="./rr.gif" width="50%" /><br/>
+
+<img src="./1rover4.gif" width="40%" />
+<img src="./1rover2.gif" width="40%" /><br/>
+<img src="./1rover1.gif" width="40%" />
+<img src="./1rover3.gif" width="40%" />
 
 
 ## Optimization
diff --git a/02_Presentation/macro_dice/r.gif b/02_Presentation/macro_dice/r.gif
deleted file mode 100644
index 253598e88dc47750ad023196d1b5fec58acba56a..0000000000000000000000000000000000000000
Binary files a/02_Presentation/macro_dice/r.gif and /dev/null differ
diff --git a/02_Presentation/macro_dice/rover1.gif b/02_Presentation/macro_dice/rover1.gif
deleted file mode 100644
index d831f6f6ed16e730b720261e5a5f1acd1e1ae2ae..0000000000000000000000000000000000000000
Binary files a/02_Presentation/macro_dice/rover1.gif and /dev/null differ
diff --git a/02_Presentation/macro_dice/rover2.gif b/02_Presentation/macro_dice/rover2.gif
deleted file mode 100644
index ca258b468696c931ddb66934b379944519ead7fb..0000000000000000000000000000000000000000
Binary files a/02_Presentation/macro_dice/rover2.gif and /dev/null differ
diff --git a/02_Presentation/macro_dice/rover3.gif b/02_Presentation/macro_dice/rover3.gif
deleted file mode 100644
index 253598e88dc47750ad023196d1b5fec58acba56a..0000000000000000000000000000000000000000
Binary files a/02_Presentation/macro_dice/rover3.gif and /dev/null differ
diff --git a/02_Presentation/macro_dice/rr.gif b/02_Presentation/macro_dice/rr.gif
deleted file mode 100644
index 9973036f1a6d3c1ab84d27e69f36dce4aa89570c..0000000000000000000000000000000000000000
Binary files a/02_Presentation/macro_dice/rr.gif and /dev/null differ