diff --git a/Chapter7/7.3.2.html b/Chapter7/7.3.2.html index 0827d9d..2fd04a0 100644 --- a/Chapter7/7.3.2.html +++ b/Chapter7/7.3.2.html @@ -3,7 +3,7 @@ - + + + + + + + + + + diff --git a/lib/ColladaLoader.js b/lib/ColladaLoader.js new file mode 100644 index 0000000..704a5ce --- /dev/null +++ b/lib/ColladaLoader.js @@ -0,0 +1,5519 @@ +/** +* @author Tim Knip / http://www.floorplanner.com/ / tim at floorplanner.com +* @author Tony Parisi / http://www.tonyparisi.com/ +*/ + +THREE.ColladaLoader = function () { + + var COLLADA = null; + var scene = null; + var visualScene; + var kinematicsModel; + + var readyCallbackFunc = null; + + var sources = {}; + var images = {}; + var animations = {}; + var controllers = {}; + var geometries = {}; + var materials = {}; + var effects = {}; + var cameras = {}; + var lights = {}; + + var animData; + var kinematics; + var visualScenes; + var kinematicsModels; + var baseUrl; + var morphs; + var skins; + + var flip_uv = true; + var preferredShading = THREE.SmoothShading; + + var options = { + // Force Geometry to always be centered at the local origin of the + // containing Mesh. + centerGeometry: false, + + // Axis conversion is done for geometries, animations, and controllers. + // If we ever pull cameras or lights out of the COLLADA file, they'll + // need extra work. + convertUpAxis: false, + + subdivideFaces: true, + + upAxis: 'Y', + + // For reflective or refractive materials we'll use this cubemap + defaultEnvMap: null + + }; + + var colladaUnit = 1.0; + var colladaUp = 'Y'; + var upConversion = null; + + function load ( url, readyCallback, progressCallback, failCallback ) { + + var length = 0; + + if ( document.implementation && document.implementation.createDocument ) { + + var request = new XMLHttpRequest(); + + request.onreadystatechange = function() { + + if ( request.readyState === 4 ) { + + if ( request.status === 0 || request.status === 200 ) { + + if ( request.response ) { + + readyCallbackFunc = readyCallback; + parse( request.response, undefined, url ); + + } else { + + if ( failCallback ) { + + failCallback( { type: 'error', url: url } ); + + } else { + + console.error( "ColladaLoader: Empty or non-existing file (" + url + ")" ); + + } + + } + + }else{ + + if( failCallback ){ + + failCallback( { type: 'error', url: url } ); + + }else{ + + console.error( 'ColladaLoader: Couldn\'t load "' + url + '" (' + request.status + ')' ); + + } + + } + + } else if ( request.readyState === 3 ) { + + if ( progressCallback ) { + + if ( length === 0 ) { + + length = request.getResponseHeader( "Content-Length" ); + + } + + progressCallback( { total: length, loaded: request.responseText.length } ); + + } + + } + + }; + + request.open( "GET", url, true ); + request.send( null ); + + } else { + + alert( "Don't know how to parse XML!" ); + + } + + } + + function parse( text, callBack, url ) { + + COLLADA = new DOMParser().parseFromString( text, 'text/xml' ); + callBack = callBack || readyCallbackFunc; + + if ( url !== undefined ) { + + var parts = url.split( '/' ); + parts.pop(); + baseUrl = ( parts.length < 1 ? '.' : parts.join( '/' ) ) + '/'; + + } + + parseAsset(); + setUpConversion(); + images = parseLib( "library_images image", _Image, "image" ); + materials = parseLib( "library_materials material", Material, "material" ); + effects = parseLib( "library_effects effect", Effect, "effect" ); + geometries = parseLib( "library_geometries geometry", Geometry, "geometry" ); + cameras = parseLib( "library_cameras camera", Camera, "camera" ); + lights = parseLib( "library_lights light", Light, "light" ); + controllers = parseLib( "library_controllers controller", Controller, "controller" ); + animations = parseLib( "library_animations animation", Animation, "animation" ); + visualScenes = parseLib( "library_visual_scenes visual_scene", VisualScene, "visual_scene" ); + kinematicsModels = parseLib( "library_kinematics_models kinematics_model", KinematicsModel, "kinematics_model" ); + + morphs = []; + skins = []; + + visualScene = parseScene(); + scene = new THREE.Group(); + + for ( var i = 0; i < visualScene.nodes.length; i ++ ) { + + scene.add( createSceneGraph( visualScene.nodes[ i ] ) ); + + } + + // unit conversion + scene.scale.multiplyScalar( colladaUnit ); + + createAnimations(); + + kinematicsModel = parseKinematicsModel(); + createKinematics(); + + var result = { + + scene: scene, + morphs: morphs, + skins: skins, + animations: animData, + kinematics: kinematics, + dae: { + images: images, + materials: materials, + cameras: cameras, + lights: lights, + effects: effects, + geometries: geometries, + controllers: controllers, + animations: animations, + visualScenes: visualScenes, + visualScene: visualScene, + scene: visualScene, + kinematicsModels: kinematicsModels, + kinematicsModel: kinematicsModel + } + + }; + + if ( callBack ) { + + callBack( result ); + + } + + return result; + + } + + function setPreferredShading ( shading ) { + + preferredShading = shading; + + } + + function parseAsset () { + + var elements = COLLADA.querySelectorAll('asset'); + + var element = elements[0]; + + if ( element && element.childNodes ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'unit': + + var meter = child.getAttribute( 'meter' ); + + if ( meter ) { + + colladaUnit = parseFloat( meter ); + + } + + break; + + case 'up_axis': + + colladaUp = child.textContent.charAt(0); + break; + + } + + } + + } + + } + + function parseLib ( q, classSpec, prefix ) { + + var elements = COLLADA.querySelectorAll(q); + + var lib = {}; + + var i = 0; + + var elementsLength = elements.length; + + for ( var j = 0; j < elementsLength; j ++ ) { + + var element = elements[j]; + var daeElement = ( new classSpec() ).parse( element ); + + if ( !daeElement.id || daeElement.id.length === 0 ) daeElement.id = prefix + ( i ++ ); + lib[ daeElement.id ] = daeElement; + + } + + return lib; + + } + + function parseScene() { + + var sceneElement = COLLADA.querySelectorAll('scene instance_visual_scene')[0]; + + if ( sceneElement ) { + + var url = sceneElement.getAttribute( 'url' ).replace( /^#/, '' ); + return visualScenes[ url.length > 0 ? url : 'visual_scene0' ]; + + } else { + + return null; + + } + + } + + function parseKinematicsModel() { + + var kinematicsModelElement = COLLADA.querySelectorAll('instance_kinematics_model')[0]; + + if ( kinematicsModelElement ) { + + var url = kinematicsModelElement.getAttribute( 'url' ).replace(/^#/, ''); + return kinematicsModels[ url.length > 0 ? url : 'kinematics_model0' ]; + + } else { + + return null; + + } + + } + + function createAnimations() { + + animData = []; + + // fill in the keys + recurseHierarchy( scene ); + + } + + function recurseHierarchy( node ) { + + var n = visualScene.getChildById( node.colladaId, true ), + newData = null; + + if ( n && n.keys ) { + + newData = { + fps: 60, + hierarchy: [ { + node: n, + keys: n.keys, + sids: n.sids + } ], + node: node, + name: 'animation_' + node.name, + length: 0 + }; + + animData.push(newData); + + for ( var i = 0, il = n.keys.length; i < il; i ++ ) { + + newData.length = Math.max( newData.length, n.keys[i].time ); + + } + + } else { + + newData = { + hierarchy: [ { + keys: [], + sids: [] + } ] + } + + } + + for ( var i = 0, il = node.children.length; i < il; i ++ ) { + + var d = recurseHierarchy( node.children[i] ); + + for ( var j = 0, jl = d.hierarchy.length; j < jl; j ++ ) { + + newData.hierarchy.push( { + keys: [], + sids: [] + } ); + + } + + } + + return newData; + + } + + function calcAnimationBounds () { + + var start = 1000000; + var end = -start; + var frames = 0; + var ID; + for ( var id in animations ) { + + var animation = animations[ id ]; + ID = ID || animation.id; + for ( var i = 0; i < animation.sampler.length; i ++ ) { + + var sampler = animation.sampler[ i ]; + + sampler.create(); + + start = Math.min( start, sampler.startTime ); + end = Math.max( end, sampler.endTime ); + frames = Math.max( frames, sampler.input.length ); + + } + + } + + return { start:start, end:end, frames:frames,ID:ID }; + + } + + function createMorph ( geometry, ctrl ) { + + var morphCtrl = ctrl instanceof InstanceController ? controllers[ ctrl.url ] : ctrl; + + if ( !morphCtrl || !morphCtrl.morph ) { + + console.log("could not find morph controller!"); + return; + + } + + var morph = morphCtrl.morph; + + for ( var i = 0; i < morph.targets.length; i ++ ) { + + var target_id = morph.targets[ i ]; + var daeGeometry = geometries[ target_id ]; + + if ( !daeGeometry.mesh || + !daeGeometry.mesh.primitives || + !daeGeometry.mesh.primitives.length ) { + continue; + } + + var target = daeGeometry.mesh.primitives[ 0 ].geometry; + + if ( target.vertices.length === geometry.vertices.length ) { + + geometry.morphTargets.push( { name: "target_1", vertices: target.vertices } ); + + } + + } + + geometry.morphTargets.push( { name: "target_Z", vertices: geometry.vertices } ); + + } + + function createSkin ( geometry, ctrl, applyBindShape ) { + + var skinCtrl = controllers[ ctrl.url ]; + + if ( !skinCtrl || !skinCtrl.skin ) { + + console.log( "could not find skin controller!" ); + return; + + } + + if ( !ctrl.skeleton || !ctrl.skeleton.length ) { + + console.log( "could not find the skeleton for the skin!" ); + return; + + } + + var skin = skinCtrl.skin; + var skeleton = visualScene.getChildById( ctrl.skeleton[ 0 ] ); + var hierarchy = []; + + applyBindShape = applyBindShape !== undefined ? applyBindShape : true; + + var bones = []; + geometry.skinWeights = []; + geometry.skinIndices = []; + + //createBones( geometry.bones, skin, hierarchy, skeleton, null, -1 ); + //createWeights( skin, geometry.bones, geometry.skinIndices, geometry.skinWeights ); + + /* + geometry.animation = { + name: 'take_001', + fps: 30, + length: 2, + JIT: true, + hierarchy: hierarchy + }; + */ + + if ( applyBindShape ) { + + for ( var i = 0; i < geometry.vertices.length; i ++ ) { + + geometry.vertices[ i ].applyMatrix4( skin.bindShapeMatrix ); + + } + + } + + } + + function setupSkeleton ( node, bones, frame, parent ) { + + node.world = node.world || new THREE.Matrix4(); + node.localworld = node.localworld || new THREE.Matrix4(); + node.world.copy( node.matrix ); + node.localworld.copy( node.matrix ); + + if ( node.channels && node.channels.length ) { + + var channel = node.channels[ 0 ]; + var m = channel.sampler.output[ frame ]; + + if ( m instanceof THREE.Matrix4 ) { + + node.world.copy( m ); + node.localworld.copy(m); + if (frame === 0) + node.matrix.copy(m); + } + + } + + if ( parent ) { + + node.world.multiplyMatrices( parent, node.world ); + + } + + bones.push( node ); + + for ( var i = 0; i < node.nodes.length; i ++ ) { + + setupSkeleton( node.nodes[ i ], bones, frame, node.world ); + + } + + } + + function setupSkinningMatrices ( bones, skin ) { + + // FIXME: this is dumb... + + for ( var i = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + var found = -1; + + if ( bone.type != 'JOINT' ) continue; + + for ( var j = 0; j < skin.joints.length; j ++ ) { + + if ( bone.sid === skin.joints[ j ] ) { + + found = j; + break; + + } + + } + + if ( found >= 0 ) { + + var inv = skin.invBindMatrices[ found ]; + + bone.invBindMatrix = inv; + bone.skinningMatrix = new THREE.Matrix4(); + bone.skinningMatrix.multiplyMatrices(bone.world, inv); // (IBMi * JMi) + bone.animatrix = new THREE.Matrix4(); + + bone.animatrix.copy(bone.localworld); + bone.weights = []; + + for ( var j = 0; j < skin.weights.length; j ++ ) { + + for (var k = 0; k < skin.weights[ j ].length; k ++ ) { + + var w = skin.weights[ j ][ k ]; + + if ( w.joint === found ) { + + bone.weights.push( w ); + + } + + } + + } + + } else { + + console.warn( "ColladaLoader: Could not find joint '" + bone.sid + "'." ); + + bone.skinningMatrix = new THREE.Matrix4(); + bone.weights = []; + + } + } + + } + + //Walk the Collada tree and flatten the bones into a list, extract the position, quat and scale from the matrix + function flattenSkeleton(skeleton) { + + var list = []; + var walk = function(parentid, node, list) { + + var bone = {}; + bone.name = node.sid; + bone.parent = parentid; + bone.matrix = node.matrix; + var data = [ new THREE.Vector3(),new THREE.Quaternion(),new THREE.Vector3() ]; + bone.matrix.decompose(data[0], data[1], data[2]); + + bone.pos = [ data[0].x,data[0].y,data[0].z ]; + + bone.scl = [ data[2].x,data[2].y,data[2].z ]; + bone.rotq = [ data[1].x,data[1].y,data[1].z,data[1].w ]; + list.push(bone); + + for (var i in node.nodes) { + + walk(node.sid, node.nodes[i], list); + + } + + }; + + walk(-1, skeleton, list); + return list; + + } + + //Move the vertices into the pose that is proper for the start of the animation + function skinToBindPose(geometry,skeleton,skinController) { + + var bones = []; + setupSkeleton( skeleton, bones, -1 ); + setupSkinningMatrices( bones, skinController.skin ); + var v = new THREE.Vector3(); + var skinned = []; + + for (var i = 0; i < geometry.vertices.length; i ++) { + + skinned.push(new THREE.Vector3()); + + } + + for ( i = 0; i < bones.length; i ++ ) { + + if ( bones[ i ].type != 'JOINT' ) continue; + + for ( var j = 0; j < bones[ i ].weights.length; j ++ ) { + + var w = bones[ i ].weights[ j ]; + var vidx = w.index; + var weight = w.weight; + + var o = geometry.vertices[vidx]; + var s = skinned[vidx]; + + v.x = o.x; + v.y = o.y; + v.z = o.z; + + v.applyMatrix4( bones[i].skinningMatrix ); + + s.x += (v.x * weight); + s.y += (v.y * weight); + s.z += (v.z * weight); + } + + } + + for (var i = 0; i < geometry.vertices.length; i ++) { + + geometry.vertices[i] = skinned[i]; + + } + + } + + function applySkin ( geometry, instanceCtrl, frame ) { + + var skinController = controllers[ instanceCtrl.url ]; + + frame = frame !== undefined ? frame : 40; + + if ( !skinController || !skinController.skin ) { + + console.log( 'ColladaLoader: Could not find skin controller.' ); + return; + + } + + if ( !instanceCtrl.skeleton || !instanceCtrl.skeleton.length ) { + + console.log( 'ColladaLoader: Could not find the skeleton for the skin. ' ); + return; + + } + + var animationBounds = calcAnimationBounds(); + var skeleton = visualScene.getChildById( instanceCtrl.skeleton[0], true ) || visualScene.getChildBySid( instanceCtrl.skeleton[0], true ); + + //flatten the skeleton into a list of bones + var bonelist = flattenSkeleton(skeleton); + var joints = skinController.skin.joints; + + //sort that list so that the order reflects the order in the joint list + var sortedbones = []; + for (var i = 0; i < joints.length; i ++) { + + for (var j = 0; j < bonelist.length; j ++) { + + if (bonelist[j].name === joints[i]) { + + sortedbones[i] = bonelist[j]; + + } + + } + + } + + //hook up the parents by index instead of name + for (var i = 0; i < sortedbones.length; i ++) { + + for (var j = 0; j < sortedbones.length; j ++) { + + if (sortedbones[i].parent === sortedbones[j].name) { + + sortedbones[i].parent = j; + + } + + } + + } + + + var i, j, w, vidx, weight; + var v = new THREE.Vector3(), o, s; + + // move vertices to bind shape + for ( i = 0; i < geometry.vertices.length; i ++ ) { + geometry.vertices[i].applyMatrix4( skinController.skin.bindShapeMatrix ); + } + + var skinIndices = []; + var skinWeights = []; + var weights = skinController.skin.weights; + + // hook up the skin weights + // TODO - this might be a good place to choose greatest 4 weights + for ( var i =0; i < weights.length; i ++ ) { + + var indicies = new THREE.Vector4(weights[i][0] ? weights[i][0].joint : 0,weights[i][1] ? weights[i][1].joint : 0,weights[i][2] ? weights[i][2].joint : 0,weights[i][3] ? weights[i][3].joint : 0); + var weight = new THREE.Vector4(weights[i][0] ? weights[i][0].weight : 0,weights[i][1] ? weights[i][1].weight : 0,weights[i][2] ? weights[i][2].weight : 0,weights[i][3] ? weights[i][3].weight : 0); + + skinIndices.push(indicies); + skinWeights.push(weight); + + } + + geometry.skinIndices = skinIndices; + geometry.skinWeights = skinWeights; + geometry.bones = sortedbones; + // process animation, or simply pose the rig if no animation + + //create an animation for the animated bones + //NOTE: this has no effect when using morphtargets + var animationdata = { "name":animationBounds.ID,"fps":30,"length":animationBounds.frames / 30,"hierarchy":[] }; + + for (var j = 0; j < sortedbones.length; j ++) { + + animationdata.hierarchy.push({ parent:sortedbones[j].parent, name:sortedbones[j].name, keys:[] }); + + } + + console.log( 'ColladaLoader:', animationBounds.ID + ' has ' + sortedbones.length + ' bones.' ); + + + + skinToBindPose(geometry, skeleton, skinController); + + + for ( frame = 0; frame < animationBounds.frames; frame ++ ) { + + var bones = []; + var skinned = []; + // process the frame and setup the rig with a fresh + // transform, possibly from the bone's animation channel(s) + + setupSkeleton( skeleton, bones, frame ); + setupSkinningMatrices( bones, skinController.skin ); + + for (var i = 0; i < bones.length; i ++) { + + for (var j = 0; j < animationdata.hierarchy.length; j ++) { + + if (animationdata.hierarchy[j].name === bones[i].sid) { + + var key = {}; + key.time = (frame / 30); + key.matrix = bones[i].animatrix; + + if (frame === 0) + bones[i].matrix = key.matrix; + + var data = [ new THREE.Vector3(),new THREE.Quaternion(),new THREE.Vector3() ]; + key.matrix.decompose(data[0], data[1], data[2]); + + key.pos = [ data[0].x,data[0].y,data[0].z ]; + + key.scl = [ data[2].x,data[2].y,data[2].z ]; + key.rot = data[1]; + + animationdata.hierarchy[j].keys.push(key); + + } + + } + + } + + geometry.animation = animationdata; + + } + + } + + function createKinematics() { + + if ( kinematicsModel && kinematicsModel.joints.length === 0 ) { + kinematics = undefined; + return; + } + + var jointMap = {}; + + var _addToMap = function( jointIndex, parentVisualElement ) { + + var parentVisualElementId = parentVisualElement.getAttribute( 'id' ); + var colladaNode = visualScene.getChildById( parentVisualElementId, true ); + var joint = kinematicsModel.joints[ jointIndex ]; + + scene.traverse(function( node ) { + + if ( node.colladaId == parentVisualElementId ) { + + jointMap[ jointIndex ] = { + node: node, + transforms: colladaNode.transforms, + joint: joint, + position: joint.zeroPosition + }; + + } + + }); + + }; + + kinematics = { + + joints: kinematicsModel && kinematicsModel.joints, + + getJointValue: function( jointIndex ) { + + var jointData = jointMap[ jointIndex ]; + + if ( jointData ) { + + return jointData.position; + + } else { + + console.log( 'getJointValue: joint ' + jointIndex + ' doesn\'t exist' ); + + } + + }, + + setJointValue: function( jointIndex, value ) { + + var jointData = jointMap[ jointIndex ]; + + if ( jointData ) { + + var joint = jointData.joint; + + if ( value > joint.limits.max || value < joint.limits.min ) { + + console.log( 'setJointValue: joint ' + jointIndex + ' value ' + value + ' outside of limits (min: ' + joint.limits.min + ', max: ' + joint.limits.max + ')' ); + + } else if ( joint.static ) { + + console.log( 'setJointValue: joint ' + jointIndex + ' is static' ); + + } else { + + var threejsNode = jointData.node; + var axis = joint.axis; + var transforms = jointData.transforms; + + var matrix = new THREE.Matrix4(); + + for (i = 0; i < transforms.length; i ++ ) { + + var transform = transforms[ i ]; + + // kinda ghetto joint detection + if ( transform.sid && transform.sid.indexOf( 'joint' + jointIndex ) !== -1 ) { + + // apply actual joint value here + switch ( joint.type ) { + + case 'revolute': + + matrix.multiply( m1.makeRotationAxis( axis, THREE.Math.degToRad(value) ) ); + break; + + case 'prismatic': + + matrix.multiply( m1.makeTranslation(axis.x * value, axis.y * value, axis.z * value ) ); + break; + + default: + + console.warn( 'setJointValue: unknown joint type: ' + joint.type ); + break; + + } + + } else { + + var m1 = new THREE.Matrix4(); + + switch ( transform.type ) { + + case 'matrix': + + matrix.multiply( transform.obj ); + + break; + + case 'translate': + + matrix.multiply( m1.makeTranslation( transform.obj.x, transform.obj.y, transform.obj.z ) ); + + break; + + case 'rotate': + + matrix.multiply( m1.makeRotationAxis( transform.obj, transform.angle ) ); + + break; + + } + } + } + + // apply the matrix to the threejs node + var elementsFloat32Arr = matrix.elements; + var elements = Array.prototype.slice.call( elementsFloat32Arr ); + + var elementsRowMajor = [ + elements[ 0 ], + elements[ 4 ], + elements[ 8 ], + elements[ 12 ], + elements[ 1 ], + elements[ 5 ], + elements[ 9 ], + elements[ 13 ], + elements[ 2 ], + elements[ 6 ], + elements[ 10 ], + elements[ 14 ], + elements[ 3 ], + elements[ 7 ], + elements[ 11 ], + elements[ 15 ] + ]; + + threejsNode.matrix.set.apply( threejsNode.matrix, elementsRowMajor ); + threejsNode.matrix.decompose( threejsNode.position, threejsNode.quaternion, threejsNode.scale ); + } + + } else { + + console.log( 'setJointValue: joint ' + jointIndex + ' doesn\'t exist' ); + + } + + } + + }; + + var element = COLLADA.querySelector('scene instance_kinematics_scene'); + + if ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'bind_joint_axis': + + var visualTarget = child.getAttribute( 'target' ).split( '/' ).pop(); + var axis = child.querySelector('axis param').textContent; + var jointIndex = parseInt( axis.split( 'joint' ).pop().split( '.' )[0] ); + var visualTargetElement = COLLADA.querySelector( '[sid="' + visualTarget + '"]' ); + + if ( visualTargetElement ) { + var parentVisualElement = visualTargetElement.parentElement; + _addToMap(jointIndex, parentVisualElement); + } + + break; + + default: + + break; + + } + + } + } + + } + + function createSceneGraph ( node, parent ) { + + var obj = new THREE.Object3D(); + var skinned = false; + var skinController; + var morphController; + var i, j; + + // FIXME: controllers + + for ( i = 0; i < node.controllers.length; i ++ ) { + + var controller = controllers[ node.controllers[ i ].url ]; + + switch ( controller.type ) { + + case 'skin': + + if ( geometries[ controller.skin.source ] ) { + + var inst_geom = new InstanceGeometry(); + + inst_geom.url = controller.skin.source; + inst_geom.instance_material = node.controllers[ i ].instance_material; + + node.geometries.push( inst_geom ); + skinned = true; + skinController = node.controllers[ i ]; + + } else if ( controllers[ controller.skin.source ] ) { + + // urgh: controller can be chained + // handle the most basic case... + + var second = controllers[ controller.skin.source ]; + morphController = second; + // skinController = node.controllers[i]; + + if ( second.morph && geometries[ second.morph.source ] ) { + + var inst_geom = new InstanceGeometry(); + + inst_geom.url = second.morph.source; + inst_geom.instance_material = node.controllers[ i ].instance_material; + + node.geometries.push( inst_geom ); + + } + + } + + break; + + case 'morph': + + if ( geometries[ controller.morph.source ] ) { + + var inst_geom = new InstanceGeometry(); + + inst_geom.url = controller.morph.source; + inst_geom.instance_material = node.controllers[ i ].instance_material; + + node.geometries.push( inst_geom ); + morphController = node.controllers[ i ]; + + } + + console.log( 'ColladaLoader: Morph-controller partially supported.' ); + + default: + break; + + } + + } + + // geometries + + var double_sided_materials = {}; + + for ( i = 0; i < node.geometries.length; i ++ ) { + + var instance_geometry = node.geometries[i]; + var instance_materials = instance_geometry.instance_material; + var geometry = geometries[ instance_geometry.url ]; + var used_materials = {}; + var used_materials_array = []; + var num_materials = 0; + var first_material; + + if ( geometry ) { + + if ( !geometry.mesh || !geometry.mesh.primitives ) + continue; + + if ( obj.name.length === 0 ) { + + obj.name = geometry.id; + + } + + // collect used fx for this geometry-instance + + if ( instance_materials ) { + + for ( j = 0; j < instance_materials.length; j ++ ) { + + var instance_material = instance_materials[ j ]; + var mat = materials[ instance_material.target ]; + var effect_id = mat.instance_effect.url; + var shader = effects[ effect_id ].shader; + var material3js = shader.material; + + if ( geometry.doubleSided ) { + + if ( !( instance_material.symbol in double_sided_materials ) ) { + + var _copied_material = material3js.clone(); + _copied_material.side = THREE.DoubleSide; + double_sided_materials[ instance_material.symbol ] = _copied_material; + + } + + material3js = double_sided_materials[ instance_material.symbol ]; + + } + + material3js.opacity = !material3js.opacity ? 1 : material3js.opacity; + used_materials[ instance_material.symbol ] = num_materials; + used_materials_array.push( material3js ); + first_material = material3js; + first_material.name = mat.name === null || mat.name === '' ? mat.id : mat.name; + num_materials ++; + + } + + } + + var mesh; + var material = first_material || new THREE.MeshLambertMaterial( { color: 0xdddddd, side: geometry.doubleSided ? THREE.DoubleSide : THREE.FrontSide } ); + var geom = geometry.mesh.geometry3js; + + if ( num_materials > 1 ) { + + material = new THREE.MultiMaterial( used_materials_array ); + + for ( j = 0; j < geom.faces.length; j ++ ) { + + var face = geom.faces[ j ]; + face.materialIndex = used_materials[ face.daeMaterial ] + + } + + } + + if ( skinController !== undefined ) { + + + applySkin( geom, skinController ); + + if ( geom.morphTargets.length > 0 ) { + + material.morphTargets = true; + material.skinning = false; + + } else { + + material.morphTargets = false; + material.skinning = true; + + } + + + mesh = new THREE.SkinnedMesh( geom, material, false ); + + + //mesh.skeleton = skinController.skeleton; + //mesh.skinController = controllers[ skinController.url ]; + //mesh.skinInstanceController = skinController; + mesh.name = 'skin_' + skins.length; + + + + //mesh.animationHandle.setKey(0); + skins.push( mesh ); + + } else if ( morphController !== undefined ) { + + createMorph( geom, morphController ); + + material.morphTargets = true; + + mesh = new THREE.Mesh( geom, material ); + mesh.name = 'morph_' + morphs.length; + + morphs.push( mesh ); + + } else { + + if ( geom.isLineStrip === true ) { + + mesh = new THREE.Line( geom ); + + } else { + + mesh = new THREE.Mesh( geom, material ); + + } + + } + + obj.add(mesh); + + } + + } + + for ( i = 0; i < node.cameras.length; i ++ ) { + + var instance_camera = node.cameras[i]; + var cparams = cameras[instance_camera.url]; + + var cam = new THREE.PerspectiveCamera(cparams.yfov, parseFloat(cparams.aspect_ratio), + parseFloat(cparams.znear), parseFloat(cparams.zfar)); + + obj.add(cam); + } + + for ( i = 0; i < node.lights.length; i ++ ) { + + var light = null; + var instance_light = node.lights[i]; + var lparams = lights[instance_light.url]; + + if ( lparams && lparams.technique ) { + + var color = lparams.color.getHex(); + var intensity = lparams.intensity; + var distance = lparams.distance; + var angle = lparams.falloff_angle; + + switch ( lparams.technique ) { + + case 'directional': + + light = new THREE.DirectionalLight( color, intensity, distance ); + light.position.set(0, 0, 1); + break; + + case 'point': + + light = new THREE.PointLight( color, intensity, distance ); + break; + + case 'spot': + + light = new THREE.SpotLight( color, intensity, distance, angle ); + light.position.set(0, 0, 1); + break; + + case 'ambient': + + light = new THREE.AmbientLight( color ); + break; + + } + + } + + if (light) { + obj.add(light); + } + } + + obj.name = node.name || node.id || ""; + obj.colladaId = node.id || ""; + obj.layer = node.layer || ""; + obj.matrix = node.matrix; + obj.matrix.decompose( obj.position, obj.quaternion, obj.scale ); + + if ( options.centerGeometry && obj.geometry ) { + + var delta = obj.geometry.center(); + delta.multiply( obj.scale ); + delta.applyQuaternion( obj.quaternion ); + + obj.position.sub( delta ); + + } + + for ( i = 0; i < node.nodes.length; i ++ ) { + + obj.add( createSceneGraph( node.nodes[i], node ) ); + + } + + return obj; + + } + + function getJointId( skin, id ) { + + for ( var i = 0; i < skin.joints.length; i ++ ) { + + if ( skin.joints[ i ] === id ) { + + return i; + + } + + } + + } + + function getLibraryNode( id ) { + + var nodes = COLLADA.querySelectorAll('library_nodes node'); + + for ( var i = 0; i < nodes.length; i++ ) { + + var attObj = nodes[i].attributes.getNamedItem('id'); + + if ( attObj && attObj.value === id ) { + + return nodes[i]; + + } + + } + + return undefined; + + } + + function getChannelsForNode ( node ) { + + var channels = []; + var startTime = 1000000; + var endTime = -1000000; + + for ( var id in animations ) { + + var animation = animations[id]; + + for ( var i = 0; i < animation.channel.length; i ++ ) { + + var channel = animation.channel[i]; + var sampler = animation.sampler[i]; + var id = channel.target.split('/')[0]; + + if ( id == node.id ) { + + sampler.create(); + channel.sampler = sampler; + startTime = Math.min(startTime, sampler.startTime); + endTime = Math.max(endTime, sampler.endTime); + channels.push(channel); + + } + + } + + } + + if ( channels.length ) { + + node.startTime = startTime; + node.endTime = endTime; + + } + + return channels; + + } + + function calcFrameDuration( node ) { + + var minT = 10000000; + + for ( var i = 0; i < node.channels.length; i ++ ) { + + var sampler = node.channels[i].sampler; + + for ( var j = 0; j < sampler.input.length - 1; j ++ ) { + + var t0 = sampler.input[ j ]; + var t1 = sampler.input[ j + 1 ]; + minT = Math.min( minT, t1 - t0 ); + + } + } + + return minT; + + } + + function calcMatrixAt( node, t ) { + + var animated = {}; + + var i, j; + + for ( i = 0; i < node.channels.length; i ++ ) { + + var channel = node.channels[ i ]; + animated[ channel.sid ] = channel; + + } + + var matrix = new THREE.Matrix4(); + + for ( i = 0; i < node.transforms.length; i ++ ) { + + var transform = node.transforms[ i ]; + var channel = animated[ transform.sid ]; + + if ( channel !== undefined ) { + + var sampler = channel.sampler; + var value; + + for ( j = 0; j < sampler.input.length - 1; j ++ ) { + + if ( sampler.input[ j + 1 ] > t ) { + + value = sampler.output[ j ]; + //console.log(value.flatten) + break; + + } + + } + + if ( value !== undefined ) { + + if ( value instanceof THREE.Matrix4 ) { + + matrix.multiplyMatrices( matrix, value ); + + } else { + + // FIXME: handle other types + + matrix.multiplyMatrices( matrix, transform.matrix ); + + } + + } else { + + matrix.multiplyMatrices( matrix, transform.matrix ); + + } + + } else { + + matrix.multiplyMatrices( matrix, transform.matrix ); + + } + + } + + return matrix; + + } + + function bakeAnimations ( node ) { + + if ( node.channels && node.channels.length ) { + + var keys = [], + sids = []; + + for ( var i = 0, il = node.channels.length; i < il; i ++ ) { + + var channel = node.channels[i], + fullSid = channel.fullSid, + sampler = channel.sampler, + input = sampler.input, + transform = node.getTransformBySid( channel.sid ), + member; + + if ( channel.arrIndices ) { + + member = []; + + for ( var j = 0, jl = channel.arrIndices.length; j < jl; j ++ ) { + + member[ j ] = getConvertedIndex( channel.arrIndices[ j ] ); + + } + + } else { + + member = getConvertedMember( channel.member ); + + } + + if ( transform ) { + + if ( sids.indexOf( fullSid ) === -1 ) { + + sids.push( fullSid ); + + } + + for ( var j = 0, jl = input.length; j < jl; j ++ ) { + + var time = input[j], + data = sampler.getData( transform.type, j, member ), + key = findKey( keys, time ); + + if ( !key ) { + + key = new Key( time ); + var timeNdx = findTimeNdx( keys, time ); + keys.splice( timeNdx === -1 ? keys.length : timeNdx, 0, key ); + + } + + key.addTarget( fullSid, transform, member, data ); + + } + + } else { + + console.log( 'Could not find transform "' + channel.sid + '" in node ' + node.id ); + + } + + } + + // post process + for ( var i = 0; i < sids.length; i ++ ) { + + var sid = sids[ i ]; + + for ( var j = 0; j < keys.length; j ++ ) { + + var key = keys[ j ]; + + if ( !key.hasTarget( sid ) ) { + + interpolateKeys( keys, key, j, sid ); + + } + + } + + } + + node.keys = keys; + node.sids = sids; + + } + + } + + function findKey ( keys, time) { + + var retVal = null; + + for ( var i = 0, il = keys.length; i < il && retVal === null; i ++ ) { + + var key = keys[i]; + + if ( key.time === time ) { + + retVal = key; + + } else if ( key.time > time ) { + + break; + + } + + } + + return retVal; + + } + + function findTimeNdx ( keys, time) { + + var ndx = -1; + + for ( var i = 0, il = keys.length; i < il && ndx === -1; i ++ ) { + + var key = keys[i]; + + if ( key.time >= time ) { + + ndx = i; + + } + + } + + return ndx; + + } + + function interpolateKeys ( keys, key, ndx, fullSid ) { + + var prevKey = getPrevKeyWith( keys, fullSid, ndx ? ndx - 1 : 0 ), + nextKey = getNextKeyWith( keys, fullSid, ndx + 1 ); + + if ( prevKey && nextKey ) { + + var scale = (key.time - prevKey.time) / (nextKey.time - prevKey.time), + prevTarget = prevKey.getTarget( fullSid ), + nextData = nextKey.getTarget( fullSid ).data, + prevData = prevTarget.data, + data; + + if ( prevTarget.type === 'matrix' ) { + + data = prevData; + + } else if ( prevData.length ) { + + data = []; + + for ( var i = 0; i < prevData.length; ++ i ) { + + data[ i ] = prevData[ i ] + ( nextData[ i ] - prevData[ i ] ) * scale; + + } + + } else { + + data = prevData + ( nextData - prevData ) * scale; + + } + + key.addTarget( fullSid, prevTarget.transform, prevTarget.member, data ); + + } + + } + + // Get next key with given sid + + function getNextKeyWith( keys, fullSid, ndx ) { + + for ( ; ndx < keys.length; ndx ++ ) { + + var key = keys[ ndx ]; + + if ( key.hasTarget( fullSid ) ) { + + return key; + + } + + } + + return null; + + } + + // Get previous key with given sid + + function getPrevKeyWith( keys, fullSid, ndx ) { + + ndx = ndx >= 0 ? ndx : ndx + keys.length; + + for ( ; ndx >= 0; ndx -- ) { + + var key = keys[ ndx ]; + + if ( key.hasTarget( fullSid ) ) { + + return key; + + } + + } + + return null; + + } + + function _Image() { + + this.id = ""; + this.init_from = ""; + + } + + _Image.prototype.parse = function(element) { + + this.id = element.getAttribute('id'); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + if ( child.nodeName === 'init_from' ) { + + this.init_from = child.textContent; + + } + + } + + return this; + + }; + + function Controller() { + + this.id = ""; + this.name = ""; + this.type = ""; + this.skin = null; + this.morph = null; + + } + + Controller.prototype.parse = function( element ) { + + this.id = element.getAttribute('id'); + this.name = element.getAttribute('name'); + this.type = "none"; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'skin': + + this.skin = (new Skin()).parse(child); + this.type = child.nodeName; + break; + + case 'morph': + + this.morph = (new Morph()).parse(child); + this.type = child.nodeName; + break; + + default: + break; + + } + } + + return this; + + }; + + function Morph() { + + this.method = null; + this.source = null; + this.targets = null; + this.weights = null; + + } + + Morph.prototype.parse = function( element ) { + + var sources = {}; + var inputs = []; + var i; + + this.method = element.getAttribute( 'method' ); + this.source = element.getAttribute( 'source' ).replace( /^#/, '' ); + + for ( i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'source': + + var source = ( new Source() ).parse( child ); + sources[ source.id ] = source; + break; + + case 'targets': + + inputs = this.parseInputs( child ); + break; + + default: + + console.log( child.nodeName ); + break; + + } + + } + + for ( i = 0; i < inputs.length; i ++ ) { + + var input = inputs[ i ]; + var source = sources[ input.source ]; + + switch ( input.semantic ) { + + case 'MORPH_TARGET': + + this.targets = source.read(); + break; + + case 'MORPH_WEIGHT': + + this.weights = source.read(); + break; + + default: + break; + + } + } + + return this; + + }; + + Morph.prototype.parseInputs = function(element) { + + var inputs = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1) continue; + + switch ( child.nodeName ) { + + case 'input': + + inputs.push( (new Input()).parse(child) ); + break; + + default: + break; + } + } + + return inputs; + + }; + + function Skin() { + + this.source = ""; + this.bindShapeMatrix = null; + this.invBindMatrices = []; + this.joints = []; + this.weights = []; + + } + + Skin.prototype.parse = function( element ) { + + var sources = {}; + var joints, weights; + + this.source = element.getAttribute( 'source' ).replace( /^#/, '' ); + this.invBindMatrices = []; + this.joints = []; + this.weights = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'bind_shape_matrix': + + var f = _floats(child.textContent); + this.bindShapeMatrix = getConvertedMat4( f ); + break; + + case 'source': + + var src = new Source().parse(child); + sources[ src.id ] = src; + break; + + case 'joints': + + joints = child; + break; + + case 'vertex_weights': + + weights = child; + break; + + default: + + console.log( child.nodeName ); + break; + + } + } + + this.parseJoints( joints, sources ); + this.parseWeights( weights, sources ); + + return this; + + }; + + Skin.prototype.parseJoints = function ( element, sources ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'input': + + var input = ( new Input() ).parse( child ); + var source = sources[ input.source ]; + + if ( input.semantic === 'JOINT' ) { + + this.joints = source.read(); + + } else if ( input.semantic === 'INV_BIND_MATRIX' ) { + + this.invBindMatrices = source.read(); + + } + + break; + + default: + break; + } + + } + + }; + + Skin.prototype.parseWeights = function ( element, sources ) { + + var v, vcount, inputs = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'input': + + inputs.push( ( new Input() ).parse( child ) ); + break; + + case 'v': + + v = _ints( child.textContent ); + break; + + case 'vcount': + + vcount = _ints( child.textContent ); + break; + + default: + break; + + } + + } + + var index = 0; + + for ( var i = 0; i < vcount.length; i ++ ) { + + var numBones = vcount[i]; + var vertex_weights = []; + + for ( var j = 0; j < numBones; j ++ ) { + + var influence = {}; + + for ( var k = 0; k < inputs.length; k ++ ) { + + var input = inputs[ k ]; + var value = v[ index + input.offset ]; + + switch ( input.semantic ) { + + case 'JOINT': + + influence.joint = value;//this.joints[value]; + break; + + case 'WEIGHT': + + influence.weight = sources[ input.source ].data[ value ]; + break; + + default: + break; + + } + + } + + vertex_weights.push( influence ); + index += inputs.length; + } + + for ( var j = 0; j < vertex_weights.length; j ++ ) { + + vertex_weights[ j ].index = i; + + } + + this.weights.push( vertex_weights ); + + } + + }; + + function VisualScene () { + + this.id = ""; + this.name = ""; + this.nodes = []; + this.scene = new THREE.Group(); + + } + + VisualScene.prototype.getChildById = function( id, recursive ) { + + for ( var i = 0; i < this.nodes.length; i ++ ) { + + var node = this.nodes[ i ].getChildById( id, recursive ); + + if ( node ) { + + return node; + + } + + } + + return null; + + }; + + VisualScene.prototype.getChildBySid = function( sid, recursive ) { + + for ( var i = 0; i < this.nodes.length; i ++ ) { + + var node = this.nodes[ i ].getChildBySid( sid, recursive ); + + if ( node ) { + + return node; + + } + + } + + return null; + + }; + + VisualScene.prototype.parse = function( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + this.nodes = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'node': + + this.nodes.push( ( new Node() ).parse( child ) ); + break; + + default: + break; + + } + + } + + return this; + + }; + + function Node() { + + this.id = ""; + this.name = ""; + this.sid = ""; + this.nodes = []; + this.controllers = []; + this.transforms = []; + this.geometries = []; + this.channels = []; + this.matrix = new THREE.Matrix4(); + + } + + Node.prototype.getChannelForTransform = function( transformSid ) { + + for ( var i = 0; i < this.channels.length; i ++ ) { + + var channel = this.channels[i]; + var parts = channel.target.split('/'); + var id = parts.shift(); + var sid = parts.shift(); + var dotSyntax = (sid.indexOf(".") >= 0); + var arrSyntax = (sid.indexOf("(") >= 0); + var arrIndices; + var member; + + if ( dotSyntax ) { + + parts = sid.split("."); + sid = parts.shift(); + member = parts.shift(); + + } else if ( arrSyntax ) { + + arrIndices = sid.split("("); + sid = arrIndices.shift(); + + for ( var j = 0; j < arrIndices.length; j ++ ) { + + arrIndices[ j ] = parseInt( arrIndices[ j ].replace( /\)/, '' ) ); + + } + + } + + if ( sid === transformSid ) { + + channel.info = { sid: sid, dotSyntax: dotSyntax, arrSyntax: arrSyntax, arrIndices: arrIndices }; + return channel; + + } + + } + + return null; + + }; + + Node.prototype.getChildById = function ( id, recursive ) { + + if ( this.id === id ) { + + return this; + + } + + if ( recursive ) { + + for ( var i = 0; i < this.nodes.length; i ++ ) { + + var n = this.nodes[ i ].getChildById( id, recursive ); + + if ( n ) { + + return n; + + } + + } + + } + + return null; + + }; + + Node.prototype.getChildBySid = function ( sid, recursive ) { + + if ( this.sid === sid ) { + + return this; + + } + + if ( recursive ) { + + for ( var i = 0; i < this.nodes.length; i ++ ) { + + var n = this.nodes[ i ].getChildBySid( sid, recursive ); + + if ( n ) { + + return n; + + } + + } + } + + return null; + + }; + + Node.prototype.getTransformBySid = function ( sid ) { + + for ( var i = 0; i < this.transforms.length; i ++ ) { + + if ( this.transforms[ i ].sid === sid ) return this.transforms[ i ]; + + } + + return null; + + }; + + Node.prototype.parse = function( element ) { + + var url; + + this.id = element.getAttribute('id'); + this.sid = element.getAttribute('sid'); + this.name = element.getAttribute('name'); + this.type = element.getAttribute('type'); + this.layer = element.getAttribute('layer'); + + this.type = this.type === 'JOINT' ? this.type : 'NODE'; + + this.nodes = []; + this.transforms = []; + this.geometries = []; + this.cameras = []; + this.lights = []; + this.controllers = []; + this.matrix = new THREE.Matrix4(); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'node': + + this.nodes.push( ( new Node() ).parse( child ) ); + break; + + case 'instance_camera': + + this.cameras.push( ( new InstanceCamera() ).parse( child ) ); + break; + + case 'instance_controller': + + this.controllers.push( ( new InstanceController() ).parse( child ) ); + break; + + case 'instance_geometry': + + this.geometries.push( ( new InstanceGeometry() ).parse( child ) ); + break; + + case 'instance_light': + + this.lights.push( ( new InstanceLight() ).parse( child ) ); + break; + + case 'instance_node': + + url = child.getAttribute( 'url' ).replace( /^#/, '' ); + var iNode = getLibraryNode( url ); + + if ( iNode ) { + + this.nodes.push( ( new Node() ).parse( iNode )) ; + + } + + break; + + case 'rotate': + case 'translate': + case 'scale': + case 'matrix': + case 'lookat': + case 'skew': + + this.transforms.push( ( new Transform() ).parse( child ) ); + break; + + case 'extra': + break; + + default: + + console.log( child.nodeName ); + break; + + } + + } + + this.channels = getChannelsForNode( this ); + bakeAnimations( this ); + + this.updateMatrix(); + + return this; + + }; + + Node.prototype.updateMatrix = function () { + + this.matrix.identity(); + + for ( var i = 0; i < this.transforms.length; i ++ ) { + + this.transforms[ i ].apply( this.matrix ); + + } + + }; + + function Transform () { + + this.sid = ""; + this.type = ""; + this.data = []; + this.obj = null; + + } + + Transform.prototype.parse = function ( element ) { + + this.sid = element.getAttribute( 'sid' ); + this.type = element.nodeName; + this.data = _floats( element.textContent ); + this.convert(); + + return this; + + }; + + Transform.prototype.convert = function () { + + switch ( this.type ) { + + case 'matrix': + + this.obj = getConvertedMat4( this.data ); + break; + + case 'rotate': + + this.angle = THREE.Math.degToRad( this.data[3] ); + + case 'translate': + + fixCoords( this.data, -1 ); + this.obj = new THREE.Vector3( this.data[ 0 ], this.data[ 1 ], this.data[ 2 ] ); + break; + + case 'scale': + + fixCoords( this.data, 1 ); + this.obj = new THREE.Vector3( this.data[ 0 ], this.data[ 1 ], this.data[ 2 ] ); + break; + + default: + console.log( 'Can not convert Transform of type ' + this.type ); + break; + + } + + }; + + Transform.prototype.apply = function () { + + var m1 = new THREE.Matrix4(); + + return function ( matrix ) { + + switch ( this.type ) { + + case 'matrix': + + matrix.multiply( this.obj ); + + break; + + case 'translate': + + matrix.multiply( m1.makeTranslation( this.obj.x, this.obj.y, this.obj.z ) ); + + break; + + case 'rotate': + + matrix.multiply( m1.makeRotationAxis( this.obj, this.angle ) ); + + break; + + case 'scale': + + matrix.scale( this.obj ); + + break; + + } + + }; + + }(); + + Transform.prototype.update = function ( data, member ) { + + var members = [ 'X', 'Y', 'Z', 'ANGLE' ]; + + switch ( this.type ) { + + case 'matrix': + + if ( ! member ) { + + this.obj.copy( data ); + + } else if ( member.length === 1 ) { + + switch ( member[ 0 ] ) { + + case 0: + + this.obj.n11 = data[ 0 ]; + this.obj.n21 = data[ 1 ]; + this.obj.n31 = data[ 2 ]; + this.obj.n41 = data[ 3 ]; + + break; + + case 1: + + this.obj.n12 = data[ 0 ]; + this.obj.n22 = data[ 1 ]; + this.obj.n32 = data[ 2 ]; + this.obj.n42 = data[ 3 ]; + + break; + + case 2: + + this.obj.n13 = data[ 0 ]; + this.obj.n23 = data[ 1 ]; + this.obj.n33 = data[ 2 ]; + this.obj.n43 = data[ 3 ]; + + break; + + case 3: + + this.obj.n14 = data[ 0 ]; + this.obj.n24 = data[ 1 ]; + this.obj.n34 = data[ 2 ]; + this.obj.n44 = data[ 3 ]; + + break; + + } + + } else if ( member.length === 2 ) { + + var propName = 'n' + ( member[ 0 ] + 1 ) + ( member[ 1 ] + 1 ); + this.obj[ propName ] = data; + + } else { + + console.log('Incorrect addressing of matrix in transform.'); + + } + + break; + + case 'translate': + case 'scale': + + if ( Object.prototype.toString.call( member ) === '[object Array]' ) { + + member = members[ member[ 0 ] ]; + + } + + switch ( member ) { + + case 'X': + + this.obj.x = data; + break; + + case 'Y': + + this.obj.y = data; + break; + + case 'Z': + + this.obj.z = data; + break; + + default: + + this.obj.x = data[ 0 ]; + this.obj.y = data[ 1 ]; + this.obj.z = data[ 2 ]; + break; + + } + + break; + + case 'rotate': + + if ( Object.prototype.toString.call( member ) === '[object Array]' ) { + + member = members[ member[ 0 ] ]; + + } + + switch ( member ) { + + case 'X': + + this.obj.x = data; + break; + + case 'Y': + + this.obj.y = data; + break; + + case 'Z': + + this.obj.z = data; + break; + + case 'ANGLE': + + this.angle = THREE.Math.degToRad( data ); + break; + + default: + + this.obj.x = data[ 0 ]; + this.obj.y = data[ 1 ]; + this.obj.z = data[ 2 ]; + this.angle = THREE.Math.degToRad( data[ 3 ] ); + break; + + } + break; + + } + + }; + + function InstanceController() { + + this.url = ""; + this.skeleton = []; + this.instance_material = []; + + } + + InstanceController.prototype.parse = function ( element ) { + + this.url = element.getAttribute('url').replace(/^#/, ''); + this.skeleton = []; + this.instance_material = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType !== 1 ) continue; + + switch ( child.nodeName ) { + + case 'skeleton': + + this.skeleton.push( child.textContent.replace(/^#/, '') ); + break; + + case 'bind_material': + + var instances = child.querySelectorAll('instance_material'); + + for ( var j = 0; j < instances.length; j ++ ) { + + var instance = instances[j]; + this.instance_material.push( (new InstanceMaterial()).parse(instance) ); + + } + + + break; + + case 'extra': + break; + + default: + break; + + } + } + + return this; + + }; + + function InstanceMaterial () { + + this.symbol = ""; + this.target = ""; + + } + + InstanceMaterial.prototype.parse = function ( element ) { + + this.symbol = element.getAttribute('symbol'); + this.target = element.getAttribute('target').replace(/^#/, ''); + return this; + + }; + + function InstanceGeometry() { + + this.url = ""; + this.instance_material = []; + + } + + InstanceGeometry.prototype.parse = function ( element ) { + + this.url = element.getAttribute('url').replace(/^#/, ''); + this.instance_material = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1 ) continue; + + if ( child.nodeName === 'bind_material' ) { + + var instances = child.querySelectorAll('instance_material'); + + for ( var j = 0; j < instances.length; j ++ ) { + + var instance = instances[j]; + this.instance_material.push( (new InstanceMaterial()).parse(instance) ); + + } + + break; + + } + + } + + return this; + + }; + + function Geometry() { + + this.id = ""; + this.mesh = null; + + } + + Geometry.prototype.parse = function ( element ) { + + this.id = element.getAttribute('id'); + + extractDoubleSided( this, element ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + + switch ( child.nodeName ) { + + case 'mesh': + + this.mesh = (new Mesh(this)).parse(child); + break; + + case 'extra': + + // console.log( child ); + break; + + default: + break; + } + } + + return this; + + }; + + function Mesh( geometry ) { + + this.geometry = geometry.id; + this.primitives = []; + this.vertices = null; + this.geometry3js = null; + + } + + Mesh.prototype.parse = function ( element ) { + + this.primitives = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'source': + + _source( child ); + break; + + case 'vertices': + + this.vertices = ( new Vertices() ).parse( child ); + break; + + case 'linestrips': + + this.primitives.push( ( new LineStrips().parse( child ) ) ); + break; + + case 'triangles': + + this.primitives.push( ( new Triangles().parse( child ) ) ); + break; + + case 'polygons': + + this.primitives.push( ( new Polygons().parse( child ) ) ); + break; + + case 'polylist': + + this.primitives.push( ( new Polylist().parse( child ) ) ); + break; + + default: + break; + + } + + } + + this.geometry3js = new THREE.Geometry(); + + if ( this.vertices === null ) { + + // TODO (mrdoob): Study case when this is null (carrier.dae) + + return this; + + } + + var vertexData = sources[ this.vertices.input['POSITION'].source ].data; + + for ( var i = 0; i < vertexData.length; i += 3 ) { + + this.geometry3js.vertices.push( getConvertedVec3( vertexData, i ).clone() ); + + } + + for ( var i = 0; i < this.primitives.length; i ++ ) { + + var primitive = this.primitives[ i ]; + primitive.setVertices( this.vertices ); + this.handlePrimitive( primitive, this.geometry3js ); + + } + + if ( this.geometry3js.calcNormals ) { + + this.geometry3js.computeVertexNormals(); + delete this.geometry3js.calcNormals; + + } + + return this; + + }; + + Mesh.prototype.handlePrimitive = function ( primitive, geom ) { + + if ( primitive instanceof LineStrips ) { + + // TODO: Handle indices. Maybe easier with BufferGeometry? + + geom.isLineStrip = true; + return; + + } + + var j, k, pList = primitive.p, inputs = primitive.inputs; + var input, index, idx32; + var source, numParams; + var vcIndex = 0, vcount = 3, maxOffset = 0; + var texture_sets = []; + + for ( j = 0; j < inputs.length; j ++ ) { + + input = inputs[ j ]; + + var offset = input.offset + 1; + maxOffset = (maxOffset < offset) ? offset : maxOffset; + + switch ( input.semantic ) { + + case 'TEXCOORD': + texture_sets.push( input.set ); + break; + + } + + } + + for ( var pCount = 0; pCount < pList.length; ++ pCount ) { + + var p = pList[ pCount ], i = 0; + + while ( i < p.length ) { + + var vs = []; + var ns = []; + var ts = null; + var cs = []; + + if ( primitive.vcount ) { + + vcount = primitive.vcount.length ? primitive.vcount[ vcIndex ++ ] : primitive.vcount; + + } else { + + vcount = p.length / maxOffset; + + } + + + for ( j = 0; j < vcount; j ++ ) { + + for ( k = 0; k < inputs.length; k ++ ) { + + input = inputs[ k ]; + source = sources[ input.source ]; + + index = p[ i + ( j * maxOffset ) + input.offset ]; + numParams = source.accessor.params.length; + idx32 = index * numParams; + + switch ( input.semantic ) { + + case 'VERTEX': + + vs.push( index ); + + break; + + case 'NORMAL': + + ns.push( getConvertedVec3( source.data, idx32 ) ); + + break; + + case 'TEXCOORD': + + ts = ts || { }; + if ( ts[ input.set ] === undefined ) ts[ input.set ] = []; + // invert the V + ts[ input.set ].push( new THREE.Vector2( source.data[ idx32 ], source.data[ idx32 + 1 ] ) ); + + break; + + case 'COLOR': + + cs.push( new THREE.Color().setRGB( source.data[ idx32 ], source.data[ idx32 + 1 ], source.data[ idx32 + 2 ] ) ); + + break; + + default: + + break; + + } + + } + + } + + if ( ns.length === 0 ) { + + // check the vertices inputs + input = this.vertices.input.NORMAL; + + if ( input ) { + + source = sources[ input.source ]; + numParams = source.accessor.params.length; + + for ( var ndx = 0, len = vs.length; ndx < len; ndx ++ ) { + + ns.push( getConvertedVec3( source.data, vs[ ndx ] * numParams ) ); + + } + + } else { + + geom.calcNormals = true; + + } + + } + + if ( !ts ) { + + ts = { }; + // check the vertices inputs + input = this.vertices.input.TEXCOORD; + + if ( input ) { + + texture_sets.push( input.set ); + source = sources[ input.source ]; + numParams = source.accessor.params.length; + + for ( var ndx = 0, len = vs.length; ndx < len; ndx ++ ) { + + idx32 = vs[ ndx ] * numParams; + if ( ts[ input.set ] === undefined ) ts[ input.set ] = [ ]; + // invert the V + ts[ input.set ].push( new THREE.Vector2( source.data[ idx32 ], 1.0 - source.data[ idx32 + 1 ] ) ); + + } + + } + + } + + if ( cs.length === 0 ) { + + // check the vertices inputs + input = this.vertices.input.COLOR; + + if ( input ) { + + source = sources[ input.source ]; + numParams = source.accessor.params.length; + + for ( var ndx = 0, len = vs.length; ndx < len; ndx ++ ) { + + idx32 = vs[ ndx ] * numParams; + cs.push( new THREE.Color().setRGB( source.data[ idx32 ], source.data[ idx32 + 1 ], source.data[ idx32 + 2 ] ) ); + + } + + } + + } + + var face = null, faces = [], uv, uvArr; + + if ( vcount === 3 ) { + + faces.push( new THREE.Face3( vs[0], vs[1], vs[2], ns, cs.length ? cs : new THREE.Color() ) ); + + } else if ( vcount === 4 ) { + + faces.push( new THREE.Face3( vs[0], vs[1], vs[3], ns.length ? [ ns[0].clone(), ns[1].clone(), ns[3].clone() ] : [], cs.length ? [ cs[0], cs[1], cs[3] ] : new THREE.Color() ) ); + + faces.push( new THREE.Face3( vs[1], vs[2], vs[3], ns.length ? [ ns[1].clone(), ns[2].clone(), ns[3].clone() ] : [], cs.length ? [ cs[1], cs[2], cs[3] ] : new THREE.Color() ) ); + + } else if ( vcount > 4 && options.subdivideFaces ) { + + var clr = cs.length ? cs : new THREE.Color(), + vec1, vec2, vec3, v1, v2, norm; + + // subdivide into multiple Face3s + + for ( k = 1; k < vcount - 1; ) { + + faces.push( new THREE.Face3( vs[0], vs[k], vs[k + 1], ns.length ? [ ns[0].clone(), ns[k ++].clone(), ns[k].clone() ] : [], clr ) ); + + } + + } + + if ( faces.length ) { + + for ( var ndx = 0, len = faces.length; ndx < len; ndx ++ ) { + + face = faces[ndx]; + face.daeMaterial = primitive.material; + geom.faces.push( face ); + + for ( k = 0; k < texture_sets.length; k ++ ) { + + uv = ts[ texture_sets[k] ]; + + if ( vcount > 4 ) { + + // Grab the right UVs for the vertices in this face + uvArr = [ uv[0], uv[ndx + 1], uv[ndx + 2] ]; + + } else if ( vcount === 4 ) { + + if ( ndx === 0 ) { + + uvArr = [ uv[0], uv[1], uv[3] ]; + + } else { + + uvArr = [ uv[1].clone(), uv[2], uv[3].clone() ]; + + } + + } else { + + uvArr = [ uv[0], uv[1], uv[2] ]; + + } + + if ( geom.faceVertexUvs[k] === undefined ) { + + geom.faceVertexUvs[k] = []; + + } + + geom.faceVertexUvs[k].push( uvArr ); + + } + + } + + } else { + + console.log( 'dropped face with vcount ' + vcount + ' for geometry with id: ' + geom.id ); + + } + + i += maxOffset * vcount; + + } + + } + + }; + + function Polygons () { + + this.material = ""; + this.count = 0; + this.inputs = []; + this.vcount = null; + this.p = []; + this.geometry = new THREE.Geometry(); + + } + + Polygons.prototype.setVertices = function ( vertices ) { + + for ( var i = 0; i < this.inputs.length; i ++ ) { + + if ( this.inputs[ i ].source === vertices.id ) { + + this.inputs[ i ].source = vertices.input[ 'POSITION' ].source; + + } + + } + + }; + + Polygons.prototype.parse = function ( element ) { + + this.material = element.getAttribute( 'material' ); + this.count = _attr_as_int( element, 'count', 0 ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'input': + + this.inputs.push( ( new Input() ).parse( element.childNodes[ i ] ) ); + break; + + case 'vcount': + + this.vcount = _ints( child.textContent ); + break; + + case 'p': + + this.p.push( _ints( child.textContent ) ); + break; + + case 'ph': + + console.warn( 'polygon holes not yet supported!' ); + break; + + default: + break; + + } + + } + + return this; + + }; + + function Polylist () { + + Polygons.call( this ); + + this.vcount = []; + + } + + Polylist.prototype = Object.create( Polygons.prototype ); + Polylist.prototype.constructor = Polylist; + + function LineStrips() { + + Polygons.call( this ); + + this.vcount = 1; + + } + + LineStrips.prototype = Object.create( Polygons.prototype ); + LineStrips.prototype.constructor = LineStrips; + + function Triangles () { + + Polygons.call( this ); + + this.vcount = 3; + + } + + Triangles.prototype = Object.create( Polygons.prototype ); + Triangles.prototype.constructor = Triangles; + + function Accessor() { + + this.source = ""; + this.count = 0; + this.stride = 0; + this.params = []; + + } + + Accessor.prototype.parse = function ( element ) { + + this.params = []; + this.source = element.getAttribute( 'source' ); + this.count = _attr_as_int( element, 'count', 0 ); + this.stride = _attr_as_int( element, 'stride', 0 ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + if ( child.nodeName === 'param' ) { + + var param = {}; + param[ 'name' ] = child.getAttribute( 'name' ); + param[ 'type' ] = child.getAttribute( 'type' ); + this.params.push( param ); + + } + + } + + return this; + + }; + + function Vertices() { + + this.input = {}; + + } + + Vertices.prototype.parse = function ( element ) { + + this.id = element.getAttribute('id'); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + if ( element.childNodes[i].nodeName === 'input' ) { + + var input = ( new Input() ).parse( element.childNodes[ i ] ); + this.input[ input.semantic ] = input; + + } + + } + + return this; + + }; + + function Input () { + + this.semantic = ""; + this.offset = 0; + this.source = ""; + this.set = 0; + + } + + Input.prototype.parse = function ( element ) { + + this.semantic = element.getAttribute('semantic'); + this.source = element.getAttribute('source').replace(/^#/, ''); + this.set = _attr_as_int(element, 'set', -1); + this.offset = _attr_as_int(element, 'offset', 0); + + if ( this.semantic === 'TEXCOORD' && this.set < 0 ) { + + this.set = 0; + + } + + return this; + + }; + + function Source ( id ) { + + this.id = id; + this.type = null; + + } + + Source.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + + switch ( child.nodeName ) { + + case 'bool_array': + + this.data = _bools( child.textContent ); + this.type = child.nodeName; + break; + + case 'float_array': + + this.data = _floats( child.textContent ); + this.type = child.nodeName; + break; + + case 'int_array': + + this.data = _ints( child.textContent ); + this.type = child.nodeName; + break; + + case 'IDREF_array': + case 'Name_array': + + this.data = _strings( child.textContent ); + this.type = child.nodeName; + break; + + case 'technique_common': + + for ( var j = 0; j < child.childNodes.length; j ++ ) { + + if ( child.childNodes[ j ].nodeName === 'accessor' ) { + + this.accessor = ( new Accessor() ).parse( child.childNodes[ j ] ); + break; + + } + } + break; + + default: + // console.log(child.nodeName); + break; + + } + + } + + return this; + + }; + + Source.prototype.read = function () { + + var result = []; + + //for (var i = 0; i < this.accessor.params.length; i++) { + + var param = this.accessor.params[ 0 ]; + + //console.log(param.name + " " + param.type); + + switch ( param.type ) { + + case 'IDREF': + case 'Name': case 'name': + case 'float': + + return this.data; + + case 'float4x4': + + for ( var j = 0; j < this.data.length; j += 16 ) { + + var s = this.data.slice( j, j + 16 ); + var m = getConvertedMat4( s ); + result.push( m ); + } + + break; + + default: + + console.log( 'ColladaLoader: Source: Read dont know how to read ' + param.type + '.' ); + break; + + } + + //} + + return result; + + }; + + function Material () { + + this.id = ""; + this.name = ""; + this.instance_effect = null; + + } + + Material.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + if ( element.childNodes[ i ].nodeName === 'instance_effect' ) { + + this.instance_effect = ( new InstanceEffect() ).parse( element.childNodes[ i ] ); + break; + + } + + } + + return this; + + }; + + function ColorOrTexture () { + + this.color = new THREE.Color(); + this.color.setRGB( Math.random(), Math.random(), Math.random() ); + this.color.a = 1.0; + + this.texture = null; + this.texcoord = null; + this.texOpts = null; + + } + + ColorOrTexture.prototype.isColor = function () { + + return ( this.texture === null ); + + }; + + ColorOrTexture.prototype.isTexture = function () { + + return ( this.texture != null ); + + }; + + ColorOrTexture.prototype.parse = function ( element ) { + + if (element.nodeName === 'transparent') { + + this.opaque = element.getAttribute('opaque'); + + } + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'color': + + var rgba = _floats( child.textContent ); + this.color = new THREE.Color(); + this.color.setRGB( rgba[0], rgba[1], rgba[2] ); + this.color.a = rgba[3]; + break; + + case 'texture': + + this.texture = child.getAttribute('texture'); + this.texcoord = child.getAttribute('texcoord'); + // Defaults from: + // https://collada.org/mediawiki/index.php/Maya_texture_placement_MAYA_extension + this.texOpts = { + offsetU: 0, + offsetV: 0, + repeatU: 1, + repeatV: 1, + wrapU: 1, + wrapV: 1 + }; + this.parseTexture( child ); + break; + + default: + break; + + } + + } + + return this; + + }; + + ColorOrTexture.prototype.parseTexture = function ( element ) { + + if ( ! element.childNodes ) return this; + + // This should be supported by Maya, 3dsMax, and MotionBuilder + + if ( element.childNodes[1] && element.childNodes[1].nodeName === 'extra' ) { + + element = element.childNodes[1]; + + if ( element.childNodes[1] && element.childNodes[1].nodeName === 'technique' ) { + + element = element.childNodes[1]; + + } + + } + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'offsetU': + case 'offsetV': + case 'repeatU': + case 'repeatV': + + this.texOpts[ child.nodeName ] = parseFloat( child.textContent ); + + break; + + case 'wrapU': + case 'wrapV': + + // some dae have a value of true which becomes NaN via parseInt + + if ( child.textContent.toUpperCase() === 'TRUE' ) { + + this.texOpts[ child.nodeName ] = 1; + + } else { + + this.texOpts[ child.nodeName ] = parseInt( child.textContent ); + + } + break; + + default: + + this.texOpts[ child.nodeName ] = child.textContent; + + break; + + } + + } + + return this; + + }; + + function Shader ( type, effect ) { + + this.type = type; + this.effect = effect; + this.material = null; + + } + + Shader.prototype.parse = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'emission': + case 'diffuse': + case 'specular': + case 'transparent': + + this[ child.nodeName ] = ( new ColorOrTexture() ).parse( child ); + break; + + case 'bump': + + // If 'bumptype' is 'heightfield', create a 'bump' property + // Else if 'bumptype' is 'normalmap', create a 'normal' property + // (Default to 'bump') + var bumpType = child.getAttribute( 'bumptype' ); + if ( bumpType ) { + if ( bumpType.toLowerCase() === "heightfield" ) { + this[ 'bump' ] = ( new ColorOrTexture() ).parse( child ); + } else if ( bumpType.toLowerCase() === "normalmap" ) { + this[ 'normal' ] = ( new ColorOrTexture() ).parse( child ); + } else { + console.error( "Shader.prototype.parse: Invalid value for attribute 'bumptype' (" + bumpType + ") - valid bumptypes are 'HEIGHTFIELD' and 'NORMALMAP' - defaulting to 'HEIGHTFIELD'" ); + this[ 'bump' ] = ( new ColorOrTexture() ).parse( child ); + } + } else { + console.warn( "Shader.prototype.parse: Attribute 'bumptype' missing from bump node - defaulting to 'HEIGHTFIELD'" ); + this[ 'bump' ] = ( new ColorOrTexture() ).parse( child ); + } + + break; + + case 'shininess': + case 'reflectivity': + case 'index_of_refraction': + case 'transparency': + + var f = child.querySelectorAll('float'); + + if ( f.length > 0 ) + this[ child.nodeName ] = parseFloat( f[ 0 ].textContent ); + + break; + + default: + break; + + } + + } + + this.create(); + return this; + + }; + + Shader.prototype.create = function() { + + var props = {}; + + var transparent = false; + + if (this['transparency'] !== undefined && this['transparent'] !== undefined) { + // convert transparent color RBG to average value + var transparentColor = this['transparent']; + var transparencyLevel = (this.transparent.color.r + this.transparent.color.g + this.transparent.color.b) / 3 * this.transparency; + + if (transparencyLevel > 0) { + transparent = true; + props[ 'transparent' ] = true; + props[ 'opacity' ] = 1 - transparencyLevel; + + } + + } + + var keys = { + 'diffuse':'map', + 'ambient':'lightMap', + 'specular':'specularMap', + 'emission':'emissionMap', + 'bump':'bumpMap', + 'normal':'normalMap' + }; + + for ( var prop in this ) { + + switch ( prop ) { + + case 'ambient': + case 'emission': + case 'diffuse': + case 'specular': + case 'bump': + case 'normal': + + var cot = this[ prop ]; + + if ( cot instanceof ColorOrTexture ) { + + if ( cot.isTexture() ) { + + var samplerId = cot.texture; + var surfaceId = this.effect.sampler[samplerId]; + + if ( surfaceId !== undefined && surfaceId.source !== undefined ) { + + var surface = this.effect.surface[surfaceId.source]; + + if ( surface !== undefined ) { + + var image = images[ surface.init_from ]; + + if ( image ) { + + var url = baseUrl + image.init_from; + + var texture; + var loader = THREE.Loader.Handlers.get( url ); + + if ( loader !== null ) { + + texture = loader.load( url ); + + } else { + + texture = new THREE.Texture(); + + loadTextureImage( texture, url ); + + } + + texture.wrapS = cot.texOpts.wrapU ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping; + texture.wrapT = cot.texOpts.wrapV ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping; + texture.offset.x = cot.texOpts.offsetU; + texture.offset.y = cot.texOpts.offsetV; + texture.repeat.x = cot.texOpts.repeatU; + texture.repeat.y = cot.texOpts.repeatV; + props[keys[prop]] = texture; + + // Texture with baked lighting? + if (prop === 'emission') props['emissive'] = 0xffffff; + + } + + } + + } + + } else if ( prop === 'diffuse' || !transparent ) { + + if ( prop === 'emission' ) { + + props[ 'emissive' ] = cot.color.getHex(); + + } else { + + props[ prop ] = cot.color.getHex(); + + } + + } + + } + + break; + + case 'shininess': + + props[ prop ] = this[ prop ]; + break; + + case 'reflectivity': + + props[ prop ] = this[ prop ]; + if ( props[ prop ] > 0.0 ) props['envMap'] = options.defaultEnvMap; + props['combine'] = THREE.MixOperation; //mix regular shading with reflective component + break; + + case 'index_of_refraction': + + props[ 'refractionRatio' ] = this[ prop ]; //TODO: "index_of_refraction" becomes "refractionRatio" in shader, but I'm not sure if the two are actually comparable + if ( this[ prop ] !== 1.0 ) props['envMap'] = options.defaultEnvMap; + break; + + case 'transparency': + // gets figured out up top + break; + + default: + break; + + } + + } + + props[ 'shading' ] = preferredShading; + props[ 'side' ] = this.effect.doubleSided ? THREE.DoubleSide : THREE.FrontSide; + + if ( props.diffuse !== undefined ) { + + props.color = props.diffuse; + delete props.diffuse; + + } + + switch ( this.type ) { + + case 'constant': + + if (props.emissive != undefined) props.color = props.emissive; + this.material = new THREE.MeshBasicMaterial( props ); + break; + + case 'phong': + case 'blinn': + + this.material = new THREE.MeshPhongMaterial( props ); + break; + + case 'lambert': + default: + + this.material = new THREE.MeshLambertMaterial( props ); + break; + + } + + return this.material; + + }; + + function Surface ( effect ) { + + this.effect = effect; + this.init_from = null; + this.format = null; + + } + + Surface.prototype.parse = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'init_from': + + this.init_from = child.textContent; + break; + + case 'format': + + this.format = child.textContent; + break; + + default: + + console.log( "unhandled Surface prop: " + child.nodeName ); + break; + + } + + } + + return this; + + }; + + function Sampler2D ( effect ) { + + this.effect = effect; + this.source = null; + this.wrap_s = null; + this.wrap_t = null; + this.minfilter = null; + this.magfilter = null; + this.mipfilter = null; + + } + + Sampler2D.prototype.parse = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'source': + + this.source = child.textContent; + break; + + case 'minfilter': + + this.minfilter = child.textContent; + break; + + case 'magfilter': + + this.magfilter = child.textContent; + break; + + case 'mipfilter': + + this.mipfilter = child.textContent; + break; + + case 'wrap_s': + + this.wrap_s = child.textContent; + break; + + case 'wrap_t': + + this.wrap_t = child.textContent; + break; + + default: + + console.log( "unhandled Sampler2D prop: " + child.nodeName ); + break; + + } + + } + + return this; + + }; + + function Effect () { + + this.id = ""; + this.name = ""; + this.shader = null; + this.surface = {}; + this.sampler = {}; + + } + + Effect.prototype.create = function () { + + if ( this.shader === null ) { + + return null; + + } + + }; + + Effect.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + + extractDoubleSided( this, element ); + + this.shader = null; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'profile_COMMON': + + this.parseTechnique( this.parseProfileCOMMON( child ) ); + break; + + default: + break; + + } + + } + + return this; + + }; + + Effect.prototype.parseNewparam = function ( element ) { + + var sid = element.getAttribute( 'sid' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'surface': + + this.surface[sid] = ( new Surface( this ) ).parse( child ); + break; + + case 'sampler2D': + + this.sampler[sid] = ( new Sampler2D( this ) ).parse( child ); + break; + + case 'extra': + + break; + + default: + + console.log( child.nodeName ); + break; + + } + + } + + }; + + Effect.prototype.parseProfileCOMMON = function ( element ) { + + var technique; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'profile_COMMON': + + this.parseProfileCOMMON( child ); + break; + + case 'technique': + + technique = child; + break; + + case 'newparam': + + this.parseNewparam( child ); + break; + + case 'image': + + var _image = ( new _Image() ).parse( child ); + images[ _image.id ] = _image; + break; + + case 'extra': + break; + + default: + + console.log( child.nodeName ); + break; + + } + + } + + return technique; + + }; + + Effect.prototype.parseTechnique = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'constant': + case 'lambert': + case 'blinn': + case 'phong': + + this.shader = ( new Shader( child.nodeName, this ) ).parse( child ); + break; + case 'extra': + this.parseExtra(child); + break; + default: + break; + + } + + } + + }; + + Effect.prototype.parseExtra = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'technique': + this.parseExtraTechnique( child ); + break; + default: + break; + + } + + } + + }; + + Effect.prototype.parseExtraTechnique = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[i]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'bump': + this.shader.parse( element ); + break; + default: + break; + + } + + } + + }; + + function InstanceEffect () { + + this.url = ""; + + } + + InstanceEffect.prototype.parse = function ( element ) { + + this.url = element.getAttribute( 'url' ).replace( /^#/, '' ); + return this; + + }; + + function Animation() { + + this.id = ""; + this.name = ""; + this.source = {}; + this.sampler = []; + this.channel = []; + + } + + Animation.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + this.source = {}; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'animation': + + var anim = ( new Animation() ).parse( child ); + + for ( var src in anim.source ) { + + this.source[ src ] = anim.source[ src ]; + + } + + for ( var j = 0; j < anim.channel.length; j ++ ) { + + this.channel.push( anim.channel[ j ] ); + this.sampler.push( anim.sampler[ j ] ); + + } + + break; + + case 'source': + + var src = ( new Source() ).parse( child ); + this.source[ src.id ] = src; + break; + + case 'sampler': + + this.sampler.push( ( new Sampler( this ) ).parse( child ) ); + break; + + case 'channel': + + this.channel.push( ( new Channel( this ) ).parse( child ) ); + break; + + default: + break; + + } + + } + + return this; + + }; + + function Channel( animation ) { + + this.animation = animation; + this.source = ""; + this.target = ""; + this.fullSid = null; + this.sid = null; + this.dotSyntax = null; + this.arrSyntax = null; + this.arrIndices = null; + this.member = null; + + } + + Channel.prototype.parse = function ( element ) { + + this.source = element.getAttribute( 'source' ).replace( /^#/, '' ); + this.target = element.getAttribute( 'target' ); + + var parts = this.target.split( '/' ); + + var id = parts.shift(); + var sid = parts.shift(); + + var dotSyntax = ( sid.indexOf(".") >= 0 ); + var arrSyntax = ( sid.indexOf("(") >= 0 ); + + if ( dotSyntax ) { + + parts = sid.split("."); + this.sid = parts.shift(); + this.member = parts.shift(); + + } else if ( arrSyntax ) { + + var arrIndices = sid.split("("); + this.sid = arrIndices.shift(); + + for (var j = 0; j < arrIndices.length; j ++ ) { + + arrIndices[j] = parseInt( arrIndices[j].replace(/\)/, '') ); + + } + + this.arrIndices = arrIndices; + + } else { + + this.sid = sid; + + } + + this.fullSid = sid; + this.dotSyntax = dotSyntax; + this.arrSyntax = arrSyntax; + + return this; + + }; + + function Sampler ( animation ) { + + this.id = ""; + this.animation = animation; + this.inputs = []; + this.input = null; + this.output = null; + this.strideOut = null; + this.interpolation = null; + this.startTime = null; + this.endTime = null; + this.duration = 0; + + } + + Sampler.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.inputs = []; + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'input': + + this.inputs.push( (new Input()).parse( child ) ); + break; + + default: + break; + + } + + } + + return this; + + }; + + Sampler.prototype.create = function () { + + for ( var i = 0; i < this.inputs.length; i ++ ) { + + var input = this.inputs[ i ]; + var source = this.animation.source[ input.source ]; + + switch ( input.semantic ) { + + case 'INPUT': + + this.input = source.read(); + break; + + case 'OUTPUT': + + this.output = source.read(); + this.strideOut = source.accessor.stride; + break; + + case 'INTERPOLATION': + + this.interpolation = source.read(); + break; + + case 'IN_TANGENT': + + break; + + case 'OUT_TANGENT': + + break; + + default: + + console.log(input.semantic); + break; + + } + + } + + this.startTime = 0; + this.endTime = 0; + this.duration = 0; + + if ( this.input.length ) { + + this.startTime = 100000000; + this.endTime = -100000000; + + for ( var i = 0; i < this.input.length; i ++ ) { + + this.startTime = Math.min( this.startTime, this.input[ i ] ); + this.endTime = Math.max( this.endTime, this.input[ i ] ); + + } + + this.duration = this.endTime - this.startTime; + + } + + }; + + Sampler.prototype.getData = function ( type, ndx, member ) { + + var data; + + if ( type === 'matrix' && this.strideOut === 16 ) { + + data = this.output[ ndx ]; + + } else if ( this.strideOut > 1 ) { + + data = []; + ndx *= this.strideOut; + + for ( var i = 0; i < this.strideOut; ++ i ) { + + data[ i ] = this.output[ ndx + i ]; + + } + + if ( this.strideOut === 3 ) { + + switch ( type ) { + + case 'rotate': + case 'translate': + + fixCoords( data, -1 ); + break; + + case 'scale': + + fixCoords( data, 1 ); + break; + + } + + } else if ( this.strideOut === 4 && type === 'matrix' ) { + + fixCoords( data, -1 ); + + } + + } else { + + data = this.output[ ndx ]; + + if ( member && type === 'translate' ) { + data = getConvertedTranslation( member, data ); + } + + } + + return data; + + }; + + function Key ( time ) { + + this.targets = []; + this.time = time; + + } + + Key.prototype.addTarget = function ( fullSid, transform, member, data ) { + + this.targets.push( { + sid: fullSid, + member: member, + transform: transform, + data: data + } ); + + }; + + Key.prototype.apply = function ( opt_sid ) { + + for ( var i = 0; i < this.targets.length; ++ i ) { + + var target = this.targets[ i ]; + + if ( !opt_sid || target.sid === opt_sid ) { + + target.transform.update( target.data, target.member ); + + } + + } + + }; + + Key.prototype.getTarget = function ( fullSid ) { + + for ( var i = 0; i < this.targets.length; ++ i ) { + + if ( this.targets[ i ].sid === fullSid ) { + + return this.targets[ i ]; + + } + + } + + return null; + + }; + + Key.prototype.hasTarget = function ( fullSid ) { + + for ( var i = 0; i < this.targets.length; ++ i ) { + + if ( this.targets[ i ].sid === fullSid ) { + + return true; + + } + + } + + return false; + + }; + + // TODO: Currently only doing linear interpolation. Should support full COLLADA spec. + Key.prototype.interpolate = function ( nextKey, time ) { + + for ( var i = 0, l = this.targets.length; i < l; i ++ ) { + + var target = this.targets[ i ], + nextTarget = nextKey.getTarget( target.sid ), + data; + + if ( target.transform.type !== 'matrix' && nextTarget ) { + + var scale = ( time - this.time ) / ( nextKey.time - this.time ), + nextData = nextTarget.data, + prevData = target.data; + + if ( scale < 0 ) scale = 0; + if ( scale > 1 ) scale = 1; + + if ( prevData.length ) { + + data = []; + + for ( var j = 0; j < prevData.length; ++ j ) { + + data[ j ] = prevData[ j ] + ( nextData[ j ] - prevData[ j ] ) * scale; + + } + + } else { + + data = prevData + ( nextData - prevData ) * scale; + + } + + } else { + + data = target.data; + + } + + target.transform.update( data, target.member ); + + } + + }; + + // Camera + function Camera() { + + this.id = ""; + this.name = ""; + this.technique = ""; + + } + + Camera.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'optics': + + this.parseOptics( child ); + break; + + default: + break; + + } + + } + + return this; + + }; + + Camera.prototype.parseOptics = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + if ( element.childNodes[ i ].nodeName === 'technique_common' ) { + + var technique = element.childNodes[ i ]; + + for ( var j = 0; j < technique.childNodes.length; j ++ ) { + + this.technique = technique.childNodes[ j ].nodeName; + + if ( this.technique === 'perspective' ) { + + var perspective = technique.childNodes[ j ]; + + for ( var k = 0; k < perspective.childNodes.length; k ++ ) { + + var param = perspective.childNodes[ k ]; + + switch ( param.nodeName ) { + + case 'yfov': + this.yfov = param.textContent; + break; + case 'xfov': + this.xfov = param.textContent; + break; + case 'znear': + this.znear = param.textContent; + break; + case 'zfar': + this.zfar = param.textContent; + break; + case 'aspect_ratio': + this.aspect_ratio = param.textContent; + break; + + } + + } + + } else if ( this.technique === 'orthographic' ) { + + var orthographic = technique.childNodes[ j ]; + + for ( var k = 0; k < orthographic.childNodes.length; k ++ ) { + + var param = orthographic.childNodes[ k ]; + + switch ( param.nodeName ) { + + case 'xmag': + this.xmag = param.textContent; + break; + case 'ymag': + this.ymag = param.textContent; + break; + case 'znear': + this.znear = param.textContent; + break; + case 'zfar': + this.zfar = param.textContent; + break; + case 'aspect_ratio': + this.aspect_ratio = param.textContent; + break; + + } + + } + + } + + } + + } + + } + + return this; + + }; + + function InstanceCamera() { + + this.url = ""; + + } + + InstanceCamera.prototype.parse = function ( element ) { + + this.url = element.getAttribute('url').replace(/^#/, ''); + + return this; + + }; + + // Light + + function Light() { + + this.id = ""; + this.name = ""; + this.technique = ""; + + } + + Light.prototype.parse = function ( element ) { + + this.id = element.getAttribute( 'id' ); + this.name = element.getAttribute( 'name' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'technique_common': + + this.parseCommon( child ); + break; + + case 'technique': + + this.parseTechnique( child ); + break; + + default: + break; + + } + + } + + return this; + + }; + + Light.prototype.parseCommon = function ( element ) { + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + switch ( element.childNodes[ i ].nodeName ) { + + case 'directional': + case 'point': + case 'spot': + case 'ambient': + + this.technique = element.childNodes[ i ].nodeName; + + var light = element.childNodes[ i ]; + + for ( var j = 0; j < light.childNodes.length; j ++ ) { + + var child = light.childNodes[j]; + + switch ( child.nodeName ) { + + case 'color': + + var rgba = _floats( child.textContent ); + this.color = new THREE.Color(0); + this.color.setRGB( rgba[0], rgba[1], rgba[2] ); + this.color.a = rgba[3]; + break; + + case 'falloff_angle': + + this.falloff_angle = parseFloat( child.textContent ); + break; + + case 'quadratic_attenuation': + var f = parseFloat( child.textContent ); + this.distance = f ? Math.sqrt( 1 / f ) : 0; + } + + } + + } + + } + + return this; + + }; + + Light.prototype.parseTechnique = function ( element ) { + + this.profile = element.getAttribute( 'profile' ); + + for ( var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + + switch ( child.nodeName ) { + + case 'intensity': + + this.intensity = parseFloat(child.textContent); + break; + + } + + } + + return this; + + }; + + function InstanceLight() { + + this.url = ""; + + } + + InstanceLight.prototype.parse = function ( element ) { + + this.url = element.getAttribute('url').replace(/^#/, ''); + + return this; + + }; + + function KinematicsModel( ) { + + this.id = ''; + this.name = ''; + this.joints = []; + this.links = []; + + } + + KinematicsModel.prototype.parse = function( element ) { + + this.id = element.getAttribute('id'); + this.name = element.getAttribute('name'); + this.joints = []; + this.links = []; + + for (var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'technique_common': + + this.parseCommon(child); + break; + + default: + break; + + } + + } + + return this; + + }; + + KinematicsModel.prototype.parseCommon = function( element ) { + + for (var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( element.childNodes[ i ].nodeName ) { + + case 'joint': + this.joints.push( (new Joint()).parse(child) ); + break; + + case 'link': + this.links.push( (new Link()).parse(child) ); + break; + + default: + break; + + } + + } + + return this; + + }; + + function Joint( ) { + + this.sid = ''; + this.name = ''; + this.axis = new THREE.Vector3(); + this.limits = { + min: 0, + max: 0 + }; + this.type = ''; + this.static = false; + this.zeroPosition = 0.0; + this.middlePosition = 0.0; + + } + + Joint.prototype.parse = function( element ) { + + this.sid = element.getAttribute('sid'); + this.name = element.getAttribute('name'); + this.axis = new THREE.Vector3(); + this.limits = { + min: 0, + max: 0 + }; + this.type = ''; + this.static = false; + this.zeroPosition = 0.0; + this.middlePosition = 0.0; + + var axisElement = element.querySelector('axis'); + var _axis = _floats(axisElement.textContent); + this.axis = getConvertedVec3(_axis, 0); + + var min = element.querySelector('limits min') ? parseFloat(element.querySelector('limits min').textContent) : -360; + var max = element.querySelector('limits max') ? parseFloat(element.querySelector('limits max').textContent) : 360; + + this.limits = { + min: min, + max: max + }; + + var jointTypes = [ 'prismatic', 'revolute' ]; + for (var i = 0; i < jointTypes.length; i ++ ) { + + var type = jointTypes[ i ]; + + var jointElement = element.querySelector(type); + + if ( jointElement ) { + + this.type = type; + + } + + } + + // if the min is equal to or somehow greater than the max, consider the joint static + if ( this.limits.min >= this.limits.max ) { + + this.static = true; + + } + + this.middlePosition = (this.limits.min + this.limits.max) / 2.0; + return this; + + }; + + function Link( ) { + + this.sid = ''; + this.name = ''; + this.transforms = []; + this.attachments = []; + + } + + Link.prototype.parse = function( element ) { + + this.sid = element.getAttribute('sid'); + this.name = element.getAttribute('name'); + this.transforms = []; + this.attachments = []; + + for (var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'attachment_full': + this.attachments.push( (new Attachment()).parse(child) ); + break; + + case 'rotate': + case 'translate': + case 'matrix': + + this.transforms.push( (new Transform()).parse(child) ); + break; + + default: + + break; + + } + + } + + return this; + + }; + + function Attachment( ) { + + this.joint = ''; + this.transforms = []; + this.links = []; + + } + + Attachment.prototype.parse = function( element ) { + + this.joint = element.getAttribute('joint').split('/').pop(); + this.links = []; + + for (var i = 0; i < element.childNodes.length; i ++ ) { + + var child = element.childNodes[ i ]; + if ( child.nodeType != 1 ) continue; + + switch ( child.nodeName ) { + + case 'link': + this.links.push( (new Link()).parse(child) ); + break; + + case 'rotate': + case 'translate': + case 'matrix': + + this.transforms.push( (new Transform()).parse(child) ); + break; + + default: + + break; + + } + + } + + return this; + + }; + + function _source( element ) { + + var id = element.getAttribute( 'id' ); + + if ( sources[ id ] != undefined ) { + + return sources[ id ]; + + } + + sources[ id ] = ( new Source(id )).parse( element ); + return sources[ id ]; + + } + + function _nsResolver( nsPrefix ) { + + if ( nsPrefix === "dae" ) { + + return "http://www.collada.org/2005/11/COLLADASchema"; + + } + + return null; + + } + + function _bools( str ) { + + var raw = _strings( str ); + var data = []; + + for ( var i = 0, l = raw.length; i < l; i ++ ) { + + data.push( (raw[i] === 'true' || raw[i] === '1') ? true : false ); + + } + + return data; + + } + + function _floats( str ) { + + var raw = _strings(str); + var data = []; + + for ( var i = 0, l = raw.length; i < l; i ++ ) { + + data.push( parseFloat( raw[ i ] ) ); + + } + + return data; + + } + + function _ints( str ) { + + var raw = _strings( str ); + var data = []; + + for ( var i = 0, l = raw.length; i < l; i ++ ) { + + data.push( parseInt( raw[ i ], 10 ) ); + + } + + return data; + + } + + function _strings( str ) { + + return ( str.length > 0 ) ? _trimString( str ).split( /\s+/ ) : []; + + } + + function _trimString( str ) { + + return str.replace( /^\s+/, "" ).replace( /\s+$/, "" ); + + } + + function _attr_as_float( element, name, defaultValue ) { + + if ( element.hasAttribute( name ) ) { + + return parseFloat( element.getAttribute( name ) ); + + } else { + + return defaultValue; + + } + + } + + function _attr_as_int( element, name, defaultValue ) { + + if ( element.hasAttribute( name ) ) { + + return parseInt( element.getAttribute( name ), 10) ; + + } else { + + return defaultValue; + + } + + } + + function _attr_as_string( element, name, defaultValue ) { + + if ( element.hasAttribute( name ) ) { + + return element.getAttribute( name ); + + } else { + + return defaultValue; + + } + + } + + function _format_float( f, num ) { + + if ( f === undefined ) { + + var s = '0.'; + + while ( s.length < num + 2 ) { + + s += '0'; + + } + + return s; + + } + + num = num || 2; + + var parts = f.toString().split( '.' ); + parts[ 1 ] = parts.length > 1 ? parts[ 1 ].substr( 0, num ) : "0"; + + while ( parts[ 1 ].length < num ) { + + parts[ 1 ] += '0'; + + } + + return parts.join( '.' ); + + } + + function loadTextureImage ( texture, url ) { + + var loader = new THREE.ImageLoader(); + + loader.load( url, function ( image ) { + + texture.image = image; + texture.needsUpdate = true; + + } ); + + } + + function extractDoubleSided( obj, element ) { + + obj.doubleSided = false; + + var node = element.querySelectorAll('extra double_sided')[0]; + + if ( node ) { + + if ( node && parseInt( node.textContent, 10 ) === 1 ) { + + obj.doubleSided = true; + + } + + } + + } + + // Up axis conversion + + function setUpConversion() { + + if ( options.convertUpAxis !== true || colladaUp === options.upAxis ) { + + upConversion = null; + + } else { + + switch ( colladaUp ) { + + case 'X': + + upConversion = options.upAxis === 'Y' ? 'XtoY' : 'XtoZ'; + break; + + case 'Y': + + upConversion = options.upAxis === 'X' ? 'YtoX' : 'YtoZ'; + break; + + case 'Z': + + upConversion = options.upAxis === 'X' ? 'ZtoX' : 'ZtoY'; + break; + + } + + } + + } + + function fixCoords( data, sign ) { + + if ( options.convertUpAxis !== true || colladaUp === options.upAxis ) { + + return; + + } + + switch ( upConversion ) { + + case 'XtoY': + + var tmp = data[ 0 ]; + data[ 0 ] = sign * data[ 1 ]; + data[ 1 ] = tmp; + break; + + case 'XtoZ': + + var tmp = data[ 2 ]; + data[ 2 ] = data[ 1 ]; + data[ 1 ] = data[ 0 ]; + data[ 0 ] = tmp; + break; + + case 'YtoX': + + var tmp = data[ 0 ]; + data[ 0 ] = data[ 1 ]; + data[ 1 ] = sign * tmp; + break; + + case 'YtoZ': + + var tmp = data[ 1 ]; + data[ 1 ] = sign * data[ 2 ]; + data[ 2 ] = tmp; + break; + + case 'ZtoX': + + var tmp = data[ 0 ]; + data[ 0 ] = data[ 1 ]; + data[ 1 ] = data[ 2 ]; + data[ 2 ] = tmp; + break; + + case 'ZtoY': + + var tmp = data[ 1 ]; + data[ 1 ] = data[ 2 ]; + data[ 2 ] = sign * tmp; + break; + + } + + } + + function getConvertedTranslation( axis, data ) { + + if ( options.convertUpAxis !== true || colladaUp === options.upAxis ) { + + return data; + + } + + switch ( axis ) { + case 'X': + data = upConversion === 'XtoY' ? data * -1 : data; + break; + case 'Y': + data = upConversion === 'YtoZ' || upConversion === 'YtoX' ? data * -1 : data; + break; + case 'Z': + data = upConversion === 'ZtoY' ? data * -1 : data ; + break; + default: + break; + } + + return data; + } + + function getConvertedVec3( data, offset ) { + + var arr = [ data[ offset ], data[ offset + 1 ], data[ offset + 2 ] ]; + fixCoords( arr, -1 ); + return new THREE.Vector3( arr[ 0 ], arr[ 1 ], arr[ 2 ] ); + + } + + function getConvertedMat4( data ) { + + if ( options.convertUpAxis ) { + + // First fix rotation and scale + + // Columns first + var arr = [ data[ 0 ], data[ 4 ], data[ 8 ] ]; + fixCoords( arr, -1 ); + data[ 0 ] = arr[ 0 ]; + data[ 4 ] = arr[ 1 ]; + data[ 8 ] = arr[ 2 ]; + arr = [ data[ 1 ], data[ 5 ], data[ 9 ] ]; + fixCoords( arr, -1 ); + data[ 1 ] = arr[ 0 ]; + data[ 5 ] = arr[ 1 ]; + data[ 9 ] = arr[ 2 ]; + arr = [ data[ 2 ], data[ 6 ], data[ 10 ] ]; + fixCoords( arr, -1 ); + data[ 2 ] = arr[ 0 ]; + data[ 6 ] = arr[ 1 ]; + data[ 10 ] = arr[ 2 ]; + // Rows second + arr = [ data[ 0 ], data[ 1 ], data[ 2 ] ]; + fixCoords( arr, -1 ); + data[ 0 ] = arr[ 0 ]; + data[ 1 ] = arr[ 1 ]; + data[ 2 ] = arr[ 2 ]; + arr = [ data[ 4 ], data[ 5 ], data[ 6 ] ]; + fixCoords( arr, -1 ); + data[ 4 ] = arr[ 0 ]; + data[ 5 ] = arr[ 1 ]; + data[ 6 ] = arr[ 2 ]; + arr = [ data[ 8 ], data[ 9 ], data[ 10 ] ]; + fixCoords( arr, -1 ); + data[ 8 ] = arr[ 0 ]; + data[ 9 ] = arr[ 1 ]; + data[ 10 ] = arr[ 2 ]; + + // Now fix translation + arr = [ data[ 3 ], data[ 7 ], data[ 11 ] ]; + fixCoords( arr, -1 ); + data[ 3 ] = arr[ 0 ]; + data[ 7 ] = arr[ 1 ]; + data[ 11 ] = arr[ 2 ]; + + } + + return new THREE.Matrix4().set( + data[0], data[1], data[2], data[3], + data[4], data[5], data[6], data[7], + data[8], data[9], data[10], data[11], + data[12], data[13], data[14], data[15] + ); + + } + + function getConvertedIndex( index ) { + + if ( index > -1 && index < 3 ) { + + var members = [ 'X', 'Y', 'Z' ], + indices = { X: 0, Y: 1, Z: 2 }; + + index = getConvertedMember( members[ index ] ); + index = indices[ index ]; + + } + + return index; + + } + + function getConvertedMember( member ) { + + if ( options.convertUpAxis ) { + + switch ( member ) { + + case 'X': + + switch ( upConversion ) { + + case 'XtoY': + case 'XtoZ': + case 'YtoX': + + member = 'Y'; + break; + + case 'ZtoX': + + member = 'Z'; + break; + + } + + break; + + case 'Y': + + switch ( upConversion ) { + + case 'XtoY': + case 'YtoX': + case 'ZtoX': + + member = 'X'; + break; + + case 'XtoZ': + case 'YtoZ': + case 'ZtoY': + + member = 'Z'; + break; + + } + + break; + + case 'Z': + + switch ( upConversion ) { + + case 'XtoZ': + + member = 'X'; + break; + + case 'YtoZ': + case 'ZtoX': + case 'ZtoY': + + member = 'Y'; + break; + + } + + break; + + } + + } + + return member; + + } + + return { + + load: load, + parse: parse, + setPreferredShading: setPreferredShading, + applySkin: applySkin, + geometries : geometries, + options: options + + }; + +}; diff --git a/lib/MTLLoader.js b/lib/MTLLoader.js index a0edf05..7e91140 100755 --- a/lib/MTLLoader.js +++ b/lib/MTLLoader.js @@ -338,6 +338,7 @@ THREE.MTLLoader.MaterialCreator.prototype = { // Create material + var scope = this; var mat = this.materialsInfo[ materialName ]; var params = { @@ -358,6 +359,22 @@ THREE.MTLLoader.MaterialCreator.prototype = { return baseUrl + url; }; + + function setMapForType ( mapType, value ) { + + if ( params[ mapType ] ) return; // Keep the first encountered texture + + var texParams = scope.getTextureParams( value, params ); + var map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) ); + + map.repeat.copy( texParams.scale ); + map.offset.copy( texParams.offset ); + + map.wrapS = scope.wrap; + map.wrapT = scope.wrap; + + params[ mapType ] = map; + } for ( var prop in mat ) { @@ -388,28 +405,24 @@ THREE.MTLLoader.MaterialCreator.prototype = { // Diffuse texture map - if ( params.map ) break; // Keep the first encountered texture - - var texParams = this.getTextureParams( value, params ); - - params.map = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) ); - params.map.repeat.copy( texParams.scale ); - params.map.offset.copy( texParams.offset ); - - params.map.wrapS = this.wrap; - params.map.wrapT = this.wrap; + setMapForType( "map", value ); break; case 'map_ks': // Specular map + + setMapForType( "specularMap", value ); - if ( params.specularMap ) break; // Keep the first encountered texture + break; - params.specularMap = this.loadTexture( resolveURL( this.baseUrl, value ) ); - params.specularMap.wrapS = this.wrap; - params.specularMap.wrapT = this.wrap; + case 'map_bump': + case 'bump': + + // Bump texture map + + setMapForType( "bumpMap", value ); break; @@ -444,24 +457,6 @@ THREE.MTLLoader.MaterialCreator.prototype = { break; - case 'map_bump': - case 'bump': - - // Bump texture map - - if ( params.bumpMap ) break; // Keep the first encountered texture - - var texParams = this.getTextureParams( value, params ); - - params.bumpMap = this.loadTexture( resolveURL( this.baseUrl, texParams.url ) ); - params.bumpMap.repeat.copy( texParams.scale ); - params.bumpMap.offset.copy( texParams.offset ); - - params.bumpMap.wrapS = this.wrap; - params.bumpMap.wrapT = this.wrap; - - break; - default: break; diff --git a/lib/port.dae b/lib/port.dae new file mode 100644 index 0000000..07108bd --- /dev/null +++ b/lib/port.dae @@ -0,0 +1,3888 @@ + + + FBX COLLADA exporter2016-10-09T15:58:21Z2016-10-09T15:58:21ZY_UP + + + + + + + + + + + + 0.000000 0.000000 0.000000 1.000000 + + + 0.109800 0.584300 0.694100 1.000000 + + + 0.109800 0.584300 0.694100 1.000000 + + + 0.350000 0.350000 0.350000 1.000000 + + + 9.189586 + + + 0.000000 0.000000 0.000000 1.000000 + + + 1.000000 + + + 1.000000 1.000000 1.000000 1.000000 + + + 0.000000 + + + + + + + + + + + +2.100000 0.000000 3.600000 +1.937200 -0.824200 3.600000 +1.910200 -0.812800 3.710700 +2.070700 0.000000 3.710700 +1.941600 -0.826100 3.747700 +2.104700 0.000000 3.747700 +2.005400 -0.853200 3.710700 +2.173800 0.000000 3.710700 +2.075600 -0.883100 3.600000 +2.250000 0.000000 3.600000 +1.491000 -1.491000 3.600000 +1.470200 -1.470200 3.710700 +1.494300 -1.494300 3.747700 +1.543400 -1.543400 3.710700 +1.597500 -1.597500 3.600000 +0.824200 -1.937200 3.600000 +0.812800 -1.910200 3.710700 +0.826100 -1.941600 3.747700 +0.853200 -2.005400 3.710700 +0.883100 -2.075600 3.600000 +0.000000 -2.100000 3.600000 +0.000000 -2.070700 3.710700 +0.000000 -2.104700 3.747700 +0.000000 -2.173800 3.710700 +0.000000 -2.250000 3.600000 +-0.881200 -1.937200 3.600000 +-0.836800 -1.910200 3.710700 +-0.833200 -1.941600 3.747700 +-0.854100 -2.005400 3.710700 +-0.883100 -2.075600 3.600000 +-1.541600 -1.491000 3.600000 +-1.491600 -1.470200 3.710700 +-1.500700 -1.494300 3.747700 +-1.544200 -1.543400 3.710700 +-1.597500 -1.597500 3.600000 +-1.956200 -0.824200 3.600000 +-1.918200 -0.812800 3.710700 +-1.943900 -0.826100 3.747700 +-2.005700 -0.853200 3.710700 +-2.075600 -0.883100 3.600000 +-2.100000 0.000000 3.600000 +-2.070700 0.000000 3.710700 +-2.104700 0.000000 3.747700 +-2.173800 0.000000 3.710700 +-2.250000 0.000000 3.600000 +-1.937200 0.824200 3.600000 +-1.910200 0.812800 3.710700 +-1.941600 0.826100 3.747700 +-2.005400 0.853200 3.710700 +-2.075600 0.883100 3.600000 +-1.491000 1.491000 3.600000 +-1.470200 1.470200 3.710700 +-1.494300 1.494300 3.747700 +-1.543400 1.543400 3.710700 +-1.597500 1.597500 3.600000 +-0.824200 1.937200 3.600000 +-0.812800 1.910200 3.710700 +-0.826100 1.941600 3.747700 +-0.853200 2.005400 3.710700 +-0.883100 2.075600 3.600000 +0.000000 2.100000 3.600000 +0.000000 2.070700 3.710700 +0.000000 2.104700 3.747700 +0.000000 2.173800 3.710700 +0.000000 2.250000 3.600000 +0.824200 1.937200 3.600000 +0.812800 1.910200 3.710700 +0.826100 1.941600 3.747700 +0.853200 2.005400 3.710700 +0.883100 2.075600 3.600000 +1.491000 1.491000 3.600000 +1.470200 1.470200 3.710700 +1.494300 1.494300 3.747700 +1.543400 1.543400 3.710700 +1.597500 1.597500 3.600000 +1.937200 0.824200 3.600000 +1.910200 0.812800 3.710700 +1.941600 0.826100 3.747700 +2.005400 0.853200 3.710700 +2.075600 0.883100 3.600000 +2.329700 -0.991200 3.011100 +2.525400 0.000000 3.011100 +2.551300 -1.085500 2.432800 +2.765600 0.000000 2.432800 +2.708000 -1.152200 1.875600 +2.935500 0.000000 1.875600 +2.767500 -1.177500 1.350000 +3.000000 0.000000 1.350000 +1.793000 -1.793000 3.011100 +1.963600 -1.963600 2.432800 +2.084200 -2.084200 1.875600 +2.130000 -2.130000 1.350000 +0.991200 -2.329700 3.011100 +1.085500 -2.551300 2.432800 +1.152200 -2.708000 1.875600 +1.177500 -2.767500 1.350000 +0.000000 -2.525400 3.011100 +0.000000 -2.765600 2.432800 +0.000000 -2.935500 1.875600 +0.000000 -3.000000 1.350000 +-0.991200 -2.329700 3.011100 +-1.085500 -2.551300 2.432800 +-1.152200 -2.708000 1.875600 +-1.177500 -2.767500 1.350000 +-1.793000 -1.793000 3.011100 +-1.963600 -1.963600 2.432800 +-2.084200 -2.084200 1.875600 +-2.130000 -2.130000 1.350000 +-2.329700 -0.991200 3.011100 +-2.551300 -1.085500 2.432800 +-2.708000 -1.152200 1.875600 +-2.767500 -1.177500 1.350000 +-2.525400 0.000000 3.011100 +-2.765600 0.000000 2.432800 +-2.935500 0.000000 1.875600 +-3.000000 0.000000 1.350000 +-2.329700 0.991200 3.011100 +-2.551300 1.085500 2.432800 +-2.708000 1.152200 1.875600 +-2.767500 1.177500 1.350000 +-1.793000 1.793000 3.011100 +-1.963600 1.963600 2.432800 +-2.084200 2.084200 1.875600 +-2.130000 2.130000 1.350000 +-0.991200 2.329700 3.011100 +-1.085500 2.551300 2.432800 +-1.152200 2.708000 1.875600 +-1.177500 2.767500 1.350000 +0.000000 2.525400 3.011100 +0.000000 2.765600 2.432800 +0.000000 2.935500 1.875600 +0.000000 3.000000 1.350000 +0.991200 2.329700 3.011100 +1.085500 2.551300 2.432800 +1.152200 2.708000 1.875600 +1.177500 2.767500 1.350000 +1.793000 1.793000 3.011100 +1.963600 1.963600 2.432800 +2.084200 2.084200 1.875600 +2.130000 2.130000 1.350000 +2.329700 0.991200 3.011100 +2.551300 1.085500 2.432800 +2.708000 1.152200 1.875600 +2.767500 1.177500 1.350000 +2.659400 -1.131500 0.905300 +2.882800 0.000000 0.905300 +2.421600 -1.030300 0.576600 +2.625000 0.000000 0.576600 +2.183700 -0.929100 0.353300 +2.367200 0.000000 0.353300 +2.075600 -0.883100 0.225000 +2.250000 0.000000 0.225000 +2.046800 -2.046800 0.905300 +1.863800 -1.863800 0.576600 +1.680700 -1.680700 0.353300 +1.597500 -1.597500 0.225000 +1.131500 -2.659400 0.905300 +1.030300 -2.421600 0.576600 +0.929100 -2.183700 0.353300 +0.883100 -2.075600 0.225000 +0.000000 -2.882800 0.905300 +0.000000 -2.625000 0.576600 +0.000000 -2.367200 0.353300 +0.000000 -2.250000 0.225000 +-1.131500 -2.659400 0.905300 +-1.030300 -2.421600 0.576600 +-0.929100 -2.183700 0.353300 +-0.883100 -2.075600 0.225000 +-2.046800 -2.046800 0.905300 +-1.863800 -1.863800 0.576600 +-1.680700 -1.680700 0.353300 +-1.597500 -1.597500 0.225000 +-2.659400 -1.131500 0.905300 +-2.421600 -1.030300 0.576600 +-2.183700 -0.929100 0.353300 +-2.075600 -0.883100 0.225000 +-2.882800 0.000000 0.905300 +-2.625000 0.000000 0.576600 +-2.367200 0.000000 0.353300 +-2.250000 0.000000 0.225000 +-2.659400 1.131500 0.905300 +-2.421600 1.030300 0.576600 +-2.183700 0.929100 0.353300 +-2.075600 0.883100 0.225000 +-2.046800 2.046800 0.905300 +-1.863800 1.863800 0.576600 +-1.680700 1.680700 0.353300 +-1.597500 1.597500 0.225000 +-1.131500 2.659400 0.905300 +-1.030300 2.421600 0.576600 +-0.929100 2.183700 0.353300 +-0.883100 2.075600 0.225000 +0.000000 2.882800 0.905300 +0.000000 2.625000 0.576600 +0.000000 2.367200 0.353300 +0.000000 2.250000 0.225000 +1.131500 2.659400 0.905300 +1.030300 2.421600 0.576600 +0.929100 2.183700 0.353300 +0.883100 2.075600 0.225000 +2.046800 2.046800 0.905300 +1.863800 1.863800 0.576600 +1.680700 1.680700 0.353300 +1.597500 1.597500 0.225000 +2.659400 1.131500 0.905300 +2.421600 1.030300 0.576600 +2.183700 0.929100 0.353300 +2.075600 0.883100 0.225000 +2.028600 -0.863100 0.142400 +2.199000 0.000000 0.142400 +1.777300 -0.756200 0.070300 +1.926600 0.000000 0.070300 +1.156200 -0.491900 0.019300 +1.253300 0.000000 0.019300 +0.000000 0.000000 0.000000 +1.561300 -1.561300 0.142400 +1.367900 -1.367900 0.070300 +0.889900 -0.889900 0.019300 +0.863100 -2.028600 0.142400 +0.756200 -1.777300 0.070300 +0.491900 -1.156200 0.019300 +0.000000 -2.199000 0.142400 +0.000000 -1.926600 0.070300 +0.000000 -1.253300 0.019300 +-0.863100 -2.028600 0.142400 +-0.756200 -1.777300 0.070300 +-0.491900 -1.156200 0.019300 +-1.561300 -1.561300 0.142400 +-1.367900 -1.367900 0.070300 +-0.889900 -0.889900 0.019300 +-2.028600 -0.863100 0.142400 +-1.777300 -0.756200 0.070300 +-1.156200 -0.491900 0.019300 +-2.199000 0.000000 0.142400 +-1.926600 0.000000 0.070300 +-1.253300 0.000000 0.019300 +-2.028600 0.863100 0.142400 +-1.777300 0.756200 0.070300 +-1.156200 0.491900 0.019300 +-1.561300 1.561300 0.142400 +-1.367900 1.367900 0.070300 +-0.889900 0.889900 0.019300 +-0.863100 2.028600 0.142400 +-0.756200 1.777300 0.070300 +-0.491900 1.156200 0.019300 +0.000000 2.199000 0.142400 +0.000000 1.926600 0.070300 +0.000000 1.253300 0.019300 +0.863100 2.028600 0.142400 +0.756200 1.777300 0.070300 +0.491900 1.156200 0.019300 +1.561300 1.561300 0.142400 +1.367900 1.367900 0.070300 +0.889900 0.889900 0.019300 +2.028600 0.863100 0.142400 +1.777300 0.756200 0.070300 +1.156200 0.491900 0.019300 +-2.400000 0.000000 3.037500 +-2.376600 -0.253100 3.090200 +-3.121700 -0.253100 3.084100 +-3.100800 0.000000 3.032200 +-3.668600 -0.253100 3.041500 +-3.618800 0.000000 2.995300 +-4.005400 -0.253100 2.925600 +-3.939800 0.000000 2.895100 +-4.120300 -0.253100 2.700000 +-4.050000 0.000000 2.700000 +-2.325000 -0.337500 3.206300 +-3.167600 -0.337500 3.198300 +-3.778100 -0.337500 3.143000 +-4.149600 -0.337500 2.992700 +-4.275000 -0.337500 2.700000 +-2.273400 -0.253100 3.322300 +-3.213500 -0.253100 3.312500 +-3.887700 -0.253100 3.244500 +-4.293800 -0.253100 3.059700 +-4.429700 -0.253100 2.700000 +-2.250000 0.000000 3.375000 +-3.234400 0.000000 3.364500 +-3.937500 0.000000 3.290600 +-4.359400 0.000000 3.090200 +-4.500000 0.000000 2.700000 +-2.273400 0.253100 3.322300 +-3.213500 0.253100 3.312500 +-3.887700 0.253100 3.244500 +-4.293800 0.253100 3.059700 +-4.429700 0.253100 2.700000 +-2.325000 0.337500 3.206300 +-3.167600 0.337500 3.198300 +-3.778100 0.337500 3.143000 +-4.149600 0.337500 2.992700 +-4.275000 0.337500 2.700000 +-2.376600 0.253100 3.090200 +-3.121700 0.253100 3.084100 +-3.668600 0.253100 3.041500 +-4.005400 0.253100 2.925600 +-4.120300 0.253100 2.700000 +-4.055300 -0.253100 2.364600 +-3.991400 0.000000 2.394100 +-3.851700 -0.253100 1.980000 +-3.806200 0.000000 2.025000 +-3.496400 -0.253100 1.600200 +-3.480500 0.000000 1.655900 +-2.976600 -0.253100 1.279700 +-4.195900 -0.337500 2.299700 +-3.951600 -0.337500 1.880900 +-3.531400 -0.337500 1.477900 +-2.925000 -0.337500 1.125000 +-4.336500 -0.253100 2.234700 +-4.051500 -0.253100 1.781800 +-3.566500 -0.253100 1.355500 +-2.873400 -0.253100 0.970300 +-4.400400 0.000000 2.205200 +-4.096900 0.000000 1.736700 +-3.582400 0.000000 1.299900 +-2.850000 0.000000 0.900000 +-4.336500 0.253100 2.234700 +-4.051500 0.253100 1.781800 +-3.566500 0.253100 1.355500 +-2.873400 0.253100 0.970300 +-4.195900 0.337500 2.299700 +-3.951600 0.337500 1.880900 +-3.531400 0.337500 1.477900 +-2.925000 0.337500 1.125000 +-4.055300 0.253100 2.364600 +-3.851700 0.253100 1.980000 +-3.496400 0.253100 1.600200 +-2.976600 0.253100 1.279700 +2.550000 0.000000 2.137500 +2.550000 -0.556900 1.944100 +3.324500 -0.502800 2.159400 +3.269500 0.000000 2.302700 +3.651600 -0.383900 2.616500 +3.581300 0.000000 2.700000 +3.838000 -0.265000 3.151400 +3.752300 0.000000 3.181600 +4.190600 -0.210900 3.600000 +4.050000 0.000000 3.600000 +2.550000 -0.742500 1.518800 +3.445300 -0.670400 1.843900 +3.806200 -0.511900 2.432800 +4.026600 -0.353300 3.085000 +4.500000 -0.281300 3.600000 +2.550000 -0.556900 1.093400 +3.566200 -0.502800 1.528500 +3.960900 -0.383900 2.249100 +4.215100 -0.265000 3.018500 +4.809400 -0.210900 3.600000 +2.550000 0.000000 0.900000 +3.621100 0.000000 1.385200 +4.031200 0.000000 2.165600 +4.300800 0.000000 2.988300 +4.950000 0.000000 3.600000 +2.550000 0.556900 1.093400 +3.566200 0.502800 1.528500 +3.960900 0.383900 2.249100 +4.215100 0.265000 3.018500 +4.809400 0.210900 3.600000 +2.550000 0.742500 1.518700 +3.445300 0.670400 1.843900 +3.806200 0.511900 2.432800 +4.026600 0.353300 3.085000 +4.500000 0.281300 3.600000 +2.550000 0.556900 1.944100 +3.324500 0.502800 2.159400 +3.651600 0.383900 2.616500 +3.838000 0.265000 3.151400 +4.190600 0.210900 3.600000 +4.308400 -0.197800 3.666400 +4.157800 0.000000 3.663300 +4.378900 -0.168800 3.689300 +4.237500 0.000000 3.684400 +4.381000 -0.139700 3.667600 +4.260900 0.000000 3.663300 +4.293700 -0.126600 3.600000 +4.200000 0.000000 3.600000 +4.639700 -0.263700 3.673200 +4.689800 -0.225000 3.700200 +4.645000 -0.186300 3.677100 +4.500000 -0.168800 3.600000 +4.971100 -0.197800 3.680000 +5.000800 -0.168800 3.711100 +4.909100 -0.139700 3.686600 +4.706300 -0.126600 3.600000 +5.121700 0.000000 3.683100 +5.142200 0.000000 3.716000 +5.029100 0.000000 3.691000 +4.800000 0.000000 3.600000 +4.971100 0.197800 3.680000 +5.000800 0.168800 3.711100 +4.909100 0.139700 3.686600 +4.706300 0.126600 3.600000 +4.639700 0.263700 3.673200 +4.689800 0.225000 3.700200 +4.645000 0.186300 3.677100 +4.500000 0.168800 3.600000 +4.308400 0.197800 3.666400 +4.378900 0.168800 3.689300 +4.381000 0.139700 3.667600 +4.293700 0.126600 3.600000 +0.471500 -0.201100 4.651200 +0.510900 0.000000 4.651200 +0.000000 0.000000 4.725000 +0.449900 -0.191800 4.471900 +0.487500 0.000000 4.471900 +0.272500 -0.116100 4.250400 +0.295300 0.000000 4.250400 +0.276800 -0.117800 4.050000 +0.300000 0.000000 4.050000 +0.363200 -0.363200 4.651200 +0.346500 -0.346500 4.471900 +0.209800 -0.209800 4.250400 +0.213000 -0.213000 4.050000 +0.201100 -0.471500 4.651200 +0.191800 -0.449900 4.471900 +0.116100 -0.272500 4.250400 +0.117800 -0.276800 4.050000 +0.000000 -0.510900 4.651200 +0.000000 -0.487500 4.471900 +0.000000 -0.295300 4.250400 +0.000000 -0.300000 4.050000 +-0.201100 -0.471500 4.651200 +-0.191800 -0.449900 4.471900 +-0.116100 -0.272500 4.250400 +-0.117800 -0.276800 4.050000 +-0.363200 -0.363200 4.651200 +-0.346500 -0.346500 4.471900 +-0.209800 -0.209800 4.250400 +-0.213000 -0.213000 4.050000 +-0.471500 -0.201100 4.651200 +-0.449900 -0.191800 4.471900 +-0.272500 -0.116100 4.250400 +-0.276800 -0.117800 4.050000 +-0.510900 0.000000 4.651200 +-0.487500 0.000000 4.471900 +-0.295300 0.000000 4.250400 +-0.300000 0.000000 4.050000 +-0.471500 0.201100 4.651200 +-0.449900 0.191800 4.471900 +-0.272500 0.116100 4.250400 +-0.276800 0.117800 4.050000 +-0.363200 0.363200 4.651200 +-0.346500 0.346500 4.471900 +-0.209800 0.209800 4.250400 +-0.213000 0.213000 4.050000 +-0.201100 0.471500 4.651200 +-0.191800 0.449900 4.471900 +-0.116100 0.272500 4.250400 +-0.117800 0.276800 4.050000 +0.000000 0.510900 4.651200 +0.000000 0.487500 4.471900 +0.000000 0.295300 4.250400 +0.000000 0.300000 4.050000 +0.201100 0.471500 4.651200 +0.191800 0.449900 4.471900 +0.116100 0.272500 4.250400 +0.117800 0.276800 4.050000 +0.363200 0.363200 4.651200 +0.346500 0.346500 4.471900 +0.209800 0.209800 4.250400 +0.213000 0.213000 4.050000 +0.471500 0.201100 4.651200 +0.449900 0.191800 4.471900 +0.272500 0.116100 4.250400 +0.276800 0.117800 4.050000 +0.631300 -0.268600 3.916400 +0.684400 0.000000 3.916400 +1.141600 -0.485700 3.825000 +1.237500 0.000000 3.825000 +1.600000 -0.680700 3.733600 +1.734400 0.000000 3.733600 +1.798900 -0.765400 3.600000 +1.950000 0.000000 3.600000 +0.485900 -0.485900 3.916400 +0.878600 -0.878600 3.825000 +1.231400 -1.231400 3.733600 +1.384500 -1.384500 3.600000 +0.268600 -0.631300 3.916400 +0.485700 -1.141600 3.825000 +0.680700 -1.600000 3.733600 +0.765400 -1.798900 3.600000 +0.000000 -0.684400 3.916400 +0.000000 -1.237500 3.825000 +0.000000 -1.734400 3.733600 +0.000000 -1.950000 3.600000 +-0.268600 -0.631300 3.916400 +-0.485700 -1.141600 3.825000 +-0.680700 -1.600000 3.733600 +-0.765400 -1.798900 3.600000 +-0.485900 -0.485900 3.916400 +-0.878600 -0.878600 3.825000 +-1.231400 -1.231400 3.733600 +-1.384500 -1.384500 3.600000 +-0.631300 -0.268600 3.916400 +-1.141600 -0.485700 3.825000 +-1.600000 -0.680700 3.733600 +-1.798900 -0.765400 3.600000 +-0.684400 0.000000 3.916400 +-1.237500 0.000000 3.825000 +-1.734400 0.000000 3.733600 +-1.950000 0.000000 3.600000 +-0.631300 0.268600 3.916400 +-1.141600 0.485700 3.825000 +-1.600000 0.680700 3.733600 +-1.798900 0.765400 3.600000 +-0.485900 0.485900 3.916400 +-0.878600 0.878600 3.825000 +-1.231400 1.231400 3.733600 +-1.384500 1.384500 3.600000 +-0.268600 0.631300 3.916400 +-0.485700 1.141600 3.825000 +-0.680700 1.600000 3.733600 +-0.765400 1.798900 3.600000 +0.000000 0.684400 3.916400 +0.000000 1.237500 3.825000 +0.000000 1.734400 3.733600 +0.000000 1.950000 3.600000 +0.268600 0.631300 3.916400 +0.485700 1.141600 3.825000 +0.680700 1.600000 3.733600 +0.765400 1.798900 3.600000 +0.485900 0.485900 3.916400 +0.878600 0.878600 3.825000 +1.231400 1.231400 3.733600 +1.384500 1.384500 3.600000 +0.631300 0.268600 3.916400 +1.141600 0.485700 3.825000 +1.600000 0.680700 3.733600 +1.798900 0.765400 3.600000 + + + + + + + + + + + +-0.893000 0.369900 -0.256300 +-0.893400 0.369100 0.256000 +-0.966800 0.000000 0.255400 +-0.966800 0.000000 0.255400 +-0.966700 0.000000 -0.255800 +-0.893000 0.369900 -0.256300 +-0.893400 0.369100 0.256000 +-0.083900 0.035500 0.995800 +-0.092100 0.000000 0.995800 +-0.092100 0.000000 0.995800 +-0.966800 0.000000 0.255400 +-0.893400 0.369100 0.256000 +-0.083900 0.035500 0.995800 +0.629700 -0.260400 0.731900 +0.682000 0.000000 0.731300 +0.682000 0.000000 0.731300 +-0.092100 0.000000 0.995800 +-0.083900 0.035500 0.995800 +0.629700 -0.260400 0.731900 +0.803700 -0.332600 0.493400 +0.870300 0.000000 0.492500 +0.870300 0.000000 0.492500 +0.682000 0.000000 0.731300 +0.629700 -0.260400 0.731900 +-0.683400 0.683400 -0.256700 +-0.683500 0.683500 0.256100 +-0.893400 0.369100 0.256000 +-0.893400 0.369100 0.256000 +-0.893000 0.369900 -0.256300 +-0.683400 0.683400 -0.256700 +-0.683500 0.683500 0.256100 +-0.064900 0.064900 0.995800 +-0.083900 0.035500 0.995800 +-0.083900 0.035500 0.995800 +-0.893400 0.369100 0.256000 +-0.683500 0.683500 0.256100 +-0.064900 0.064900 0.995800 +0.481400 -0.481400 0.732500 +0.629700 -0.260400 0.731900 +0.629700 -0.260400 0.731900 +-0.083900 0.035500 0.995800 +-0.064900 0.064900 0.995800 +0.481400 -0.481400 0.732500 +0.614800 -0.614800 0.494000 +0.803700 -0.332600 0.493400 +0.803700 -0.332600 0.493400 +0.629700 -0.260400 0.731900 +0.481400 -0.481400 0.732500 +-0.369900 0.893000 -0.256300 +-0.369100 0.893400 0.256000 +-0.683500 0.683500 0.256100 +-0.683500 0.683500 0.256100 +-0.683400 0.683400 -0.256700 +-0.369900 0.893000 -0.256300 +-0.369100 0.893400 0.256000 +-0.035500 0.083900 0.995800 +-0.064900 0.064900 0.995800 +-0.064900 0.064900 0.995800 +-0.683500 0.683500 0.256100 +-0.369100 0.893400 0.256000 +-0.035500 0.083900 0.995800 +0.260400 -0.629700 0.731900 +0.481400 -0.481400 0.732500 +0.481400 -0.481400 0.732500 +-0.064900 0.064900 0.995800 +-0.035500 0.083900 0.995800 +0.260400 -0.629700 0.731900 +0.332600 -0.803700 0.493400 +0.614800 -0.614800 0.494000 +0.614800 -0.614800 0.494000 +0.481400 -0.481400 0.732500 +0.260400 -0.629700 0.731900 +-0.002800 0.966200 -0.257900 +-0.001900 0.967000 0.254700 +-0.369100 0.893400 0.256000 +-0.369100 0.893400 0.256000 +-0.369900 0.893000 -0.256300 +-0.002800 0.966200 -0.257900 +-0.001900 0.967000 0.254700 +-0.000300 0.092300 0.995700 +-0.035500 0.083900 0.995800 +-0.035500 0.083900 0.995800 +-0.369100 0.893400 0.256000 +-0.001900 0.967000 0.254700 +-0.000300 0.092300 0.995700 +0.000000 -0.682100 0.731300 +0.260400 -0.629700 0.731900 +0.260400 -0.629700 0.731900 +-0.035500 0.083900 0.995800 +-0.000300 0.092300 0.995700 +0.000000 -0.682100 0.731300 +0.000000 -0.870300 0.492500 +0.332600 -0.803700 0.493400 +0.332600 -0.803700 0.493400 +0.260400 -0.629700 0.731900 +0.000000 -0.682100 0.731300 +-0.002800 0.966200 -0.257900 +0.379100 0.852800 -0.359300 +0.377100 0.914100 0.149100 +0.377100 0.914100 0.149100 +-0.001900 0.967000 0.254700 +-0.002800 0.966200 -0.257900 +-0.001900 0.967000 0.254700 +0.377100 0.914100 0.149100 +0.027500 0.122600 0.992100 +0.027500 0.122600 0.992100 +-0.000300 0.092300 0.995700 +-0.001900 0.967000 0.254700 +-0.000300 0.092300 0.995700 +0.027500 0.122600 0.992100 +-0.261000 -0.635400 0.726800 +-0.261000 -0.635400 0.726800 +0.000000 -0.682100 0.731300 +-0.000300 0.092300 0.995700 +-0.261000 -0.635400 0.726800 +-0.332500 -0.804300 0.492500 +0.000000 -0.870300 0.492500 +0.000000 -0.870300 0.492500 +0.000000 -0.682100 0.731300 +-0.261000 -0.635400 0.726800 +0.379100 0.852800 -0.359300 +0.663500 0.625300 -0.410800 +0.712700 0.697600 0.073700 +0.712700 0.697600 0.073700 +0.377100 0.914100 0.149100 +0.379100 0.852800 -0.359300 +0.377100 0.914100 0.149100 +0.712700 0.697600 0.073700 +0.099700 0.122000 0.987500 +0.099700 0.122000 0.987500 +0.027500 0.122600 0.992100 +0.377100 0.914100 0.149100 +0.027500 0.122600 0.992100 +0.099700 0.122000 0.987500 +-0.487300 -0.488600 0.723800 +-0.487300 -0.488600 0.723800 +-0.261000 -0.635400 0.726800 +0.027500 0.122600 0.992100 +-0.487300 -0.488600 0.723800 +-0.615200 -0.615500 0.492600 +-0.332500 -0.804300 0.492500 +-0.332500 -0.804300 0.492500 +-0.261000 -0.635400 0.726800 +-0.487300 -0.488600 0.723800 +0.663500 0.625300 -0.410800 +0.880000 0.338700 -0.332900 +0.917300 0.361500 0.167100 +0.917300 0.361500 0.167100 +0.712700 0.697600 0.073700 +0.663500 0.625300 -0.410800 +0.712700 0.697600 0.073700 +0.917300 0.361500 0.167100 +0.113600 0.048100 0.992400 +0.113600 0.048100 0.992400 +0.099700 0.122000 0.987500 +0.712700 0.697600 0.073700 +0.099700 0.122000 0.987500 +0.113600 0.048100 0.992400 +-0.634100 -0.261900 0.727500 +-0.634100 -0.261900 0.727500 +-0.487300 -0.488600 0.723800 +0.099700 0.122000 0.987500 +-0.634100 -0.261900 0.727500 +-0.804100 -0.332700 0.492600 +-0.615200 -0.615500 0.492600 +-0.615200 -0.615500 0.492600 +-0.487300 -0.488600 0.723800 +-0.634100 -0.261900 0.727500 +0.966700 -0.010500 -0.255700 +0.967400 -0.008100 0.253000 +0.917300 0.361500 0.167100 +0.917300 0.361500 0.167100 +0.880000 0.338700 -0.332900 +0.966700 -0.010500 -0.255700 +0.967400 -0.008100 0.253000 +0.093400 -0.001300 0.995600 +0.113600 0.048100 0.992400 +0.113600 0.048100 0.992400 +0.917300 0.361500 0.167100 +0.967400 -0.008100 0.253000 +0.093400 -0.001300 0.995600 +-0.682200 0.000300 0.731200 +-0.634100 -0.261900 0.727500 +-0.634100 -0.261900 0.727500 +0.113600 0.048100 0.992400 +0.093400 -0.001300 0.995600 +-0.682200 0.000300 0.731200 +-0.870300 0.000100 0.492500 +-0.804100 -0.332700 0.492600 +-0.804100 -0.332700 0.492600 +-0.634100 -0.261900 0.727500 +-0.682200 0.000300 0.731200 +0.893000 -0.369900 -0.256300 +0.893400 -0.369100 0.256000 +0.967400 -0.008100 0.253000 +0.967400 -0.008100 0.253000 +0.966700 -0.010500 -0.255700 +0.893000 -0.369900 -0.256300 +0.893400 -0.369100 0.256000 +0.083900 -0.035500 0.995800 +0.093400 -0.001300 0.995600 +0.093400 -0.001300 0.995600 +0.967400 -0.008100 0.253000 +0.893400 -0.369100 0.256000 +0.083900 -0.035500 0.995800 +-0.629700 0.260400 0.731900 +-0.682200 0.000300 0.731200 +-0.682200 0.000300 0.731200 +0.093400 -0.001300 0.995600 +0.083900 -0.035500 0.995800 +-0.629700 0.260400 0.731900 +-0.803700 0.332600 0.493400 +-0.870300 0.000100 0.492500 +-0.870300 0.000100 0.492500 +-0.682200 0.000300 0.731200 +-0.629700 0.260400 0.731900 +0.683400 -0.683400 -0.256700 +0.683500 -0.683500 0.256100 +0.893400 -0.369100 0.256000 +0.893400 -0.369100 0.256000 +0.893000 -0.369900 -0.256300 +0.683400 -0.683400 -0.256700 +0.683500 -0.683500 0.256100 +0.064900 -0.064900 0.995800 +0.083900 -0.035500 0.995800 +0.083900 -0.035500 0.995800 +0.893400 -0.369100 0.256000 +0.683500 -0.683500 0.256100 +0.064900 -0.064900 0.995800 +-0.481400 0.481400 0.732500 +-0.629700 0.260400 0.731900 +-0.629700 0.260400 0.731900 +0.083900 -0.035500 0.995800 +0.064900 -0.064900 0.995800 +-0.481400 0.481400 0.732500 +-0.614800 0.614800 0.494000 +-0.803700 0.332600 0.493400 +-0.803700 0.332600 0.493400 +-0.629700 0.260400 0.731900 +-0.481400 0.481400 0.732500 +0.369900 -0.893000 -0.256300 +0.369100 -0.893400 0.256000 +0.683500 -0.683500 0.256100 +0.683500 -0.683500 0.256100 +0.683400 -0.683400 -0.256700 +0.369900 -0.893000 -0.256300 +0.369100 -0.893400 0.256000 +0.035500 -0.083900 0.995800 +0.064900 -0.064900 0.995800 +0.064900 -0.064900 0.995800 +0.683500 -0.683500 0.256100 +0.369100 -0.893400 0.256000 +0.035500 -0.083900 0.995800 +-0.260400 0.629700 0.731900 +-0.481400 0.481400 0.732500 +-0.481400 0.481400 0.732500 +0.064900 -0.064900 0.995800 +0.035500 -0.083900 0.995800 +-0.260400 0.629700 0.731900 +-0.332600 0.803700 0.493400 +-0.614800 0.614800 0.494000 +-0.614800 0.614800 0.494000 +-0.481400 0.481400 0.732500 +-0.260400 0.629700 0.731900 +0.000000 -0.966700 -0.255800 +0.000000 -0.966800 0.255400 +0.369100 -0.893400 0.256000 +0.369100 -0.893400 0.256000 +0.369900 -0.893000 -0.256300 +0.000000 -0.966700 -0.255800 +0.000000 -0.966800 0.255400 +0.000000 -0.092100 0.995800 +0.035500 -0.083900 0.995800 +0.035500 -0.083900 0.995800 +0.369100 -0.893400 0.256000 +0.000000 -0.966800 0.255400 +0.000000 -0.092100 0.995800 +0.000000 0.682000 0.731300 +-0.260400 0.629700 0.731900 +-0.260400 0.629700 0.731900 +0.035500 -0.083900 0.995800 +0.000000 -0.092100 0.995800 +0.000000 0.682000 0.731300 +0.000000 0.870300 0.492500 +-0.332600 0.803700 0.493400 +-0.332600 0.803700 0.493400 +-0.260400 0.629700 0.731900 +0.000000 0.682000 0.731300 +-0.369900 -0.893000 -0.256300 +-0.369100 -0.893400 0.256000 +0.000000 -0.966800 0.255400 +0.000000 -0.966800 0.255400 +0.000000 -0.966700 -0.255800 +-0.369900 -0.893000 -0.256300 +-0.369100 -0.893400 0.256000 +-0.035500 -0.083900 0.995800 +0.000000 -0.092100 0.995800 +0.000000 -0.092100 0.995800 +0.000000 -0.966800 0.255400 +-0.369100 -0.893400 0.256000 +-0.035500 -0.083900 0.995800 +0.260400 0.629700 0.731900 +0.000000 0.682000 0.731300 +0.000000 0.682000 0.731300 +0.000000 -0.092100 0.995800 +-0.035500 -0.083900 0.995800 +0.260400 0.629700 0.731900 +0.332600 0.803700 0.493400 +0.000000 0.870300 0.492500 +0.000000 0.870300 0.492500 +0.000000 0.682000 0.731300 +0.260400 0.629700 0.731900 +-0.683400 -0.683400 -0.256700 +-0.683500 -0.683500 0.256100 +-0.369100 -0.893400 0.256000 +-0.369100 -0.893400 0.256000 +-0.369900 -0.893000 -0.256300 +-0.683400 -0.683400 -0.256700 +-0.683500 -0.683500 0.256100 +-0.064900 -0.064900 0.995800 +-0.035500 -0.083900 0.995800 +-0.035500 -0.083900 0.995800 +-0.369100 -0.893400 0.256000 +-0.683500 -0.683500 0.256100 +-0.064900 -0.064900 0.995800 +0.481400 0.481400 0.732500 +0.260400 0.629700 0.731900 +0.260400 0.629700 0.731900 +-0.035500 -0.083900 0.995800 +-0.064900 -0.064900 0.995800 +0.481400 0.481400 0.732500 +0.614800 0.614800 0.494000 +0.332600 0.803700 0.493400 +0.332600 0.803700 0.493400 +0.260400 0.629700 0.731900 +0.481400 0.481400 0.732500 +-0.893000 -0.369900 -0.256300 +-0.893400 -0.369100 0.256000 +-0.683500 -0.683500 0.256100 +-0.683500 -0.683500 0.256100 +-0.683400 -0.683400 -0.256700 +-0.893000 -0.369900 -0.256300 +-0.893400 -0.369100 0.256000 +-0.083900 -0.035500 0.995800 +-0.064900 -0.064900 0.995800 +-0.064900 -0.064900 0.995800 +-0.683500 -0.683500 0.256100 +-0.893400 -0.369100 0.256000 +-0.083900 -0.035500 0.995800 +0.629700 0.260400 0.731900 +0.481400 0.481400 0.732500 +0.481400 0.481400 0.732500 +-0.064900 -0.064900 0.995800 +-0.083900 -0.035500 0.995800 +0.629700 0.260400 0.731900 +0.803700 0.332600 0.493400 +0.614800 0.614800 0.494000 +0.614800 0.614800 0.494000 +0.481400 0.481400 0.732500 +0.629700 0.260400 0.731900 +-0.966700 0.000000 -0.255800 +-0.966800 0.000000 0.255400 +-0.893400 -0.369100 0.256000 +-0.893400 -0.369100 0.256000 +-0.893000 -0.369900 -0.256300 +-0.966700 0.000000 -0.255800 +-0.966800 0.000000 0.255400 +-0.092100 0.000000 0.995800 +-0.083900 -0.035500 0.995800 +-0.083900 -0.035500 0.995800 +-0.893400 -0.369100 0.256000 +-0.966800 0.000000 0.255400 +-0.092100 0.000000 0.995800 +0.682000 0.000000 0.731300 +0.629700 0.260400 0.731900 +0.629700 0.260400 0.731900 +-0.083900 -0.035500 0.995800 +-0.092100 0.000000 0.995800 +0.682000 0.000000 0.731300 +0.870300 0.000000 0.492500 +0.803700 0.332600 0.493400 +0.803700 0.332600 0.493400 +0.629700 0.260400 0.731900 +0.682000 0.000000 0.731300 +0.803700 -0.332600 0.493400 +0.845400 -0.349800 0.403500 +0.915300 0.000000 0.402700 +0.915300 0.000000 0.402700 +0.870300 0.000000 0.492500 +0.803700 -0.332600 0.493400 +0.845400 -0.349800 0.403500 +0.870000 -0.360000 0.336900 +0.941800 0.000000 0.336200 +0.941800 0.000000 0.336200 +0.915300 0.000000 0.402700 +0.845400 -0.349800 0.403500 +0.870000 -0.360000 0.336900 +0.904200 -0.374300 0.205800 +0.978700 0.000000 0.205300 +0.978700 0.000000 0.205300 +0.941800 0.000000 0.336200 +0.870000 -0.360000 0.336900 +0.904200 -0.374300 0.205800 +0.921900 -0.381800 -0.066400 +0.997800 0.000000 -0.066200 +0.997800 0.000000 -0.066200 +0.978700 0.000000 0.205300 +0.904200 -0.374300 0.205800 +0.614800 -0.614800 0.494000 +0.646800 -0.646800 0.404100 +0.845400 -0.349800 0.403500 +0.845400 -0.349800 0.403500 +0.803700 -0.332600 0.493400 +0.614800 -0.614800 0.494000 +0.646800 -0.646800 0.404100 +0.665700 -0.665700 0.337400 +0.870000 -0.360000 0.336900 +0.870000 -0.360000 0.336900 +0.845400 -0.349800 0.403500 +0.646800 -0.646800 0.404100 +0.665700 -0.665700 0.337400 +0.691900 -0.691900 0.206100 +0.904200 -0.374300 0.205800 +0.904200 -0.374300 0.205800 +0.870000 -0.360000 0.336900 +0.665700 -0.665700 0.337400 +0.691900 -0.691900 0.206100 +0.705500 -0.705500 -0.066500 +0.921900 -0.381800 -0.066400 +0.921900 -0.381800 -0.066400 +0.904200 -0.374300 0.205800 +0.691900 -0.691900 0.206100 +0.332600 -0.803700 0.493400 +0.349800 -0.845400 0.403500 +0.646800 -0.646800 0.404100 +0.646800 -0.646800 0.404100 +0.614800 -0.614800 0.494000 +0.332600 -0.803700 0.493400 +0.349800 -0.845400 0.403500 +0.360000 -0.870000 0.336900 +0.665700 -0.665700 0.337400 +0.665700 -0.665700 0.337400 +0.646800 -0.646800 0.404100 +0.349800 -0.845400 0.403500 +0.360000 -0.870000 0.336900 +0.374300 -0.904200 0.205800 +0.691900 -0.691900 0.206100 +0.691900 -0.691900 0.206100 +0.665700 -0.665700 0.337400 +0.360000 -0.870000 0.336900 +0.374300 -0.904200 0.205800 +0.381800 -0.921900 -0.066400 +0.705500 -0.705500 -0.066500 +0.705500 -0.705500 -0.066500 +0.691900 -0.691900 0.206100 +0.374300 -0.904200 0.205800 +0.000000 -0.870300 0.492500 +0.000000 -0.915300 0.402700 +0.349800 -0.845400 0.403500 +0.349800 -0.845400 0.403500 +0.332600 -0.803700 0.493400 +0.000000 -0.870300 0.492500 +0.000000 -0.915300 0.402700 +0.000000 -0.941800 0.336200 +0.360000 -0.870000 0.336900 +0.360000 -0.870000 0.336900 +0.349800 -0.845400 0.403500 +0.000000 -0.915300 0.402700 +0.000000 -0.941800 0.336200 +0.000000 -0.978700 0.205300 +0.374300 -0.904200 0.205800 +0.374300 -0.904200 0.205800 +0.360000 -0.870000 0.336900 +0.000000 -0.941800 0.336200 +0.000000 -0.978700 0.205300 +0.000000 -0.997800 -0.066200 +0.381800 -0.921900 -0.066400 +0.381800 -0.921900 -0.066400 +0.374300 -0.904200 0.205800 +0.000000 -0.978700 0.205300 +-0.332500 -0.804300 0.492500 +-0.349800 -0.845400 0.403500 +0.000000 -0.915300 0.402700 +0.000000 -0.915300 0.402700 +0.000000 -0.870300 0.492500 +-0.332500 -0.804300 0.492500 +-0.349800 -0.845400 0.403500 +-0.360000 -0.870000 0.336900 +0.000000 -0.941800 0.336200 +0.000000 -0.941800 0.336200 +0.000000 -0.915300 0.402700 +-0.349800 -0.845400 0.403500 +-0.360000 -0.870000 0.336900 +-0.374300 -0.904200 0.205800 +0.000000 -0.978700 0.205300 +0.000000 -0.978700 0.205300 +0.000000 -0.941800 0.336200 +-0.360000 -0.870000 0.336900 +-0.374300 -0.904200 0.205800 +-0.381800 -0.921900 -0.066400 +0.000000 -0.997800 -0.066200 +0.000000 -0.997800 -0.066200 +0.000000 -0.978700 0.205300 +-0.374300 -0.904200 0.205800 +-0.615200 -0.615500 0.492600 +-0.646800 -0.646800 0.404100 +-0.349800 -0.845400 0.403500 +-0.349800 -0.845400 0.403500 +-0.332500 -0.804300 0.492500 +-0.615200 -0.615500 0.492600 +-0.646800 -0.646800 0.404100 +-0.665700 -0.665700 0.337400 +-0.360000 -0.870000 0.336900 +-0.360000 -0.870000 0.336900 +-0.349800 -0.845400 0.403500 +-0.646800 -0.646800 0.404100 +-0.665700 -0.665700 0.337400 +-0.691900 -0.691900 0.206100 +-0.374300 -0.904200 0.205800 +-0.374300 -0.904200 0.205800 +-0.360000 -0.870000 0.336900 +-0.665700 -0.665700 0.337400 +-0.691900 -0.691900 0.206100 +-0.705500 -0.705500 -0.066500 +-0.381800 -0.921900 -0.066400 +-0.381800 -0.921900 -0.066400 +-0.374300 -0.904200 0.205800 +-0.691900 -0.691900 0.206100 +-0.804100 -0.332700 0.492600 +-0.845400 -0.349800 0.403500 +-0.646800 -0.646800 0.404100 +-0.646800 -0.646800 0.404100 +-0.615200 -0.615500 0.492600 +-0.804100 -0.332700 0.492600 +-0.845400 -0.349800 0.403500 +-0.870000 -0.360000 0.336900 +-0.665700 -0.665700 0.337400 +-0.665700 -0.665700 0.337400 +-0.646800 -0.646800 0.404100 +-0.845400 -0.349800 0.403500 +-0.870000 -0.360000 0.336900 +-0.904200 -0.374300 0.205800 +-0.691900 -0.691900 0.206100 +-0.691900 -0.691900 0.206100 +-0.665700 -0.665700 0.337400 +-0.870000 -0.360000 0.336900 +-0.904200 -0.374300 0.205800 +-0.921900 -0.381800 -0.066400 +-0.705500 -0.705500 -0.066500 +-0.705500 -0.705500 -0.066500 +-0.691900 -0.691900 0.206100 +-0.904200 -0.374300 0.205800 +-0.870300 0.000100 0.492500 +-0.915300 0.000000 0.402700 +-0.845400 -0.349800 0.403500 +-0.845400 -0.349800 0.403500 +-0.804100 -0.332700 0.492600 +-0.870300 0.000100 0.492500 +-0.915300 0.000000 0.402700 +-0.941800 0.000000 0.336200 +-0.870000 -0.360000 0.336900 +-0.870000 -0.360000 0.336900 +-0.845400 -0.349800 0.403500 +-0.915300 0.000000 0.402700 +-0.941800 0.000000 0.336200 +-0.978700 0.000000 0.205300 +-0.904200 -0.374300 0.205800 +-0.904200 -0.374300 0.205800 +-0.870000 -0.360000 0.336900 +-0.941800 0.000000 0.336200 +-0.978700 0.000000 0.205300 +-0.997800 0.000000 -0.066200 +-0.921900 -0.381800 -0.066400 +-0.921900 -0.381800 -0.066400 +-0.904200 -0.374300 0.205800 +-0.978700 0.000000 0.205300 +-0.803700 0.332600 0.493400 +-0.845400 0.349800 0.403500 +-0.915300 0.000000 0.402700 +-0.915300 0.000000 0.402700 +-0.870300 0.000100 0.492500 +-0.803700 0.332600 0.493400 +-0.845400 0.349800 0.403500 +-0.870000 0.360000 0.336900 +-0.941800 0.000000 0.336200 +-0.941800 0.000000 0.336200 +-0.915300 0.000000 0.402700 +-0.845400 0.349800 0.403500 +-0.870000 0.360000 0.336900 +-0.904200 0.374300 0.205800 +-0.978700 0.000000 0.205300 +-0.978700 0.000000 0.205300 +-0.941800 0.000000 0.336200 +-0.870000 0.360000 0.336900 +-0.904200 0.374300 0.205800 +-0.921900 0.381800 -0.066400 +-0.997800 0.000000 -0.066200 +-0.997800 0.000000 -0.066200 +-0.978700 0.000000 0.205300 +-0.904200 0.374300 0.205800 +-0.614800 0.614800 0.494000 +-0.646800 0.646800 0.404100 +-0.845400 0.349800 0.403500 +-0.845400 0.349800 0.403500 +-0.803700 0.332600 0.493400 +-0.614800 0.614800 0.494000 +-0.646800 0.646800 0.404100 +-0.665700 0.665700 0.337400 +-0.870000 0.360000 0.336900 +-0.870000 0.360000 0.336900 +-0.845400 0.349800 0.403500 +-0.646800 0.646800 0.404100 +-0.665700 0.665700 0.337400 +-0.691900 0.691900 0.206100 +-0.904200 0.374300 0.205800 +-0.904200 0.374300 0.205800 +-0.870000 0.360000 0.336900 +-0.665700 0.665700 0.337400 +-0.691900 0.691900 0.206100 +-0.705500 0.705500 -0.066500 +-0.921900 0.381800 -0.066400 +-0.921900 0.381800 -0.066400 +-0.904200 0.374300 0.205800 +-0.691900 0.691900 0.206100 +-0.332600 0.803700 0.493400 +-0.349800 0.845400 0.403500 +-0.646800 0.646800 0.404100 +-0.646800 0.646800 0.404100 +-0.614800 0.614800 0.494000 +-0.332600 0.803700 0.493400 +-0.349800 0.845400 0.403500 +-0.360000 0.870000 0.336900 +-0.665700 0.665700 0.337400 +-0.665700 0.665700 0.337400 +-0.646800 0.646800 0.404100 +-0.349800 0.845400 0.403500 +-0.360000 0.870000 0.336900 +-0.374300 0.904200 0.205800 +-0.691900 0.691900 0.206100 +-0.691900 0.691900 0.206100 +-0.665700 0.665700 0.337400 +-0.360000 0.870000 0.336900 +-0.374300 0.904200 0.205800 +-0.381800 0.921900 -0.066400 +-0.705500 0.705500 -0.066500 +-0.705500 0.705500 -0.066500 +-0.691900 0.691900 0.206100 +-0.374300 0.904200 0.205800 +0.000000 0.870300 0.492500 +0.000000 0.915300 0.402700 +-0.349800 0.845400 0.403500 +-0.349800 0.845400 0.403500 +-0.332600 0.803700 0.493400 +0.000000 0.870300 0.492500 +0.000000 0.915300 0.402700 +0.000000 0.941800 0.336200 +-0.360000 0.870000 0.336900 +-0.360000 0.870000 0.336900 +-0.349800 0.845400 0.403500 +0.000000 0.915300 0.402700 +0.000000 0.941800 0.336200 +0.000000 0.978700 0.205300 +-0.374300 0.904200 0.205800 +-0.374300 0.904200 0.205800 +-0.360000 0.870000 0.336900 +0.000000 0.941800 0.336200 +0.000000 0.978700 0.205300 +0.000000 0.997800 -0.066200 +-0.381800 0.921900 -0.066400 +-0.381800 0.921900 -0.066400 +-0.374300 0.904200 0.205800 +0.000000 0.978700 0.205300 +0.332600 0.803700 0.493400 +0.349800 0.845400 0.403500 +0.000000 0.915300 0.402700 +0.000000 0.915300 0.402700 +0.000000 0.870300 0.492500 +0.332600 0.803700 0.493400 +0.349800 0.845400 0.403500 +0.360000 0.870000 0.336900 +0.000000 0.941800 0.336200 +0.000000 0.941800 0.336200 +0.000000 0.915300 0.402700 +0.349800 0.845400 0.403500 +0.360000 0.870000 0.336900 +0.374300 0.904200 0.205800 +0.000000 0.978700 0.205300 +0.000000 0.978700 0.205300 +0.000000 0.941800 0.336200 +0.360000 0.870000 0.336900 +0.374300 0.904200 0.205800 +0.381800 0.921900 -0.066400 +0.000000 0.997800 -0.066200 +0.000000 0.997800 -0.066200 +0.000000 0.978700 0.205300 +0.374300 0.904200 0.205800 +0.614800 0.614800 0.494000 +0.646800 0.646800 0.404100 +0.349800 0.845400 0.403500 +0.349800 0.845400 0.403500 +0.332600 0.803700 0.493400 +0.614800 0.614800 0.494000 +0.646800 0.646800 0.404100 +0.665700 0.665700 0.337400 +0.360000 0.870000 0.336900 +0.360000 0.870000 0.336900 +0.349800 0.845400 0.403500 +0.646800 0.646800 0.404100 +0.665700 0.665700 0.337400 +0.691900 0.691900 0.206100 +0.374300 0.904200 0.205800 +0.374300 0.904200 0.205800 +0.360000 0.870000 0.336900 +0.665700 0.665700 0.337400 +0.691900 0.691900 0.206100 +0.705500 0.705500 -0.066500 +0.381800 0.921900 -0.066400 +0.381800 0.921900 -0.066400 +0.374300 0.904200 0.205800 +0.691900 0.691900 0.206100 +0.803700 0.332600 0.493400 +0.845400 0.349800 0.403500 +0.646800 0.646800 0.404100 +0.646800 0.646800 0.404100 +0.614800 0.614800 0.494000 +0.803700 0.332600 0.493400 +0.845400 0.349800 0.403500 +0.870000 0.360000 0.336900 +0.665700 0.665700 0.337400 +0.665700 0.665700 0.337400 +0.646800 0.646800 0.404100 +0.845400 0.349800 0.403500 +0.870000 0.360000 0.336900 +0.904200 0.374300 0.205800 +0.691900 0.691900 0.206100 +0.691900 0.691900 0.206100 +0.665700 0.665700 0.337400 +0.870000 0.360000 0.336900 +0.904200 0.374300 0.205800 +0.921900 0.381800 -0.066400 +0.705500 0.705500 -0.066500 +0.705500 0.705500 -0.066500 +0.691900 0.691900 0.206100 +0.904200 0.374300 0.205800 +0.870300 0.000000 0.492500 +0.915300 0.000000 0.402700 +0.845400 0.349800 0.403500 +0.845400 0.349800 0.403500 +0.803700 0.332600 0.493400 +0.870300 0.000000 0.492500 +0.915300 0.000000 0.402700 +0.941800 0.000000 0.336200 +0.870000 0.360000 0.336900 +0.870000 0.360000 0.336900 +0.845400 0.349800 0.403500 +0.915300 0.000000 0.402700 +0.941800 0.000000 0.336200 +0.978700 0.000000 0.205300 +0.904200 0.374300 0.205800 +0.904200 0.374300 0.205800 +0.870000 0.360000 0.336900 +0.941800 0.000000 0.336200 +0.978700 0.000000 0.205300 +0.997800 0.000000 -0.066200 +0.921900 0.381800 -0.066400 +0.921900 0.381800 -0.066400 +0.904200 0.374300 0.205800 +0.978700 0.000000 0.205300 +0.921900 -0.381800 -0.066400 +0.831400 -0.344200 -0.436200 +0.900200 0.000000 -0.435500 +0.900200 0.000000 -0.435500 +0.997800 0.000000 -0.066200 +0.921900 -0.381800 -0.066400 +0.831400 -0.344200 -0.436200 +0.673500 -0.278600 -0.684700 +0.729600 0.000000 -0.683900 +0.729600 0.000000 -0.683900 +0.900200 0.000000 -0.435500 +0.831400 -0.344200 -0.436200 +0.673500 -0.278600 -0.684700 +0.640400 -0.264900 -0.720900 +0.694000 0.000000 -0.720000 +0.694000 0.000000 -0.720000 +0.729600 0.000000 -0.683900 +0.673500 -0.278600 -0.684700 +0.640400 -0.264900 -0.720900 +0.732900 -0.303200 -0.609000 +0.793900 0.000000 -0.608000 +0.793900 0.000000 -0.608000 +0.694000 0.000000 -0.720000 +0.640400 -0.264900 -0.720900 +0.705500 -0.705500 -0.066500 +0.636100 -0.636100 -0.436800 +0.831400 -0.344200 -0.436200 +0.831400 -0.344200 -0.436200 +0.921900 -0.381800 -0.066400 +0.705500 -0.705500 -0.066500 +0.636100 -0.636100 -0.436800 +0.515000 -0.515000 -0.685300 +0.673500 -0.278600 -0.684700 +0.673500 -0.278600 -0.684700 +0.831400 -0.344200 -0.436200 +0.636100 -0.636100 -0.436800 +0.515000 -0.515000 -0.685300 +0.489700 -0.489700 -0.721400 +0.640400 -0.264900 -0.720900 +0.640400 -0.264900 -0.720900 +0.673500 -0.278600 -0.684700 +0.515000 -0.515000 -0.685300 +0.489700 -0.489700 -0.721400 +0.560600 -0.560600 -0.609600 +0.732900 -0.303200 -0.609000 +0.732900 -0.303200 -0.609000 +0.640400 -0.264900 -0.720900 +0.489700 -0.489700 -0.721400 +0.381800 -0.921900 -0.066400 +0.344200 -0.831400 -0.436200 +0.636100 -0.636100 -0.436800 +0.636100 -0.636100 -0.436800 +0.705500 -0.705500 -0.066500 +0.381800 -0.921900 -0.066400 +0.344200 -0.831400 -0.436200 +0.278600 -0.673500 -0.684700 +0.515000 -0.515000 -0.685300 +0.515000 -0.515000 -0.685300 +0.636100 -0.636100 -0.436800 +0.344200 -0.831400 -0.436200 +0.278600 -0.673500 -0.684700 +0.264900 -0.640400 -0.720900 +0.489700 -0.489700 -0.721400 +0.489700 -0.489700 -0.721400 +0.515000 -0.515000 -0.685300 +0.278600 -0.673500 -0.684700 +0.264900 -0.640400 -0.720900 +0.303200 -0.732900 -0.609000 +0.560600 -0.560600 -0.609600 +0.560600 -0.560600 -0.609600 +0.489700 -0.489700 -0.721400 +0.264900 -0.640400 -0.720900 +0.000000 -0.997800 -0.066200 +0.000000 -0.900200 -0.435500 +0.344200 -0.831400 -0.436200 +0.344200 -0.831400 -0.436200 +0.381800 -0.921900 -0.066400 +0.000000 -0.997800 -0.066200 +0.000000 -0.900200 -0.435500 +0.000000 -0.729600 -0.683900 +0.278600 -0.673500 -0.684700 +0.278600 -0.673500 -0.684700 +0.344200 -0.831400 -0.436200 +0.000000 -0.900200 -0.435500 +0.000000 -0.729600 -0.683900 +0.000000 -0.694000 -0.720000 +0.264900 -0.640400 -0.720900 +0.264900 -0.640400 -0.720900 +0.278600 -0.673500 -0.684700 +0.000000 -0.729600 -0.683900 +0.000000 -0.694000 -0.720000 +0.000000 -0.793900 -0.608000 +0.303200 -0.732900 -0.609000 +0.303200 -0.732900 -0.609000 +0.264900 -0.640400 -0.720900 +0.000000 -0.694000 -0.720000 +-0.381800 -0.921900 -0.066400 +-0.344200 -0.831400 -0.436200 +0.000000 -0.900200 -0.435500 +0.000000 -0.900200 -0.435500 +0.000000 -0.997800 -0.066200 +-0.381800 -0.921900 -0.066400 +-0.344200 -0.831400 -0.436200 +-0.278600 -0.673500 -0.684700 +0.000000 -0.729600 -0.683900 +0.000000 -0.729600 -0.683900 +0.000000 -0.900200 -0.435500 +-0.344200 -0.831400 -0.436200 +-0.278600 -0.673500 -0.684700 +-0.264900 -0.640400 -0.720900 +0.000000 -0.694000 -0.720000 +0.000000 -0.694000 -0.720000 +0.000000 -0.729600 -0.683900 +-0.278600 -0.673500 -0.684700 +-0.264900 -0.640400 -0.720900 +-0.303200 -0.732900 -0.609000 +0.000000 -0.793900 -0.608000 +0.000000 -0.793900 -0.608000 +0.000000 -0.694000 -0.720000 +-0.264900 -0.640400 -0.720900 +-0.705500 -0.705500 -0.066500 +-0.636100 -0.636100 -0.436800 +-0.344200 -0.831400 -0.436200 +-0.344200 -0.831400 -0.436200 +-0.381800 -0.921900 -0.066400 +-0.705500 -0.705500 -0.066500 +-0.636100 -0.636100 -0.436800 +-0.515000 -0.515000 -0.685300 +-0.278600 -0.673500 -0.684700 +-0.278600 -0.673500 -0.684700 +-0.344200 -0.831400 -0.436200 +-0.636100 -0.636100 -0.436800 +-0.515000 -0.515000 -0.685300 +-0.489700 -0.489700 -0.721400 +-0.264900 -0.640400 -0.720900 +-0.264900 -0.640400 -0.720900 +-0.278600 -0.673500 -0.684700 +-0.515000 -0.515000 -0.685300 +-0.489700 -0.489700 -0.721400 +-0.560600 -0.560600 -0.609600 +-0.303200 -0.732900 -0.609000 +-0.303200 -0.732900 -0.609000 +-0.264900 -0.640400 -0.720900 +-0.489700 -0.489700 -0.721400 +-0.921900 -0.381800 -0.066400 +-0.831400 -0.344200 -0.436200 +-0.636100 -0.636100 -0.436800 +-0.636100 -0.636100 -0.436800 +-0.705500 -0.705500 -0.066500 +-0.921900 -0.381800 -0.066400 +-0.831400 -0.344200 -0.436200 +-0.673500 -0.278600 -0.684700 +-0.515000 -0.515000 -0.685300 +-0.515000 -0.515000 -0.685300 +-0.636100 -0.636100 -0.436800 +-0.831400 -0.344200 -0.436200 +-0.673500 -0.278600 -0.684700 +-0.640400 -0.264900 -0.720900 +-0.489700 -0.489700 -0.721400 +-0.489700 -0.489700 -0.721400 +-0.515000 -0.515000 -0.685300 +-0.673500 -0.278600 -0.684700 +-0.640400 -0.264900 -0.720900 +-0.732900 -0.303200 -0.609000 +-0.560600 -0.560600 -0.609600 +-0.560600 -0.560600 -0.609600 +-0.489700 -0.489700 -0.721400 +-0.640400 -0.264900 -0.720900 +-0.997800 0.000000 -0.066200 +-0.900200 0.000000 -0.435500 +-0.831400 -0.344200 -0.436200 +-0.831400 -0.344200 -0.436200 +-0.921900 -0.381800 -0.066400 +-0.997800 0.000000 -0.066200 +-0.900200 0.000000 -0.435500 +-0.729600 0.000000 -0.683900 +-0.673500 -0.278600 -0.684700 +-0.673500 -0.278600 -0.684700 +-0.831400 -0.344200 -0.436200 +-0.900200 0.000000 -0.435500 +-0.729600 0.000000 -0.683900 +-0.694000 0.000000 -0.720000 +-0.640400 -0.264900 -0.720900 +-0.640400 -0.264900 -0.720900 +-0.673500 -0.278600 -0.684700 +-0.729600 0.000000 -0.683900 +-0.694000 0.000000 -0.720000 +-0.793900 0.000000 -0.608000 +-0.732900 -0.303200 -0.609000 +-0.732900 -0.303200 -0.609000 +-0.640400 -0.264900 -0.720900 +-0.694000 0.000000 -0.720000 +-0.921900 0.381800 -0.066400 +-0.831400 0.344200 -0.436200 +-0.900200 0.000000 -0.435500 +-0.900200 0.000000 -0.435500 +-0.997800 0.000000 -0.066200 +-0.921900 0.381800 -0.066400 +-0.831400 0.344200 -0.436200 +-0.673500 0.278600 -0.684700 +-0.729600 0.000000 -0.683900 +-0.729600 0.000000 -0.683900 +-0.900200 0.000000 -0.435500 +-0.831400 0.344200 -0.436200 +-0.673500 0.278600 -0.684700 +-0.640400 0.264900 -0.720900 +-0.694000 0.000000 -0.720000 +-0.694000 0.000000 -0.720000 +-0.729600 0.000000 -0.683900 +-0.673500 0.278600 -0.684700 +-0.640400 0.264900 -0.720900 +-0.732900 0.303200 -0.609000 +-0.793900 0.000000 -0.608000 +-0.793900 0.000000 -0.608000 +-0.694000 0.000000 -0.720000 +-0.640400 0.264900 -0.720900 +-0.705500 0.705500 -0.066500 +-0.636100 0.636100 -0.436800 +-0.831400 0.344200 -0.436200 +-0.831400 0.344200 -0.436200 +-0.921900 0.381800 -0.066400 +-0.705500 0.705500 -0.066500 +-0.636100 0.636100 -0.436800 +-0.515000 0.515000 -0.685300 +-0.673500 0.278600 -0.684700 +-0.673500 0.278600 -0.684700 +-0.831400 0.344200 -0.436200 +-0.636100 0.636100 -0.436800 +-0.515000 0.515000 -0.685300 +-0.489700 0.489700 -0.721400 +-0.640400 0.264900 -0.720900 +-0.640400 0.264900 -0.720900 +-0.673500 0.278600 -0.684700 +-0.515000 0.515000 -0.685300 +-0.489700 0.489700 -0.721400 +-0.560600 0.560600 -0.609600 +-0.732900 0.303200 -0.609000 +-0.732900 0.303200 -0.609000 +-0.640400 0.264900 -0.720900 +-0.489700 0.489700 -0.721400 +-0.381800 0.921900 -0.066400 +-0.344200 0.831400 -0.436200 +-0.636100 0.636100 -0.436800 +-0.636100 0.636100 -0.436800 +-0.705500 0.705500 -0.066500 +-0.381800 0.921900 -0.066400 +-0.344200 0.831400 -0.436200 +-0.278600 0.673500 -0.684700 +-0.515000 0.515000 -0.685300 +-0.515000 0.515000 -0.685300 +-0.636100 0.636100 -0.436800 +-0.344200 0.831400 -0.436200 +-0.278600 0.673500 -0.684700 +-0.264900 0.640400 -0.720900 +-0.489700 0.489700 -0.721400 +-0.489700 0.489700 -0.721400 +-0.515000 0.515000 -0.685300 +-0.278600 0.673500 -0.684700 +-0.264900 0.640400 -0.720900 +-0.303200 0.732900 -0.609000 +-0.560600 0.560600 -0.609600 +-0.560600 0.560600 -0.609600 +-0.489700 0.489700 -0.721400 +-0.264900 0.640400 -0.720900 +0.000000 0.997800 -0.066200 +0.000000 0.900200 -0.435500 +-0.344200 0.831400 -0.436200 +-0.344200 0.831400 -0.436200 +-0.381800 0.921900 -0.066400 +0.000000 0.997800 -0.066200 +0.000000 0.900200 -0.435500 +0.000000 0.729600 -0.683900 +-0.278600 0.673500 -0.684700 +-0.278600 0.673500 -0.684700 +-0.344200 0.831400 -0.436200 +0.000000 0.900200 -0.435500 +0.000000 0.729600 -0.683900 +0.000000 0.694000 -0.720000 +-0.264900 0.640400 -0.720900 +-0.264900 0.640400 -0.720900 +-0.278600 0.673500 -0.684700 +0.000000 0.729600 -0.683900 +0.000000 0.694000 -0.720000 +0.000000 0.793900 -0.608000 +-0.303200 0.732900 -0.609000 +-0.303200 0.732900 -0.609000 +-0.264900 0.640400 -0.720900 +0.000000 0.694000 -0.720000 +0.381800 0.921900 -0.066400 +0.344200 0.831400 -0.436200 +0.000000 0.900200 -0.435500 +0.000000 0.900200 -0.435500 +0.000000 0.997800 -0.066200 +0.381800 0.921900 -0.066400 +0.344200 0.831400 -0.436200 +0.278600 0.673500 -0.684700 +0.000000 0.729600 -0.683900 +0.000000 0.729600 -0.683900 +0.000000 0.900200 -0.435500 +0.344200 0.831400 -0.436200 +0.278600 0.673500 -0.684700 +0.264900 0.640400 -0.720900 +0.000000 0.694000 -0.720000 +0.000000 0.694000 -0.720000 +0.000000 0.729600 -0.683900 +0.278600 0.673500 -0.684700 +0.264900 0.640400 -0.720900 +0.303200 0.732900 -0.609000 +0.000000 0.793900 -0.608000 +0.000000 0.793900 -0.608000 +0.000000 0.694000 -0.720000 +0.264900 0.640400 -0.720900 +0.705500 0.705500 -0.066500 +0.636100 0.636100 -0.436800 +0.344200 0.831400 -0.436200 +0.344200 0.831400 -0.436200 +0.381800 0.921900 -0.066400 +0.705500 0.705500 -0.066500 +0.636100 0.636100 -0.436800 +0.515000 0.515000 -0.685300 +0.278600 0.673500 -0.684700 +0.278600 0.673500 -0.684700 +0.344200 0.831400 -0.436200 +0.636100 0.636100 -0.436800 +0.515000 0.515000 -0.685300 +0.489700 0.489700 -0.721400 +0.264900 0.640400 -0.720900 +0.264900 0.640400 -0.720900 +0.278600 0.673500 -0.684700 +0.515000 0.515000 -0.685300 +0.489700 0.489700 -0.721400 +0.560600 0.560600 -0.609600 +0.303200 0.732900 -0.609000 +0.303200 0.732900 -0.609000 +0.264900 0.640400 -0.720900 +0.489700 0.489700 -0.721400 +0.921900 0.381800 -0.066400 +0.831400 0.344200 -0.436200 +0.636100 0.636100 -0.436800 +0.636100 0.636100 -0.436800 +0.705500 0.705500 -0.066500 +0.921900 0.381800 -0.066400 +0.831400 0.344200 -0.436200 +0.673500 0.278600 -0.684700 +0.515000 0.515000 -0.685300 +0.515000 0.515000 -0.685300 +0.636100 0.636100 -0.436800 +0.831400 0.344200 -0.436200 +0.673500 0.278600 -0.684700 +0.640400 0.264900 -0.720900 +0.489700 0.489700 -0.721400 +0.489700 0.489700 -0.721400 +0.515000 0.515000 -0.685300 +0.673500 0.278600 -0.684700 +0.640400 0.264900 -0.720900 +0.732900 0.303200 -0.609000 +0.560600 0.560600 -0.609600 +0.560600 0.560600 -0.609600 +0.489700 0.489700 -0.721400 +0.640400 0.264900 -0.720900 +0.997800 0.000000 -0.066200 +0.900200 0.000000 -0.435500 +0.831400 0.344200 -0.436200 +0.831400 0.344200 -0.436200 +0.921900 0.381800 -0.066400 +0.997800 0.000000 -0.066200 +0.900200 0.000000 -0.435500 +0.729600 0.000000 -0.683900 +0.673500 0.278600 -0.684700 +0.673500 0.278600 -0.684700 +0.831400 0.344200 -0.436200 +0.900200 0.000000 -0.435500 +0.729600 0.000000 -0.683900 +0.694000 0.000000 -0.720000 +0.640400 0.264900 -0.720900 +0.640400 0.264900 -0.720900 +0.673500 0.278600 -0.684700 +0.729600 0.000000 -0.683900 +0.694000 0.000000 -0.720000 +0.793900 0.000000 -0.608000 +0.732900 0.303200 -0.609000 +0.732900 0.303200 -0.609000 +0.640400 0.264900 -0.720900 +0.694000 0.000000 -0.720000 +0.732900 -0.303200 -0.609000 +0.576200 -0.238200 -0.781800 +0.623900 0.000000 -0.781500 +0.623900 0.000000 -0.781500 +0.793900 0.000000 -0.608000 +0.732900 -0.303200 -0.609000 +0.576200 -0.238200 -0.781800 +0.163600 -0.067500 -0.984200 +0.177300 0.000000 -0.984200 +0.177300 0.000000 -0.984200 +0.623900 0.000000 -0.781500 +0.576200 -0.238200 -0.781800 +0.177300 0.000000 -0.984200 +0.163600 -0.067500 -0.984200 +0.045400 -0.018700 -0.998800 +0.045400 -0.018700 -0.998800 +0.049200 0.000000 -0.998800 +0.177300 0.000000 -0.984200 +0.049200 0.000000 -0.998800 +0.045400 -0.018700 -0.998800 +0.000000 0.000000 -1.000000 +0.560600 -0.560600 -0.609600 +0.440400 -0.440400 -0.782300 +0.576200 -0.238200 -0.781800 +0.576200 -0.238200 -0.781800 +0.732900 -0.303200 -0.609000 +0.560600 -0.560600 -0.609600 +0.440400 -0.440400 -0.782300 +0.124900 -0.124900 -0.984300 +0.163600 -0.067500 -0.984200 +0.163600 -0.067500 -0.984200 +0.576200 -0.238200 -0.781800 +0.440400 -0.440400 -0.782300 +0.124900 -0.124900 -0.984300 +0.034700 -0.034700 -0.998800 +0.045400 -0.018700 -0.998800 +0.045400 -0.018700 -0.998800 +0.163600 -0.067500 -0.984200 +0.124900 -0.124900 -0.984300 +0.045400 -0.018700 -0.998800 +0.034700 -0.034700 -0.998800 +0.000000 0.000000 -1.000000 +0.303200 -0.732900 -0.609000 +0.238200 -0.576200 -0.781800 +0.440400 -0.440400 -0.782300 +0.440400 -0.440400 -0.782300 +0.560600 -0.560600 -0.609600 +0.303200 -0.732900 -0.609000 +0.238200 -0.576200 -0.781800 +0.067500 -0.163600 -0.984200 +0.124900 -0.124900 -0.984300 +0.124900 -0.124900 -0.984300 +0.440400 -0.440400 -0.782300 +0.238200 -0.576200 -0.781800 +0.067500 -0.163600 -0.984200 +0.018700 -0.045400 -0.998800 +0.034700 -0.034700 -0.998800 +0.034700 -0.034700 -0.998800 +0.124900 -0.124900 -0.984300 +0.067500 -0.163600 -0.984200 +0.034700 -0.034700 -0.998800 +0.018700 -0.045400 -0.998800 +0.000000 0.000000 -1.000000 +0.000000 -0.793900 -0.608000 +0.000000 -0.623900 -0.781500 +0.238200 -0.576200 -0.781800 +0.238200 -0.576200 -0.781800 +0.303200 -0.732900 -0.609000 +0.000000 -0.793900 -0.608000 +0.000000 -0.623900 -0.781500 +0.000000 -0.177300 -0.984200 +0.067500 -0.163600 -0.984200 +0.067500 -0.163600 -0.984200 +0.238200 -0.576200 -0.781800 +0.000000 -0.623900 -0.781500 +0.000000 -0.177300 -0.984200 +0.000000 -0.049200 -0.998800 +0.018700 -0.045400 -0.998800 +0.018700 -0.045400 -0.998800 +0.067500 -0.163600 -0.984200 +0.000000 -0.177300 -0.984200 +0.018700 -0.045400 -0.998800 +0.000000 -0.049200 -0.998800 +0.000000 0.000000 -1.000000 +-0.303200 -0.732900 -0.609000 +-0.238200 -0.576200 -0.781800 +0.000000 -0.623900 -0.781500 +0.000000 -0.623900 -0.781500 +0.000000 -0.793900 -0.608000 +-0.303200 -0.732900 -0.609000 +-0.238200 -0.576200 -0.781800 +-0.067500 -0.163600 -0.984200 +0.000000 -0.177300 -0.984200 +0.000000 -0.177300 -0.984200 +0.000000 -0.623900 -0.781500 +-0.238200 -0.576200 -0.781800 +0.000000 -0.177300 -0.984200 +-0.067500 -0.163600 -0.984200 +-0.018700 -0.045400 -0.998800 +-0.018700 -0.045400 -0.998800 +0.000000 -0.049200 -0.998800 +0.000000 -0.177300 -0.984200 +0.000000 -0.049200 -0.998800 +-0.018700 -0.045400 -0.998800 +0.000000 0.000000 -1.000000 +-0.560600 -0.560600 -0.609600 +-0.440400 -0.440400 -0.782300 +-0.238200 -0.576200 -0.781800 +-0.238200 -0.576200 -0.781800 +-0.303200 -0.732900 -0.609000 +-0.560600 -0.560600 -0.609600 +-0.440400 -0.440400 -0.782300 +-0.124900 -0.124900 -0.984300 +-0.067500 -0.163600 -0.984200 +-0.067500 -0.163600 -0.984200 +-0.238200 -0.576200 -0.781800 +-0.440400 -0.440400 -0.782300 +-0.124900 -0.124900 -0.984300 +-0.034700 -0.034700 -0.998800 +-0.018700 -0.045400 -0.998800 +-0.018700 -0.045400 -0.998800 +-0.067500 -0.163600 -0.984200 +-0.124900 -0.124900 -0.984300 +-0.018700 -0.045400 -0.998800 +-0.034700 -0.034700 -0.998800 +0.000000 0.000000 -1.000000 +-0.732900 -0.303200 -0.609000 +-0.576200 -0.238200 -0.781800 +-0.440400 -0.440400 -0.782300 +-0.440400 -0.440400 -0.782300 +-0.560600 -0.560600 -0.609600 +-0.732900 -0.303200 -0.609000 +-0.576200 -0.238200 -0.781800 +-0.163600 -0.067500 -0.984200 +-0.124900 -0.124900 -0.984300 +-0.124900 -0.124900 -0.984300 +-0.440400 -0.440400 -0.782300 +-0.576200 -0.238200 -0.781800 +-0.163600 -0.067500 -0.984200 +-0.045400 -0.018700 -0.998800 +-0.034700 -0.034700 -0.998800 +-0.034700 -0.034700 -0.998800 +-0.124900 -0.124900 -0.984300 +-0.163600 -0.067500 -0.984200 +-0.034700 -0.034700 -0.998800 +-0.045400 -0.018700 -0.998800 +0.000000 0.000000 -1.000000 +-0.793900 0.000000 -0.608000 +-0.623900 0.000000 -0.781500 +-0.576200 -0.238200 -0.781800 +-0.576200 -0.238200 -0.781800 +-0.732900 -0.303200 -0.609000 +-0.793900 0.000000 -0.608000 +-0.623900 0.000000 -0.781500 +-0.177300 0.000000 -0.984200 +-0.163600 -0.067500 -0.984200 +-0.163600 -0.067500 -0.984200 +-0.576200 -0.238200 -0.781800 +-0.623900 0.000000 -0.781500 +-0.177300 0.000000 -0.984200 +-0.049200 0.000000 -0.998800 +-0.045400 -0.018700 -0.998800 +-0.045400 -0.018700 -0.998800 +-0.163600 -0.067500 -0.984200 +-0.177300 0.000000 -0.984200 +-0.045400 -0.018700 -0.998800 +-0.049200 0.000000 -0.998800 +0.000000 0.000000 -1.000000 +-0.732900 0.303200 -0.609000 +-0.576200 0.238200 -0.781800 +-0.623900 0.000000 -0.781500 +-0.623900 0.000000 -0.781500 +-0.793900 0.000000 -0.608000 +-0.732900 0.303200 -0.609000 +-0.576200 0.238200 -0.781800 +-0.163600 0.067500 -0.984200 +-0.177300 0.000000 -0.984200 +-0.177300 0.000000 -0.984200 +-0.623900 0.000000 -0.781500 +-0.576200 0.238200 -0.781800 +-0.177300 0.000000 -0.984200 +-0.163600 0.067500 -0.984200 +-0.045400 0.018700 -0.998800 +-0.045400 0.018700 -0.998800 +-0.049200 0.000000 -0.998800 +-0.177300 0.000000 -0.984200 +-0.049200 0.000000 -0.998800 +-0.045400 0.018700 -0.998800 +0.000000 0.000000 -1.000000 +-0.560600 0.560600 -0.609600 +-0.440400 0.440400 -0.782300 +-0.576200 0.238200 -0.781800 +-0.576200 0.238200 -0.781800 +-0.732900 0.303200 -0.609000 +-0.560600 0.560600 -0.609600 +-0.440400 0.440400 -0.782300 +-0.124900 0.124900 -0.984300 +-0.163600 0.067500 -0.984200 +-0.163600 0.067500 -0.984200 +-0.576200 0.238200 -0.781800 +-0.440400 0.440400 -0.782300 +-0.124900 0.124900 -0.984300 +-0.034700 0.034700 -0.998800 +-0.045400 0.018700 -0.998800 +-0.045400 0.018700 -0.998800 +-0.163600 0.067500 -0.984200 +-0.124900 0.124900 -0.984300 +-0.045400 0.018700 -0.998800 +-0.034700 0.034700 -0.998800 +0.000000 0.000000 -1.000000 +-0.303200 0.732900 -0.609000 +-0.238200 0.576200 -0.781800 +-0.440400 0.440400 -0.782300 +-0.440400 0.440400 -0.782300 +-0.560600 0.560600 -0.609600 +-0.303200 0.732900 -0.609000 +-0.238200 0.576200 -0.781800 +-0.067500 0.163600 -0.984200 +-0.124900 0.124900 -0.984300 +-0.124900 0.124900 -0.984300 +-0.440400 0.440400 -0.782300 +-0.238200 0.576200 -0.781800 +-0.067500 0.163600 -0.984200 +-0.018700 0.045400 -0.998800 +-0.034700 0.034700 -0.998800 +-0.034700 0.034700 -0.998800 +-0.124900 0.124900 -0.984300 +-0.067500 0.163600 -0.984200 +-0.034700 0.034700 -0.998800 +-0.018700 0.045400 -0.998800 +0.000000 0.000000 -1.000000 +0.000000 0.793900 -0.608000 +0.000000 0.623900 -0.781500 +-0.238200 0.576200 -0.781800 +-0.238200 0.576200 -0.781800 +-0.303200 0.732900 -0.609000 +0.000000 0.793900 -0.608000 +0.000000 0.623900 -0.781500 +0.000000 0.177300 -0.984200 +-0.067500 0.163600 -0.984200 +-0.067500 0.163600 -0.984200 +-0.238200 0.576200 -0.781800 +0.000000 0.623900 -0.781500 +0.000000 0.177300 -0.984200 +0.000000 0.049200 -0.998800 +-0.018700 0.045400 -0.998800 +-0.018700 0.045400 -0.998800 +-0.067500 0.163600 -0.984200 +0.000000 0.177300 -0.984200 +-0.018700 0.045400 -0.998800 +0.000000 0.049200 -0.998800 +0.000000 0.000000 -1.000000 +0.303200 0.732900 -0.609000 +0.238200 0.576200 -0.781800 +0.000000 0.623900 -0.781500 +0.000000 0.623900 -0.781500 +0.000000 0.793900 -0.608000 +0.303200 0.732900 -0.609000 +0.238200 0.576200 -0.781800 +0.067500 0.163600 -0.984200 +0.000000 0.177300 -0.984200 +0.000000 0.177300 -0.984200 +0.000000 0.623900 -0.781500 +0.238200 0.576200 -0.781800 +0.000000 0.177300 -0.984200 +0.067500 0.163600 -0.984200 +0.018700 0.045400 -0.998800 +0.018700 0.045400 -0.998800 +0.000000 0.049200 -0.998800 +0.000000 0.177300 -0.984200 +0.000000 0.049200 -0.998800 +0.018700 0.045400 -0.998800 +0.000000 0.000000 -1.000000 +0.560600 0.560600 -0.609600 +0.440400 0.440400 -0.782300 +0.238200 0.576200 -0.781800 +0.238200 0.576200 -0.781800 +0.303200 0.732900 -0.609000 +0.560600 0.560600 -0.609600 +0.440400 0.440400 -0.782300 +0.124900 0.124900 -0.984300 +0.067500 0.163600 -0.984200 +0.067500 0.163600 -0.984200 +0.238200 0.576200 -0.781800 +0.440400 0.440400 -0.782300 +0.124900 0.124900 -0.984300 +0.034700 0.034700 -0.998800 +0.018700 0.045400 -0.998800 +0.018700 0.045400 -0.998800 +0.067500 0.163600 -0.984200 +0.124900 0.124900 -0.984300 +0.018700 0.045400 -0.998800 +0.034700 0.034700 -0.998800 +0.000000 0.000000 -1.000000 +0.732900 0.303200 -0.609000 +0.576200 0.238200 -0.781800 +0.440400 0.440400 -0.782300 +0.440400 0.440400 -0.782300 +0.560600 0.560600 -0.609600 +0.732900 0.303200 -0.609000 +0.576200 0.238200 -0.781800 +0.163600 0.067500 -0.984200 +0.124900 0.124900 -0.984300 +0.124900 0.124900 -0.984300 +0.440400 0.440400 -0.782300 +0.576200 0.238200 -0.781800 +0.163600 0.067500 -0.984200 +0.045400 0.018700 -0.998800 +0.034700 0.034700 -0.998800 +0.034700 0.034700 -0.998800 +0.124900 0.124900 -0.984300 +0.163600 0.067500 -0.984200 +0.034700 0.034700 -0.998800 +0.045400 0.018700 -0.998800 +0.000000 0.000000 -1.000000 +0.793900 0.000000 -0.608000 +0.623900 0.000000 -0.781500 +0.576200 0.238200 -0.781800 +0.576200 0.238200 -0.781800 +0.732900 0.303200 -0.609000 +0.793900 0.000000 -0.608000 +0.623900 0.000000 -0.781500 +0.177300 0.000000 -0.984200 +0.163600 0.067500 -0.984200 +0.163600 0.067500 -0.984200 +0.576200 0.238200 -0.781800 +0.623900 0.000000 -0.781500 +0.177300 0.000000 -0.984200 +0.049200 0.000000 -0.998800 +0.045400 0.018700 -0.998800 +0.045400 0.018700 -0.998800 +0.163600 0.067500 -0.984200 +0.177300 0.000000 -0.984200 +0.045400 0.018700 -0.998800 +0.049200 0.000000 -0.998800 +0.000000 0.000000 -1.000000 +0.007000 -0.582900 -0.812500 +0.036100 -0.545600 -0.837300 +0.039100 0.001000 -0.999200 +0.039100 0.001000 -0.999200 +0.007800 0.000200 -1.000000 +0.007000 -0.582900 -0.812500 +0.036100 -0.545600 -0.837300 +0.161800 -0.563000 -0.810400 +0.179500 0.004400 -0.983700 +0.179500 0.004400 -0.983700 +0.039100 0.001000 -0.999200 +0.036100 -0.545600 -0.837300 +0.161800 -0.563000 -0.810400 +0.482400 -0.642700 -0.595100 +0.612300 0.010500 -0.790600 +0.612300 0.010500 -0.790600 +0.179500 0.004400 -0.983700 +0.161800 -0.563000 -0.810400 +0.482400 -0.642700 -0.595100 +0.738700 -0.664200 -0.114600 +0.986200 0.006700 -0.165700 +0.986200 0.006700 -0.165700 +0.612300 0.010500 -0.790600 +0.482400 -0.642700 -0.595100 +0.007000 -0.582900 -0.812500 +-0.001900 -0.986800 0.162100 +0.002800 -0.999800 0.017100 +0.002800 -0.999800 0.017100 +0.036100 -0.545600 -0.837300 +0.007000 -0.582900 -0.812500 +0.002800 -0.999800 0.017100 +0.010500 -0.997200 0.073400 +0.161800 -0.563000 -0.810400 +0.161800 -0.563000 -0.810400 +0.036100 -0.545600 -0.837300 +0.002800 -0.999800 0.017100 +0.010500 -0.997200 0.073400 +-0.066000 -0.989300 0.130100 +0.482400 -0.642700 -0.595100 +0.482400 -0.642700 -0.595100 +0.161800 -0.563000 -0.810400 +0.010500 -0.997200 0.073400 +-0.066000 -0.989300 0.130100 +-0.094400 -0.995400 0.016600 +0.738700 -0.664200 -0.114600 +0.738700 -0.664200 -0.114600 +0.482400 -0.642700 -0.595100 +-0.066000 -0.989300 0.130100 +-0.001900 -0.986800 0.162100 +-0.009200 -0.490300 0.871500 +-0.048600 -0.539500 0.840600 +-0.048600 -0.539500 0.840600 +0.002800 -0.999800 0.017100 +-0.001900 -0.986800 0.162100 +-0.048600 -0.539500 0.840600 +-0.223300 -0.552700 0.802900 +0.010500 -0.997200 0.073400 +0.010500 -0.997200 0.073400 +0.002800 -0.999800 0.017100 +-0.048600 -0.539500 0.840600 +-0.223300 -0.552700 0.802900 +-0.596400 -0.575100 0.560000 +-0.066000 -0.989300 0.130100 +-0.066000 -0.989300 0.130100 +0.010500 -0.997200 0.073400 +-0.223300 -0.552700 0.802900 +-0.596400 -0.575100 0.560000 +-0.803300 -0.591600 0.068200 +-0.094400 -0.995400 0.016600 +-0.094400 -0.995400 0.016600 +-0.066000 -0.989300 0.130100 +-0.596400 -0.575100 0.560000 +-0.010600 -0.000100 0.999900 +-0.058800 -0.000700 0.998300 +-0.048600 -0.539500 0.840600 +-0.048600 -0.539500 0.840600 +-0.009200 -0.490300 0.871500 +-0.010600 -0.000100 0.999900 +-0.058800 -0.000700 0.998300 +-0.280700 -0.003300 0.959800 +-0.223300 -0.552700 0.802900 +-0.223300 -0.552700 0.802900 +-0.048600 -0.539500 0.840600 +-0.058800 -0.000700 0.998300 +-0.280700 -0.003300 0.959800 +-0.749700 -0.004300 0.661700 +-0.596400 -0.575100 0.560000 +-0.596400 -0.575100 0.560000 +-0.223300 -0.552700 0.802900 +-0.280700 -0.003300 0.959800 +-0.749700 -0.004300 0.661700 +-0.997400 -0.002100 0.072700 +-0.803300 -0.591600 0.068200 +-0.803300 -0.591600 0.068200 +-0.596400 -0.575100 0.560000 +-0.749700 -0.004300 0.661700 +-0.008800 0.490300 0.871500 +-0.046500 0.538800 0.841200 +-0.058800 -0.000700 0.998300 +-0.058800 -0.000700 0.998300 +-0.010600 -0.000100 0.999900 +-0.008800 0.490300 0.871500 +-0.058800 -0.000700 0.998300 +-0.046500 0.538800 0.841200 +-0.217900 0.549200 0.806800 +-0.217900 0.549200 0.806800 +-0.280700 -0.003300 0.959800 +-0.058800 -0.000700 0.998300 +-0.280700 -0.003300 0.959800 +-0.217900 0.549200 0.806800 +-0.597300 0.574100 0.560000 +-0.597300 0.574100 0.560000 +-0.749700 -0.004300 0.661700 +-0.280700 -0.003300 0.959800 +-0.749700 -0.004300 0.661700 +-0.597300 0.574100 0.560000 +-0.804000 0.591300 0.062900 +-0.804000 0.591300 0.062900 +-0.997400 -0.002100 0.072700 +-0.749700 -0.004300 0.661700 +-0.001800 0.986800 0.161700 +0.002000 0.999900 0.014600 +-0.046500 0.538800 0.841200 +-0.046500 0.538800 0.841200 +-0.008800 0.490300 0.871500 +-0.001800 0.986800 0.161700 +-0.046500 0.538800 0.841200 +0.002000 0.999900 0.014600 +0.009200 0.998200 0.060100 +0.009200 0.998200 0.060100 +-0.217900 0.549200 0.806800 +-0.046500 0.538800 0.841200 +-0.217900 0.549200 0.806800 +0.009200 0.998200 0.060100 +-0.059300 0.991700 0.113900 +-0.059300 0.991700 0.113900 +-0.597300 0.574100 0.560000 +-0.217900 0.549200 0.806800 +-0.597300 0.574100 0.560000 +-0.059300 0.991700 0.113900 +-0.086900 0.996100 0.012300 +-0.086900 0.996100 0.012300 +-0.804000 0.591300 0.062900 +-0.597300 0.574100 0.560000 +0.006400 0.583100 -0.812400 +0.033800 0.545400 -0.837500 +0.002000 0.999900 0.014600 +0.002000 0.999900 0.014600 +-0.001800 0.986800 0.161700 +0.006400 0.583100 -0.812400 +0.002000 0.999900 0.014600 +0.033800 0.545400 -0.837500 +0.157100 0.562200 -0.811900 +0.157100 0.562200 -0.811900 +0.009200 0.998200 0.060100 +0.002000 0.999900 0.014600 +0.009200 0.998200 0.060100 +0.157100 0.562200 -0.811900 +0.484400 0.646500 -0.589400 +0.484400 0.646500 -0.589400 +-0.059300 0.991700 0.113900 +0.009200 0.998200 0.060100 +-0.059300 0.991700 0.113900 +0.484400 0.646500 -0.589400 +0.738900 0.666200 -0.101300 +0.738900 0.666200 -0.101300 +-0.086900 0.996100 0.012300 +-0.059300 0.991700 0.113900 +0.007800 0.000200 -1.000000 +0.039100 0.001000 -0.999200 +0.033800 0.545400 -0.837500 +0.033800 0.545400 -0.837500 +0.006400 0.583100 -0.812400 +0.007800 0.000200 -1.000000 +0.033800 0.545400 -0.837500 +0.039100 0.001000 -0.999200 +0.179500 0.004400 -0.983700 +0.179500 0.004400 -0.983700 +0.157100 0.562200 -0.811900 +0.033800 0.545400 -0.837500 +0.157100 0.562200 -0.811900 +0.179500 0.004400 -0.983700 +0.612300 0.010500 -0.790600 +0.612300 0.010500 -0.790600 +0.484400 0.646500 -0.589400 +0.157100 0.562200 -0.811900 +0.484400 0.646500 -0.589400 +0.612300 0.010500 -0.790600 +0.986200 0.006700 -0.165700 +0.986200 0.006700 -0.165700 +0.738900 0.666200 -0.101300 +0.484400 0.646500 -0.589400 +0.738700 -0.664200 -0.114600 +0.725600 -0.637400 0.259400 +0.946500 0.003400 0.322700 +0.946500 0.003400 0.322700 +0.986200 0.006700 -0.165700 +0.738700 -0.664200 -0.114600 +0.725600 -0.637400 0.259400 +0.645900 -0.607700 0.462000 +0.825800 0.007500 0.563900 +0.825800 0.007500 0.563900 +0.946500 0.003400 0.322700 +0.725600 -0.637400 0.259400 +0.645900 -0.607700 0.462000 +0.531600 -0.558600 0.636700 +0.650000 0.006900 0.759900 +0.650000 0.006900 0.759900 +0.825800 0.007500 0.563900 +0.645900 -0.607700 0.462000 +0.531600 -0.558600 0.636700 +0.425000 -0.595500 0.681700 +0.532400 0.005200 0.846500 +0.532400 0.005200 0.846500 +0.650000 0.006900 0.759900 +0.531600 -0.558600 0.636700 +-0.094400 -0.995400 0.016600 +-0.049600 -0.998600 -0.019800 +0.725600 -0.637400 0.259400 +0.725600 -0.637400 0.259400 +0.738700 -0.664200 -0.114600 +-0.094400 -0.995400 0.016600 +-0.049600 -0.998600 -0.019800 +-0.037800 -0.998600 -0.035600 +0.645900 -0.607700 0.462000 +0.645900 -0.607700 0.462000 +0.725600 -0.637400 0.259400 +-0.049600 -0.998600 -0.019800 +-0.037800 -0.998600 -0.035600 +-0.037900 -0.998600 -0.036500 +0.531600 -0.558600 0.636700 +0.531600 -0.558600 0.636700 +0.645900 -0.607700 0.462000 +-0.037800 -0.998600 -0.035600 +-0.037900 -0.998600 -0.036500 +-0.168900 -0.939500 -0.297900 +0.425000 -0.595500 0.681700 +0.425000 -0.595500 0.681700 +0.531600 -0.558600 0.636700 +-0.037900 -0.998600 -0.036500 +-0.803300 -0.591600 0.068200 +-0.742300 -0.599500 -0.299200 +-0.049600 -0.998600 -0.019800 +-0.049600 -0.998600 -0.019800 +-0.094400 -0.995400 0.016600 +-0.803300 -0.591600 0.068200 +-0.742300 -0.599500 -0.299200 +-0.619600 -0.579500 -0.529400 +-0.037800 -0.998600 -0.035600 +-0.037800 -0.998600 -0.035600 +-0.049600 -0.998600 -0.019800 +-0.742300 -0.599500 -0.299200 +-0.619600 -0.579500 -0.529400 +-0.483700 -0.543800 -0.685800 +-0.037900 -0.998600 -0.036500 +-0.037900 -0.998600 -0.036500 +-0.037800 -0.998600 -0.035600 +-0.619600 -0.579500 -0.529400 +-0.483700 -0.543800 -0.685800 +-0.445300 -0.413200 -0.794400 +-0.168900 -0.939500 -0.297900 +-0.168900 -0.939500 -0.297900 +-0.037900 -0.998600 -0.036500 +-0.483700 -0.543800 -0.685800 +-0.997400 -0.002100 0.072700 +-0.926500 -0.002000 -0.376300 +-0.742300 -0.599500 -0.299200 +-0.742300 -0.599500 -0.299200 +-0.803300 -0.591600 0.068200 +-0.997400 -0.002100 0.072700 +-0.926500 -0.002000 -0.376300 +-0.753900 -0.004300 -0.657000 +-0.619600 -0.579500 -0.529400 +-0.619600 -0.579500 -0.529400 +-0.742300 -0.599500 -0.299200 +-0.926500 -0.002000 -0.376300 +-0.753900 -0.004300 -0.657000 +-0.566200 -0.003500 -0.824200 +-0.483700 -0.543800 -0.685800 +-0.483700 -0.543800 -0.685800 +-0.619600 -0.579500 -0.529400 +-0.753900 -0.004300 -0.657000 +-0.566200 -0.003500 -0.824200 +-0.481800 -0.001900 -0.876300 +-0.445300 -0.413200 -0.794400 +-0.445300 -0.413200 -0.794400 +-0.483700 -0.543800 -0.685800 +-0.566200 -0.003500 -0.824200 +-0.804000 0.591300 0.062900 +-0.744700 0.599000 -0.294400 +-0.926500 -0.002000 -0.376300 +-0.926500 -0.002000 -0.376300 +-0.997400 -0.002100 0.072700 +-0.804000 0.591300 0.062900 +-0.926500 -0.002000 -0.376300 +-0.744700 0.599000 -0.294400 +-0.621900 0.578200 -0.528100 +-0.621900 0.578200 -0.528100 +-0.753900 -0.004300 -0.657000 +-0.926500 -0.002000 -0.376300 +-0.753900 -0.004300 -0.657000 +-0.621900 0.578200 -0.528100 +-0.481200 0.542800 -0.688300 +-0.481200 0.542800 -0.688300 +-0.566200 -0.003500 -0.824200 +-0.753900 -0.004300 -0.657000 +-0.566200 -0.003500 -0.824200 +-0.481200 0.542800 -0.688300 +-0.438100 0.415700 -0.797000 +-0.438100 0.415700 -0.797000 +-0.481800 -0.001900 -0.876300 +-0.566200 -0.003500 -0.824200 +-0.804000 0.591300 0.062900 +-0.086900 0.996100 0.012300 +-0.044300 0.998900 -0.017100 +-0.044300 0.998900 -0.017100 +-0.744700 0.599000 -0.294400 +-0.804000 0.591300 0.062900 +-0.744700 0.599000 -0.294400 +-0.044300 0.998900 -0.017100 +-0.026200 0.999300 -0.028200 +-0.026200 0.999300 -0.028200 +-0.621900 0.578200 -0.528100 +-0.744700 0.599000 -0.294400 +-0.621900 0.578200 -0.528100 +-0.026200 0.999300 -0.028200 +-0.025300 0.999300 -0.028300 +-0.025300 0.999300 -0.028300 +-0.481200 0.542800 -0.688300 +-0.621900 0.578200 -0.528100 +-0.481200 0.542800 -0.688300 +-0.025300 0.999300 -0.028300 +-0.157500 0.944200 -0.289400 +-0.157500 0.944200 -0.289400 +-0.438100 0.415700 -0.797000 +-0.481200 0.542800 -0.688300 +-0.086900 0.996100 0.012300 +0.738900 0.666200 -0.101300 +0.728200 0.637100 0.252400 +0.728200 0.637100 0.252400 +-0.044300 0.998900 -0.017100 +-0.086900 0.996100 0.012300 +-0.044300 0.998900 -0.017100 +0.728200 0.637100 0.252400 +0.647100 0.608300 0.459700 +0.647100 0.608300 0.459700 +-0.026200 0.999300 -0.028200 +-0.044300 0.998900 -0.017100 +-0.026200 0.999300 -0.028200 +0.647100 0.608300 0.459700 +0.523000 0.562200 0.640700 +0.523000 0.562200 0.640700 +-0.025300 0.999300 -0.028300 +-0.026200 0.999300 -0.028200 +-0.025300 0.999300 -0.028300 +0.523000 0.562200 0.640700 +0.410000 0.604700 0.682900 +0.410000 0.604700 0.682900 +-0.157500 0.944200 -0.289400 +-0.025300 0.999300 -0.028300 +0.738900 0.666200 -0.101300 +0.986200 0.006700 -0.165700 +0.946500 0.003400 0.322700 +0.946500 0.003400 0.322700 +0.728200 0.637100 0.252400 +0.738900 0.666200 -0.101300 +0.728200 0.637100 0.252400 +0.946500 0.003400 0.322700 +0.825800 0.007500 0.563900 +0.825800 0.007500 0.563900 +0.647100 0.608300 0.459700 +0.728200 0.637100 0.252400 +0.647100 0.608300 0.459700 +0.825800 0.007500 0.563900 +0.650000 0.006900 0.759900 +0.650000 0.006900 0.759900 +0.523000 0.562200 0.640700 +0.647100 0.608300 0.459700 +0.523000 0.562200 0.640700 +0.650000 0.006900 0.759900 +0.532400 0.005200 0.846500 +0.532400 0.005200 0.846500 +0.410000 0.604700 0.682900 +0.523000 0.562200 0.640700 +-0.230800 0.006500 0.973000 +-0.152900 -0.710200 0.687200 +-0.316700 -0.702100 0.637800 +-0.316700 -0.702100 0.637800 +-0.548900 0.001500 0.835900 +-0.230800 0.006500 0.973000 +-0.548900 0.001500 0.835900 +-0.316700 -0.702100 0.637800 +-0.601100 -0.645300 0.471500 +-0.601100 -0.645300 0.471500 +-0.875700 -0.009900 0.482800 +-0.548900 0.001500 0.835900 +-0.875700 -0.009900 0.482800 +-0.601100 -0.645300 0.471500 +-0.635900 -0.629800 0.446100 +-0.635900 -0.629800 0.446100 +-0.877600 -0.019100 0.479100 +-0.875700 -0.009900 0.482800 +-0.635900 -0.629800 0.446100 +-0.435700 -0.670000 0.601000 +-0.696200 -0.024500 0.717400 +-0.696200 -0.024500 0.717400 +-0.877600 -0.019100 0.479100 +-0.635900 -0.629800 0.446100 +-0.152900 -0.710200 0.687200 +0.111100 -0.990200 -0.085100 +0.223300 -0.974700 0.006500 +0.223300 -0.974700 0.006500 +-0.316700 -0.702100 0.637800 +-0.152900 -0.710200 0.687200 +-0.316700 -0.702100 0.637800 +0.223300 -0.974700 0.006500 +0.190100 -0.969500 0.155000 +0.190100 -0.969500 0.155000 +-0.601100 -0.645300 0.471500 +-0.316700 -0.702100 0.637800 +-0.601100 -0.645300 0.471500 +0.190100 -0.969500 0.155000 +0.005300 -0.981900 0.189500 +0.005300 -0.981900 0.189500 +-0.635900 -0.629800 0.446100 +-0.601100 -0.645300 0.471500 +0.005300 -0.981900 0.189500 +-0.011800 -0.969000 0.246700 +-0.435700 -0.670000 0.601000 +-0.435700 -0.670000 0.601000 +-0.635900 -0.629800 0.446100 +0.005300 -0.981900 0.189500 +0.111100 -0.990200 -0.085100 +0.343900 -0.599400 -0.722800 +0.572500 -0.591600 -0.567700 +0.572500 -0.591600 -0.567700 +0.223300 -0.974700 0.006500 +0.111100 -0.990200 -0.085100 +0.223300 -0.974700 0.006500 +0.572500 -0.591600 -0.567700 +0.787400 -0.560500 -0.256500 +0.787400 -0.560500 -0.256500 +0.190100 -0.969500 0.155000 +0.223300 -0.974700 0.006500 +0.190100 -0.969500 0.155000 +0.787400 -0.560500 -0.256500 +0.647100 -0.698100 -0.306400 +0.647100 -0.698100 -0.306400 +0.005300 -0.981900 0.189500 +0.190100 -0.969500 0.155000 +0.647100 -0.698100 -0.306400 +0.427500 -0.753600 -0.499300 +-0.011800 -0.969000 0.246700 +-0.011800 -0.969000 0.246700 +0.005300 -0.981900 0.189500 +0.647100 -0.698100 -0.306400 +0.343900 -0.599400 -0.722800 +0.410900 -0.001300 -0.911700 +0.671500 0.000900 -0.741000 +0.671500 0.000900 -0.741000 +0.572500 -0.591600 -0.567700 +0.343900 -0.599400 -0.722800 +0.572500 -0.591600 -0.567700 +0.671500 0.000900 -0.741000 +0.922000 0.007300 -0.387100 +0.922000 0.007300 -0.387100 +0.787400 -0.560500 -0.256500 +0.572500 -0.591600 -0.567700 +0.787400 -0.560500 -0.256500 +0.922000 0.007300 -0.387100 +0.846900 0.013900 -0.531600 +0.846900 0.013900 -0.531600 +0.647100 -0.698100 -0.306400 +0.787400 -0.560500 -0.256500 +0.846900 0.013900 -0.531600 +0.535900 0.010500 -0.844200 +0.427500 -0.753600 -0.499300 +0.427500 -0.753600 -0.499300 +0.647100 -0.698100 -0.306400 +0.846900 0.013900 -0.531600 +0.341200 0.600900 -0.722800 +0.578700 0.591800 -0.561100 +0.671500 0.000900 -0.741000 +0.671500 0.000900 -0.741000 +0.410900 -0.001300 -0.911700 +0.341200 0.600900 -0.722800 +0.578700 0.591800 -0.561100 +0.784900 0.566500 -0.251000 +0.922000 0.007300 -0.387100 +0.922000 0.007300 -0.387100 +0.671500 0.000900 -0.741000 +0.578700 0.591800 -0.561100 +0.784900 0.566500 -0.251000 +0.642700 0.704000 -0.302300 +0.846900 0.013900 -0.531600 +0.846900 0.013900 -0.531600 +0.922000 0.007300 -0.387100 +0.784900 0.566500 -0.251000 +0.846900 0.013900 -0.531600 +0.642700 0.704000 -0.302300 +0.418600 0.758100 -0.500000 +0.418600 0.758100 -0.500000 +0.535900 0.010500 -0.844200 +0.846900 0.013900 -0.531600 +0.115800 0.990100 -0.079100 +0.232800 0.972400 0.012600 +0.578700 0.591800 -0.561100 +0.578700 0.591800 -0.561100 +0.341200 0.600900 -0.722800 +0.115800 0.990100 -0.079100 +0.232800 0.972400 0.012600 +0.206700 0.966300 0.153600 +0.784900 0.566500 -0.251000 +0.784900 0.566500 -0.251000 +0.578700 0.591800 -0.561100 +0.232800 0.972400 0.012600 +0.206700 0.966300 0.153600 +0.024500 0.986600 0.161400 +0.642700 0.704000 -0.302300 +0.642700 0.704000 -0.302300 +0.784900 0.566500 -0.251000 +0.206700 0.966300 0.153600 +0.642700 0.704000 -0.302300 +0.024500 0.986600 0.161400 +0.003400 0.977500 0.211100 +0.003400 0.977500 0.211100 +0.418600 0.758100 -0.500000 +0.642700 0.704000 -0.302300 +-0.134900 0.713600 0.687500 +-0.319500 0.705100 0.633100 +0.232800 0.972400 0.012600 +0.232800 0.972400 0.012600 +0.115800 0.990100 -0.079100 +-0.134900 0.713600 0.687500 +-0.319500 0.705100 0.633100 +-0.603900 0.649900 0.461400 +0.206700 0.966300 0.153600 +0.206700 0.966300 0.153600 +0.232800 0.972400 0.012600 +-0.319500 0.705100 0.633100 +-0.603900 0.649900 0.461400 +-0.631800 0.640100 0.437200 +0.024500 0.986600 0.161400 +0.024500 0.986600 0.161400 +0.206700 0.966300 0.153600 +-0.603900 0.649900 0.461400 +0.024500 0.986600 0.161400 +-0.631800 0.640100 0.437200 +-0.424300 0.666700 0.612700 +-0.424300 0.666700 0.612700 +0.003400 0.977500 0.211100 +0.024500 0.986600 0.161400 +-0.230800 0.006500 0.973000 +-0.548900 0.001500 0.835900 +-0.319500 0.705100 0.633100 +-0.319500 0.705100 0.633100 +-0.134900 0.713600 0.687500 +-0.230800 0.006500 0.973000 +-0.548900 0.001500 0.835900 +-0.875700 -0.009900 0.482800 +-0.603900 0.649900 0.461400 +-0.603900 0.649900 0.461400 +-0.319500 0.705100 0.633100 +-0.548900 0.001500 0.835900 +-0.875700 -0.009900 0.482800 +-0.877600 -0.019100 0.479100 +-0.631800 0.640100 0.437200 +-0.631800 0.640100 0.437200 +-0.603900 0.649900 0.461400 +-0.875700 -0.009900 0.482800 +-0.631800 0.640100 0.437200 +-0.877600 -0.019100 0.479100 +-0.696200 -0.024500 0.717400 +-0.696200 -0.024500 0.717400 +-0.424300 0.666700 0.612700 +-0.631800 0.640100 0.437200 +-0.435700 -0.670000 0.601000 +-0.259900 -0.552500 0.791900 +-0.425800 -0.010800 0.904800 +-0.425800 -0.010800 0.904800 +-0.696200 -0.024500 0.717400 +-0.435700 -0.670000 0.601000 +-0.259900 -0.552500 0.791900 +0.009500 0.021700 0.999700 +0.022000 -0.001600 0.999800 +0.022000 -0.001600 0.999800 +-0.425800 -0.010800 0.904800 +-0.259900 -0.552500 0.791900 +0.022000 -0.001600 0.999800 +0.009500 0.021700 0.999700 +0.410200 0.849100 0.332900 +0.410200 0.849100 0.332900 +0.999600 -0.011600 0.025900 +0.022000 -0.001600 0.999800 +0.999600 -0.011600 0.025900 +0.410200 0.849100 0.332900 +0.541500 0.637000 -0.548600 +0.541500 0.637000 -0.548600 +0.709600 -0.009700 -0.704600 +0.999600 -0.011600 0.025900 +-0.011800 -0.969000 0.246700 +0.046300 -0.889200 0.455200 +-0.259900 -0.552500 0.791900 +-0.259900 -0.552500 0.791900 +-0.435700 -0.670000 0.601000 +-0.011800 -0.969000 0.246700 +0.046300 -0.889200 0.455200 +-0.010700 -0.148900 0.988800 +0.009500 0.021700 0.999700 +0.009500 0.021700 0.999700 +-0.259900 -0.552500 0.791900 +0.046300 -0.889200 0.455200 +0.009500 0.021700 0.999700 +-0.010700 -0.148900 0.988800 +-0.044400 0.729100 0.682900 +-0.044400 0.729100 0.682900 +0.410200 0.849100 0.332900 +0.009500 0.021700 0.999700 +0.410200 0.849100 0.332900 +-0.044400 0.729100 0.682900 +0.122800 0.992400 0.009200 +0.122800 0.992400 0.009200 +0.541500 0.637000 -0.548600 +0.410200 0.849100 0.332900 +0.427500 -0.753600 -0.499300 +0.481800 -0.857500 -0.180400 +0.046300 -0.889200 0.455200 +0.046300 -0.889200 0.455200 +-0.011800 -0.969000 0.246700 +0.427500 -0.753600 -0.499300 +0.481800 -0.857500 -0.180400 +0.455300 -0.499900 0.736700 +-0.010700 -0.148900 0.988800 +-0.010700 -0.148900 0.988800 +0.046300 -0.889200 0.455200 +0.481800 -0.857500 -0.180400 +-0.010700 -0.148900 0.988800 +0.455300 -0.499900 0.736700 +-0.220500 0.358300 0.907200 +-0.220500 0.358300 0.907200 +-0.044400 0.729100 0.682900 +-0.010700 -0.148900 0.988800 +-0.044400 0.729100 0.682900 +-0.220500 0.358300 0.907200 +-0.235900 0.715800 0.657300 +-0.235900 0.715800 0.657300 +0.122800 0.992400 0.009200 +-0.044400 0.729100 0.682900 +0.535900 0.010500 -0.844200 +0.728100 0.015600 -0.685300 +0.481800 -0.857500 -0.180400 +0.481800 -0.857500 -0.180400 +0.427500 -0.753600 -0.499300 +0.535900 0.010500 -0.844200 +0.728100 0.015600 -0.685300 +0.888700 0.016700 0.458100 +0.455300 -0.499900 0.736700 +0.455300 -0.499900 0.736700 +0.481800 -0.857500 -0.180400 +0.728100 0.015600 -0.685300 +0.455300 -0.499900 0.736700 +0.888700 0.016700 0.458100 +-0.260100 -0.000800 0.965600 +-0.260100 -0.000800 0.965600 +-0.220500 0.358300 0.907200 +0.455300 -0.499900 0.736700 +-0.220500 0.358300 0.907200 +-0.260100 -0.000800 0.965600 +-0.371600 0.004400 0.928400 +-0.371600 0.004400 0.928400 +-0.235900 0.715800 0.657300 +-0.220500 0.358300 0.907200 +0.535900 0.010500 -0.844200 +0.418600 0.758100 -0.500000 +0.480200 0.858900 -0.178400 +0.480200 0.858900 -0.178400 +0.728100 0.015600 -0.685300 +0.535900 0.010500 -0.844200 +0.728100 0.015600 -0.685300 +0.480200 0.858900 -0.178400 +0.488100 0.497900 0.716800 +0.488100 0.497900 0.716800 +0.888700 0.016700 0.458100 +0.728100 0.015600 -0.685300 +0.488100 0.497900 0.716800 +-0.222000 -0.361900 0.905400 +-0.260100 -0.000800 0.965600 +-0.260100 -0.000800 0.965600 +0.888700 0.016700 0.458100 +0.488100 0.497900 0.716800 +-0.222000 -0.361900 0.905400 +-0.235400 -0.710500 0.663200 +-0.371600 0.004400 0.928400 +-0.371600 0.004400 0.928400 +-0.260100 -0.000800 0.965600 +-0.222000 -0.361900 0.905400 +0.418600 0.758100 -0.500000 +0.003400 0.977500 0.211100 +0.058700 0.897200 0.437700 +0.058700 0.897200 0.437700 +0.480200 0.858900 -0.178400 +0.418600 0.758100 -0.500000 +0.480200 0.858900 -0.178400 +0.058700 0.897200 0.437700 +0.001300 0.164000 0.986500 +0.001300 0.164000 0.986500 +0.488100 0.497900 0.716800 +0.480200 0.858900 -0.178400 +0.001300 0.164000 0.986500 +-0.044200 -0.730300 0.681700 +-0.222000 -0.361900 0.905400 +-0.222000 -0.361900 0.905400 +0.488100 0.497900 0.716800 +0.001300 0.164000 0.986500 +-0.044200 -0.730300 0.681700 +0.138800 -0.989700 -0.034200 +-0.235400 -0.710500 0.663200 +-0.235400 -0.710500 0.663200 +-0.222000 -0.361900 0.905400 +-0.044200 -0.730300 0.681700 +0.003400 0.977500 0.211100 +-0.424300 0.666700 0.612700 +-0.258900 0.545400 0.797200 +-0.258900 0.545400 0.797200 +0.058700 0.897200 0.437700 +0.003400 0.977500 0.211100 +0.058700 0.897200 0.437700 +-0.258900 0.545400 0.797200 +0.012300 -0.019300 0.999700 +0.012300 -0.019300 0.999700 +0.001300 0.164000 0.986500 +0.058700 0.897200 0.437700 +0.012300 -0.019300 0.999700 +0.398600 -0.845700 0.354900 +-0.044200 -0.730300 0.681700 +-0.044200 -0.730300 0.681700 +0.001300 0.164000 0.986500 +0.012300 -0.019300 0.999700 +0.398600 -0.845700 0.354900 +0.537600 -0.610700 -0.581400 +0.138800 -0.989700 -0.034200 +0.138800 -0.989700 -0.034200 +-0.044200 -0.730300 0.681700 +0.398600 -0.845700 0.354900 +-0.424300 0.666700 0.612700 +-0.696200 -0.024500 0.717400 +-0.425800 -0.010800 0.904800 +-0.425800 -0.010800 0.904800 +-0.258900 0.545400 0.797200 +-0.424300 0.666700 0.612700 +-0.258900 0.545400 0.797200 +-0.425800 -0.010800 0.904800 +0.022000 -0.001600 0.999800 +0.022000 -0.001600 0.999800 +0.012300 -0.019300 0.999700 +-0.258900 0.545400 0.797200 +0.022000 -0.001600 0.999800 +0.999600 -0.011600 0.025900 +0.398600 -0.845700 0.354900 +0.398600 -0.845700 0.354900 +0.012300 -0.019300 0.999700 +0.022000 -0.001600 0.999800 +0.999600 -0.011600 0.025900 +0.709600 -0.009700 -0.704600 +0.537600 -0.610700 -0.581400 +0.537600 -0.610700 -0.581400 +0.398600 -0.845700 0.354900 +0.999600 -0.011600 0.025900 +0.762600 -0.314800 0.565000 +0.824500 0.000000 0.565800 +0.000000 0.000000 1.000000 +0.762600 -0.314800 0.565000 +0.848000 -0.350000 -0.398000 +0.917700 0.000000 -0.397300 +0.917700 0.000000 -0.397300 +0.824500 0.000000 0.565800 +0.762600 -0.314800 0.565000 +0.848000 -0.350000 -0.398000 +0.864100 -0.356400 -0.355300 +0.935300 -0.000100 -0.353900 +0.935300 -0.000100 -0.353900 +0.917700 0.000000 -0.397300 +0.848000 -0.350000 -0.398000 +0.864100 -0.356400 -0.355300 +0.721000 -0.297900 0.625600 +0.780700 -0.000100 0.624900 +0.780700 -0.000100 0.624900 +0.935300 -0.000100 -0.353900 +0.864100 -0.356400 -0.355300 +0.583400 -0.583300 0.565200 +0.762600 -0.314800 0.565000 +0.000000 0.000000 1.000000 +0.583400 -0.583300 0.565200 +0.648500 -0.648400 -0.398700 +0.848000 -0.350000 -0.398000 +0.848000 -0.350000 -0.398000 +0.762600 -0.314800 0.565000 +0.583400 -0.583300 0.565200 +0.648500 -0.648400 -0.398700 +0.660900 -0.660700 -0.355900 +0.864100 -0.356400 -0.355300 +0.864100 -0.356400 -0.355300 +0.848000 -0.350000 -0.398000 +0.648500 -0.648400 -0.398700 +0.660900 -0.660700 -0.355900 +0.551900 -0.551800 0.625300 +0.721000 -0.297900 0.625600 +0.721000 -0.297900 0.625600 +0.864100 -0.356400 -0.355300 +0.660900 -0.660700 -0.355900 +0.314800 -0.762600 0.565100 +0.583400 -0.583300 0.565200 +0.000000 0.000000 1.000000 +0.314800 -0.762600 0.565100 +0.350000 -0.848000 -0.398000 +0.648500 -0.648400 -0.398700 +0.648500 -0.648400 -0.398700 +0.583400 -0.583300 0.565200 +0.314800 -0.762600 0.565100 +0.350000 -0.848000 -0.398000 +0.356500 -0.864200 -0.355200 +0.660900 -0.660700 -0.355900 +0.660900 -0.660700 -0.355900 +0.648500 -0.648400 -0.398700 +0.350000 -0.848000 -0.398000 +0.356500 -0.864200 -0.355200 +0.298000 -0.721100 0.625500 +0.551900 -0.551800 0.625300 +0.551900 -0.551800 0.625300 +0.660900 -0.660700 -0.355900 +0.356500 -0.864200 -0.355200 +0.000000 -0.824500 0.565800 +0.314800 -0.762600 0.565100 +0.000000 0.000000 1.000000 +0.000000 -0.824500 0.565800 +0.000000 -0.917700 -0.397300 +0.350000 -0.848000 -0.398000 +0.350000 -0.848000 -0.398000 +0.314800 -0.762600 0.565100 +0.000000 -0.824500 0.565800 +0.000000 -0.917700 -0.397300 +-0.000100 -0.935300 -0.353900 +0.356500 -0.864200 -0.355200 +0.356500 -0.864200 -0.355200 +0.350000 -0.848000 -0.398000 +0.000000 -0.917700 -0.397300 +-0.000100 -0.935300 -0.353900 +-0.000100 -0.780700 0.624900 +0.298000 -0.721100 0.625500 +0.298000 -0.721100 0.625500 +0.356500 -0.864200 -0.355200 +-0.000100 -0.935300 -0.353900 +-0.314800 -0.762600 0.565000 +0.000000 -0.824500 0.565800 +0.000000 0.000000 1.000000 +-0.314800 -0.762600 0.565000 +-0.350000 -0.848000 -0.398000 +0.000000 -0.917700 -0.397300 +0.000000 -0.917700 -0.397300 +0.000000 -0.824500 0.565800 +-0.314800 -0.762600 0.565000 +-0.350000 -0.848000 -0.398000 +-0.356400 -0.864100 -0.355300 +-0.000100 -0.935300 -0.353900 +-0.000100 -0.935300 -0.353900 +0.000000 -0.917700 -0.397300 +-0.350000 -0.848000 -0.398000 +-0.356400 -0.864100 -0.355300 +-0.297900 -0.721000 0.625600 +-0.000100 -0.780700 0.624900 +-0.000100 -0.780700 0.624900 +-0.000100 -0.935300 -0.353900 +-0.356400 -0.864100 -0.355300 +-0.583300 -0.583400 0.565200 +-0.314800 -0.762600 0.565000 +0.000000 0.000000 1.000000 +-0.583300 -0.583400 0.565200 +-0.648400 -0.648500 -0.398700 +-0.350000 -0.848000 -0.398000 +-0.350000 -0.848000 -0.398000 +-0.314800 -0.762600 0.565000 +-0.583300 -0.583400 0.565200 +-0.648400 -0.648500 -0.398700 +-0.660700 -0.660900 -0.355900 +-0.356400 -0.864100 -0.355300 +-0.356400 -0.864100 -0.355300 +-0.350000 -0.848000 -0.398000 +-0.648400 -0.648500 -0.398700 +-0.660700 -0.660900 -0.355900 +-0.551800 -0.551900 0.625300 +-0.297900 -0.721000 0.625600 +-0.297900 -0.721000 0.625600 +-0.356400 -0.864100 -0.355300 +-0.660700 -0.660900 -0.355900 +-0.762600 -0.314800 0.565100 +-0.583300 -0.583400 0.565200 +0.000000 0.000000 1.000000 +-0.762600 -0.314800 0.565100 +-0.848000 -0.350000 -0.398000 +-0.648400 -0.648500 -0.398700 +-0.648400 -0.648500 -0.398700 +-0.583300 -0.583400 0.565200 +-0.762600 -0.314800 0.565100 +-0.848000 -0.350000 -0.398000 +-0.864200 -0.356500 -0.355200 +-0.660700 -0.660900 -0.355900 +-0.660700 -0.660900 -0.355900 +-0.648400 -0.648500 -0.398700 +-0.848000 -0.350000 -0.398000 +-0.864200 -0.356500 -0.355200 +-0.721100 -0.298000 0.625500 +-0.551800 -0.551900 0.625300 +-0.551800 -0.551900 0.625300 +-0.660700 -0.660900 -0.355900 +-0.864200 -0.356500 -0.355200 +-0.824500 0.000000 0.565800 +-0.762600 -0.314800 0.565100 +0.000000 0.000000 1.000000 +-0.824500 0.000000 0.565800 +-0.917700 0.000000 -0.397300 +-0.848000 -0.350000 -0.398000 +-0.848000 -0.350000 -0.398000 +-0.762600 -0.314800 0.565100 +-0.824500 0.000000 0.565800 +-0.917700 0.000000 -0.397300 +-0.935300 0.000100 -0.353900 +-0.864200 -0.356500 -0.355200 +-0.864200 -0.356500 -0.355200 +-0.848000 -0.350000 -0.398000 +-0.917700 0.000000 -0.397300 +-0.935300 0.000100 -0.353900 +-0.780700 0.000100 0.624900 +-0.721100 -0.298000 0.625500 +-0.721100 -0.298000 0.625500 +-0.864200 -0.356500 -0.355200 +-0.935300 0.000100 -0.353900 +-0.762600 0.314800 0.565000 +-0.824500 0.000000 0.565800 +0.000000 0.000000 1.000000 +-0.762600 0.314800 0.565000 +-0.848000 0.350000 -0.398000 +-0.917700 0.000000 -0.397300 +-0.917700 0.000000 -0.397300 +-0.824500 0.000000 0.565800 +-0.762600 0.314800 0.565000 +-0.848000 0.350000 -0.398000 +-0.864100 0.356400 -0.355300 +-0.935300 0.000100 -0.353900 +-0.935300 0.000100 -0.353900 +-0.917700 0.000000 -0.397300 +-0.848000 0.350000 -0.398000 +-0.864100 0.356400 -0.355300 +-0.721000 0.297900 0.625600 +-0.780700 0.000100 0.624900 +-0.780700 0.000100 0.624900 +-0.935300 0.000100 -0.353900 +-0.864100 0.356400 -0.355300 +-0.583400 0.583300 0.565200 +-0.762600 0.314800 0.565000 +0.000000 0.000000 1.000000 +-0.583400 0.583300 0.565200 +-0.648500 0.648400 -0.398700 +-0.848000 0.350000 -0.398000 +-0.848000 0.350000 -0.398000 +-0.762600 0.314800 0.565000 +-0.583400 0.583300 0.565200 +-0.648500 0.648400 -0.398700 +-0.660900 0.660700 -0.355900 +-0.864100 0.356400 -0.355300 +-0.864100 0.356400 -0.355300 +-0.848000 0.350000 -0.398000 +-0.648500 0.648400 -0.398700 +-0.660900 0.660700 -0.355900 +-0.551900 0.551800 0.625300 +-0.721000 0.297900 0.625600 +-0.721000 0.297900 0.625600 +-0.864100 0.356400 -0.355300 +-0.660900 0.660700 -0.355900 +-0.314800 0.762600 0.565100 +-0.583400 0.583300 0.565200 +0.000000 0.000000 1.000000 +-0.314800 0.762600 0.565100 +-0.350000 0.848000 -0.398000 +-0.648500 0.648400 -0.398700 +-0.648500 0.648400 -0.398700 +-0.583400 0.583300 0.565200 +-0.314800 0.762600 0.565100 +-0.350000 0.848000 -0.398000 +-0.356500 0.864200 -0.355200 +-0.660900 0.660700 -0.355900 +-0.660900 0.660700 -0.355900 +-0.648500 0.648400 -0.398700 +-0.350000 0.848000 -0.398000 +-0.356500 0.864200 -0.355200 +-0.298000 0.721100 0.625500 +-0.551900 0.551800 0.625300 +-0.551900 0.551800 0.625300 +-0.660900 0.660700 -0.355900 +-0.356500 0.864200 -0.355200 +0.000000 0.824500 0.565800 +-0.314800 0.762600 0.565100 +0.000000 0.000000 1.000000 +0.000000 0.824500 0.565800 +0.000000 0.917700 -0.397300 +-0.350000 0.848000 -0.398000 +-0.350000 0.848000 -0.398000 +-0.314800 0.762600 0.565100 +0.000000 0.824500 0.565800 +0.000000 0.917700 -0.397300 +0.000100 0.935300 -0.353900 +-0.356500 0.864200 -0.355200 +-0.356500 0.864200 -0.355200 +-0.350000 0.848000 -0.398000 +0.000000 0.917700 -0.397300 +0.000100 0.935300 -0.353900 +0.000100 0.780700 0.624900 +-0.298000 0.721100 0.625500 +-0.298000 0.721100 0.625500 +-0.356500 0.864200 -0.355200 +0.000100 0.935300 -0.353900 +0.314800 0.762600 0.565000 +0.000000 0.824500 0.565800 +0.000000 0.000000 1.000000 +0.314800 0.762600 0.565000 +0.350000 0.848000 -0.398000 +0.000000 0.917700 -0.397300 +0.000000 0.917700 -0.397300 +0.000000 0.824500 0.565800 +0.314800 0.762600 0.565000 +0.350000 0.848000 -0.398000 +0.356400 0.864100 -0.355300 +0.000100 0.935300 -0.353900 +0.000100 0.935300 -0.353900 +0.000000 0.917700 -0.397300 +0.350000 0.848000 -0.398000 +0.356400 0.864100 -0.355300 +0.297900 0.721000 0.625600 +0.000100 0.780700 0.624900 +0.000100 0.780700 0.624900 +0.000100 0.935300 -0.353900 +0.356400 0.864100 -0.355300 +0.583300 0.583400 0.565200 +0.314800 0.762600 0.565000 +0.000000 0.000000 1.000000 +0.583300 0.583400 0.565200 +0.648400 0.648500 -0.398700 +0.350000 0.848000 -0.398000 +0.350000 0.848000 -0.398000 +0.314800 0.762600 0.565000 +0.583300 0.583400 0.565200 +0.648400 0.648500 -0.398700 +0.660700 0.660900 -0.355900 +0.356400 0.864100 -0.355300 +0.356400 0.864100 -0.355300 +0.350000 0.848000 -0.398000 +0.648400 0.648500 -0.398700 +0.660700 0.660900 -0.355900 +0.551800 0.551900 0.625300 +0.297900 0.721000 0.625600 +0.297900 0.721000 0.625600 +0.356400 0.864100 -0.355300 +0.660700 0.660900 -0.355900 +0.762600 0.314800 0.565100 +0.583300 0.583400 0.565200 +0.000000 0.000000 1.000000 +0.762600 0.314800 0.565100 +0.848000 0.350000 -0.398000 +0.648400 0.648500 -0.398700 +0.648400 0.648500 -0.398700 +0.583300 0.583400 0.565200 +0.762600 0.314800 0.565100 +0.848000 0.350000 -0.398000 +0.864200 0.356500 -0.355200 +0.660700 0.660900 -0.355900 +0.660700 0.660900 -0.355900 +0.648400 0.648500 -0.398700 +0.848000 0.350000 -0.398000 +0.864200 0.356500 -0.355200 +0.721100 0.298000 0.625500 +0.551800 0.551900 0.625300 +0.551800 0.551900 0.625300 +0.660700 0.660900 -0.355900 +0.864200 0.356500 -0.355200 +0.824500 0.000000 0.565800 +0.762600 0.314800 0.565100 +0.000000 0.000000 1.000000 +0.824500 0.000000 0.565800 +0.917700 0.000000 -0.397300 +0.848000 0.350000 -0.398000 +0.848000 0.350000 -0.398000 +0.762600 0.314800 0.565100 +0.824500 0.000000 0.565800 +0.917700 0.000000 -0.397300 +0.935300 -0.000100 -0.353900 +0.864200 0.356500 -0.355200 +0.864200 0.356500 -0.355200 +0.848000 0.350000 -0.398000 +0.917700 0.000000 -0.397300 +0.935300 -0.000100 -0.353900 +0.780700 -0.000100 0.624900 +0.721100 0.298000 0.625500 +0.721100 0.298000 0.625500 +0.864200 0.356500 -0.355200 +0.935300 -0.000100 -0.353900 +0.721000 -0.297900 0.625600 +0.218000 -0.090200 0.971800 +0.236600 0.000000 0.971600 +0.236600 0.000000 0.971600 +0.780700 -0.000100 0.624900 +0.721000 -0.297900 0.625600 +0.218000 -0.090200 0.971800 +0.159600 -0.066000 0.985000 +0.173100 0.000000 0.984900 +0.173100 0.000000 0.984900 +0.236600 0.000000 0.971600 +0.218000 -0.090200 0.971800 +0.159600 -0.066000 0.985000 +0.350500 -0.144700 0.925300 +0.379700 0.000000 0.925100 +0.379700 0.000000 0.925100 +0.173100 0.000000 0.984900 +0.159600 -0.066000 0.985000 +0.350500 -0.144700 0.925300 +0.485600 -0.201500 0.850700 +0.526700 0.000000 0.850100 +0.526700 0.000000 0.850100 +0.379700 0.000000 0.925100 +0.350500 -0.144700 0.925300 +0.551900 -0.551800 0.625300 +0.166600 -0.166600 0.971800 +0.218000 -0.090200 0.971800 +0.218000 -0.090200 0.971800 +0.721000 -0.297900 0.625600 +0.551900 -0.551800 0.625300 +0.166600 -0.166600 0.971800 +0.121900 -0.121900 0.985000 +0.159600 -0.066000 0.985000 +0.159600 -0.066000 0.985000 +0.218000 -0.090200 0.971800 +0.166600 -0.166600 0.971800 +0.121900 -0.121900 0.985000 +0.267700 -0.267700 0.925600 +0.350500 -0.144700 0.925300 +0.350500 -0.144700 0.925300 +0.159600 -0.066000 0.985000 +0.121900 -0.121900 0.985000 +0.267700 -0.267700 0.925600 +0.371300 -0.371300 0.851000 +0.485600 -0.201500 0.850700 +0.485600 -0.201500 0.850700 +0.350500 -0.144700 0.925300 +0.267700 -0.267700 0.925600 +0.298000 -0.721100 0.625500 +0.090200 -0.218000 0.971800 +0.166600 -0.166600 0.971800 +0.166600 -0.166600 0.971800 +0.551900 -0.551800 0.625300 +0.298000 -0.721100 0.625500 +0.090200 -0.218000 0.971800 +0.066000 -0.159600 0.985000 +0.121900 -0.121900 0.985000 +0.121900 -0.121900 0.985000 +0.166600 -0.166600 0.971800 +0.090200 -0.218000 0.971800 +0.066000 -0.159600 0.985000 +0.144700 -0.350500 0.925300 +0.267700 -0.267700 0.925600 +0.267700 -0.267700 0.925600 +0.121900 -0.121900 0.985000 +0.066000 -0.159600 0.985000 +0.144700 -0.350500 0.925300 +0.201500 -0.485600 0.850700 +0.371300 -0.371300 0.851000 +0.371300 -0.371300 0.851000 +0.267700 -0.267700 0.925600 +0.144700 -0.350500 0.925300 +-0.000100 -0.780700 0.624900 +0.000000 -0.236600 0.971600 +0.090200 -0.218000 0.971800 +0.090200 -0.218000 0.971800 +0.298000 -0.721100 0.625500 +-0.000100 -0.780700 0.624900 +0.090200 -0.218000 0.971800 +0.000000 -0.236600 0.971600 +0.000000 -0.173100 0.984900 +0.000000 -0.173100 0.984900 +0.066000 -0.159600 0.985000 +0.090200 -0.218000 0.971800 +0.066000 -0.159600 0.985000 +0.000000 -0.173100 0.984900 +0.000000 -0.379700 0.925100 +0.000000 -0.379700 0.925100 +0.144700 -0.350500 0.925300 +0.066000 -0.159600 0.985000 +0.000000 -0.379700 0.925100 +0.000000 -0.526700 0.850100 +0.201500 -0.485600 0.850700 +0.201500 -0.485600 0.850700 +0.144700 -0.350500 0.925300 +0.000000 -0.379700 0.925100 +-0.297900 -0.721000 0.625600 +-0.090200 -0.218000 0.971800 +0.000000 -0.236600 0.971600 +0.000000 -0.236600 0.971600 +-0.000100 -0.780700 0.624900 +-0.297900 -0.721000 0.625600 +-0.090200 -0.218000 0.971800 +-0.066000 -0.159600 0.985000 +0.000000 -0.173100 0.984900 +0.000000 -0.173100 0.984900 +0.000000 -0.236600 0.971600 +-0.090200 -0.218000 0.971800 +-0.066000 -0.159600 0.985000 +-0.144700 -0.350500 0.925300 +0.000000 -0.379700 0.925100 +0.000000 -0.379700 0.925100 +0.000000 -0.173100 0.984900 +-0.066000 -0.159600 0.985000 +-0.144700 -0.350500 0.925300 +-0.201500 -0.485600 0.850700 +0.000000 -0.526700 0.850100 +0.000000 -0.526700 0.850100 +0.000000 -0.379700 0.925100 +-0.144700 -0.350500 0.925300 +-0.551800 -0.551900 0.625300 +-0.166600 -0.166600 0.971800 +-0.090200 -0.218000 0.971800 +-0.090200 -0.218000 0.971800 +-0.297900 -0.721000 0.625600 +-0.551800 -0.551900 0.625300 +-0.166600 -0.166600 0.971800 +-0.121900 -0.121900 0.985000 +-0.066000 -0.159600 0.985000 +-0.066000 -0.159600 0.985000 +-0.090200 -0.218000 0.971800 +-0.166600 -0.166600 0.971800 +-0.121900 -0.121900 0.985000 +-0.267700 -0.267700 0.925600 +-0.144700 -0.350500 0.925300 +-0.144700 -0.350500 0.925300 +-0.066000 -0.159600 0.985000 +-0.121900 -0.121900 0.985000 +-0.267700 -0.267700 0.925600 +-0.371300 -0.371300 0.851000 +-0.201500 -0.485600 0.850700 +-0.201500 -0.485600 0.850700 +-0.144700 -0.350500 0.925300 +-0.267700 -0.267700 0.925600 +-0.721100 -0.298000 0.625500 +-0.218000 -0.090200 0.971800 +-0.166600 -0.166600 0.971800 +-0.166600 -0.166600 0.971800 +-0.551800 -0.551900 0.625300 +-0.721100 -0.298000 0.625500 +-0.218000 -0.090200 0.971800 +-0.159600 -0.066000 0.985000 +-0.121900 -0.121900 0.985000 +-0.121900 -0.121900 0.985000 +-0.166600 -0.166600 0.971800 +-0.218000 -0.090200 0.971800 +-0.159600 -0.066000 0.985000 +-0.350500 -0.144700 0.925300 +-0.267700 -0.267700 0.925600 +-0.267700 -0.267700 0.925600 +-0.121900 -0.121900 0.985000 +-0.159600 -0.066000 0.985000 +-0.350500 -0.144700 0.925300 +-0.485600 -0.201500 0.850700 +-0.371300 -0.371300 0.851000 +-0.371300 -0.371300 0.851000 +-0.267700 -0.267700 0.925600 +-0.350500 -0.144700 0.925300 +-0.780700 0.000100 0.624900 +-0.236600 0.000000 0.971600 +-0.218000 -0.090200 0.971800 +-0.218000 -0.090200 0.971800 +-0.721100 -0.298000 0.625500 +-0.780700 0.000100 0.624900 +-0.218000 -0.090200 0.971800 +-0.236600 0.000000 0.971600 +-0.173100 0.000000 0.984900 +-0.173100 0.000000 0.984900 +-0.159600 -0.066000 0.985000 +-0.218000 -0.090200 0.971800 +-0.159600 -0.066000 0.985000 +-0.173100 0.000000 0.984900 +-0.379700 0.000000 0.925100 +-0.379700 0.000000 0.925100 +-0.350500 -0.144700 0.925300 +-0.159600 -0.066000 0.985000 +-0.379700 0.000000 0.925100 +-0.526700 0.000000 0.850100 +-0.485600 -0.201500 0.850700 +-0.485600 -0.201500 0.850700 +-0.350500 -0.144700 0.925300 +-0.379700 0.000000 0.925100 +-0.721000 0.297900 0.625600 +-0.218000 0.090200 0.971800 +-0.236600 0.000000 0.971600 +-0.236600 0.000000 0.971600 +-0.780700 0.000100 0.624900 +-0.721000 0.297900 0.625600 +-0.218000 0.090200 0.971800 +-0.159600 0.066000 0.985000 +-0.173100 0.000000 0.984900 +-0.173100 0.000000 0.984900 +-0.236600 0.000000 0.971600 +-0.218000 0.090200 0.971800 +-0.159600 0.066000 0.985000 +-0.350500 0.144700 0.925300 +-0.379700 0.000000 0.925100 +-0.379700 0.000000 0.925100 +-0.173100 0.000000 0.984900 +-0.159600 0.066000 0.985000 +-0.350500 0.144700 0.925300 +-0.485600 0.201500 0.850700 +-0.526700 0.000000 0.850100 +-0.526700 0.000000 0.850100 +-0.379700 0.000000 0.925100 +-0.350500 0.144700 0.925300 +-0.551900 0.551800 0.625300 +-0.166600 0.166600 0.971800 +-0.218000 0.090200 0.971800 +-0.218000 0.090200 0.971800 +-0.721000 0.297900 0.625600 +-0.551900 0.551800 0.625300 +-0.166600 0.166600 0.971800 +-0.121900 0.121900 0.985000 +-0.159600 0.066000 0.985000 +-0.159600 0.066000 0.985000 +-0.218000 0.090200 0.971800 +-0.166600 0.166600 0.971800 +-0.121900 0.121900 0.985000 +-0.267700 0.267700 0.925600 +-0.350500 0.144700 0.925300 +-0.350500 0.144700 0.925300 +-0.159600 0.066000 0.985000 +-0.121900 0.121900 0.985000 +-0.267700 0.267700 0.925600 +-0.371300 0.371300 0.851000 +-0.485600 0.201500 0.850700 +-0.485600 0.201500 0.850700 +-0.350500 0.144700 0.925300 +-0.267700 0.267700 0.925600 +-0.298000 0.721100 0.625500 +-0.090200 0.218000 0.971800 +-0.166600 0.166600 0.971800 +-0.166600 0.166600 0.971800 +-0.551900 0.551800 0.625300 +-0.298000 0.721100 0.625500 +-0.090200 0.218000 0.971800 +-0.066000 0.159600 0.985000 +-0.121900 0.121900 0.985000 +-0.121900 0.121900 0.985000 +-0.166600 0.166600 0.971800 +-0.090200 0.218000 0.971800 +-0.066000 0.159600 0.985000 +-0.144700 0.350500 0.925300 +-0.267700 0.267700 0.925600 +-0.267700 0.267700 0.925600 +-0.121900 0.121900 0.985000 +-0.066000 0.159600 0.985000 +-0.144700 0.350500 0.925300 +-0.201500 0.485600 0.850700 +-0.371300 0.371300 0.851000 +-0.371300 0.371300 0.851000 +-0.267700 0.267700 0.925600 +-0.144700 0.350500 0.925300 +0.000100 0.780700 0.624900 +0.000000 0.236600 0.971600 +-0.090200 0.218000 0.971800 +-0.090200 0.218000 0.971800 +-0.298000 0.721100 0.625500 +0.000100 0.780700 0.624900 +-0.090200 0.218000 0.971800 +0.000000 0.236600 0.971600 +0.000000 0.173100 0.984900 +0.000000 0.173100 0.984900 +-0.066000 0.159600 0.985000 +-0.090200 0.218000 0.971800 +-0.066000 0.159600 0.985000 +0.000000 0.173100 0.984900 +0.000000 0.379700 0.925100 +0.000000 0.379700 0.925100 +-0.144700 0.350500 0.925300 +-0.066000 0.159600 0.985000 +0.000000 0.379700 0.925100 +0.000000 0.526700 0.850100 +-0.201500 0.485600 0.850700 +-0.201500 0.485600 0.850700 +-0.144700 0.350500 0.925300 +0.000000 0.379700 0.925100 +0.297900 0.721000 0.625600 +0.090200 0.218000 0.971800 +0.000000 0.236600 0.971600 +0.000000 0.236600 0.971600 +0.000100 0.780700 0.624900 +0.297900 0.721000 0.625600 +0.090200 0.218000 0.971800 +0.066000 0.159600 0.985000 +0.000000 0.173100 0.984900 +0.000000 0.173100 0.984900 +0.000000 0.236600 0.971600 +0.090200 0.218000 0.971800 +0.066000 0.159600 0.985000 +0.144700 0.350500 0.925300 +0.000000 0.379700 0.925100 +0.000000 0.379700 0.925100 +0.000000 0.173100 0.984900 +0.066000 0.159600 0.985000 +0.144700 0.350500 0.925300 +0.201500 0.485600 0.850700 +0.000000 0.526700 0.850100 +0.000000 0.526700 0.850100 +0.000000 0.379700 0.925100 +0.144700 0.350500 0.925300 +0.551800 0.551900 0.625300 +0.166600 0.166600 0.971800 +0.090200 0.218000 0.971800 +0.090200 0.218000 0.971800 +0.297900 0.721000 0.625600 +0.551800 0.551900 0.625300 +0.166600 0.166600 0.971800 +0.121900 0.121900 0.985000 +0.066000 0.159600 0.985000 +0.066000 0.159600 0.985000 +0.090200 0.218000 0.971800 +0.166600 0.166600 0.971800 +0.121900 0.121900 0.985000 +0.267700 0.267700 0.925600 +0.144700 0.350500 0.925300 +0.144700 0.350500 0.925300 +0.066000 0.159600 0.985000 +0.121900 0.121900 0.985000 +0.267700 0.267700 0.925600 +0.371300 0.371300 0.851000 +0.201500 0.485600 0.850700 +0.201500 0.485600 0.850700 +0.144700 0.350500 0.925300 +0.267700 0.267700 0.925600 +0.721100 0.298000 0.625500 +0.218000 0.090200 0.971800 +0.166600 0.166600 0.971800 +0.166600 0.166600 0.971800 +0.551800 0.551900 0.625300 +0.721100 0.298000 0.625500 +0.218000 0.090200 0.971800 +0.159600 0.066000 0.985000 +0.121900 0.121900 0.985000 +0.121900 0.121900 0.985000 +0.166600 0.166600 0.971800 +0.218000 0.090200 0.971800 +0.159600 0.066000 0.985000 +0.350500 0.144700 0.925300 +0.267700 0.267700 0.925600 +0.267700 0.267700 0.925600 +0.121900 0.121900 0.985000 +0.159600 0.066000 0.985000 +0.350500 0.144700 0.925300 +0.485600 0.201500 0.850700 +0.371300 0.371300 0.851000 +0.371300 0.371300 0.851000 +0.267700 0.267700 0.925600 +0.350500 0.144700 0.925300 +0.780700 -0.000100 0.624900 +0.236600 0.000000 0.971600 +0.218000 0.090200 0.971800 +0.218000 0.090200 0.971800 +0.721100 0.298000 0.625500 +0.780700 -0.000100 0.624900 +0.218000 0.090200 0.971800 +0.236600 0.000000 0.971600 +0.173100 0.000000 0.984900 +0.173100 0.000000 0.984900 +0.159600 0.066000 0.985000 +0.218000 0.090200 0.971800 +0.159600 0.066000 0.985000 +0.173100 0.000000 0.984900 +0.379700 0.000000 0.925100 +0.379700 0.000000 0.925100 +0.350500 0.144700 0.925300 +0.159600 0.066000 0.985000 +0.379700 0.000000 0.925100 +0.526700 0.000000 0.850100 +0.485600 0.201500 0.850700 +0.485600 0.201500 0.850700 +0.350500 0.144700 0.925300 +0.379700 0.000000 0.925100 + + + + + + + + + + + +2.000000 2.000000 +1.750000 2.000000 +1.750000 1.975000 +2.000000 1.975000 +1.750000 1.950000 +2.000000 1.950000 +1.750000 1.925000 +2.000000 1.925000 +1.750000 1.900000 +2.000000 1.900000 +1.500000 2.000000 +1.500000 1.975000 +1.500000 1.950000 +1.500000 1.925000 +1.500000 1.900000 +1.250000 2.000000 +1.250000 1.975000 +1.250000 1.950000 +1.250000 1.925000 +1.250000 1.900000 +1.000000 2.000000 +1.000000 1.975000 +1.000000 1.950000 +1.000000 1.925000 +1.000000 1.900000 +0.750000 2.000000 +0.750000 1.975000 +0.750000 1.950000 +0.750000 1.925000 +0.750000 1.900000 +0.500000 2.000000 +0.500000 1.975000 +0.500000 1.950000 +0.500000 1.925000 +0.500000 1.900000 +0.250000 2.000000 +0.250000 1.975000 +0.250000 1.950000 +0.250000 1.925000 +0.250000 1.900000 +0.000000 2.000000 +0.000000 1.975000 +0.000000 1.950000 +0.000000 1.925000 +0.000000 1.900000 +1.750000 1.675000 +2.000000 1.675000 +1.750000 1.450000 +2.000000 1.450000 +1.750000 1.225000 +2.000000 1.225000 +1.750000 1.000000 +2.000000 1.000000 +1.500000 1.675000 +1.500000 1.450000 +1.500000 1.225000 +1.500000 1.000000 +1.250000 1.675000 +1.250000 1.450000 +1.250000 1.225000 +1.250000 1.000000 +1.000000 1.675000 +1.000000 1.450000 +1.000000 1.225000 +1.000000 1.000000 +0.750000 1.675000 +0.750000 1.450000 +0.750000 1.225000 +0.750000 1.000000 +0.500000 1.675000 +0.500000 1.450000 +0.500000 1.225000 +0.500000 1.000000 +0.250000 1.675000 +0.250000 1.450000 +0.250000 1.225000 +0.250000 1.000000 +0.000000 1.675000 +0.000000 1.450000 +0.000000 1.225000 +0.000000 1.000000 +1.750000 0.850000 +2.000000 0.850000 +1.750000 0.700000 +2.000000 0.700000 +1.750000 0.550000 +2.000000 0.550000 +1.750000 0.400000 +2.000000 0.400000 +1.500000 0.850000 +1.500000 0.700000 +1.500000 0.550000 +1.500000 0.400000 +1.250000 0.850000 +1.250000 0.700000 +1.250000 0.550000 +1.250000 0.400000 +1.000000 0.850000 +1.000000 0.700000 +1.000000 0.550000 +1.000000 0.400000 +0.750000 0.850000 +0.750000 0.700000 +0.750000 0.550000 +0.750000 0.400000 +0.500000 0.850000 +0.500000 0.700000 +0.500000 0.550000 +0.500000 0.400000 +0.250000 0.850000 +0.250000 0.700000 +0.250000 0.550000 +0.250000 0.400000 +0.000000 0.850000 +0.000000 0.700000 +0.000000 0.550000 +0.000000 0.400000 +1.750000 0.300000 +2.000000 0.300000 +1.750000 0.200000 +2.000000 0.200000 +1.750000 0.100000 +2.000000 0.100000 +1.750000 0.000000 +1.500000 0.300000 +1.500000 0.200000 +1.500000 0.100000 +1.500000 0.000000 +1.250000 0.300000 +1.250000 0.200000 +1.250000 0.100000 +1.250000 0.000000 +1.000000 0.300000 +1.000000 0.200000 +1.000000 0.100000 +1.000000 0.000000 +0.750000 0.300000 +0.750000 0.200000 +0.750000 0.100000 +0.750000 0.000000 +0.500000 0.300000 +0.500000 0.200000 +0.500000 0.100000 +0.500000 0.000000 +0.250000 0.300000 +0.250000 0.200000 +0.250000 0.100000 +0.250000 0.000000 +0.000000 0.300000 +0.000000 0.200000 +0.000000 0.100000 +0.000000 0.000000 +0.875000 1.000000 +0.875000 0.875000 +1.000000 0.875000 +0.875000 0.750000 +1.000000 0.750000 +0.875000 0.625000 +1.000000 0.625000 +0.875000 0.500000 +1.000000 0.500000 +0.750000 0.875000 +0.750000 0.750000 +0.750000 0.625000 +0.750000 0.500000 +0.625000 1.000000 +0.625000 0.875000 +0.625000 0.750000 +0.625000 0.625000 +0.625000 0.500000 +0.500000 0.875000 +0.500000 0.750000 +0.500000 0.625000 +0.500000 0.500000 +0.375000 1.000000 +0.375000 0.875000 +0.375000 0.750000 +0.375000 0.625000 +0.375000 0.500000 +0.250000 0.875000 +0.250000 0.750000 +0.250000 0.625000 +0.250000 0.500000 +0.125000 1.000000 +0.125000 0.875000 +0.125000 0.750000 +0.125000 0.625000 +0.125000 0.500000 +0.000000 0.875000 +0.000000 0.750000 +0.000000 0.625000 +0.000000 0.500000 +0.875000 0.375000 +1.000000 0.375000 +0.875000 0.250000 +1.000000 0.250000 +0.875000 0.125000 +1.000000 0.125000 +0.875000 0.000000 +0.750000 0.375000 +0.750000 0.250000 +0.750000 0.125000 +0.625000 0.375000 +0.625000 0.250000 +0.625000 0.125000 +0.625000 0.000000 +0.500000 0.375000 +0.500000 0.250000 +0.500000 0.125000 +0.375000 0.375000 +0.375000 0.250000 +0.375000 0.125000 +0.375000 0.000000 +0.250000 0.375000 +0.250000 0.250000 +0.250000 0.125000 +0.125000 0.375000 +0.125000 0.250000 +0.125000 0.125000 +0.125000 0.000000 +0.000000 0.375000 +0.000000 0.250000 +0.000000 0.125000 +0.625000 0.225000 +0.500000 0.225000 +0.625000 0.450000 +0.500000 0.450000 +0.625000 0.675000 +0.500000 0.675000 +0.625000 0.900000 +0.500000 0.900000 +0.750000 0.225000 +0.750000 0.450000 +0.750000 0.675000 +0.750000 0.900000 +0.875000 0.225000 +0.875000 0.450000 +0.875000 0.675000 +0.875000 0.900000 +1.000000 0.225000 +1.000000 0.450000 +1.000000 0.675000 +1.000000 0.900000 +0.125000 0.225000 +0.000000 0.225000 +0.125000 0.450000 +0.000000 0.450000 +0.125000 0.675000 +0.000000 0.675000 +0.125000 0.900000 +0.000000 0.900000 +0.250000 0.225000 +0.250000 0.450000 +0.250000 0.675000 +0.250000 0.900000 +0.375000 0.225000 +0.375000 0.450000 +0.375000 0.675000 +0.375000 0.900000 +0.625000 0.925000 +0.500000 0.925000 +0.625000 0.950000 +0.500000 0.950000 +0.625000 0.975000 +0.500000 0.975000 +0.750000 0.925000 +0.750000 0.950000 +0.750000 0.975000 +0.875000 0.925000 +0.875000 0.950000 +0.875000 0.975000 +1.000000 0.925000 +1.000000 0.950000 +1.000000 0.975000 +0.125000 0.925000 +0.000000 0.925000 +0.125000 0.950000 +0.000000 0.950000 +0.125000 0.975000 +0.000000 0.975000 +0.250000 0.925000 +0.250000 0.950000 +0.250000 0.975000 +0.375000 0.925000 +0.375000 0.950000 +0.375000 0.975000 + + + + + + + + + + + +

1 0 1 2 1 2 3 2 3 3 3 3 0 4 0 1 5 1 2 6 2 4 7 4 5 8 5 5 9 5 3 10 3 2 11 2 4 12 4 6 13 6 7 14 7 7 15 7 5 16 5 4 17 4 6 18 6 8 19 8 9 20 9 9 21 9 7 22 7 6 23 6 10 24 10 11 25 11 2 26 2 2 27 2 1 28 1 10 29 10 11 30 11 12 31 12 4 32 4 4 33 4 2 34 2 11 35 11 12 36 12 13 37 13 6 38 6 6 39 6 4 40 4 12 41 12 13 42 13 14 43 14 8 44 8 8 45 8 6 46 6 13 47 13 15 48 15 16 49 16 11 50 11 11 51 11 10 52 10 15 53 15 16 54 16 17 55 17 12 56 12 12 57 12 11 58 11 16 59 16 17 60 17 18 61 18 13 62 13 13 63 13 12 64 12 17 65 17 18 66 18 19 67 19 14 68 14 14 69 14 13 70 13 18 71 18 20 72 20 21 73 21 16 74 16 16 75 16 15 76 15 20 77 20 21 78 21 22 79 22 17 80 17 17 81 17 16 82 16 21 83 21 22 84 22 23 85 23 18 86 18 18 87 18 17 88 17 22 89 22 23 90 23 24 91 24 19 92 19 19 93 19 18 94 18 23 95 23 20 96 20 25 97 25 26 98 26 26 99 26 21 100 21 20 101 20 21 102 21 26 103 26 27 104 27 27 105 27 22 106 22 21 107 21 22 108 22 27 109 27 28 110 28 28 111 28 23 112 23 22 113 22 28 114 28 29 115 29 24 116 24 24 117 24 23 118 23 28 119 28 25 120 25 30 121 30 31 122 31 31 123 31 26 124 26 25 125 25 26 126 26 31 127 31 32 128 32 32 129 32 27 130 27 26 131 26 27 132 27 32 133 32 33 134 33 33 135 33 28 136 28 27 137 27 33 138 33 34 139 34 29 140 29 29 141 29 28 142 28 33 143 33 30 144 30 35 145 35 36 146 36 36 147 36 31 148 31 30 149 30 31 150 31 36 151 36 37 152 37 37 153 37 32 154 32 31 155 31 32 156 32 37 157 37 38 158 38 38 159 38 33 160 33 32 161 32 38 162 38 39 163 39 34 164 34 34 165 34 33 166 33 38 167 38 40 168 40 41 169 41 36 170 36 36 171 36 35 172 35 40 173 40 41 174 41 42 175 42 37 176 37 37 177 37 36 178 36 41 179 41 42 180 42 43 181 43 38 182 38 38 183 38 37 184 37 42 185 42 43 186 43 44 187 44 39 188 39 39 189 39 38 190 38 43 191 43 45 192 1 46 193 2 41 194 3 41 195 3 40 196 0 45 197 1 46 198 2 47 199 4 42 200 5 42 201 5 41 202 3 46 203 2 47 204 4 48 205 6 43 206 7 43 207 7 42 208 5 47 209 4 48 210 6 49 211 8 44 212 9 44 213 9 43 214 7 48 215 6 50 216 10 51 217 11 46 218 2 46 219 2 45 220 1 50 221 10 51 222 11 52 223 12 47 224 4 47 225 4 46 226 2 51 227 11 52 228 12 53 229 13 48 230 6 48 231 6 47 232 4 52 233 12 53 234 13 54 235 14 49 236 8 49 237 8 48 238 6 53 239 13 55 240 15 56 241 16 51 242 11 51 243 11 50 244 10 55 245 15 56 246 16 57 247 17 52 248 12 52 249 12 51 250 11 56 251 16 57 252 17 58 253 18 53 254 13 53 255 13 52 256 12 57 257 17 58 258 18 59 259 19 54 260 14 54 261 14 53 262 13 58 263 18 60 264 20 61 265 21 56 266 16 56 267 16 55 268 15 60 269 20 61 270 21 62 271 22 57 272 17 57 273 17 56 274 16 61 275 21 62 276 22 63 277 23 58 278 18 58 279 18 57 280 17 62 281 22 63 282 23 64 283 24 59 284 19 59 285 19 58 286 18 63 287 23 65 288 25 66 289 26 61 290 21 61 291 21 60 292 20 65 293 25 66 294 26 67 295 27 62 296 22 62 297 22 61 298 21 66 299 26 67 300 27 68 301 28 63 302 23 63 303 23 62 304 22 67 305 27 68 306 28 69 307 29 64 308 24 64 309 24 63 310 23 68 311 28 70 312 30 71 313 31 66 314 26 66 315 26 65 316 25 70 317 30 71 318 31 72 319 32 67 320 27 67 321 27 66 322 26 71 323 31 72 324 32 73 325 33 68 326 28 68 327 28 67 328 27 72 329 32 73 330 33 74 331 34 69 332 29 69 333 29 68 334 28 73 335 33 75 336 35 76 337 36 71 338 31 71 339 31 70 340 30 75 341 35 76 342 36 77 343 37 72 344 32 72 345 32 71 346 31 76 347 36 77 348 37 78 349 38 73 350 33 73 351 33 72 352 32 77 353 37 78 354 38 79 355 39 74 356 34 74 357 34 73 358 33 78 359 38 0 360 40 3 361 41 76 362 36 76 363 36 75 364 35 0 365 40 3 366 41 5 367 42 77 368 37 77 369 37 76 370 36 3 371 41 5 372 42 7 373 43 78 374 38 78 375 38 77 376 37 5 377 42 7 378 43 9 379 44 79 380 39 79 381 39 78 382 38 7 383 43 8 384 8 80 385 45 81 386 46 81 387 46 9 388 9 8 389 8 80 390 45 82 391 47 83 392 48 83 393 48 81 394 46 80 395 45 82 396 47 84 397 49 85 398 50 85 399 50 83 400 48 82 401 47 84 402 49 86 403 51 87 404 52 87 405 52 85 406 50 84 407 49 14 408 14 88 409 53 80 410 45 80 411 45 8 412 8 14 413 14 88 414 53 89 415 54 82 416 47 82 417 47 80 418 45 88 419 53 89 420 54 90 421 55 84 422 49 84 423 49 82 424 47 89 425 54 90 426 55 91 427 56 86 428 51 86 429 51 84 430 49 90 431 55 19 432 19 92 433 57 88 434 53 88 435 53 14 436 14 19 437 19 92 438 57 93 439 58 89 440 54 89 441 54 88 442 53 92 443 57 93 444 58 94 445 59 90 446 55 90 447 55 89 448 54 93 449 58 94 450 59 95 451 60 91 452 56 91 453 56 90 454 55 94 455 59 24 456 24 96 457 61 92 458 57 92 459 57 19 460 19 24 461 24 96 462 61 97 463 62 93 464 58 93 465 58 92 466 57 96 467 61 97 468 62 98 469 63 94 470 59 94 471 59 93 472 58 97 473 62 98 474 63 99 475 64 95 476 60 95 477 60 94 478 59 98 479 63 29 480 29 100 481 65 96 482 61 96 483 61 24 484 24 29 485 29 100 486 65 101 487 66 97 488 62 97 489 62 96 490 61 100 491 65 101 492 66 102 493 67 98 494 63 98 495 63 97 496 62 101 497 66 102 498 67 103 499 68 99 500 64 99 501 64 98 502 63 102 503 67 34 504 34 104 505 69 100 506 65 100 507 65 29 508 29 34 509 34 104 510 69 105 511 70 101 512 66 101 513 66 100 514 65 104 515 69 105 516 70 106 517 71 102 518 67 102 519 67 101 520 66 105 521 70 106 522 71 107 523 72 103 524 68 103 525 68 102 526 67 106 527 71 39 528 39 108 529 73 104 530 69 104 531 69 34 532 34 39 533 39 108 534 73 109 535 74 105 536 70 105 537 70 104 538 69 108 539 73 109 540 74 110 541 75 106 542 71 106 543 71 105 544 70 109 545 74 110 546 75 111 547 76 107 548 72 107 549 72 106 550 71 110 551 75 44 552 44 112 553 77 108 554 73 108 555 73 39 556 39 44 557 44 112 558 77 113 559 78 109 560 74 109 561 74 108 562 73 112 563 77 113 564 78 114 565 79 110 566 75 110 567 75 109 568 74 113 569 78 114 570 79 115 571 80 111 572 76 111 573 76 110 574 75 114 575 79 49 576 8 116 577 45 112 578 46 112 579 46 44 580 9 49 581 8 116 582 45 117 583 47 113 584 48 113 585 48 112 586 46 116 587 45 117 588 47 118 589 49 114 590 50 114 591 50 113 592 48 117 593 47 118 594 49 119 595 51 115 596 52 115 597 52 114 598 50 118 599 49 54 600 14 120 601 53 116 602 45 116 603 45 49 604 8 54 605 14 120 606 53 121 607 54 117 608 47 117 609 47 116 610 45 120 611 53 121 612 54 122 613 55 118 614 49 118 615 49 117 616 47 121 617 54 122 618 55 123 619 56 119 620 51 119 621 51 118 622 49 122 623 55 59 624 19 124 625 57 120 626 53 120 627 53 54 628 14 59 629 19 124 630 57 125 631 58 121 632 54 121 633 54 120 634 53 124 635 57 125 636 58 126 637 59 122 638 55 122 639 55 121 640 54 125 641 58 126 642 59 127 643 60 123 644 56 123 645 56 122 646 55 126 647 59 64 648 24 128 649 61 124 650 57 124 651 57 59 652 19 64 653 24 128 654 61 129 655 62 125 656 58 125 657 58 124 658 57 128 659 61 129 660 62 130 661 63 126 662 59 126 663 59 125 664 58 129 665 62 130 666 63 131 667 64 127 668 60 127 669 60 126 670 59 130 671 63 69 672 29 132 673 65 128 674 61 128 675 61 64 676 24 69 677 29 132 678 65 133 679 66 129 680 62 129 681 62 128 682 61 132 683 65 133 684 66 134 685 67 130 686 63 130 687 63 129 688 62 133 689 66 134 690 67 135 691 68 131 692 64 131 693 64 130 694 63 134 695 67 74 696 34 136 697 69 132 698 65 132 699 65 69 700 29 74 701 34 136 702 69 137 703 70 133 704 66 133 705 66 132 706 65 136 707 69 137 708 70 138 709 71 134 710 67 134 711 67 133 712 66 137 713 70 138 714 71 139 715 72 135 716 68 135 717 68 134 718 67 138 719 71 79 720 39 140 721 73 136 722 69 136 723 69 74 724 34 79 725 39 140 726 73 141 727 74 137 728 70 137 729 70 136 730 69 140 731 73 141 732 74 142 733 75 138 734 71 138 735 71 137 736 70 141 737 74 142 738 75 143 739 76 139 740 72 139 741 72 138 742 71 142 743 75 9 744 44 81 745 77 140 746 73 140 747 73 79 748 39 9 749 44 81 750 77 83 751 78 141 752 74 141 753 74 140 754 73 81 755 77 83 756 78 85 757 79 142 758 75 142 759 75 141 760 74 83 761 78 85 762 79 87 763 80 143 764 76 143 765 76 142 766 75 85 767 79 86 768 51 144 769 81 145 770 82 145 771 82 87 772 52 86 773 51 144 774 81 146 775 83 147 776 84 147 777 84 145 778 82 144 779 81 146 780 83 148 781 85 149 782 86 149 783 86 147 784 84 146 785 83 148 786 85 150 787 87 151 788 88 151 789 88 149 790 86 148 791 85 91 792 56 152 793 89 144 794 81 144 795 81 86 796 51 91 797 56 152 798 89 153 799 90 146 800 83 146 801 83 144 802 81 152 803 89 153 804 90 154 805 91 148 806 85 148 807 85 146 808 83 153 809 90 154 810 91 155 811 92 150 812 87 150 813 87 148 814 85 154 815 91 95 816 60 156 817 93 152 818 89 152 819 89 91 820 56 95 821 60 156 822 93 157 823 94 153 824 90 153 825 90 152 826 89 156 827 93 157 828 94 158 829 95 154 830 91 154 831 91 153 832 90 157 833 94 158 834 95 159 835 96 155 836 92 155 837 92 154 838 91 158 839 95 99 840 64 160 841 97 156 842 93 156 843 93 95 844 60 99 845 64 160 846 97 161 847 98 157 848 94 157 849 94 156 850 93 160 851 97 161 852 98 162 853 99 158 854 95 158 855 95 157 856 94 161 857 98 162 858 99 163 859 100 159 860 96 159 861 96 158 862 95 162 863 99 103 864 68 164 865 101 160 866 97 160 867 97 99 868 64 103 869 68 164 870 101 165 871 102 161 872 98 161 873 98 160 874 97 164 875 101 165 876 102 166 877 103 162 878 99 162 879 99 161 880 98 165 881 102 166 882 103 167 883 104 163 884 100 163 885 100 162 886 99 166 887 103 107 888 72 168 889 105 164 890 101 164 891 101 103 892 68 107 893 72 168 894 105 169 895 106 165 896 102 165 897 102 164 898 101 168 899 105 169 900 106 170 901 107 166 902 103 166 903 103 165 904 102 169 905 106 170 906 107 171 907 108 167 908 104 167 909 104 166 910 103 170 911 107 111 912 76 172 913 109 168 914 105 168 915 105 107 916 72 111 917 76 172 918 109 173 919 110 169 920 106 169 921 106 168 922 105 172 923 109 173 924 110 174 925 111 170 926 107 170 927 107 169 928 106 173 929 110 174 930 111 175 931 112 171 932 108 171 933 108 170 934 107 174 935 111 115 936 80 176 937 113 172 938 109 172 939 109 111 940 76 115 941 80 176 942 113 177 943 114 173 944 110 173 945 110 172 946 109 176 947 113 177 948 114 178 949 115 174 950 111 174 951 111 173 952 110 177 953 114 178 954 115 179 955 116 175 956 112 175 957 112 174 958 111 178 959 115 119 960 51 180 961 81 176 962 82 176 963 82 115 964 52 119 965 51 180 966 81 181 967 83 177 968 84 177 969 84 176 970 82 180 971 81 181 972 83 182 973 85 178 974 86 178 975 86 177 976 84 181 977 83 182 978 85 183 979 87 179 980 88 179 981 88 178 982 86 182 983 85 123 984 56 184 985 89 180 986 81 180 987 81 119 988 51 123 989 56 184 990 89 185 991 90 181 992 83 181 993 83 180 994 81 184 995 89 185 996 90 186 997 91 182 998 85 182 999 85 181 1000 83 185 1001 90 186 1002 91 187 1003 92 183 1004 87 183 1005 87 182 1006 85 186 1007 91 127 1008 60 188 1009 93 184 1010 89 184 1011 89 123 1012 56 127 1013 60 188 1014 93 189 1015 94 185 1016 90 185 1017 90 184 1018 89 188 1019 93 189 1020 94 190 1021 95 186 1022 91 186 1023 91 185 1024 90 189 1025 94 190 1026 95 191 1027 96 187 1028 92 187 1029 92 186 1030 91 190 1031 95 131 1032 64 192 1033 97 188 1034 93 188 1035 93 127 1036 60 131 1037 64 192 1038 97 193 1039 98 189 1040 94 189 1041 94 188 1042 93 192 1043 97 193 1044 98 194 1045 99 190 1046 95 190 1047 95 189 1048 94 193 1049 98 194 1050 99 195 1051 100 191 1052 96 191 1053 96 190 1054 95 194 1055 99 135 1056 68 196 1057 101 192 1058 97 192 1059 97 131 1060 64 135 1061 68 196 1062 101 197 1063 102 193 1064 98 193 1065 98 192 1066 97 196 1067 101 197 1068 102 198 1069 103 194 1070 99 194 1071 99 193 1072 98 197 1073 102 198 1074 103 199 1075 104 195 1076 100 195 1077 100 194 1078 99 198 1079 103 139 1080 72 200 1081 105 196 1082 101 196 1083 101 135 1084 68 139 1085 72 200 1086 105 201 1087 106 197 1088 102 197 1089 102 196 1090 101 200 1091 105 201 1092 106 202 1093 107 198 1094 103 198 1095 103 197 1096 102 201 1097 106 202 1098 107 203 1099 108 199 1100 104 199 1101 104 198 1102 103 202 1103 107 143 1104 76 204 1105 109 200 1106 105 200 1107 105 139 1108 72 143 1109 76 204 1110 109 205 1111 110 201 1112 106 201 1113 106 200 1114 105 204 1115 109 205 1116 110 206 1117 111 202 1118 107 202 1119 107 201 1120 106 205 1121 110 206 1122 111 207 1123 112 203 1124 108 203 1125 108 202 1126 107 206 1127 111 87 1128 80 145 1129 113 204 1130 109 204 1131 109 143 1132 76 87 1133 80 145 1134 113 147 1135 114 205 1136 110 205 1137 110 204 1138 109 145 1139 113 147 1140 114 149 1141 115 206 1142 111 206 1143 111 205 1144 110 147 1145 114 149 1146 115 151 1147 116 207 1148 112 207 1149 112 206 1150 111 149 1151 115 150 1152 87 208 1153 117 209 1154 118 209 1155 118 151 1156 88 150 1157 87 208 1158 117 210 1159 119 211 1160 120 211 1161 120 209 1162 118 208 1163 117 211 1164 120 210 1165 119 212 1166 121 212 1167 121 213 1168 122 211 1169 120 213 1170 122 212 1171 121 214 1172 123 155 1173 92 215 1174 124 208 1175 117 208 1176 117 150 1177 87 155 1178 92 215 1179 124 216 1180 125 210 1181 119 210 1182 119 208 1183 117 215 1184 124 216 1185 125 217 1186 126 212 1187 121 212 1188 121 210 1189 119 216 1190 125 212 1191 121 217 1192 126 214 1193 127 159 1194 96 218 1195 128 215 1196 124 215 1197 124 155 1198 92 159 1199 96 218 1200 128 219 1201 129 216 1202 125 216 1203 125 215 1204 124 218 1205 128 219 1206 129 220 1207 130 217 1208 126 217 1209 126 216 1210 125 219 1211 129 217 1212 126 220 1213 130 214 1214 131 163 1215 100 221 1216 132 218 1217 128 218 1218 128 159 1219 96 163 1220 100 221 1221 132 222 1222 133 219 1223 129 219 1224 129 218 1225 128 221 1226 132 222 1227 133 223 1228 134 220 1229 130 220 1230 130 219 1231 129 222 1232 133 220 1233 130 223 1234 134 214 1235 135 167 1236 104 224 1237 136 221 1238 132 221 1239 132 163 1240 100 167 1241 104 224 1242 136 225 1243 137 222 1244 133 222 1245 133 221 1246 132 224 1247 136 222 1248 133 225 1249 137 226 1250 138 226 1251 138 223 1252 134 222 1253 133 223 1254 134 226 1255 138 214 1256 139 171 1257 108 227 1258 140 224 1259 136 224 1260 136 167 1261 104 171 1262 108 227 1263 140 228 1264 141 225 1265 137 225 1266 137 224 1267 136 227 1268 140 228 1269 141 229 1270 142 226 1271 138 226 1272 138 225 1273 137 228 1274 141 226 1275 138 229 1276 142 214 1277 143 175 1278 112 230 1279 144 227 1280 140 227 1281 140 171 1282 108 175 1283 112 230 1284 144 231 1285 145 228 1286 141 228 1287 141 227 1288 140 230 1289 144 231 1290 145 232 1291 146 229 1292 142 229 1293 142 228 1294 141 231 1295 145 229 1296 142 232 1297 146 214 1298 147 179 1299 116 233 1300 148 230 1301 144 230 1302 144 175 1303 112 179 1304 116 233 1305 148 234 1306 149 231 1307 145 231 1308 145 230 1309 144 233 1310 148 234 1311 149 235 1312 150 232 1313 146 232 1314 146 231 1315 145 234 1316 149 232 1317 146 235 1318 150 214 1319 151 183 1320 87 236 1321 117 233 1322 118 233 1323 118 179 1324 88 183 1325 87 236 1326 117 237 1327 119 234 1328 120 234 1329 120 233 1330 118 236 1331 117 234 1332 120 237 1333 119 238 1334 121 238 1335 121 235 1336 122 234 1337 120 235 1338 122 238 1339 121 214 1340 123 187 1341 92 239 1342 124 236 1343 117 236 1344 117 183 1345 87 187 1346 92 239 1347 124 240 1348 125 237 1349 119 237 1350 119 236 1351 117 239 1352 124 240 1353 125 241 1354 126 238 1355 121 238 1356 121 237 1357 119 240 1358 125 238 1359 121 241 1360 126 214 1361 127 191 1362 96 242 1363 128 239 1364 124 239 1365 124 187 1366 92 191 1367 96 242 1368 128 243 1369 129 240 1370 125 240 1371 125 239 1372 124 242 1373 128 243 1374 129 244 1375 130 241 1376 126 241 1377 126 240 1378 125 243 1379 129 241 1380 126 244 1381 130 214 1382 131 195 1383 100 245 1384 132 242 1385 128 242 1386 128 191 1387 96 195 1388 100 245 1389 132 246 1390 133 243 1391 129 243 1392 129 242 1393 128 245 1394 132 246 1395 133 247 1396 134 244 1397 130 244 1398 130 243 1399 129 246 1400 133 244 1401 130 247 1402 134 214 1403 135 199 1404 104 248 1405 136 245 1406 132 245 1407 132 195 1408 100 199 1409 104 248 1410 136 249 1411 137 246 1412 133 246 1413 133 245 1414 132 248 1415 136 246 1416 133 249 1417 137 250 1418 138 250 1419 138 247 1420 134 246 1421 133 247 1422 134 250 1423 138 214 1424 139 203 1425 108 251 1426 140 248 1427 136 248 1428 136 199 1429 104 203 1430 108 251 1431 140 252 1432 141 249 1433 137 249 1434 137 248 1435 136 251 1436 140 252 1437 141 253 1438 142 250 1439 138 250 1440 138 249 1441 137 252 1442 141 250 1443 138 253 1444 142 214 1445 143 207 1446 112 254 1447 144 251 1448 140 251 1449 140 203 1450 108 207 1451 112 254 1452 144 255 1453 145 252 1454 141 252 1455 141 251 1456 140 254 1457 144 255 1458 145 256 1459 146 253 1460 142 253 1461 142 252 1462 141 255 1463 145 253 1464 142 256 1465 146 214 1466 147 151 1467 116 209 1468 148 254 1469 144 254 1470 144 207 1471 112 151 1472 116 209 1473 148 211 1474 149 255 1475 145 255 1476 145 254 1477 144 209 1478 148 211 1479 149 213 1480 150 256 1481 146 256 1482 146 255 1483 145 211 1484 149 256 1485 146 213 1486 150 214 1487 151 258 1488 152 259 1489 153 260 1490 154 260 1491 154 257 1492 64 258 1493 152 259 1494 153 261 1495 155 262 1496 156 262 1497 156 260 1498 154 259 1499 153 261 1500 155 263 1501 157 264 1502 158 264 1503 158 262 1504 156 261 1505 155 263 1506 157 265 1507 159 266 1508 160 266 1509 160 264 1510 158 263 1511 157 258 1512 152 267 1513 68 268 1514 161 268 1515 161 259 1516 153 258 1517 152 268 1518 161 269 1519 162 261 1520 155 261 1521 155 259 1522 153 268 1523 161 269 1524 162 270 1525 163 263 1526 157 263 1527 157 261 1528 155 269 1529 162 270 1530 163 271 1531 164 265 1532 159 265 1533 159 263 1534 157 270 1535 163 267 1536 68 272 1537 165 273 1538 166 273 1539 166 268 1540 161 267 1541 68 273 1542 166 274 1543 167 269 1544 162 269 1545 162 268 1546 161 273 1547 166 274 1548 167 275 1549 168 270 1550 163 270 1551 163 269 1552 162 274 1553 167 275 1554 168 276 1555 169 271 1556 164 271 1557 164 270 1558 163 275 1559 168 277 1560 72 278 1561 170 273 1562 166 273 1563 166 272 1564 165 277 1565 72 278 1566 170 279 1567 171 274 1568 167 274 1569 167 273 1570 166 278 1571 170 279 1572 171 280 1573 172 275 1574 168 275 1575 168 274 1576 167 279 1577 171 280 1578 172 281 1579 173 276 1580 169 276 1581 169 275 1582 168 280 1583 172 282 1584 174 283 1585 175 278 1586 170 278 1587 170 277 1588 72 282 1589 174 278 1590 170 283 1591 175 284 1592 176 284 1593 176 279 1594 171 278 1595 170 279 1596 171 284 1597 176 285 1598 177 285 1599 177 280 1600 172 279 1601 171 280 1602 172 285 1603 177 286 1604 178 286 1605 178 281 1606 173 280 1607 172 287 1608 76 288 1609 179 283 1610 175 283 1611 175 282 1612 174 287 1613 76 283 1614 175 288 1615 179 289 1616 180 289 1617 180 284 1618 176 283 1619 175 284 1620 176 289 1621 180 290 1622 181 290 1623 181 285 1624 177 284 1625 176 285 1626 177 290 1627 181 291 1628 182 291 1629 182 286 1630 178 285 1631 177 292 1632 183 293 1633 184 288 1634 179 288 1635 179 287 1636 76 292 1637 183 288 1638 179 293 1639 184 294 1640 185 294 1641 185 289 1642 180 288 1643 179 289 1644 180 294 1645 185 295 1646 186 295 1647 186 290 1648 181 289 1649 180 290 1650 181 295 1651 186 296 1652 187 296 1653 187 291 1654 182 290 1655 181 257 1656 80 260 1657 188 293 1658 184 293 1659 184 292 1660 183 257 1661 80 293 1662 184 260 1663 188 262 1664 189 262 1665 189 294 1666 185 293 1667 184 294 1668 185 262 1669 189 264 1670 190 264 1671 190 295 1672 186 294 1673 185 295 1674 186 264 1675 190 266 1676 191 266 1677 191 296 1678 187 295 1679 186 265 1680 159 297 1681 192 298 1682 193 298 1683 193 266 1684 160 265 1685 159 297 1686 192 299 1687 194 300 1688 195 300 1689 195 298 1690 193 297 1691 192 299 1692 194 301 1693 196 302 1694 197 302 1695 197 300 1696 195 299 1697 194 301 1698 196 303 1699 198 115 1700 135 115 1701 135 302 1702 197 301 1703 196 271 1704 164 304 1705 199 297 1706 192 297 1707 192 265 1708 159 271 1709 164 304 1710 199 305 1711 200 299 1712 194 299 1713 194 297 1714 192 304 1715 199 305 1716 200 306 1717 201 301 1718 196 301 1719 196 299 1720 194 305 1721 200 306 1722 201 307 1723 139 303 1724 198 303 1725 198 301 1726 196 306 1727 201 276 1728 169 308 1729 202 304 1730 199 304 1731 199 271 1732 164 276 1733 169 308 1734 202 309 1735 203 305 1736 200 305 1737 200 304 1738 199 308 1739 202 309 1740 203 310 1741 204 306 1742 201 306 1743 201 305 1744 200 309 1745 203 310 1746 204 311 1747 205 307 1748 139 307 1749 139 306 1750 201 310 1751 204 281 1752 173 312 1753 206 308 1754 202 308 1755 202 276 1756 169 281 1757 173 312 1758 206 313 1759 207 309 1760 203 309 1761 203 308 1762 202 312 1763 206 313 1764 207 314 1765 208 310 1766 204 310 1767 204 309 1768 203 313 1769 207 314 1770 208 315 1771 143 311 1772 205 311 1773 205 310 1774 204 314 1775 208 286 1776 178 316 1777 209 312 1778 206 312 1779 206 281 1780 173 286 1781 178 312 1782 206 316 1783 209 317 1784 210 317 1785 210 313 1786 207 312 1787 206 313 1788 207 317 1789 210 318 1790 211 318 1791 211 314 1792 208 313 1793 207 314 1794 208 318 1795 211 319 1796 212 319 1797 212 315 1798 143 314 1799 208 286 1800 178 291 1801 182 320 1802 213 320 1803 213 316 1804 209 286 1805 178 316 1806 209 320 1807 213 321 1808 214 321 1809 214 317 1810 210 316 1811 209 317 1812 210 321 1813 214 322 1814 215 322 1815 215 318 1816 211 317 1817 210 318 1818 211 322 1819 215 323 1820 147 323 1821 147 319 1822 212 318 1823 211 291 1824 182 296 1825 187 324 1826 216 324 1827 216 320 1828 213 291 1829 182 320 1830 213 324 1831 216 325 1832 217 325 1833 217 321 1834 214 320 1835 213 321 1836 214 325 1837 217 326 1838 218 326 1839 218 322 1840 215 321 1841 214 322 1842 215 326 1843 218 327 1844 219 327 1845 219 323 1846 147 322 1847 215 296 1848 187 266 1849 191 298 1850 220 298 1851 220 324 1852 216 296 1853 187 324 1854 216 298 1855 220 300 1856 221 300 1857 221 325 1858 217 324 1859 216 325 1860 217 300 1861 221 302 1862 222 302 1863 222 326 1864 218 325 1865 217 326 1866 218 302 1867 222 115 1868 151 115 1869 151 327 1870 219 326 1871 218 328 1872 143 329 1873 205 330 1874 223 330 1875 223 331 1876 224 328 1877 143 331 1878 224 330 1879 223 332 1880 225 332 1881 225 333 1882 226 331 1883 224 333 1884 226 332 1885 225 334 1886 227 334 1887 227 335 1888 228 333 1889 226 334 1890 227 336 1891 229 337 1892 230 337 1893 230 335 1894 228 334 1895 227 329 1896 205 338 1897 139 339 1898 231 339 1899 231 330 1900 223 329 1901 205 330 1902 223 339 1903 231 340 1904 232 340 1905 232 332 1906 225 330 1907 223 332 1908 225 340 1909 232 341 1910 233 341 1911 233 334 1912 227 332 1913 225 341 1914 233 342 1915 234 336 1916 229 336 1917 229 334 1918 227 341 1919 233 338 1920 139 343 1921 198 344 1922 235 344 1923 235 339 1924 231 338 1925 139 339 1926 231 344 1927 235 345 1928 236 345 1929 236 340 1930 232 339 1931 231 340 1932 232 345 1933 236 346 1934 237 346 1935 237 341 1936 233 340 1937 232 346 1938 237 347 1939 238 342 1940 234 342 1941 234 341 1942 233 346 1943 237 343 1944 198 348 1945 135 349 1946 239 349 1947 239 344 1948 235 343 1949 198 344 1950 235 349 1951 239 350 1952 240 350 1953 240 345 1954 236 344 1955 235 345 1956 236 350 1957 240 351 1958 241 351 1959 241 346 1960 237 345 1961 236 351 1962 241 352 1963 242 347 1964 238 347 1965 238 346 1966 237 351 1967 241 353 1968 219 354 1969 243 349 1970 244 349 1971 244 348 1972 151 353 1973 219 354 1974 243 355 1975 245 350 1976 246 350 1977 246 349 1978 244 354 1979 243 355 1980 245 356 1981 247 351 1982 248 351 1983 248 350 1984 246 355 1985 245 351 1986 248 356 1987 247 357 1988 249 357 1989 249 352 1990 250 351 1991 248 358 1992 147 359 1993 251 354 1994 243 354 1995 243 353 1996 219 358 1997 147 359 1998 251 360 1999 252 355 2000 245 355 2001 245 354 2002 243 359 2003 251 360 2004 252 361 2005 253 356 2006 247 356 2007 247 355 2008 245 360 2009 252 356 2010 247 361 2011 253 362 2012 254 362 2013 254 357 2014 249 356 2015 247 363 2016 212 364 2017 255 359 2018 251 359 2019 251 358 2020 147 363 2021 212 364 2022 255 365 2023 256 360 2024 252 360 2025 252 359 2026 251 364 2027 255 365 2028 256 366 2029 257 361 2030 253 361 2031 253 360 2032 252 365 2033 256 361 2034 253 366 2035 257 367 2036 258 367 2037 258 362 2038 254 361 2039 253 328 2040 143 331 2041 224 364 2042 255 364 2043 255 363 2044 212 328 2045 143 331 2046 224 333 2047 226 365 2048 256 365 2049 256 364 2050 255 331 2051 224 333 2052 226 335 2053 228 366 2054 257 366 2055 257 365 2056 256 333 2057 226 366 2058 257 335 2059 228 337 2060 230 337 2061 230 367 2062 258 366 2063 257 336 2064 229 368 2065 259 369 2066 260 369 2067 260 337 2068 230 336 2069 229 368 2070 259 370 2071 261 371 2072 262 371 2073 262 369 2074 260 368 2075 259 371 2076 262 370 2077 261 372 2078 263 372 2079 263 373 2080 264 371 2081 262 373 2082 264 372 2083 263 374 2084 165 374 2085 165 375 2086 72 373 2087 264 342 2088 234 376 2089 265 368 2090 259 368 2091 259 336 2092 229 342 2093 234 376 2094 265 377 2095 266 370 2096 261 370 2097 261 368 2098 259 376 2099 265 370 2100 261 377 2101 266 378 2102 267 378 2103 267 372 2104 263 370 2105 261 372 2106 263 378 2107 267 379 2108 68 379 2109 68 374 2110 165 372 2111 263 347 2112 238 380 2113 268 376 2114 265 376 2115 265 342 2116 234 347 2117 238 380 2118 268 381 2119 269 377 2120 266 377 2121 266 376 2122 265 380 2123 268 377 2124 266 381 2125 269 382 2126 270 382 2127 270 378 2128 267 377 2129 266 378 2130 267 382 2131 270 383 2132 152 383 2133 152 379 2134 68 378 2135 267 352 2136 242 384 2137 271 380 2138 268 380 2139 268 347 2140 238 352 2141 242 384 2142 271 385 2143 272 381 2144 269 381 2145 269 380 2146 268 384 2147 271 381 2148 269 385 2149 272 386 2150 273 386 2151 273 382 2152 270 381 2153 269 382 2154 270 386 2155 273 387 2156 64 387 2157 64 383 2158 152 382 2159 270 352 2160 250 357 2161 249 388 2162 274 388 2163 274 384 2164 275 352 2165 250 384 2166 275 388 2167 274 389 2168 276 389 2169 276 385 2170 277 384 2171 275 389 2172 276 390 2173 278 386 2174 279 386 2175 279 385 2176 277 389 2177 276 390 2178 278 391 2179 183 387 2180 80 387 2181 80 386 2182 279 390 2183 278 357 2184 249 362 2185 254 392 2186 280 392 2187 280 388 2188 274 357 2189 249 388 2190 274 392 2191 280 393 2192 281 393 2193 281 389 2194 276 388 2195 274 393 2196 281 394 2197 282 390 2198 278 390 2199 278 389 2200 276 393 2201 281 394 2202 282 395 2203 76 391 2204 183 391 2205 183 390 2206 278 394 2207 282 362 2208 254 367 2209 258 396 2210 283 396 2211 283 392 2212 280 362 2213 254 392 2214 280 396 2215 283 397 2216 284 397 2217 284 393 2218 281 392 2219 280 397 2220 284 398 2221 285 394 2222 282 394 2223 282 393 2224 281 397 2225 284 398 2226 285 399 2227 174 395 2228 76 395 2229 76 394 2230 282 398 2231 285 367 2232 258 337 2233 230 369 2234 260 369 2235 260 396 2236 283 367 2237 258 396 2238 283 369 2239 260 371 2240 262 371 2241 262 397 2242 284 396 2243 283 371 2244 262 373 2245 264 398 2246 285 398 2247 285 397 2248 284 371 2249 262 373 2250 264 375 2251 72 399 2252 174 399 2253 174 398 2254 285 373 2255 264 400 2256 155 401 2257 156 402 2258 64 400 2259 155 403 2260 159 404 2261 160 404 2262 160 401 2263 156 400 2264 155 403 2265 159 405 2266 194 406 2267 195 406 2268 195 404 2269 160 403 2270 159 405 2271 194 407 2272 198 408 2273 135 408 2274 135 406 2275 195 405 2276 194 409 2277 162 400 2278 155 402 2279 152 409 2280 162 410 2281 164 403 2282 159 403 2283 159 400 2284 155 409 2285 162 410 2286 164 411 2287 200 405 2288 194 405 2289 194 403 2290 159 410 2291 164 411 2292 200 412 2293 139 407 2294 198 407 2295 198 405 2296 194 411 2297 200 413 2298 167 409 2299 162 402 2300 68 413 2301 167 414 2302 169 410 2303 164 410 2304 164 409 2305 162 413 2306 167 414 2307 169 415 2308 203 411 2309 200 411 2310 200 410 2311 164 414 2312 169 415 2313 203 416 2314 205 412 2315 139 412 2316 139 411 2317 200 415 2318 203 417 2319 171 413 2320 167 402 2321 165 417 2322 171 418 2323 173 414 2324 169 414 2325 169 413 2326 167 417 2327 171 418 2328 173 419 2329 207 415 2330 203 415 2331 203 414 2332 169 418 2333 173 419 2334 207 420 2335 143 416 2336 205 416 2337 205 415 2338 203 419 2339 207 421 2340 176 417 2341 171 402 2342 72 421 2343 176 422 2344 178 418 2345 173 418 2346 173 417 2347 171 421 2348 176 422 2349 178 423 2350 210 419 2351 207 419 2352 207 418 2353 173 422 2354 178 423 2355 210 424 2356 212 420 2357 143 420 2358 143 419 2359 207 423 2360 210 425 2361 180 421 2362 176 402 2363 174 425 2364 180 426 2365 182 422 2366 178 422 2367 178 421 2368 176 425 2369 180 426 2370 182 427 2371 214 423 2372 210 423 2373 210 422 2374 178 426 2375 182 427 2376 214 428 2377 147 424 2378 212 424 2379 212 423 2380 210 427 2381 214 429 2382 185 425 2383 180 402 2384 76 429 2385 185 430 2386 187 426 2387 182 426 2388 182 425 2389 180 429 2390 185 430 2391 187 431 2392 217 427 2393 214 427 2394 214 426 2395 182 430 2396 187 431 2397 217 432 2398 219 428 2399 147 428 2400 147 427 2401 214 431 2402 217 433 2403 189 429 2404 185 402 2405 183 433 2406 189 434 2407 191 430 2408 187 430 2409 187 429 2410 185 433 2411 189 434 2412 191 435 2413 221 431 2414 217 431 2415 217 430 2416 187 434 2417 191 435 2418 221 436 2419 151 432 2420 219 432 2421 219 431 2422 217 435 2423 221 437 2424 155 433 2425 156 402 2426 64 437 2427 155 438 2428 159 434 2429 160 434 2430 160 433 2431 156 437 2432 155 438 2433 159 439 2434 194 435 2435 195 435 2436 195 434 2437 160 438 2438 159 439 2439 194 440 2440 198 436 2441 135 436 2442 135 435 2443 195 439 2444 194 441 2445 162 437 2446 155 402 2447 152 441 2448 162 442 2449 164 438 2450 159 438 2451 159 437 2452 155 441 2453 162 442 2454 164 443 2455 200 439 2456 194 439 2457 194 438 2458 159 442 2459 164 443 2460 200 444 2461 139 440 2462 198 440 2463 198 439 2464 194 443 2465 200 445 2466 167 441 2467 162 402 2468 68 445 2469 167 446 2470 169 442 2471 164 442 2472 164 441 2473 162 445 2474 167 446 2475 169 447 2476 203 443 2477 200 443 2478 200 442 2479 164 446 2480 169 447 2481 203 448 2482 205 444 2483 139 444 2484 139 443 2485 200 447 2486 203 449 2487 171 445 2488 167 402 2489 165 449 2490 171 450 2491 173 446 2492 169 446 2493 169 445 2494 167 449 2495 171 450 2496 173 451 2497 207 447 2498 203 447 2499 203 446 2500 169 450 2501 173 451 2502 207 452 2503 143 448 2504 205 448 2505 205 447 2506 203 451 2507 207 453 2508 176 449 2509 171 402 2510 72 453 2511 176 454 2512 178 450 2513 173 450 2514 173 449 2515 171 453 2516 176 454 2517 178 455 2518 210 451 2519 207 451 2520 207 450 2521 173 454 2522 178 455 2523 210 456 2524 212 452 2525 143 452 2526 143 451 2527 207 455 2528 210 457 2529 180 453 2530 176 402 2531 174 457 2532 180 458 2533 182 454 2534 178 454 2535 178 453 2536 176 457 2537 180 458 2538 182 459 2539 214 455 2540 210 455 2541 210 454 2542 178 458 2543 182 459 2544 214 460 2545 147 456 2546 212 456 2547 212 455 2548 210 459 2549 214 461 2550 185 457 2551 180 402 2552 76 461 2553 185 462 2554 187 458 2555 182 458 2556 182 457 2557 180 461 2558 185 462 2559 187 463 2560 217 459 2561 214 459 2562 214 458 2563 182 462 2564 187 463 2565 217 464 2566 219 460 2567 147 460 2568 147 459 2569 214 463 2570 217 401 2571 189 461 2572 185 402 2573 183 401 2574 189 404 2575 191 462 2576 187 462 2577 187 461 2578 185 401 2579 189 404 2580 191 406 2581 221 463 2582 217 463 2583 217 462 2584 187 404 2585 191 406 2586 221 408 2587 151 464 2588 219 464 2589 219 463 2590 217 406 2591 221 407 2592 152 465 2593 155 466 2594 156 466 2595 156 408 2596 64 407 2597 152 465 2598 155 467 2599 159 468 2600 160 468 2601 160 466 2602 156 465 2603 155 467 2604 159 469 2605 194 470 2606 195 470 2607 195 468 2608 160 467 2609 159 469 2610 194 471 2611 198 472 2612 135 472 2613 135 470 2614 195 469 2615 194 412 2616 68 473 2617 162 465 2618 155 465 2619 155 407 2620 152 412 2621 68 473 2622 162 474 2623 164 467 2624 159 467 2625 159 465 2626 155 473 2627 162 474 2628 164 475 2629 200 469 2630 194 469 2631 194 467 2632 159 474 2633 164 475 2634 200 476 2635 139 471 2636 198 471 2637 198 469 2638 194 475 2639 200 416 2640 165 477 2641 167 473 2642 162 473 2643 162 412 2644 68 416 2645 165 477 2646 167 478 2647 169 474 2648 164 474 2649 164 473 2650 162 477 2651 167 478 2652 169 479 2653 203 475 2654 200 475 2655 200 474 2656 164 478 2657 169 479 2658 203 480 2659 205 476 2660 139 476 2661 139 475 2662 200 479 2663 203 420 2664 72 481 2665 171 477 2666 167 477 2667 167 416 2668 165 420 2669 72 477 2670 167 481 2671 171 482 2672 173 482 2673 173 478 2674 169 477 2675 167 478 2676 169 482 2677 173 483 2678 207 483 2679 207 479 2680 203 478 2681 169 483 2682 207 484 2683 143 480 2684 205 480 2685 205 479 2686 203 483 2687 207 424 2688 174 485 2689 176 481 2690 171 481 2691 171 420 2692 72 424 2693 174 485 2694 176 486 2695 178 482 2696 173 482 2697 173 481 2698 171 485 2699 176 486 2700 178 487 2701 210 483 2702 207 483 2703 207 482 2704 173 486 2705 178 487 2706 210 488 2707 212 484 2708 143 484 2709 143 483 2710 207 487 2711 210 428 2712 76 489 2713 180 485 2714 176 485 2715 176 424 2716 174 428 2717 76 489 2718 180 490 2719 182 486 2720 178 486 2721 178 485 2722 176 489 2723 180 490 2724 182 491 2725 214 487 2726 210 487 2727 210 486 2728 178 490 2729 182 491 2730 214 492 2731 147 488 2732 212 488 2733 212 487 2734 210 491 2735 214 432 2736 183 493 2737 185 489 2738 180 489 2739 180 428 2740 76 432 2741 183 493 2742 185 494 2743 187 490 2744 182 490 2745 182 489 2746 180 493 2747 185 494 2748 187 495 2749 217 491 2750 214 491 2751 214 490 2752 182 494 2753 187 495 2754 217 496 2755 219 492 2756 147 492 2757 147 491 2758 214 495 2759 217 436 2760 80 497 2761 189 493 2762 185 493 2763 185 432 2764 183 436 2765 80 493 2766 185 497 2767 189 498 2768 191 498 2769 191 494 2770 187 493 2771 185 494 2772 187 498 2773 191 499 2774 221 499 2775 221 495 2776 217 494 2777 187 499 2778 221 500 2779 151 496 2780 219 496 2781 219 495 2782 217 499 2783 221 440 2784 152 501 2785 155 497 2786 156 497 2787 156 436 2788 64 440 2789 152 501 2790 155 502 2791 159 498 2792 160 498 2793 160 497 2794 156 501 2795 155 502 2796 159 503 2797 194 499 2798 195 499 2799 195 498 2800 160 502 2801 159 503 2802 194 504 2803 198 500 2804 135 500 2805 135 499 2806 195 503 2807 194 444 2808 68 505 2809 162 501 2810 155 501 2811 155 440 2812 152 444 2813 68 505 2814 162 506 2815 164 502 2816 159 502 2817 159 501 2818 155 505 2819 162 506 2820 164 507 2821 200 503 2822 194 503 2823 194 502 2824 159 506 2825 164 507 2826 200 508 2827 139 504 2828 198 504 2829 198 503 2830 194 507 2831 200 448 2832 165 509 2833 167 505 2834 162 505 2835 162 444 2836 68 448 2837 165 509 2838 167 510 2839 169 506 2840 164 506 2841 164 505 2842 162 509 2843 167 510 2844 169 511 2845 203 507 2846 200 507 2847 200 506 2848 164 510 2849 169 511 2850 203 512 2851 205 508 2852 139 508 2853 139 507 2854 200 511 2855 203 452 2856 72 513 2857 171 509 2858 167 509 2859 167 448 2860 165 452 2861 72 509 2862 167 513 2863 171 514 2864 173 514 2865 173 510 2866 169 509 2867 167 510 2868 169 514 2869 173 515 2870 207 515 2871 207 511 2872 203 510 2873 169 515 2874 207 516 2875 143 512 2876 205 512 2877 205 511 2878 203 515 2879 207 456 2880 174 517 2881 176 513 2882 171 513 2883 171 452 2884 72 456 2885 174 517 2886 176 518 2887 178 514 2888 173 514 2889 173 513 2890 171 517 2891 176 518 2892 178 519 2893 210 515 2894 207 515 2895 207 514 2896 173 518 2897 178 519 2898 210 520 2899 212 516 2900 143 516 2901 143 515 2902 207 519 2903 210 460 2904 76 521 2905 180 517 2906 176 517 2907 176 456 2908 174 460 2909 76 521 2910 180 522 2911 182 518 2912 178 518 2913 178 517 2914 176 521 2915 180 522 2916 182 523 2917 214 519 2918 210 519 2919 210 518 2920 178 522 2921 182 523 2922 214 524 2923 147 520 2924 212 520 2925 212 519 2926 210 523 2927 214 464 2928 183 525 2929 185 521 2930 180 521 2931 180 460 2932 76 464 2933 183 525 2934 185 526 2935 187 522 2936 182 522 2937 182 521 2938 180 525 2939 185 526 2940 187 527 2941 217 523 2942 214 523 2943 214 522 2944 182 526 2945 187 527 2946 217 528 2947 219 524 2948 147 524 2949 147 523 2950 214 527 2951 217 408 2952 80 466 2953 189 525 2954 185 525 2955 185 464 2956 183 408 2957 80 525 2958 185 466 2959 189 468 2960 191 468 2961 191 526 2962 187 525 2963 185 526 2964 187 468 2965 191 470 2966 221 470 2967 221 527 2968 217 526 2969 187 470 2970 221 472 2971 151 528 2972 219 528 2973 219 527 2974 217 470 2975 221

+
+
+
+ + + 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 -1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.0000001.000000 + 30.0000000.0000003.333333 + + + + + +