NGL.specialOps = {
'note': `This is a monkeypatch to allow HTML control of the structure using the markup defined in https://michelanglo.sgc.ox.ac.uk/docs/markup
/* This script adds to NGL the following...
* NGL.stageIds an object taht stores id: stages
* NGL.getStage(id) is a getter for this.
* NGL.specialOps
** NGL.specialOps.showDomain(id, selection, color, view), which focuses stage to show the given selection with the given color
** NGL.specialOps.showResidue(id, selection, color, radius, view), which focuses on the selection and their neighbourhood by n radius
** NGL.specialOps.showClash(id, selection, color, radius, tolerance, view) which shows the clashes that selection may have
** NGL.specialOps.slowOrient deals with the view if provided for these previous three.
** NGL.specialOps.showTitle(id,text) shows the title.
** NGL.specialOps.multiLoader(id, proteins, backgroundColor, startIndex), see below about proteins object
** NGL.specialOps.postInitialise() gets called by load if the stage was not set via multiLoader
** NGL.specialOps.load(option)
** NGL.specialOps.removeImg() switches the image off
** NGL.specialOps._run_loadFx() and a few others.
* NGL.Stage extra prototypes
** NGL.Stage.prototype.getComponentByType allowing stage objects to return a list of components. e.g. .getComponentsByType('structure') to select the protein.
** NGL.Stage.prototype.getComponentByType allowing stage objects to return the first component. e.g. .getComponentByType('structure') to select the protein. If there is none, it raises an error.
** NGL.Stage.prototype.removeComponentsbyName array version.
** NGL.Stage.prototype.removeClashes removes clashes and the rotation.
* $.prototype.protein to enable a link --will run on click.
NB. this file ends with $('[data-toggle="protein"]').protein(); to activate all links.
proteins is an array of {name: 'unique_name', type: 'rcsb' (default) | 'url' | 'data', value: xxx, 'ext': 'pdb' (default), loadFx: xxx}
where the optional loadFx is a function that is run on loading.
`, version: '1.1'
};
NGL.specialOps.version = '0.4.0';
NGL.stageIds = {};
NGL.getStage = function (id) {
// returns a stage stored in stageIds ...
// unless somehow a stage was given.
if (id === undefined) {
if (myData) {
id = myData.ids[0];
} else {
id = 'viewport';
}
}
if (typeof id === 'string') {
id = id.replace('#', '');
if (id in NGL.stageIds) {
return NGL.stageIds[id];
} else if ($('#' + id + ' img').length !== 0) {
if (NGL.Debug) {
console.log('You have not activated the stage yet!');
}
// this = NGL.specialOps
NGL.specialOps.load(0, false, id);
} else if (window.stage !== undefined) {
if (NGL.Debug) {
console.log('No stored stage in .stageIds, but there is a window.stage...');
}
return window.stage;
} else {
if (NGL.Debug) {
console.log('No stored stage in .stageIds nor is a window.stage...');
}
return undefined;
}
} else if (id.compList !== undefined) { //it's an Stage
return id;
} else if (id.stage !== undefined) { //it's an Component
return id.stage;
} else {
if (NGL.Debug) {
console.log('No idea what this is.');
}
}
};
///////////////////////////// NGL.SpecialOps ///////////////
NGL.specialOps.colorDefaults = {'domain': 'green', 'residue': 'hotpink'};
/// show series.
NGL.specialOps.slowOrient = function (id, view, selection) {
let protein = NGL.getStage(id).getComponentByType('structure');
//wrapper for a string view.
if (view === false) {
// pass. orient is disabled.
} else if ((view === undefined) && (selection === null)) {
protein.autoView(2000);
} else if ((view === undefined) && (selection !== null)) {
protein.autoView(selection, 2000);
} else if (typeof view !== 'string') {
protein.autoView(2000);
NGL.getStage(id).animationControls.orient(view, 2000);
} else { //array.
protein.autoView(2000);
NGL.getStage(id).animationControls.orient(JSON.parse(view), 2000);
}
};
NGL.specialOps.enableClickToShow = function(id) {
// this allows users to see what residues they clicked.
if (window.myData.clicks === undefined) {window.myData.clicks = {}}
if (window.myData.clicks[id] === undefined) {window.myData.clicks[id] = {residues: new Set(), representation: undefined};}
if (window.myData.clicks[id].active === undefined) {
window.myData.clicks[id].active = true;
NGL.getStage(id).signals.clicked.add(pickingProxy => {
// for testing: NGL.getStage().compList[0].structure.getAtomProxy(50)
if (pickingProxy && (pickingProxy.atom || pickingProxy.bond )){
const atom = pickingProxy.atom || pickingProxy.closestBondAtom;
const name = atom.qualifiedName().match(/(\d+\:\w)\..{1,5}/)[1]; //"[PRO]1114:A.C"
const component = pickingProxy.component;
// this = NGL.specialOps
this.showClickedResidue(id, name, component);
}
});
}
};
NGL.specialOps.showClickedResidue = function(id, name, component, color) {
component = component || NGL.getStage(id).compList[0];
// Check if clicked atom is in array
if (myData.clicks[id].residues.has(name)) {
myData.clicks[id].residues.delete(name);
} else {
myData.clicks[id].residues.add(name);
}
if (myData.clicks[id].representation !== undefined) {
component.removeRepresentation(myData.clicks[id].representation);
}
const seleName = Array.from(myData.clicks[id].residues).join(' or ');
if (myData.clicks[id].residues.size !== 0) {
const params = {sele: seleName};
if (color !== undefined) {
params.colorValue = color;
}
myData.clicks[id].representation = component.addRepresentation("hyperball", params);
this.showTitle(id,'Clicked: '+name);
this.slowOrient(id, false, name);
}
}
NGL.specialOps.showDomain = function (id, selection, color, view, keepPrevious) {
if (NGL.debug) {
console.log('Show domain ' + selection)
}
// Prepare
NGL.specialOps.postInitialise(); //worst case schenario prevention.
color = color || NGL.specialOps.colorDefaults['domain'];
//selection = typeof selection === "string" ? new NGL.Selection(selection) : selection;
let proteins = NGL.getStage(id).getComponentsByType('structure');
if (!keepPrevious) {
NGL.getStage(id).removeClashes();
proteins.map(protein => protein.removeAllRepresentations());
}
// Color in!
let schemeId = NGL.ColormakerRegistry.addSelectionScheme([[color, selection], ["white", "*"]]);
myData.current_cartoonScheme = schemeId;
let prop = {color: schemeId, smoothSheet: true};
// determine span
if (keepPrevious && !! selection) {
prop['sele'] = selection;
}
proteins.map(protein => protein.addRepresentation("cartoon", prop));
NGL.specialOps.slowOrient(id, view, selection);
};
NGL.specialOps.showResidue = function (id, selection, color, radius, view, label, cartoonScheme, keepPrevious, lighterColor) { //'chainid'
if (NGL.debug) {
console.log('Show residues ' + selection)
}
//try the selection (its better to crash now than after clearing the scene...)
// Prepare
NGL.specialOps.postInitialise(); //worst case schenario prevention.
// defaults
color = color || NGL.specialOps.colorDefaults['residue'];
radius = radius || 4;
//selection = typeof selection === "string" ? new NGL.Selection(selection) : selection;
//get protein
let proteins = NGL.getStage(id).getComponentsByType('structure');
let firstExpandedSelection = proteins.map(protein => {
// corner case that there is no cartoon.
if (protein.reprList.length === 0) {
/* so if it is undefined (default) and there is a current Scheme it is set to that but if for some reason there is
no current scheme and or cartoonScheme is none or false it goes white (as before).
else the user has specified something like chainid.
*/
let prop = {smoothSheet: true};
// determine color
if (((cartoonScheme === 'previous') || (cartoonScheme === undefined)) && (myData.current_cartoonScheme)) {
prop['color'] = myData.current_cartoonScheme;
protein.addRepresentation("cartoon", prop);
} else if ((cartoonScheme === undefined) || (cartoonScheme === false) || (cartoonScheme === 'false') || (cartoonScheme === 'none')) {
prop['color'] = NGL.ColormakerRegistry.addSelectionScheme([["white", "*"]]);
} else {
prop['color'] = cartoonScheme;
}
protein.addRepresentation("cartoon", prop);
}
// Remove all bar cartoon-like representation
['ball+stick', 'contact', 'label', 'hyperball', 'licorice', 'line', 'point', 'spacefill', 'surface', 'tube'].map(function (value) {
protein.stage.getRepresentationsByName(value).forEach(function (o) {
if (!keepPrevious) {
protein.removeRepresentation(o);
}
}); //.forEach representation
}); //.map representation name
//remove clashes
if (!keepPrevious) {
NGL.getStage(id).removeClashes();
}
const expanded = NGL.specialOps.expandSelection(protein, selection, radius);
protein.addRepresentation("licorice", {sele: expanded, colorValue: lighterColor});
protein.addRepresentation("hyperball", {sele: selection.toString(), colorValue: color});
protein.addRepresentation("contact", {
masterModelIndex: 0,
weakHydrogenBond: true,
maxHbondDonPlaneAngle: 35,
sele: expanded,
});
if (!!label) {
protein.addRepresentation('label', {
sele: selection.toString(),
color: color,
showBackground: true,
backgroundColor: 'white',
labelGrouping: 'residue'
});
}
return expanded;
})[0];
//reorient.
NGL.specialOps.slowOrient(id, view, firstExpandedSelection);
};
NGL.specialOps.showClash = function (id, selection, color, radius, tolerance, view, label, cartoonScheme, keepPrevious) {
// This find and shows clashes at a given selection. it calls getClash to find them and then addSpikyball to add them.
// Prepare
NGL.specialOps.postInitialise(); //worst case schenario prevention.
radius = radius || 4;
NGL.specialOps.showResidue(id, selection, color, radius, view, label, cartoonScheme, keepPrevious);
let proteins = NGL.getStage(id).getComponentsByType('structure');
proteins.map(protein => NGL.specialOps.getClash(protein, selection)
.map(position => NGL.specialOps.addSpikyball(protein.stage, position)));
};
NGL.specialOps.showSurface = function (id, selection, view, opacity, keepPrevious) {
if (NGL.debug) {
console.log('Show surface ' + selection)
}
// Prepare
NGL.specialOps.postInitialise(); //worst case scenario prevention.
selection = selection || "polymer";
var color = 'electrostatic'; //not changeable for now.
var proteins = NGL.getStage(id).getComponentsByType('structure');
proteins.map(protein => {
protein.addRepresentation("surface", {
sele: selection,
colorScheme: color,
colorDomain: [-0.3, 0.3],
opacity: opacity || 1,
surfaceType: "av"
});
});
NGL.specialOps.slowOrient(id, view, selection);
};
NGL.specialOps.showBlur = function (id, selection, color, radius, view, scale, label, keepPrevious) {
if (NGL.debug) {
console.log('Show surface ' + selection)
}
// Prepare
NGL.specialOps.postInitialise(); //worst case schenario prevention.
let proteins = NGL.getStage(id).getComponentsByType('structure');
NGL.getStage(id).removeClashes();
proteins.map(protein => {
if (!keepPrevious) {
protein.removeAllRepresentations();
}
let bfactors = protein.structure.atomStore.bfactor;
//console.log(scale);
//console.log(bfactors.length / bfactors.reduce((a,b)=> a+b, 0));
scale = scale || bfactors.length / bfactors.reduce((a, b) => a + b, 0);
protein.addRepresentation("tube", {
sele: "polymer",
radiusType: "bfactor",
radiusScale: scale,
color: "bfactor",
colorScale: "RdYlBu"
});
});
if (selection) {
NGL.specialOps.showResidue(id, selection, color, radius, view, label, undefined, true);
//cartoonScheme must/cannot not be implemented!
} else {
NGL.specialOps.slowOrient(id, view);
}
};
NGL.specialOps.doubleLoader = function (stage, partner, resolve) {
let N_proteins = stage.getComponentsByType('structure').length;
if (N_proteins === 0) {
throw 'no protein.'
} else if (N_proteins === 1) {
//load the partner
if (NGL.debug) {
console.log(partner);
console.log(window[partner]);
}
let m = myData.proteins.filter((prot) => prot.name === partner || prot.value === partner)[0];
let p;
window.myData.partner = partner;
if (m.type === 'data') {
let pdbblock = m.isVariable === undefined ? m.value : window[partner];
pdbblock = pdbblock.replace(/^ +/gm, ''); //remove leading spaces
p = stage.loadFile(new Blob([pdbblock, {type: 'text/plain'}]), {ext: 'pdb', firstModelOnly: true});
} else if (m.type === 'rcsb') {
p = stage.loadFile('rcsb://' + m.value);
} else if (m.type === 'url') {
let ext = m.value.replace(/\?.*/, '').replace('.txt', '').split('.').pop();
p = stage.loadFile(m.value, {ext: ext, firstModelOnly: true});
} else {
throw 'Unknown type ' + m.type
}
p.then(mutProtein => {
let proteins = stage.getComponentsByType('structure');
return resolve(proteins[0], mutProtein);
});
} else if (window.myData.partner !== partner) {
stage.removeComponent(stage.compList[1]);
return NGL.specialOps.doubleLoader(stage, partner, resolve);
} else {
let proteins = stage.getComponentsByType('structure');
return resolve(proteins[0], proteins[1]);
}
};
NGL.specialOps.splitColor = function (color) {
let wtColor = 0x00c78e;
let mutColor = 0xff5733;
if (color !== undefined) {
if (typeof (color) === 'string' && color.includes(' ')) {
wtColor = color.split(/\W/)[0];
mutColor = color.split(/\W/)[1];
} else {
wtColor = color;
mutColor = color;
}
}
return [wtColor, mutColor];
};
NGL.specialOps.showOverlay = function (id, partner, selection, color, radius, view, label, keepPrevious) {
if (keepPrevious) {
alert('Cannot use overlay in multiselection mode.')
}
// to do. deal with color.
// Prepare
let [wtColor, mutColor] = NGL.specialOps.splitColor(color);
radius = radius || 4;
NGL.specialOps.postInitialise(); //worst case schenario prevention.
const stage = NGL.getStage(id);
stage.removeClashes();
const commonChange = (protein, color) => {
protein.removeAllRepresentations();
protein.addRepresentation("cartoon", {colorValue: color, sele: '*'});
protein.addRepresentation("hyperball", {colorValue: color, sele: selection});
const expanded = NGL.specialOps.expandSelection(protein, selection, radius);
const lighterColor = '#' + NGL.Colormaker.prototype.colorToArray(color)
.map(v => Math.min(parseInt(v * 2. * 255), 255)
.toString(16).padStart(2, '0'))
.join('');
console.log(lighterColor);
protein.addRepresentation("licorice", {sele: expanded, colorValue: lighterColor});
protein.addRepresentation("contact", {
masterModelIndex: 0,
weakHydrogenBond: true,
maxHbondDonPlaneAngle: 35,
sele: expanded
});
};
const wildtypeChange = (wtProtein) => {
commonChange(wtProtein, wtColor);
};
const mutChange = (mutProtein) => {
commonChange(mutProtein, mutColor);
NGL.specialOps.getClash(mutProtein, selection)
.map(position => NGL.specialOps.addSpikyball(mutProtein.stage, position));
};
NGL.specialOps.doubleLoader(stage, partner, (wt, mt) => {
mutChange(mt);
wildtypeChange(wt);
if (!!view) {
NGL.specialOps.slowOrient(id, view);
} else {
wt.autoView(selection, 2000);
}
if (!!label) {
NGL.specialOps.showTitle(id, label);
}
});
};
NGL.specialOps.showDomainOverlay = function (id, partner, selection, color, view, label, keepPrevious) {
if (keepPrevious) {
alert('Cannot use overlay in multiselection mode.')
}
// to do. deal with color.
// Prepare
let [wtColor, mutColor] = NGL.specialOps.splitColor(color);
const change = (protein, color, selection) => {
protein.removeAllRepresentations();
protein.addRepresentation("cartoon", {color: 'white', sele: `not (${selection})`, smoothSheet: true});
protein.addRepresentation("cartoon", {color: color, sele: selection, smoothSheet: true});
};
NGL.specialOps.postInitialise(); //worst case schenario prevention.
const stage = NGL.getStage(id);
stage.removeClashes();
NGL.specialOps.doubleLoader(stage, partner, (wt, mt) => {
change(mt, mutColor, selection);
change(wt, wtColor, selection);
if (!!view) {
NGL.specialOps.slowOrient(id, view);
} else {
wt.autoView(selection, 2000);
}
});
};
/// other.
NGL.specialOps.isValid = (id, sele) => NGL.getStage(id).getComponentByType('structure').structure.getView(new NGL.Selection(sele)).atomCount > 0;
NGL.specialOps.expandSelection = (protein, selection, radius) => {
let selector = new NGL.Selection(selection.toString());
const atomSet = protein.structure.getAtomSetWithinSelection(selector, parseFloat(radius));
// expand selection to complete groups
const atomSet2 = protein.structure.getAtomSetWithinGroup(atomSet);
// mod of atomset to prevent it from including the original selection and connecting atoms with it.
// the latter does not seem to do anything.
return atomSet2.toSeleString() + ' and not (' + selection.toString() + ' and not (.C or .N)';
};
NGL.specialOps.getClash = function (protein, selection, tolerance) {
tolerance = tolerance || 1; //how much is the wiggle room. 0.2 Å is probs good.
// Find what clashes in the conponent protein.
let clashPositions = [];
protein.structure.getView(new NGL.Selection(selection.toString()))
.eachAtom(function (atom) {
protein.structure.eachAtom(function (neighbour) {
if ([atom.distanceTo(neighbour) < atom.vdw + neighbour.vdw - tolerance, //distance is too close
!atom.hasBondTo(neighbour), //they are not bonded.
atom.residueIndex !== neighbour.residueIndex, //they are not intra-residue
!(atom.atomname === 'C' && neighbour.atomname === 'N' && parseInt(atom.residueIndex) === parseInt(neighbour.residueIndex) - 1), // not a C-N bond at C-term
!(atom.atomname === 'N' && neighbour.atomname === 'C' && parseInt(atom.residueIndex) - 1 === parseInt(neighbour.residueIndex)), // not a C-N bond at N-term
].every((s) => !!s)) {
//take note to create the ball
clashPositions.push([atom.x / 2 + neighbour.x / 2, atom.y / 2 + neighbour.y / 2, atom.z / 2 + neighbour.z / 2]);
if (NGL.Debug) {
console.log('Clash between ' + atom.atomname + ' of residue (' + atom.vdw.toString() + ' Å) ' + atom.residueIndex + ' and ' +
neighbour.atomname + ' of residue ' + neighbour.residueIndex + ' (' + atom.vdw.toString() + ' Å). Distance: ' + atom.distanceTo(neighbour).toString() + ' cutoff: ' + (atom.vdw + neighbour.vdw - tolerance).toString());
}
} //end if
}); //end neigh atom
}); //end this atom
return clashPositions;
};
NGL.specialOps.addSpikyball = function (stage, position) {
//position is x, y, z
const refmesh = [-0.01, 0.17, 0.34, -0.08, 0.08, 0.11, -0.06, 0.04, 0.13, 0.19,
0.15, -0.29, 0.05, 0.0, -0.16, 0.02, 0.04, -0.15, 0.01, -0.15,
-0.35, 0.0, -0.15, -0.35, 0.0, 0.0, -0.16, 0.33, 0.17, 0.08,
0.33, 0.16, 0.09, 0.15, 0.04, -0.02, 0.19, -0.18, 0.27, 0.05,
-0.14, 0.07, 0.09, -0.11, 0.05, -0.01, 0.15, 0.35, -0.01, 0.16,
0.34, -0.06, 0.04, 0.13, 0.01, -0.15, -0.35, 0.05, 0.0, -0.16,
0.06, -0.04, -0.13, 0.33, 0.17, 0.08, 0.13, 0.08, -0.04, 0.11,
0.11, 0.0, 0.19, -0.18, 0.27, 0.19, -0.18, 0.28, 0.02, -0.11,
0.1, -0.01, 0.15, 0.35, -0.05, 0.0, 0.16, 0.0, 0.0, 0.16,
0.01, -0.17, -0.34, 0.01, -0.16, -0.34, 0.06, -0.04, -0.13, 0.32,
0.18, 0.1, 0.32, 0.18, 0.09, 0.11, 0.11, 0.0, 0.01, -0.17,
-0.34, 0.08, -0.08, -0.11, 0.04, -0.11, -0.1, 0.32, 0.18, 0.1,
0.08, 0.14, 0.02, 0.08, 0.11, 0.07, 0.01, 0.15, 0.35, 0.0,
0.15, 0.35, 0.0, 0.0, 0.16, 0.01, 0.15, 0.35, 0.05, 0.0,
0.16, 0.06, 0.04, 0.13, 0.32, 0.17, 0.12, 0.32, 0.18, 0.11,
0.08, 0.11, 0.07, -0.32, 0.17, 0.12, -0.32, 0.16, 0.12, -0.11,
0.04, 0.1, 0.0, -0.18, -0.33, 0.0, -0.18, -0.34, 0.04, -0.11,
-0.1, 0.32, 0.17, 0.12, 0.08, 0.08, 0.11, 0.11, 0.04, 0.1,
-0.32, 0.17, 0.12, -0.08, 0.08, 0.11, -0.08, 0.11, 0.07, 0.0,
-0.18, -0.33, 0.0, -0.14, -0.09, -0.04, -0.11, -0.1, 0.32, -0.17,
-0.12, 0.32, -0.18, -0.11, 0.08, -0.11, -0.07, 0.33, 0.15, 0.11,
0.32, 0.16, 0.12, 0.11, 0.04, 0.1, -0.32, 0.18, 0.1, -0.32,
0.18, 0.11, -0.08, 0.11, 0.07, 0.32, -0.17, -0.12, 0.08, -0.08,
-0.11, 0.11, -0.04, -0.1, 0.33, 0.15, 0.11, 0.13, 0.0, 0.09,
0.15, 0.0, 0.05, -0.32, 0.18, 0.1, -0.08, 0.14, 0.02, -0.11,
0.11, 0.0, 0.33, -0.15, -0.11, 0.32, -0.16, -0.12, 0.11, -0.04,
-0.1, -0.33, 0.17, 0.08, -0.32, 0.18, 0.09, -0.11, 0.11, 0.0,
0.33, -0.15, -0.11, 0.13, 0.0, -0.09, 0.15, 0.0, -0.05, 0.33,
0.15, 0.09, 0.33, 0.15, 0.1, 0.15, 0.0, 0.05, -0.33, 0.17,
0.08, -0.13, 0.08, -0.04, -0.15, 0.04, -0.02, 0.33, 0.15, 0.09,
0.17, 0.0, 0.0, 0.15, 0.04, -0.02, 0.33, -0.15, -0.09, 0.33,
-0.15, -0.1, 0.15, 0.0, -0.05, -0.19, -0.15, 0.29, -0.19, -0.16,
0.29, -0.02, -0.04, 0.15, -0.33, 0.15, 0.09, -0.33, 0.16, 0.09,
-0.15, 0.04, -0.02, 0.33, -0.15, -0.09, 0.17, 0.0, 0.0, 0.15,
-0.04, 0.02, -0.19, -0.15, 0.29, -0.05, 0.0, 0.16, -0.09, 0.0,
0.13, -0.33, 0.15, 0.09, -0.17, 0.0, 0.0, -0.15, 0.0, 0.05,
0.33, -0.17, -0.08, 0.33, -0.16, -0.09, 0.15, -0.04, 0.02, -0.21,
-0.15, 0.27, -0.2, -0.15, 0.28, -0.09, 0.0, 0.13, 0.33, -0.17,
-0.08, 0.13, -0.08, 0.04, 0.11, -0.11, 0.0, -0.21, -0.15, 0.27,
-0.13, 0.0, 0.1, -0.13, -0.04, 0.07, -0.33, 0.15, 0.11, -0.33,
0.15, 0.1, -0.15, 0.0, 0.05, -0.33, 0.15, 0.11, -0.13, 0.0,
0.09, -0.11, 0.04, 0.1, -0.21, -0.17, 0.26, -0.21, -0.16, 0.27,
-0.13, -0.04, 0.07, -0.21, 0.17, -0.26, -0.21, 0.16, -0.27, -0.13,
0.04, -0.07, 0.32, -0.18, -0.1, 0.32, -0.18, -0.09, 0.11, -0.11,
0.0, -0.21, -0.17, 0.26, -0.13, -0.08, 0.04, -0.09, -0.11, 0.05,
-0.21, 0.17, -0.26, -0.13, 0.08, -0.04, -0.09, 0.11, -0.05, 0.32,
-0.18, -0.1, 0.08, -0.14, -0.02, 0.08, -0.11, -0.07, 0.0, -0.38,
-0.01, 0.0, -0.38, -0.01, -0.04, -0.14, -0.05, -0.19, -0.18, 0.27,
-0.2, -0.18, 0.27, -0.09, -0.11, 0.05, -0.19, 0.18, -0.27, -0.2,
0.18, -0.27, -0.09, 0.11, -0.05, -0.19, -0.18, 0.27, -0.05, -0.14,
0.07, -0.02, -0.11, 0.1, -0.19, 0.18, -0.27, -0.05, 0.14, -0.07,
-0.02, 0.11, -0.1, -0.01, -0.38, 0.0, -0.01, -0.38, 0.0, -0.06,
-0.14, 0.02, 0.0, -0.38, -0.01, 0.0, -0.14, -0.08, 0.04, -0.14,
-0.05, -0.18, 0.17, -0.28, -0.19, 0.18, -0.28, -0.02, 0.11, -0.1,
0.0, 0.38, -0.01, 0.0, 0.39, 0.0, 0.01, 0.38, 0.0, -0.01,
0.38, 0.0, 0.0, 0.39, 0.0, 0.0, 0.38, -0.01, 0.0, 0.38,
0.01, 0.0, 0.39, 0.0, -0.01, 0.38, 0.0, 0.0, 0.38, 0.01,
0.0, 0.39, 0.0, 0.0, 0.38, 0.01, 0.01, 0.38, 0.0, 0.0,
0.39, 0.0, 0.0, 0.38, 0.01, 0.0, 0.18, 0.34, 0.0, 0.17,
0.35, 0.01, 0.16, 0.34, 0.0, 0.18, 0.34, 0.0, 0.17, 0.35,
0.0, 0.18, 0.34, -0.01, 0.16, 0.34, 0.0, 0.17, 0.35, 0.0,
0.18, 0.34, 0.0, 0.15, 0.35, 0.0, 0.17, 0.35, -0.01, 0.16,
0.34, 0.01, 0.16, 0.34, 0.0, 0.17, 0.35, 0.0, 0.15, 0.35,
-0.32, 0.18, 0.11, -0.33, 0.17, 0.1, -0.32, 0.16, 0.12, -0.32,
0.18, 0.09, -0.33, 0.17, 0.1, -0.32, 0.18, 0.11, -0.33, 0.16,
0.09, -0.33, 0.17, 0.1, -0.32, 0.18, 0.09, -0.33, 0.15, 0.1,
-0.33, 0.17, 0.1, -0.33, 0.16, 0.09, -0.32, 0.16, 0.12, -0.33,
0.17, 0.1, -0.33, 0.15, 0.1, -0.2, 0.18, -0.27, -0.2, 0.17,
-0.28, -0.21, 0.16, -0.27, -0.19, 0.18, -0.28, -0.2, 0.17, -0.28,
-0.2, 0.18, -0.27, -0.19, 0.16, -0.29, -0.2, 0.17, -0.28, -0.19,
0.18, -0.28, -0.2, 0.15, -0.28, -0.2, 0.17, -0.28, -0.19, 0.16,
-0.29, -0.21, 0.16, -0.27, -0.2, 0.17, -0.28, -0.2, 0.15, -0.28,
0.19, 0.18, -0.28, 0.2, 0.17, -0.28, 0.19, 0.16, -0.29, 0.2,
0.18, -0.27, 0.2, 0.17, -0.28, 0.19, 0.18, -0.28, 0.21, 0.16,
-0.27, 0.2, 0.17, -0.28, 0.2, 0.18, -0.27, 0.2, 0.15, -0.28,
0.2, 0.17, -0.28, 0.21, 0.16, -0.27, 0.19, 0.16, -0.29, 0.2,
0.17, -0.28, 0.2, 0.15, -0.28, 0.32, 0.18, 0.09, 0.33, 0.17,
0.1, 0.33, 0.16, 0.09, 0.32, 0.18, 0.11, 0.33, 0.17, 0.1,
0.32, 0.18, 0.09, 0.32, 0.16, 0.12, 0.33, 0.17, 0.1, 0.32,
0.18, 0.11, 0.33, 0.15, 0.1, 0.33, 0.17, 0.1, 0.32, 0.16,
0.12, 0.33, 0.16, 0.09, 0.33, 0.17, 0.1, 0.33, 0.15, 0.1,
-0.2, -0.15, 0.28, -0.2, -0.17, 0.28, -0.19, -0.16, 0.29, -0.21,
-0.16, 0.27, -0.2, -0.17, 0.28, -0.2, -0.15, 0.28, -0.2, -0.18,
0.27, -0.2, -0.17, 0.28, -0.21, -0.16, 0.27, -0.19, -0.18, 0.28,
-0.2, -0.17, 0.28, -0.2, -0.18, 0.27, -0.19, -0.16, 0.29, -0.2,
-0.17, 0.28, -0.19, -0.18, 0.28, -0.33, -0.16, -0.09, -0.33, -0.17,
-0.1, -0.32, -0.18, -0.09, -0.33, -0.15, -0.1, -0.33, -0.17, -0.1,
-0.33, -0.16, -0.09, -0.32, -0.16, -0.12, -0.33, -0.17, -0.1, -0.33,
-0.15, -0.1, -0.32, -0.18, -0.11, -0.33, -0.17, -0.1, -0.32, -0.16,
-0.12, -0.32, -0.18, -0.09, -0.33, -0.17, -0.1, -0.32, -0.18, -0.11,
-0.01, -0.16, -0.34, 0.0, -0.17, -0.35, 0.0, -0.18, -0.34, 0.0,
-0.15, -0.35, 0.0, -0.17, -0.35, -0.01, -0.16, -0.34, 0.01, -0.16,
-0.34, 0.0, -0.17, -0.35, 0.0, -0.15, -0.35, 0.0, -0.18, -0.34,
0.0, -0.17, -0.35, 0.01, -0.16, -0.34, 0.0, -0.18, -0.34, 0.0,
-0.17, -0.35, 0.0, -0.18, -0.34, 0.32, -0.16, -0.12, 0.33, -0.17,
-0.1, 0.32, -0.18, -0.11, 0.33, -0.15, -0.1, 0.33, -0.17, -0.1,
0.32, -0.16, -0.12, 0.33, -0.16, -0.09, 0.33, -0.17, -0.1, 0.33,
-0.15, -0.1, 0.32, -0.18, -0.09, 0.33, -0.17, -0.1, 0.33, -0.16,
-0.09, 0.32, -0.18, -0.11, 0.33, -0.17, -0.1, 0.32, -0.18, -0.09,
0.2, -0.18, 0.27, 0.2, -0.17, 0.28, 0.19, -0.18, 0.28, 0.21,
-0.16, 0.27, 0.2, -0.17, 0.28, 0.2, -0.18, 0.27, 0.2, -0.15,
0.28, 0.2, -0.17, 0.28, 0.21, -0.16, 0.27, 0.19, -0.16, 0.29,
0.2, -0.17, 0.28, 0.2, -0.15, 0.28, 0.19, -0.18, 0.28, 0.2,
-0.17, 0.28, 0.19, -0.16, 0.29, 0.01, -0.38, 0.0, 0.0, -0.39,
0.0, 0.0, -0.38, -0.01, 0.0, -0.38, 0.01, 0.0, -0.39, 0.0,
0.01, -0.38, 0.0, -0.01, -0.38, 0.0, 0.0, -0.39, 0.0, 0.0,
-0.38, 0.01, 0.0, -0.38, -0.01, 0.0, -0.39, 0.0, -0.01, -0.38,
0.0, 0.0, -0.38, -0.01, 0.0, -0.39, 0.0, 0.0, -0.38, -0.01,
-0.15, 0.04, -0.02, -0.15, 0.04, -0.02, -0.17, 0.0, 0.0, 0.17,
0.0, 0.0, 0.17, 0.0, 0.0, 0.15, -0.04, 0.02, -0.05, 0.0,
0.16, -0.05, 0.0, 0.16, -0.09, 0.0, 0.13, -0.17, 0.0, 0.0,
-0.17, 0.0, 0.0, -0.15, 0.0, 0.05, 0.15, -0.04, 0.02, 0.15,
-0.04, 0.02, 0.13, -0.08, 0.04, -0.09, 0.0, 0.13, -0.09, 0.0,
0.13, -0.13, 0.0, 0.1, 0.13, -0.08, 0.04, 0.13, -0.08, 0.04,
0.11, -0.11, 0.0, -0.13, 0.0, 0.1, -0.13, 0.0, 0.1, -0.13,
-0.04, 0.07, -0.15, 0.0, 0.05, -0.15, 0.0, 0.05, -0.13, 0.0,
0.09, -0.13, 0.0, 0.09, -0.13, 0.0, 0.09, -0.11, 0.04, 0.1,
-0.13, -0.04, 0.07, -0.13, -0.04, 0.07, -0.13, -0.08, 0.04, -0.13,
0.04, -0.07, -0.13, 0.04, -0.07, -0.13, 0.08, -0.04, 0.11, -0.11,
0.0, 0.11, -0.11, 0.0, 0.08, -0.14, -0.02, -0.13, -0.08, 0.04,
-0.13, -0.08, 0.04, -0.09, -0.11, 0.05, -0.13, 0.08, -0.04, -0.13,
0.08, -0.04, -0.09, 0.11, -0.05, 0.08, -0.14, -0.02, 0.08, -0.14,
-0.02, 0.08, -0.11, -0.07, -0.09, -0.11, 0.05, -0.09, -0.11, 0.05,
-0.05, -0.14, 0.07, -0.09, 0.11, -0.05, -0.09, 0.11, -0.05, -0.05,
0.14, -0.07, -0.05, -0.14, 0.07, -0.05, -0.14, 0.07, -0.02, -0.11,
0.1, -0.05, 0.14, -0.07, -0.05, 0.14, -0.07, -0.02, 0.11, -0.1,
-0.02, 0.11, -0.1, -0.02, 0.11, -0.1, 0.0, 0.08, -0.14, 0.06,
0.14, -0.02, 0.06, 0.14, -0.02, 0.05, 0.14, -0.07, -0.02, -0.11,
0.1, -0.02, -0.11, 0.1, 0.0, -0.08, 0.14, -0.04, -0.14, -0.05,
-0.04, -0.14, -0.05, 0.0, -0.14, -0.08, 0.0, 0.08, -0.14, 0.0,
0.08, -0.14, -0.02, 0.04, -0.15, 0.05, 0.14, -0.07, 0.05, 0.14,
-0.07, 0.0, 0.14, -0.07, 0.0, -0.08, 0.14, 0.0, -0.08, 0.14,
-0.02, -0.04, 0.15, -0.06, -0.14, 0.02, -0.06, -0.14, 0.02, -0.08,
-0.14, -0.02, -0.11, -0.11, 0.0, -0.11, -0.11, 0.0, -0.13, -0.08,
0.04, -0.02, 0.04, -0.15, -0.02, 0.04, -0.15, -0.05, 0.0, -0.16,
0.0, 0.14, -0.07, 0.0, 0.14, -0.07, -0.05, 0.14, -0.07, 0.0,
-0.14, -0.08, 0.0, -0.14, -0.08, 0.04, -0.14, -0.05, -0.13, -0.08,
0.04, -0.13, -0.08, 0.04, -0.15, -0.04, 0.02, -0.05, 0.0, -0.16,
-0.05, 0.0, -0.16, -0.09, 0.0, -0.13, -0.05, 0.14, -0.07, -0.05,
0.14, -0.07, -0.06, 0.14, -0.02, -0.05, -0.14, 0.07, -0.05, -0.14,
0.07, -0.06, -0.14, 0.02, -0.15, -0.04, 0.02, -0.15, -0.04, 0.02,
-0.17, 0.0, 0.0, -0.06, 0.14, -0.02, -0.06, 0.14, -0.02, -0.08,
0.14, 0.02, -0.08, -0.14, -0.02, -0.08, -0.14, -0.02, -0.04, -0.14,
-0.05, -0.17, 0.0, 0.0, -0.17, 0.0, 0.0, -0.15, 0.0, -0.05,
-0.09, 0.0, -0.13, -0.09, 0.0, -0.13, -0.13, 0.0, -0.1, -0.08,
0.14, 0.02, -0.08, 0.14, 0.02, -0.04, 0.14, 0.05, -0.13, 0.0,
-0.1, -0.13, 0.0, -0.1, -0.13, 0.04, -0.07, -0.15, 0.0, -0.05,
-0.15, 0.0, -0.05, -0.13, 0.0, -0.09, 0.0, -0.14, 0.07, 0.0,
-0.14, 0.07, -0.05, -0.14, 0.07, 0.02, 0.04, -0.15, 0.02, 0.04,
-0.15, 0.0, 0.08, -0.14, -0.04, 0.14, 0.05, -0.04, 0.14, 0.05,
0.0, 0.14, 0.08, -0.13, 0.0, -0.09, -0.13, 0.0, -0.09, -0.11,
-0.04, -0.1, 0.0, 0.08, -0.14, 0.0, 0.08, -0.14, 0.02, 0.11,
-0.1, 0.0, 0.14, 0.08, 0.0, 0.14, 0.08, 0.04, 0.14, 0.05,
-0.11, -0.04, -0.1, -0.11, -0.04, -0.1, -0.08, -0.08, -0.11, 0.05,
-0.14, 0.07, 0.05, -0.14, 0.07, 0.0, -0.14, 0.07, 0.02, 0.11,
-0.1, 0.02, 0.11, -0.1, 0.05, 0.14, -0.07, -0.08, -0.08, -0.11,
-0.08, -0.08, -0.11, -0.08, -0.11, -0.07, 0.0, -0.08, 0.14, 0.0,
-0.08, 0.14, 0.02, -0.11, 0.1, 0.05, 0.14, -0.07, 0.05, 0.14,
-0.07, 0.09, 0.11, -0.05, 0.04, 0.14, 0.05, 0.04, 0.14, 0.05,
0.08, 0.14, 0.02, 0.08, -0.14, -0.02, 0.08, -0.14, -0.02, 0.06,
-0.14, 0.02, 0.08, 0.14, 0.02, 0.08, 0.14, 0.02, 0.06, 0.14,
-0.02, 0.09, 0.11, -0.05, 0.09, 0.11, -0.05, 0.13, 0.08, -0.04,
0.21, -0.15, 0.27, 0.21, -0.16, 0.27, 0.13, -0.04, 0.07, 0.19,
0.15, -0.29, 0.2, 0.15, -0.28, 0.09, 0.0, -0.13, -0.01, -0.15,
-0.35, -0.05, 0.0, -0.16, 0.0, 0.0, -0.16, -0.01, 0.17, 0.34,
0.0, 0.18, 0.34, -0.04, 0.11, 0.1, -0.01, -0.15, -0.35, -0.01,
-0.16, -0.34, -0.06, -0.04, -0.13, 0.21, -0.17, 0.26, 0.2, -0.18,
0.27, 0.09, -0.11, 0.05, 0.0, 0.18, 0.33, 0.0, 0.14, 0.09,
-0.04, 0.11, 0.1, 0.19, -0.15, 0.29, 0.2, -0.15, 0.28, 0.09,
0.0, 0.13, 0.21, 0.15, -0.27, 0.13, 0.0, -0.1, 0.09, 0.0,
-0.13, -0.01, -0.17, -0.34, -0.08, -0.08, -0.11, -0.06, -0.04, -0.13,
0.0, 0.18, 0.33, 0.0, 0.18, 0.34, 0.04, 0.11, 0.1, 0.21,
-0.17, 0.26, 0.13, -0.08, 0.04, 0.13, -0.04, 0.07, 0.21, 0.15,
-0.27, 0.21, 0.16, -0.27, 0.13, 0.04, -0.07, -0.01, -0.17, -0.34,
0.0, -0.18, -0.34, -0.04, -0.11, -0.1, -0.32, -0.18, -0.1, -0.08,
-0.14, -0.02, -0.11, -0.11, 0.0, 0.01, 0.17, 0.34, 0.08, 0.08,
0.11, 0.04, 0.11, 0.1, 0.01, -0.38, 0.0, 0.0, -0.38, -0.01,
0.04, -0.14, -0.05, 0.21, 0.17, -0.26, 0.13, 0.08, -0.04, 0.13,
0.04, -0.07, -0.32, -0.18, -0.1, -0.32, -0.18, -0.11, -0.08, -0.11,
-0.07, 0.01, 0.17, 0.34, 0.01, 0.16, 0.34, 0.06, 0.04, 0.13,
0.21, -0.15, 0.27, 0.13, 0.0, 0.1, 0.09, 0.0, 0.13, 0.21,
0.17, -0.26, 0.2, 0.18, -0.27, 0.09, 0.11, -0.05, 0.01, 0.38,
0.0, 0.08, 0.14, 0.02, 0.06, 0.14, -0.02, 0.01, -0.38, 0.01,
0.01, -0.38, 0.0, 0.06, -0.14, 0.02, 0.01, 0.38, 0.0, 0.0,
0.38, 0.01, 0.04, 0.14, 0.05, 0.19, -0.15, 0.29, 0.05, 0.0,
0.16, 0.02, -0.04, 0.15, 0.19, 0.18, -0.27, 0.05, 0.14, -0.07,
0.09, 0.11, -0.05, -0.32, -0.17, -0.12, -0.08, -0.08, -0.11, -0.08,
-0.11, -0.07, 0.19, 0.18, -0.27, 0.19, 0.18, -0.28, 0.02, 0.11,
-0.1, -0.32, -0.17, -0.12, -0.32, -0.16, -0.12, -0.11, -0.04, -0.1,
0.18, -0.17, 0.28, 0.19, -0.16, 0.29, 0.02, -0.04, 0.15, 0.0,
0.38, 0.01, 0.0, 0.14, 0.08, 0.04, 0.14, 0.05, 0.18, 0.17,
-0.28, 0.0, 0.08, -0.14, 0.02, 0.11, -0.1, -0.33, -0.15, -0.11,
-0.13, 0.0, -0.09, -0.11, -0.04, -0.1, 0.0, 0.38, 0.01, 0.0,
0.38, 0.01, -0.04, 0.14, 0.05, 0.01, -0.38, 0.0, 0.08, -0.14,
-0.02, 0.06, -0.14, 0.02, 0.18, 0.17, -0.28, 0.19, 0.16, -0.29,
0.02, 0.04, -0.15, -0.33, -0.15, -0.11, -0.33, -0.15, -0.1, -0.15,
0.0, -0.05, 0.18, -0.17, 0.28, 0.0, -0.08, 0.14, 0.02, -0.11,
0.1, -0.21, 0.15, -0.27, -0.13, 0.0, -0.1, -0.13, 0.04, -0.07,
-0.01, 0.38, 0.0, -0.08, 0.14, 0.02, -0.04, 0.14, 0.05, 0.01,
-0.38, 0.01, 0.05, -0.14, 0.07, 0.0, -0.14, 0.07, -0.21, 0.15,
-0.27, -0.2, 0.15, -0.28, -0.09, 0.0, -0.13, -0.33, -0.15, -0.09,
-0.17, 0.0, 0.0, -0.15, 0.0, -0.05, -0.01, 0.38, 0.0, -0.01,
0.38, 0.0, -0.06, 0.14, -0.02, -0.33, -0.15, -0.09, -0.33, -0.16,
-0.09, -0.15, -0.04, 0.02, -0.01, 0.38, -0.01, -0.05, 0.14, -0.07,
-0.06, 0.14, -0.02, -0.01, -0.38, 0.01, 0.0, -0.38, 0.01, 0.0,
-0.14, 0.07, -0.19, 0.15, -0.29, -0.05, 0.0, -0.16, -0.09, 0.0,
-0.13, -0.33, -0.17, -0.08, -0.13, -0.08, 0.04, -0.15, -0.04, 0.02,
-0.01, 0.38, -0.01, 0.0, 0.38, -0.01, 0.0, 0.14, -0.07, -0.19,
0.15, -0.29, -0.19, 0.16, -0.29, -0.02, 0.04, -0.15, -0.33, -0.17,
-0.08, -0.32, -0.18, -0.09, -0.11, -0.11, 0.0, -0.01, -0.38, 0.0,
-0.08, -0.14, -0.02, -0.04, -0.14, -0.05, -0.18, -0.17, 0.28, 0.0,
-0.08, 0.14, -0.02, -0.04, 0.15, 0.01, 0.38, -0.01, 0.05, 0.14,
-0.07, 0.0, 0.14, -0.07, -0.18, 0.17, -0.28, 0.0, 0.08, -0.14,
-0.02, 0.04, -0.15, -0.18, -0.17, 0.28, -0.19, -0.18, 0.28, -0.02,
-0.11, 0.1, 0.01, 0.38, -0.01, 0.01, 0.38, 0.0, 0.06, 0.14,
-0.02, -0.01, -0.38, 0.01, -0.05, -0.14, 0.07, -0.06, -0.14, 0.02,
0.06, -0.14, 0.02, 0.06, -0.14, 0.02, 0.05, -0.14, 0.07, 0.08,
0.14, 0.02, 0.08, 0.14, 0.02, 0.06, 0.14, -0.02, 0.09, 0.11,
-0.05, 0.09, 0.11, -0.05, 0.13, 0.08, -0.04, 0.05, -0.14, 0.07,
0.05, -0.14, 0.07, 0.0, -0.14, 0.07, 0.06, 0.04, 0.13, 0.06,
0.04, 0.13, 0.08, 0.08, 0.11, -0.08, -0.11, -0.07, -0.08, -0.11,
-0.07, -0.08, -0.14, -0.02, 0.13, 0.08, -0.04, 0.13, 0.08, -0.04,
0.13, 0.04, -0.07, 0.08, 0.08, 0.11, 0.08, 0.08, 0.11, 0.04,
0.11, 0.1, -0.08, -0.14, -0.02, -0.08, -0.14, -0.02, -0.11, -0.11,
0.0, 0.0, -0.14, 0.07, 0.0, -0.14, 0.07, -0.05, -0.14, 0.07,
-0.04, -0.11, -0.1, -0.04, -0.11, -0.1, -0.08, -0.08, -0.11, 0.13,
0.04, -0.07, 0.13, 0.04, -0.07, 0.13, 0.0, -0.1, -0.05, -0.14,
0.07, -0.05, -0.14, 0.07, -0.06, -0.14, 0.02, 0.04, 0.11, 0.1,
0.04, 0.11, 0.1, 0.0, 0.14, 0.09, -0.08, -0.08, -0.11, -0.08,
-0.08, -0.11, -0.06, -0.04, -0.13, 0.13, 0.0, -0.1, 0.13, 0.0,
-0.1, 0.09, 0.0, -0.13, 0.0, 0.14, 0.09, 0.0, 0.14, 0.09,
-0.04, 0.11, 0.1, -0.06, -0.14, 0.02, -0.06, -0.14, 0.02, -0.08,
-0.14, -0.02, -0.06, -0.04, -0.13, -0.06, -0.04, -0.13, -0.05, 0.0,
-0.16, -0.08, -0.14, -0.02, -0.08, -0.14, -0.02, -0.04, -0.14, -0.05,
-0.04, 0.11, 0.1, -0.04, 0.11, 0.1, -0.08, 0.08, 0.11, -0.05,
0.0, -0.16, -0.05, 0.0, -0.16, 0.0, 0.0, -0.16, 0.09, 0.0,
-0.13, 0.09, 0.0, -0.13, 0.05, 0.0, -0.16, -0.08, 0.08, 0.11,
-0.08, 0.08, 0.11, -0.06, 0.04, 0.13, 0.05, 0.0, -0.16, 0.05,
0.0, -0.16, 0.02, 0.04, -0.15, 0.0, 0.0, -0.16, 0.0, 0.0,
-0.16, 0.05, 0.0, -0.16, 0.15, 0.04, -0.02, 0.15, 0.04, -0.02,
0.13, 0.08, -0.04, -0.04, -0.14, -0.05, -0.04, -0.14, -0.05, 0.0,
-0.14, -0.08, -0.06, 0.04, 0.13, -0.06, 0.04, 0.13, -0.05, 0.0,
0.16, 0.05, 0.0, -0.16, 0.05, 0.0, -0.16, 0.06, -0.04, -0.13,
0.13, 0.08, -0.04, 0.13, 0.08, -0.04, 0.11, 0.11, 0.0, 0.0,
-0.14, -0.08, 0.0, -0.14, -0.08, 0.04, -0.14, -0.05, -0.05, 0.0,
0.16, -0.05, 0.0, 0.16, 0.0, 0.0, 0.16, 0.06, -0.04, -0.13,
0.06, -0.04, -0.13, 0.08, -0.08, -0.11, 0.11, 0.11, 0.0, 0.11,
0.11, 0.0, 0.08, 0.14, 0.02, 0.08, -0.08, -0.11, 0.08, -0.08,
-0.11, 0.04, -0.11, -0.1, 0.08, 0.14, 0.02, 0.08, 0.14, 0.02,
0.08, 0.11, 0.07, 0.0, 0.0, 0.16, 0.0, 0.0, 0.16, 0.05,
0.0, 0.16, 0.05, 0.0, 0.16, 0.05, 0.0, 0.16, 0.06, 0.04,
0.13, 0.08, 0.11, 0.07, 0.08, 0.11, 0.07, 0.08, 0.08, 0.11,
-0.11, 0.04, 0.1, -0.11, 0.04, 0.1, -0.08, 0.08, 0.11, 0.04,
-0.11, -0.1, 0.04, -0.11, -0.1, 0.0, -0.14, -0.09, 0.08, 0.08,
0.11, 0.08, 0.08, 0.11, 0.11, 0.04, 0.1, -0.08, 0.08, 0.11,
-0.08, 0.08, 0.11, -0.08, 0.11, 0.07, 0.0, -0.14, -0.09, 0.0,
-0.14, -0.09, -0.04, -0.11, -0.1, 0.08, -0.11, -0.07, 0.08, -0.11,
-0.07, 0.08, -0.08, -0.11, 0.11, 0.04, 0.1, 0.11, 0.04, 0.1,
0.13, 0.0, 0.09, -0.08, 0.11, 0.07, -0.08, 0.11, 0.07, -0.08,
0.14, 0.02, 0.08, -0.08, -0.11, 0.08, -0.08, -0.11, 0.11, -0.04,
-0.1, 0.13, 0.0, 0.09, 0.13, 0.0, 0.09, 0.15, 0.0, 0.05,
-0.08, 0.14, 0.02, -0.08, 0.14, 0.02, -0.11, 0.11, 0.0, 0.11,
-0.04, -0.1, 0.11, -0.04, -0.1, 0.13, 0.0, -0.09, -0.11, 0.11,
0.0, -0.11, 0.11, 0.0, -0.13, 0.08, -0.04, 0.13, 0.0, -0.09,
0.13, 0.0, -0.09, 0.15, 0.0, -0.05, 0.15, 0.0, 0.05, 0.15,
0.0, 0.05, 0.17, 0.0, 0.0, -0.13, 0.08, -0.04, -0.13, 0.08,
-0.04, -0.15, 0.04, -0.02, 0.17, 0.0, 0.0, 0.17, 0.0, 0.0,
0.15, 0.04, -0.02, 0.15, 0.0, -0.05, 0.15, 0.0, -0.05, 0.17,
0.0, 0.0, -0.02, -0.04, 0.15, -0.02, -0.04, 0.15, -0.05, 0.0,
0.16, -0.15, 0.04, -0.02, -0.15, 0.04, -0.02, -0.17, 0.0, 0.0,
-0.02, -0.04, 0.15, -0.02, -0.04, 0.15, -0.05, 0.0, 0.16, 0.15,
0.0, -0.05, 0.15, 0.0, -0.05, 0.17, 0.0, 0.0, 0.17, 0.0,
0.0, 0.17, 0.0, 0.0, 0.15, 0.04, -0.02, -0.13, 0.08, -0.04,
-0.13, 0.08, -0.04, -0.15, 0.04, -0.02, 0.15, 0.0, 0.05, 0.15,
0.0, 0.05, 0.17, 0.0, 0.0, 0.13, 0.0, -0.09, 0.13, 0.0,
-0.09, 0.15, 0.0, -0.05, -0.11, 0.11, 0.0, -0.11, 0.11, 0.0,
-0.13, 0.08, -0.04, 0.11, -0.04, -0.1, 0.11, -0.04, -0.1, 0.13,
0.0, -0.09, -0.08, 0.14, 0.02, -0.08, 0.14, 0.02, -0.11, 0.11,
0.0, 0.13, 0.0, 0.09, 0.13, 0.0, 0.09, 0.15, 0.0, 0.05,
0.08, -0.08, -0.11, 0.08, -0.08, -0.11, 0.11, -0.04, -0.1, -0.08,
0.11, 0.07, -0.08, 0.11, 0.07, -0.08, 0.14, 0.02, 0.11, 0.04,
0.1, 0.11, 0.04, 0.1, 0.13, 0.0, 0.09, 0.08, -0.11, -0.07,
0.08, -0.11, -0.07, 0.08, -0.08, -0.11, 0.0, -0.14, -0.09, 0.0,
-0.14, -0.09, -0.04, -0.11, -0.1, -0.08, 0.08, 0.11, -0.08, 0.08,
0.11, -0.08, 0.11, 0.07, 0.08, 0.08, 0.11, 0.08, 0.08, 0.11,
0.11, 0.04, 0.1, 0.04, -0.11, -0.1, 0.04, -0.11, -0.1, 0.0,
-0.14, -0.09, -0.11, 0.04, 0.1, -0.11, 0.04, 0.1, -0.08, 0.08,
0.11, 0.08, 0.11, 0.07, 0.08, 0.11, 0.07, 0.08, 0.08, 0.11,
0.02, -0.11, 0.1, 0.02, -0.11, 0.1, 0.05, -0.14, 0.07, 0.05,
0.0, 0.16, 0.05, 0.0, 0.16, 0.06, 0.04, 0.13, 0.05, -0.14,
0.07, 0.05, -0.14, 0.07, 0.09, -0.11, 0.05, 0.0, 0.0, 0.16,
0.0, 0.0, 0.16, 0.05, 0.0, 0.16, 0.08, 0.14, 0.02, 0.08,
0.14, 0.02, 0.08, 0.11, 0.07, 0.08, -0.08, -0.11, 0.08, -0.08,
-0.11, 0.04, -0.11, -0.1, 0.11, 0.11, 0.0, 0.11, 0.11, 0.0,
0.08, 0.14, 0.02, 0.13, -0.04, 0.07, 0.13, -0.04, 0.07, 0.13,
0.0, 0.1, 0.06, -0.04, -0.13, 0.06, -0.04, -0.13, 0.08, -0.08,
-0.11, -0.05, 0.0, 0.16, -0.05, 0.0, 0.16, 0.0, 0.0, 0.16,
0.13, 0.08, -0.04, 0.13, 0.08, -0.04, 0.11, 0.11, 0.0, 0.09,
-0.11, 0.05, 0.09, -0.11, 0.05, 0.13, -0.08, 0.04, 0.05, 0.0,
-0.16, 0.05, 0.0, -0.16, 0.06, -0.04, -0.13, -0.06, 0.04, 0.13,
-0.06, 0.04, 0.13, -0.05, 0.0, 0.16, 0.15, 0.04, -0.02, 0.15,
0.04, -0.02, 0.13, 0.08, -0.04, 0.09, 0.0, 0.13, 0.09, 0.0,
0.13, 0.05, 0.0, 0.16, 0.0, 0.0, -0.16, 0.0, 0.0, -0.16,
0.05, 0.0, -0.16, 0.05, 0.0, -0.16, 0.05, 0.0, -0.16, 0.02,
0.04, -0.15, 0.13, -0.08, 0.04, 0.13, -0.08, 0.04, 0.13, -0.04,
0.07, -0.08, 0.08, 0.11, -0.08, 0.08, 0.11, -0.06, 0.04, 0.13,
0.09, 0.0, -0.13, 0.09, 0.0, -0.13, 0.05, 0.0, -0.16, -0.05,
0.0, -0.16, -0.05, 0.0, -0.16, 0.0, 0.0, -0.16, -0.04, 0.11,
0.1, -0.04, 0.11, 0.1, -0.08, 0.08, 0.11, 0.04, -0.14, -0.05,
0.04, -0.14, -0.05, 0.08, -0.14, -0.02, -0.06, -0.04, -0.13, -0.06,
-0.04, -0.13, -0.05, 0.0, -0.16, 0.13, 0.0, 0.1, 0.13, 0.0,
0.1, 0.09, 0.0, 0.13, 0.0, 0.14, 0.09, 0.0, 0.14, 0.09,
-0.04, 0.11, 0.1, 0.13, 0.0, -0.1, 0.13, 0.0, -0.1, 0.09,
0.0, -0.13, 0.06, -0.14, 0.02, 0.06, -0.14, 0.02, 0.05, -0.14,
0.07, -0.08, -0.08, -0.11, -0.08, -0.08, -0.11, -0.06, -0.04, -0.13,
0.04, 0.11, 0.1, 0.04, 0.11, 0.1, 0.0, 0.14, 0.09, 0.13,
0.04, -0.07, 0.13, 0.04, -0.07, 0.13, 0.0, -0.1, 0.05, 0.0,
0.16, 0.05, 0.0, 0.16, 0.02, -0.04, 0.15, -0.04, -0.11, -0.1,
-0.04, -0.11, -0.1, -0.08, -0.08, -0.11, -0.08, -0.14, -0.02, -0.08,
-0.14, -0.02, -0.11, -0.11, 0.0, 0.08, 0.08, 0.11, 0.08, 0.08,
0.11, 0.04, 0.11, 0.1, 0.13, 0.08, -0.04, 0.13, 0.08, -0.04,
0.13, 0.04, -0.07, 0.02, -0.04, 0.15, 0.02, -0.04, 0.15, 0.0,
-0.08, 0.14, -0.08, -0.11, -0.07, -0.08, -0.11, -0.07, -0.08, -0.14,
-0.02, 0.04, -0.11, -0.1, 0.08, -0.11, -0.07, 0.04, -0.14, -0.05,
0.04, -0.11, -0.1, 0.08, -0.08, -0.11, 0.08, -0.11, -0.07, 0.04,
-0.14, -0.05, 0.08, -0.11, -0.07, 0.08, -0.14, -0.02, 0.08, -0.14,
-0.02, 0.08, -0.14, -0.02, 0.04, -0.14, -0.05, 0.04, -0.11, -0.1,
0.04, -0.14, -0.05, 0.0, -0.14, -0.08, 0.04, -0.11, -0.1, 0.0,
-0.14, -0.08, 0.0, -0.14, -0.09, 0.04, 0.14, 0.05, 0.04, 0.14,
0.05, 0.08, 0.14, 0.02, 0.05, 0.14, -0.07, 0.05, 0.14, -0.07,
0.09, 0.11, -0.05, -0.08, -0.08, -0.11, -0.08, -0.08, -0.11, -0.08,
-0.11, -0.07, 0.08, -0.14, -0.02, 0.08, -0.14, -0.02, 0.06, -0.14,
0.02, 0.02, 0.11, -0.1, 0.02, 0.11, -0.1, 0.05, 0.14, -0.07,
-0.11, -0.04, -0.1, -0.11, -0.04, -0.1, -0.08, -0.08, -0.11, 0.04,
-0.14, -0.05, 0.04, -0.14, -0.05, 0.08, -0.14, -0.02, 0.0, 0.14,
0.08, 0.0, 0.14, 0.08, 0.04, 0.14, 0.05, 0.0, -0.08, 0.14,
0.0, -0.08, 0.14, 0.02, -0.11, 0.1, 0.0, 0.08, -0.14, 0.0,
0.08, -0.14, 0.02, 0.11, -0.1, -0.13, 0.0, -0.09, -0.13, 0.0,
-0.09, -0.11, -0.04, -0.1, -0.04, 0.14, 0.05, -0.04, 0.14, 0.05,
0.0, 0.14, 0.08, 0.02, -0.04, 0.15, 0.02, -0.04, 0.15, 0.0,
-0.08, 0.14, 0.02, 0.04, -0.15, 0.02, 0.04, -0.15, 0.0, 0.08,
-0.14, -0.15, 0.0, -0.05, -0.15, 0.0, -0.05, -0.13, 0.0, -0.09,
-0.13, 0.0, -0.1, -0.13, 0.0, -0.1, -0.13, 0.04, -0.07, -0.08,
0.14, 0.02, -0.08, 0.14, 0.02, -0.04, 0.14, 0.05, -0.09, 0.0,
-0.13, -0.09, 0.0, -0.13, -0.13, 0.0, -0.1, -0.17, 0.0, 0.0,
-0.17, 0.0, 0.0, -0.15, 0.0, -0.05, -0.06, 0.14, -0.02, -0.06,
0.14, -0.02, -0.08, 0.14, 0.02, 0.05, 0.0, 0.16, 0.05, 0.0,
0.16, 0.02, -0.04, 0.15, -0.15, -0.04, 0.02, -0.15, -0.04, 0.02,
-0.17, 0.0, 0.0, 0.09, 0.0, 0.13, 0.09, 0.0, 0.13, 0.05,
0.0, 0.16, -0.05, 0.14, -0.07, -0.05, 0.14, -0.07, -0.06, 0.14,
-0.02, -0.05, 0.0, -0.16, -0.05, 0.0, -0.16, -0.09, 0.0, -0.13,
-0.13, -0.08, 0.04, -0.13, -0.08, 0.04, -0.15, -0.04, 0.02, 0.0,
0.14, -0.07, 0.0, 0.14, -0.07, -0.05, 0.14, -0.07, 0.13, 0.0,
0.1, 0.13, 0.0, 0.1, 0.09, 0.0, 0.13, -0.02, 0.04, -0.15,
-0.02, 0.04, -0.15, -0.05, 0.0, -0.16, -0.11, -0.11, 0.0, -0.11,
-0.11, 0.0, -0.13, -0.08, 0.04, 0.13, -0.04, 0.07, 0.13, -0.04,
0.07, 0.13, 0.0, 0.1, 0.0, -0.08, 0.14, 0.0, -0.08, 0.14,
-0.02, -0.04, 0.15, 0.05, 0.14, -0.07, 0.05, 0.14, -0.07, 0.0,
0.14, -0.07, 0.0, 0.08, -0.14, 0.0, 0.08, -0.14, -0.02, 0.04,
-0.15, -0.02, -0.11, 0.1, -0.02, -0.11, 0.1, 0.0, -0.08, 0.14,
0.06, 0.14, -0.02, 0.06, 0.14, -0.02, 0.05, 0.14, -0.07, 0.13,
-0.08, 0.04, 0.13, -0.08, 0.04, 0.13, -0.04, 0.07, -0.02, 0.11,
-0.1, -0.02, 0.11, -0.1, 0.0, 0.08, -0.14, 0.09, -0.11, 0.05,
0.09, -0.11, 0.05, 0.13, -0.08, 0.04, -0.05, 0.14, -0.07, -0.05,
0.14, -0.07, -0.02, 0.11, -0.1, -0.05, -0.14, 0.07, -0.05, -0.14,
0.07, -0.02, -0.11, 0.1, 0.05, -0.14, 0.07, 0.05, -0.14, 0.07,
0.09, -0.11, 0.05, -0.09, 0.11, -0.05, -0.09, 0.11, -0.05, -0.05,
0.14, -0.07, -0.09, -0.11, 0.05, -0.09, -0.11, 0.05, -0.05, -0.14,
0.07, 0.02, -0.11, 0.1, 0.02, -0.11, 0.1, 0.05, -0.14, 0.07,
0.08, -0.14, -0.02, 0.08, -0.14, -0.02, 0.08, -0.11, -0.07, -0.13,
0.08, -0.04, -0.13, 0.08, -0.04, -0.09, 0.11, -0.05, -0.13, -0.08,
0.04, -0.13, -0.08, 0.04, -0.09, -0.11, 0.05, 0.11, -0.11, 0.0,
0.11, -0.11, 0.0, 0.08, -0.14, -0.02, -0.13, 0.04, -0.07, -0.13,
0.04, -0.07, -0.13, 0.08, -0.04, -0.13, -0.04, 0.07, -0.13, -0.04,
0.07, -0.13, -0.08, 0.04, -0.13, 0.0, 0.09, -0.13, 0.0, 0.09,
-0.11, 0.04, 0.1, -0.15, 0.0, 0.05, -0.15, 0.0, 0.05, -0.13,
0.0, 0.09, -0.13, 0.0, 0.1, -0.13, 0.0, 0.1, -0.13, -0.04,
0.07, 0.13, -0.08, 0.04, 0.13, -0.08, 0.04, 0.11, -0.11, 0.0,
-0.09, 0.0, 0.13, -0.09, 0.0, 0.13, -0.13, 0.0, 0.1, 0.15,
-0.04, 0.02, 0.15, -0.04, 0.02, 0.13, -0.08, 0.04, -0.17, 0.0,
0.0, -0.17, 0.0, 0.0, -0.15, 0.0, 0.05, -0.05, 0.0, 0.16,
-0.05, 0.0, 0.16, -0.09, 0.0, 0.13, 0.17, 0.0, 0.0, 0.17,
0.0, 0.0, 0.15, -0.04, 0.02, 0.06, 0.04, 0.13, 0.06, 0.04,
0.13, 0.08, 0.08, 0.11, -0.04, 0.11, 0.1, 0.0, 0.14, 0.08,
-0.04, 0.14, 0.05, -0.08, 0.11, 0.07, -0.08, 0.08, 0.11, -0.04,
0.11, 0.1, -0.04, 0.14, 0.05, -0.08, 0.14, 0.02, -0.08, 0.14,
0.02, -0.04, 0.14, 0.05, -0.08, 0.14, 0.02, -0.08, 0.11, 0.07,
-0.08, 0.08, 0.11, -0.08, 0.08, 0.11, -0.04, 0.11, 0.1, -0.04,
0.11, 0.1, 0.0, 0.14, 0.09, 0.0, 0.14, 0.08, -0.09, 0.11,
-0.05, -0.13, 0.08, -0.04, -0.11, 0.11, 0.0, -0.06, 0.14, -0.02,
-0.05, 0.14, -0.07, -0.05, 0.14, -0.07, -0.06, 0.14, -0.02, -0.05,
0.14, -0.07, -0.09, 0.11, -0.05, -0.13, 0.08, -0.04, -0.13, 0.08,
-0.04, -0.11, 0.11, 0.0, -0.06, 0.14, -0.02, -0.11, 0.11, 0.0,
-0.08, 0.14, 0.02, -0.06, 0.14, -0.02, -0.08, 0.14, 0.02, -0.08,
0.14, 0.02, 0.02, 0.11, -0.1, 0.0, 0.08, -0.14, -0.02, 0.11,
-0.1, 0.0, 0.14, -0.07, 0.05, 0.14, -0.07, 0.05, 0.14, -0.07,
0.0, 0.14, -0.07, 0.05, 0.14, -0.07, 0.02, 0.11, -0.1, 0.0,
0.08, -0.14, 0.0, 0.08, -0.14, -0.02, 0.11, -0.1, 0.0, 0.14,
-0.07, -0.02, 0.11, -0.1, -0.05, 0.14, -0.07, 0.0, 0.14, -0.07,
-0.05, 0.14, -0.07, -0.05, 0.14, -0.07, 0.11, 0.11, 0.0, 0.13,
0.08, -0.04, 0.09, 0.11, -0.05, 0.06, 0.14, -0.02, 0.08, 0.14,
0.02, 0.08, 0.14, 0.02, 0.06, 0.14, -0.02, 0.08, 0.14, 0.02,
0.11, 0.11, 0.0, 0.13, 0.08, -0.04, 0.13, 0.08, -0.04, 0.09,
0.11, -0.05, 0.06, 0.14, -0.02, 0.09, 0.11, -0.05, 0.05, 0.14,
-0.07, 0.06, 0.14, -0.02, 0.05, 0.14, -0.07, 0.05, 0.14, -0.07,
0.04, 0.14, 0.05, 0.0, 0.14, 0.08, 0.04, 0.11, 0.1, 0.0,
0.14, 0.08, 0.0, 0.14, 0.09, 0.04, 0.11, 0.1, 0.04, 0.11,
0.1, 0.08, 0.08, 0.11, 0.08, 0.08, 0.11, 0.04, 0.11, 0.1,
0.08, 0.08, 0.11, 0.08, 0.11, 0.07, 0.04, 0.14, 0.05, 0.08,
0.11, 0.07, 0.08, 0.14, 0.02, 0.04, 0.14, 0.05, 0.08, 0.14,
0.02, 0.08, 0.14, 0.02, -0.06, 0.04, 0.13, -0.08, 0.08, 0.11,
-0.08, 0.08, 0.11, -0.06, 0.04, 0.13, -0.11, 0.04, 0.1, -0.09,
0.0, 0.13, -0.06, 0.04, 0.13, -0.08, 0.08, 0.11, -0.11, 0.04,
0.1, -0.09, 0.0, 0.13, -0.11, 0.04, 0.1, -0.13, 0.0, 0.09,
-0.13, 0.0, 0.09, -0.13, 0.0, 0.1, -0.09, 0.0, 0.13, -0.09,
0.0, 0.13, -0.05, 0.0, 0.16, -0.05, 0.0, 0.16, -0.15, -0.04,
0.02, -0.13, -0.08, 0.04, -0.13, -0.04, 0.07, -0.15, 0.0, 0.05,
-0.17, 0.0, 0.0, -0.17, 0.0, 0.0, -0.15, 0.0, 0.05, -0.17,
0.0, 0.0, -0.15, -0.04, 0.02, -0.13, -0.08, 0.04, -0.13, -0.08,
0.04, -0.13, -0.04, 0.07, -0.15, 0.0, 0.05, -0.13, -0.04, 0.07,
-0.13, 0.0, 0.1, -0.15, 0.0, 0.05, -0.13, 0.0, 0.1, -0.13,
0.0, 0.09, -0.06, -0.04, -0.13, -0.08, -0.08, -0.11, -0.11, -0.04,
-0.1, -0.09, 0.0, -0.13, -0.05, 0.0, -0.16, -0.05, 0.0, -0.16,
-0.09, 0.0, -0.13, -0.05, 0.0, -0.16, -0.06, -0.04, -0.13, -0.08,
-0.08, -0.11, -0.08, -0.08, -0.11, -0.11, -0.04, -0.1, -0.09, 0.0,
-0.13, -0.11, -0.04, -0.1, -0.13, 0.0, -0.09, -0.09, 0.0, -0.13,
-0.13, 0.0, -0.09, -0.13, 0.0, -0.1, 0.09, 0.0, -0.13, 0.11,
-0.04, -0.1, 0.06, -0.04, -0.13, 0.09, 0.0, -0.13, 0.13, 0.0,
-0.09, 0.11, -0.04, -0.1, 0.06, -0.04, -0.13, 0.11, -0.04, -0.1,
0.08, -0.08, -0.11, 0.08, -0.08, -0.11, 0.08, -0.08, -0.11, 0.06,
-0.04, -0.13, 0.09, 0.0, -0.13, 0.06, -0.04, -0.13, 0.05, 0.0,
-0.16, 0.09, 0.0, -0.13, 0.05, 0.0, -0.16, 0.05, 0.0, -0.16,
-0.15, 0.04, -0.02, -0.13, 0.08, -0.04, -0.13, 0.08, -0.04, -0.15,
0.04, -0.02, -0.13, 0.04, -0.07, -0.15, 0.0, -0.05, -0.15, 0.04,
-0.02, -0.13, 0.08, -0.04, -0.13, 0.04, -0.07, -0.15, 0.0, -0.05,
-0.13, 0.04, -0.07, -0.13, 0.0, -0.1, -0.13, 0.0, -0.1, -0.13,
0.0, -0.09, -0.15, 0.0, -0.05, -0.15, 0.0, -0.05, -0.17, 0.0,
0.0, -0.17, 0.0, 0.0, -0.02, 0.04, -0.15, 0.0, 0.08, -0.14,
0.02, 0.04, -0.15, 0.0, 0.0, -0.16, -0.05, 0.0, -0.16, -0.02,
0.04, -0.15, 0.02, 0.04, -0.15, 0.05, 0.0, -0.16, 0.0, 0.0,
-0.16, 0.0, 0.08, -0.14, 0.0, 0.08, -0.14, 0.02, 0.04, -0.15,
0.05, 0.0, -0.16, 0.05, 0.0, -0.16, 0.0, 0.0, -0.16, 0.0,
0.0, -0.16, -0.05, 0.0, -0.16, -0.05, 0.0, -0.16, 0.15, 0.0,
-0.05, 0.13, 0.0, -0.1, 0.13, 0.04, -0.07, 0.15, 0.04, -0.02,
0.17, 0.0, 0.0, 0.15, 0.0, -0.05, 0.13, 0.04, -0.07, 0.13,
0.08, -0.04, 0.13, 0.08, -0.04, 0.13, 0.04, -0.07, 0.13, 0.08,
-0.04, 0.15, 0.04, -0.02, 0.17, 0.0, 0.0, 0.17, 0.0, 0.0,
0.15, 0.0, -0.05, 0.15, 0.0, -0.05, 0.13, 0.0, -0.09, 0.13,
0.0, -0.1, 0.0, 0.0, 0.16, -0.02, -0.04, 0.15, 0.02, -0.04,
0.15, 0.0, 0.0, 0.16, -0.05, 0.0, 0.16, -0.02, -0.04, 0.15,
0.02, -0.04, 0.15, -0.02, -0.04, 0.15, 0.0, -0.08, 0.14, 0.0,
-0.08, 0.14, 0.0, -0.08, 0.14, 0.02, -0.04, 0.15, 0.0, 0.0,
0.16, 0.02, -0.04, 0.15, 0.05, 0.0, 0.16, 0.0, 0.0, 0.16,
0.05, 0.0, 0.16, 0.05, 0.0, 0.16, 0.09, 0.0, 0.13, 0.13,
0.0, 0.09, 0.11, 0.04, 0.1, 0.06, 0.04, 0.13, 0.05, 0.0,
0.16, 0.09, 0.0, 0.13, 0.11, 0.04, 0.1, 0.08, 0.08, 0.11,
0.08, 0.08, 0.11, 0.11, 0.04, 0.1, 0.08, 0.08, 0.11, 0.06,
0.04, 0.13, 0.05, 0.0, 0.16, 0.05, 0.0, 0.16, 0.09, 0.0,
0.13, 0.09, 0.0, 0.13, 0.13, 0.0, 0.1, 0.13, 0.0, 0.09,
0.15, 0.0, 0.05, 0.13, -0.04, 0.07, 0.15, -0.04, 0.02, 0.15,
0.0, 0.05, 0.13, 0.0, 0.1, 0.13, -0.04, 0.07, 0.15, -0.04,
0.02, 0.13, -0.04, 0.07, 0.13, -0.08, 0.04, 0.13, -0.08, 0.04,
0.13, -0.08, 0.04, 0.15, -0.04, 0.02, 0.15, 0.0, 0.05, 0.15,
-0.04, 0.02, 0.17, 0.0, 0.0, 0.15, 0.0, 0.05, 0.17, 0.0,
0.0, 0.17, 0.0, 0.0, -0.09, -0.11, 0.05, -0.13, -0.08, 0.04,
-0.13, -0.08, 0.04, -0.09, -0.11, 0.05, -0.11, -0.11, 0.0, -0.06,
-0.14, 0.02, -0.09, -0.11, 0.05, -0.13, -0.08, 0.04, -0.11, -0.11,
0.0, -0.06, -0.14, 0.02, -0.11, -0.11, 0.0, -0.08, -0.14, -0.02,
-0.08, -0.14, -0.02, -0.08, -0.14, -0.02, -0.06, -0.14, 0.02, -0.06,
-0.14, 0.02, -0.05, -0.14, 0.07, -0.05, -0.14, 0.07, 0.11, -0.11,
0.0, 0.13, -0.08, 0.04, 0.13, -0.08, 0.04, 0.11, -0.11, 0.0,
0.09, -0.11, 0.05, 0.06, -0.14, 0.02, 0.11, -0.11, 0.0, 0.13,
-0.08, 0.04, 0.09, -0.11, 0.05, 0.06, -0.14, 0.02, 0.09, -0.11,
0.05, 0.05, -0.14, 0.07, 0.05, -0.14, 0.07, 0.05, -0.14, 0.07,
0.06, -0.14, 0.02, 0.06, -0.14, 0.02, 0.08, -0.14, -0.02, 0.08,
-0.14, -0.02, -0.08, -0.11, -0.07, -0.08, -0.08, -0.11, -0.04, -0.11,
-0.1, -0.04, -0.14, -0.05, -0.08, -0.14, -0.02, -0.08, -0.11, -0.07,
-0.08, -0.08, -0.11, -0.08, -0.08, -0.11, -0.04, -0.11, -0.1, -0.04,
-0.11, -0.1, 0.0, -0.14, -0.09, 0.0, -0.14, -0.08, -0.04, -0.11,
-0.1, 0.0, -0.14, -0.08, -0.04, -0.14, -0.05, -0.04, -0.14, -0.05,
-0.08, -0.14, -0.02, -0.08, -0.14, -0.02, -0.02, -0.11, 0.1, -0.05,
-0.14, 0.07, 0.0, -0.14, 0.07, 0.02, -0.11, 0.1, 0.0, -0.08,
0.14, -0.02, -0.11, 0.1, -0.05, -0.14, 0.07, -0.05, -0.14, 0.07,
0.0, -0.14, 0.07, 0.0, -0.14, 0.07, 0.05, -0.14, 0.07, 0.05,
-0.14, 0.07, 0.0, -0.14, 0.07, 0.05, -0.14, 0.07, 0.02, -0.11,
0.1, 0.02, -0.11, 0.1, 0.0, -0.08, 0.14, 0.0, -0.08, 0.14,
-0.01, 0.16, 0.34, -0.01, 0.17, 0.34, -0.06, 0.04, 0.13, 0.19,
0.16, -0.29, 0.19, 0.15, -0.29, 0.02, 0.04, -0.15, 0.05, 0.0,
-0.16, 0.01, -0.15, -0.35, 0.0, 0.0, -0.16, 0.13, 0.08, -0.04,
0.33, 0.17, 0.08, 0.15, 0.04, -0.02, 0.2, -0.18, 0.27, 0.19,
-0.18, 0.27, 0.09, -0.11, 0.05, -0.05, 0.0, 0.16, -0.01, 0.15,
0.35, -0.06, 0.04, 0.13, 0.01, -0.16, -0.34, 0.01, -0.15, -0.35,
0.06, -0.04, -0.13, 0.32, 0.18, 0.09, 0.33, 0.17, 0.08, 0.11,
0.11, 0.0, 0.05, -0.14, 0.07, 0.19, -0.18, 0.27, 0.02, -0.11,
0.1, 0.0, 0.15, 0.35, -0.01, 0.15, 0.35, 0.0, 0.0, 0.16,
0.08, -0.08, -0.11, 0.01, -0.17, -0.34, 0.06, -0.04, -0.13, 0.08,
0.14, 0.02, 0.32, 0.18, 0.1, 0.11, 0.11, 0.0, 0.0, -0.18,
-0.34, 0.01, -0.17, -0.34, 0.04, -0.11, -0.1, 0.32, 0.18, 0.11,
0.32, 0.18, 0.1, 0.08, 0.11, 0.07, 0.05, 0.0, 0.16, 0.01,
0.15, 0.35, 0.0, 0.0, 0.16, 0.01, 0.16, 0.34, 0.01, 0.15,
0.35, 0.06, 0.04, 0.13, 0.08, 0.08, 0.11, 0.32, 0.17, 0.12,
0.08, 0.11, 0.07, -0.08, 0.08, 0.11, -0.32, 0.17, 0.12, -0.11,
0.04, 0.1, 0.0, -0.14, -0.09, 0.0, -0.18, -0.33, 0.04, -0.11,
-0.1, 0.32, 0.16, 0.12, 0.32, 0.17, 0.12, 0.11, 0.04, 0.1,
-0.32, 0.18, 0.11, -0.32, 0.17, 0.12, -0.08, 0.11, 0.07, 0.0,
-0.18, -0.34, 0.0, -0.18, -0.33, -0.04, -0.11, -0.1, 0.08, -0.08,
-0.11, 0.32, -0.17, -0.12, 0.08, -0.11, -0.07, 0.13, 0.0, 0.09,
0.33, 0.15, 0.11, 0.11, 0.04, 0.1, -0.08, 0.14, 0.02, -0.32,
0.18, 0.1, -0.08, 0.11, 0.07, 0.32, -0.16, -0.12, 0.32, -0.17,
-0.12, 0.11, -0.04, -0.1, 0.33, 0.15, 0.1, 0.33, 0.15, 0.11,
0.15, 0.0, 0.05, -0.32, 0.18, 0.09, -0.32, 0.18, 0.1, -0.11,
0.11, 0.0, 0.13, 0.0, -0.09, 0.33, -0.15, -0.11, 0.11, -0.04,
-0.1, -0.13, 0.08, -0.04, -0.33, 0.17, 0.08, -0.11, 0.11, 0.0,
0.33, -0.15, -0.1, 0.33, -0.15, -0.11, 0.15, 0.0, -0.05, 0.17,
0.0, 0.0, 0.33, 0.15, 0.09, 0.15, 0.0, 0.05, -0.33, 0.16,
0.09, -0.33, 0.17, 0.08, -0.15, 0.04, -0.02, 0.33, 0.16, 0.09,
0.33, 0.15, 0.09, 0.15, 0.04, -0.02, 0.17, 0.0, 0.0, 0.33,
-0.15, -0.09, 0.15, 0.0, -0.05, -0.05, 0.0, 0.16, -0.19, -0.15,
0.29, -0.02, -0.04, 0.15, -0.17, 0.0, 0.0, -0.33, 0.15, 0.09,
-0.15, 0.04, -0.02, 0.33, -0.16, -0.09, 0.33, -0.15, -0.09, 0.15,
-0.04, 0.02, -0.2, -0.15, 0.28, -0.19, -0.15, 0.29, -0.09, 0.0,
0.13, -0.33, 0.15, 0.1, -0.33, 0.15, 0.09, -0.15, 0.0, 0.05,
0.13, -0.08, 0.04, 0.33, -0.17, -0.08, 0.15, -0.04, 0.02, -0.13,
0.0, 0.1, -0.21, -0.15, 0.27, -0.09, 0.0, 0.13, 0.32, -0.18,
-0.09, 0.33, -0.17, -0.08, 0.11, -0.11, 0.0, -0.21, -0.16, 0.27,
-0.21, -0.15, 0.27, -0.13, -0.04, 0.07, -0.13, 0.0, 0.09, -0.33,
0.15, 0.11, -0.15, 0.0, 0.05, -0.32, 0.16, 0.12, -0.33, 0.15,
0.11, -0.11, 0.04, 0.1, -0.13, -0.08, 0.04, -0.21, -0.17, 0.26,
-0.13, -0.04, 0.07, -0.13, 0.08, -0.04, -0.21, 0.17, -0.26, -0.13,
0.04, -0.07, 0.08, -0.14, -0.02, 0.32, -0.18, -0.1, 0.11, -0.11,
0.0, -0.2, -0.18, 0.27, -0.21, -0.17, 0.26, -0.09, -0.11, 0.05,
-0.2, 0.18, -0.27, -0.21, 0.17, -0.26, -0.09, 0.11, -0.05, 0.32,
-0.18, -0.11, 0.32, -0.18, -0.1, 0.08, -0.11, -0.07, 0.0, -0.14,
-0.08, 0.0, -0.38, -0.01, -0.04, -0.14, -0.05, -0.05, -0.14, 0.07,
-0.19, -0.18, 0.27, -0.09, -0.11, 0.05, -0.05, 0.14, -0.07, -0.19,
0.18, -0.27, -0.09, 0.11, -0.05, -0.19, -0.18, 0.28, -0.19, -0.18,
0.27, -0.02, -0.11, 0.1, -0.19, 0.18, -0.28, -0.19, 0.18, -0.27,
-0.02, 0.11, -0.1, -0.08, -0.14, -0.02, -0.01, -0.38, 0.0, -0.06,
-0.14, 0.02, 0.0, -0.38, -0.01, 0.0, -0.38, -0.01, 0.04, -0.14,
-0.05, 0.0, 0.08, -0.14, -0.18, 0.17, -0.28, -0.02, 0.11, -0.1,
0.01, 0.38, -0.01, 0.0, 0.38, -0.01, 0.01, 0.38, 0.0, -0.01,
0.38, -0.01, -0.01, 0.38, 0.0, 0.0, 0.38, -0.01, -0.01, 0.38,
0.0, 0.0, 0.38, 0.01, -0.01, 0.38, 0.0, 0.0, 0.38, 0.01,
0.0, 0.38, 0.01, 0.0, 0.38, 0.01, 0.01, 0.38, 0.0, 0.01,
0.38, 0.0, 0.0, 0.38, 0.01, 0.01, 0.17, 0.34, 0.0, 0.18,
0.34, 0.01, 0.16, 0.34, 0.0, 0.18, 0.33, 0.0, 0.18, 0.34,
0.0, 0.18, 0.34, -0.01, 0.17, 0.34, -0.01, 0.16, 0.34, 0.0,
0.18, 0.34, -0.01, 0.15, 0.35, 0.0, 0.15, 0.35, -0.01, 0.16,
0.34, 0.01, 0.15, 0.35, 0.01, 0.16, 0.34, 0.0, 0.15, 0.35,
-0.32, 0.17, 0.12, -0.32, 0.18, 0.11, -0.32, 0.16, 0.12, -0.32,
0.18, 0.1, -0.32, 0.18, 0.09, -0.32, 0.18, 0.11, -0.33, 0.17,
0.08, -0.33, 0.16, 0.09, -0.32, 0.18, 0.09, -0.33, 0.15, 0.09,
-0.33, 0.15, 0.1, -0.33, 0.16, 0.09, -0.33, 0.15, 0.11, -0.32,
0.16, 0.12, -0.33, 0.15, 0.1, -0.21, 0.17, -0.26, -0.2, 0.18,
-0.27, -0.21, 0.16, -0.27, -0.19, 0.18, -0.27, -0.19, 0.18, -0.28,
-0.2, 0.18, -0.27, -0.18, 0.17, -0.28, -0.19, 0.16, -0.29, -0.19,
0.18, -0.28, -0.19, 0.15, -0.29, -0.2, 0.15, -0.28, -0.19, 0.16,
-0.29, -0.21, 0.15, -0.27, -0.21, 0.16, -0.27, -0.2, 0.15, -0.28,
0.18, 0.17, -0.28, 0.19, 0.18, -0.28, 0.19, 0.16, -0.29, 0.19,
0.18, -0.27, 0.2, 0.18, -0.27, 0.19, 0.18, -0.28, 0.21, 0.17,
-0.26, 0.21, 0.16, -0.27, 0.2, 0.18, -0.27, 0.21, 0.15, -0.27,
0.2, 0.15, -0.28, 0.21, 0.16, -0.27, 0.19, 0.15, -0.29, 0.19,
0.16, -0.29, 0.2, 0.15, -0.28, 0.33, 0.17, 0.08, 0.32, 0.18,
0.09, 0.33, 0.16, 0.09, 0.32, 0.18, 0.1, 0.32, 0.18, 0.11,
0.32, 0.18, 0.09, 0.32, 0.17, 0.12, 0.32, 0.16, 0.12, 0.32,
0.18, 0.11, 0.33, 0.15, 0.11, 0.33, 0.15, 0.1, 0.32, 0.16,
0.12, 0.33, 0.15, 0.09, 0.33, 0.16, 0.09, 0.33, 0.15, 0.1,
-0.19, -0.15, 0.29, -0.2, -0.15, 0.28, -0.19, -0.16, 0.29, -0.21,
-0.15, 0.27, -0.21, -0.16, 0.27, -0.2, -0.15, 0.28, -0.21, -0.17,
0.26, -0.2, -0.18, 0.27, -0.21, -0.16, 0.27, -0.19, -0.18, 0.27,
-0.19, -0.18, 0.28, -0.2, -0.18, 0.27, -0.18, -0.17, 0.28, -0.19,
-0.16, 0.29, -0.19, -0.18, 0.28, -0.33, -0.17, -0.08, -0.33, -0.16,
-0.09, -0.32, -0.18, -0.09, -0.33, -0.15, -0.09, -0.33, -0.15, -0.1,
-0.33, -0.16, -0.09, -0.33, -0.15, -0.11, -0.32, -0.16, -0.12, -0.33,
-0.15, -0.1, -0.32, -0.17, -0.12, -0.32, -0.18, -0.11, -0.32, -0.16,
-0.12, -0.32, -0.18, -0.1, -0.32, -0.18, -0.09, -0.32, -0.18, -0.11,
-0.01, -0.17, -0.34, -0.01, -0.16, -0.34, 0.0, -0.18, -0.34, -0.01,
-0.15, -0.35, 0.0, -0.15, -0.35, -0.01, -0.16, -0.34, 0.01, -0.15,
-0.35, 0.01, -0.16, -0.34, 0.0, -0.15, -0.35, 0.01, -0.17, -0.34,
0.0, -0.18, -0.34, 0.01, -0.16, -0.34, 0.0, -0.18, -0.33, 0.0,
-0.18, -0.34, 0.0, -0.18, -0.34, 0.32, -0.17, -0.12, 0.32, -0.16,
-0.12, 0.32, -0.18, -0.11, 0.33, -0.15, -0.11, 0.33, -0.15, -0.1,
0.32, -0.16, -0.12, 0.33, -0.15, -0.09, 0.33, -0.16, -0.09, 0.33,
-0.15, -0.1, 0.33, -0.17, -0.08, 0.32, -0.18, -0.09, 0.33, -0.16,
-0.09, 0.32, -0.18, -0.1, 0.32, -0.18, -0.11, 0.32, -0.18, -0.09,
0.19, -0.18, 0.27, 0.2, -0.18, 0.27, 0.19, -0.18, 0.28, 0.21,
-0.17, 0.26, 0.21, -0.16, 0.27, 0.2, -0.18, 0.27, 0.21, -0.15,
0.27, 0.2, -0.15, 0.28, 0.21, -0.16, 0.27, 0.19, -0.15, 0.29,
0.19, -0.16, 0.29, 0.2, -0.15, 0.28, 0.18, -0.17, 0.28, 0.19,
-0.18, 0.28, 0.19, -0.16, 0.29, 0.01, -0.38, 0.0, 0.01, -0.38,
0.0, 0.0, -0.38, -0.01, 0.01, -0.38, 0.01, 0.0, -0.38, 0.01,
0.01, -0.38, 0.0, -0.01, -0.38, 0.01, -0.01, -0.38, 0.0, 0.0,
-0.38, 0.01, -0.01, -0.38, 0.0, 0.0, -0.38, -0.01, -0.01, -0.38,
0.0, 0.0, -0.38, -0.01, 0.0, -0.38, -0.01, 0.0, -0.38, -0.01,
-0.17, 0.0, 0.0, -0.15, 0.04, -0.02, -0.17, 0.0, 0.0, 0.15,
-0.04, 0.02, 0.17, 0.0, 0.0, 0.15, -0.04, 0.02, -0.09, 0.0,
0.13, -0.05, 0.0, 0.16, -0.09, 0.0, 0.13, -0.15, 0.0, 0.05,
-0.17, 0.0, 0.0, -0.15, 0.0, 0.05, 0.13, -0.08, 0.04, 0.15,
-0.04, 0.02, 0.13, -0.08, 0.04, -0.13, 0.0, 0.1, -0.09, 0.0,
0.13, -0.13, 0.0, 0.1, 0.11, -0.11, 0.0, 0.13, -0.08, 0.04,
0.11, -0.11, 0.0, -0.13, -0.04, 0.07, -0.13, 0.0, 0.1, -0.13,
-0.04, 0.07, -0.13, 0.0, 0.09, -0.15, 0.0, 0.05, -0.13, 0.0,
0.09, -0.11, 0.04, 0.1, -0.13, 0.0, 0.09, -0.11, 0.04, 0.1,
-0.13, -0.08, 0.04, -0.13, -0.04, 0.07, -0.13, -0.08, 0.04, -0.13,
0.08, -0.04, -0.13, 0.04, -0.07, -0.13, 0.08, -0.04, 0.08, -0.14,
-0.02, 0.11, -0.11, 0.0, 0.08, -0.14, -0.02, -0.09, -0.11, 0.05,
-0.13, -0.08, 0.04, -0.09, -0.11, 0.05, -0.09, 0.11, -0.05, -0.13,
0.08, -0.04, -0.09, 0.11, -0.05, 0.08, -0.11, -0.07, 0.08, -0.14,
-0.02, 0.08, -0.11, -0.07, -0.05, -0.14, 0.07, -0.09, -0.11, 0.05,
-0.05, -0.14, 0.07, -0.05, 0.14, -0.07, -0.09, 0.11, -0.05, -0.05,
0.14, -0.07, -0.02, -0.11, 0.1, -0.05, -0.14, 0.07, -0.02, -0.11,
0.1, -0.02, 0.11, -0.1, -0.05, 0.14, -0.07, -0.02, 0.11, -0.1,
0.0, 0.08, -0.14, -0.02, 0.11, -0.1, 0.0, 0.08, -0.14, 0.05,
0.14, -0.07, 0.06, 0.14, -0.02, 0.05, 0.14, -0.07, 0.0, -0.08,
0.14, -0.02, -0.11, 0.1, 0.0, -0.08, 0.14, 0.0, -0.14, -0.08,
-0.04, -0.14, -0.05, 0.0, -0.14, -0.08, -0.02, 0.04, -0.15, 0.0,
0.08, -0.14, -0.02, 0.04, -0.15, 0.0, 0.14, -0.07, 0.05, 0.14,
-0.07, 0.0, 0.14, -0.07, -0.02, -0.04, 0.15, 0.0, -0.08, 0.14,
-0.02, -0.04, 0.15, -0.08, -0.14, -0.02, -0.06, -0.14, 0.02, -0.08,
-0.14, -0.02, -0.13, -0.08, 0.04, -0.11, -0.11, 0.0, -0.13, -0.08,
0.04, -0.05, 0.0, -0.16, -0.02, 0.04, -0.15, -0.05, 0.0, -0.16,
-0.05, 0.14, -0.07, 0.0, 0.14, -0.07, -0.05, 0.14, -0.07, 0.04,
-0.14, -0.05, 0.0, -0.14, -0.08, 0.04, -0.14, -0.05, -0.15, -0.04,
0.02, -0.13, -0.08, 0.04, -0.15, -0.04, 0.02, -0.09, 0.0, -0.13,
-0.05, 0.0, -0.16, -0.09, 0.0, -0.13, -0.06, 0.14, -0.02, -0.05,
0.14, -0.07, -0.06, 0.14, -0.02, -0.06, -0.14, 0.02, -0.05, -0.14,
0.07, -0.06, -0.14, 0.02, -0.17, 0.0, 0.0, -0.15, -0.04, 0.02,
-0.17, 0.0, 0.0, -0.08, 0.14, 0.02, -0.06, 0.14, -0.02, -0.08,
0.14, 0.02, -0.04, -0.14, -0.05, -0.08, -0.14, -0.02, -0.04, -0.14,
-0.05, -0.15, 0.0, -0.05, -0.17, 0.0, 0.0, -0.15, 0.0, -0.05,
-0.13, 0.0, -0.1, -0.09, 0.0, -0.13, -0.13, 0.0, -0.1, -0.04,
0.14, 0.05, -0.08, 0.14, 0.02, -0.04, 0.14, 0.05, -0.13, 0.04,
-0.07, -0.13, 0.0, -0.1, -0.13, 0.04, -0.07, -0.13, 0.0, -0.09,
-0.15, 0.0, -0.05, -0.13, 0.0, -0.09, -0.05, -0.14, 0.07, 0.0,
-0.14, 0.07, -0.05, -0.14, 0.07, 0.0, 0.08, -0.14, 0.02, 0.04,
-0.15, 0.0, 0.08, -0.14, 0.0, 0.14, 0.08, -0.04, 0.14, 0.05,
0.0, 0.14, 0.08, -0.11, -0.04, -0.1, -0.13, 0.0, -0.09, -0.11,
-0.04, -0.1, 0.02, 0.11, -0.1, 0.0, 0.08, -0.14, 0.02, 0.11,
-0.1, 0.04, 0.14, 0.05, 0.0, 0.14, 0.08, 0.04, 0.14, 0.05,
-0.08, -0.08, -0.11, -0.11, -0.04, -0.1, -0.08, -0.08, -0.11, 0.0,
-0.14, 0.07, 0.05, -0.14, 0.07, 0.0, -0.14, 0.07, 0.05, 0.14,
-0.07, 0.02, 0.11, -0.1, 0.05, 0.14, -0.07, -0.08, -0.11, -0.07,
-0.08, -0.08, -0.11, -0.08, -0.11, -0.07, 0.02, -0.11, 0.1, 0.0,
-0.08, 0.14, 0.02, -0.11, 0.1, 0.09, 0.11, -0.05, 0.05, 0.14,
-0.07, 0.09, 0.11, -0.05, 0.08, 0.14, 0.02, 0.04, 0.14, 0.05,
0.08, 0.14, 0.02, 0.06, -0.14, 0.02, 0.08, -0.14, -0.02, 0.06,
-0.14, 0.02, 0.06, 0.14, -0.02, 0.08, 0.14, 0.02, 0.06, 0.14,
-0.02, 0.13, 0.08, -0.04, 0.09, 0.11, -0.05, 0.13, 0.08, -0.04,
0.13, 0.0, 0.1, 0.21, -0.15, 0.27, 0.13, -0.04, 0.07, 0.05,
0.0, -0.16, 0.19, 0.15, -0.29, 0.09, 0.0, -0.13, 0.0, -0.15,
-0.35, -0.01, -0.15, -0.35, 0.0, 0.0, -0.16, -0.08, 0.08, 0.11,
-0.01, 0.17, 0.34, -0.04, 0.11, 0.1, -0.05, 0.0, -0.16, -0.01,
-0.15, -0.35, -0.06, -0.04, -0.13, 0.13, -0.08, 0.04, 0.21, -0.17,
0.26, 0.09, -0.11, 0.05, 0.0, 0.18, 0.34, 0.0, 0.18, 0.33,
-0.04, 0.11, 0.1, 0.05, 0.0, 0.16, 0.19, -0.15, 0.29, 0.09,
0.0, 0.13, 0.2, 0.15, -0.28, 0.21, 0.15, -0.27, 0.09, 0.0,
-0.13, -0.01, -0.16, -0.34, -0.01, -0.17, -0.34, -0.06, -0.04, -0.13,
0.0, 0.14, 0.09, 0.0, 0.18, 0.33, 0.04, 0.11, 0.1, 0.21,
-0.16, 0.27, 0.21, -0.17, 0.26, 0.13, -0.04, 0.07, 0.13, 0.0,
-0.1, 0.21, 0.15, -0.27, 0.13, 0.04, -0.07, -0.08, -0.08, -0.11,
-0.01, -0.17, -0.34, -0.04, -0.11, -0.1, -0.32, -0.18, -0.09, -0.32,
-0.18, -0.1, -0.11, -0.11, 0.0, 0.0, 0.18, 0.34, 0.01, 0.17,
0.34, 0.04, 0.11, 0.1, 0.08, -0.14, -0.02, 0.01, -0.38, 0.0,
0.04, -0.14, -0.05, 0.21, 0.16, -0.27, 0.21, 0.17, -0.26, 0.13,
0.04, -0.07, -0.08, -0.14, -0.02, -0.32, -0.18, -0.1, -0.08, -0.11,
-0.07, 0.08, 0.08, 0.11, 0.01, 0.17, 0.34, 0.06, 0.04, 0.13,
0.2, -0.15, 0.28, 0.21, -0.15, 0.27, 0.09, 0.0, 0.13, 0.13,
0.08, -0.04, 0.21, 0.17, -0.26, 0.09, 0.11, -0.05, 0.01, 0.38,
0.0, 0.01, 0.38, 0.0, 0.06, 0.14, -0.02, 0.05, -0.14, 0.07,
0.01, -0.38, 0.01, 0.06, -0.14, 0.02, 0.08, 0.14, 0.02, 0.01,
0.38, 0.0, 0.04, 0.14, 0.05, 0.19, -0.16, 0.29, 0.19, -0.15,
0.29, 0.02, -0.04, 0.15, 0.2, 0.18, -0.27, 0.19, 0.18, -0.27,
0.09, 0.11, -0.05, -0.32, -0.18, -0.11, -0.32, -0.17, -0.12, -0.08,
-0.11, -0.07, 0.05, 0.14, -0.07, 0.19, 0.18, -0.27, 0.02, 0.11,
-0.1, -0.08, -0.08, -0.11, -0.32, -0.17, -0.12, -0.11, -0.04, -0.1,
0.0, -0.08, 0.14, 0.18, -0.17, 0.28, 0.02, -0.04, 0.15, 0.0,
0.38, 0.01, 0.0, 0.38, 0.01, 0.04, 0.14, 0.05, 0.19, 0.18,
-0.28, 0.18, 0.17, -0.28, 0.02, 0.11, -0.1, -0.32, -0.16, -0.12,
-0.33, -0.15, -0.11, -0.11, -0.04, -0.1, 0.0, 0.14, 0.08, 0.0,
0.38, 0.01, -0.04, 0.14, 0.05, 0.01, -0.38, 0.0, 0.01, -0.38,
0.0, 0.06, -0.14, 0.02, 0.0, 0.08, -0.14, 0.18, 0.17, -0.28,
0.02, 0.04, -0.15, -0.13, 0.0, -0.09, -0.33, -0.15, -0.11, -0.15,
0.0, -0.05, 0.19, -0.18, 0.28, 0.18, -0.17, 0.28, 0.02, -0.11,
0.1, -0.21, 0.16, -0.27, -0.21, 0.15, -0.27, -0.13, 0.04, -0.07,
0.0, 0.38, 0.01, -0.01, 0.38, 0.0, -0.04, 0.14, 0.05, 0.0,
-0.38, 0.01, 0.01, -0.38, 0.01, 0.0, -0.14, 0.07, -0.13, 0.0,
-0.1, -0.21, 0.15, -0.27, -0.09, 0.0, -0.13, -0.33, -0.15, -0.1,
-0.33, -0.15, -0.09, -0.15, 0.0, -0.05, -0.08, 0.14, 0.02, -0.01,
0.38, 0.0, -0.06, 0.14, -0.02, -0.17, 0.0, 0.0, -0.33, -0.15,
-0.09, -0.15, -0.04, 0.02, -0.01, 0.38, 0.0, -0.01, 0.38, -0.01,
-0.06, 0.14, -0.02, -0.05, -0.14, 0.07, -0.01, -0.38, 0.01, 0.0,
-0.14, 0.07, -0.2, 0.15, -0.28, -0.19, 0.15, -0.29, -0.09, 0.0,
-0.13, -0.33, -0.16, -0.09, -0.33, -0.17, -0.08, -0.15, -0.04, 0.02,
-0.05, 0.14, -0.07, -0.01, 0.38, -0.01, 0.0, 0.14, -0.07, -0.05,
0.0, -0.16, -0.19, 0.15, -0.29, -0.02, 0.04, -0.15, -0.13, -0.08,
0.04, -0.33, -0.17, -0.08, -0.11, -0.11, 0.0, 0.0, -0.38, -0.01,
-0.01, -0.38, 0.0, -0.04, -0.14, -0.05, -0.19, -0.16, 0.29, -0.18,
-0.17, 0.28, -0.02, -0.04, 0.15, 0.0, 0.38, -0.01, 0.01, 0.38,
-0.01, 0.0, 0.14, -0.07, -0.19, 0.16, -0.29, -0.18, 0.17, -0.28,
-0.02, 0.04, -0.15, 0.0, -0.08, 0.14, -0.18, -0.17, 0.28, -0.02,
-0.11, 0.1, 0.05, 0.14, -0.07, 0.01, 0.38, -0.01, 0.06, 0.14,
-0.02, -0.01, -0.38, 0.0, -0.01, -0.38, 0.01, -0.06, -0.14, 0.02,
0.05, -0.14, 0.07, 0.06, -0.14, 0.02, 0.05, -0.14, 0.07, 0.06,
0.14, -0.02, 0.08, 0.14, 0.02, 0.06, 0.14, -0.02, 0.13, 0.08,
-0.04, 0.09, 0.11, -0.05, 0.13, 0.08, -0.04, 0.0, -0.14, 0.07,
0.05, -0.14, 0.07, 0.0, -0.14, 0.07, 0.08, 0.08, 0.11, 0.06,
0.04, 0.13, 0.08, 0.08, 0.11, -0.08, -0.14, -0.02, -0.08, -0.11,
-0.07, -0.08, -0.14, -0.02, 0.13, 0.04, -0.07, 0.13, 0.08, -0.04,
0.13, 0.04, -0.07, 0.04, 0.11, 0.1, 0.08, 0.08, 0.11, 0.04,
0.11, 0.1, -0.11, -0.11, 0.0, -0.08, -0.14, -0.02, -0.11, -0.11,
0.0, -0.05, -0.14, 0.07, 0.0, -0.14, 0.07, -0.05, -0.14, 0.07,
-0.08, -0.08, -0.11, -0.04, -0.11, -0.1, -0.08, -0.08, -0.11, 0.13,
0.0, -0.1, 0.13, 0.04, -0.07, 0.13, 0.0, -0.1, -0.06, -0.14,
0.02, -0.05, -0.14, 0.07, -0.06, -0.14, 0.02, 0.0, 0.14, 0.09,
0.04, 0.11, 0.1, 0.0, 0.14, 0.09, -0.06, -0.04, -0.13, -0.08,
-0.08, -0.11, -0.06, -0.04, -0.13, 0.09, 0.0, -0.13, 0.13, 0.0,
-0.1, 0.09, 0.0, -0.13, -0.04, 0.11, 0.1, 0.0, 0.14, 0.09,
-0.04, 0.11, 0.1, -0.08, -0.14, -0.02, -0.06, -0.14, 0.02, -0.08,
-0.14, -0.02, -0.05, 0.0, -0.16, -0.06, -0.04, -0.13, -0.05, 0.0,
-0.16, -0.04, -0.14, -0.05, -0.08, -0.14, -0.02, -0.04, -0.14, -0.05,
-0.08, 0.08, 0.11, -0.04, 0.11, 0.1, -0.08, 0.08, 0.11, 0.0,
0.0, -0.16, -0.05, 0.0, -0.16, 0.0, 0.0, -0.16, 0.05, 0.0,
-0.16, 0.09, 0.0, -0.13, 0.05, 0.0, -0.16, -0.06, 0.04, 0.13,
-0.08, 0.08, 0.11, -0.06, 0.04, 0.13, 0.02, 0.04, -0.15, 0.05,
0.0, -0.16, 0.02, 0.04, -0.15, 0.05, 0.0, -0.16, 0.0, 0.0,
-0.16, 0.05, 0.0, -0.16, 0.13, 0.08, -0.04, 0.15, 0.04, -0.02,
0.13, 0.08, -0.04, 0.0, -0.14, -0.08, -0.04, -0.14, -0.05, 0.0,
-0.14, -0.08, -0.05, 0.0, 0.16, -0.06, 0.04, 0.13, -0.05, 0.0,
0.16, 0.06, -0.04, -0.13, 0.05, 0.0, -0.16, 0.06, -0.04, -0.13,
0.11, 0.11, 0.0, 0.13, 0.08, -0.04, 0.11, 0.11, 0.0, 0.04,
-0.14, -0.05, 0.0, -0.14, -0.08, 0.04, -0.14, -0.05, 0.0, 0.0,
0.16, -0.05, 0.0, 0.16, 0.0, 0.0, 0.16, 0.08, -0.08, -0.11,
0.06, -0.04, -0.13, 0.08, -0.08, -0.11, 0.08, 0.14, 0.02, 0.11,
0.11, 0.0, 0.08, 0.14, 0.02, 0.04, -0.11, -0.1, 0.08, -0.08,
-0.11, 0.04, -0.11, -0.1, 0.08, 0.11, 0.07, 0.08, 0.14, 0.02,
0.08, 0.11, 0.07, 0.05, 0.0, 0.16, 0.0, 0.0, 0.16, 0.05,
0.0, 0.16, 0.06, 0.04, 0.13, 0.05, 0.0, 0.16, 0.06, 0.04,
0.13, 0.08, 0.08, 0.11, 0.08, 0.11, 0.07, 0.08, 0.08, 0.11,
-0.08, 0.08, 0.11, -0.11, 0.04, 0.1, -0.08, 0.08, 0.11, 0.0,
-0.14, -0.09, 0.04, -0.11, -0.1, 0.0, -0.14, -0.09, 0.11, 0.04,
0.1, 0.08, 0.08, 0.11, 0.11, 0.04, 0.1, -0.08, 0.11, 0.07,
-0.08, 0.08, 0.11, -0.08, 0.11, 0.07, -0.04, -0.11, -0.1, 0.0,
-0.14, -0.09, -0.04, -0.11, -0.1, 0.08, -0.08, -0.11, 0.08, -0.11,
-0.07, 0.08, -0.08, -0.11, 0.13, 0.0, 0.09, 0.11, 0.04, 0.1,
0.13, 0.0, 0.09, -0.08, 0.14, 0.02, -0.08, 0.11, 0.07, -0.08,
0.14, 0.02, 0.11, -0.04, -0.1, 0.08, -0.08, -0.11, 0.11, -0.04,
-0.1, 0.15, 0.0, 0.05, 0.13, 0.0, 0.09, 0.15, 0.0, 0.05,
-0.11, 0.11, 0.0, -0.08, 0.14, 0.02, -0.11, 0.11, 0.0, 0.13,
0.0, -0.09, 0.11, -0.04, -0.1, 0.13, 0.0, -0.09, -0.13, 0.08,
-0.04, -0.11, 0.11, 0.0, -0.13, 0.08, -0.04, 0.15, 0.0, -0.05,
0.13, 0.0, -0.09, 0.15, 0.0, -0.05, 0.17, 0.0, 0.0, 0.15,
0.0, 0.05, 0.17, 0.0, 0.0, -0.15, 0.04, -0.02, -0.13, 0.08,
-0.04, -0.15, 0.04, -0.02, 0.15, 0.04, -0.02, 0.17, 0.0, 0.0,
0.15, 0.04, -0.02, 0.17, 0.0, 0.0, 0.15, 0.0, -0.05, 0.17,
0.0, 0.0, -0.05, 0.0, 0.16, -0.02, -0.04, 0.15, -0.05, 0.0,
0.16, -0.17, 0.0, 0.0, -0.15, 0.04, -0.02, -0.17, 0.0, 0.0,
-0.05, 0.0, 0.16, -0.02, -0.04, 0.15, -0.05, 0.0, 0.16, 0.17,
0.0, 0.0, 0.15, 0.0, -0.05, 0.17, 0.0, 0.0, 0.15, 0.04,
-0.02, 0.17, 0.0, 0.0, 0.15, 0.04, -0.02, -0.15, 0.04, -0.02,
-0.13, 0.08, -0.04, -0.15, 0.04, -0.02, 0.17, 0.0, 0.0, 0.15,
0.0, 0.05, 0.17, 0.0, 0.0, 0.15, 0.0, -0.05, 0.13, 0.0,
-0.09, 0.15, 0.0, -0.05, -0.13, 0.08, -0.04, -0.11, 0.11, 0.0,
-0.13, 0.08, -0.04, 0.13, 0.0, -0.09, 0.11, -0.04, -0.1, 0.13,
0.0, -0.09, -0.11, 0.11, 0.0, -0.08, 0.14, 0.02, -0.11, 0.11,
0.0, 0.15, 0.0, 0.05, 0.13, 0.0, 0.09, 0.15, 0.0, 0.05,
0.11, -0.04, -0.1, 0.08, -0.08, -0.11, 0.11, -0.04, -0.1, -0.08,
0.14, 0.02, -0.08, 0.11, 0.07, -0.08, 0.14, 0.02, 0.13, 0.0,
0.09, 0.11, 0.04, 0.1, 0.13, 0.0, 0.09, 0.08, -0.08, -0.11,
0.08, -0.11, -0.07, 0.08, -0.08, -0.11, -0.04, -0.11, -0.1, 0.0,
-0.14, -0.09, -0.04, -0.11, -0.1, -0.08, 0.11, 0.07, -0.08, 0.08,
0.11, -0.08, 0.11, 0.07, 0.11, 0.04, 0.1, 0.08, 0.08, 0.11,
0.11, 0.04, 0.1, 0.0, -0.14, -0.09, 0.04, -0.11, -0.1, 0.0,
-0.14, -0.09, -0.08, 0.08, 0.11, -0.11, 0.04, 0.1, -0.08, 0.08,
0.11, 0.08, 0.08, 0.11, 0.08, 0.11, 0.07, 0.08, 0.08, 0.11,
0.05, -0.14, 0.07, 0.02, -0.11, 0.1, 0.05, -0.14, 0.07, 0.06,
0.04, 0.13, 0.05, 0.0, 0.16, 0.06, 0.04, 0.13, 0.09, -0.11,
0.05, 0.05, -0.14, 0.07, 0.09, -0.11, 0.05, 0.05, 0.0, 0.16,
0.0, 0.0, 0.16, 0.05, 0.0, 0.16, 0.08, 0.11, 0.07, 0.08,
0.14, 0.02, 0.08, 0.11, 0.07, 0.04, -0.11, -0.1, 0.08, -0.08,
-0.11, 0.04, -0.11, -0.1, 0.08, 0.14, 0.02, 0.11, 0.11, 0.0,
0.08, 0.14, 0.02, 0.13, 0.0, 0.1, 0.13, -0.04, 0.07, 0.13,
0.0, 0.1, 0.08, -0.08, -0.11, 0.06, -0.04, -0.13, 0.08, -0.08,
-0.11, 0.0, 0.0, 0.16, -0.05, 0.0, 0.16, 0.0, 0.0, 0.16,
0.11, 0.11, 0.0, 0.13, 0.08, -0.04, 0.11, 0.11, 0.0, 0.13,
-0.08, 0.04, 0.09, -0.11, 0.05, 0.13, -0.08, 0.04, 0.06, -0.04,
-0.13, 0.05, 0.0, -0.16, 0.06, -0.04, -0.13, -0.05, 0.0, 0.16,
-0.06, 0.04, 0.13, -0.05, 0.0, 0.16, 0.13, 0.08, -0.04, 0.15,
0.04, -0.02, 0.13, 0.08, -0.04, 0.05, 0.0, 0.16, 0.09, 0.0,
0.13, 0.05, 0.0, 0.16, 0.05, 0.0, -0.16, 0.0, 0.0, -0.16,
0.05, 0.0, -0.16, 0.02, 0.04, -0.15, 0.05, 0.0, -0.16, 0.02,
0.04, -0.15, 0.13, -0.04, 0.07, 0.13, -0.08, 0.04, 0.13, -0.04,
0.07, -0.06, 0.04, 0.13, -0.08, 0.08, 0.11, -0.06, 0.04, 0.13,
0.05, 0.0, -0.16, 0.09, 0.0, -0.13, 0.05, 0.0, -0.16, 0.0,
0.0, -0.16, -0.05, 0.0, -0.16, 0.0, 0.0, -0.16, -0.08, 0.08,
0.11, -0.04, 0.11, 0.1, -0.08, 0.08, 0.11, 0.08, -0.14, -0.02,
0.04, -0.14, -0.05, 0.08, -0.14, -0.02, -0.05, 0.0, -0.16, -0.06,
-0.04, -0.13, -0.05, 0.0, -0.16, 0.09, 0.0, 0.13, 0.13, 0.0,
0.1, 0.09, 0.0, 0.13, -0.04, 0.11, 0.1, 0.0, 0.14, 0.09,
-0.04, 0.11, 0.1, 0.09, 0.0, -0.13, 0.13, 0.0, -0.1, 0.09,
0.0, -0.13, 0.05, -0.14, 0.07, 0.06, -0.14, 0.02, 0.05, -0.14,
0.07, -0.06, -0.04, -0.13, -0.08, -0.08, -0.11, -0.06, -0.04, -0.13,
0.0, 0.14, 0.09, 0.04, 0.11, 0.1, 0.0, 0.14, 0.09, 0.13,
0.0, -0.1, 0.13, 0.04, -0.07, 0.13, 0.0, -0.1, 0.02, -0.04,
0.15, 0.05, 0.0, 0.16, 0.02, -0.04, 0.15, -0.08, -0.08, -0.11,
-0.04, -0.11, -0.1, -0.08, -0.08, -0.11, -0.11, -0.11, 0.0, -0.08,
-0.14, -0.02, -0.11, -0.11, 0.0, 0.04, 0.11, 0.1, 0.08, 0.08,
0.11, 0.04, 0.11, 0.1, 0.13, 0.04, -0.07, 0.13, 0.08, -0.04,
0.13, 0.04, -0.07, 0.0, -0.08, 0.14, 0.02, -0.04, 0.15, 0.0,
-0.08, 0.14, -0.08, -0.14, -0.02, -0.08, -0.11, -0.07, -0.08, -0.14,
-0.02, 0.04, -0.11, -0.1, 0.08, -0.08, -0.11, 0.08, -0.08, -0.11,
0.08, 0.14, 0.02, 0.04, 0.14, 0.05, 0.08, 0.14, 0.02, 0.09,
0.11, -0.05, 0.05, 0.14, -0.07, 0.09, 0.11, -0.05, -0.08, -0.11,
-0.07, -0.08, -0.08, -0.11, -0.08, -0.11, -0.07, 0.06, -0.14, 0.02,
0.08, -0.14, -0.02, 0.06, -0.14, 0.02, 0.05, 0.14, -0.07, 0.02,
0.11, -0.1, 0.05, 0.14, -0.07, -0.08, -0.08, -0.11, -0.11, -0.04,
-0.1, -0.08, -0.08, -0.11, 0.08, -0.14, -0.02, 0.04, -0.14, -0.05,
0.08, -0.14, -0.02, 0.04, 0.14, 0.05, 0.0, 0.14, 0.08, 0.04,
0.14, 0.05, 0.02, -0.11, 0.1, 0.0, -0.08, 0.14, 0.02, -0.11,
0.1, 0.02, 0.11, -0.1, 0.0, 0.08, -0.14, 0.02, 0.11, -0.1,
-0.11, -0.04, -0.1, -0.13, 0.0, -0.09, -0.11, -0.04, -0.1, 0.0,
0.14, 0.08, -0.04, 0.14, 0.05, 0.0, 0.14, 0.08, 0.0, -0.08,
0.14, 0.02, -0.04, 0.15, 0.0, -0.08, 0.14, 0.0, 0.08, -0.14,
0.02, 0.04, -0.15, 0.0, 0.08, -0.14, -0.13, 0.0, -0.09, -0.15,
0.0, -0.05, -0.13, 0.0, -0.09, -0.13, 0.04, -0.07, -0.13, 0.0,
-0.1, -0.13, 0.04, -0.07, -0.04, 0.14, 0.05, -0.08, 0.14, 0.02,
-0.04, 0.14, 0.05, -0.13, 0.0, -0.1, -0.09, 0.0, -0.13, -0.13,
0.0, -0.1, -0.15, 0.0, -0.05, -0.17, 0.0, 0.0, -0.15, 0.0,
-0.05, -0.08, 0.14, 0.02, -0.06, 0.14, -0.02, -0.08, 0.14, 0.02,
0.02, -0.04, 0.15, 0.05, 0.0, 0.16, 0.02, -0.04, 0.15, -0.17,
0.0, 0.0, -0.15, -0.04, 0.02, -0.17, 0.0, 0.0, 0.05, 0.0,
0.16, 0.09, 0.0, 0.13, 0.05, 0.0, 0.16, -0.06, 0.14, -0.02,
-0.05, 0.14, -0.07, -0.06, 0.14, -0.02, -0.09, 0.0, -0.13, -0.05,
0.0, -0.16, -0.09, 0.0, -0.13, -0.15, -0.04, 0.02, -0.13, -0.08,
0.04, -0.15, -0.04, 0.02, -0.05, 0.14, -0.07, 0.0, 0.14, -0.07,
-0.05, 0.14, -0.07, 0.09, 0.0, 0.13, 0.13, 0.0, 0.1, 0.09,
0.0, 0.13, -0.05, 0.0, -0.16, -0.02, 0.04, -0.15, -0.05, 0.0,
-0.16, -0.13, -0.08, 0.04, -0.11, -0.11, 0.0, -0.13, -0.08, 0.04,
0.13, 0.0, 0.1, 0.13, -0.04, 0.07, 0.13, 0.0, 0.1, -0.02,
-0.04, 0.15, 0.0, -0.08, 0.14, -0.02, -0.04, 0.15, 0.0, 0.14,
-0.07, 0.05, 0.14, -0.07, 0.0, 0.14, -0.07, -0.02, 0.04, -0.15,
0.0, 0.08, -0.14, -0.02, 0.04, -0.15, 0.0, -0.08, 0.14, -0.02,
-0.11, 0.1, 0.0, -0.08, 0.14, 0.05, 0.14, -0.07, 0.06, 0.14,
-0.02, 0.05, 0.14, -0.07, 0.13, -0.04, 0.07, 0.13, -0.08, 0.04,
0.13, -0.04, 0.07, 0.0, 0.08, -0.14, -0.02, 0.11, -0.1, 0.0,
0.08, -0.14, 0.13, -0.08, 0.04, 0.09, -0.11, 0.05, 0.13, -0.08,
0.04, -0.02, 0.11, -0.1, -0.05, 0.14, -0.07, -0.02, 0.11, -0.1,
-0.02, -0.11, 0.1, -0.05, -0.14, 0.07, -0.02, -0.11, 0.1, 0.09,
-0.11, 0.05, 0.05, -0.14, 0.07, 0.09, -0.11, 0.05, -0.05, 0.14,
-0.07, -0.09, 0.11, -0.05, -0.05, 0.14, -0.07, -0.05, -0.14, 0.07,
-0.09, -0.11, 0.05, -0.05, -0.14, 0.07, 0.05, -0.14, 0.07, 0.02,
-0.11, 0.1, 0.05, -0.14, 0.07, 0.08, -0.11, -0.07, 0.08, -0.14,
-0.02, 0.08, -0.11, -0.07, -0.09, 0.11, -0.05, -0.13, 0.08, -0.04,
-0.09, 0.11, -0.05, -0.09, -0.11, 0.05, -0.13, -0.08, 0.04, -0.09,
-0.11, 0.05, 0.08, -0.14, -0.02, 0.11, -0.11, 0.0, 0.08, -0.14,
-0.02, -0.13, 0.08, -0.04, -0.13, 0.04, -0.07, -0.13, 0.08, -0.04,
-0.13, -0.08, 0.04, -0.13, -0.04, 0.07, -0.13, -0.08, 0.04, -0.11,
0.04, 0.1, -0.13, 0.0, 0.09, -0.11, 0.04, 0.1, -0.13, 0.0,
0.09, -0.15, 0.0, 0.05, -0.13, 0.0, 0.09, -0.13, -0.04, 0.07,
-0.13, 0.0, 0.1, -0.13, -0.04, 0.07, 0.11, -0.11, 0.0, 0.13,
-0.08, 0.04, 0.11, -0.11, 0.0, -0.13, 0.0, 0.1, -0.09, 0.0,
0.13, -0.13, 0.0, 0.1, 0.13, -0.08, 0.04, 0.15, -0.04, 0.02,
0.13, -0.08, 0.04, -0.15, 0.0, 0.05, -0.17, 0.0, 0.0, -0.15,
0.0, 0.05, -0.09, 0.0, 0.13, -0.05, 0.0, 0.16, -0.09, 0.0,
0.13, 0.15, -0.04, 0.02, 0.17, 0.0, 0.0, 0.15, -0.04, 0.02,
0.08, 0.08, 0.11, 0.06, 0.04, 0.13, 0.08, 0.08, 0.11, -0.04,
0.14, 0.05, -0.08, 0.11, 0.07, -0.04, 0.11, 0.1, -0.06, 0.14,
-0.02, -0.09, 0.11, -0.05, -0.11, 0.11, 0.0, 0.0, 0.14, -0.07,
0.02, 0.11, -0.1, -0.02, 0.11, -0.1, 0.06, 0.14, -0.02, 0.11,
0.11, 0.0, 0.09, 0.11, -0.05, 0.04, 0.14, 0.05, 0.04, 0.11,
0.1, 0.08, 0.11, 0.07, -0.09, 0.0, 0.13, -0.05, 0.0, 0.16,
-0.06, 0.04, 0.13, -0.15, 0.0, 0.05, -0.15, -0.04, 0.02, -0.13,
-0.04, 0.07, -0.09, 0.0, -0.13, -0.06, -0.04, -0.13, -0.11, -0.04,
-0.1, 0.09, 0.0, -0.13, 0.13, 0.0, -0.1, 0.13, 0.0, -0.09,
-0.15, 0.0, -0.05, -0.17, 0.0, 0.0, -0.15, 0.04, -0.02, -0.02,
0.04, -0.15, 0.02, 0.04, -0.15, 0.0, 0.0, -0.16, 0.13, 0.04,
-0.07, 0.15, 0.04, -0.02, 0.15, 0.0, -0.05, 0.0, 0.0, 0.16,
-0.05, 0.0, 0.16, -0.05, 0.0, 0.16, 0.11, 0.04, 0.1, 0.06,
0.04, 0.13, 0.09, 0.0, 0.13, 0.15, 0.0, 0.05, 0.13, 0.0,
0.09, 0.13, 0.0, 0.1, -0.06, -0.14, 0.02, -0.05, -0.14, 0.07,
-0.09, -0.11, 0.05, 0.06, -0.14, 0.02, 0.08, -0.14, -0.02, 0.11,
-0.11, 0.0, -0.08, -0.11, -0.07, -0.04, -0.11, -0.1, -0.04, -0.14,
-0.05, -0.02, -0.11, 0.1, 0.0, -0.14, 0.07, 0.02, -0.11, 0.1];
const fullposition = refmesh.map((v, i) => position[i % 3] + v);
const fullcolor = refmesh.map((v, i) => i % 3 ? 0 : 1); //return color[i % 3]
let shape = new NGL.Shape("clash");
let meshBuffer = new NGL.MeshBuffer({
position: new Float32Array(fullposition),
color: new Float32Array(fullcolor)
});
shape.addBuffer(meshBuffer);
let shapeComp = stage.addComponentFromObject(shape);
shapeComp.addRepresentation("buffer");
if (!myData.spinningTimer) {
myData.spinningTimer = [];
}
myData.spinningTimer.push(setInterval(function () {
try {
shapeComp.controls.spin([1, 0, 0], 30)
} catch (e) {
//pass. it dissapeared ungracefully!
}
}, 100));
//spikyball made and added.
};
NGL.specialOps.hardReset = function () { //when the page is faux-refreshed.
Object.entries(NGL.stageIds).forEach(([k, v]) => $('#' + k).children().detach());
window.myData = undefined;
NGL.stageIds = {};
window.stage = undefined;
if (NGL.Debug) {
console.log('HARD RESET.');
}
};
NGL.specialOps.addMembrane = function (stage, radius, color, vectors, opacity) {
// stage = NGL.getStage();
// NGL.specialOps.addMembrane(stage, 55, 'gold', [[208.85211245, 208.86443969, 282.05174259],
// [208.89116754, 208.9411814 , 251.45186085]])
// get defaults
radius = radius || 30;
color = color || 'gold';
// undefined vectors assumes it is OPM oriented. (14.3, 14.3 on Z-axis)
const top = vectors !== undefined ? new NGL.Vector3(...vectors[0]) : new NGL.Vector3(0,0,14.3);
const bottom = vectors !== undefined ? new NGL.Vector3(...vectors[1]) : new NGL.Vector3(0,0,-14.3);
opacity = opacity || 0.5;
// clear and set
stage.removeComponentsbyName('membrane');
let shape = new NGL.Shape("shape", { disableImpostor: true, radialSegments: 10 });
const col3 = new NGL.Color(color);
// adding a thin layer looks rubbish:
// const d = top.distanceTo(bottom);
// const top_thin = top.clone().lerp(bottom, 30/d);
// const bottom_thin = bottom.clone().lerp(top, 30/d);
shape.addCylinder(top, bottom, col3, radius, 'membrane');
let shapeComp = stage.addComponentFromObject(shape, {name: 'membrane'});
shapeComp.addRepresentation("buffer", {opacity: opacity});
};
NGL.specialOps.removeImg = function (id) {
id = id || myData.ids[0];
var img = '#' + id + ' img';
if (!!$(img).length) { //there is an image. Remove and get the sizes
var w = $(img).width();
var h = $(img).height();
$(img).detach();
$('#' + id).css('width', w).css('height', h);
}
};
NGL.specialOps._run_loadFx = function (protein, fx) {
if (typeof fx === 'function') {
fx(protein)
} else if (typeof fx === 'string') {
var fxname = fx.replace(/\W/g, '');
if (window[fxname] !== undefined) {
setTimeout(() => window[fxname](protein), 100)
} else {
setTimeout(() => NGL.specialOps._run_loadFx(protein, fxname), 500)
} //ansync issue.
} //prevent XSS
else {
//blank? chainbow.
protein.addRepresentation("cartoon", {smoothSheet: true});
protein.autoView();
}
return protein;
};
NGL.specialOps.load = function (option, noLoadFun, id) {
//id is last due to legacy issues with pages with custom code!
// super extreme case. No multiLoad has been called to initialise the scene. This a last ditch attempt.
NGL.specialOps.postInitialise();
// determine what option is.
id = id || myData.ids[0];
delete window.myData.partner;
if (myData.currentIndices[id] !== undefined) {
myData.currentIndex = myData.currentIndices[id];
}
var index;
if (typeof option === "undefined") {
index = myData.currentIndex;
} //use is lazy.
else if (typeof option === "number") {
index = option;
} //user gave index.
else if (typeof option === 'object') { //user gave a protein object
myData.proteins.push(object);
index = myData.proteins.length - 1;
} else if ((typeof option === "string") && (myData.proteins.some(v => v.name === option))) {
index = myData.proteins.map(v => v.name).indexOf(option);
} else if ((typeof option === "string") && (myData.proteins.some(v => v.value === option))) {
index = myData.proteins.map(v => v.value).indexOf(option);
} else if ((typeof option === "string") && (option.length === 4)) { // user gave pdb code that is new.
myData.proteins.push({type: 'rcsb', value: option.slice(0, 4)}); //no chains please.
index = myData.proteins.length - 1;
} else if ((!isNaN(parseInt(option))) && (parseInt(option) < myData.proteins.length)) { //user gave a number as a string.
index = parseInt(option);
} else {
throw `No idea what this "${option}" user-submitted option is for Michelanglo.js.`
}
// check if the one asked for is loaded.
if ((index === myData.currentIndex)) {
let proteins = NGL.getStage(id).getComponentsByType('structure');
//if (typeof myData.proteins[index].loadFx === 'function') {myData.proteins[index].loadFx(protein)};
return Promise.all(proteins.map(protein => new Promise(function (resolve, reject) {
resolve(protein)
})));
} else {
myData.currentIndex = index;
myData.currentIndices[id] = index;
myData.currentChain = myData.proteins[index].chain
}
// deal with image.
if ($('#' + id + ' img')) {
NGL.specialOps.removeImg(id);
}
// toggle structure
// - check if there is a stage.
if (!NGL.stageIds[id]) {
NGL.stageIds[id] = new NGL.Stage(id, {backgroundColor: myData.backgroundColors[id]});
window.addEventListener("resize", function (event) {
NGL.getStage(id).handleResize();
}, false);
} else { //tabula rasa!
NGL.getStage(id).removeAllComponents();
}
//new model. Force reset
if (myData.proteins[index].type === 'url') {
// there is no default extension... fixing this.
let options = {'firstModelOnly': true,
'name': myData.proteins[index].name};
let possible = myData.proteins[index].value.split('.').pop().split('?')[0].toLowerCase();
if (myData.proteins[index].ext !== undefined) {options['ext'] = myData.proteins[index].ext;}
else if (['pdb', 'mol', 'mol2', 'sdf', 'cif'].findIndex(v => v === possible) === -1) {
options['ext'] = 'pdb';
}
return NGL.getStage(id).loadFile(myData.proteins[index].value, options).then(function (protein) {
if (noLoadFun === false || noLoadFun === undefined) {
NGL.specialOps._run_loadFx(protein, myData.proteins[index].loadFx);
}
});
} else if (myData.proteins[index].type === 'data') {
var ext = myData.proteins[index].ext || 'pdb';
if (!!myData.proteins[index].isVariable) {
let varname = myData.proteins[index].value.replace(/\W/g, '');
if (window[varname] !== undefined) {
return NGL.getStage(id).loadFile(new Blob([window[varname], {type: 'text/plain'}]), {
ext: ext,
firstModelOnly: true
})
.then(function (protein) {
if (noLoadFun === false || noLoadFun === undefined) {
NGL.specialOps._run_loadFx(protein, myData.proteins[index].loadFx);
}
});
} else { //async issue.
setTimeout(() => NGL.specialOps.load(option, noLoadFun, id), 300);
}
} else if (typeof myData.proteins[index].value === 'string') {
return NGL.getStage(id).loadFile(new Blob([myData.proteins[index].value, {type: 'text/plain'}]), {
ext: ext,
firstModelOnly: true
}).then(function (protein) {
if (noLoadFun === false || noLoadFun === undefined) {
NGL.specialOps._run_loadFx(protein, myData.proteins[index].loadFx);
}
});
} else { //is a blob already
return NGL.getStage(id).loadFile(myData.proteins[index].value, {
ext: ext,
firstModelOnly: true
}).then(function (protein) {
if (noLoadFun === false || noLoadFun === undefined) {
NGL.specialOps._run_loadFx(protein, myData.proteins[index].loadFx);
}
});
}
} else if (myData.proteins[index].type === 'none') {
myData.currentIndices[id] = -1;
myData.currentIndex = -1; //pass. Super odd backdoor. Why is it needed? Let's keep it secret in case I think, but it's too weird.
} else if (myData.proteins[index].value.replace('rcsb://', '').trim().length === 4) { //PDB code.
return NGL.getStage(id).loadFile('rcsb://' + myData.proteins[index].value.replace('rcsb://', '').toLowerCase().slice(0, 4), {firstModelOnly: true}).then(function (protein) {
if (noLoadFun === false || noLoadFun === undefined) {
NGL.specialOps._run_loadFx(protein, myData.proteins[index].loadFx);
}
});
} else {
throw 'No idea what this is.';
}
};
NGL.specialOps.showTitle = function (id, title) {
// shows a temporary title, which is actually a label element with a for attribute pointing to the viewport id.
// Consequently if one wanted to override it's location one could add <label for="viewport"></label>
where desired.
if (title) {
var titleEl = 'label[for="' + id + '"]';
if (!$(titleEl).length) {
$('#' + id).after('');
}
$(titleEl).html(title).fadeIn(1000).fadeOut(1000);
}
};
NGL.specialOps.multiLoader = function (id, proteins, backgroundColor, startIndex) {
/*
Note that the multiloader does not support multiple viewports.
id is the id.
proteins is a list of {name: 'unique_name', type: 'rcsb' (default) | 'file' | 'data', value: xxx, 'ext': 'pdb' , loadFx: xxx}
where loadFx is the function to run after loading.
background is a color (def white).
The multiLoader calls the load function with an index of startIndex or zero.
Do note that the function load returns a promise
*/
console.log('starting multiloader');
startIndex = startIndex || 0;
if (NGL.Debug) {
console.log('starting multiloader');
console.log(proteins);
}
// prevent body scrolling
NGL.specialOps._preventScroll(id);
// check for awkard case it has already been started.
if (typeof window.myData === 'object') {
window.myData.proteins.push(...proteins);
if (window.myData.ids.indexOf(id) === -1) {window.myData.ids.push(id);}
window.myData.currentIndices[id] = window.myData.currentIndices[id] || -1;
window.myData.backgroundColors[id] = window.myData.backgroundColors[id] || backgroundColor || 'white';
} else {
window.myData = {
currentIndex: -1,
currentIndices: {},
proteins: proteins,
id: id,
ids: [id],
backgroundColor: 'white',
backgroundColors: {},
clicks: {}
};
window.myData.currentIndices[id] = -1;
window.myData.backgroundColors[id] = backgroundColor || 'white';
window.myData.clicks[id] = {residues: new Set(), representation: undefined};
}
var img = $('#' + id + ' img');
if (img.length) {
img.css('cursor', 'pointer');
NGL.specialOps.showTitle(id, 'Click to interact with the protein structure.');
$('#viewport_menu_popover').click(() => NGL.specialOps.load(startIndex, false, id));
$('#' + id).prepend(`